fx-form-builder-wrapper 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/fx-form-builder-wrapper.mjs +5 -0
- package/esm2022/lib/components/dynamic-table/dynamic-table.component.mjs +184 -0
- package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +85 -0
- package/esm2022/lib/components/toggle/toggle.component.mjs +33 -0
- package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +38 -0
- package/esm2022/lib/components/uploader/uploader.component.mjs +58 -0
- package/esm2022/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.mjs +42 -0
- package/esm2022/lib/fx-builder-wrapper.component.mjs +76 -0
- package/esm2022/lib/fx-builder-wrapper.service.mjs +40 -0
- package/esm2022/lib/panel/configuration-panel/configuration-panel.component.mjs +89 -0
- package/esm2022/lib/panel/settings-panel/settings-panel.component.mjs +24 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/fx-form-builder-wrapper.mjs +615 -0
- package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/dynamic-table/dynamic-table.component.d.ts +51 -0
- package/lib/components/fx-form-component/fx-form-component.component.d.ts +18 -0
- package/lib/components/toggle/toggle.component.d.ts +13 -0
- package/lib/components/toggle-button/toggle-button.component.d.ts +15 -0
- package/lib/components/uploader/uploader.component.d.ts +16 -0
- package/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.d.ts +17 -0
- package/lib/fx-builder-wrapper.component.d.ts +18 -0
- package/lib/fx-builder-wrapper.service.d.ts +13 -0
- package/lib/panel/configuration-panel/configuration-panel.component.d.ts +25 -0
- package/lib/panel/settings-panel/settings-panel.component.d.ts +10 -0
- package/package.json +18 -5
- package/public-api.d.ts +3 -0
- package/ng-package.json +0 -7
- package/src/lib/components/button/button.component.css +0 -0
- package/src/lib/components/button/button.component.html +0 -1
- package/src/lib/components/button/button.component.ts +0 -24
- package/src/lib/components/dynamic-table/dynamic-table.component.css +0 -0
- package/src/lib/components/dynamic-table/dynamic-table.component.html +0 -69
- package/src/lib/components/dynamic-table/dynamic-table.component.ts +0 -201
- package/src/lib/components/fx-form-component/fx-form-component.component.ts +0 -64
- package/src/lib/components/toggle/toggle.component.css +0 -51
- package/src/lib/components/toggle/toggle.component.html +0 -12
- package/src/lib/components/toggle/toggle.component.ts +0 -33
- package/src/lib/components/toggle-button/toggle-button.component.css +0 -22
- package/src/lib/components/toggle-button/toggle-button.component.html +0 -10
- package/src/lib/components/toggle-button/toggle-button.component.ts +0 -40
- package/src/lib/components/uploader/uploader.component.css +0 -49
- package/src/lib/components/uploader/uploader.component.html +0 -23
- package/src/lib/components/uploader/uploader.component.ts +0 -59
- package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.html +0 -78
- package/src/lib/custom-controls/dispatch-to-clinic/dispatch-to-clinic.component.ts +0 -44
- package/src/lib/fx-builder-wrapper.component.ts +0 -64
- package/src/lib/fx-builder-wrapper.service.ts +0 -34
- package/src/lib/panel/configuration-panel/configuration-panel.component.css +0 -65
- package/src/lib/panel/configuration-panel/configuration-panel.component.html +0 -96
- package/src/lib/panel/configuration-panel/configuration-panel.component.ts +0 -90
- package/src/lib/panel/settings-panel/settings-panel.component.css +0 -30
- package/src/lib/panel/settings-panel/settings-panel.component.html +0 -28
- package/src/lib/panel/settings-panel/settings-panel.component.ts +0 -23
- package/src/public-api.ts +0 -7
- package/src/styles/styles.css +0 -22
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -11
- package/tsconfig.spec.json +0 -15
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, inject } from '@angular/core';
|
|
3
|
+
import { ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';
|
|
4
|
+
import { FxBaseComponent, FxComponent, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
|
|
5
|
+
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
export class DispatchToClinicComponent extends FxBaseComponent {
|
|
10
|
+
cdr;
|
|
11
|
+
fb = inject(FormBuilder);
|
|
12
|
+
clinicAddress$ = new BehaviorSubject({});
|
|
13
|
+
dispatchForm = this.fb.group({
|
|
14
|
+
courierName: ['', Validators.required],
|
|
15
|
+
trackingNumber: ['', Validators.required],
|
|
16
|
+
trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],
|
|
17
|
+
notes: ['', Validators.required]
|
|
18
|
+
});
|
|
19
|
+
constructor(cdr) {
|
|
20
|
+
super(cdr);
|
|
21
|
+
this.cdr = cdr;
|
|
22
|
+
this.onInit.subscribe(() => {
|
|
23
|
+
this._register(this.dispatchForm);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
settings() {
|
|
27
|
+
return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];
|
|
28
|
+
}
|
|
29
|
+
validations() {
|
|
30
|
+
return [FxValidatorService.required];
|
|
31
|
+
}
|
|
32
|
+
copyToClipboard(address) {
|
|
33
|
+
navigator.clipboard.writeText(address);
|
|
34
|
+
}
|
|
35
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DispatchToClinicComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DispatchToClinicComponent, isStandalone: true, selector: "lib-dispatch-to-clinic", usesInheritance: true, ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }] });
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DispatchToClinicComponent, decorators: [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{ selector: 'lib-dispatch-to-clinic', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent], template: "<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>" }]
|
|
41
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2gtdG8tY2xpbmljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2N1c3RvbS1jb250cm9scy9kaXNwYXRjaC10by1jbGluaWMvZGlzcGF0Y2gtdG8tY2xpbmljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2N1c3RvbS1jb250cm9scy9kaXNwYXRjaC10by1jbGluaWMvZGlzcGF0Y2gtdG8tY2xpbmljLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFhLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxlQUFlLEVBQVEsTUFBTSxNQUFNLENBQUM7Ozs7QUFRN0MsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGVBQWU7SUFZeEM7SUFYWixFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFCLGNBQWMsR0FBeUIsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7SUFFcEUsWUFBWSxHQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzdDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3RDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3pDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzNFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO0tBQ2pDLENBQUMsQ0FBQTtJQUVGLFlBQW9CLEdBQXNCO1FBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURPLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBR3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxRQUFRO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVTLFdBQVc7UUFDbkIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsT0FBWTtRQUNqQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO3dHQTlCVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix5R0NadEMscXRKQTZFZSwyQ0RwRUgsWUFBWSx1TEFBRSxtQkFBbUIsNDhCQUFFLFdBQVcsK0JBQUUsV0FBVzs7NEZBRzFELHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzLCBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnQsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIHRha2UgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRpc3BhdGNoLXRvLWNsaW5pYycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnhDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaXNwYXRjaC10by1jbGluaWMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaXNwYXRjaFRvQ2xpbmljQ29tcG9uZW50IGV4dGVuZHMgRnhCYXNlQ29tcG9uZW50IHtcclxuICBwcml2YXRlIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuXHJcbiAgcHVibGljIGNsaW5pY0FkZHJlc3MkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcblxyXG4gIHB1YmxpYyBkaXNwYXRjaEZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgY291cmllck5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB0cmFja2luZ051bWJlcjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIHRyYWNraW5nVXJsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ2h0dHBzPzovLy4rJyldXSxcclxuICAgIG5vdGVzOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgfSlcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihjZHIpO1xyXG5cclxuICAgIHRoaXMub25Jbml0LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3JlZ2lzdGVyKHRoaXMuZGlzcGF0Y2hGb3JtKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldHRpbmdzKCk6IEZ4U2V0dGluZ1tdIHtcclxuICAgIHJldHVybiBbbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2hlYWRpbmctdGV4dCcsICR0aXRsZTogJ0hlYWRpbmcgVGV4dCcsIHZhbHVlOiAnTXkgRGVmYXVsdCBWYWx1ZScgfSldO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5VG9DbGlwYm9hcmQoYWRkcmVzczogYW55KTogdm9pZCB7XHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChhZGRyZXNzKTtcclxuICB9XHJcbn1cclxuIiwiPGZ4LWNvbXBvbmVudCBbZnhEYXRhXT1cImZ4RGF0YVwiPlxyXG4gICAgPHNlY3Rpb25cclxuICAgICAgICBjbGFzcz1cImp1c3RpZnktY29udGVudC1hcm91bmQgbGc6anVzdGlmeS1jb250ZW50LWJldHdlZW4gdy1mdWxsIHdoaXRlLWNvbG9yIGJvcmRlci0xIGJvcmRlci1zb2xpZCBzdHJva2VfbGlnaHRfZ3JleSBwLTMgbWItMyBtdC0zXCI+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJkaXNwYXRjaEZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ291cmllciBOYW1lIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBzbTpjb2wtNiBtZDpjb2wtMyBpbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY291cmllck5hbWVcIiBjbGFzcz1cImlucHV0LXRpdGxlXCI+Q291cmllciBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgZm9ybUNvbnRyb2xOYW1lPVwiY291cmllck5hbWVcIiB0eXBlPVwidGV4dFwiIGlkPVwiY291cmllck5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY291cmllck5hbWVcIiBjbGFzcz1cInAtaW5wdXR0ZXh0IHAtY29tcG9uZW50IHAtZWxlbWVudCBpbnB1dC1maWVsZCBib3JkZXItMSB3LWZ1bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVudGVyIGNvdXJpZXIgbmFtZVwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gdmFsaWRhdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJkaXNwYXRjaEZvcm0uZ2V0KCdjb3VyaWVyTmFtZScpPy5pbnZhbGlkICYmIGRpc3BhdGNoRm9ybS5nZXQoJ2NvdXJpZXJOYW1lJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyLWNvbG9yIGJsb2NrIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ291cmllciBOYW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSB2YWxpZGF0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIENvdXJpZXIgTmFtZSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRyYWNraW5nIE51bWJlciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgc206Y29sLTYgbWQ6Y29sLTMgaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRyYWNraW5nTnVtYmVyXCIgY2xhc3M9XCJpbnB1dC10aXRsZVwiPlRyYWNraW5nIE51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInRyYWNraW5nTnVtYmVyXCIgdHlwZT1cInRleHRcIiBpZD1cInRyYWNraW5nTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRyYWNraW5nTnVtYmVyXCIgY2xhc3M9XCJwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnQgaW5wdXQtZmllbGQgYm9yZGVyLTEgdy1mdWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlbnRlciB0cmFja2luZyBudW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRpc3BhdGNoRm9ybS5nZXQoJ3RyYWNraW5nTnVtYmVyJyk/LmludmFsaWQgJiYgZGlzcGF0Y2hGb3JtLmdldCgndHJhY2tpbmdOdW1iZXInKT8udG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXItY29sb3IgYmxvY2sgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFja2luZyBOdW1iZXIgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUcmFja2luZyBOdW1iZXIgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUcmFja2luZyBVUkwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHNtOmNvbC02IG1kOmNvbC0zIGlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0cmFja2luZ1VybFwiIGNsYXNzPVwiaW5wdXQtdGl0bGVcIj5UcmFja2luZyBVUkw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmFja2luZ1VybFwiIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJ0cmFja2luZ1VybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFja2luZ1VybFwiIGNsYXNzPVwicC1pbnB1dHRleHQgcC1jb21wb25lbnQgcC1lbGVtZW50IGlucHV0LWZpZWxkIGJvcmRlci0xIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZW50ZXIgdHJhY2tpbmcgdXJsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJkaXNwYXRjaEZvcm0uZ2V0KCd0cmFja2luZ1VybCcpPy5pbnZhbGlkICYmIGRpc3BhdGNoRm9ybS5nZXQoJ3RyYWNraW5nVXJsJyk/LnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyLWNvbG9yIGJsb2NrIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwYXRjaEZvcm0uZ2V0KCd0cmFja2luZ1VybCcpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlRyYWNraW5nIFVSTCBpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRpc3BhdGNoRm9ybS5nZXQoJ3RyYWNraW5nVXJsJyk/LmVycm9ycz8uWydwYXR0ZXJuJ11cIj5JbnZhbGlkIFVSTCBmb3JtYXQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHJhY2tpbmcgVVJMIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTm90ZXMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC02IGlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub3Rlc1wiIGNsYXNzPVwiaW5wdXQtdGl0bGVcIj5Ob3RlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cIm5vdGVzXCIgcm93cz1cIjVcIiBpZD1cIm5vdGVzXCIgbmFtZT1cIm5vdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnQgaW5wdXQtZmllbGQgYm9yZGVyLTEgdy1mdWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlbnRlciBub3Rlc1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsICpuZ0lmPVwiZGlzcGF0Y2hGb3JtLmdldCgnbm90ZXMnKT8uaW52YWxpZCAmJiBkaXNwYXRjaEZvcm0uZ2V0KCdub3RlcycpPy50b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlci1jb2xvciBibG9jayBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzIGFyZSByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIE5vdGVzIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQWRkcmVzcyB3aXRoIENvcHkgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTYgcHQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+QWRkcmVzczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY2xpbmljQWRkcmVzcyQgfCBhc3luYykgYXMgYWRkcmVzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRkcmVzcyAjY29tcGxldGVBZGRyZXNzPnt7YWRkcmVzcz8uc3RyZWV0fX0sIHt7YWRkcmVzcz8uc3RhdGV9fSwge3thZGRyZXNzPy5wb3N0YWxDb2RlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY29weSBjdXJzb3ItcG9pbnRlciB0ZXh0LXhsIHRleHQtc2Vjb25kYXJ5LWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGNvbXBsZXRlQWRkcmVzcy50ZXh0Q29udGVudClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkcmVzcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBBZGRyZXNzIHdpdGggQ29weSBJY29uIC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L3NlY3Rpb24+XHJcbjwvZngtY29tcG9uZW50PiJdfQ==
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
3
|
+
import { FxComponentBuilder, FxMode, FxScope, FxUtils } from '@instantsys-labs/fx';
|
|
4
|
+
import { DispatchToClinicComponent } from './custom-controls/dispatch-to-clinic/dispatch-to-clinic.component';
|
|
5
|
+
import { DynamicTableComponent } from './components/dynamic-table/dynamic-table.component';
|
|
6
|
+
import { ToggleButtonComponent } from './components/toggle-button/toggle-button.component';
|
|
7
|
+
import { UploaderComponent } from './components/uploader/uploader.component';
|
|
8
|
+
import { ToggleComponent } from './components/toggle/toggle.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./fx-builder-wrapper.service";
|
|
11
|
+
export class FxBuilderWrapperComponent {
|
|
12
|
+
fxWrapperService;
|
|
13
|
+
componentBuilder;
|
|
14
|
+
fxForm = FxUtils.createNewForm();
|
|
15
|
+
fxMode = FxMode.EDIT;
|
|
16
|
+
fxConfiguration = {
|
|
17
|
+
settings: true,
|
|
18
|
+
logics: true,
|
|
19
|
+
customControls: true,
|
|
20
|
+
};
|
|
21
|
+
FxScope = FxScope;
|
|
22
|
+
FxMode = FxMode;
|
|
23
|
+
constructor(fxWrapperService) {
|
|
24
|
+
this.fxWrapperService = fxWrapperService;
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
if (!Boolean(this.fxWrapperService.getComponent('dispatch-to-clinic'))) {
|
|
28
|
+
this.fxWrapperService.registerCustomComponent('Dispatch To Clinic', 'dispatch-to-clinic', DispatchToClinicComponent);
|
|
29
|
+
}
|
|
30
|
+
if (!Boolean(this.fxWrapperService.getComponent('dynamic-table'))) {
|
|
31
|
+
this.fxWrapperService.registerCustomComponent('Dynamic Table', 'dynamic-table', DynamicTableComponent);
|
|
32
|
+
}
|
|
33
|
+
if (!Boolean(this.fxWrapperService.getComponent('toggle-button'))) {
|
|
34
|
+
this.fxWrapperService.registerCustomComponent('Toggle Button', 'toggle-button', ToggleButtonComponent);
|
|
35
|
+
}
|
|
36
|
+
if (!Boolean(this.fxWrapperService.getComponent('uploader'))) {
|
|
37
|
+
this.fxWrapperService.registerCustomComponent('Uploader', 'uploader', UploaderComponent);
|
|
38
|
+
}
|
|
39
|
+
if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {
|
|
40
|
+
this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
;
|
|
44
|
+
getParsedForm() {
|
|
45
|
+
return this.componentBuilder.getParsedForm();
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxBuilderWrapperComponent, deps: [{ token: i1.FxBuilderWrapperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FxBuilderWrapperComponent, isStandalone: true, selector: "fx-builder-wrapper", inputs: { fxForm: ["fx-form", "fxForm"] }, viewQueries: [{ propertyName: "componentBuilder", first: true, predicate: ["componentBuilder"], descendants: true }], ngImport: i0, template: `
|
|
49
|
+
<fx-component-builder
|
|
50
|
+
#componentBuilder
|
|
51
|
+
[fx-form]="fxForm"
|
|
52
|
+
[configuration]="fxConfiguration"
|
|
53
|
+
[scope]="FxScope.BUILDER"
|
|
54
|
+
>
|
|
55
|
+
</fx-component-builder>
|
|
56
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FxComponentBuilder, selector: "fx-component-builder", inputs: ["fx-form", "scope", "configuration"] }] });
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxBuilderWrapperComponent, decorators: [{
|
|
59
|
+
type: Component,
|
|
60
|
+
args: [{ selector: 'fx-builder-wrapper', standalone: true, imports: [CommonModule, FxComponentBuilder], template: `
|
|
61
|
+
<fx-component-builder
|
|
62
|
+
#componentBuilder
|
|
63
|
+
[fx-form]="fxForm"
|
|
64
|
+
[configuration]="fxConfiguration"
|
|
65
|
+
[scope]="FxScope.BUILDER"
|
|
66
|
+
>
|
|
67
|
+
</fx-component-builder>
|
|
68
|
+
` }]
|
|
69
|
+
}], ctorParameters: () => [{ type: i1.FxBuilderWrapperService }], propDecorators: { componentBuilder: [{
|
|
70
|
+
type: ViewChild,
|
|
71
|
+
args: ['componentBuilder']
|
|
72
|
+
}], fxForm: [{
|
|
73
|
+
type: Input,
|
|
74
|
+
args: [{ alias: 'fx-form', required: true }]
|
|
75
|
+
}] } });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtYnVpbGRlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2Z4LWJ1aWxkZXItd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQTBCLGtCQUFrQixFQUFVLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFFOUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7QUFpQnZFLE1BQU0sT0FBTyx5QkFBeUI7SUFhaEI7SUFaVyxnQkFBZ0IsQ0FBc0I7SUFDeEIsTUFBTSxHQUFXLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvRSxNQUFNLEdBQVcsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixlQUFlLEdBQTJCO1FBQy9DLFFBQVEsRUFBRSxJQUFJO1FBQ2QsTUFBTSxFQUFFLElBQUk7UUFDWixjQUFjLEVBQUUsSUFBSTtLQUNyQixDQUFBO0lBRWtCLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDbEIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUVuQyxZQUFvQixnQkFBeUM7UUFBekMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtJQUFJLENBQUM7SUFFM0QsUUFBUTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUN2SCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFFSyxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9DLENBQUM7d0dBbkNVLHlCQUF5Qjs0RkFBekIseUJBQXlCLCtPQVgxQjs7Ozs7Ozs7R0FRVCx5RUFUUyxZQUFZLCtCQUFFLGtCQUFrQjs7NEZBWS9CLHlCQUF5QjtrQkFmckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFlBQ2pDOzs7Ozs7OztHQVFUOzRGQUk4QixnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNnQixNQUFNO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRnhCdWlsZGVyQ29uZmlndXJhdGlvbiwgRnhDb21wb25lbnRCdWlsZGVyLCBGeEZvcm0sIEZ4TW9kZSwgRnhTY29wZSwgRnhVdGlscyB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBEaXNwYXRjaFRvQ2xpbmljQ29tcG9uZW50IH0gZnJvbSAnLi9jdXN0b20tY29udHJvbHMvZGlzcGF0Y2gtdG8tY2xpbmljL2Rpc3BhdGNoLXRvLWNsaW5pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4vZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvZ2dsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b2dnbGUtYnV0dG9uL3RvZ2dsZS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXBsb2FkZXIvdXBsb2FkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtYnVpbGRlci13cmFwcGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZ4Q29tcG9uZW50QnVpbGRlcl0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxmeC1jb21wb25lbnQtYnVpbGRlciBcclxuICAgICAgICAjY29tcG9uZW50QnVpbGRlciBcclxuICAgICAgICBbZngtZm9ybV09XCJmeEZvcm1cIiBcclxuICAgICAgICBbY29uZmlndXJhdGlvbl09XCJmeENvbmZpZ3VyYXRpb25cIiBcclxuICAgICAgICBbc2NvcGVdPVwiRnhTY29wZS5CVUlMREVSXCJcclxuICAgICAgICA+XHJcbiAgICA8L2Z4LWNvbXBvbmVudC1idWlsZGVyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnhCdWlsZGVyV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50QnVpbGRlcicpIGNvbXBvbmVudEJ1aWxkZXIhOiBGeENvbXBvbmVudEJ1aWxkZXI7XHJcbiAgQElucHV0KHsgYWxpYXM6ICdmeC1mb3JtJywgcmVxdWlyZWQ6IHRydWUgfSkgZnhGb3JtOiBGeEZvcm0gPSBGeFV0aWxzLmNyZWF0ZU5ld0Zvcm0oKTtcclxuICBwdWJsaWMgZnhNb2RlOiBGeE1vZGUgPSBGeE1vZGUuRURJVDtcclxuICBwdWJsaWMgZnhDb25maWd1cmF0aW9uOiBGeEJ1aWxkZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgc2V0dGluZ3M6IHRydWUsXHJcbiAgICBsb2dpY3M6IHRydWUsXHJcbiAgICBjdXN0b21Db250cm9sczogdHJ1ZSxcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBGeFNjb3BlID0gRnhTY29wZTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRnhNb2RlID0gRnhNb2RlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ4V3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2Rpc3BhdGNoLXRvLWNsaW5pYycpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ0Rpc3BhdGNoIFRvIENsaW5pYycsICdkaXNwYXRjaC10by1jbGluaWMnLCBEaXNwYXRjaFRvQ2xpbmljQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdkeW5hbWljLXRhYmxlJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnRHluYW1pYyBUYWJsZScsICdkeW5hbWljLXRhYmxlJywgRHluYW1pY1RhYmxlQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCd0b2dnbGUtYnV0dG9uJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnVG9nZ2xlIEJ1dHRvbicsICd0b2dnbGUtYnV0dG9uJywgVG9nZ2xlQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCd1cGxvYWRlcicpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1VwbG9hZGVyJywgJ3VwbG9hZGVyJywgVXBsb2FkZXJDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3RvZ2dsZScpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1RvZ2dsZScsICd0b2dnbGUnLCBUb2dnbGVDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBnZXRQYXJzZWRGb3JtKCk6IEZ4Rm9ybSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRCdWlsZGVyLmdldFBhcnNlZEZvcm0oKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@instantsys-labs/fx";
|
|
5
|
+
export class FxBuilderWrapperService {
|
|
6
|
+
fxComponentRegistry;
|
|
7
|
+
variables$ = new BehaviorSubject(null);
|
|
8
|
+
constructor(fxComponentRegistry) {
|
|
9
|
+
this.fxComponentRegistry = fxComponentRegistry;
|
|
10
|
+
}
|
|
11
|
+
registerCustomComponent(title, selector, component) {
|
|
12
|
+
this.fxComponentRegistry.registerComponent(selector, component, {
|
|
13
|
+
registeringAs: "CUSTOM",
|
|
14
|
+
libraryItem: {
|
|
15
|
+
title,
|
|
16
|
+
icon: 'fa-eye',
|
|
17
|
+
fxData: {
|
|
18
|
+
id: null,
|
|
19
|
+
name: selector,
|
|
20
|
+
value: "",
|
|
21
|
+
selector: selector,
|
|
22
|
+
elements: [],
|
|
23
|
+
events: []
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
getComponent(selector) {
|
|
29
|
+
return this.fxComponentRegistry.getComponent(selector);
|
|
30
|
+
}
|
|
31
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxBuilderWrapperService, deps: [{ token: i1.FxComponentRegistryService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxBuilderWrapperService, providedIn: 'root' });
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FxBuilderWrapperService, decorators: [{
|
|
35
|
+
type: Injectable,
|
|
36
|
+
args: [{
|
|
37
|
+
providedIn: 'root'
|
|
38
|
+
}]
|
|
39
|
+
}], ctorParameters: () => [{ type: i1.FxComponentRegistryService }] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxlQUFlLEVBQVcsTUFBTSxNQUFNLENBQUM7OztBQUtoRCxNQUFNLE9BQU8sdUJBQXVCO0lBRWQ7SUFEYixVQUFVLEdBQUcsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLENBQUM7SUFDMUQsWUFBb0IsbUJBQStDO1FBQS9DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNEI7SUFBSSxDQUFDO0lBRWpFLHVCQUF1QixDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLFNBQWdDO1FBRTlGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQzlELGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLFdBQVcsRUFBRTtnQkFDWCxLQUFLO2dCQUNMLElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRTtvQkFDTixFQUFFLEVBQUUsSUFBSTtvQkFDUixJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsRUFBRTtvQkFDVCxRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osTUFBTSxFQUFFLEVBQUU7aUJBQ1g7YUFDRjtTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTSxZQUFZLENBQUMsUUFBZ0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7d0dBekJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnRSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB7XHJcbiAgcHVibGljIHZhcmlhYmxlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnhDb21wb25lbnRSZWdpc3RyeTogRnhDb21wb25lbnRSZWdpc3RyeVNlcnZpY2UpIHsgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJDdXN0b21Db21wb25lbnQodGl0bGU6IHN0cmluZywgc2VsZWN0b3I6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPEZ4QmFzZUNvbXBvbmVudD5cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZnhDb21wb25lbnRSZWdpc3RyeS5yZWdpc3RlckNvbXBvbmVudChzZWxlY3RvciwgY29tcG9uZW50LCB7XHJcbiAgICAgIHJlZ2lzdGVyaW5nQXM6IFwiQ1VTVE9NXCIsXHJcbiAgICAgIGxpYnJhcnlJdGVtOiB7XHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgaWNvbjogJ2ZhLWV5ZScsXHJcbiAgICAgICAgZnhEYXRhOiB7XHJcbiAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgIG5hbWU6IHNlbGVjdG9yLFxyXG4gICAgICAgICAgdmFsdWU6IFwiXCIsXHJcbiAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXHJcbiAgICAgICAgICBlbGVtZW50czogW10sXHJcbiAgICAgICAgICBldmVudHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wb25lbnQoc2VsZWN0b3I6IHN0cmluZyk6IFR5cGU8RnhCYXNlQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5meENvbXBvbmVudFJlZ2lzdHJ5LmdldENvbXBvbmVudChzZWxlY3Rvcik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import { ButtonModule } from 'primeng/button';
|
|
4
|
+
import { DialogModule } from 'primeng/dialog';
|
|
5
|
+
import { InputTextModule } from 'primeng/inputtext';
|
|
6
|
+
import { FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
import * as i2 from "@angular/common";
|
|
10
|
+
import * as i3 from "primeng/button";
|
|
11
|
+
import * as i4 from "primeng/api";
|
|
12
|
+
import * as i5 from "primeng/dialog";
|
|
13
|
+
export class ConfigurationPanelComponent {
|
|
14
|
+
fb;
|
|
15
|
+
visible = false;
|
|
16
|
+
isVisible = new EventEmitter();
|
|
17
|
+
configuration = new EventEmitter();
|
|
18
|
+
rows = 1;
|
|
19
|
+
enableAPI = false;
|
|
20
|
+
api = '';
|
|
21
|
+
dynamicForm;
|
|
22
|
+
columnTypes = ['text', 'input-text', 'input-number', 'dropdown', 'smart-dropdown', 'checkbox', 'radio', 'radio-group', 'file-upload', 'textarea'];
|
|
23
|
+
constructor(fb) {
|
|
24
|
+
this.fb = fb;
|
|
25
|
+
this.dynamicForm = this.fb.group({
|
|
26
|
+
columns: this.fb.array([])
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
get columns() {
|
|
30
|
+
return this.dynamicForm.get('columns');
|
|
31
|
+
}
|
|
32
|
+
// Add Column Dynamically
|
|
33
|
+
addColumn() {
|
|
34
|
+
const columnFormGroup = this.fb.group({
|
|
35
|
+
header: ['', Validators.required],
|
|
36
|
+
cellType: ['', Validators.required],
|
|
37
|
+
placeholder: '',
|
|
38
|
+
options: this.fb.array([]),
|
|
39
|
+
apiUrl: '',
|
|
40
|
+
valueKey: '',
|
|
41
|
+
labelKey: '',
|
|
42
|
+
className: '',
|
|
43
|
+
apiKey: ''
|
|
44
|
+
});
|
|
45
|
+
this.columns.push(columnFormGroup);
|
|
46
|
+
}
|
|
47
|
+
// Remove Column
|
|
48
|
+
removeColumn(index) {
|
|
49
|
+
this.columns.removeAt(index);
|
|
50
|
+
}
|
|
51
|
+
// Add Options Dynamically
|
|
52
|
+
addOption(columnIndex) {
|
|
53
|
+
const optionGroup = this.fb.group({
|
|
54
|
+
optionName: ['', Validators.required],
|
|
55
|
+
optionValue: ['', Validators.required]
|
|
56
|
+
});
|
|
57
|
+
const column = this.columns.at(columnIndex);
|
|
58
|
+
const options = column.get('options');
|
|
59
|
+
options.push(optionGroup);
|
|
60
|
+
}
|
|
61
|
+
// Get options FormArray for a specific column
|
|
62
|
+
getOptions(columnIndex) {
|
|
63
|
+
const column = this.columns.at(columnIndex);
|
|
64
|
+
return column.get('options');
|
|
65
|
+
}
|
|
66
|
+
closeDialog() {
|
|
67
|
+
this.isVisible.emit(false);
|
|
68
|
+
}
|
|
69
|
+
saveConfiguration() {
|
|
70
|
+
this.configuration.emit({ rows: this.rows, columns: this.dynamicForm.value?.columns, enableAPI: this.enableAPI, api: this.api });
|
|
71
|
+
this.isVisible.emit(false);
|
|
72
|
+
}
|
|
73
|
+
onSubmit() {
|
|
74
|
+
console.log("Value columns formArray", this.dynamicForm.value);
|
|
75
|
+
}
|
|
76
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationPanelComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ConfigurationPanelComponent, isStandalone: true, selector: "fx-configuration-panel", inputs: { visible: "visible" }, outputs: { isVisible: "isVisible", configuration: "configuration" }, ngImport: i0, template: "<p-dialog [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{ width: '35rem' }\">\r\n <ng-content pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configuration</p>\r\n </div>\r\n </ng-content>\r\n\r\n <ng-template pTemplate=\"content\">\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\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [readonly]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\" autocomplete=\"rows\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-8\">\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 @if (enableAPI) {\r\n <div class=\"flex items-center gap-4 mb-8\">\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\" autocomplete=\"api\" />\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"grid grid-nogutter\">\r\n <div class=\"col-2 mb-3 flex items-center gap-3\">\r\n <p class=\"text-sm font-semibold\">Columns:</p>\r\n <button type=\"button\" (click)=\"addColumn()\">Add Column</button>\r\n </div>\r\n <div class=\"col-10\">\r\n <form [formGroup]=\"dynamicForm\" (ngSubmit)=\"onSubmit()\">\r\n <div formArrayName=\"columns\">\r\n <div *ngFor=\"let column of columns.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"flex gap-4 mb-2\">\r\n <label class=\"white-space-nowrap\">Column Name:</label>\r\n <input formControlName=\"header\" placeholder=\"Enter Column Name\" class=\"form__input\" />\r\n </div>\r\n <div class=\"flex gap-4\">\r\n <label>Column Type:</label>\r\n <select formControlName=\"cellType\">\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=\"flex gap-4 mt-2\">\r\n <label>API Value Key:</label>\r\n <input formControlName=\"apiKey\" placeholder=\"Enter Value Key\" class=\"form__input\" />\r\n </div>\r\n }\r\n \r\n <!-- Show options if columnType is 'radio-group' or 'dropdown' -->\r\n <div *ngIf=\"['radio-group', 'dropdown'].includes(column.value.cellType)\">\r\n <div formArrayName=\"options\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\">\r\n <label>Option {{ j + 1 }}:</label>\r\n <input formControlName=\"optionName\" placeholder=\"Enter option name\" class=\"form__input\" />\r\n <input formControlName=\"optionValue\" placeholder=\"Enter option value\" class=\"form__input\" />\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\">Remove Option</button>\r\n </div>\r\n </div>\r\n <button type=\"button\" (click)=\"addOption(i)\">Add Option</button>\r\n </div>\r\n\r\n <!-- Show apiUrl if columnType is 'smart-dropdown' -->\r\n <div *ngIf=\"['smart-dropdown'].includes(column.value.cellType)\" class=\"flex gap-2\">\r\n <div>\r\n <label>API Url</label>\r\n <input formControlName=\"apiUrl\" placeholder=\"Enter api url\" class=\"form__input\" />\r\n </div>\r\n <div>\r\n <label>Value Key</label>\r\n <input formControlName=\"valueKey\" placeholder=\"Enter Value Key\" class=\"form__input\" />\r\n </div>\r\n <div>\r\n <label>Label Key</label>\r\n <input formControlName=\"labelKey\" placeholder=\"Enter Label Key\" class=\"form__input\" />\r\n </div>\r\n </div>\r\n \r\n <button type=\"button\" (click)=\"columns.removeAt(i)\">Remove Column</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end bg-blue-500 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 </ng-template>\r\n</p-dialog>", styles: [":is() .p-dialog-content{padding:1.5rem}:is() .p-dialog-header{background:#fff;padding:1rem;font-size:1.25rem;font-weight:700}.form__input{width:100%;padding:8px;border:1px solid #ccc;border-radius:5px}label{font-size:14px;font-weight:600;margin-bottom:5px}.button-group{display:flex;justify-content:flex-end;gap:10px;padding-top:1rem}button{padding:8px 12px;border:none;border-radius:5px;cursor:pointer}.cancel{background:#ccc;color:#000}.save{background:#007bff;color:#fff}button:hover{opacity:.8}\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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i5.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationPanelComponent, decorators: [{
|
|
80
|
+
type: Component,
|
|
81
|
+
args: [{ selector: 'fx-configuration-panel', standalone: true, imports: [CommonModule, ReactiveFormsModule, ButtonModule, DialogModule, InputTextModule, FormsModule], template: "<p-dialog [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{ width: '35rem' }\">\r\n <ng-content pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configuration</p>\r\n </div>\r\n </ng-content>\r\n\r\n <ng-template pTemplate=\"content\">\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\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [readonly]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\" autocomplete=\"rows\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-8\">\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 @if (enableAPI) {\r\n <div class=\"flex items-center gap-4 mb-8\">\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\" autocomplete=\"api\" />\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-4 mb-8\">\r\n <div class=\"grid grid-nogutter\">\r\n <div class=\"col-2 mb-3 flex items-center gap-3\">\r\n <p class=\"text-sm font-semibold\">Columns:</p>\r\n <button type=\"button\" (click)=\"addColumn()\">Add Column</button>\r\n </div>\r\n <div class=\"col-10\">\r\n <form [formGroup]=\"dynamicForm\" (ngSubmit)=\"onSubmit()\">\r\n <div formArrayName=\"columns\">\r\n <div *ngFor=\"let column of columns.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"flex gap-4 mb-2\">\r\n <label class=\"white-space-nowrap\">Column Name:</label>\r\n <input formControlName=\"header\" placeholder=\"Enter Column Name\" class=\"form__input\" />\r\n </div>\r\n <div class=\"flex gap-4\">\r\n <label>Column Type:</label>\r\n <select formControlName=\"cellType\">\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=\"flex gap-4 mt-2\">\r\n <label>API Value Key:</label>\r\n <input formControlName=\"apiKey\" placeholder=\"Enter Value Key\" class=\"form__input\" />\r\n </div>\r\n }\r\n \r\n <!-- Show options if columnType is 'radio-group' or 'dropdown' -->\r\n <div *ngIf=\"['radio-group', 'dropdown'].includes(column.value.cellType)\">\r\n <div formArrayName=\"options\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\">\r\n <label>Option {{ j + 1 }}:</label>\r\n <input formControlName=\"optionName\" placeholder=\"Enter option name\" class=\"form__input\" />\r\n <input formControlName=\"optionValue\" placeholder=\"Enter option value\" class=\"form__input\" />\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\">Remove Option</button>\r\n </div>\r\n </div>\r\n <button type=\"button\" (click)=\"addOption(i)\">Add Option</button>\r\n </div>\r\n\r\n <!-- Show apiUrl if columnType is 'smart-dropdown' -->\r\n <div *ngIf=\"['smart-dropdown'].includes(column.value.cellType)\" class=\"flex gap-2\">\r\n <div>\r\n <label>API Url</label>\r\n <input formControlName=\"apiUrl\" placeholder=\"Enter api url\" class=\"form__input\" />\r\n </div>\r\n <div>\r\n <label>Value Key</label>\r\n <input formControlName=\"valueKey\" placeholder=\"Enter Value Key\" class=\"form__input\" />\r\n </div>\r\n <div>\r\n <label>Label Key</label>\r\n <input formControlName=\"labelKey\" placeholder=\"Enter Label Key\" class=\"form__input\" />\r\n </div>\r\n </div>\r\n \r\n <button type=\"button\" (click)=\"columns.removeAt(i)\">Remove Column</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end bg-blue-500 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 </ng-template>\r\n</p-dialog>", styles: [":is() .p-dialog-content{padding:1.5rem}:is() .p-dialog-header{background:#fff;padding:1rem;font-size:1.25rem;font-weight:700}.form__input{width:100%;padding:8px;border:1px solid #ccc;border-radius:5px}label{font-size:14px;font-weight:600;margin-bottom:5px}.button-group{display:flex;justify-content:flex-end;gap:10px;padding-top:1rem}button{padding:8px 12px;border:none;border-radius:5px;cursor:pointer}.cancel{background:#ccc;color:#000}.save{background:#007bff;color:#fff}button:hover{opacity:.8}\n"] }]
|
|
82
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { visible: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], isVisible: [{
|
|
85
|
+
type: Output
|
|
86
|
+
}], configuration: [{
|
|
87
|
+
type: Output
|
|
88
|
+
}] } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsL2NvbmZpZ3VyYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvcGFuZWwvY29uZmlndXJhdGlvbi1wYW5lbC9jb25maWd1cmF0aW9uLXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBcUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBU2pILE1BQU0sT0FBTywyQkFBMkI7SUFhbEI7SUFaWCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3hCLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTNDLElBQUksR0FBVyxDQUFDLENBQUM7SUFDakIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixHQUFHLEdBQVcsRUFBRSxDQUFDO0lBRWpCLFdBQVcsQ0FBWTtJQUV2QixXQUFXLEdBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRW5LLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWMsQ0FBQztJQUN0RCxDQUFDO0lBRUQseUJBQXlCO0lBQ2xCLFNBQVM7UUFDZCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNwQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0I7SUFDVCxZQUFZLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFNBQVMsQ0FBQyxXQUFtQjtRQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUN2QyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQWMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBYyxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELDhDQUE4QztJQUN2QyxVQUFVLENBQUMsV0FBbUI7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFjLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBYyxDQUFDO0lBQzVDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO3dHQXpFVSwyQkFBMkI7NEZBQTNCLDJCQUEyQix1TENmeEMsb2pOQStGVyw2aUJEcEZDLFlBQVksK1BBQUUsbUJBQW1CLHN1REFBRSxZQUFZLG9lQUFFLFlBQVksdXVCQUFFLGVBQWUsOEJBQUUsV0FBVzs7NEZBSTFGLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQztnRkFLN0YsT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRGlhbG9nLCBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQ2FyZCB9IGZyb20gJ3ByaW1lbmcvY2FyZCc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Z4LWNvbmZpZ3VyYXRpb24tcGFuZWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIElucHV0VGV4dE1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29uZmlndXJhdGlvbi1wYW5lbC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblBhbmVsQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGlzVmlzaWJsZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgY29uZmlndXJhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwdWJsaWMgcm93czogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgZW5hYmxlQVBJOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFwaTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBkeW5hbWljRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgY29sdW1uVHlwZXM6IHN0cmluZ1tdID0gWyd0ZXh0JywgJ2lucHV0LXRleHQnLCAnaW5wdXQtbnVtYmVyJywgJ2Ryb3Bkb3duJywgJ3NtYXJ0LWRyb3Bkb3duJywgJ2NoZWNrYm94JywgJ3JhZGlvJywgJ3JhZGlvLWdyb3VwJywgJ2ZpbGUtdXBsb2FkJywgJ3RleHRhcmVhJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmR5bmFtaWNGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuZmIuYXJyYXkoW10pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zKCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5keW5hbWljRm9ybS5nZXQoJ2NvbHVtbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyBBZGQgQ29sdW1uIER5bmFtaWNhbGx5XHJcbiAgcHVibGljIGFkZENvbHVtbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtbkZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBoZWFkZXI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGNlbGxUeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgIG9wdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBhcGlVcmw6ICcnLFxyXG4gICAgICB2YWx1ZUtleTogJycsXHJcbiAgICAgIGxhYmVsS2V5OiAnJyxcclxuICAgICAgY2xhc3NOYW1lOiAnJyxcclxuICAgICAgYXBpS2V5OiAnJ1xyXG4gICAgfSlcclxuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbkZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmUgQ29sdW1uXHJcbiAgcHVibGljIHJlbW92ZUNvbHVtbihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbHVtbnMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQWRkIE9wdGlvbnMgRHluYW1pY2FsbHlcclxuICBwdWJsaWMgYWRkT3B0aW9uKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG9wdGlvbkdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG9wdGlvbk5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIG9wdGlvblZhbHVlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuYXQoY29sdW1uSW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBjb2x1bW4uZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgb3B0aW9ucy5wdXNoKG9wdGlvbkdyb3VwKTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBvcHRpb25zIEZvcm1BcnJheSBmb3IgYSBzcGVjaWZpYyBjb2x1bW5cclxuICBwdWJsaWMgZ2V0T3B0aW9ucyhjb2x1bW5JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuYXQoY29sdW1uSW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIHJldHVybiBjb2x1bW4uZ2V0KCdvcHRpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1Zpc2libGUuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZW1pdCh7IHJvd3M6IHRoaXMucm93cywgY29sdW1uczogdGhpcy5keW5hbWljRm9ybS52YWx1ZT8uY29sdW1ucywgZW5hYmxlQVBJOiB0aGlzLmVuYWJsZUFQSSwgYXBpOiB0aGlzLmFwaSB9KTtcclxuICAgIHRoaXMuaXNWaXNpYmxlLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJWYWx1ZSBjb2x1bW5zIGZvcm1BcnJheVwiLCB0aGlzLmR5bmFtaWNGb3JtLnZhbHVlKTtcclxuICB9XHJcbn1cclxuIiwiPHAtZGlhbG9nIFttb2RhbF09XCJ0cnVlXCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtzdHlsZV09XCJ7IHdpZHRoOiAnMzVyZW0nIH1cIj5cclxuICAgICAgICA8bmctY29udGVudCAgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHAtMiBiZy13aGl0ZSBib3JkZXItMlwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2VcIj5FZGl0IENvbmZpZ3VyYXRpb248L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGVudD5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IGJnLXdoaXRlIHAtMiBib3JkZXItMiBib3JkZXItZ3JheS0yMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJvd3NcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdy0yNFwiPlJvd3M8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtyZWFkb25seV09XCJlbmFibGVBUElcIiBbKG5nTW9kZWwpXT1cInJvd3NcIiBwbGFjZWhvbGRlcj1cInJvd3NcIiBjbGFzcz1cImZvcm1fX2lucHV0XCIgaWQ9XCJuYW1lXCIgYXV0b2NvbXBsZXRlPVwicm93c1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImVuYWJsZUFQSVwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB3LTI0XCI+RW5hYmxlIEFQSTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiZW5hYmxlQVBJXCIgcGxhY2Vob2xkZXI9XCJBUEkgVXJsXCIgaWQ9XCJlbmFibGVBUElcIiBhdXRvY29tcGxldGU9XCJlbmFibGVBUElcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUFQSSkge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgbWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFwaVwiIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB3LTI0XCI+QVBJPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiYXBpXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBBUEkgVXJsXCIgaWQ9XCJhcGlcIiBhdXRvY29tcGxldGU9XCJhcGlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1ub2d1dHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgbWItMyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIj5Db2x1bW5zOjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPkFkZCBDb2x1bW48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZHluYW1pY0Zvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwid2hpdGUtc3BhY2Utbm93cmFwXCI+Q29sdW1uIE5hbWU6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiaGVhZGVyXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBDb2x1bW4gTmFtZVwiIGNsYXNzPVwiZm9ybV9faW5wdXRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Q29sdW1uIFR5cGU6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNlbGxUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIGNvbHVtblR5cGVzXCIgW3ZhbHVlXT1cInR5cGVcIj57e3R5cGV9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVBUEkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QVBJIFZhbHVlIEtleTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImFwaUtleVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgVmFsdWUgS2V5XCIgY2xhc3M9XCJmb3JtX19pbnB1dFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBvcHRpb25zIGlmIGNvbHVtblR5cGUgaXMgJ3JhZGlvLWdyb3VwJyBvciAnZHJvcGRvd24nIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWydyYWRpby1ncm91cCcsICdkcm9wZG93biddLmluY2x1ZGVzKGNvbHVtbi52YWx1ZS5jZWxsVHlwZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0T3B0aW9ucyhpKS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk9wdGlvbiB7eyBqICsgMSB9fTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3B0aW9uTmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgb3B0aW9uIG5hbWVcIiBjbGFzcz1cImZvcm1fX2lucHV0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm9wdGlvblZhbHVlXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBvcHRpb24gdmFsdWVcIiBjbGFzcz1cImZvcm1fX2lucHV0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdldE9wdGlvbnMoaSkucmVtb3ZlQXQoailcIj5SZW1vdmUgT3B0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkT3B0aW9uKGkpXCI+QWRkIE9wdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBhcGlVcmwgaWYgY29sdW1uVHlwZSBpcyAnc21hcnQtZHJvcGRvd24nIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlsnc21hcnQtZHJvcGRvd24nXS5pbmNsdWRlcyhjb2x1bW4udmFsdWUuY2VsbFR5cGUpXCIgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkFQSSBVcmw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYXBpVXJsXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBhcGkgdXJsXCIgY2xhc3M9XCJmb3JtX19pbnB1dFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VmFsdWUgS2V5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInZhbHVlS2V5XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBWYWx1ZSBLZXlcIiBjbGFzcz1cImZvcm1fX2lucHV0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5MYWJlbCBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxLZXlcIiBwbGFjZWhvbGRlcj1cIkVudGVyIExhYmVsIEtleVwiIGNsYXNzPVwiZm9ybV9faW5wdXRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb2x1bW5zLnJlbW92ZUF0KGkpXCI+UmVtb3ZlIENvbHVtbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICBwVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgYmctYmx1ZS01MDAgZ2FwLTQgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gbGFiZWw9XCJDYW5jZWxcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiBzdHlsZUNsYXNzPVwiYm9yZGVyIGJvcmRlci1pbmRpZ28tNjAwXCIgbGFiZWw9XCJTYXZlXCIgKGNsaWNrKT1cInNhdmVDb25maWd1cmF0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZGlhbG9nPiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Output } from '@angular/core';
|
|
3
|
+
import { FxComponent } from '@instantsys-labs/fx';
|
|
4
|
+
import { ButtonModule } from 'primeng/button';
|
|
5
|
+
import { InputTextModule } from 'primeng/inputtext';
|
|
6
|
+
import { ConfigurationPanelComponent } from '../configuration-panel/configuration-panel.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
export class SettingsPanelComponent extends FxComponent {
|
|
10
|
+
configuration = new EventEmitter();
|
|
11
|
+
visible = false;
|
|
12
|
+
openSettingDialog() {
|
|
13
|
+
this.visible = true;
|
|
14
|
+
}
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SettingsPanelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SettingsPanelComponent, isStandalone: true, selector: "fx-settings-panel", outputs: { configuration: "configuration" }, usesInheritance: true, ngImport: i0, template: "<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>", styles: [".fx-element{position:relative}.fx-element .fx-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000001a;z-index:-1;pointer-events:none;opacity:0}.fx-element:hover .fx-overlay{z-index:1;opacity:1;pointer-events:auto}.fx-element:hover .fx-overlay .fx-actions{position:absolute;margin-top:-26px;height:25px;border-top-right-radius:10px;width:100%;border-top-left-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: ConfigurationPanelComponent, selector: "fx-configuration-panel", inputs: ["visible"], outputs: ["isVisible", "configuration"] }] });
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SettingsPanelComponent, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
args: [{ selector: 'fx-settings-panel', standalone: true, imports: [CommonModule, ButtonModule, InputTextModule, ConfigurationPanelComponent], template: "<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>", styles: [".fx-element{position:relative}.fx-element .fx-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#0000001a;z-index:-1;pointer-events:none;opacity:0}.fx-element:hover .fx-overlay{z-index:1;opacity:1;pointer-events:auto}.fx-element:hover .fx-overlay .fx-actions{position:absolute;margin-top:-26px;height:25px;border-top-right-radius:10px;width:100%;border-top-left-radius:10px}\n"] }]
|
|
21
|
+
}], propDecorators: { configuration: [{
|
|
22
|
+
type: Output
|
|
23
|
+
}] } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvcGFuZWwvc2V0dGluZ3MtcGFuZWwvc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBeUIsTUFBTSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUUsV0FBVyxFQUFrRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0RBQXNELENBQUM7OztBQVNuRyxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsV0FBVztJQUN6QyxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzQyxPQUFPLEdBQVksS0FBSyxDQUFDO0lBRXpCLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO3dHQU5RLHNCQUFzQjs0RkFBdEIsc0JBQXNCLGlKQ2ZuQywrOUNBMkJNLHdjRGhCTSxZQUFZLGtJQUFFLFlBQVksOEJBQUUsZUFBZSwrQkFBRSwyQkFBMkI7OzRGQUl2RSxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixDQUFDOzhCQUt2RSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZ4Q29tcG9uZW50LCBGeERhdGEsIEZ4TW9kZSwgRnhTZXR0aW5nQ29tcG9uZW50LCBGeFNldHRpbmdzU2VydmljZSwgRnhVdGlscyB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uLXBhbmVsL2NvbmZpZ3VyYXRpb24tcGFuZWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtc2V0dGluZ3MtcGFuZWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIENvbmZpZ3VyYXRpb25QYW5lbENvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2V0dGluZ3MtcGFuZWwuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzUGFuZWxDb21wb25lbnQgZXh0ZW5kcyBGeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAT3V0cHV0KCkgY29uZmlndXJhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgcHVibGljIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgb3BlblNldHRpbmdEaWFsb2coKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZ4LWNvbmZpZ3VyYXRpb24tcGFuZWwgW3Zpc2libGVdPVwidmlzaWJsZVwiIChpc1Zpc2libGUpPVwidmlzaWJsZSA9ICRldmVudFwiIChjb25maWd1cmF0aW9uKT1cImNvbmZpZ3VyYXRpb24uZW1pdCgkZXZlbnQpXCI+PC9meC1jb25maWd1cmF0aW9uLXBhbmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImZ4LWVsZW1lbnRcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmeERhdGEuJGZ4Rm9ybT8uJG1vZGUgIT09IEZ4TW9kZS5WSUVXXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ4LW92ZXJsYXkgYm9yZGVyLWdyYXktNDAwIGJvcmRlciByb3VuZGVkIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRWxlbWVudFNlbGVjdChmeERhdGEpXCJcclxuICAgICAgICAgICAgKGRibGNsaWNrKT1cIm9wZW5TZXR0aW5nRGlhbG9nKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZngtYWN0aW9ucyBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLWdyYXktNzAwIHRleHQtZ3JheS0zMDAgcHgtMiByb3VuZGVkLXQgbWwtMiB0ZXh0LXhzIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXY+I3t7IGZ4RGF0YS5uYW1lIH19LTxzcGFuIGNsYXNzPVwidGV4dC14cyBpdGFsaWNcIj57eyBmeERhdGEuaWQgfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1hcm91bmQgaXRlbXMtZW5kIG1yLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJnLXNlY29uZGFyeSB0ZXh0LXdoaXRlIHctOCBtci0xIHRleHQtY2VudGVyIHJvdW5kZWQtdFwiIHRpdGxlPVwiU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZ4U2V0dGluZ1NlcnZpY2Uub3BlblNldHRpbmcoZnhEYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2cgdGV4dC14c1wiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRlbGV0ZUVsZW1lbnQoZnhEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJnLXJlZC02MDAgdGV4dC13aGl0ZSB3LTggbXItMSB0ZXh0LWNlbnRlciByb3VuZGVkLXRcIiB0aXRsZT1cIkRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcyAgdGV4dC14c1wiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgI2R5bmFtaWNDb21wb25lbnRDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of fx-builder-wrapper
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/fx-builder-wrapper.service';
|
|
5
|
+
export * from './lib/fx-builder-wrapper.component'; // builder // admin
|
|
6
|
+
export * from './lib/components/fx-form-component/fx-form-component.component'; // form preview
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxvQ0FBb0MsQ0FBQyxDQUFDLG1CQUFtQjtBQUN2RSxjQUFjLGdFQUFnRSxDQUFDLENBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBmeC1idWlsZGVyLXdyYXBwZXJcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Z4LWJ1aWxkZXItd3JhcHBlci5jb21wb25lbnQnOyAvLyBidWlsZGVyIC8vIGFkbWluXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZngtZm9ybS1jb21wb25lbnQvZngtZm9ybS1jb21wb25lbnQuY29tcG9uZW50JzsgLy8gZm9ybSBwcmV2aWV3XHJcbiJdfQ==
|