fx-form-builder-wrapper 0.0.53 → 0.0.55

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 (59) hide show
  1. package/esm2022/fx-form-builder-wrapper.mjs +5 -0
  2. package/esm2022/lib/components/dynamic-table/dynamic-table.component.mjs +235 -0
  3. package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +103 -0
  4. package/esm2022/lib/components/toggle/toggle.component.mjs +33 -0
  5. package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +38 -0
  6. package/esm2022/lib/components/uploader/uploader.component.mjs +58 -0
  7. package/esm2022/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.mjs +42 -0
  8. package/esm2022/lib/fx-builder-wrapper.component.mjs +79 -0
  9. package/esm2022/lib/fx-builder-wrapper.service.mjs +44 -0
  10. package/esm2022/lib/panel/configuration-panel/configuration-panel.component.mjs +117 -0
  11. package/esm2022/lib/panel/settings-panel/settings-panel.component.mjs +24 -0
  12. package/esm2022/public-api.mjs +7 -0
  13. package/fesm2022/fx-form-builder-wrapper.mjs +718 -0
  14. package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -0
  15. package/index.d.ts +5 -0
  16. package/lib/components/dynamic-table/dynamic-table.component.d.ts +52 -0
  17. package/lib/components/fx-form-component/fx-form-component.component.d.ts +19 -0
  18. package/lib/components/toggle/toggle.component.d.ts +13 -0
  19. package/lib/components/toggle-button/toggle-button.component.d.ts +15 -0
  20. package/lib/components/uploader/uploader.component.d.ts +16 -0
  21. package/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.d.ts +17 -0
  22. package/lib/fx-builder-wrapper.component.d.ts +19 -0
  23. package/lib/fx-builder-wrapper.service.d.ts +14 -0
  24. package/lib/panel/configuration-panel/configuration-panel.component.d.ts +27 -0
  25. package/lib/panel/settings-panel/settings-panel.component.d.ts +10 -0
  26. package/package.json +29 -16
  27. package/public-api.d.ts +3 -0
  28. package/ng-package.json +0 -9
  29. package/src/lib/components/button/button.component.css +0 -0
  30. package/src/lib/components/button/button.component.html +0 -1
  31. package/src/lib/components/button/button.component.ts +0 -24
  32. package/src/lib/components/dynamic-table/dynamic-table.component.css +0 -31
  33. package/src/lib/components/dynamic-table/dynamic-table.component.html +0 -69
  34. package/src/lib/components/dynamic-table/dynamic-table.component.ts +0 -258
  35. package/src/lib/components/fx-form-component/fx-form-component.component.ts +0 -86
  36. package/src/lib/components/toggle/toggle.component.css +0 -51
  37. package/src/lib/components/toggle/toggle.component.html +0 -12
  38. package/src/lib/components/toggle/toggle.component.ts +0 -33
  39. package/src/lib/components/toggle-button/toggle-button.component.css +0 -22
  40. package/src/lib/components/toggle-button/toggle-button.component.html +0 -10
  41. package/src/lib/components/toggle-button/toggle-button.component.ts +0 -40
  42. package/src/lib/components/uploader/uploader.component.css +0 -49
  43. package/src/lib/components/uploader/uploader.component.html +0 -23
  44. package/src/lib/components/uploader/uploader.component.ts +0 -59
  45. package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.html +0 -78
  46. package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.ts +0 -44
  47. package/src/lib/form-builder.css +0 -9
  48. package/src/lib/fx-builder-wrapper.component.ts +0 -68
  49. package/src/lib/fx-builder-wrapper.service.ts +0 -38
  50. package/src/lib/panel/configuration-panel/configuration-panel.component.css +0 -154
  51. package/src/lib/panel/configuration-panel/configuration-panel.component.html +0 -162
  52. package/src/lib/panel/configuration-panel/configuration-panel.component.ts +0 -120
  53. package/src/lib/panel/settings-panel/settings-panel.component.css +0 -30
  54. package/src/lib/panel/settings-panel/settings-panel.component.html +0 -28
  55. package/src/lib/panel/settings-panel/settings-panel.component.ts +0 -23
  56. package/src/public-api.ts +0 -8
  57. package/tsconfig.lib.json +0 -15
  58. package/tsconfig.lib.prod.json +0 -13
  59. package/tsconfig.spec.json +0 -15
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtZm9ybS1idWlsZGVyLXdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2Z4LWZvcm0tYnVpbGRlci13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,235 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { HttpClient } from '@angular/common/http';
5
+ import { FxBaseComponent, FxMode, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
6
+ import { SettingsPanelComponent } from '../../panel/settings-panel/settings-panel.component';
7
+ import { Subject, takeUntil } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../fx-builder-wrapper.service";
10
+ import * as i2 from "@angular/common";
11
+ import * as i3 from "@angular/forms";
12
+ export class DynamicTableComponent extends FxBaseComponent {
13
+ cdr;
14
+ fxBuilderWrapperService;
15
+ tableRows = [];
16
+ previewType = FxMode.VIEW;
17
+ tableConfig = {
18
+ columns: [
19
+ { header: 'Column 1', cellType: 'text' },
20
+ { header: 'Column 2', cellType: 'text' },
21
+ { header: 'Column 3', cellType: 'text' },
22
+ { header: 'Column 4', cellType: 'text' },
23
+ { header: 'Column 5', cellType: 'text' },
24
+ ],
25
+ };
26
+ destroy$ = new Subject();
27
+ uploadedImages = [];
28
+ tableFormControl = new FormControl();
29
+ smartDropdownOptions = {};
30
+ http = inject(HttpClient);
31
+ constructor(cdr, fxBuilderWrapperService) {
32
+ super(cdr);
33
+ this.cdr = cdr;
34
+ this.fxBuilderWrapperService = fxBuilderWrapperService;
35
+ this.onInit.subscribe((fxData) => {
36
+ this._register(this.tableFormControl);
37
+ });
38
+ }
39
+ ngOnInit() {
40
+ this.fxBuilderWrapperService.variables$.pipe(takeUntil(this.destroy$)).subscribe((variables) => {
41
+ if (variables) {
42
+ let dynamicTableValues;
43
+ for (const [key, value] of Object.entries(variables)) {
44
+ if (key.includes('dynamic-table')) {
45
+ dynamicTableValues = value;
46
+ }
47
+ }
48
+ if (Object.keys(dynamicTableValues).length) {
49
+ // const fileHeaderName = dynamicTableValues?.columns.find((f: any) => f.cellType === 'file-upload')?.header;
50
+ const fileHeaderName = dynamicTableValues?.columns.find((f) => f.cellType === 'file-upload')?.header;
51
+ dynamicTableValues?.rows?.forEach((item, index) => {
52
+ // // this.uploadedImages[index] = item[fileHeaderName] ? item[fileHeaderName]: null;
53
+ // const fileUrl = item[fileHeaderName]; // Get the file URL
54
+ // this.uploadedImages[index] = fileUrl
55
+ // ? { result: fileUrl, file: null } // Store the URL as 'result'
56
+ // : null;
57
+ if (item[fileHeaderName]) {
58
+ this.parseUrls(item[fileHeaderName], index);
59
+ }
60
+ });
61
+ console.log("uploadedImages", this.uploadedImages);
62
+ console.log("dynamictable", dynamicTableValues);
63
+ this.tableConfig = dynamicTableValues;
64
+ this.fxData.value = this.tableConfig;
65
+ // this.tableFormControl.reset();
66
+ // this.tableFormControl.setValue(this.tableConfig);
67
+ this.tableFormControl = new FormControl();
68
+ setTimeout(() => {
69
+ this.tableFormControl.patchValue(this.tableConfig, { emitEvent: true });
70
+ console.log("tableFormControl", this.tableFormControl);
71
+ this.cdr.detectChanges();
72
+ }, 50);
73
+ }
74
+ }
75
+ });
76
+ }
77
+ ngAfterViewInit() {
78
+ setTimeout(() => {
79
+ if (this.fxData?.value && Object.keys(this.fxData?.value)?.length != 0) {
80
+ this.tableConfig = this.fxData.value;
81
+ this.fetchSmartDropdownData();
82
+ }
83
+ }, 100);
84
+ }
85
+ fetchSmartDropdownData() {
86
+ this.tableConfig.columns
87
+ .filter((column) => column.cellType === 'smart-dropdown' && column?.apiUrl)
88
+ .forEach((column) => {
89
+ this.http.get(column.apiUrl).subscribe((response) => {
90
+ this.smartDropdownOptions[column.header] = response.map((item) => ({
91
+ value: item[column.valueKey],
92
+ name: item[column.labelKey],
93
+ }));
94
+ });
95
+ });
96
+ }
97
+ uploadImage(event, rowIndex) {
98
+ const file = event.target.files?.[0];
99
+ if (file) {
100
+ const reader = new FileReader();
101
+ reader.onload = () => {
102
+ this.uploadedImages[rowIndex] = {
103
+ result: reader.result,
104
+ file: file
105
+ };
106
+ this.tableConfig.rows[rowIndex][this.tableConfig.columns.find((f) => f.cellType === 'file-upload')?.header] = file;
107
+ console.log("tableConfig", this.tableConfig);
108
+ };
109
+ reader.readAsDataURL(file);
110
+ }
111
+ }
112
+ settings() {
113
+ return [
114
+ new FxStringSetting({ key: 'column-size', $title: 'No. of columns', value: 1 }),
115
+ new FxStringSetting({ key: 'table-config', $title: 'Table Configuration', value: {} }),
116
+ ];
117
+ }
118
+ validations() {
119
+ return [FxValidatorService.required];
120
+ }
121
+ getArray(count) {
122
+ return Array.from({ length: count });
123
+ }
124
+ onChangeConfiguration(event) {
125
+ const columns = event.columns.map((col) => {
126
+ return {
127
+ header: col?.header,
128
+ cellType: col?.cellType,
129
+ placeholder: col?.placeholder,
130
+ options: col?.options,
131
+ apiUrl: col?.apiUrl,
132
+ valueKey: col?.valueKey,
133
+ labelKey: col?.labelKey,
134
+ className: col?.className,
135
+ apiKey: col?.apiKey
136
+ };
137
+ });
138
+ if (!event?.enableAPI) {
139
+ this.tableConfig.columns = columns;
140
+ // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => ({ name: `SKU-${index + 1}`, age: index % 2 !== 0, gender: 'male' }))
141
+ // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => {
142
+ // const rows = columns.map((c: any) => {
143
+ // return {
144
+ // c?.header: null
145
+ // }
146
+ // })
147
+ // return rows
148
+ // })
149
+ this.tableConfig.rows = Array.from({ length: +event?.rows }, (_, index) => {
150
+ return columns.reduce((acc, c) => {
151
+ acc[c?.header] = ''; // Initialize each column key with null
152
+ return acc;
153
+ }, {});
154
+ });
155
+ this.fetchSmartDropdownData();
156
+ }
157
+ if (event?.enableAPI) {
158
+ this.drawTable(event, columns);
159
+ this.tableConfig = {
160
+ columns: columns,
161
+ rows: []
162
+ };
163
+ }
164
+ this.fxData.value = this.tableConfig;
165
+ this.tableFormControl.reset();
166
+ this.tableFormControl.setValue(this.tableConfig);
167
+ }
168
+ updateSettings() {
169
+ if (this.fxData.settings) {
170
+ for (let setting of this.fxData.settings) {
171
+ if (setting.key === 'table-config') {
172
+ setting.value = this.tableConfig;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ drawTable(event, columns) {
178
+ let rows;
179
+ this.http.get(event.api).subscribe((res) => {
180
+ if (res) {
181
+ rows = res.map((item) => {
182
+ const newObj = {};
183
+ columns.forEach((col) => {
184
+ newObj[col.header] = item[col.apiKey];
185
+ });
186
+ return newObj;
187
+ });
188
+ this.tableConfig = {
189
+ columns,
190
+ rows
191
+ };
192
+ this.fxData.value = this.tableConfig;
193
+ this.tableFormControl.reset();
194
+ this.tableFormControl.setValue(this.tableConfig);
195
+ }
196
+ });
197
+ }
198
+ deleteFile(file, index) {
199
+ this.uploadedImages.splice(index, 1, null);
200
+ this.tableConfig.rows[index][this.tableConfig.columns.find((f) => f.cellType === 'file-upload')?.header] = null;
201
+ console.log("tableConfig", this.tableConfig);
202
+ this.tableFormControl.setValue(this.tableConfig);
203
+ }
204
+ parseUrls(url, index) {
205
+ this.http.get(url, { responseType: 'blob' }).subscribe({
206
+ next: (imageBlob) => {
207
+ const imageURL = URL.createObjectURL(imageBlob);
208
+ this.uploadedImages[index] = {
209
+ result: imageURL,
210
+ file: null
211
+ };
212
+ },
213
+ error: (error) => {
214
+ console.error('Error fetching image:', error);
215
+ }
216
+ });
217
+ }
218
+ ngOnDestroy() {
219
+ this.destroy$.next(true);
220
+ this.destroy$.complete();
221
+ }
222
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
223
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicTableComponent, isStandalone: true, selector: "fx-dynamic-table", inputs: { tableRows: "tableRows", previewType: "previewType", tableConfig: "tableConfig" }, usesInheritance: true, ngImport: i0, template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:186px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "component", type: SettingsPanelComponent, selector: "fx-settings-panel", outputs: ["configuration"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
224
+ }
225
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, decorators: [{
226
+ type: Component,
227
+ args: [{ selector: 'fx-dynamic-table', standalone: true, imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule], template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:186px!important}\n"] }]
228
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FxBuilderWrapperService }], propDecorators: { tableRows: [{
229
+ type: Input
230
+ }], previewType: [{
231
+ type: Input
232
+ }], tableConfig: [{
233
+ type: Input
234
+ }] } });
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXdCekMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7SUFtQnBDO0lBQWdDO0lBbEIzQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLFdBQVcsR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLFdBQVcsR0FBUTtRQUMxQixPQUFPLEVBQUU7WUFDUCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZ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SUFDM0IsQ0FBQzt3R0FqT1UscUJBQXFCOzRGQUFyQixxQkFBcUIsK0xDL0JsQyw0M0lBb0VvQiwwaUJEMUNSLFlBQVksMmJBQUUsV0FBVyxnakRBQUUsc0JBQXNCLHlGQUFFLG1CQUFtQjs7NEZBS3JFLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQzs0SEFNeEUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeE1vZGUsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uQ29uZmlnIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBjZWxsVHlwZTogJ3RleHQnIHwgJ2lucHV0LXRleHQnIHwgJ2lucHV0LW51bWJlcicgfCAnZHJvcGRvd24nIHwgJ3NtYXJ0LWRyb3Bkb3duJyB8ICdjaGVja2JveCcgfCAncmFkaW8nIHwgJ3JhZGlvLWdyb3VwJyB8ICdmaWxlLXVwbG9hZCcgfCAndGV4dGFyZWEnO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcclxuICBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgdmFsdWVLZXk/OiBzdHJpbmc7XHJcbiAgbGFiZWxLZXk/OiBzdHJpbmc7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uQ29uZmlnW107XHJcbiAgcm93czogYW55W107XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1keW5hbWljLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZXR0aW5nc1BhbmVsQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93czogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdUeXBlOiBGeE1vZGUgPSBGeE1vZGUuVklFVztcclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55ID0ge1xyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAxJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAyJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAzJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA0JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA1JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxufTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHVwbG9hZGVkSW1hZ2VzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBGaWxlIHwgbnVsbD4gfCBudWxsPiA9IFtdO1xyXG5cclxuICBwdWJsaWMgdGFibGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBzbWFydERyb3Bkb3duT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50YWJsZUZvcm1Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgbGV0IGR5bmFtaWNUYWJsZVZhbHVlczogYW55O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdkeW5hbWljLXRhYmxlJykpIHtcclxuICAgICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNUYWJsZVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVIZWFkZXJOYW1lID0gZHluYW1pY1RhYmxlVmFsdWVzPy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUhlYWRlck5hbWUgPSBkeW5hbWljVGFibGVWYWx1ZXM/LmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyO1xyXG4gICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXM/LnJvd3M/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIC8vIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0gaXRlbVtmaWxlSGVhZGVyTmFtZV0gPyBpdGVtW2ZpbGVIZWFkZXJOYW1lXTogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaWxlVXJsID0gaXRlbVtmaWxlSGVhZGVyTmFtZV07IC8vIEdldCB0aGUgZmlsZSBVUkxcclxuXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy51cGxvYWRlZEltYWdlc1tpbmRleF0gPSBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgLy8gICA/IHsgcmVzdWx0OiBmaWxlVXJsLCBmaWxlOiBudWxsIH0gLy8gU3RvcmUgdGhlIFVSTCBhcyAncmVzdWx0J1xyXG4gICAgICAgICAgICAgIC8vICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2ZpbGVIZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybHMoaXRlbVtmaWxlSGVhZGVyTmFtZV0sIGluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRJbWFnZXNcIiwgdGhpcy51cGxvYWRlZEltYWdlcyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHluYW1pY3RhYmxlXCIsIGR5bmFtaWNUYWJsZVZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkeW5hbWljVGFibGVWYWx1ZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICAgICAgLy8gdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgLy8gRGVsYXkgdG8gZW5zdXJlIHByb3BlciBwYXRjaGluZ1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudGFibGVDb25maWcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFibGVGb3JtQ29udHJvbFwiLHRoaXMudGFibGVGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZ4RGF0YT8udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5meERhdGE/LnZhbHVlKT8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5meERhdGEudmFsdWU7XHJcbiAgICAgICAgdGhpcy5mZXRjaFNtYXJ0RHJvcGRvd25EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMClcclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIGZldGNoU21hcnREcm9wZG93bkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4gY29sdW1uLmNlbGxUeXBlID09PSAnc21hcnQtZHJvcGRvd24nICYmIGNvbHVtbj8uYXBpVXJsKVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pihjb2x1bW4uYXBpVXJsISkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdID0gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtW2NvbHVtbi52YWx1ZUtleSFdLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2NvbHVtbi5sYWJlbEtleSFdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRJbWFnZShldmVudDogRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiByZWFkZXIucmVzdWx0IGFzIHN0cmluZyxcclxuICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW3Jvd0luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IGZpbGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NvbHVtbi1zaXplJywgJHRpdGxlOiAnTm8uIG9mIGNvbHVtbnMnLCB2YWx1ZTogMSB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3RhYmxlLWNvbmZpZycsICR0aXRsZTogJ1RhYmxlIENvbmZpZ3VyYXRpb24nLCB2YWx1ZToge30gfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcnJheShjb3VudDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ29uZmlndXJhdGlvbihldmVudDogYW55KTogdm9pZCB7IFxyXG4gICAgY29uc3QgY29sdW1ucyA9IGV2ZW50LmNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhlYWRlcjogY29sPy5oZWFkZXIsXHJcbiAgICAgICAgY2VsbFR5cGU6IGNvbD8uY2VsbFR5cGUsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbD8ucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgb3B0aW9uczogY29sPy5vcHRpb25zLFxyXG4gICAgICAgIGFwaVVybDogY29sPy5hcGlVcmwsXHJcbiAgICAgICAgdmFsdWVLZXk6IGNvbD8udmFsdWVLZXksXHJcbiAgICAgICAgbGFiZWxLZXk6IGNvbD8ubGFiZWxLZXksXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjb2w/LmNsYXNzTmFtZSxcclxuICAgICAgICBhcGlLZXk6IGNvbD8uYXBpS2V5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYoIWV2ZW50Py5lbmFibGVBUEkpIHtcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgLy8gdGhpcy50YWJsZUNvbmZpZy5yb3dzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogK2V2ZW50Py5yb3dzIH0sIChlLCBpbmRleCkgPT4gKHsgbmFtZTogYFNLVS0ke2luZGV4ICsgMX1gLCBhZ2U6IGluZGV4ICUgMiAhPT0gMCwgZ2VuZGVyOiAnbWFsZScgfSkpXHJcbiAgICAgIC8vIHRoaXMudGFibGVDb25maWcucm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICtldmVudD8ucm93cyB9LCAoZSwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gICBjb25zdCByb3dzID0gY29sdW1ucy5tYXAoKGM6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgYz8uaGVhZGVyOiBudWxsXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gICByZXR1cm4gcm93c1xyXG4gICAgICAvLyB9KVxyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnLnJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiArZXZlbnQ/LnJvd3MgfSwgKF8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2M6IGFueSwgYzogYW55KSA9PiB7XHJcbiAgICAgICAgICBhY2NbYz8uaGVhZGVyXSA9ICcnOyAvLyBJbml0aWFsaXplIGVhY2ggY29sdW1uIGtleSB3aXRoIG51bGxcclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZmV0Y2hTbWFydERyb3Bkb3duRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQ/LmVuYWJsZUFQSSkge1xyXG4gICAgICB0aGlzLmRyYXdUYWJsZShldmVudCwgY29sdW1ucylcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgIHJvd3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNldHRpbmdzKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGZvcihsZXQgc2V0dGluZyBvZiB0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGlmKHNldHRpbmcua2V5ID09PSAndGFibGUtY29uZmlnJyl7XHJcbiAgICAgICAgc2V0dGluZy52YWx1ZSA9IHRoaXMudGFibGVDb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZHJhd1RhYmxlKGV2ZW50OiBhbnksIGNvbHVtbnM6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHJvd3M7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGV2ZW50LmFwaSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMpIHtcclxuICAgICAgICByb3dzID0gcmVzLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbmV3T2JqW2NvbC5oZWFkZXJdID0gaXRlbVtjb2wuYXBpS2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHJvd3NcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEsIG51bGwpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW2luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IG51bGw7XHJcbiAgICBjb25zb2xlLmxvZyhcInRhYmxlQ29uZmlnXCIsIHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudGFibGVDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlVXJscyh1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGltYWdlQmxvYjogQmxvYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZUJsb2IpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiBpbWFnZVVSTCxcclxuICAgICAgICAgIGZpbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW1hZ2U6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGZ4LXNldHRpbmdzLXBhbmVsIFtmeERhdGFdPVwiZnhEYXRhXCIgKGNvbmZpZ3VyYXRpb24pPVwib25DaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudClcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJmeERhdGFcIj5cclxuICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImZvcm1CdWlsZGVyX2R5bmFtaWNfdGFibGVcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnNcIj57eyBjb2x1bW4uaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlQ29uZmlnLnJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uY2VsbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj57e3Jvd1tjb2x1bW4uaGVhZGVyXX19PC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dC10ZXh0J1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0LW51bWJlcidcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbj8ub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24/Lm9wdGlvblZhbHVlXCI+ICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5vcHRpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCIgKm5nU3dpdGNoQ2FzZT1cIidzbWFydC1kcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdXCIgW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJyYWRpby17e3Jvd0luZGV4fX1cIiBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogMTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIncmFkaW8tZ3JvdXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJyYWRpby1ncm91cC17e3Jvd0luZGV4fX1cIiB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwib3B0aW9uPy5vcHRpb25OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5vcHRpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZS11cGxvYWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBlbmQ7anVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgIHdpZHRoPVwiMTAwXCIgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiIFtzcmNdPVwidXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdPy5bJ3Jlc3VsdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXBsb2FkZWQgSW1hZ2VcIiAoY2xpY2spPVwiZGVsZXRlRmlsZSh1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0sIHJvd0luZGV4KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiAjdXBsb2FkRmlsZSAgaGlkZGVuIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudCwgcm93SW5kZXgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXBsb2FkRmlsZS5jbGljaygpXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBuYW1lPVwiXCIgaWQ9XCJcIiBjb2xzPVwiMzBcIiByb3dzPVwiMlwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG48L2Z4LXNldHRpbmdzLXBhbmVsPiJdfQ==
@@ -0,0 +1,103 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
+ import { FxFormComponent } from '@instantsys-labs/fx';
4
+ import { DispatchToClinicComponent } from '../../custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';
5
+ import { DynamicTableComponent } from '../dynamic-table/dynamic-table.component';
6
+ import { ToggleButtonComponent } from '../toggle-button/toggle-button.component';
7
+ import { UploaderComponent } from '../uploader/uploader.component';
8
+ import { ToggleComponent } from '../toggle/toggle.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../fx-builder-wrapper.service";
11
+ export class FxFormWrapperComponent {
12
+ fxWrapperService;
13
+ form;
14
+ fxForm;
15
+ variables;
16
+ fxFormSubmit = new EventEmitter();
17
+ constructor(fxWrapperService) {
18
+ this.fxWrapperService = fxWrapperService;
19
+ this.registerCustomComponents();
20
+ }
21
+ ngOnChanges(changes) {
22
+ // if('variables' in changes && !changes['fxForm']) {
23
+ // this.fxWrapperService.variables$.next(this.variables);
24
+ // }
25
+ if ('variables' in changes) {
26
+ this.fxWrapperService.variables$.next(this.variables);
27
+ }
28
+ }
29
+ ngOnInit() {
30
+ // if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {
31
+ // this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);
32
+ // }
33
+ // if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {
34
+ // this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);
35
+ // }
36
+ // if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {
37
+ // this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);
38
+ // }
39
+ // if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {
40
+ // this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);
41
+ // }
42
+ // if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {
43
+ // this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);
44
+ // }
45
+ }
46
+ registerCustomComponents() {
47
+ const components = [
48
+ { name: 'Dispatch To Clinic', key: 'dispatch-to-clinic', component: DispatchToClinicComponent },
49
+ { name: 'Dynamic Table', key: 'dynamic-table', component: DynamicTableComponent },
50
+ { name: 'Toggle Button', key: 'toggle-button', component: ToggleButtonComponent },
51
+ { name: 'Uploader', key: 'uploader', component: UploaderComponent },
52
+ { name: 'Toggle', key: 'toggle', component: ToggleComponent }
53
+ ];
54
+ components.forEach(({ name, key, component }) => {
55
+ if (!this.fxWrapperService.getComponent(key)) {
56
+ this.fxWrapperService.registerCustomComponent(name, key, component);
57
+ }
58
+ });
59
+ }
60
+ onSubmit(event) {
61
+ this.fxFormSubmit.emit(event);
62
+ }
63
+ submit() {
64
+ this.form.submit();
65
+ }
66
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxFormWrapperComponent, deps: [{ token: i1.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
67
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FxFormWrapperComponent, isStandalone: true, selector: "fx-form-component", inputs: { fxForm: "fxForm", variables: "variables" }, outputs: { fxFormSubmit: "fxFormSubmit" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
68
+ <fx-form
69
+ [fxForm]="fxForm"
70
+ [value]="variables"
71
+ (onSubmit)="onSubmit($event)"
72
+ #form
73
+ >
74
+ </fx-form>
75
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FxFormComponent, selector: "fx-form", inputs: ["formGroup", "fxForm", "value", "mode"], outputs: ["onSubmit"] }] });
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxFormWrapperComponent, decorators: [{
78
+ type: Component,
79
+ args: [{
80
+ selector: 'fx-form-component',
81
+ standalone: true,
82
+ imports: [CommonModule, FxFormComponent],
83
+ template: `
84
+ <fx-form
85
+ [fxForm]="fxForm"
86
+ [value]="variables"
87
+ (onSubmit)="onSubmit($event)"
88
+ #form
89
+ >
90
+ </fx-form>
91
+ `,
92
+ }]
93
+ }], ctorParameters: () => [{ type: i1.FxBuilderWrapperService }], propDecorators: { form: [{
94
+ type: ViewChild,
95
+ args: ['form']
96
+ }], fxForm: [{
97
+ type: Input
98
+ }], variables: [{
99
+ type: Input
100
+ }], fxFormSubmit: [{
101
+ type: Output
102
+ }] } });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtZm9ybS1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9meC1mb3JtLWNvbXBvbmVudC9meC1mb3JtLWNvbXBvbmVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFVLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBRWxILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBZ0I3RCxNQUFNLE9BQU8sc0JBQXNCO0lBTWI7SUFMRCxJQUFJLENBQW1CO0lBQ2pDLE1BQU0sQ0FBVTtJQUNoQixTQUFTLENBQU07SUFDZCxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUVqRCxZQUFvQixnQkFBeUM7UUFBekMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUMzRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUssV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLHFEQUFxRDtRQUNyRCwyREFBMkQ7UUFDM0QsSUFBSTtRQUNKLElBQUksV0FBVyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYiw0RUFBNEU7UUFDNUUsMEhBQTBIO1FBQzFILElBQUk7UUFDSix1RUFBdUU7UUFDdkUsNEdBQTRHO1FBQzVHLElBQUk7UUFDSix1RUFBdUU7UUFDdkUsNEdBQTRHO1FBQzVHLElBQUk7UUFDSixrRUFBa0U7UUFDbEUsOEZBQThGO1FBQzlGLElBQUk7UUFDSixnRUFBZ0U7UUFDaEUsd0ZBQXdGO1FBQ3hGLElBQUk7SUFDTixDQUFDO0lBR08sd0JBQXdCO1FBQzlCLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUU7WUFDL0YsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO1lBQ2pGLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtZQUNqRixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7WUFDbkUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtTQUM5RCxDQUFDO1FBRUYsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckIsQ0FBQzt3R0E1RFUsc0JBQXNCOzRGQUF0QixzQkFBc0IsaVNBVnZCOzs7Ozs7OztHQVFULDJEQVRTLFlBQVksK0JBQUUsZUFBZTs7NEZBVzVCLHNCQUFzQjtrQkFkbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztvQkFDeEMsUUFBUSxFQUFFOzs7Ozs7OztHQVFUO2lCQUNGOzRGQUVvQixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU07Z0JBQ1IsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZ4Rm9ybSwgRnhGb3JtQ29tcG9uZW50IH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IERpc3BhdGNoVG9DbGluaWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tY29udHJvbHMvZGlzcGF0Y2gtdG8tY2xpbmljL2Rpc3BhdGNoLXRvLWNsaW5pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvZ2dsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3RvZ2dsZS1idXR0b24vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZGVyL3VwbG9hZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtZm9ybS1jb21wb25lbnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRnhGb3JtQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGZ4LWZvcm0gXHJcbiAgICAgIFtmeEZvcm1dPVwiZnhGb3JtXCIgXHJcbiAgICAgIFt2YWx1ZV09XCJ2YXJpYWJsZXNcIiBcclxuICAgICAgKG9uU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIiBcclxuICAgICAgI2Zvcm1cclxuICAgID5cclxuICAgIDwvZngtZm9ybT5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnhGb3JtV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdmb3JtJykgZm9ybSE6IEZ4Rm9ybUNvbXBvbmVudDtcclxuICBASW5wdXQoKSBmeEZvcm0hOiBGeEZvcm07XHJcbiAgQElucHV0KCkgdmFyaWFibGVzOiBhbnk7XHJcbiAgQE91dHB1dCgpIGZ4Rm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ4V3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50cygpO1xyXG4gICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7IFxyXG4gICAgLy8gaWYoJ3ZhcmlhYmxlcycgaW4gY2hhbmdlcyAmJiAhY2hhbmdlc1snZnhGb3JtJ10pIHtcclxuICAgIC8vICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQubmV4dCh0aGlzLnZhcmlhYmxlcyk7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoJ3ZhcmlhYmxlcycgaW4gY2hhbmdlcykge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UudmFyaWFibGVzJC5uZXh0KHRoaXMudmFyaWFibGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdkaXNwYXRjaC10by1jbGluaWMnKSkpIHtcclxuICAgIC8vICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdEaXNwYXRjaCBUbyBDbGluaWMnLCAnZGlzcGF0Y2gtdG8tY2xpbmljJywgRGlzcGF0Y2hUb0NsaW5pY0NvbXBvbmVudCk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgnZHluYW1pYy10YWJsZScpKSkge1xyXG4gICAgLy8gICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ0R5bmFtaWMgVGFibGUnLCAnZHluYW1pYy10YWJsZScsIER5bmFtaWNUYWJsZUNvbXBvbmVudCk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgndG9nZ2xlLWJ1dHRvbicpKSkge1xyXG4gICAgLy8gICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1RvZ2dsZSBCdXR0b24nLCAndG9nZ2xlLWJ1dHRvbicsIFRvZ2dsZUJ1dHRvbkNvbXBvbmVudCk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgndXBsb2FkZXInKSkpIHtcclxuICAgIC8vICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdVcGxvYWRlcicsICd1cGxvYWRlcicsIFVwbG9hZGVyQ29tcG9uZW50KTtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCd0b2dnbGUnKSkpIHtcclxuICAgIC8vICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdUb2dnbGUnLCAndG9nZ2xlJywgVG9nZ2xlQ29tcG9uZW50KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXHJcbiAgICAgIHsgbmFtZTogJ0Rpc3BhdGNoIFRvIENsaW5pYycsIGtleTogJ2Rpc3BhdGNoLXRvLWNsaW5pYycsIGNvbXBvbmVudDogRGlzcGF0Y2hUb0NsaW5pY0NvbXBvbmVudCB9LFxyXG4gICAgICB7IG5hbWU6ICdEeW5hbWljIFRhYmxlJywga2V5OiAnZHluYW1pYy10YWJsZScsIGNvbXBvbmVudDogRHluYW1pY1RhYmxlQ29tcG9uZW50IH0sXHJcbiAgICAgIHsgbmFtZTogJ1RvZ2dsZSBCdXR0b24nLCBrZXk6ICd0b2dnbGUtYnV0dG9uJywgY29tcG9uZW50OiBUb2dnbGVCdXR0b25Db21wb25lbnQgfSxcclxuICAgICAgeyBuYW1lOiAnVXBsb2FkZXInLCBrZXk6ICd1cGxvYWRlcicsIGNvbXBvbmVudDogVXBsb2FkZXJDb21wb25lbnQgfSxcclxuICAgICAgeyBuYW1lOiAnVG9nZ2xlJywga2V5OiAndG9nZ2xlJywgY29tcG9uZW50OiBUb2dnbGVDb21wb25lbnQgfVxyXG4gICAgXTtcclxuICAgIFxyXG4gICAgY29tcG9uZW50cy5mb3JFYWNoKCh7IG5hbWUsIGtleSwgY29tcG9uZW50IH0pID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KGtleSkpIHtcclxuICAgICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQobmFtZSwga2V5LCBjb21wb25lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblN1Ym1pdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4Rm9ybVN1Ym1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0uc3VibWl0KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ export class ToggleComponent extends FxBaseComponent {
8
+ cdr;
9
+ toggleControl = new FormControl(false);
10
+ constructor(cdr) {
11
+ super(cdr);
12
+ this.cdr = cdr;
13
+ this.onInit.subscribe((fxData) => {
14
+ this._register(this.toggleControl);
15
+ });
16
+ }
17
+ settings() {
18
+ return [
19
+ new FxStringSetting({ key: 'accept', $title: 'Accept Text', value: 'Yes' }),
20
+ new FxStringSetting({ key: 'reject', $title: 'Reject Text', value: 'No' })
21
+ ];
22
+ }
23
+ validations() {
24
+ return [FxValidatorService.required];
25
+ }
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
27
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ToggleComponent, isStandalone: true, selector: "fx-toggle", usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\">\r\n <div style=\"display: flex;\">\r\n <label>\r\n <input [formControl]=\"toggleControl\" type=\"radio\" name=\"radio_grp\" class=\"form-radio mr-3\" value=\"true\">\r\n <span class=\"mt-1\">{{setting('accept')}}</span>\r\n </label>\r\n <label>\r\n <input [formControl]=\"toggleControl\" type=\"radio\" name=\"radio_grp\" class=\"form-radio mr-3\" value=\"false\">\r\n <span class=\"mt-1\">{{setting('reject')}}</span>\r\n </label>\r\n </div>\r\n</fx-component>\r\n", styles: ["label{position:relative;white-space:nowrap;border-radius:0;border:0 solid #999999;margin:0 14px 0 0;width:120px;height:auto;padding:0;text-align:center;cursor:pointer}.form-radio{background-color:#dae6f0;color:#fff;box-shadow:none;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border:1px solid #DEDEDE;padding:9px 10px;margin:0;white-space:nowrap;width:100%;height:38px;background-image:none;border-radius:4px}.form-radio:checked{background-color:#add8e6;border-color:#9bbbd6}.form-radio:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #9dc1fb,0 1px 2px #000;background-color:#add8e6}.form-radio:hover{border-color:#4682b4}span{position:absolute;inset:8px 0 0;margin:0;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ selector: 'fx-toggle', standalone: true, imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule], template: "<fx-component [fxData]=\"fxData\">\r\n <div style=\"display: flex;\">\r\n <label>\r\n <input [formControl]=\"toggleControl\" type=\"radio\" name=\"radio_grp\" class=\"form-radio mr-3\" value=\"true\">\r\n <span class=\"mt-1\">{{setting('accept')}}</span>\r\n </label>\r\n <label>\r\n <input [formControl]=\"toggleControl\" type=\"radio\" name=\"radio_grp\" class=\"form-radio mr-3\" value=\"false\">\r\n <span class=\"mt-1\">{{setting('reject')}}</span>\r\n </label>\r\n </div>\r\n</fx-component>\r\n", styles: ["label{position:relative;white-space:nowrap;border-radius:0;border:0 solid #999999;margin:0 14px 0 0;width:120px;height:auto;padding:0;text-align:center;cursor:pointer}.form-radio{background-color:#dae6f0;color:#fff;box-shadow:none;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border:1px solid #DEDEDE;padding:9px 10px;margin:0;white-space:nowrap;width:100%;height:38px;background-image:none;border-radius:4px}.form-radio:checked{background-color:#add8e6;border-color:#9bbbd6}.form-radio:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #9dc1fb,0 1px 2px #000;background-color:#add8e6}.form-radio:hover{border-color:#4682b4}span{position:absolute;inset:8px 0 0;margin:0;padding:0}\n"] }]
32
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBcUIsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFTakksTUFBTSxPQUFPLGVBQWdCLFNBQVEsZUFBZTtJQUc5QjtJQUZiLGFBQWEsR0FBRyxJQUFJLFdBQVcsQ0FBVSxLQUFLLENBQUMsQ0FBQTtJQUV0RCxZQUFvQixHQUFzQjtRQUN4QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFEUSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVTLFFBQVE7UUFDaEIsT0FBTztZQUNMLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMzRSxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0UsQ0FBQztJQUNKLENBQUM7SUFFUyxXQUFXO1FBQ25CLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO3dHQW5CVSxlQUFlOzRGQUFmLGVBQWUsNEZDWjVCLG9rQkFZQSx3dkJESlksWUFBWSwrQkFBRSxXQUFXLDRFQUFFLFdBQVcseW1CQUFFLG1CQUFtQjs7NEZBSTFELGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4Q29tcG9uZW50LCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtdG9nZ2xlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZ4Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvZ2dsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RvZ2dsZS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9nZ2xlQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IHtcclxuICBwdWJsaWMgdG9nZ2xlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPihmYWxzZSlcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihjZHIpXHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50b2dnbGVDb250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2FjY2VwdCcsICR0aXRsZTogJ0FjY2VwdCBUZXh0JywgdmFsdWU6ICdZZXMnIH0pLFxyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAncmVqZWN0JywgJHRpdGxlOiAnUmVqZWN0IFRleHQnLCB2YWx1ZTogJ05vJyB9KVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB2YWxpZGF0aW9ucygpOiBGeFZhbGlkYXRpb25bXSB7XHJcbiAgICByZXR1cm4gW0Z4VmFsaWRhdG9yU2VydmljZS5yZXF1aXJlZF07XHJcbiAgfVxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJ0b2dnbGVDb250cm9sXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvX2dycFwiIGNsYXNzPVwiZm9ybS1yYWRpbyBtci0zXCIgdmFsdWU9XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMVwiPnt7c2V0dGluZygnYWNjZXB0Jyl9fTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJ0b2dnbGVDb250cm9sXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvX2dycFwiIGNsYXNzPVwiZm9ybS1yYWRpbyBtci0zXCIgdmFsdWU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTFcIj57e3NldHRpbmcoJ3JlamVjdCcpfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG48L2Z4LWNvbXBvbmVudD5cclxuIl19
@@ -0,0 +1,38 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
5
+ import * as i0 from "@angular/core";
6
+ export class ToggleButtonComponent extends FxBaseComponent {
7
+ cdr;
8
+ toggleBtnControl = new UntypedFormControl(false);
9
+ isToggled = false;
10
+ constructor(cdr) {
11
+ super(cdr);
12
+ this.cdr = cdr;
13
+ this.onInit.subscribe((fxData) => {
14
+ this._register(this.toggleBtnControl);
15
+ });
16
+ }
17
+ toggle() {
18
+ this.isToggled = !this.toggleBtnControl.value;
19
+ this.toggleBtnControl.setValue(this.isToggled);
20
+ }
21
+ settings() {
22
+ return [
23
+ new FxStringSetting({ key: 'classes', $title: 'Classes', value: '' }),
24
+ new FxStringSetting({ key: 'active-text', $title: 'Active Text', value: 'On' }),
25
+ new FxStringSetting({ key: 'inactive-text', $title: 'Inactive Text', value: 'Off' }),
26
+ ];
27
+ }
28
+ validations() {
29
+ return [FxValidatorService.required];
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleButtonComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ToggleButtonComponent, isStandalone: true, selector: "lib-toggle-button", usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\">\r\n <button\r\n class=\"custom-toggle-btn\"\r\n [class]=\"setting('classes') ? setting('classes'): ''\"\r\n [class.active]=\"toggleBtnControl.value\"\r\n (click)=\"toggle()\"\r\n >\r\n {{ toggleBtnControl.value ? setting('active-text') : setting('inactive-text') }}\r\n </button>\r\n</fx-component>\r\n", styles: [".custom-toggle-btn{padding:10px 20px;font-size:16px;font-weight:700;color:#fff;border:none;border-radius:5px;cursor:pointer;background-color:#ccc;transition:background-color .3s}.custom-toggle-btn.active{background-color:#4caf50}.custom-toggle-btn:hover{opacity:.9}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ToggleButtonComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'lib-toggle-button', standalone: true, imports: [CommonModule, FxComponent, ReactiveFormsModule, FormsModule], template: "<fx-component [fxData]=\"fxData\">\r\n <button\r\n class=\"custom-toggle-btn\"\r\n [class]=\"setting('classes') ? setting('classes'): ''\"\r\n [class.active]=\"toggleBtnControl.value\"\r\n (click)=\"toggle()\"\r\n >\r\n {{ toggleBtnControl.value ? setting('active-text') : setting('inactive-text') }}\r\n </button>\r\n</fx-component>\r\n", styles: [".custom-toggle-btn{padding:10px 20px;font-size:16px;font-weight:700;color:#fff;border:none;border-radius:5px;cursor:pointer;background-color:#ccc;transition:background-color .3s}.custom-toggle-btn.active{background-color:#4caf50}.custom-toggle-btn:hover{opacity:.9}\n"] }]
37
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3RvZ2dsZS1idXR0b24vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3RvZ2dsZS1idXR0b24vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBZSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBNEIsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVNoSixNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUlwQztJQUhiLGdCQUFnQixHQUFHLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV6QixZQUFvQixHQUFzQjtRQUN4QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFETyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxRQUFRO1FBQ2hCLE9BQU87WUFDTCxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDckUsSUFBSSxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQy9FLElBQUksZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNyRixDQUFDO0lBQ0osQ0FBQztJQUVTLFdBQVc7UUFDbkIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBMUJVLHFCQUFxQjs0RkFBckIscUJBQXFCLG9HQ1psQyxtWUFVQSxvVURGWSxZQUFZLCtCQUFFLFdBQVcsNEVBQUUsbUJBQW1CLDhCQUFFLFdBQVc7OzRGQUkxRCxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGeEJhc2VDb21wb25lbnQsIEZ4Q29tcG9uZW50LCBGeEljb25TZXR0aW5nLCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRvZ2dsZS1idXR0b24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRnhDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RvZ2dsZS1idXR0b24uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvZ2dsZUJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCB7IFxyXG4gIHB1YmxpYyB0b2dnbGVCdG5Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmYWxzZSk7XHJcbiAgcHVibGljIGlzVG9nZ2xlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50b2dnbGVCdG5Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1RvZ2dsZWQgPSAhdGhpcy50b2dnbGVCdG5Db250cm9sLnZhbHVlO1xyXG4gICAgdGhpcy50b2dnbGVCdG5Db250cm9sLnNldFZhbHVlKHRoaXMuaXNUb2dnbGVkKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXR0aW5ncygpOiBGeFNldHRpbmdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2xhc3NlcycsICR0aXRsZTogJ0NsYXNzZXMnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdhY3RpdmUtdGV4dCcsICR0aXRsZTogJ0FjdGl2ZSBUZXh0JywgdmFsdWU6ICdPbicgfSksXHJcbiAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdpbmFjdGl2ZS10ZXh0JywgJHRpdGxlOiAnSW5hY3RpdmUgVGV4dCcsIHZhbHVlOiAnT2ZmJyB9KSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgcmV0dXJuIFtGeFZhbGlkYXRvclNlcnZpY2UucmVxdWlyZWRdO1xyXG4gIH1cclxufVxyXG4iLCI8ZngtY29tcG9uZW50IFtmeERhdGFdPVwiZnhEYXRhXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJjdXN0b20tdG9nZ2xlLWJ0blwiXHJcbiAgICAgICAgW2NsYXNzXT1cInNldHRpbmcoJ2NsYXNzZXMnKSA/IHNldHRpbmcoJ2NsYXNzZXMnKTogJydcIlxyXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwidG9nZ2xlQnRuQ29udHJvbC52YWx1ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAge3sgdG9nZ2xlQnRuQ29udHJvbC52YWx1ZSA/IHNldHRpbmcoJ2FjdGl2ZS10ZXh0JykgOiBzZXR0aW5nKCdpbmFjdGl2ZS10ZXh0JykgfX1cclxuICAgIDwvYnV0dG9uPlxyXG48L2Z4LWNvbXBvbmVudD5cclxuIl19