fx-form-builder-wrapper 0.0.69 → 0.0.71

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.
@@ -25,6 +25,7 @@ export class DynamicTableComponent extends FxBaseComponent {
25
25
  };
26
26
  destroy$ = new Subject();
27
27
  uploadedImages = [];
28
+ generalValues;
28
29
  tableFormControl = new FormControl();
29
30
  smartDropdownOptions = {};
30
31
  http = inject(HttpClient);
@@ -122,6 +123,10 @@ export class DynamicTableComponent extends FxBaseComponent {
122
123
  return Array.from({ length: count });
123
124
  }
124
125
  onChangeConfiguration(event) {
126
+ this.generalValues = {
127
+ enableAPI: event?.enableAPI,
128
+ api: event?.api
129
+ };
125
130
  const columns = event.columns.map((col) => {
126
131
  return {
127
132
  header: col?.header,
@@ -161,8 +166,10 @@ export class DynamicTableComponent extends FxBaseComponent {
161
166
  rows: []
162
167
  };
163
168
  }
169
+ this.tableConfig.generalValues = this.generalValues;
164
170
  this.fxData.value = this.tableConfig;
165
171
  this.tableFormControl.reset();
172
+ console.log("after");
166
173
  this.tableFormControl.setValue(this.tableConfig);
167
174
  }
168
175
  updateSettings() {
@@ -189,6 +196,7 @@ export class DynamicTableComponent extends FxBaseComponent {
189
196
  columns,
190
197
  rows
191
198
  };
199
+ this.tableConfig.generalValues = this.generalValues;
192
200
  this.fxData.value = this.tableConfig;
193
201
  this.tableFormControl.reset();
194
202
  this.tableFormControl.setValue(this.tableConfig);
@@ -232,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
232
240
  }], tableConfig: [{
233
241
  type: Input
234
242
  }] } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXdCekMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7SUFtQnBDO0lBQWdDO0lBbEIzQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLFdBQVcsR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLFdBQVcsR0FBUTtRQUMxQixPQUFPLEVBQUU7WUFDUCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZ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SUFDM0IsQ0FBQzt3R0FqT1UscUJBQXFCOzRGQUFyQixxQkFBcUIsK0xDL0JsQyxnc05BdUdvQiwrZ0JEN0VSLFlBQVksMmJBQUUsV0FBVyxnakRBQUUsc0JBQXNCLGdIQUFFLG1CQUFtQjs7NEZBS3JFLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQzs0SEFNeEUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeE1vZGUsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uQ29uZmlnIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBjZWxsVHlwZTogJ3RleHQnIHwgJ2lucHV0LXRleHQnIHwgJ2lucHV0LW51bWJlcicgfCAnZHJvcGRvd24nIHwgJ3NtYXJ0LWRyb3Bkb3duJyB8ICdjaGVja2JveCcgfCAncmFkaW8nIHwgJ3JhZGlvLWdyb3VwJyB8ICdmaWxlLXVwbG9hZCcgfCAndGV4dGFyZWEnO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcclxuICBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgdmFsdWVLZXk/OiBzdHJpbmc7XHJcbiAgbGFiZWxLZXk/OiBzdHJpbmc7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uQ29uZmlnW107XHJcbiAgcm93czogYW55W107XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1keW5hbWljLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZXR0aW5nc1BhbmVsQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93czogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdUeXBlOiBGeE1vZGUgPSBGeE1vZGUuVklFVztcclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55ID0ge1xyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAxJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAyJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAzJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA0JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA1JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxufTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHVwbG9hZGVkSW1hZ2VzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBGaWxlIHwgbnVsbD4gfCBudWxsPiA9IFtdO1xyXG5cclxuICBwdWJsaWMgdGFibGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBzbWFydERyb3Bkb3duT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50YWJsZUZvcm1Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgbGV0IGR5bmFtaWNUYWJsZVZhbHVlczogYW55O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdkeW5hbWljLXRhYmxlJykpIHtcclxuICAgICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNUYWJsZVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVIZWFkZXJOYW1lID0gZHluYW1pY1RhYmxlVmFsdWVzPy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUhlYWRlck5hbWUgPSBkeW5hbWljVGFibGVWYWx1ZXM/LmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyO1xyXG4gICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXM/LnJvd3M/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIC8vIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0gaXRlbVtmaWxlSGVhZGVyTmFtZV0gPyBpdGVtW2ZpbGVIZWFkZXJOYW1lXTogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaWxlVXJsID0gaXRlbVtmaWxlSGVhZGVyTmFtZV07IC8vIEdldCB0aGUgZmlsZSBVUkxcclxuXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy51cGxvYWRlZEltYWdlc1tpbmRleF0gPSBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgLy8gICA/IHsgcmVzdWx0OiBmaWxlVXJsLCBmaWxlOiBudWxsIH0gLy8gU3RvcmUgdGhlIFVSTCBhcyAncmVzdWx0J1xyXG4gICAgICAgICAgICAgIC8vICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2ZpbGVIZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybHMoaXRlbVtmaWxlSGVhZGVyTmFtZV0sIGluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRJbWFnZXNcIiwgdGhpcy51cGxvYWRlZEltYWdlcyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHluYW1pY3RhYmxlXCIsIGR5bmFtaWNUYWJsZVZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkeW5hbWljVGFibGVWYWx1ZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICAgICAgLy8gdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgLy8gRGVsYXkgdG8gZW5zdXJlIHByb3BlciBwYXRjaGluZ1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudGFibGVDb25maWcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFibGVGb3JtQ29udHJvbFwiLHRoaXMudGFibGVGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZ4RGF0YT8udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5meERhdGE/LnZhbHVlKT8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5meERhdGEudmFsdWU7XHJcbiAgICAgICAgdGhpcy5mZXRjaFNtYXJ0RHJvcGRvd25EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMClcclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIGZldGNoU21hcnREcm9wZG93bkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4gY29sdW1uLmNlbGxUeXBlID09PSAnc21hcnQtZHJvcGRvd24nICYmIGNvbHVtbj8uYXBpVXJsKVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pihjb2x1bW4uYXBpVXJsISkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdID0gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtW2NvbHVtbi52YWx1ZUtleSFdLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2NvbHVtbi5sYWJlbEtleSFdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRJbWFnZShldmVudDogRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiByZWFkZXIucmVzdWx0IGFzIHN0cmluZyxcclxuICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW3Jvd0luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IGZpbGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NvbHVtbi1zaXplJywgJHRpdGxlOiAnTm8uIG9mIGNvbHVtbnMnLCB2YWx1ZTogMSB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3RhYmxlLWNvbmZpZycsICR0aXRsZTogJ1RhYmxlIENvbmZpZ3VyYXRpb24nLCB2YWx1ZToge30gfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcnJheShjb3VudDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ29uZmlndXJhdGlvbihldmVudDogYW55KTogdm9pZCB7IFxyXG4gICAgY29uc3QgY29sdW1ucyA9IGV2ZW50LmNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhlYWRlcjogY29sPy5oZWFkZXIsXHJcbiAgICAgICAgY2VsbFR5cGU6IGNvbD8uY2VsbFR5cGUsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbD8ucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgb3B0aW9uczogY29sPy5vcHRpb25zLFxyXG4gICAgICAgIGFwaVVybDogY29sPy5hcGlVcmwsXHJcbiAgICAgICAgdmFsdWVLZXk6IGNvbD8udmFsdWVLZXksXHJcbiAgICAgICAgbGFiZWxLZXk6IGNvbD8ubGFiZWxLZXksXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjb2w/LmNsYXNzTmFtZSxcclxuICAgICAgICBhcGlLZXk6IGNvbD8uYXBpS2V5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYoIWV2ZW50Py5lbmFibGVBUEkpIHtcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgLy8gdGhpcy50YWJsZUNvbmZpZy5yb3dzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogK2V2ZW50Py5yb3dzIH0sIChlLCBpbmRleCkgPT4gKHsgbmFtZTogYFNLVS0ke2luZGV4ICsgMX1gLCBhZ2U6IGluZGV4ICUgMiAhPT0gMCwgZ2VuZGVyOiAnbWFsZScgfSkpXHJcbiAgICAgIC8vIHRoaXMudGFibGVDb25maWcucm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICtldmVudD8ucm93cyB9LCAoZSwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gICBjb25zdCByb3dzID0gY29sdW1ucy5tYXAoKGM6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgYz8uaGVhZGVyOiBudWxsXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gICByZXR1cm4gcm93c1xyXG4gICAgICAvLyB9KVxyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnLnJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiArZXZlbnQ/LnJvd3MgfSwgKF8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2M6IGFueSwgYzogYW55KSA9PiB7XHJcbiAgICAgICAgICBhY2NbYz8uaGVhZGVyXSA9ICcnOyAvLyBJbml0aWFsaXplIGVhY2ggY29sdW1uIGtleSB3aXRoIG51bGxcclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZmV0Y2hTbWFydERyb3Bkb3duRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQ/LmVuYWJsZUFQSSkge1xyXG4gICAgICB0aGlzLmRyYXdUYWJsZShldmVudCwgY29sdW1ucylcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgIHJvd3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNldHRpbmdzKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGZvcihsZXQgc2V0dGluZyBvZiB0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGlmKHNldHRpbmcua2V5ID09PSAndGFibGUtY29uZmlnJyl7XHJcbiAgICAgICAgc2V0dGluZy52YWx1ZSA9IHRoaXMudGFibGVDb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZHJhd1RhYmxlKGV2ZW50OiBhbnksIGNvbHVtbnM6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHJvd3M7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGV2ZW50LmFwaSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMpIHtcclxuICAgICAgICByb3dzID0gcmVzLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbmV3T2JqW2NvbC5oZWFkZXJdID0gaXRlbVtjb2wuYXBpS2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHJvd3NcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEsIG51bGwpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW2luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IG51bGw7XHJcbiAgICBjb25zb2xlLmxvZyhcInRhYmxlQ29uZmlnXCIsIHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudGFibGVDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlVXJscyh1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGltYWdlQmxvYjogQmxvYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZUJsb2IpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiBpbWFnZVVSTCxcclxuICAgICAgICAgIGZpbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW1hZ2U6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGZ4LXNldHRpbmdzLXBhbmVsIFtmeERhdGFdPVwiZnhEYXRhXCIgW3RhYmxlRGF0YV09XCJmeERhdGFcIiAoY29uZmlndXJhdGlvbik9XCJvbkNoYW5nZUNvbmZpZ3VyYXRpb24oJGV2ZW50KVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cImZ4RGF0YVwiPlxyXG4gICAgICAgIDx0YWJsZSBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGNsYXNzPVwiZm9ybUJ1aWxkZXJfZHluYW1pY190YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1uc1wiPnt7IGNvbHVtbi5oZWFkZXIgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgdGFibGVDb25maWcucm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi5jZWxsVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPnt7cm93W2NvbHVtbi5oZWFkZXJdfX08L3NwYW4+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0LXRleHQnXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCInaW5wdXQtbnVtYmVyJ1wiIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Qge3tjb2x1bW4uaGVhZGVyfX08L29wdGlvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbj8ub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24/Lm9wdGlvblZhbHVlXCI+ICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5vcHRpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCIgKm5nU3dpdGNoQ2FzZT1cIidzbWFydC1kcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IHt7Y29sdW1uLmhlYWRlcn19PC9vcHRpb24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzbWFydERyb3Bkb3duT3B0aW9uc1tjb2x1bW4uaGVhZGVyXVwiIFt2YWx1ZV09XCJvcHRpb24/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uPy5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwicmFkaW8te3tyb3dJbmRleH19XCIgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIiB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBnYXA6IDEwcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvLWdyb3VwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbi5vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwicmFkaW8tZ3JvdXAte3tyb3dJbmRleH19XCIgdHlwZT1cInJhZGlvXCIgW3ZhbHVlXT1cIm9wdGlvbj8ub3B0aW9uTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8ub3B0aW9uTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUtdXBsb2FkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBlbmQ7anVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgIHdpZHRoPVwiMTAwXCIgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiIFtzcmNdPVwidXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdPy5bJ3Jlc3VsdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXBsb2FkZWQgSW1hZ2VcIiAoY2xpY2spPVwiZGVsZXRlRmlsZSh1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0sIHJvd0luZGV4KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiAjdXBsb2FkRmlsZSAgaGlkZGVuIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudCwgcm93SW5kZXgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXBsb2FkRmlsZS5jbGljaygpXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBqdXN0aWZ5LWVuZCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZGVkSW1hZ2VzPy5bcm93SW5kZXhdPy5bJ3Jlc3VsdCddXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInVwbG9hZGVkSW1hZ2VzW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJVcGxvYWRlZCBJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQgc2hhZG93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZGVkSW1hZ2VzPy5bcm93SW5kZXhdPy5bJ3Jlc3VsdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWxlKHVwbG9hZGVkSW1hZ2VzW3Jvd0luZGV4XSwgcm93SW5kZXgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc2hhZG93LWxnIGhvdmVyOmJnLXJlZC02MDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinYxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdXBsb2FkRmlsZSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRJbWFnZSgkZXZlbnQsIHJvd0luZGV4KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInVwbG9hZEZpbGUuY2xpY2soKVwiIGNsYXNzPVwibXQtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHB4LTMgcHktMSByb3VuZGVkIGhvdmVyOmJnLWJsdWUtNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIG5hbWU9XCJcIiBpZD1cIlwiIGNvbHM9XCIzMFwiIHJvd3M9XCIyXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvZngtc2V0dGluZ3MtcGFuZWw+Il19
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXdCekMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7SUFvQnBDO0lBQWdDO0lBbkIzQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLFdBQVcsR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLFdBQVcsR0FBUTtRQUMxQixPQUFPLEVBQUU7WUFDUCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZ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QkFDaEIsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBeE9VLHFCQUFxQjs0RkFBckIscUJBQXFCLCtMQy9CbEMsZ3NOQXVHb0IsK2dCRDdFUixZQUFZLDJiQUFFLFdBQVcsZ2pEQUFFLHNCQUFzQixnSEFBRSxtQkFBbUI7OzRGQUtyRSxxQkFBcUI7a0JBUmpDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUM7NEhBTXhFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhNb2RlLCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgU2V0dGluZ3NQYW5lbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhbmVsL3NldHRpbmdzLXBhbmVsL3NldHRpbmdzLXBhbmVsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbHVtbkNvbmZpZyB7XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgY2VsbFR5cGU6ICd0ZXh0JyB8ICdpbnB1dC10ZXh0JyB8ICdpbnB1dC1udW1iZXInIHwgJ2Ryb3Bkb3duJyB8ICdzbWFydC1kcm9wZG93bicgfCAnY2hlY2tib3gnIHwgJ3JhZGlvJyB8ICdyYWRpby1ncm91cCcgfCAnZmlsZS11cGxvYWQnIHwgJ3RleHRhcmVhJztcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBvcHRpb25zPzogc3RyaW5nW107XHJcbiAgYXBpVXJsPzogc3RyaW5nO1xyXG4gIHZhbHVlS2V5Pzogc3RyaW5nO1xyXG4gIGxhYmVsS2V5Pzogc3RyaW5nO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcclxuICBjb2x1bW5zOiBUYWJsZUNvbHVtbkNvbmZpZ1tdO1xyXG4gIHJvd3M6IGFueVtdO1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtZHluYW1pYy10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgU2V0dGluZ3NQYW5lbENvbXBvbmVudCwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9keW5hbWljLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIER5bmFtaWNUYWJsZUNvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSB0YWJsZVJvd3M6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBwcmV2aWV3VHlwZTogRnhNb2RlID0gRnhNb2RlLlZJRVc7XHJcbiAgQElucHV0KCkgdGFibGVDb25maWc6IGFueSA9IHtcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBoZWFkZXI6ICdDb2x1bW4gMScsIGNlbGxUeXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBoZWFkZXI6ICdDb2x1bW4gMicsIGNlbGxUeXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBoZWFkZXI6ICdDb2x1bW4gMycsIGNlbGxUeXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBoZWFkZXI6ICdDb2x1bW4gNCcsIGNlbGxUeXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBoZWFkZXI6ICdDb2x1bW4gNScsIGNlbGxUeXBlOiAndGV4dCcgfSxcclxuICAgIF0sXHJcbn07XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpO1xyXG4gIHB1YmxpYyB1cGxvYWRlZEltYWdlczogQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgRmlsZSB8IG51bGw+IHwgbnVsbD4gPSBbXTtcclxuICBwdWJsaWMgZ2VuZXJhbFZhbHVlczogYW55O1xyXG5cclxuICBwdWJsaWMgdGFibGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBzbWFydERyb3Bkb3duT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50YWJsZUZvcm1Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgbGV0IGR5bmFtaWNUYWJsZVZhbHVlczogYW55O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdkeW5hbWljLXRhYmxlJykpIHtcclxuICAgICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNUYWJsZVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVIZWFkZXJOYW1lID0gZHluYW1pY1RhYmxlVmFsdWVzPy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUhlYWRlck5hbWUgPSBkeW5hbWljVGFibGVWYWx1ZXM/LmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyO1xyXG4gICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXM/LnJvd3M/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIC8vIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0gaXRlbVtmaWxlSGVhZGVyTmFtZV0gPyBpdGVtW2ZpbGVIZWFkZXJOYW1lXTogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaWxlVXJsID0gaXRlbVtmaWxlSGVhZGVyTmFtZV07IC8vIEdldCB0aGUgZmlsZSBVUkxcclxuXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy51cGxvYWRlZEltYWdlc1tpbmRleF0gPSBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgLy8gICA/IHsgcmVzdWx0OiBmaWxlVXJsLCBmaWxlOiBudWxsIH0gLy8gU3RvcmUgdGhlIFVSTCBhcyAncmVzdWx0J1xyXG4gICAgICAgICAgICAgIC8vICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2ZpbGVIZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybHMoaXRlbVtmaWxlSGVhZGVyTmFtZV0sIGluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRJbWFnZXNcIiwgdGhpcy51cGxvYWRlZEltYWdlcyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHluYW1pY3RhYmxlXCIsIGR5bmFtaWNUYWJsZVZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkeW5hbWljVGFibGVWYWx1ZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICAgICAgLy8gdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgLy8gRGVsYXkgdG8gZW5zdXJlIHByb3BlciBwYXRjaGluZ1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudGFibGVDb25maWcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFibGVGb3JtQ29udHJvbFwiLHRoaXMudGFibGVGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZ4RGF0YT8udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5meERhdGE/LnZhbHVlKT8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5meERhdGEudmFsdWU7XHJcbiAgICAgICAgdGhpcy5mZXRjaFNtYXJ0RHJvcGRvd25EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMClcclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIGZldGNoU21hcnREcm9wZG93bkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4gY29sdW1uLmNlbGxUeXBlID09PSAnc21hcnQtZHJvcGRvd24nICYmIGNvbHVtbj8uYXBpVXJsKVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pihjb2x1bW4uYXBpVXJsISkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdID0gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtW2NvbHVtbi52YWx1ZUtleSFdLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2NvbHVtbi5sYWJlbEtleSFdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRJbWFnZShldmVudDogRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiByZWFkZXIucmVzdWx0IGFzIHN0cmluZyxcclxuICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW3Jvd0luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IGZpbGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NvbHVtbi1zaXplJywgJHRpdGxlOiAnTm8uIG9mIGNvbHVtbnMnLCB2YWx1ZTogMSB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3RhYmxlLWNvbmZpZycsICR0aXRsZTogJ1RhYmxlIENvbmZpZ3VyYXRpb24nLCB2YWx1ZToge30gfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcnJheShjb3VudDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ29uZmlndXJhdGlvbihldmVudDogYW55KTogdm9pZCB7IFxyXG4gICAgIHRoaXMuZ2VuZXJhbFZhbHVlcyA9IHtcclxuICAgICAgZW5hYmxlQVBJOiBldmVudD8uZW5hYmxlQVBJLFxyXG4gICAgICBhcGk6IGV2ZW50Py5hcGlcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnMgPSBldmVudC5jb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBoZWFkZXI6IGNvbD8uaGVhZGVyLFxyXG4gICAgICAgIGNlbGxUeXBlOiBjb2w/LmNlbGxUeXBlLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBjb2w/LnBsYWNlaG9sZGVyLFxyXG4gICAgICAgIG9wdGlvbnM6IGNvbD8ub3B0aW9ucyxcclxuICAgICAgICBhcGlVcmw6IGNvbD8uYXBpVXJsLFxyXG4gICAgICAgIHZhbHVlS2V5OiBjb2w/LnZhbHVlS2V5LFxyXG4gICAgICAgIGxhYmVsS2V5OiBjb2w/LmxhYmVsS2V5LFxyXG4gICAgICAgIGNsYXNzTmFtZTogY29sPy5jbGFzc05hbWUsXHJcbiAgICAgICAgYXBpS2V5OiBjb2w/LmFwaUtleVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmKCFldmVudD8uZW5hYmxlQVBJKSB7XHJcbiAgICAgIHRoaXMudGFibGVDb25maWcuY29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICAgIC8vIHRoaXMudGFibGVDb25maWcucm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICtldmVudD8ucm93cyB9LCAoZSwgaW5kZXgpID0+ICh7IG5hbWU6IGBTS1UtJHtpbmRleCArIDF9YCwgYWdlOiBpbmRleCAlIDIgIT09IDAsIGdlbmRlcjogJ21hbGUnIH0pKVxyXG4gICAgICAvLyB0aGlzLnRhYmxlQ29uZmlnLnJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiArZXZlbnQ/LnJvd3MgfSwgKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgIC8vICAgY29uc3Qgcm93cyA9IGNvbHVtbnMubWFwKChjOiBhbnkpID0+IHtcclxuICAgICAgLy8gICAgIHJldHVybiB7XHJcbiAgICAgIC8vICAgICAgIGM/LmhlYWRlcjogbnVsbFxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH0pXHJcbiAgICAgIC8vICAgcmV0dXJuIHJvd3NcclxuICAgICAgLy8gfSlcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogK2V2ZW50Py5yb3dzIH0sIChfLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZSgoYWNjOiBhbnksIGM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgYWNjW2M/LmhlYWRlcl0gPSAnJzsgLy8gSW5pdGlhbGl6ZSBlYWNoIGNvbHVtbiBrZXkgd2l0aCBudWxsXHJcbiAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmZldGNoU21hcnREcm9wZG93bkRhdGEoKTtcclxuICAgIH1cclxuICAgIGlmKGV2ZW50Py5lbmFibGVBUEkpIHtcclxuICAgICAgdGhpcy5kcmF3VGFibGUoZXZlbnQsIGNvbHVtbnMpXHJcbiAgICAgIHRoaXMudGFibGVDb25maWcgPSB7XHJcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcclxuICAgICAgICByb3dzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJsZUNvbmZpZy5nZW5lcmFsVmFsdWVzID0gdGhpcy5nZW5lcmFsVmFsdWVzO1xyXG4gICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImFmdGVyXCIpXHJcbiAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNldHRpbmdzKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGZvcihsZXQgc2V0dGluZyBvZiB0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGlmKHNldHRpbmcua2V5ID09PSAndGFibGUtY29uZmlnJyl7XHJcbiAgICAgICAgc2V0dGluZy52YWx1ZSA9IHRoaXMudGFibGVDb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZHJhd1RhYmxlKGV2ZW50OiBhbnksIGNvbHVtbnM6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHJvd3M7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGV2ZW50LmFwaSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMpIHtcclxuICAgICAgICByb3dzID0gcmVzLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbmV3T2JqW2NvbC5oZWFkZXJdID0gaXRlbVtjb2wuYXBpS2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHJvd3NcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5nZW5lcmFsVmFsdWVzID0gdGhpcy5nZW5lcmFsVmFsdWVzO1xyXG4gICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmlsZShmaWxlOiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkZWRJbWFnZXMuc3BsaWNlKGluZGV4LCAxLCBudWxsKTtcclxuICAgIHRoaXMudGFibGVDb25maWcucm93c1tpbmRleF1bdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcl0gPSBudWxsO1xyXG4gICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXJzZVVybHModXJsOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChpbWFnZUJsb2I6IEJsb2IpID0+IHtcclxuICAgICAgICBjb25zdCBpbWFnZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2VCbG9iKTtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZGV4XSA9IHtcclxuICAgICAgICAgIHJlc3VsdDogaW1hZ2VVUkwsXHJcbiAgICAgICAgICBmaWxlOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGltYWdlOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmeC1zZXR0aW5ncy1wYW5lbCBbZnhEYXRhXT1cImZ4RGF0YVwiIFt0YWJsZURhdGFdPVwiZnhEYXRhXCIgKGNvbmZpZ3VyYXRpb24pPVwib25DaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudClcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJmeERhdGFcIj5cclxuICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImZvcm1CdWlsZGVyX2R5bmFtaWNfdGFibGVcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnNcIj57eyBjb2x1bW4uaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlQ29uZmlnLnJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uY2VsbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj57e3Jvd1tjb2x1bW4uaGVhZGVyXX19PC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dC10ZXh0J1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0LW51bWJlcidcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IHt7Y29sdW1uLmhlYWRlcn19PC9vcHRpb24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4/Lm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uPy5vcHRpb25WYWx1ZVwiPiAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8ub3B0aW9uTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgc3R5bGU9XCJ3aWR0aDogNjAlO1wiICpuZ1N3aXRjaENhc2U9XCInc21hcnQtZHJvcGRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCB7e2NvbHVtbi5oZWFkZXJ9fTwvb3B0aW9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc21hcnREcm9wZG93bk9wdGlvbnNbY29sdW1uLmhlYWRlcl1cIiBbdmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cInJhZGlvLXt7cm93SW5kZXh9fVwiIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCIgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidyYWRpby1ncm91cCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4ub3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cInJhZGlvLWdyb3VwLXt7cm93SW5kZXh9fVwiIHR5cGU9XCJyYWRpb1wiIFt2YWx1ZV09XCJvcHRpb24/Lm9wdGlvbk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24/Lm9wdGlvbk5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlLXVwbG9hZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogZW5kO2p1c3RpZnktY29udGVudDogZW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICB3aWR0aD1cIjEwMFwiICpuZ0lmPVwidXBsb2FkZWRJbWFnZXM/Lltyb3dJbmRleF0/LlsncmVzdWx0J11cIiBbc3JjXT1cInVwbG9hZGVkSW1hZ2VzW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVwbG9hZGVkIEltYWdlXCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUodXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdLCByb3dJbmRleClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlXCIgI3VwbG9hZEZpbGUgIGhpZGRlbiBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRJbWFnZSgkZXZlbnQsIHJvd0luZGV4KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInVwbG9hZEZpbGUuY2xpY2soKVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQganVzdGlmeS1lbmQgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJ1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0/LlsncmVzdWx0J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXBsb2FkZWQgSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIHNoYWRvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZSh1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0sIHJvd0luZGV4KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHRleHQtd2hpdGUgcm91bmRlZC1tZCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNoYWRvdy1sZyBob3ZlcjpiZy1yZWQtNjAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4p2MXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3VwbG9hZEZpbGUgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBsb2FkSW1hZ2UoJGV2ZW50LCByb3dJbmRleClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGxvYWRGaWxlLmNsaWNrKClcIiBjbGFzcz1cIm10LTIgYmctYmx1ZS01MDAgdGV4dC13aGl0ZSBweC0zIHB5LTEgcm91bmRlZCBob3ZlcjpiZy1ibHVlLTYwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBuYW1lPVwiXCIgaWQ9XCJcIiBjb2xzPVwiMzBcIiByb3dzPVwiMlwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG48L2Z4LXNldHRpbmdzLXBhbmVsPiJdfQ==
@@ -111,6 +111,8 @@ export class ConfigurationPanelComponent {
111
111
  console.log("Value columns formArray", this.dynamicForm.value);
112
112
  }
113
113
  patchData() {
114
+ this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;
115
+ this.api = this.tableConfigData?.value?.generalValues?.api;
114
116
  this.tableConfigData?.value?.columns.forEach((column) => {
115
117
  // Creating the FormGroup for each column
116
118
  const columnFormGroup = this.fb.group({
@@ -147,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
147
149
  }], tableConfigData: [{
148
150
  type: Input
149
151
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsL2NvbmZpZ3VyYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvcGFuZWwvY29uZmlndXJhdGlvbi1wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBcUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBU2pILE1BQU0sT0FBTywyQkFBMkI7SUFjbEI7SUFiWCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLE9BQU8sQ0FBTTtJQUNaLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLGVBQWUsQ0FBSztJQUV0QixJQUFJLEdBQVcsQ0FBQyxDQUFDO0lBQ2pCLFNBQVMsR0FBWSxLQUFL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QyxXQUFXLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztpQkFDdkQsQ0FBQyxDQUNILENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDUDtnQkFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2pDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNqQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBR0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNJVSwyQkFBMkI7NEZBQTNCLDJCQUEyQixvUUNmeEMsdXhVQWlLVyxndGpERHRKQyxZQUFZLCtQQUFFLG1CQUFtQixzdURBQUUsWUFBWSxvZUFBRSxZQUFZLHV1QkFBRSxlQUFlLDhCQUFFLFdBQVcsc1BBQUUsY0FBYzs7NEZBSTFHLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDO2dGQUszSCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1jb25maWd1cmF0aW9uLXBhbmVsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgRGlhbG9nTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIEZvcm1zTW9kdWxlLCBEcm9wZG93bk1vZHVsZSwgQnV0dG9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tcGFuZWwuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLCBPbkNoYW5nZXN7XHJcbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3M6IGFueTtcclxuICBAT3V0cHV0KCkgaXNWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjb25maWd1cmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgdGFibGVDb25maWdEYXRhOmFueTtcclxuXHJcbiAgcHVibGljIHJvd3M6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGVuYWJsZUFQSTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhcGk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwdWJsaWMgZHluYW1pY0Zvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgY29sdW1uVHlwZXM6IHN0cmluZ1tdID0gWyd0ZXh0JywgJ2lucHV0LXRleHQnLCAnaW5wdXQtbnVtYmVyJywgJ2Ryb3Bkb3duJywgJ3NtYXJ0LWRyb3Bkb3duJywgJ2NoZWNrYm94JywgJ3JhZGlvJywgJ3JhZGlvLWdyb3VwJywgJ2ZpbGUtdXBsb2FkJywgJ3RleHRhcmVhJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmR5bmFtaWNGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuZmIuYXJyYXkoW10pXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVDb25maWdEYXRhPy52YWx1ZT8uY29sdW1ucykge1xyXG4gICAgICB0aGlzLnBhdGNoRGF0YSgpOyAgLy8gSWYgZGF0YSBleGlzdHMsIHBhdGNoIGl0IGludG8gdGhlIGZvcm1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkQ29sdW1uKCk7ICAvLyBPdGhlcndpc2UsIGFkZCBhIGRlZmF1bHQgY29sdW1uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sdW1ucygpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZHluYW1pY0Zvcm0uZ2V0KCdjb2x1bW5zJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgLy8gKirwn5S5IEFkZCBDb2x1bW4gRHluYW1pY2FsbHkqKlxyXG4gIHB1YmxpYyBhZGRDb2x1bW4oKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2x1bW5Gb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgaGVhZGVyOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBjZWxsVHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICBvcHRpb25zOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgYXBpVXJsOiAnJyxcclxuICAgICAgdmFsdWVLZXk6ICcnLFxyXG4gICAgICBsYWJlbEtleTogJycsXHJcbiAgICAgIGNsYXNzTmFtZTogJycsXHJcbiAgICAgIGFwaUtleTogJydcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uRm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gXHJcbiAgcHVibGljIHJlbW92ZUNvbHVtbihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLnJlbW92ZUF0KGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICoq8J+UuSBEdXBsaWNhdGUgQ29sdW1uKipcclxuICBwdWJsaWMgZHVwbGljYXRlQ29sdW1uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuYXQoaW5kZXgpLnZhbHVlO1xyXG4gICAgY29uc3QgZHVwbGljYXRlQ29sdW1uID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGhlYWRlcjogW2N1cnJlbnRDb2x1bW4uaGVhZGVyLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY2VsbFR5cGU6IFtjdXJyZW50Q29sdW1uLmNlbGxUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcGxhY2Vob2xkZXI6IFtjdXJyZW50Q29sdW1uLnBsYWNlaG9sZGVyXSxcclxuICAgICAgYXBpVXJsOiBbY3VycmVudENvbHVtbi5hcGlVcmxdLFxyXG4gICAgICB2YWx1ZUtleTogW2N1cnJlbnRDb2x1bW4udmFsdWVLZXldLFxyXG4gICAgICBsYWJlbEtleTogW2N1cnJlbnRDb2x1bW4ubGFiZWxLZXldLFxyXG4gICAgICBjbGFzc05hbWU6IFtjdXJyZW50Q29sdW1uLmNsYXNzTmFtZV0sXHJcbiAgICAgIGFwaUtleTogW2N1cnJlbnRDb2x1bW4uYXBpS2V5XSxcclxuICAgICAgb3B0aW9uczogdGhpcy5mYi5hcnJheShcclxuICAgICAgICBjdXJyZW50Q29sdW1uLm9wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICBvcHRpb25OYW1lOiBbb3B0aW9uLm9wdGlvbk5hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgb3B0aW9uVmFsdWU6IFtvcHRpb24ub3B0aW9uVmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSkpXHJcbiAgICAgIClcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb2x1bW5zLmluc2VydChpbmRleCArIDEsIGR1cGxpY2F0ZUNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvLyAqKvCflLkgQWRkIE9wdGlvbnMgRHluYW1pY2FsbHkqKlxyXG4gIHB1YmxpYyBhZGRPcHRpb24oY29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3Qgb3B0aW9uR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgb3B0aW9uTmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgb3B0aW9uVmFsdWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0T3B0aW9ucyhjb2x1bW5JbmRleCkucHVzaChvcHRpb25Hcm91cCk7XHJcbiAgfVxyXG5cclxuICAvLyAqKvCflLkgR2V0IE9wdGlvbnMgRm9ybUFycmF5IGZvciBhIFNwZWNpZmljIENvbHVtbioqXHJcbiAgcHVibGljIGdldE9wdGlvbnMoY29sdW1uSW5kZXg6IG51bWJlcik6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmF0KGNvbHVtbkluZGV4KS5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyAqKvCflLkgQ2xvc2UgRGlhbG9nKipcclxuICBwdWJsaWMgY2xvc2VEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZS5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vICoq8J+UuSBTYXZlIENvbmZpZ3VyYXRpb24qKlxyXG4gIHB1YmxpYyBzYXZlQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbi5lbWl0KHtcclxuICAgICAgcm93czogdGhpcy5yb3dzLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmR5bmFtaWNGb3JtLnZhbHVlPy5jb2x1bW5zLFxyXG4gICAgICBlbmFibGVBUEk6IHRoaXMuZW5hYmxlQVBJLFxyXG4gICAgICBhcGk6IHRoaXMuYXBpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuaXNWaXNpYmxlLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJWYWx1ZSBjb2x1bW5zIGZvcm1BcnJheVwiLCB0aGlzLmR5bmFtaWNGb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXRjaERhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnRGF0YT8udmFsdWU/LmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgLy8gQ3JlYXRpbmcgdGhlIEZvcm1Hcm91cCBmb3IgZWFjaCBjb2x1bW5cclxuICAgICAgY29uc3QgY29sdW1uRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgaGVhZGVyOiBbY29sdW1uLmhlYWRlciB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgY2VsbFR5cGU6IFtjb2x1bW4uY2VsbFR5cGUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBbY29sdW1uLnBsYWNlaG9sZGVyIHx8ICcnXSxcclxuICAgICAgICBvcHRpb25zOiB0aGlzLmZiLmFycmF5KFxyXG4gICAgICAgICAgY29sdW1uLm9wdGlvbnMgPyBjb2x1bW4ub3B0aW9ucy5tYXAoKG9wdGlvbjogYW55KSA9PiBcclxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgb3B0aW9uTmFtZTogW29wdGlvbi5vcHRpb25OYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICBvcHRpb25WYWx1ZTogW29wdGlvbi5vcHRpb25WYWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICkgOiBbXVxyXG4gICAgICAgICksXHJcbiAgICAgICAgYXBpVXJsOiBbY29sdW1uLmFwaVVybCB8fCAnJ10sXHJcbiAgICAgICAgdmFsdWVLZXk6IFtjb2x1bW4udmFsdWVLZXkgfHwgJyddLFxyXG4gICAgICAgIGxhYmVsS2V5OiBbY29sdW1uLmxhYmVsS2V5IHx8ICcnXSxcclxuICAgICAgICBjbGFzc05hbWU6IFtjb2x1bW4uY2xhc3NOYW1lIHx8ICcnXSxcclxuICAgICAgICBhcGlLZXk6IFtjb2x1bW4uYXBpS2V5IHx8ICcnXVxyXG4gICAgICB9KTtcclxuICBcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbkZvcm1Hcm91cCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPHAtZGlhbG9nIGhlYWRlcj1cIkVkaXQgQ29uZmlndXJhdGlvbnNcIiAgW21vZGFsXT1cInRydWVcIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW3N0eWxlXT1cInt3aWR0aDogJzcwcmVtJ31cIiBjbGFzcz1cImN1c3RvbURpYWxvZ0NsYXNzXCIgKG9uSGlkZSk9XCJjbG9zZURpYWxvZygpXCI+XHJcbiAgPCEtLSA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBwLTIgYmctd2hpdGUgYm9yZGVyLTJcIj5cclxuICAgICAgICA8cCBjbGFzcz1cInRleHQtYmFzZVwiPkVkaXQgQ29uZmlndXJhdGlvbnM8L3A+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgYmctd2hpdGUgcC0yIGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IG1iLTggdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyb3dzXCIgY2xhc3M9XCJmb250LXNlbWlib2xkIHctMjRcIj5Sb3dzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZGlzYWJsZWRdPVwiZW5hYmxlQVBJXCIgWyhuZ01vZGVsKV09XCJyb3dzXCIgcGxhY2Vob2xkZXI9XCJyb3dzXCIgY2xhc3M9XCJmb3JtX19pbnB1dFwiIGlkPVwibmFtZVwiIGF1dG9jb21wbGV0ZT1cInJvd3NcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVuYWJsZUFQSVwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB3LTI0XCI+RW5hYmxlIEFQSTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiZW5hYmxlQVBJXCIgcGxhY2Vob2xkZXI9XCJBUEkgVXJsXCIgaWQ9XCJlbmFibGVBUElcIiAgYXV0b2NvbXBsZXRlPVwiZW5hYmxlQVBJXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW5hYmxlQVBJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXBpXCIgY2xhc3M9XCJmb250LXNlbWlib2xkIHctMjRcIj5BUEk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiYXBpXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBBUEkgVXJsXCIgaWQ9XCJhcGlcIiBjbGFzcz1cImZvcm1fX2lucHV0XCIgYXV0b2NvbXBsZXRlPVwiYXBpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgbWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IG1iLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtNCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIj5Db2x1bW5zOjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZENvbHVtbigpXCIgY2xhc3M9XCJjdXN0b20tc2F2ZS1idXR0b25cIj5BZGQgQ29sdW1uPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBvdmVyZmxvdy14LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImR5bmFtaWNGb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGbGV4IGNvbnRhaW5lciB3aXRoIG5vd3JhcCB0byBrZWVwIGFsbCBjb2x1bW5zIGluIGEgc2luZ2xlIHJvdyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiY29sdW1uc1wiIGNsYXNzPVwiZmxleCBnYXAtNCBmbGV4LW5vd3JhcCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIHAtNCByb3VuZGVkLWxnIG1pbi13LVsyMHJlbV0gZmxleC1zaHJpbmstMCBjYXJkLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3AtMiByaWdodC0yIGZsZXggZ2FwLTIganVzdGlmeS1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkdXBsaWNhdGVDb2x1bW4oaSlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmVlbi01MDAgdGV4dC13aGl0ZSBweC0zIHB5LTEgcm91bmRlZC1tZCBob3ZlcjpiZy1ncmVlbi02MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinpVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZUNvbHVtbihpKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0xIHJvdW5kZWQtbWQgaG92ZXI6YmctcmVkLTYwMFwiICpuZ0lmPVwiY29sdW1ucy5sZW5ndGg+MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKdjFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1ucyBpbiBhIFNpbmdsZSBSb3cgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgaXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj5Db2x1bW4gTmFtZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImhlYWRlclwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ29sdW1uIE5hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgZm9jdXM6cmluZyBmb2N1czpyaW5nLWJsdWUtMjAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+Q29sdW1uIFR5cGU6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2VsbFR5cGVcIiBjbGFzcz1cInctZnVsbCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIGNvbHVtblR5cGVzXCIgW3ZhbHVlXT1cInR5cGVcIj57eyB0eXBlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW5hYmxlQVBJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj5BUEkgVmFsdWUgS2V5OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFwaUtleVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgVmFsdWUgS2V5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGJvcmRlciByb3VuZGVkLW1kIHB4LTMgcHktMiBmb2N1czpyaW5nIGZvY3VzOnJpbmctYmx1ZS0yMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlsncmFkaW8tZ3JvdXAnLCAnZHJvcGRvd24nXS5pbmNsdWRlcyhjb2x1bW4udmFsdWUuY2VsbFR5cGUpXCIgY2xhc3M9XCJtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+T3B0aW9uczo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldE9wdGlvbnMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJqXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCBpdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvcHRpb25OYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPcHRpb24gTmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1zcGFuLTQgYm9yZGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1ibHVlLTIwMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm9wdGlvblZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPcHRpb24gVmFsdWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtc3Bhbi00IGJvcmRlciByb3VuZGVkLW1kIHB4LTMgcHktMiBmb2N1czpyaW5nIGZvY3VzOnJpbmctYmx1ZS0yMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJnZXRPcHRpb25zKGkpLnJlbW92ZUF0KGopXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1zcGFuLTIgYmctcmVkLTUwMCB0ZXh0LXdoaXRlIHB4LTIgcHktMSByb3VuZGVkLW1kIGhvdmVyOmJnLXJlZC02MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRPcHRpb24oaSlcIiBjbGFzcz1cImN1c3RvbS1zYXZlLWJ1dHRvbiBqdXN0aWZ5LWVuZFwiPkFkZCBPcHRpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ3NtYXJ0LWRyb3Bkb3duJ10uaW5jbHVkZXMoY29sdW1uLnZhbHVlLmNlbGxUeXBlKVwiIGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+QVBJIFVybDo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFwaVVybFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQVBJIFVSTFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGJvcmRlciByb3VuZGVkLW1kIHB4LTMgcHktMiBmb2N1czpyaW5nIGZvY3VzOnJpbmctYmx1ZS0yMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj5WYWx1ZSBLZXk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZUtleVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgVmFsdWUgS2V5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1ibHVlLTIwMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPkxhYmVsIEtleTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImxhYmVsS2V5XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBMYWJlbCBLZXlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgZm9jdXM6cmluZyBmb2N1czpyaW5nLWJsdWUtMjAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxyXG4gICAgICAgICAgPCEtLSA8aHIgY2xhc3M9XCJtdC0zIG14LTIgbWItMCBvcGFjaXR5LTEwXCI+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kICBnYXAtNCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHAtYnV0dG9uIHN0eWxlQ2xhc3M9XCJib3JkZXIgYm9yZGVyLWluZGlnby02MDBcIiBsYWJlbD1cIlNhdmVcIiAoY2xpY2spPVwic2F2ZUNvbmZpZ3VyYXRpb24oKVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgbXktM1wiPlxyXG4gICAgICAgICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ncmF5LTQwMFwiIC8+XHJcbiAgICAgICAgICAgICAgPHAtYnV0dG9uIGxhYmVsPVwiQXR0YWNoXCIgbGFiZWw9XCJTYXZlXCIgKGNsaWNrKT1cInNhdmVDb25maWd1cmF0aW9uKClcIiBcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJjdGFfYnV0dG9ucyB0ZXh0LW1lZGl1bSBidXR0b25fdGV4dF93aGl0ZSBzZWNvbmRhcnktY29sb3IgYm9yZGVyLTEgc3Ryb2tlX3NlY29uZGFyeSBub19oaWdodGxpZ2h0IG5vX2hpZ2h0bGlnaHRfc3Ryb2tlIGgtbWF4IG1yLTIgdy02cmVtIGN1c3RvbS1zYXZlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLWRpYWxvZz4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsL2NvbmZpZ3VyYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvcGFuZWwvY29uZmlndXJhdGlvbi1wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBcUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBU2pILE1BQU0sT0FBTywyQkFBMkI7SUFjbEI7SUFiWCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLE9BQU8sQ0FBTTtJQUNaLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLGVBQWUsQ0FBSztJQUV0QixJQUFJLEdBQVcsQ0FBQyxDQUFDO0lBQ2pCLFNBQVMsR0FBWSxLQUFL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Q0ksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNFLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z4LWNvbmZpZ3VyYXRpb24tcGFuZWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIElucHV0VGV4dE1vZHVsZSwgRm9ybXNNb2R1bGUsIERyb3Bkb3duTW9kdWxlLCBCdXR0b25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25QYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCAsIE9uQ2hhbmdlc3tcclxuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29uZmlnczogYW55O1xyXG4gIEBPdXRwdXQoKSBpc1Zpc2libGUgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNvbmZpZ3VyYXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZ0RhdGE6YW55O1xyXG5cclxuICBwdWJsaWMgcm93czogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgZW5hYmxlQVBJOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFwaTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBkeW5hbWljRm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBjb2x1bW5UeXBlczogc3RyaW5nW10gPSBbJ3RleHQnLCAnaW5wdXQtdGV4dCcsICdpbnB1dC1udW1iZXInLCAnZHJvcGRvd24nLCAnc21hcnQtZHJvcGRvd24nLCAnY2hlY2tib3gnLCAncmFkaW8nLCAncmFkaW8tZ3JvdXAnLCAnZmlsZS11cGxvYWQnLCAndGV4dGFyZWEnXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHRoaXMuZHluYW1pY0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY29sdW1uczogdGhpcy5mYi5hcnJheShbXSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiBcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZ0RhdGE/LnZhbHVlPy5jb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMucGF0Y2hEYXRhKCk7ICAvLyBJZiBkYXRhIGV4aXN0cywgcGF0Y2ggaXQgaW50byB0aGUgZm9ybVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRDb2x1bW4oKTsgIC8vIE90aGVyd2lzZSwgYWRkIGEgZGVmYXVsdCBjb2x1bW5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybS5nZXQoJ2NvbHVtbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyAqKvCflLkgQWRkIENvbHVtbiBEeW5hbWljYWxseSoqXHJcbiAgcHVibGljIGFkZENvbHVtbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtbkZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBoZWFkZXI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGNlbGxUeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgIG9wdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBhcGlVcmw6ICcnLFxyXG4gICAgICB2YWx1ZUtleTogJycsXHJcbiAgICAgIGxhYmVsS2V5OiAnJyxcclxuICAgICAgY2xhc3NOYW1lOiAnJyxcclxuICAgICAgYXBpS2V5OiAnJ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW5Gb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiBcclxuICBwdWJsaWMgcmVtb3ZlQ29sdW1uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gKirwn5S5IER1cGxpY2F0ZSBDb2x1bW4qKlxyXG4gIHB1YmxpYyBkdXBsaWNhdGVDb2x1bW4oaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5hdChpbmRleCkudmFsdWU7XHJcbiAgICBjb25zdCBkdXBsaWNhdGVDb2x1bW4gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgaGVhZGVyOiBbY3VycmVudENvbHVtbi5oZWFkZXIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBjZWxsVHlwZTogW2N1cnJlbnRDb2x1bW4uY2VsbFR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBwbGFjZWhvbGRlcjogW2N1cnJlbnRDb2x1bW4ucGxhY2Vob2xkZXJdLFxyXG4gICAgICBhcGlVcmw6IFtjdXJyZW50Q29sdW1uLmFwaVVybF0sXHJcbiAgICAgIHZhbHVlS2V5OiBbY3VycmVudENvbHVtbi52YWx1ZUtleV0sXHJcbiAgICAgIGxhYmVsS2V5OiBbY3VycmVudENvbHVtbi5sYWJlbEtleV0sXHJcbiAgICAgIGNsYXNzTmFtZTogW2N1cnJlbnRDb2x1bW4uY2xhc3NOYW1lXSxcclxuICAgICAgYXBpS2V5OiBbY3VycmVudENvbHVtbi5hcGlLZXldLFxyXG4gICAgICBvcHRpb25zOiB0aGlzLmZiLmFycmF5KFxyXG4gICAgICAgIGN1cnJlbnRDb2x1bW4ub3B0aW9ucy5tYXAoKG9wdGlvbjogYW55KSA9PiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgIG9wdGlvbk5hbWU6IFtvcHRpb24ub3B0aW9uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBvcHRpb25WYWx1ZTogW29wdGlvbi5vcHRpb25WYWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAgICAgICB9KSlcclxuICAgICAgKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbHVtbnMuaW5zZXJ0KGluZGV4ICsgMSwgZHVwbGljYXRlQ29sdW1uKTtcclxuICB9XHJcblxyXG4gIC8vICoq8J+UuSBBZGQgT3B0aW9ucyBEeW5hbWljYWxseSoqXHJcbiAgcHVibGljIGFkZE9wdGlvbihjb2x1bW5JbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcHRpb25Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBvcHRpb25OYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBvcHRpb25WYWx1ZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRPcHRpb25zKGNvbHVtbkluZGV4KS5wdXNoKG9wdGlvbkdyb3VwKTtcclxuICB9XHJcblxyXG4gIC8vICoq8J+UuSBHZXQgT3B0aW9ucyBGb3JtQXJyYXkgZm9yIGEgU3BlY2lmaWMgQ29sdW1uKipcclxuICBwdWJsaWMgZ2V0T3B0aW9ucyhjb2x1bW5JbmRleDogbnVtYmVyKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuYXQoY29sdW1uSW5kZXgpLmdldCgnb3B0aW9ucycpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIC8vICoq8J+UuSBDbG9zZSBEaWFsb2cqKlxyXG4gIHB1YmxpYyBjbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNWaXNpYmxlLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gKirwn5S5IFNhdmUgQ29uZmlndXJhdGlvbioqXHJcbiAgcHVibGljIHNhdmVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uLmVtaXQoe1xyXG4gICAgICByb3dzOiB0aGlzLnJvd3MsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuZHluYW1pY0Zvcm0udmFsdWU/LmNvbHVtbnMsXHJcbiAgICAgIGVuYWJsZUFQSTogdGhpcy5lbmFibGVBUEksXHJcbiAgICAgIGFwaTogdGhpcy5hcGlcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pc1Zpc2libGUuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TdWJtaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlZhbHVlIGNvbHVtbnMgZm9ybUFycmF5XCIsIHRoaXMuZHluYW1pY0Zvcm0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhdGNoRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZW5hYmxlQVBJID0gdGhpcy50YWJsZUNvbmZpZ0RhdGE/LnZhbHVlPy5nZW5lcmFsVmFsdWVzPy5lbmFibGVBUEk7XHJcbiAgICB0aGlzLmFwaSA9IHRoaXMudGFibGVDb25maWdEYXRhPy52YWx1ZT8uZ2VuZXJhbFZhbHVlcz8uYXBpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZ0RhdGE/LnZhbHVlPy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIC8vIENyZWF0aW5nIHRoZSBGb3JtR3JvdXAgZm9yIGVhY2ggY29sdW1uXHJcbiAgICAgIGNvbnN0IGNvbHVtbkZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIGhlYWRlcjogW2NvbHVtbi5oZWFkZXIgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGNlbGxUeXBlOiBbY29sdW1uLmNlbGxUeXBlIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBwbGFjZWhvbGRlcjogW2NvbHVtbi5wbGFjZWhvbGRlciB8fCAnJ10sXHJcbiAgICAgICAgb3B0aW9uczogdGhpcy5mYi5hcnJheShcclxuICAgICAgICAgIGNvbHVtbi5vcHRpb25zID8gY29sdW1uLm9wdGlvbnMubWFwKChvcHRpb246IGFueSkgPT4gXHJcbiAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgIG9wdGlvbk5hbWU6IFtvcHRpb24ub3B0aW9uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgb3B0aW9uVmFsdWU6IFtvcHRpb24ub3B0aW9uVmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApIDogW11cclxuICAgICAgICApLFxyXG4gICAgICAgIGFwaVVybDogW2NvbHVtbi5hcGlVcmwgfHwgJyddLFxyXG4gICAgICAgIHZhbHVlS2V5OiBbY29sdW1uLnZhbHVlS2V5IHx8ICcnXSxcclxuICAgICAgICBsYWJlbEtleTogW2NvbHVtbi5sYWJlbEtleSB8fCAnJ10sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBbY29sdW1uLmNsYXNzTmFtZSB8fCAnJ10sXHJcbiAgICAgICAgYXBpS2V5OiBbY29sdW1uLmFwaUtleSB8fCAnJ11cclxuICAgICAgfSk7XHJcbiAgXHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bW5Gb3JtR3JvdXApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLWRpYWxvZyBoZWFkZXI9XCJFZGl0IENvbmZpZ3VyYXRpb25zXCIgIFttb2RhbF09XCJ0cnVlXCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc3MHJlbSd9XCIgY2xhc3M9XCJjdXN0b21EaWFsb2dDbGFzc1wiIChvbkhpZGUpPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gIDwhLS0gPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggcC0yIGJnLXdoaXRlIGJvcmRlci0yXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5FZGl0IENvbmZpZ3VyYXRpb25zPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IGJnLXdoaXRlIHAtMiBib3JkZXItMiBib3JkZXItZ3JheS0yMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtYi04IHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicm93c1wiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB3LTI0XCI+Um93czwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2Rpc2FibGVkXT1cImVuYWJsZUFQSVwiIFsobmdNb2RlbCldPVwicm93c1wiIHBsYWNlaG9sZGVyPVwicm93c1wiIGNsYXNzPVwiZm9ybV9faW5wdXRcIiBpZD1cIm5hbWVcIiBhdXRvY29tcGxldGU9XCJyb3dzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJlbmFibGVBUElcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdy0yNFwiPkVuYWJsZSBBUEk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImVuYWJsZUFQSVwiIHBsYWNlaG9sZGVyPVwiQVBJIFVybFwiIGlkPVwiZW5hYmxlQVBJXCIgIGF1dG9jb21wbGV0ZT1cImVuYWJsZUFQSVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzNcIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUFQSSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFwaVwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB3LTI0XCI+QVBJPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImFwaVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQVBJIFVybFwiIGlkPVwiYXBpXCIgY2xhc3M9XCJmb3JtX19pbnB1dFwiIGF1dG9jb21wbGV0ZT1cImFwaVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IG1iLThcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTQgbWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkXCI+Q29sdW1uczo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiIGNsYXNzPVwiY3VzdG9tLXNhdmUtYnV0dG9uXCI+QWRkIENvbHVtbjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJkeW5hbWljRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxleCBjb250YWluZXIgd2l0aCBub3dyYXAgdG8ga2VlcCBhbGwgY29sdW1ucyBpbiBhIHNpbmdsZSByb3cgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImNvbHVtbnNcIiBjbGFzcz1cImZsZXggZ2FwLTQgZmxleC1ub3dyYXAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlciBwLTQgcm91bmRlZC1sZyBtaW4tdy1bMjByZW1dIGZsZXgtc2hyaW5rLTAgY2FyZC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9wLTIgcmlnaHQtMiBmbGV4IGdhcC0yIGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZHVwbGljYXRlQ29sdW1uKGkpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctZ3JlZW4tNTAwIHRleHQtd2hpdGUgcHgtMyBweS0xIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JlZW4tNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4p6VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVDb2x1bW4oaSlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTMgcHktMSByb3VuZGVkLW1kIGhvdmVyOmJnLXJlZC02MDBcIiAqbmdJZj1cImNvbHVtbnMubGVuZ3RoPjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinYxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbHVtbnMgaW4gYSBTaW5nbGUgUm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIGdhcC00IGl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+Q29sdW1uIE5hbWU6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJoZWFkZXJcIiBwbGFjZWhvbGRlcj1cIkVudGVyIENvbHVtbiBOYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1ibHVlLTIwMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPkNvbHVtbiBUeXBlOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNlbGxUeXBlXCIgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBjb2x1bW5UeXBlc1wiIFt2YWx1ZV09XCJ0eXBlXCI+e3sgdHlwZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUFQSSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+QVBJIFZhbHVlIEtleTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhcGlLZXlcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFZhbHVlIEtleVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgZm9jdXM6cmluZyBmb2N1czpyaW5nLWJsdWUtMjAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ3JhZGlvLWdyb3VwJywgJ2Ryb3Bkb3duJ10uaW5jbHVkZXMoY29sdW1uLnZhbHVlLmNlbGxUeXBlKVwiIGNsYXNzPVwibXQtMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPk9wdGlvbnM6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRPcHRpb25zKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwialwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgaXRlbXMtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3B0aW9uTmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgT3B0aW9uIE5hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtc3Bhbi00IGJvcmRlciByb3VuZGVkLW1kIHB4LTMgcHktMiBmb2N1czpyaW5nIGZvY3VzOnJpbmctYmx1ZS0yMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvcHRpb25WYWx1ZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgT3B0aW9uIFZhbHVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLXNwYW4tNCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgZm9jdXM6cmluZyBmb2N1czpyaW5nLWJsdWUtMjAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2V0T3B0aW9ucyhpKS5yZW1vdmVBdChqKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtc3Bhbi0yIGJnLXJlZC01MDAgdGV4dC13aGl0ZSBweC0yIHB5LTEgcm91bmRlZC1tZCBob3ZlcjpiZy1yZWQtNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkT3B0aW9uKGkpXCIgY2xhc3M9XCJjdXN0b20tc2F2ZS1idXR0b24ganVzdGlmeS1lbmRcIj5BZGQgT3B0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWydzbWFydC1kcm9wZG93biddLmluY2x1ZGVzKGNvbHVtbi52YWx1ZS5jZWxsVHlwZSlcIiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPkFQSSBVcmw6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhcGlVcmxcIiBwbGFjZWhvbGRlcj1cIkVudGVyIEFQSSBVUkxcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBib3JkZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgZm9jdXM6cmluZyBmb2N1czpyaW5nLWJsdWUtMjAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb250LXNlbWlib2xkXCI+VmFsdWUgS2V5OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVLZXlcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFZhbHVlIEtleVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGJvcmRlciByb3VuZGVkLW1kIHB4LTMgcHktMiBmb2N1czpyaW5nIGZvY3VzOnJpbmctYmx1ZS0yMDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj5MYWJlbCBLZXk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYWJlbEtleVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgTGFiZWwgS2V5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1ibHVlLTIwMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICAgIDwhLS0gPGhyIGNsYXNzPVwibXQtMyBteC0yIG1iLTAgb3BhY2l0eS0xMFwiPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCAgZ2FwLTQgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJDYW5jZWxcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiBzdHlsZUNsYXNzPVwiYm9yZGVyIGJvcmRlci1pbmRpZ28tNjAwXCIgbGFiZWw9XCJTYXZlXCIgKGNsaWNrKT1cInNhdmVDb25maWd1cmF0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIG15LTNcIj5cclxuICAgICAgICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJDYW5jZWxcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItZ3JheS00MDBcIiAvPlxyXG4gICAgICAgICAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIkF0dGFjaFwiIGxhYmVsPVwiU2F2ZVwiIChjbGljayk9XCJzYXZlQ29uZmlndXJhdGlvbigpXCIgXHJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwiY3RhX2J1dHRvbnMgdGV4dC1tZWRpdW0gYnV0dG9uX3RleHRfd2hpdGUgc2Vjb25kYXJ5LWNvbG9yIGJvcmRlci0xIHN0cm9rZV9zZWNvbmRhcnkgbm9faGlnaHRsaWdodCBub19oaWdodGxpZ2h0X3N0cm9rZSBoLW1heCBtci0yIHctNnJlbSBjdXN0b20tc2F2ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvcC1kaWFsb2c+Il19
@@ -190,6 +190,8 @@ class ConfigurationPanelComponent {
190
190
  console.log("Value columns formArray", this.dynamicForm.value);
191
191
  }
192
192
  patchData() {
193
+ this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;
194
+ this.api = this.tableConfigData?.value?.generalValues?.api;
193
195
  this.tableConfigData?.value?.columns.forEach((column) => {
194
196
  // Creating the FormGroup for each column
195
197
  const columnFormGroup = this.fb.group({
@@ -266,6 +268,7 @@ class DynamicTableComponent extends FxBaseComponent {
266
268
  };
267
269
  destroy$ = new Subject();
268
270
  uploadedImages = [];
271
+ generalValues;
269
272
  tableFormControl = new FormControl();
270
273
  smartDropdownOptions = {};
271
274
  http = inject(HttpClient);
@@ -363,6 +366,10 @@ class DynamicTableComponent extends FxBaseComponent {
363
366
  return Array.from({ length: count });
364
367
  }
365
368
  onChangeConfiguration(event) {
369
+ this.generalValues = {
370
+ enableAPI: event?.enableAPI,
371
+ api: event?.api
372
+ };
366
373
  const columns = event.columns.map((col) => {
367
374
  return {
368
375
  header: col?.header,
@@ -402,8 +409,10 @@ class DynamicTableComponent extends FxBaseComponent {
402
409
  rows: []
403
410
  };
404
411
  }
412
+ this.tableConfig.generalValues = this.generalValues;
405
413
  this.fxData.value = this.tableConfig;
406
414
  this.tableFormControl.reset();
415
+ console.log("after");
407
416
  this.tableFormControl.setValue(this.tableConfig);
408
417
  }
409
418
  updateSettings() {
@@ -430,6 +439,7 @@ class DynamicTableComponent extends FxBaseComponent {
430
439
  columns,
431
440
  rows
432
441
  };
442
+ this.tableConfig.generalValues = this.generalValues;
433
443
  this.fxData.value = this.tableConfig;
434
444
  this.tableFormControl.reset();
435
445
  this.tableFormControl.setValue(this.tableConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"fx-form-builder-wrapper.mjs","sources":["../../../projects/fx-builder-wrapper/src/lib/fx-builder-wrapper.service.ts","../../../projects/fx-builder-wrapper/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.ts","../../../projects/fx-builder-wrapper/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.html","../../../projects/fx-builder-wrapper/src/lib/panel/configuration-panel/configuration-panel.component.ts","../../../projects/fx-builder-wrapper/src/lib/panel/configuration-panel/configuration-panel.component.html","../../../projects/fx-builder-wrapper/src/lib/panel/settings-panel/settings-panel.component.ts","../../../projects/fx-builder-wrapper/src/lib/panel/settings-panel/settings-panel.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dynamic-table/dynamic-table.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dynamic-table/dynamic-table.component.html","../../../projects/fx-builder-wrapper/src/lib/components/toggle-button/toggle-button.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/toggle-button/toggle-button.component.html","../../../projects/fx-builder-wrapper/src/lib/components/uploader/uploader.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/uploader/uploader.component.html","../../../projects/fx-builder-wrapper/src/lib/components/toggle/toggle.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/toggle/toggle.component.html","../../../projects/fx-builder-wrapper/src/lib/fx-builder-wrapper.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/fx-form-component/fx-form-component.component.ts","../../../projects/fx-builder-wrapper/src/public-api.ts","../../../projects/fx-builder-wrapper/src/fx-form-builder-wrapper.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\r\nimport { FxBaseComponent, FxComponentRegistryService, FxForm, FxUtils } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FxBuilderWrapperService {\r\n public variables$ = new BehaviorSubject<any | null>(null);\r\n constructor(private fxComponentRegistry: FxComponentRegistryService) { }\r\n\r\n public registerCustomComponent(title: string, selector: string, component: Type<FxBaseComponent>\r\n ): void {\r\n this.fxComponentRegistry.registerComponent(selector, component, {\r\n registeringAs: \"CUSTOM\",\r\n libraryItem: {\r\n title,\r\n icon: 'fa-eye',\r\n fxData: {\r\n id: null,\r\n name: selector,\r\n value: \"\",\r\n selector: selector,\r\n elements: [],\r\n events: []\r\n }\r\n },\r\n })\r\n }\r\n\r\n public getComponent(selector: string): Type<FxBaseComponent> | undefined {\r\n return this.fxComponentRegistry.getComponent(selector);\r\n }\r\n\r\n public getInitializedFxForm(): FxForm {\r\n return FxUtils.createNewForm(); \r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-dispatch-to-clinic',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './dispatch-to-clinic.component.html'\r\n})\r\nexport class DispatchToClinicComponent extends FxBaseComponent {\r\n private fb = inject(FormBuilder);\r\n\r\n public clinicAddress$: BehaviorSubject<any> = new BehaviorSubject<any>({});\r\n\r\n public dispatchForm: FormGroup = this.fb.group({\r\n courierName: ['', Validators.required],\r\n trackingNumber: ['', Validators.required],\r\n trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],\r\n notes: ['', Validators.required]\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n\r\n this.onInit.subscribe(() => {\r\n this._register(this.dispatchForm);\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public copyToClipboard(address: any): void {\r\n navigator.clipboard.writeText(address);\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <section\r\n class=\"justify-content-around lg:justify-content-between w-full white-color border-1 border-solid stroke_light_grey p-3 mb-3 mt-3\">\r\n <form [formGroup]=\"dispatchForm\">\r\n <div class=\"grid\">\r\n <!-- Courier Name -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"courierName\" class=\"input-title\">Courier Name</label>\r\n <input autocomplete=\"off\" formControlName=\"courierName\" type=\"text\" id=\"courierName\"\r\n name=\"courierName\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter courier name\" />\r\n\r\n <!-- validation -->\r\n <small *ngIf=\"dispatchForm.get('courierName')?.invalid && dispatchForm.get('courierName')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Courier Name is required.\r\n </small>\r\n <!-- validation -->\r\n </div>\r\n <!-- Courier Name -->\r\n\r\n <!-- Tracking Number -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingNumber\" class=\"input-title\">Tracking Number</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingNumber\" type=\"text\" id=\"trackingNumber\"\r\n name=\"trackingNumber\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking number\" />\r\n <small\r\n *ngIf=\"dispatchForm.get('trackingNumber')?.invalid && dispatchForm.get('trackingNumber')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Tracking Number is required.\r\n </small>\r\n </div>\r\n <!-- Tracking Number -->\r\n\r\n <!-- Tracking URL -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingUrl\" class=\"input-title\">Tracking URL</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingUrl\" type=\"text\" id=\"trackingUrl\"\r\n name=\"trackingUrl\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking url\" />\r\n <small *ngIf=\"dispatchForm.get('trackingUrl')?.invalid && dispatchForm.get('trackingUrl')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['required']\">Tracking URL is\r\n required.</span>\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['pattern']\">Invalid URL format.</span>\r\n </small>\r\n </div>\r\n <!-- Tracking URL -->\r\n\r\n <!-- Notes -->\r\n <div class=\"col-12 md:col-6 input-container\">\r\n <label for=\"notes\" class=\"input-title\">Notes</label>\r\n <textarea autocomplete=\"off\" formControlName=\"notes\" rows=\"5\" id=\"notes\" name=\"notes\"\r\n class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter notes\"></textarea>\r\n <small *ngIf=\"dispatchForm.get('notes')?.invalid && dispatchForm.get('notes')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Notes are required.\r\n </small>\r\n </div>\r\n <!-- Notes -->\r\n\r\n <!-- Address with Copy Icon -->\r\n <div class=\"col-12 md:col-6 pt-0\">\r\n <div class=\"mb-1\">Address</div>\r\n <ng-container *ngIf=\"(clinicAddress$ | async) as address\">\r\n <address #completeAddress>{{address?.street}}, {{address?.state}}, {{address?.postalCode}}\r\n <i class=\"pi pi-copy cursor-pointer text-xl text-secondary-color\"\r\n (click)=\"copyToClipboard(completeAddress.textContent)\"></i>\r\n </address>\r\n </ng-container>\r\n </div>\r\n <!-- Address with Copy Icon -->\r\n </div>\r\n </form>\r\n </section>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { FormArray, FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fx-configuration-panel',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ButtonModule, DialogModule, InputTextModule, FormsModule, DropdownModule, ButtonModule],\r\n templateUrl: './configuration-panel.component.html',\r\n styleUrl: './configuration-panel.component.css',\r\n})\r\nexport class ConfigurationPanelComponent implements OnInit , OnChanges{\r\n @Input() visible: boolean = false;\r\n @Input() configs: any;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<any>();\r\n @Input() tableConfigData:any;\r\n\r\n public rows: number = 1;\r\n public enableAPI: boolean = false;\r\n public api: string = '';\r\n\r\n public dynamicForm: FormGroup;\r\n public columnTypes: string[] = ['text', 'input-text', 'input-number', 'dropdown', 'smart-dropdown', 'checkbox', 'radio', 'radio-group', 'file-upload', 'textarea'];\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.dynamicForm = this.fb.group({\r\n columns: this.fb.array([])\r\n });\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n \r\n }\r\n ngOnInit(): void {\r\n if (this.tableConfigData?.value?.columns) {\r\n this.patchData(); // If data exists, patch it into the form\r\n } else {\r\n this.addColumn(); // Otherwise, add a default column\r\n }\r\n }\r\n\r\n get columns(): FormArray {\r\n return this.dynamicForm.get('columns') as FormArray;\r\n }\r\n\r\n // **🔹 Add Column Dynamically**\r\n public addColumn(): void {\r\n const columnFormGroup = this.fb.group({\r\n header: ['', Validators.required],\r\n cellType: ['', Validators.required],\r\n placeholder: '',\r\n options: this.fb.array([]),\r\n apiUrl: '',\r\n valueKey: '',\r\n labelKey: '',\r\n className: '',\r\n apiKey: ''\r\n });\r\n this.columns.push(columnFormGroup);\r\n }\r\n\r\n \r\n public removeColumn(index: number): void {\r\n if (this.columns.length > 1) {\r\n this.columns.removeAt(index);\r\n }\r\n }\r\n\r\n // **🔹 Duplicate Column**\r\n public duplicateColumn(index: number): void {\r\n const currentColumn = this.columns.at(index).value;\r\n const duplicateColumn = this.fb.group({\r\n header: [currentColumn.header, Validators.required],\r\n cellType: [currentColumn.cellType, Validators.required],\r\n placeholder: [currentColumn.placeholder],\r\n apiUrl: [currentColumn.apiUrl],\r\n valueKey: [currentColumn.valueKey],\r\n labelKey: [currentColumn.labelKey],\r\n className: [currentColumn.className],\r\n apiKey: [currentColumn.apiKey],\r\n options: this.fb.array(\r\n currentColumn.options.map((option: any) => this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n }))\r\n )\r\n });\r\n this.columns.insert(index + 1, duplicateColumn);\r\n }\r\n\r\n // **🔹 Add Options Dynamically**\r\n public addOption(columnIndex: number): void {\r\n const optionGroup = this.fb.group({\r\n optionName: ['', Validators.required],\r\n optionValue: ['', Validators.required]\r\n });\r\n\r\n this.getOptions(columnIndex).push(optionGroup);\r\n }\r\n\r\n // **🔹 Get Options FormArray for a Specific Column**\r\n public getOptions(columnIndex: number): FormArray {\r\n return this.columns.at(columnIndex).get('options') as FormArray;\r\n }\r\n\r\n // **🔹 Close Dialog**\r\n public closeDialog(): void {\r\n this.isVisible.emit(false);\r\n }\r\n\r\n // **🔹 Save Configuration**\r\n public saveConfiguration(): void {\r\n this.configuration.emit({\r\n rows: this.rows,\r\n columns: this.dynamicForm.value?.columns,\r\n enableAPI: this.enableAPI,\r\n api: this.api\r\n });\r\n this.isVisible.emit(false);\r\n }\r\n\r\n public onSubmit(): void {\r\n console.log(\"Value columns formArray\", this.dynamicForm.value);\r\n }\r\n\r\n public patchData(): void {\r\n this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n // Creating the FormGroup for each column\r\n const columnFormGroup = this.fb.group({\r\n header: [column.header || '', Validators.required],\r\n cellType: [column.cellType || '', Validators.required],\r\n placeholder: [column.placeholder || ''],\r\n options: this.fb.array(\r\n column.options ? column.options.map((option: any) => \r\n this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n })\r\n ) : []\r\n ),\r\n apiUrl: [column.apiUrl || ''],\r\n valueKey: [column.valueKey || ''],\r\n labelKey: [column.labelKey || ''],\r\n className: [column.className || ''],\r\n apiKey: [column.apiKey || '']\r\n });\r\n \r\n \r\n this.columns.push(columnFormGroup);\r\n });\r\n }\r\n}\r\n","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <!-- <ng-template pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configurations</p>\r\n </div>\r\n </ng-template> -->\r\n <div class=\"flex flex-col gap-4 bg-white p-2 border-2 border-gray-200\">\r\n <div class=\"flex items-center gap-4 mb-8 w-full\">\r\n <div class=\"w-1/3\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [disabled]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\" autocomplete=\"rows\" />\r\n </div>\r\n <div class=\"w-1/3\">\r\n <label for=\"enableAPI\" class=\"font-semibold w-24\">Enable API</label>\r\n <input type=\"checkbox\" [(ngModel)]=\"enableAPI\" placeholder=\"API Url\" id=\"enableAPI\" autocomplete=\"enableAPI\" />\r\n </div>\r\n <div class=\"w-1/3\">\r\n @if (enableAPI) {\r\n <ng-container>\r\n <label for=\"api\" class=\"font-semibold w-24\">API</label>\r\n <input type=\"text\" [(ngModel)]=\"api\" placeholder=\"Enter API Url\" id=\"api\" class=\"form__input\" autocomplete=\"api\" />\r\n </ng-container>\r\n }\r\n </div> \r\n \r\n </div>\r\n <!-- <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n <div class=\"w-1/2\">\r\n \r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n \r\n \r\n </div> -->\r\n \r\n <div class=\"flex flex-wrap gap-4 mb-8\">\r\n \r\n <div class=\"w-full flex items-center justify-between\">\r\n <p class=\"text-sm font-semibold\">Columns:</p>\r\n <!-- <button type=\"button\" (click)=\"addColumn()\" class=\"custom-save-button\">Add Column</button> -->\r\n </div>\r\n \r\n <div class=\"w-full overflow-x-auto\">\r\n <form [formGroup]=\"dynamicForm\" (ngSubmit)=\"onSubmit()\">\r\n <!-- Flex container with nowrap to keep all columns in a single row -->\r\n <div formArrayName=\"columns\" class=\"flex gap-4 flex-nowrap whitespace-nowrap\">\r\n <div *ngFor=\"let column of columns.controls; let i = index\" [formGroupName]=\"i\" \r\n class=\"border p-4 rounded-lg min-w-[20rem] flex-shrink-0 card-width\">\r\n <div class=\"top-2 right-2 flex gap-2 justify-end\">\r\n <button type=\"button\" (click)=\"duplicateColumn(i)\" \r\n class=\"bg-green-500 text-white px-3 py-1 rounded-md hover:bg-green-600\">\r\n ➕\r\n </button>\r\n <button type=\"button\" (click)=\"removeColumn(i)\" \r\n class=\"text-white px-3 py-1 rounded-md hover:bg-red-600\" *ngIf=\"columns.length>1\">\r\n ❌\r\n </button>\r\n </div>\r\n <!-- Columns in a Single Row -->\r\n <div class=\"grid grid-cols-1 gap-4 items-center mb-2\">\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Column Name:</label>\r\n <input formControlName=\"header\" placeholder=\"Enter Column Name\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Column Type:</label>\r\n <select formControlName=\"cellType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option *ngFor=\"let type of columnTypes\" [value]=\"type\">{{ type }}</option>\r\n </select>\r\n </div>\r\n @if (enableAPI) {\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">API Value Key:</label>\r\n <input formControlName=\"apiKey\" placeholder=\"Enter Value Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n }\r\n \r\n </div>\r\n <div *ngIf=\"['radio-group', 'dropdown'].includes(column.value.cellType)\" class=\"mt-2\">\r\n\r\n <label class=\"font-semibold\">Options:</label>\r\n \r\n <div formArrayName=\"options\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\" \r\n class=\"grid grid-cols-1 gap-4 items-center mt-2\">\r\n <input formControlName=\"optionName\" placeholder=\"Enter Option Name\" \r\n class=\"col-span-4 border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <input formControlName=\"optionValue\" placeholder=\"Enter Option Value\" \r\n class=\"col-span-4 border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\" \r\n class=\"col-span-2 bg-red-500 text-white px-2 py-1 rounded-md hover:bg-red-600\">\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <button type=\"button\" (click)=\"addOption(i)\" class=\"custom-save-button justify-end\">Add Option</button>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"['smart-dropdown'].includes(column.value.cellType)\" class=\"grid grid-cols-1 gap-4 mt-4\">\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">API Url:</label>\r\n <input formControlName=\"apiUrl\" placeholder=\"Enter API URL\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">Value Key:</label>\r\n <input formControlName=\"valueKey\" placeholder=\"Enter Value Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">Label Key:</label>\r\n <input formControlName=\"labelKey\" placeholder=\"Enter Label Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n \r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n\r\n\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <!-- <hr class=\"mt-3 mx-2 mb-0 opacity-10\"> -->\r\n <!-- <div class=\"flex justify-end gap-4 w-full\">\r\n <p-button label=\"Cancel\" severity=\"secondary\" (click)=\"closeDialog()\" />\r\n <p-button styleClass=\"border border-indigo-600\" label=\"Save\" (click)=\"saveConfiguration()\" />\r\n </div> -->\r\n <div class=\"flex justify-center my-3\">\r\n <p-button label=\"Cancel\" severity=\"secondary\" (click)=\"closeDialog()\"\r\n styleClass=\"border-gray-400\" />\r\n <p-button label=\"Attach\" label=\"Save\" (click)=\"saveConfiguration()\" \r\n styleClass=\"cta_buttons text-medium button_text_white secondary-color border-1 stroke_secondary no_hightlight no_hightlight_stroke h-max mr-2 w-6rem custom-save-button\"\r\n />\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FxComponent, FxData, FxMode, FxSettingComponent, FxSettingsService, FxUtils } from '@instantsys-labs/fx';\r\nimport { Dialog } from 'primeng/dialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ConfigurationPanelComponent } from '../configuration-panel/configuration-panel.component';\r\n\r\n@Component({\r\n selector: 'fx-settings-panel',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, InputTextModule, ConfigurationPanelComponent],\r\n templateUrl: './settings-panel.component.html',\r\n styleUrl: './settings-panel.component.css'\r\n})\r\nexport class SettingsPanelComponent extends FxComponent implements OnInit ,OnChanges {\r\n \r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\r\n @Input() tableData:any;\r\n tableConfig:any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.tableConfig = this.tableData;\r\n }\r\n\r\n public openSettingDialog(): void {\r\n this.visible = true;\r\n }\r\n}\r\n","<fx-configuration-panel [visible]=\"visible\" (isVisible)=\"visible = $event\" [tableConfigData]=\"tableConfig\" (configuration)=\"configuration.emit($event)\"></fx-configuration-panel>\r\n\r\n<div class=\"fx-element\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"fxData.$fxForm?.$mode !== FxMode.VIEW\">\r\n <div class=\"fx-overlay border-gray-400 border rounded cursor-pointer\" (click)=\"onElementSelect(fxData)\"\r\n (dblclick)=\"openSettingDialog()\">\r\n <div class=\"fx-actions flex justify-between\">\r\n\r\n <div class=\"bg-gray-700 text-gray-300 px-2 rounded-t ml-2 text-xs flex justify-center items-center\">\r\n <div>#{{ fxData.name }}-<span class=\"text-xs italic\">{{ fxData.id }}</span></div>\r\n </div>\r\n\r\n <div class=\"flex justify-around items-end mr-2\">\r\n <div class=\"cursor-pointer bg-secondary text-white w-8 mr-1 text-center rounded-t\" title=\"Settings\"\r\n (click)=\"fxSettingService.openSetting(fxData)\">\r\n <i class=\"fa fa-cog text-xs\"></i>\r\n </div>\r\n <div (click)=\"deleteElement(fxData)\"\r\n class=\"cursor-pointer bg-red-600 text-white w-8 mr-1 text-center rounded-t\" title=\"Delete\">\r\n <i class=\"fa fa-times text-xs\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container #dynamicComponentContainer></ng-container>\r\n </ng-container>\r\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FxBaseComponent, FxMode, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { SettingsPanelComponent } from '../../panel/settings-panel/settings-panel.component';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport {Subject, takeUntil } from 'rxjs';\r\n\r\nexport interface TableColumnConfig {\r\n header: string;\r\n cellType: 'text' | 'input-text' | 'input-number' | 'dropdown' | 'smart-dropdown' | 'checkbox' | 'radio' | 'radio-group' | 'file-upload' | 'textarea';\r\n placeholder?: string;\r\n options?: string[];\r\n apiUrl?: string;\r\n valueKey?: string;\r\n labelKey?: string;\r\n className?: string;\r\n}\r\nexport interface TableConfig {\r\n columns: TableColumnConfig[];\r\n rows: any[];\r\n}\r\n@Component({\r\n selector: 'fx-dynamic-table',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule],\r\n templateUrl: './dynamic-table.component.html',\r\n styleUrl: './dynamic-table.component.css',\r\n})\r\n\r\nexport class DynamicTableComponent extends FxBaseComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() tableRows: Array<any> = [];\r\n @Input() previewType: FxMode = FxMode.VIEW;\r\n @Input() tableConfig: any = {\r\n columns: [\r\n { header: 'Column 1', cellType: 'text' },\r\n { header: 'Column 2', cellType: 'text' },\r\n { header: 'Column 3', cellType: 'text' },\r\n { header: 'Column 4', cellType: 'text' },\r\n { header: 'Column 5', cellType: 'text' },\r\n ],\r\n};\r\n\r\n private destroy$ = new Subject<Boolean>();\r\n public uploadedImages: Array<Record<string, string | File | null> | null> = [];\r\n\r\n public tableFormControl = new FormControl();\r\n public smartDropdownOptions: { [key: string]: Array<{ name: string, value: string }> } = {};\r\n private http = inject(HttpClient);\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr);\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.tableFormControl);\r\n })\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$.pipe(\r\n takeUntil(this.destroy$)).subscribe((variables: any) => {\r\n if (variables) {\r\n let dynamicTableValues: any;\r\n for (const [key, value] of Object.entries(variables)) {\r\n if (key.includes('dynamic-table')) {\r\n dynamicTableValues = value;\r\n }\r\n }\r\n if (Object.keys(dynamicTableValues).length) {\r\n // const fileHeaderName = dynamicTableValues?.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n const fileHeaderName = dynamicTableValues?.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n dynamicTableValues?.rows?.forEach((item: any, index: number) => {\r\n // // this.uploadedImages[index] = item[fileHeaderName] ? item[fileHeaderName]: null;\r\n // const fileUrl = item[fileHeaderName]; // Get the file URL\r\n\r\n // this.uploadedImages[index] = fileUrl\r\n // ? { result: fileUrl, file: null } // Store the URL as 'result'\r\n // : null;\r\n \r\n if (item[fileHeaderName]) {\r\n this.parseUrls(item[fileHeaderName], index);\r\n }\r\n })\r\n console.log(\"uploadedImages\", this.uploadedImages);\r\n console.log(\"dynamictable\", dynamicTableValues);\r\n this.tableConfig = dynamicTableValues;\r\n this.fxData.value = this.tableConfig;\r\n // this.tableFormControl.reset();\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n this.tableFormControl = new FormControl();\r\n setTimeout(() => { // Delay to ensure proper patching\r\n this.tableFormControl.patchValue(this.tableConfig, { emitEvent: true });\r\n console.log(\"tableFormControl\",this.tableFormControl);\r\n this.cdr.detectChanges();\r\n }, 50);\r\n }\r\n }\r\n })\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n if(this.fxData?.value && Object.keys(this.fxData?.value)?.length != 0) {\r\n this.tableConfig = this.fxData.value;\r\n this.fetchSmartDropdownData();\r\n }\r\n }, 100)\r\n }\r\n \r\n protected fetchSmartDropdownData(): void {\r\n this.tableConfig.columns\r\n .filter((column: TableColumnConfig) => column.cellType === 'smart-dropdown' && column?.apiUrl)\r\n .forEach((column: TableColumnConfig) => {\r\n this.http.get<any>(column.apiUrl!).subscribe((response: any) => {\r\n this.smartDropdownOptions[column.header] = response.map((item: any) => ({\r\n value: item[column.valueKey!],\r\n name: item[column.labelKey!],\r\n }));\r\n });\r\n });\r\n }\r\n\r\n public uploadImage(event: Event, rowIndex: number): void {\r\n const file = (event.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uploadedImages[rowIndex] = {\r\n result: reader.result as string,\r\n file: file\r\n }\r\n this.tableConfig.rows[rowIndex][this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header] = file;\r\n console.log(\"tableConfig\", this.tableConfig);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'column-size', $title: 'No. of columns', value: 1 }),\r\n new FxStringSetting({ key: 'table-config', $title: 'Table Configuration', value: {} }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public getArray(count: number): number[] {\r\n return Array.from({ length: count });\r\n }\r\n\r\n public onChangeConfiguration(event: any): void { \r\n const columns = event.columns.map((col: any) => {\r\n return {\r\n header: col?.header,\r\n cellType: col?.cellType,\r\n placeholder: col?.placeholder,\r\n options: col?.options,\r\n apiUrl: col?.apiUrl,\r\n valueKey: col?.valueKey,\r\n labelKey: col?.labelKey,\r\n className: col?.className,\r\n apiKey: col?.apiKey\r\n }\r\n });\r\n if(!event?.enableAPI) {\r\n this.tableConfig.columns = columns;\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => ({ name: `SKU-${index + 1}`, age: index % 2 !== 0, gender: 'male' }))\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => {\r\n // const rows = columns.map((c: any) => {\r\n // return {\r\n // c?.header: null\r\n // }\r\n // })\r\n // return rows\r\n // })\r\n this.tableConfig.rows = Array.from({ length: +event?.rows }, (_, index) => {\r\n return columns.reduce((acc: any, c: any) => {\r\n acc[c?.header] = ''; // Initialize each column key with null\r\n return acc;\r\n }, {});\r\n });\r\n \r\n this.fetchSmartDropdownData();\r\n }\r\n if(event?.enableAPI) {\r\n this.drawTable(event, columns)\r\n this.tableConfig = {\r\n columns: columns,\r\n rows: []\r\n };\r\n }\r\n\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n private updateSettings(): void{\r\n if(this.fxData.settings){\r\n for(let setting of this.fxData.settings){\r\n if(setting.key === 'table-config'){\r\n setting.value = this.tableConfig;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public drawTable(event: any, columns: any): void {\r\n let rows;\r\n this.http.get(event.api).subscribe((res: any) => {\r\n if(res) {\r\n rows = res.map((item: any) => {\r\n const newObj: Record<string, any> = {};\r\n columns.forEach((col: any) => {\r\n newObj[col.header] = item[col.apiKey];\r\n });\r\n return newObj;\r\n });\r\n this.tableConfig = {\r\n columns,\r\n rows\r\n }\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n })\r\n }\r\n\r\n public deleteFile(file: any, index: number): void {\r\n this.uploadedImages.splice(index, 1, null);\r\n this.tableConfig.rows[index][this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header] = null;\r\n console.log(\"tableConfig\", this.tableConfig);\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n public parseUrls(url: string, index: number): void {\r\n this.http.get(url, { responseType: 'blob' }).subscribe({\r\n next: (imageBlob: Blob) => {\r\n const imageURL = URL.createObjectURL(imageBlob);\r\n this.uploadedImages[index] = {\r\n result: imageURL,\r\n file: null\r\n };\r\n },\r\n error: (error) => {\r\n console.error('Error fetching image:', error);\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<fx-settings-panel [fxData]=\"fxData\" [tableData]=\"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 value=\"\">Select {{column.header}}</option> -->\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 value=\"\">Select {{column.header}}</option> -->\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 <div class=\"flex flex-col items-end justify-end relative\">\r\n <div class=\"relative\">\r\n <img \r\n width=\"100\" \r\n *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" \r\n [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\"\r\n class=\"rounded shadow\"\r\n />\r\n <button \r\n *ngIf=\"uploadedImages?.[rowIndex]?.['result']\"\r\n (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\" \r\n class=\"absolute top-0 right-0 text-white rounded-md w-5 h-5 flex items-center justify-center shadow-lg hover:bg-red-600\"\r\n >\r\n ❌\r\n </button>\r\n </div>\r\n \r\n <input \r\n [class]=\"column?.className\" \r\n type=\"file\" \r\n name=\"file\" \r\n #uploadFile \r\n hidden \r\n multiple\r\n (change)=\"uploadImage($event, rowIndex)\" \r\n />\r\n \r\n <button (click)=\"uploadFile.click()\" class=\"mt-2 bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600\">\r\n Upload\r\n </button>\r\n </div>\r\n \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>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxIconSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\n\r\n@Component({\r\n selector: 'lib-toggle-button',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, ReactiveFormsModule, FormsModule],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrl: './toggle-button.component.css'\r\n})\r\nexport class ToggleButtonComponent extends FxBaseComponent { \r\n public toggleBtnControl = new UntypedFormControl(false);\r\n public isToggled = false;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.toggleBtnControl);\r\n })\r\n }\r\n\r\n public toggle(): void {\r\n this.isToggled = !this.toggleBtnControl.value;\r\n this.toggleBtnControl.setValue(this.isToggled);\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'classes', $title: 'Classes', value: '' }),\r\n new FxStringSetting({ key: 'active-text', $title: 'Active Text', value: 'On' }),\r\n new FxStringSetting({ key: 'inactive-text', $title: 'Inactive Text', value: 'Off' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<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","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { v4 as uuidv4} from 'uuid';\r\n\r\n@Component({\r\n selector: 'fx-uploader',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './uploader.component.html',\r\n styleUrl: './uploader.component.css'\r\n})\r\nexport class UploaderComponent extends FxBaseComponent {\r\n public uploadFileControl = new UntypedFormControl();\r\n public uploadedFiles: Array<any> = [];\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.uploadFileControl);\r\n })\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files) {\r\n for(let i = 0; i < input?.files?.length; i++) {\r\n const file = input.files[i];\r\n const reader = new FileReader();\r\n reader.onload = e => {\r\n this.uploadedFiles.push({\r\n file: file,\r\n previewUrl: e.target?.result,\r\n name: file?.name,\r\n id: uuidv4()\r\n })\r\n this.uploadFileControl.setValue(this.uploadedFiles)\r\n }\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n }\r\n\r\n public deleteFile(id: string): void {\r\n this.uploadedFiles = this.uploadedFiles.filter(file => file?.id !== id);\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'upload-text', $title: 'Upload Text', value: 'Upload File'}),\r\n new FxSelectSetting({key: 'multiple-upload', $title: 'Multiple Upload', value: false}, [{option: 'Enable', value: true}, {option: 'Disable', value: false}])\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload\">\r\n <button type=\"button\" (click)=\"fileInput.click()\">\r\n {{setting('upload-text')}}\r\n </button>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n [formControl]=\"uploadFileControl\"\r\n hidden\r\n />\r\n <div class=\"file-list\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div (click)=\"deleteFile(file?.id)\" *ngFor=\"let file of uploadedFiles\">\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.previewUrl\" alt=\"\">\r\n <!-- <p>{{file?.name}}</p> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</fx-component>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\n\r\n@Component({\r\n selector: 'fx-toggle',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './toggle.component.html',\r\n styleUrl: './toggle.component.css'\r\n})\r\nexport class ToggleComponent extends FxBaseComponent {\r\n public toggleControl = new FormControl<boolean>(false)\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.toggleControl);\r\n })\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'accept', $title: 'Accept Text', value: 'Yes' }),\r\n new FxStringSetting({ key: 'reject', $title: 'Reject Text', value: 'No' })\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<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","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { FxBuilderConfiguration, FxComponentBuilder, FxForm, FxMode, FxScope, FxUtils } from '@instantsys-labs/fx';\r\nimport { DispatchToClinicComponent } from './custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';\r\nimport { FxBuilderWrapperService } from './fx-builder-wrapper.service';\r\nimport { DynamicTableComponent } from './components/dynamic-table/dynamic-table.component';\r\nimport { ToggleButtonComponent } from './components/toggle-button/toggle-button.component';\r\nimport { UploaderComponent } from './components/uploader/uploader.component';\r\nimport { ToggleComponent } from './components/toggle/toggle.component';\r\n\r\n@Component({\r\n selector: 'fx-builder-wrapper',\r\n standalone: true,\r\n imports: [CommonModule, FxComponentBuilder],\r\n template: `\r\n <fx-component-builder \r\n #componentBuilder \r\n [fx-form]=\"fxForm\" \r\n [configuration]=\"fxConfiguration\" \r\n [scope]=\"FxScope.BUILDER\"\r\n >\r\n </fx-component-builder>\r\n `,\r\n styleUrl: './form-builder.css',\r\n})\r\nexport class FxBuilderWrapperComponent implements OnInit {\r\n @ViewChild('componentBuilder') componentBuilder!: FxComponentBuilder;\r\n @Input({ alias: 'fx-form', required: true }) fxForm: FxForm = FxUtils.createNewForm();\r\n public fxMode: FxMode = FxMode.EDIT;\r\n public fxConfiguration: FxBuilderConfiguration = {\r\n settings: true,\r\n logics: true,\r\n customControls: true,\r\n }\r\n\r\n protected readonly FxScope = FxScope;\r\n protected readonly FxMode = FxMode;\r\n\r\n constructor(private fxWrapperService: FxBuilderWrapperService) { }\r\n\r\n public ngOnInit(): void {\r\n if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {\r\n this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {\r\n this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {\r\n this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n }\r\n };\r\n\r\n public getParsedForm(): FxForm {\r\n return this.componentBuilder.getParsedForm();\r\n }\r\n\r\n public getInitializedFxForm(): FxForm {\r\n return FxUtils.createNewForm(); \r\n }\r\n}\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FxForm, FxFormComponent } from '@instantsys-labs/fx';\r\nimport { DispatchToClinicComponent } from '../../custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { DynamicTableComponent } from '../dynamic-table/dynamic-table.component';\r\nimport { ToggleButtonComponent } from '../toggle-button/toggle-button.component';\r\nimport { UploaderComponent } from '../uploader/uploader.component';\r\nimport { ToggleComponent } from '../toggle/toggle.component';\r\n\r\n@Component({\r\n selector: 'fx-form-component',\r\n standalone: true,\r\n imports: [CommonModule, FxFormComponent],\r\n template: `\r\n <fx-form \r\n [fxForm]=\"fxForm\" \r\n [value]=\"variables\" \r\n (onSubmit)=\"onSubmit($event)\" \r\n #form\r\n >\r\n </fx-form>\r\n `,\r\n})\r\nexport class FxFormWrapperComponent implements OnChanges, OnInit {\r\n @ViewChild('form') form!: FxFormComponent;\r\n @Input() fxForm!: FxForm;\r\n @Input() variables: any;\r\n @Output() fxFormSubmit = new EventEmitter<any>();\r\n\r\n constructor(private fxWrapperService: FxBuilderWrapperService) {\r\n this.registerCustomComponents();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void { \r\n // if('variables' in changes && !changes['fxForm']) {\r\n // this.fxWrapperService.variables$.next(this.variables);\r\n // }\r\n if ('variables' in changes) {\r\n this.fxWrapperService.variables$.next(this.variables);\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {\r\n // this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {\r\n // this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {\r\n // this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {\r\n // this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n // this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n // }\r\n }\r\n\r\n\r\n private registerCustomComponents(): void {\r\n const components = [\r\n { name: 'Dispatch To Clinic', key: 'dispatch-to-clinic', component: DispatchToClinicComponent },\r\n { name: 'Dynamic Table', key: 'dynamic-table', component: DynamicTableComponent },\r\n { name: 'Toggle Button', key: 'toggle-button', component: ToggleButtonComponent },\r\n { name: 'Uploader', key: 'uploader', component: UploaderComponent },\r\n { name: 'Toggle', key: 'toggle', component: ToggleComponent }\r\n ];\r\n \r\n components.forEach(({ name, key, component }) => {\r\n if (!this.fxWrapperService.getComponent(key)) {\r\n this.fxWrapperService.registerCustomComponent(name, key, component);\r\n }\r\n });\r\n }\r\n\r\n public onSubmit(event: any): void {\r\n this.fxFormSubmit.emit(event);\r\n }\r\n\r\n public submit(): void {\r\n this.form.submit();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of fx-builder-wrapper\r\n */\r\n\r\nexport * from './lib/fx-builder-wrapper.service';\r\nexport * from './lib/fx-builder-wrapper.component'; // builder // admin\r\nexport * from './lib/components/fx-form-component/fx-form-component.component'; // form preview\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i1.FxBuilderWrapperService","i3","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"fx-form-builder-wrapper.mjs","sources":["../../../projects/fx-builder-wrapper/src/lib/fx-builder-wrapper.service.ts","../../../projects/fx-builder-wrapper/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.ts","../../../projects/fx-builder-wrapper/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.html","../../../projects/fx-builder-wrapper/src/lib/panel/configuration-panel/configuration-panel.component.ts","../../../projects/fx-builder-wrapper/src/lib/panel/configuration-panel/configuration-panel.component.html","../../../projects/fx-builder-wrapper/src/lib/panel/settings-panel/settings-panel.component.ts","../../../projects/fx-builder-wrapper/src/lib/panel/settings-panel/settings-panel.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dynamic-table/dynamic-table.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dynamic-table/dynamic-table.component.html","../../../projects/fx-builder-wrapper/src/lib/components/toggle-button/toggle-button.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/toggle-button/toggle-button.component.html","../../../projects/fx-builder-wrapper/src/lib/components/uploader/uploader.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/uploader/uploader.component.html","../../../projects/fx-builder-wrapper/src/lib/components/toggle/toggle.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/toggle/toggle.component.html","../../../projects/fx-builder-wrapper/src/lib/fx-builder-wrapper.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/fx-form-component/fx-form-component.component.ts","../../../projects/fx-builder-wrapper/src/public-api.ts","../../../projects/fx-builder-wrapper/src/fx-form-builder-wrapper.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\r\nimport { FxBaseComponent, FxComponentRegistryService, FxForm, FxUtils } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FxBuilderWrapperService {\r\n public variables$ = new BehaviorSubject<any | null>(null);\r\n constructor(private fxComponentRegistry: FxComponentRegistryService) { }\r\n\r\n public registerCustomComponent(title: string, selector: string, component: Type<FxBaseComponent>\r\n ): void {\r\n this.fxComponentRegistry.registerComponent(selector, component, {\r\n registeringAs: \"CUSTOM\",\r\n libraryItem: {\r\n title,\r\n icon: 'fa-eye',\r\n fxData: {\r\n id: null,\r\n name: selector,\r\n value: \"\",\r\n selector: selector,\r\n elements: [],\r\n events: []\r\n }\r\n },\r\n })\r\n }\r\n\r\n public getComponent(selector: string): Type<FxBaseComponent> | undefined {\r\n return this.fxComponentRegistry.getComponent(selector);\r\n }\r\n\r\n public getInitializedFxForm(): FxForm {\r\n return FxUtils.createNewForm(); \r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-dispatch-to-clinic',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './dispatch-to-clinic.component.html'\r\n})\r\nexport class DispatchToClinicComponent extends FxBaseComponent {\r\n private fb = inject(FormBuilder);\r\n\r\n public clinicAddress$: BehaviorSubject<any> = new BehaviorSubject<any>({});\r\n\r\n public dispatchForm: FormGroup = this.fb.group({\r\n courierName: ['', Validators.required],\r\n trackingNumber: ['', Validators.required],\r\n trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],\r\n notes: ['', Validators.required]\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n\r\n this.onInit.subscribe(() => {\r\n this._register(this.dispatchForm);\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public copyToClipboard(address: any): void {\r\n navigator.clipboard.writeText(address);\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <section\r\n class=\"justify-content-around lg:justify-content-between w-full white-color border-1 border-solid stroke_light_grey p-3 mb-3 mt-3\">\r\n <form [formGroup]=\"dispatchForm\">\r\n <div class=\"grid\">\r\n <!-- Courier Name -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"courierName\" class=\"input-title\">Courier Name</label>\r\n <input autocomplete=\"off\" formControlName=\"courierName\" type=\"text\" id=\"courierName\"\r\n name=\"courierName\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter courier name\" />\r\n\r\n <!-- validation -->\r\n <small *ngIf=\"dispatchForm.get('courierName')?.invalid && dispatchForm.get('courierName')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Courier Name is required.\r\n </small>\r\n <!-- validation -->\r\n </div>\r\n <!-- Courier Name -->\r\n\r\n <!-- Tracking Number -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingNumber\" class=\"input-title\">Tracking Number</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingNumber\" type=\"text\" id=\"trackingNumber\"\r\n name=\"trackingNumber\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking number\" />\r\n <small\r\n *ngIf=\"dispatchForm.get('trackingNumber')?.invalid && dispatchForm.get('trackingNumber')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Tracking Number is required.\r\n </small>\r\n </div>\r\n <!-- Tracking Number -->\r\n\r\n <!-- Tracking URL -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingUrl\" class=\"input-title\">Tracking URL</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingUrl\" type=\"text\" id=\"trackingUrl\"\r\n name=\"trackingUrl\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking url\" />\r\n <small *ngIf=\"dispatchForm.get('trackingUrl')?.invalid && dispatchForm.get('trackingUrl')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['required']\">Tracking URL is\r\n required.</span>\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['pattern']\">Invalid URL format.</span>\r\n </small>\r\n </div>\r\n <!-- Tracking URL -->\r\n\r\n <!-- Notes -->\r\n <div class=\"col-12 md:col-6 input-container\">\r\n <label for=\"notes\" class=\"input-title\">Notes</label>\r\n <textarea autocomplete=\"off\" formControlName=\"notes\" rows=\"5\" id=\"notes\" name=\"notes\"\r\n class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter notes\"></textarea>\r\n <small *ngIf=\"dispatchForm.get('notes')?.invalid && dispatchForm.get('notes')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Notes are required.\r\n </small>\r\n </div>\r\n <!-- Notes -->\r\n\r\n <!-- Address with Copy Icon -->\r\n <div class=\"col-12 md:col-6 pt-0\">\r\n <div class=\"mb-1\">Address</div>\r\n <ng-container *ngIf=\"(clinicAddress$ | async) as address\">\r\n <address #completeAddress>{{address?.street}}, {{address?.state}}, {{address?.postalCode}}\r\n <i class=\"pi pi-copy cursor-pointer text-xl text-secondary-color\"\r\n (click)=\"copyToClipboard(completeAddress.textContent)\"></i>\r\n </address>\r\n </ng-container>\r\n </div>\r\n <!-- Address with Copy Icon -->\r\n </div>\r\n </form>\r\n </section>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { FormArray, FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fx-configuration-panel',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ButtonModule, DialogModule, InputTextModule, FormsModule, DropdownModule, ButtonModule],\r\n templateUrl: './configuration-panel.component.html',\r\n styleUrl: './configuration-panel.component.css',\r\n})\r\nexport class ConfigurationPanelComponent implements OnInit , OnChanges{\r\n @Input() visible: boolean = false;\r\n @Input() configs: any;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<any>();\r\n @Input() tableConfigData:any;\r\n\r\n public rows: number = 1;\r\n public enableAPI: boolean = false;\r\n public api: string = '';\r\n\r\n public dynamicForm: FormGroup;\r\n public columnTypes: string[] = ['text', 'input-text', 'input-number', 'dropdown', 'smart-dropdown', 'checkbox', 'radio', 'radio-group', 'file-upload', 'textarea'];\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.dynamicForm = this.fb.group({\r\n columns: this.fb.array([])\r\n });\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n \r\n }\r\n ngOnInit(): void {\r\n if (this.tableConfigData?.value?.columns) {\r\n this.patchData(); // If data exists, patch it into the form\r\n } else {\r\n this.addColumn(); // Otherwise, add a default column\r\n }\r\n }\r\n\r\n get columns(): FormArray {\r\n return this.dynamicForm.get('columns') as FormArray;\r\n }\r\n\r\n // **🔹 Add Column Dynamically**\r\n public addColumn(): void {\r\n const columnFormGroup = this.fb.group({\r\n header: ['', Validators.required],\r\n cellType: ['', Validators.required],\r\n placeholder: '',\r\n options: this.fb.array([]),\r\n apiUrl: '',\r\n valueKey: '',\r\n labelKey: '',\r\n className: '',\r\n apiKey: ''\r\n });\r\n this.columns.push(columnFormGroup);\r\n }\r\n\r\n \r\n public removeColumn(index: number): void {\r\n if (this.columns.length > 1) {\r\n this.columns.removeAt(index);\r\n }\r\n }\r\n\r\n // **🔹 Duplicate Column**\r\n public duplicateColumn(index: number): void {\r\n const currentColumn = this.columns.at(index).value;\r\n const duplicateColumn = this.fb.group({\r\n header: [currentColumn.header, Validators.required],\r\n cellType: [currentColumn.cellType, Validators.required],\r\n placeholder: [currentColumn.placeholder],\r\n apiUrl: [currentColumn.apiUrl],\r\n valueKey: [currentColumn.valueKey],\r\n labelKey: [currentColumn.labelKey],\r\n className: [currentColumn.className],\r\n apiKey: [currentColumn.apiKey],\r\n options: this.fb.array(\r\n currentColumn.options.map((option: any) => this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n }))\r\n )\r\n });\r\n this.columns.insert(index + 1, duplicateColumn);\r\n }\r\n\r\n // **🔹 Add Options Dynamically**\r\n public addOption(columnIndex: number): void {\r\n const optionGroup = this.fb.group({\r\n optionName: ['', Validators.required],\r\n optionValue: ['', Validators.required]\r\n });\r\n\r\n this.getOptions(columnIndex).push(optionGroup);\r\n }\r\n\r\n // **🔹 Get Options FormArray for a Specific Column**\r\n public getOptions(columnIndex: number): FormArray {\r\n return this.columns.at(columnIndex).get('options') as FormArray;\r\n }\r\n\r\n // **🔹 Close Dialog**\r\n public closeDialog(): void {\r\n this.isVisible.emit(false);\r\n }\r\n\r\n // **🔹 Save Configuration**\r\n public saveConfiguration(): void {\r\n this.configuration.emit({\r\n rows: this.rows,\r\n columns: this.dynamicForm.value?.columns,\r\n enableAPI: this.enableAPI,\r\n api: this.api\r\n });\r\n this.isVisible.emit(false);\r\n }\r\n\r\n public onSubmit(): void {\r\n console.log(\"Value columns formArray\", this.dynamicForm.value);\r\n }\r\n\r\n public patchData(): void {\r\n this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;\r\n this.api = this.tableConfigData?.value?.generalValues?.api;\r\n this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n // Creating the FormGroup for each column\r\n const columnFormGroup = this.fb.group({\r\n header: [column.header || '', Validators.required],\r\n cellType: [column.cellType || '', Validators.required],\r\n placeholder: [column.placeholder || ''],\r\n options: this.fb.array(\r\n column.options ? column.options.map((option: any) => \r\n this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n })\r\n ) : []\r\n ),\r\n apiUrl: [column.apiUrl || ''],\r\n valueKey: [column.valueKey || ''],\r\n labelKey: [column.labelKey || ''],\r\n className: [column.className || ''],\r\n apiKey: [column.apiKey || '']\r\n });\r\n \r\n \r\n this.columns.push(columnFormGroup);\r\n });\r\n }\r\n}\r\n","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <!-- <ng-template pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configurations</p>\r\n </div>\r\n </ng-template> -->\r\n <div class=\"flex flex-col gap-4 bg-white p-2 border-2 border-gray-200\">\r\n <div class=\"flex items-center gap-4 mb-8 w-full\">\r\n <div class=\"w-1/3\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [disabled]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\" autocomplete=\"rows\" />\r\n </div>\r\n <div class=\"w-1/3\">\r\n <label for=\"enableAPI\" class=\"font-semibold w-24\">Enable API</label>\r\n <input type=\"checkbox\" [(ngModel)]=\"enableAPI\" placeholder=\"API Url\" id=\"enableAPI\" autocomplete=\"enableAPI\" />\r\n </div>\r\n <div class=\"w-1/3\">\r\n @if (enableAPI) {\r\n <ng-container>\r\n <label for=\"api\" class=\"font-semibold w-24\">API</label>\r\n <input type=\"text\" [(ngModel)]=\"api\" placeholder=\"Enter API Url\" id=\"api\" class=\"form__input\" autocomplete=\"api\" />\r\n </ng-container>\r\n }\r\n </div> \r\n \r\n </div>\r\n <!-- <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n <div class=\"w-1/2\">\r\n \r\n \r\n </div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n <div class=\"w-1/2\">\r\n \r\n </div>\r\n \r\n \r\n </div> -->\r\n \r\n <div class=\"flex flex-wrap gap-4 mb-8\">\r\n \r\n <div class=\"w-full flex items-center justify-between\">\r\n <p class=\"text-sm font-semibold\">Columns:</p>\r\n <!-- <button type=\"button\" (click)=\"addColumn()\" class=\"custom-save-button\">Add Column</button> -->\r\n </div>\r\n \r\n <div class=\"w-full overflow-x-auto\">\r\n <form [formGroup]=\"dynamicForm\" (ngSubmit)=\"onSubmit()\">\r\n <!-- Flex container with nowrap to keep all columns in a single row -->\r\n <div formArrayName=\"columns\" class=\"flex gap-4 flex-nowrap whitespace-nowrap\">\r\n <div *ngFor=\"let column of columns.controls; let i = index\" [formGroupName]=\"i\" \r\n class=\"border p-4 rounded-lg min-w-[20rem] flex-shrink-0 card-width\">\r\n <div class=\"top-2 right-2 flex gap-2 justify-end\">\r\n <button type=\"button\" (click)=\"duplicateColumn(i)\" \r\n class=\"bg-green-500 text-white px-3 py-1 rounded-md hover:bg-green-600\">\r\n ➕\r\n </button>\r\n <button type=\"button\" (click)=\"removeColumn(i)\" \r\n class=\"text-white px-3 py-1 rounded-md hover:bg-red-600\" *ngIf=\"columns.length>1\">\r\n ❌\r\n </button>\r\n </div>\r\n <!-- Columns in a Single Row -->\r\n <div class=\"grid grid-cols-1 gap-4 items-center mb-2\">\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Column Name:</label>\r\n <input formControlName=\"header\" placeholder=\"Enter Column Name\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Column Type:</label>\r\n <select formControlName=\"cellType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option *ngFor=\"let type of columnTypes\" [value]=\"type\">{{ type }}</option>\r\n </select>\r\n </div>\r\n @if (enableAPI) {\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">API Value Key:</label>\r\n <input formControlName=\"apiKey\" placeholder=\"Enter Value Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n }\r\n \r\n </div>\r\n <div *ngIf=\"['radio-group', 'dropdown'].includes(column.value.cellType)\" class=\"mt-2\">\r\n\r\n <label class=\"font-semibold\">Options:</label>\r\n \r\n <div formArrayName=\"options\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\" \r\n class=\"grid grid-cols-1 gap-4 items-center mt-2\">\r\n <input formControlName=\"optionName\" placeholder=\"Enter Option Name\" \r\n class=\"col-span-4 border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <input formControlName=\"optionValue\" placeholder=\"Enter Option Value\" \r\n class=\"col-span-4 border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\" \r\n class=\"col-span-2 bg-red-500 text-white px-2 py-1 rounded-md hover:bg-red-600\">\r\n Remove\r\n </button>\r\n </div>\r\n </div>\r\n <button type=\"button\" (click)=\"addOption(i)\" class=\"custom-save-button justify-end\">Add Option</button>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"['smart-dropdown'].includes(column.value.cellType)\" class=\"grid grid-cols-1 gap-4 mt-4\">\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">API Url:</label>\r\n <input formControlName=\"apiUrl\" placeholder=\"Enter API URL\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">Value Key:</label>\r\n <input formControlName=\"valueKey\" placeholder=\"Enter Value Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">Label Key:</label>\r\n <input formControlName=\"labelKey\" placeholder=\"Enter Label Key\" \r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n \r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n\r\n\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <!-- <hr class=\"mt-3 mx-2 mb-0 opacity-10\"> -->\r\n <!-- <div class=\"flex justify-end gap-4 w-full\">\r\n <p-button label=\"Cancel\" severity=\"secondary\" (click)=\"closeDialog()\" />\r\n <p-button styleClass=\"border border-indigo-600\" label=\"Save\" (click)=\"saveConfiguration()\" />\r\n </div> -->\r\n <div class=\"flex justify-center my-3\">\r\n <p-button label=\"Cancel\" severity=\"secondary\" (click)=\"closeDialog()\"\r\n styleClass=\"border-gray-400\" />\r\n <p-button label=\"Attach\" label=\"Save\" (click)=\"saveConfiguration()\" \r\n styleClass=\"cta_buttons text-medium button_text_white secondary-color border-1 stroke_secondary no_hightlight no_hightlight_stroke h-max mr-2 w-6rem custom-save-button\"\r\n />\r\n </div>\r\n </ng-template>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FxComponent, FxData, FxMode, FxSettingComponent, FxSettingsService, FxUtils } from '@instantsys-labs/fx';\r\nimport { Dialog } from 'primeng/dialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ConfigurationPanelComponent } from '../configuration-panel/configuration-panel.component';\r\n\r\n@Component({\r\n selector: 'fx-settings-panel',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, InputTextModule, ConfigurationPanelComponent],\r\n templateUrl: './settings-panel.component.html',\r\n styleUrl: './settings-panel.component.css'\r\n})\r\nexport class SettingsPanelComponent extends FxComponent implements OnInit ,OnChanges {\r\n \r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\r\n @Input() tableData:any;\r\n tableConfig:any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.tableConfig = this.tableData;\r\n }\r\n\r\n public openSettingDialog(): void {\r\n this.visible = true;\r\n }\r\n}\r\n","<fx-configuration-panel [visible]=\"visible\" (isVisible)=\"visible = $event\" [tableConfigData]=\"tableConfig\" (configuration)=\"configuration.emit($event)\"></fx-configuration-panel>\r\n\r\n<div class=\"fx-element\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"fxData.$fxForm?.$mode !== FxMode.VIEW\">\r\n <div class=\"fx-overlay border-gray-400 border rounded cursor-pointer\" (click)=\"onElementSelect(fxData)\"\r\n (dblclick)=\"openSettingDialog()\">\r\n <div class=\"fx-actions flex justify-between\">\r\n\r\n <div class=\"bg-gray-700 text-gray-300 px-2 rounded-t ml-2 text-xs flex justify-center items-center\">\r\n <div>#{{ fxData.name }}-<span class=\"text-xs italic\">{{ fxData.id }}</span></div>\r\n </div>\r\n\r\n <div class=\"flex justify-around items-end mr-2\">\r\n <div class=\"cursor-pointer bg-secondary text-white w-8 mr-1 text-center rounded-t\" title=\"Settings\"\r\n (click)=\"fxSettingService.openSetting(fxData)\">\r\n <i class=\"fa fa-cog text-xs\"></i>\r\n </div>\r\n <div (click)=\"deleteElement(fxData)\"\r\n class=\"cursor-pointer bg-red-600 text-white w-8 mr-1 text-center rounded-t\" title=\"Delete\">\r\n <i class=\"fa fa-times text-xs\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container #dynamicComponentContainer></ng-container>\r\n </ng-container>\r\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FxBaseComponent, FxMode, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { SettingsPanelComponent } from '../../panel/settings-panel/settings-panel.component';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport {Subject, takeUntil } from 'rxjs';\r\n\r\nexport interface TableColumnConfig {\r\n header: string;\r\n cellType: 'text' | 'input-text' | 'input-number' | 'dropdown' | 'smart-dropdown' | 'checkbox' | 'radio' | 'radio-group' | 'file-upload' | 'textarea';\r\n placeholder?: string;\r\n options?: string[];\r\n apiUrl?: string;\r\n valueKey?: string;\r\n labelKey?: string;\r\n className?: string;\r\n}\r\nexport interface TableConfig {\r\n columns: TableColumnConfig[];\r\n rows: any[];\r\n}\r\n@Component({\r\n selector: 'fx-dynamic-table',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule],\r\n templateUrl: './dynamic-table.component.html',\r\n styleUrl: './dynamic-table.component.css',\r\n})\r\n\r\nexport class DynamicTableComponent extends FxBaseComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() tableRows: Array<any> = [];\r\n @Input() previewType: FxMode = FxMode.VIEW;\r\n @Input() tableConfig: any = {\r\n columns: [\r\n { header: 'Column 1', cellType: 'text' },\r\n { header: 'Column 2', cellType: 'text' },\r\n { header: 'Column 3', cellType: 'text' },\r\n { header: 'Column 4', cellType: 'text' },\r\n { header: 'Column 5', cellType: 'text' },\r\n ],\r\n};\r\n\r\n private destroy$ = new Subject<Boolean>();\r\n public uploadedImages: Array<Record<string, string | File | null> | null> = [];\r\n public generalValues: any;\r\n\r\n public tableFormControl = new FormControl();\r\n public smartDropdownOptions: { [key: string]: Array<{ name: string, value: string }> } = {};\r\n private http = inject(HttpClient);\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr);\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.tableFormControl);\r\n })\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$.pipe(\r\n takeUntil(this.destroy$)).subscribe((variables: any) => {\r\n if (variables) {\r\n let dynamicTableValues: any;\r\n for (const [key, value] of Object.entries(variables)) {\r\n if (key.includes('dynamic-table')) {\r\n dynamicTableValues = value;\r\n }\r\n }\r\n if (Object.keys(dynamicTableValues).length) {\r\n // const fileHeaderName = dynamicTableValues?.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n const fileHeaderName = dynamicTableValues?.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n dynamicTableValues?.rows?.forEach((item: any, index: number) => {\r\n // // this.uploadedImages[index] = item[fileHeaderName] ? item[fileHeaderName]: null;\r\n // const fileUrl = item[fileHeaderName]; // Get the file URL\r\n\r\n // this.uploadedImages[index] = fileUrl\r\n // ? { result: fileUrl, file: null } // Store the URL as 'result'\r\n // : null;\r\n \r\n if (item[fileHeaderName]) {\r\n this.parseUrls(item[fileHeaderName], index);\r\n }\r\n })\r\n console.log(\"uploadedImages\", this.uploadedImages);\r\n console.log(\"dynamictable\", dynamicTableValues);\r\n this.tableConfig = dynamicTableValues;\r\n this.fxData.value = this.tableConfig;\r\n // this.tableFormControl.reset();\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n this.tableFormControl = new FormControl();\r\n setTimeout(() => { // Delay to ensure proper patching\r\n this.tableFormControl.patchValue(this.tableConfig, { emitEvent: true });\r\n console.log(\"tableFormControl\",this.tableFormControl);\r\n this.cdr.detectChanges();\r\n }, 50);\r\n }\r\n }\r\n })\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n if(this.fxData?.value && Object.keys(this.fxData?.value)?.length != 0) {\r\n this.tableConfig = this.fxData.value;\r\n this.fetchSmartDropdownData();\r\n }\r\n }, 100)\r\n }\r\n \r\n protected fetchSmartDropdownData(): void {\r\n this.tableConfig.columns\r\n .filter((column: TableColumnConfig) => column.cellType === 'smart-dropdown' && column?.apiUrl)\r\n .forEach((column: TableColumnConfig) => {\r\n this.http.get<any>(column.apiUrl!).subscribe((response: any) => {\r\n this.smartDropdownOptions[column.header] = response.map((item: any) => ({\r\n value: item[column.valueKey!],\r\n name: item[column.labelKey!],\r\n }));\r\n });\r\n });\r\n }\r\n\r\n public uploadImage(event: Event, rowIndex: number): void {\r\n const file = (event.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uploadedImages[rowIndex] = {\r\n result: reader.result as string,\r\n file: file\r\n }\r\n this.tableConfig.rows[rowIndex][this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header] = file;\r\n console.log(\"tableConfig\", this.tableConfig);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'column-size', $title: 'No. of columns', value: 1 }),\r\n new FxStringSetting({ key: 'table-config', $title: 'Table Configuration', value: {} }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public getArray(count: number): number[] {\r\n return Array.from({ length: count });\r\n }\r\n\r\n public onChangeConfiguration(event: any): void { \r\n this.generalValues = {\r\n enableAPI: event?.enableAPI,\r\n api: event?.api\r\n }\r\n const columns = event.columns.map((col: any) => {\r\n return {\r\n header: col?.header,\r\n cellType: col?.cellType,\r\n placeholder: col?.placeholder,\r\n options: col?.options,\r\n apiUrl: col?.apiUrl,\r\n valueKey: col?.valueKey,\r\n labelKey: col?.labelKey,\r\n className: col?.className,\r\n apiKey: col?.apiKey\r\n }\r\n });\r\n if(!event?.enableAPI) {\r\n this.tableConfig.columns = columns;\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => ({ name: `SKU-${index + 1}`, age: index % 2 !== 0, gender: 'male' }))\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => {\r\n // const rows = columns.map((c: any) => {\r\n // return {\r\n // c?.header: null\r\n // }\r\n // })\r\n // return rows\r\n // })\r\n this.tableConfig.rows = Array.from({ length: +event?.rows }, (_, index) => {\r\n return columns.reduce((acc: any, c: any) => {\r\n acc[c?.header] = ''; // Initialize each column key with null\r\n return acc;\r\n }, {});\r\n });\r\n \r\n this.fetchSmartDropdownData();\r\n }\r\n if(event?.enableAPI) {\r\n this.drawTable(event, columns)\r\n this.tableConfig = {\r\n columns: columns,\r\n rows: []\r\n };\r\n }\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n console.log(\"after\")\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n private updateSettings(): void{\r\n if(this.fxData.settings){\r\n for(let setting of this.fxData.settings){\r\n if(setting.key === 'table-config'){\r\n setting.value = this.tableConfig;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public drawTable(event: any, columns: any): void {\r\n let rows;\r\n this.http.get(event.api).subscribe((res: any) => {\r\n if(res) {\r\n rows = res.map((item: any) => {\r\n const newObj: Record<string, any> = {};\r\n columns.forEach((col: any) => {\r\n newObj[col.header] = item[col.apiKey];\r\n });\r\n return newObj;\r\n });\r\n this.tableConfig = {\r\n columns,\r\n rows\r\n }\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n })\r\n }\r\n\r\n public deleteFile(file: any, index: number): void {\r\n this.uploadedImages.splice(index, 1, null);\r\n this.tableConfig.rows[index][this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header] = null;\r\n console.log(\"tableConfig\", this.tableConfig);\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n public parseUrls(url: string, index: number): void {\r\n this.http.get(url, { responseType: 'blob' }).subscribe({\r\n next: (imageBlob: Blob) => {\r\n const imageURL = URL.createObjectURL(imageBlob);\r\n this.uploadedImages[index] = {\r\n result: imageURL,\r\n file: null\r\n };\r\n },\r\n error: (error) => {\r\n console.error('Error fetching image:', error);\r\n }\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<fx-settings-panel [fxData]=\"fxData\" [tableData]=\"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 value=\"\">Select {{column.header}}</option> -->\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 value=\"\">Select {{column.header}}</option> -->\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 <div class=\"flex flex-col items-end justify-end relative\">\r\n <div class=\"relative\">\r\n <img \r\n width=\"100\" \r\n *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" \r\n [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\"\r\n class=\"rounded shadow\"\r\n />\r\n <button \r\n *ngIf=\"uploadedImages?.[rowIndex]?.['result']\"\r\n (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\" \r\n class=\"absolute top-0 right-0 text-white rounded-md w-5 h-5 flex items-center justify-center shadow-lg hover:bg-red-600\"\r\n >\r\n ❌\r\n </button>\r\n </div>\r\n \r\n <input \r\n [class]=\"column?.className\" \r\n type=\"file\" \r\n name=\"file\" \r\n #uploadFile \r\n hidden \r\n multiple\r\n (change)=\"uploadImage($event, rowIndex)\" \r\n />\r\n \r\n <button (click)=\"uploadFile.click()\" class=\"mt-2 bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600\">\r\n Upload\r\n </button>\r\n </div>\r\n \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>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxIconSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\n\r\n@Component({\r\n selector: 'lib-toggle-button',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, ReactiveFormsModule, FormsModule],\r\n templateUrl: './toggle-button.component.html',\r\n styleUrl: './toggle-button.component.css'\r\n})\r\nexport class ToggleButtonComponent extends FxBaseComponent { \r\n public toggleBtnControl = new UntypedFormControl(false);\r\n public isToggled = false;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.toggleBtnControl);\r\n })\r\n }\r\n\r\n public toggle(): void {\r\n this.isToggled = !this.toggleBtnControl.value;\r\n this.toggleBtnControl.setValue(this.isToggled);\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'classes', $title: 'Classes', value: '' }),\r\n new FxStringSetting({ key: 'active-text', $title: 'Active Text', value: 'On' }),\r\n new FxStringSetting({ key: 'inactive-text', $title: 'Inactive Text', value: 'Off' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<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","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { v4 as uuidv4} from 'uuid';\r\n\r\n@Component({\r\n selector: 'fx-uploader',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './uploader.component.html',\r\n styleUrl: './uploader.component.css'\r\n})\r\nexport class UploaderComponent extends FxBaseComponent {\r\n public uploadFileControl = new UntypedFormControl();\r\n public uploadedFiles: Array<any> = [];\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.uploadFileControl);\r\n })\r\n }\r\n\r\n public onFileSelected(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files) {\r\n for(let i = 0; i < input?.files?.length; i++) {\r\n const file = input.files[i];\r\n const reader = new FileReader();\r\n reader.onload = e => {\r\n this.uploadedFiles.push({\r\n file: file,\r\n previewUrl: e.target?.result,\r\n name: file?.name,\r\n id: uuidv4()\r\n })\r\n this.uploadFileControl.setValue(this.uploadedFiles)\r\n }\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n }\r\n\r\n public deleteFile(id: string): void {\r\n this.uploadedFiles = this.uploadedFiles.filter(file => file?.id !== id);\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'upload-text', $title: 'Upload Text', value: 'Upload File'}),\r\n new FxSelectSetting({key: 'multiple-upload', $title: 'Multiple Upload', value: false}, [{option: 'Enable', value: true}, {option: 'Disable', value: false}])\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <div class=\"custom-upload\">\r\n <button type=\"button\" (click)=\"fileInput.click()\">\r\n {{setting('upload-text')}}\r\n </button>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [multiple]=\"setting('multiple-upload')\"\r\n (change)=\"onFileSelected($event)\"\r\n [formControl]=\"uploadFileControl\"\r\n hidden\r\n />\r\n <div class=\"file-list\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div (click)=\"deleteFile(file?.id)\" *ngFor=\"let file of uploadedFiles\">\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.previewUrl\" alt=\"\">\r\n <!-- <p>{{file?.name}}</p> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</fx-component>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\n\r\n@Component({\r\n selector: 'fx-toggle',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './toggle.component.html',\r\n styleUrl: './toggle.component.css'\r\n})\r\nexport class ToggleComponent extends FxBaseComponent {\r\n public toggleControl = new FormControl<boolean>(false)\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.toggleControl);\r\n })\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'accept', $title: 'Accept Text', value: 'Yes' }),\r\n new FxStringSetting({ key: 'reject', $title: 'Reject Text', value: 'No' })\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n}\r\n","<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","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { FxBuilderConfiguration, FxComponentBuilder, FxForm, FxMode, FxScope, FxUtils } from '@instantsys-labs/fx';\r\nimport { DispatchToClinicComponent } from './custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';\r\nimport { FxBuilderWrapperService } from './fx-builder-wrapper.service';\r\nimport { DynamicTableComponent } from './components/dynamic-table/dynamic-table.component';\r\nimport { ToggleButtonComponent } from './components/toggle-button/toggle-button.component';\r\nimport { UploaderComponent } from './components/uploader/uploader.component';\r\nimport { ToggleComponent } from './components/toggle/toggle.component';\r\n\r\n@Component({\r\n selector: 'fx-builder-wrapper',\r\n standalone: true,\r\n imports: [CommonModule, FxComponentBuilder],\r\n template: `\r\n <fx-component-builder \r\n #componentBuilder \r\n [fx-form]=\"fxForm\" \r\n [configuration]=\"fxConfiguration\" \r\n [scope]=\"FxScope.BUILDER\"\r\n >\r\n </fx-component-builder>\r\n `,\r\n styleUrl: './form-builder.css',\r\n})\r\nexport class FxBuilderWrapperComponent implements OnInit {\r\n @ViewChild('componentBuilder') componentBuilder!: FxComponentBuilder;\r\n @Input({ alias: 'fx-form', required: true }) fxForm: FxForm = FxUtils.createNewForm();\r\n public fxMode: FxMode = FxMode.EDIT;\r\n public fxConfiguration: FxBuilderConfiguration = {\r\n settings: true,\r\n logics: true,\r\n customControls: true,\r\n }\r\n\r\n protected readonly FxScope = FxScope;\r\n protected readonly FxMode = FxMode;\r\n\r\n constructor(private fxWrapperService: FxBuilderWrapperService) { }\r\n\r\n public ngOnInit(): void {\r\n if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {\r\n this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {\r\n this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {\r\n this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n }\r\n };\r\n\r\n public getParsedForm(): FxForm {\r\n return this.componentBuilder.getParsedForm();\r\n }\r\n\r\n public getInitializedFxForm(): FxForm {\r\n return FxUtils.createNewForm(); \r\n }\r\n}\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FxForm, FxFormComponent } from '@instantsys-labs/fx';\r\nimport { DispatchToClinicComponent } from '../../custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { DynamicTableComponent } from '../dynamic-table/dynamic-table.component';\r\nimport { ToggleButtonComponent } from '../toggle-button/toggle-button.component';\r\nimport { UploaderComponent } from '../uploader/uploader.component';\r\nimport { ToggleComponent } from '../toggle/toggle.component';\r\n\r\n@Component({\r\n selector: 'fx-form-component',\r\n standalone: true,\r\n imports: [CommonModule, FxFormComponent],\r\n template: `\r\n <fx-form \r\n [fxForm]=\"fxForm\" \r\n [value]=\"variables\" \r\n (onSubmit)=\"onSubmit($event)\" \r\n #form\r\n >\r\n </fx-form>\r\n `,\r\n})\r\nexport class FxFormWrapperComponent implements OnChanges, OnInit {\r\n @ViewChild('form') form!: FxFormComponent;\r\n @Input() fxForm!: FxForm;\r\n @Input() variables: any;\r\n @Output() fxFormSubmit = new EventEmitter<any>();\r\n\r\n constructor(private fxWrapperService: FxBuilderWrapperService) {\r\n this.registerCustomComponents();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void { \r\n // if('variables' in changes && !changes['fxForm']) {\r\n // this.fxWrapperService.variables$.next(this.variables);\r\n // }\r\n if ('variables' in changes) {\r\n this.fxWrapperService.variables$.next(this.variables);\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {\r\n // this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {\r\n // this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {\r\n // this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {\r\n // this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);\r\n // }\r\n // if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n // this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n // }\r\n }\r\n\r\n\r\n private registerCustomComponents(): void {\r\n const components = [\r\n { name: 'Dispatch To Clinic', key: 'dispatch-to-clinic', component: DispatchToClinicComponent },\r\n { name: 'Dynamic Table', key: 'dynamic-table', component: DynamicTableComponent },\r\n { name: 'Toggle Button', key: 'toggle-button', component: ToggleButtonComponent },\r\n { name: 'Uploader', key: 'uploader', component: UploaderComponent },\r\n { name: 'Toggle', key: 'toggle', component: ToggleComponent }\r\n ];\r\n \r\n components.forEach(({ name, key, component }) => {\r\n if (!this.fxWrapperService.getComponent(key)) {\r\n this.fxWrapperService.registerCustomComponent(name, key, component);\r\n }\r\n });\r\n }\r\n\r\n public onSubmit(event: any): void {\r\n this.fxFormSubmit.emit(event);\r\n }\r\n\r\n public submit(): void {\r\n this.form.submit();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of fx-builder-wrapper\r\n */\r\n\r\nexport * from './lib/fx-builder-wrapper.service';\r\nexport * from './lib/fx-builder-wrapper.component'; // builder // admin\r\nexport * from './lib/components/fx-form-component/fx-form-component.component'; // form preview\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i1.FxBuilderWrapperService","i3","uuidv4"],"mappings":"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"}
@@ -25,6 +25,7 @@ export declare class DynamicTableComponent extends FxBaseComponent implements On
25
25
  tableConfig: any;
26
26
  private destroy$;
27
27
  uploadedImages: Array<Record<string, string | File | null> | null>;
28
+ generalValues: any;
28
29
  tableFormControl: FormControl<any>;
29
30
  smartDropdownOptions: {
30
31
  [key: string]: Array<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fx-form-builder-wrapper",
3
- "version": "0.0.69",
3
+ "version": "0.0.71",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0",