fx-form-builder-wrapper 0.0.55 → 0.0.56
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.
|
@@ -220,11 +220,11 @@ export class DynamicTableComponent extends FxBaseComponent {
|
|
|
220
220
|
this.destroy$.complete();
|
|
221
221
|
}
|
|
222
222
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
223
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicTableComponent, isStandalone: true, selector: "fx-dynamic-table", inputs: { tableRows: "tableRows", previewType: "previewType", tableConfig: "tableConfig" }, usesInheritance: true, ngImport: i0, template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:
|
|
223
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicTableComponent, isStandalone: true, selector: "fx-dynamic-table", inputs: { tableRows: "tableRows", previewType: "previewType", tableConfig: "tableConfig" }, usesInheritance: true, ngImport: i0, template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option 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 \u274C\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>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SettingsPanelComponent, selector: "fx-settings-panel", outputs: ["configuration"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
224
224
|
}
|
|
225
225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, decorators: [{
|
|
226
226
|
type: Component,
|
|
227
|
-
args: [{ selector: 'fx-dynamic-table', standalone: true, imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule], template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:
|
|
227
|
+
args: [{ selector: 'fx-dynamic-table', standalone: true, imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule], template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option 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 \u274C\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>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:auto}\n"] }]
|
|
228
228
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FxBuilderWrapperService }], propDecorators: { tableRows: [{
|
|
229
229
|
type: Input
|
|
230
230
|
}], previewType: [{
|
|
@@ -232,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
232
232
|
}], tableConfig: [{
|
|
233
233
|
type: Input
|
|
234
234
|
}] } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXdCekMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7SUFtQnBDO0lBQWdDO0lBbEIzQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLFdBQVcsR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLFdBQVcsR0FBUTtRQUMxQixPQUFPLEVBQUU7WUFDUCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZ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SUFDM0IsQ0FBQzt3R0FqT1UscUJBQXFCOzRGQUFyQixxQkFBcUIsK0xDL0JsQyw0M0lBb0VvQiwwaUJEMUNSLFlBQVksMmJBQUUsV0FBVyxnakRBQUUsc0JBQXNCLHlGQUFFLG1CQUFtQjs7NEZBS3JFLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQzs0SEFNeEUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeE1vZGUsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uQ29uZmlnIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBjZWxsVHlwZTogJ3RleHQnIHwgJ2lucHV0LXRleHQnIHwgJ2lucHV0LW51bWJlcicgfCAnZHJvcGRvd24nIHwgJ3NtYXJ0LWRyb3Bkb3duJyB8ICdjaGVja2JveCcgfCAncmFkaW8nIHwgJ3JhZGlvLWdyb3VwJyB8ICdmaWxlLXVwbG9hZCcgfCAndGV4dGFyZWEnO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcclxuICBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgdmFsdWVLZXk/OiBzdHJpbmc7XHJcbiAgbGFiZWxLZXk/OiBzdHJpbmc7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uQ29uZmlnW107XHJcbiAgcm93czogYW55W107XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1keW5hbWljLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZXR0aW5nc1BhbmVsQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93czogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdUeXBlOiBGeE1vZGUgPSBGeE1vZGUuVklFVztcclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55ID0ge1xyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAxJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAyJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAzJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA0JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA1JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxufTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHVwbG9hZGVkSW1hZ2VzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBGaWxlIHwgbnVsbD4gfCBudWxsPiA9IFtdO1xyXG5cclxuICBwdWJsaWMgdGFibGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBzbWFydERyb3Bkb3duT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50YWJsZUZvcm1Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgbGV0IGR5bmFtaWNUYWJsZVZhbHVlczogYW55O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdkeW5hbWljLXRhYmxlJykpIHtcclxuICAgICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNUYWJsZVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVIZWFkZXJOYW1lID0gZHluYW1pY1RhYmxlVmFsdWVzPy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUhlYWRlck5hbWUgPSBkeW5hbWljVGFibGVWYWx1ZXM/LmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyO1xyXG4gICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXM/LnJvd3M/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIC8vIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0gaXRlbVtmaWxlSGVhZGVyTmFtZV0gPyBpdGVtW2ZpbGVIZWFkZXJOYW1lXTogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaWxlVXJsID0gaXRlbVtmaWxlSGVhZGVyTmFtZV07IC8vIEdldCB0aGUgZmlsZSBVUkxcclxuXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy51cGxvYWRlZEltYWdlc1tpbmRleF0gPSBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgLy8gICA/IHsgcmVzdWx0OiBmaWxlVXJsLCBmaWxlOiBudWxsIH0gLy8gU3RvcmUgdGhlIFVSTCBhcyAncmVzdWx0J1xyXG4gICAgICAgICAgICAgIC8vICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2ZpbGVIZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybHMoaXRlbVtmaWxlSGVhZGVyTmFtZV0sIGluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRJbWFnZXNcIiwgdGhpcy51cGxvYWRlZEltYWdlcyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHluYW1pY3RhYmxlXCIsIGR5bmFtaWNUYWJsZVZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkeW5hbWljVGFibGVWYWx1ZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICAgICAgLy8gdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgLy8gRGVsYXkgdG8gZW5zdXJlIHByb3BlciBwYXRjaGluZ1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudGFibGVDb25maWcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFibGVGb3JtQ29udHJvbFwiLHRoaXMudGFibGVGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZ4RGF0YT8udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5meERhdGE/LnZhbHVlKT8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5meERhdGEudmFsdWU7XHJcbiAgICAgICAgdGhpcy5mZXRjaFNtYXJ0RHJvcGRvd25EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMClcclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIGZldGNoU21hcnREcm9wZG93bkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4gY29sdW1uLmNlbGxUeXBlID09PSAnc21hcnQtZHJvcGRvd24nICYmIGNvbHVtbj8uYXBpVXJsKVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pihjb2x1bW4uYXBpVXJsISkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdID0gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtW2NvbHVtbi52YWx1ZUtleSFdLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2NvbHVtbi5sYWJlbEtleSFdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRJbWFnZShldmVudDogRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiByZWFkZXIucmVzdWx0IGFzIHN0cmluZyxcclxuICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW3Jvd0luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IGZpbGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NvbHVtbi1zaXplJywgJHRpdGxlOiAnTm8uIG9mIGNvbHVtbnMnLCB2YWx1ZTogMSB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3RhYmxlLWNvbmZpZycsICR0aXRsZTogJ1RhYmxlIENvbmZpZ3VyYXRpb24nLCB2YWx1ZToge30gfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcnJheShjb3VudDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ29uZmlndXJhdGlvbihldmVudDogYW55KTogdm9pZCB7IFxyXG4gICAgY29uc3QgY29sdW1ucyA9IGV2ZW50LmNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhlYWRlcjogY29sPy5oZWFkZXIsXHJcbiAgICAgICAgY2VsbFR5cGU6IGNvbD8uY2VsbFR5cGUsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbD8ucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgb3B0aW9uczogY29sPy5vcHRpb25zLFxyXG4gICAgICAgIGFwaVVybDogY29sPy5hcGlVcmwsXHJcbiAgICAgICAgdmFsdWVLZXk6IGNvbD8udmFsdWVLZXksXHJcbiAgICAgICAgbGFiZWxLZXk6IGNvbD8ubGFiZWxLZXksXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjb2w/LmNsYXNzTmFtZSxcclxuICAgICAgICBhcGlLZXk6IGNvbD8uYXBpS2V5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYoIWV2ZW50Py5lbmFibGVBUEkpIHtcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgLy8gdGhpcy50YWJsZUNvbmZpZy5yb3dzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogK2V2ZW50Py5yb3dzIH0sIChlLCBpbmRleCkgPT4gKHsgbmFtZTogYFNLVS0ke2luZGV4ICsgMX1gLCBhZ2U6IGluZGV4ICUgMiAhPT0gMCwgZ2VuZGVyOiAnbWFsZScgfSkpXHJcbiAgICAgIC8vIHRoaXMudGFibGVDb25maWcucm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICtldmVudD8ucm93cyB9LCAoZSwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gICBjb25zdCByb3dzID0gY29sdW1ucy5tYXAoKGM6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgYz8uaGVhZGVyOiBudWxsXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gICByZXR1cm4gcm93c1xyXG4gICAgICAvLyB9KVxyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnLnJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiArZXZlbnQ/LnJvd3MgfSwgKF8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2M6IGFueSwgYzogYW55KSA9PiB7XHJcbiAgICAgICAgICBhY2NbYz8uaGVhZGVyXSA9ICcnOyAvLyBJbml0aWFsaXplIGVhY2ggY29sdW1uIGtleSB3aXRoIG51bGxcclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZmV0Y2hTbWFydERyb3Bkb3duRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQ/LmVuYWJsZUFQSSkge1xyXG4gICAgICB0aGlzLmRyYXdUYWJsZShldmVudCwgY29sdW1ucylcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgIHJvd3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNldHRpbmdzKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGZvcihsZXQgc2V0dGluZyBvZiB0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGlmKHNldHRpbmcua2V5ID09PSAndGFibGUtY29uZmlnJyl7XHJcbiAgICAgICAgc2V0dGluZy52YWx1ZSA9IHRoaXMudGFibGVDb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZHJhd1RhYmxlKGV2ZW50OiBhbnksIGNvbHVtbnM6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHJvd3M7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGV2ZW50LmFwaSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMpIHtcclxuICAgICAgICByb3dzID0gcmVzLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbmV3T2JqW2NvbC5oZWFkZXJdID0gaXRlbVtjb2wuYXBpS2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHJvd3NcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEsIG51bGwpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW2luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IG51bGw7XHJcbiAgICBjb25zb2xlLmxvZyhcInRhYmxlQ29uZmlnXCIsIHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudGFibGVDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlVXJscyh1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGltYWdlQmxvYjogQmxvYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZUJsb2IpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiBpbWFnZVVSTCxcclxuICAgICAgICAgIGZpbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW1hZ2U6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGZ4LXNldHRpbmdzLXBhbmVsIFtmeERhdGFdPVwiZnhEYXRhXCIgKGNvbmZpZ3VyYXRpb24pPVwib25DaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudClcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJmeERhdGFcIj5cclxuICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImZvcm1CdWlsZGVyX2R5bmFtaWNfdGFibGVcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnNcIj57eyBjb2x1bW4uaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlQ29uZmlnLnJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uY2VsbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj57e3Jvd1tjb2x1bW4uaGVhZGVyXX19PC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dC10ZXh0J1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0LW51bWJlcidcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbj8ub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24/Lm9wdGlvblZhbHVlXCI+ICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5vcHRpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBzdHlsZT1cIndpZHRoOiA2MCU7XCIgKm5nU3dpdGNoQ2FzZT1cIidzbWFydC1kcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdXCIgW3ZhbHVlXT1cIm9wdGlvbj8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJyYWRpby17e3Jvd0luZGV4fX1cIiBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogMTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIncmFkaW8tZ3JvdXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJyYWRpby1ncm91cC17e3Jvd0luZGV4fX1cIiB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwib3B0aW9uPy5vcHRpb25OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5vcHRpb25OYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZS11cGxvYWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBlbmQ7anVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgIHdpZHRoPVwiMTAwXCIgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiIFtzcmNdPVwidXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdPy5bJ3Jlc3VsdCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXBsb2FkZWQgSW1hZ2VcIiAoY2xpY2spPVwiZGVsZXRlRmlsZSh1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0sIHJvd0luZGV4KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiAjdXBsb2FkRmlsZSAgaGlkZGVuIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEltYWdlKCRldmVudCwgcm93SW5kZXgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXBsb2FkRmlsZS5jbGljaygpXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBuYW1lPVwiXCIgaWQ9XCJcIiBjb2xzPVwiMzBcIiByb3dzPVwiMlwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG48L2Z4LXNldHRpbmdzLXBhbmVsPiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXdCekMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7SUFtQnBDO0lBQWdDO0lBbEIzQyxTQUFTLEdBQWUsRUFBRSxDQUFDO0lBQzNCLFdBQVcsR0FBVyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLFdBQVcsR0FBUTtRQUMxQixPQUFPLEVBQUU7WUFDUCxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtZ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SUFDM0IsQ0FBQzt3R0FqT1UscUJBQXFCOzRGQUFyQixxQkFBcUIsK0xDL0JsQyx1cE5BdUdvQiwraEJEN0VSLFlBQVksMmJBQUUsV0FBVyxnakRBQUUsc0JBQXNCLHlGQUFFLG1CQUFtQjs7NEZBS3JFLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQzs0SEFNeEUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeE1vZGUsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1BhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uQ29uZmlnIHtcclxuICBoZWFkZXI6IHN0cmluZztcclxuICBjZWxsVHlwZTogJ3RleHQnIHwgJ2lucHV0LXRleHQnIHwgJ2lucHV0LW51bWJlcicgfCAnZHJvcGRvd24nIHwgJ3NtYXJ0LWRyb3Bkb3duJyB8ICdjaGVja2JveCcgfCAncmFkaW8nIHwgJ3JhZGlvLWdyb3VwJyB8ICdmaWxlLXVwbG9hZCcgfCAndGV4dGFyZWEnO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcclxuICBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgdmFsdWVLZXk/OiBzdHJpbmc7XHJcbiAgbGFiZWxLZXk/OiBzdHJpbmc7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb25maWcge1xyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uQ29uZmlnW107XHJcbiAgcm93czogYW55W107XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1keW5hbWljLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZXR0aW5nc1BhbmVsQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93czogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdUeXBlOiBGeE1vZGUgPSBGeE1vZGUuVklFVztcclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55ID0ge1xyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAxJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAyJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiAzJywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA0JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IGhlYWRlcjogJ0NvbHVtbiA1JywgY2VsbFR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxufTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHVwbG9hZGVkSW1hZ2VzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBGaWxlIHwgbnVsbD4gfCBudWxsPiA9IFtdO1xyXG5cclxuICBwdWJsaWMgdGFibGVGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBzbWFydERyb3Bkb3duT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB9ID0ge307XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLm9uSW5pdC5zdWJzY3JpYmUoKGZ4RGF0YSk9PntcclxuICAgICAgdGhpcy5fcmVnaXN0ZXIodGhpcy50YWJsZUZvcm1Db250cm9sKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlLnZhcmlhYmxlcyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgbGV0IGR5bmFtaWNUYWJsZVZhbHVlczogYW55O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdkeW5hbWljLXRhYmxlJykpIHtcclxuICAgICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGR5bmFtaWNUYWJsZVZhbHVlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGZpbGVIZWFkZXJOYW1lID0gZHluYW1pY1RhYmxlVmFsdWVzPy5jb2x1bW5zLmZpbmQoKGY6IGFueSkgPT4gZi5jZWxsVHlwZSA9PT0gJ2ZpbGUtdXBsb2FkJyk/LmhlYWRlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUhlYWRlck5hbWUgPSBkeW5hbWljVGFibGVWYWx1ZXM/LmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyO1xyXG4gICAgICAgICAgICBkeW5hbWljVGFibGVWYWx1ZXM/LnJvd3M/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIC8vIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0gaXRlbVtmaWxlSGVhZGVyTmFtZV0gPyBpdGVtW2ZpbGVIZWFkZXJOYW1lXTogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaWxlVXJsID0gaXRlbVtmaWxlSGVhZGVyTmFtZV07IC8vIEdldCB0aGUgZmlsZSBVUkxcclxuXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy51cGxvYWRlZEltYWdlc1tpbmRleF0gPSBmaWxlVXJsXHJcbiAgICAgICAgICAgICAgLy8gICA/IHsgcmVzdWx0OiBmaWxlVXJsLCBmaWxlOiBudWxsIH0gLy8gU3RvcmUgdGhlIFVSTCBhcyAncmVzdWx0J1xyXG4gICAgICAgICAgICAgIC8vICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2ZpbGVIZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybHMoaXRlbVtmaWxlSGVhZGVyTmFtZV0sIGluZGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXBsb2FkZWRJbWFnZXNcIiwgdGhpcy51cGxvYWRlZEltYWdlcyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHluYW1pY3RhYmxlXCIsIGR5bmFtaWNUYWJsZVZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkeW5hbWljVGFibGVWYWx1ZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZnhEYXRhLnZhbHVlID0gdGhpcy50YWJsZUNvbmZpZztcclxuICAgICAgICAgICAgLy8gdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgLy8gRGVsYXkgdG8gZW5zdXJlIHByb3BlciBwYXRjaGluZ1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMudGFibGVDb25maWcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFibGVGb3JtQ29udHJvbFwiLHRoaXMudGFibGVGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZ4RGF0YT8udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5meERhdGE/LnZhbHVlKT8ubGVuZ3RoICE9IDApIHtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5meERhdGEudmFsdWU7XHJcbiAgICAgICAgdGhpcy5mZXRjaFNtYXJ0RHJvcGRvd25EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMClcclxuICB9XHJcbiAgXHJcbiAgcHJvdGVjdGVkIGZldGNoU21hcnREcm9wZG93bkRhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4gY29sdW1uLmNlbGxUeXBlID09PSAnc21hcnQtZHJvcGRvd24nICYmIGNvbHVtbj8uYXBpVXJsKVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uOiBUYWJsZUNvbHVtbkNvbmZpZykgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8YW55Pihjb2x1bW4uYXBpVXJsISkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RHJvcGRvd25PcHRpb25zW2NvbHVtbi5oZWFkZXJdID0gcmVzcG9uc2UubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtW2NvbHVtbi52YWx1ZUtleSFdLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtW2NvbHVtbi5sYWJlbEtleSFdLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGxvYWRJbWFnZShldmVudDogRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiByZWFkZXIucmVzdWx0IGFzIHN0cmluZyxcclxuICAgICAgICAgIGZpbGU6IGZpbGVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW3Jvd0luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IGZpbGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJsZUNvbmZpZ1wiLCB0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NvbHVtbi1zaXplJywgJHRpdGxlOiAnTm8uIG9mIGNvbHVtbnMnLCB2YWx1ZTogMSB9KSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3RhYmxlLWNvbmZpZycsICR0aXRsZTogJ1RhYmxlIENvbmZpZ3VyYXRpb24nLCB2YWx1ZToge30gfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcnJheShjb3VudDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlQ29uZmlndXJhdGlvbihldmVudDogYW55KTogdm9pZCB7IFxyXG4gICAgY29uc3QgY29sdW1ucyA9IGV2ZW50LmNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGhlYWRlcjogY29sPy5oZWFkZXIsXHJcbiAgICAgICAgY2VsbFR5cGU6IGNvbD8uY2VsbFR5cGUsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbD8ucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgb3B0aW9uczogY29sPy5vcHRpb25zLFxyXG4gICAgICAgIGFwaVVybDogY29sPy5hcGlVcmwsXHJcbiAgICAgICAgdmFsdWVLZXk6IGNvbD8udmFsdWVLZXksXHJcbiAgICAgICAgbGFiZWxLZXk6IGNvbD8ubGFiZWxLZXksXHJcbiAgICAgICAgY2xhc3NOYW1lOiBjb2w/LmNsYXNzTmFtZSxcclxuICAgICAgICBhcGlLZXk6IGNvbD8uYXBpS2V5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYoIWV2ZW50Py5lbmFibGVBUEkpIHtcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgLy8gdGhpcy50YWJsZUNvbmZpZy5yb3dzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogK2V2ZW50Py5yb3dzIH0sIChlLCBpbmRleCkgPT4gKHsgbmFtZTogYFNLVS0ke2luZGV4ICsgMX1gLCBhZ2U6IGluZGV4ICUgMiAhPT0gMCwgZ2VuZGVyOiAnbWFsZScgfSkpXHJcbiAgICAgIC8vIHRoaXMudGFibGVDb25maWcucm93cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6ICtldmVudD8ucm93cyB9LCAoZSwgaW5kZXgpID0+IHtcclxuICAgICAgLy8gICBjb25zdCByb3dzID0gY29sdW1ucy5tYXAoKGM6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgYz8uaGVhZGVyOiBudWxsXHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gICByZXR1cm4gcm93c1xyXG4gICAgICAvLyB9KVxyXG4gICAgICB0aGlzLnRhYmxlQ29uZmlnLnJvd3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiArZXZlbnQ/LnJvd3MgfSwgKF8sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2M6IGFueSwgYzogYW55KSA9PiB7XHJcbiAgICAgICAgICBhY2NbYz8uaGVhZGVyXSA9ICcnOyAvLyBJbml0aWFsaXplIGVhY2ggY29sdW1uIGtleSB3aXRoIG51bGxcclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZmV0Y2hTbWFydERyb3Bkb3duRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQ/LmVuYWJsZUFQSSkge1xyXG4gICAgICB0aGlzLmRyYXdUYWJsZShldmVudCwgY29sdW1ucylcclxuICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgIHJvd3M6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB0aGlzLnRhYmxlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy50YWJsZUNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNldHRpbmdzKCk6IHZvaWR7XHJcbiAgICBpZih0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGZvcihsZXQgc2V0dGluZyBvZiB0aGlzLmZ4RGF0YS5zZXR0aW5ncyl7XHJcbiAgICAgIGlmKHNldHRpbmcua2V5ID09PSAndGFibGUtY29uZmlnJyl7XHJcbiAgICAgICAgc2V0dGluZy52YWx1ZSA9IHRoaXMudGFibGVDb25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZHJhd1RhYmxlKGV2ZW50OiBhbnksIGNvbHVtbnM6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHJvd3M7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGV2ZW50LmFwaSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMpIHtcclxuICAgICAgICByb3dzID0gcmVzLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbmV3T2JqW2NvbC5oZWFkZXJdID0gaXRlbVtjb2wuYXBpS2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIHJvd3NcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5meERhdGEudmFsdWUgPSB0aGlzLnRhYmxlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEltYWdlcy5zcGxpY2UoaW5kZXgsIDEsIG51bGwpO1xyXG4gICAgdGhpcy50YWJsZUNvbmZpZy5yb3dzW2luZGV4XVt0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnMuZmluZCgoZjogYW55KSA9PiBmLmNlbGxUeXBlID09PSAnZmlsZS11cGxvYWQnKT8uaGVhZGVyXSA9IG51bGw7XHJcbiAgICBjb25zb2xlLmxvZyhcInRhYmxlQ29uZmlnXCIsIHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgdGhpcy50YWJsZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudGFibGVDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlVXJscyh1cmw6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGltYWdlQmxvYjogQmxvYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZUJsb2IpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgcmVzdWx0OiBpbWFnZVVSTCxcclxuICAgICAgICAgIGZpbGU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaW1hZ2U6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGZ4LXNldHRpbmdzLXBhbmVsIFtmeERhdGFdPVwiZnhEYXRhXCIgKGNvbmZpZ3VyYXRpb24pPVwib25DaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudClcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJmeERhdGFcIj5cclxuICAgICAgICA8dGFibGUgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBjbGFzcz1cImZvcm1CdWlsZGVyX2R5bmFtaWNfdGFibGVcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29uZmlnLmNvbHVtbnNcIj57eyBjb2x1bW4uaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlQ29uZmlnLnJvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uY2VsbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj57e3Jvd1tjb2x1bW4uaGVhZGVyXX19PC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dC10ZXh0J1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2lucHV0LW51bWJlcidcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5oZWFkZXJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCB7e2NvbHVtbi5oZWFkZXJ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4/Lm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uPy5vcHRpb25WYWx1ZVwiPiAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8ub3B0aW9uTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgc3R5bGU9XCJ3aWR0aDogNjAlO1wiICpuZ1N3aXRjaENhc2U9XCInc21hcnQtZHJvcGRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Qge3tjb2x1bW4uaGVhZGVyfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc21hcnREcm9wZG93bk9wdGlvbnNbY29sdW1uLmhlYWRlcl1cIiBbdmFsdWVdPVwib3B0aW9uPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbj8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cInJhZGlvLXt7cm93SW5kZXh9fVwiIFtjbGFzc109XCJjb2x1bW4/LmNsYXNzTmFtZVwiICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCIgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uaGVhZGVyXVwiIC8+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbHVtbj8uY2xhc3NOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidyYWRpby1ncm91cCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4ub3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cInJhZGlvLWdyb3VwLXt7cm93SW5kZXh9fVwiIHR5cGU9XCJyYWRpb1wiIFt2YWx1ZV09XCJvcHRpb24/Lm9wdGlvbk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmhlYWRlcl1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24/Lm9wdGlvbk5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlLXVwbG9hZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogZW5kO2p1c3RpZnktY29udGVudDogZW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICB3aWR0aD1cIjEwMFwiICpuZ0lmPVwidXBsb2FkZWRJbWFnZXM/Lltyb3dJbmRleF0/LlsncmVzdWx0J11cIiBbc3JjXT1cInVwbG9hZGVkSW1hZ2VzW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVwbG9hZGVkIEltYWdlXCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUodXBsb2FkZWRJbWFnZXNbcm93SW5kZXhdLCByb3dJbmRleClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlXCIgI3VwbG9hZEZpbGUgIGhpZGRlbiBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRJbWFnZSgkZXZlbnQsIHJvd0luZGV4KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInVwbG9hZEZpbGUuY2xpY2soKVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQganVzdGlmeS1lbmQgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJ1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0/LlsncmVzdWx0J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXBsb2FkZWQgSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIHNoYWRvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRlZEltYWdlcz8uW3Jvd0luZGV4XT8uWydyZXN1bHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZSh1cGxvYWRlZEltYWdlc1tyb3dJbmRleF0sIHJvd0luZGV4KVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHRleHQtd2hpdGUgcm91bmRlZC1tZCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNoYWRvdy1sZyBob3ZlcjpiZy1yZWQtNjAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4p2MXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3VwbG9hZEZpbGUgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBsb2FkSW1hZ2UoJGV2ZW50LCByb3dJbmRleClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGxvYWRGaWxlLmNsaWNrKClcIiBjbGFzcz1cIm10LTIgYmctYmx1ZS01MDAgdGV4dC13aGl0ZSBweC0zIHB5LTEgcm91bmRlZCBob3ZlcjpiZy1ibHVlLTYwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbY2xhc3NdPVwiY29sdW1uPy5jbGFzc05hbWVcIiBuYW1lPVwiXCIgaWQ9XCJcIiBjb2xzPVwiMzBcIiByb3dzPVwiMlwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG48L2Z4LXNldHRpbmdzLXBhbmVsPiJdfQ==
|
|
@@ -421,11 +421,11 @@ class DynamicTableComponent extends FxBaseComponent {
|
|
|
421
421
|
this.destroy$.complete();
|
|
422
422
|
}
|
|
423
423
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
424
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicTableComponent, isStandalone: true, selector: "fx-dynamic-table", inputs: { tableRows: "tableRows", previewType: "previewType", tableConfig: "tableConfig" }, usesInheritance: true, ngImport: i0, template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:
|
|
424
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicTableComponent, isStandalone: true, selector: "fx-dynamic-table", inputs: { tableRows: "tableRows", previewType: "previewType", tableConfig: "tableConfig" }, usesInheritance: true, ngImport: i0, template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option 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 \u274C\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>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SettingsPanelComponent, selector: "fx-settings-panel", outputs: ["configuration"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
425
425
|
}
|
|
426
426
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicTableComponent, decorators: [{
|
|
427
427
|
type: Component,
|
|
428
|
-
args: [{ selector: 'fx-dynamic-table', standalone: true, imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule], template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:
|
|
428
|
+
args: [{ selector: 'fx-dynamic-table', standalone: true, imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule], template: "<fx-settings-panel [fxData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option 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 \u274C\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>", styles: [".formBuilder_dynamic_table{border:.6px solid #ccc}.formBuilder_dynamic_table>thead>tr{background-color:#4682b4;color:#fff}.formBuilder_dynamic_table>thead>tr>th{font-weight:400!important;padding:.25rem .55rem;font-size:.875rem}.formBuilder_dynamic_table>tbody>tr:nth-child(odd){background-color:#fff}.formBuilder_dynamic_table>tbody>tr:nth-child(2n){background-color:#f6f6f6}.formBuilder_dynamic_table>tbody>tr>td{text-align:center;padding:.25rem .55rem}select:not([size]){width:auto}\n"] }]
|
|
429
429
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: FxBuilderWrapperService }], propDecorators: { tableRows: [{
|
|
430
430
|
type: Input
|
|
431
431
|
}], previewType: [{
|
|
@@ -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, OnInit, Output, 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{\r\n @Input() visible: boolean = false;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<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 ngOnInit(): void {\r\n this.addColumn();\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","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\" class=\"customDialogClass\">\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, OnInit, Output, 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 {\r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\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\" (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\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of column?.options\" [value]=\"option?.optionValue\"> \r\n {{ option?.optionName }}\r\n </option>\r\n </select>\r\n \r\n <select [class]=\"column?.className\" style=\"width: 60%;\" *ngSwitchCase=\"'smart-dropdown'\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{option?.name }}\r\n </option>\r\n </select>\r\n \r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <input name=\"radio-{{rowIndex}}\" [class]=\"column?.className\" *ngSwitchCase=\"'radio'\" type=\"radio\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n \r\n <div [class]=\"column?.className\" style=\"display: flex; justify-content: center; gap: 10px;\"\r\n *ngSwitchCase=\"'radio-group'\">\r\n <label *ngFor=\"let option of column.options\">\r\n <input name=\"radio-group-{{rowIndex}}\" type=\"radio\" [value]=\"option?.optionName\"\r\n [(ngModel)]=\"row[column.header]\" />\r\n {{ option?.optionName }}\r\n </label>\r\n </div>\r\n \r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div style=\"display: flex; flex-direction: column; align-items: end;justify-content: end;\">\r\n <img width=\"100\" *ngIf=\"uploadedImages?.[rowIndex]?.['result']\" [src]=\"uploadedImages[rowIndex]?.['result']\"\r\n alt=\"Uploaded Image\" (click)=\"deleteFile(uploadedImages[rowIndex], rowIndex)\"/>\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <button (click)=\"uploadFile.click()\">Upload</button>\r\n </div>\r\n </ng-container>\r\n \r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</fx-settings-panel>","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, OnInit, Output, 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{\r\n @Input() visible: boolean = false;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<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 ngOnInit(): void {\r\n this.addColumn();\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","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\" class=\"customDialogClass\">\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, OnInit, Output, 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 {\r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\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\" (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\" (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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"}
|