fx-form-builder-wrapper 2.0.109 → 2.0.111

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.
@@ -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/three-viewer/three-viewer.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/three-viewer/three-viewer.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/components/uploader-checkbox/uploader-checkbox.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/uploader-checkbox/uploader-checkbox.component.html","../../../projects/fx-builder-wrapper/src/lib/components/date-picker/date-picker.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/date-picker/date-picker.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-other/dropdown-with-other.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-other/dropdown-with-other.component.html","../../../projects/fx-builder-wrapper/src/lib/components/radio-group/radio-group.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/radio-group/radio-group.component.html","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown/multiselect-dropdown.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown/multiselect-dropdown.component.html","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-search/dropdown-with-search.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-search/dropdown-with-search.component.html","../../../projects/fx-builder-wrapper/src/lib/components/summary/summary.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/summary/summary.component.html","../../../projects/fx-builder-wrapper/src/lib/components/customize-dropdown/customize-dropdown.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/customize-dropdown/customize-dropdown.component.html","../../../projects/fx-builder-wrapper/src/lib/components/heading/heading.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/heading/heading.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 { inject, Injectable, Type } from '@angular/core';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/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 private fxApiRegistryService = inject(ApiServiceRegistry)\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 public setService(object:any){\r\n this.fxApiRegistryService.registerService(object)\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-dispatch-to-clinic',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './dispatch-to-clinic.component.html'\r\n})\r\nexport class DispatchToClinicComponent extends FxBaseComponent {\r\n private fb = inject(FormBuilder);\r\n\r\n public clinicAddress$: BehaviorSubject<any> = new BehaviorSubject<any>({});\r\n\r\n public dispatchForm: FormGroup = this.fb.group({\r\n courierName: ['', Validators.required],\r\n trackingNumber: ['', Validators.required],\r\n trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],\r\n notes: ['', Validators.required]\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n\r\n this.onInit.subscribe(() => {\r\n this._register(this.dispatchForm);\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public copyToClipboard(address: any): void {\r\n navigator.clipboard.writeText(address);\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <section\r\n class=\"justify-content-around lg:justify-content-between w-full white-color border-1 border-solid stroke_light_grey p-3 mb-3 mt-3\">\r\n <form [formGroup]=\"dispatchForm\">\r\n <div class=\"grid\">\r\n <!-- Courier Name -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"courierName\" class=\"input-title\">Courier Name</label>\r\n <input autocomplete=\"off\" formControlName=\"courierName\" type=\"text\" id=\"courierName\"\r\n name=\"courierName\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter courier name\" />\r\n\r\n <!-- validation -->\r\n <small *ngIf=\"dispatchForm.get('courierName')?.invalid && dispatchForm.get('courierName')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Courier Name is required.\r\n </small>\r\n <!-- validation -->\r\n </div>\r\n <!-- Courier Name -->\r\n\r\n <!-- Tracking Number -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingNumber\" class=\"input-title\">Tracking Number</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingNumber\" type=\"text\" id=\"trackingNumber\"\r\n name=\"trackingNumber\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking number\" />\r\n <small\r\n *ngIf=\"dispatchForm.get('trackingNumber')?.invalid && dispatchForm.get('trackingNumber')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Tracking Number is required.\r\n </small>\r\n </div>\r\n <!-- Tracking Number -->\r\n\r\n <!-- Tracking URL -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingUrl\" class=\"input-title\">Tracking URL</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingUrl\" type=\"text\" id=\"trackingUrl\"\r\n name=\"trackingUrl\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking url\" />\r\n <small *ngIf=\"dispatchForm.get('trackingUrl')?.invalid && dispatchForm.get('trackingUrl')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['required']\">Tracking URL is\r\n required.</span>\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['pattern']\">Invalid URL format.</span>\r\n </small>\r\n </div>\r\n <!-- Tracking URL -->\r\n\r\n <!-- Notes -->\r\n <div class=\"col-12 md:col-6 input-container\">\r\n <label for=\"notes\" class=\"input-title\">Notes</label>\r\n <textarea autocomplete=\"off\" formControlName=\"notes\" rows=\"5\" id=\"notes\" name=\"notes\"\r\n class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter notes\"></textarea>\r\n <small *ngIf=\"dispatchForm.get('notes')?.invalid && dispatchForm.get('notes')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Notes are required.\r\n </small>\r\n </div>\r\n <!-- Notes -->\r\n\r\n <!-- Address with Copy Icon -->\r\n <div class=\"col-12 md:col-6 pt-0\">\r\n <div class=\"mb-1\">Address</div>\r\n <ng-container *ngIf=\"(clinicAddress$ | async) as address\">\r\n <address #completeAddress>{{address?.street}}, {{address?.state}}, {{address?.postalCode}}\r\n <i class=\"pi pi-copy cursor-pointer text-xl text-secondary-color\"\r\n (click)=\"copyToClipboard(completeAddress.textContent)\"></i>\r\n </address>\r\n </ng-container>\r\n </div>\r\n <!-- Address with Copy Icon -->\r\n </div>\r\n </form>\r\n </section>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { FormArray, FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fx-configuration-panel',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ButtonModule, DialogModule, InputTextModule, FormsModule, DropdownModule, ButtonModule],\r\n templateUrl: './configuration-panel.component.html',\r\n styleUrl: './configuration-panel.component.css',\r\n})\r\nexport class ConfigurationPanelComponent implements OnInit , OnChanges{\r\n @Input() visible: boolean = false;\r\n @Input() configs: any;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<any>();\r\n @Input() tableConfigData:any;\r\n\r\n public rows: number = 1;\r\n public enableAPI: boolean = false;\r\n public api: string = '';\r\n\r\n public dynamicForm: FormGroup;\r\n public columnTypes: string[] = ['text', 'input-text', 'input-number', 'dropdown', 'smart-dropdown', 'checkbox', 'radio', 'radio-group', 'file-upload', 'textarea', 'action'];\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.dynamicForm = this.fb.group({\r\n columns: this.fb.array([])\r\n });\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n \r\n }\r\n ngOnInit(): void {\r\n if (this.tableConfigData?.value?.columns) {\r\n this.patchData(); // If data exists, patch it into the form\r\n } else {\r\n this.addColumn(); // Otherwise, add a default column\r\n }\r\n }\r\n\r\n get columns(): FormArray {\r\n return this.dynamicForm.get('columns') as FormArray;\r\n }\r\n\r\n // **🔹 Add Column Dynamically**\r\n public addColumn(): void {\r\n const columnFormGroup = this.fb.group({\r\n header: ['', Validators.required],\r\n cellType: ['', Validators.required],\r\n placeholder: '',\r\n options: this.fb.array([]),\r\n apiUrl: '',\r\n valueKey: '',\r\n labelKey: '',\r\n className: '',\r\n apiKey: '',\r\n isMultiselect: false,\r\n checkedValue: '',\r\n unCheckedValue: '',\r\n checkBoxLabel: '',\r\n isRequired:false,\r\n errorMessage:'',\r\n // actionName: '',\r\n // actionIconPath: '',\r\n // apiType:'',\r\n // apiUrlToCall: '',\r\n action: this.fb.array([]),\r\n payloadOptions: this.fb.array([])\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 isMultiselect: false,\r\n checkedValue: [currentColumn.checkedValue],\r\n unCheckedValue: [currentColumn.unCheckedValue],\r\n checkBoxLabel:[currentColumn.checkBoxLabel],\r\n isRequired:[currentColumn.isRequired],\r\n errorMessage:[currentColumn.errorMessage],\r\n // actionName: [currentColumn.actionName],\r\n // actionIconPath: [currentColumn.actionIconPath],\r\n // apiType:[currentColumn.apiType],\r\n // apiUrlToCall: [currentColumn.apiUrlToCall],\r\n // payloadOptions:this.fb.array(\r\n // currentColumn.payloadOptions.map((option: any) => this.fb.group({\r\n // payloadOptionName: [option.payloadOptionName, Validators.required],\r\n // payloadOptionValue: [option.payloadOptionValue, Validators.required]\r\n // }))\r\n // ),\r\n action: this.fb.array([]),\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 // public addPayloadOption(columnIndex: number): void {\r\n // const optionGroup = this.fb.group({\r\n // payloadOptionName: ['', Validators.required],\r\n // payloadOptionValue: ['', Validators.required]\r\n // });\r\n\r\n // this.getPayloadOptions(columnIndex).push(optionGroup);\r\n // }\r\n\r\n\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 // public getPayloadOptions(columnIndex: number): FormArray {\r\n // return this.columns.at(columnIndex).get('payloadOptions') as FormArray;\r\n // }\r\n\r\n // **🔹 Close Dialog**\r\n public closeDialog(): void {\r\n this.isVisible.emit(false);\r\n }\r\n\r\n // **🔹 Save Configuration**\r\n public saveConfiguration(): void {\r\n this.configuration.emit({\r\n rows: this.rows,\r\n columns: this.dynamicForm.value?.columns,\r\n enableAPI: this.enableAPI,\r\n api: this.api\r\n });\r\n this.isVisible.emit(false);\r\n }\r\n\r\n public onSubmit(): void {\r\n console.log(\"Value columns formArray\", this.dynamicForm.value);\r\n }\r\n\r\n // public patchData(): void {\r\n // this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;\r\n // this.api = this.tableConfigData?.value?.generalValues?.api;\r\n // this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n // // Creating the FormGroup for each column\r\n // const columnFormGroup = this.fb.group({\r\n // header: [column.header || '', Validators.required],\r\n // cellType: [column.cellType || '', Validators.required],\r\n // placeholder: [column.placeholder || ''],\r\n // options: this.fb.array(\r\n // column.options ? column.options.map((option: any) => \r\n // this.fb.group({\r\n // optionName: [option.optionName, Validators.required],\r\n // optionValue: [option.optionValue, Validators.required]\r\n // })\r\n // ) : []\r\n // ),\r\n // apiUrl: [column.apiUrl || ''],\r\n // valueKey: [column.valueKey || ''],\r\n // labelKey: [column.labelKey || ''],\r\n // className: [column.className || ''],\r\n // apiKey: [column.apiKey || ''],\r\n // isMultiselect: [column.isMultiselect || false],\r\n // checkBoxLabel: [column.checkBoxLabel || ''],\r\n // checkedValue: [column.checkedValue || ''],\r\n // unCheckedValue: [column.unCheckedValue || ''],\r\n // isRequired:[column.isRequired || false],\r\n // errorMessage:[column.errorMessage || ''],\r\n // });\r\n \r\n \r\n // this.columns.push(columnFormGroup);\r\n // });\r\n // }\r\n\r\n public patchData(): void {\r\n this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;\r\n this.api = this.tableConfigData?.value?.generalValues?.api;\r\n \r\n this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n const actionArray = this.fb.array(\r\n column.action\r\n ? column.action.map((action: any) =>\r\n this.fb.group({\r\n actionName: [action.actionName || ''],\r\n actionIconPath: [action.actionIconPath || ''],\r\n apiType: [action.apiType || ''],\r\n apiUrlToCall: [action.apiUrlToCall || ''],\r\n isConfirmationRequired: [action.isConfirmationRequired || ''],\r\n payloadOptions: this.fb.array(\r\n action.payloadOptions\r\n ? action.payloadOptions.map((payload: any) =>\r\n this.fb.group({\r\n payloadOptionName: [payload.payloadOptionName || '', Validators.required],\r\n payloadOptionValue: [payload.payloadOptionValue || '', Validators.required]\r\n })\r\n )\r\n : []\r\n )\r\n })\r\n )\r\n : []\r\n );\r\n \r\n const columnFormGroup = this.fb.group({\r\n header: [column.header || '', Validators.required],\r\n cellType: [column.cellType || '', Validators.required],\r\n placeholder: [column.placeholder || ''],\r\n options: this.fb.array(\r\n column.options\r\n ? column.options.map((option: any) =>\r\n this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n })\r\n )\r\n : []\r\n ),\r\n apiUrl: [column.apiUrl || ''],\r\n valueKey: [column.valueKey || ''],\r\n labelKey: [column.labelKey || ''],\r\n className: [column.className || ''],\r\n apiKey: [column.apiKey || ''],\r\n isMultiselect: [column.isMultiselect || false],\r\n checkBoxLabel: [column.checkBoxLabel || ''],\r\n checkedValue: [column.checkedValue || ''],\r\n unCheckedValue: [column.unCheckedValue || ''],\r\n isRequired: [column.isRequired || false],\r\n errorMessage: [column.errorMessage || ''],\r\n action: actionArray // ✅ add the FormArray of actions here\r\n });\r\n \r\n this.columns.push(columnFormGroup);\r\n });\r\n }\r\n \r\n\r\n\r\n getActions(columnIndex: number): FormArray {\r\n return this.columns.at(columnIndex).get('action') as FormArray;\r\n }\r\n \r\n addActionToColumn(columnIndex: number): void {\r\n const actions = this.getActions(columnIndex);\r\n actions.push(this.fb.group({\r\n actionName: [''],\r\n actionIconPath: [''],\r\n apiType: [''],\r\n apiUrlToCall: [''],\r\n isConfirmationRequired: [''],\r\n payloadOptions: this.fb.array([])\r\n }));\r\n }\r\n \r\n removeActionFromColumn(columnIndex: number, actionIndex: number): void {\r\n const actions = this.getActions(columnIndex);\r\n actions.removeAt(actionIndex);\r\n }\r\n \r\n getPayloadOptions(columnIndex: number, actionIndex: number): FormArray {\r\n return this.getActions(columnIndex)\r\n .at(actionIndex)\r\n .get('payloadOptions') as FormArray;\r\n }\r\n \r\n addPayloadOption(columnIndex: number, actionIndex: number): void {\r\n const payloadOptions = this.getPayloadOptions(columnIndex, actionIndex);\r\n payloadOptions.push(this.fb.group({\r\n payloadOptionName: [''],\r\n payloadOptionValue: ['']\r\n }));\r\n }\r\n \r\n}\r\n","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\"\r\n [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <!-- <ng-template pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configurations</p>\r\n </div>\r\n </ng-template> -->\r\n <div class=\"flex flex-col gap-4 bg-white p-2 border-2 border-gray-200\">\r\n <div class=\"flex items-center gap-4 mb-8 w-full\">\r\n <div class=\"w-1/3\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [disabled]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\"\r\n 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\"\r\n 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)\" class=\"text-white px-3 py-1 rounded-md hover:bg-red-600\"\r\n *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 <div class=\"col-span-3\" *ngIf=\"['smart-dropdown', 'dropdown'].includes(column.value.cellType)\">\r\n <label class=\"font-semibold\"> <input type=\"checkbox\" formControlName=\"isMultiselect\"\r\n class=\"custom-margin\" />Multiselect</label>\r\n <!-- <select formControlName=\"isMultiselect\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"true\">Enable</option>\r\n <option value=\"false\">Disable</option>\r\n </select> -->\r\n </div>\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">PlaceHolder:</label>\r\n <input formControlName=\"placeholder\" placeholder=\"Enter Placeholder\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <ng-container *ngIf=\"['checkbox'].includes(column.value.cellType)\">\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">CheckedValue:</label>\r\n <input formControlName=\"checkedValue\" placeholder=\"Enter checkedvalue\"\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\">UnCheckedValue:</label>\r\n <input formControlName=\"unCheckedValue\" placeholder=\"Enter UnCheckedValue\"\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\">Checkbox Label:</label>\r\n <input formControlName=\"checkBoxLabel\" placeholder=\"Enter Checkbox Label\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"['input-text','input-number'].includes(column.value.cellType)\">\r\n <div class=\"col-span-3\">\r\n <label for=\"isRequired\" class=\"font-semibold w-24\">\r\n <input type=\"checkbox\" formControlName=\"isRequired\" class=\"custom-margin\" />Required</label>\r\n </div>\r\n\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Error Message:</label>\r\n <input formControlName=\"errorMessage\" placeholder=\"Enter Checkbox Label\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </ng-container>\r\n\r\n\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 <button type=\"button\" (click)=\"addOption(i)\" class=\"custom-save-button justify-end\"> ✚ </button>\r\n\r\n <div formArrayName=\"options\" class=\"card-height\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\"\r\n class=\"relative grid grid-cols-1 gap-4 items-center mt-2 option-card\">\r\n\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\" class=\"absolute top-0 right-0 bg-transparent text-red-500 hover:text-red-700 \r\n text-xl font-bold p-1 cursor-pointer\">\r\n ❌\r\n </button>\r\n\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 </div>\r\n\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 *ngIf=\"['action'].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\">Action Name:</label>\r\n <input formControlName=\"actionName\" placeholder=\"Enter Action 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-4\">\r\n <label class=\"font-semibold\">Action Icon Path:</label>\r\n <input formControlName=\"actionIconPath\" placeholder=\"Enter Icon Path\" \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\">API Type:</label>\r\n <select formControlName=\"apiType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n </select>\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">API URL:</label>\r\n <input formControlName=\"apiUrlToCall\" 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\">API Payload:</label>\r\n <button type=\"button\" (click)=\"addPayloadOption(i)\" class=\"custom-save-button justify-end\"> ✚ </button>\r\n\r\n <div formArrayName=\"payloadOptions\" class=\"card-height\">\r\n <div *ngFor=\"let option of getPayloadOptions(i).controls; let j = index\" [formGroupName]=\"j\" \r\n class=\"relative grid grid-cols-1 gap-4 items-center mt-2 option-card\">\r\n \r\n <button type=\"button\" (click)=\"getPayloadOptions(i).removeAt(j)\" \r\n class=\"absolute top-0 right-0 bg-transparent text-red-500 hover:text-red-700 \r\n text-xl font-bold p-1 cursor-pointer\">\r\n ❌\r\n </button>\r\n \r\n <input formControlName=\"payloadOptionName\" 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=\"payloadOptionName\" 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 </div>\r\n </div>\r\n </div>\r\n \r\n </div> -->\r\n\r\n\r\n <!-- Only show if cellType is 'action' -->\r\n <div *ngIf=\"column.value.cellType === 'action'\" class=\"grid grid-cols-1 gap-4 mt-4\">\r\n\r\n <!-- Add Action Button -->\r\n <div class=\"flex justify-end mb-2\">\r\n <button type=\"button\" (click)=\"addActionToColumn(i)\"\r\n class=\"bg-orange-400 text-white px-3 py-1 rounded-md hover:bg-blue-600\">\r\n ➕ Add Action\r\n </button>\r\n </div>\r\n\r\n <!-- Loop through actions -->\r\n <div formArrayName=\"action\">\r\n <div *ngFor=\"let actionCtrl of getActions(i).controls; let j = index\" [formGroupName]=\"j\"\r\n class=\"border p-4 rounded-md mb-4 bg-gray-50 relative\">\r\n\r\n <!-- Remove action button -->\r\n <button type=\"button\" (click)=\"removeActionFromColumn(i, j)\"\r\n class=\"absolute top-0 right-0 text-red-600 text-xl font-bold hover:text-red-800\">❌</button>\r\n\r\n <div class=\"mb-2\">\r\n <label class=\"font-semibold\">Action Name:</label>\r\n <input formControlName=\"actionName\" placeholder=\"Enter Action Name\"\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 <div class=\"mb-2\">\r\n <label class=\"font-semibold\">Action Icon Path:</label>\r\n <input formControlName=\"actionIconPath\" placeholder=\"Enter Icon Path\"\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 <div class=\"mb-2\">\r\n <label class=\"font-semibold\">API Type:</label>\r\n <select formControlName=\"apiType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"mb-2\">\r\n <label class=\"font-semibold\">API URL:</label>\r\n <input formControlName=\"apiUrlToCall\" 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\r\n <!-- Payload Options -->\r\n <div class=\"mb-2\">\r\n <div class=\"flex justify-between items-center\">\r\n <label class=\"font-semibold\">API Payload:</label>\r\n <button type=\"button\" (click)=\"addPayloadOption(i, j)\"\r\n class=\"ml-2 text-green-600 font-bold text-xl\">✚</button>\r\n </div>\r\n <div formArrayName=\"payloadOptions\" class=\"mt-2\" class=\"payload_action\">\r\n <div *ngFor=\"let payload of getPayloadOptions(i, j).controls; let k = index\" [formGroupName]=\"k\"\r\n class=\"relative grid grid-cols-1 gap-2 items-center mb-2 border-1 border p-2 border-gray-500\">\r\n\r\n <button type=\"button\" (click)=\"getPayloadOptions(i, j).removeAt(k)\"\r\n class=\"text-red-500 hover:text-red-700 text-xl font-bold flex justify-end items-center\">❌</button>\r\n\r\n <input formControlName=\"payloadOptionName\" placeholder=\"Option Name\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <input formControlName=\"payloadOptionValue\" placeholder=\"Option Value\"\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 </div>\r\n\r\n <div class=\"mb-2\">\r\n <label for=\"isConfirmationRequired\" class=\"font-semibold w-24\">\r\n <input type=\"checkbox\" formControlName=\"isConfirmationRequired\" class=\"custom-margin\" /> Confirmation Required</label>\r\n </div>\r\n\r\n </div>\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()\" 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 </div>\r\n </ng-template>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FxComponent, FxData, FxMode, FxSettingComponent, FxSettingsService, FxUtils } from '@instantsys-labs/fx';\r\nimport { Dialog } from 'primeng/dialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ConfigurationPanelComponent } from '../configuration-panel/configuration-panel.component';\r\n\r\n@Component({\r\n selector: 'fx-settings-panel',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, InputTextModule, ConfigurationPanelComponent],\r\n templateUrl: './settings-panel.component.html',\r\n styleUrl: './settings-panel.component.css'\r\n})\r\nexport class SettingsPanelComponent extends FxComponent implements OnInit ,OnChanges {\r\n \r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\r\n @Input() tableData:any;\r\n tableConfig:any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.tableConfig = this.tableData;\r\n }\r\n\r\n public openSettingDialog(): void {\r\n this.visible = true;\r\n }\r\n}\r\n","<fx-configuration-panel [visible]=\"visible\" (isVisible)=\"visible = $event\" [tableConfigData]=\"tableConfig\" (configuration)=\"configuration.emit($event)\"></fx-configuration-panel>\r\n\r\n<div class=\"fx-element\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"fxData.$fxForm?.$mode !== FxMode.VIEW\">\r\n <div class=\"fx-overlay border-gray-400 border rounded cursor-pointer\" (click)=\"onElementSelect(fxData)\"\r\n (dblclick)=\"openSettingDialog()\">\r\n <div class=\"fx-actions flex justify-between\">\r\n\r\n <div class=\"bg-gray-700 text-gray-300 px-2 rounded-t ml-2 text-xs flex justify-center items-center\">\r\n <div>#{{ fxData.name }}-<span class=\"text-xs italic\">{{ fxData.id }}</span></div>\r\n </div>\r\n\r\n <div class=\"flex justify-around items-end mr-2\">\r\n <div class=\"cursor-pointer bg-secondary text-white w-8 mr-1 text-center rounded-t\" title=\"Settings\"\r\n (click)=\"fxSettingService.openSetting(fxData)\">\r\n <i class=\"fa fa-cog text-xs\"></i>\r\n </div>\r\n <div (click)=\"deleteElement(fxData)\"\r\n class=\"cursor-pointer bg-red-600 text-white w-8 mr-1 text-center rounded-t\" title=\"Delete\">\r\n <i class=\"fa fa-times text-xs\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container #dynamicComponentContainer></ng-container>\r\n </ng-container>\r\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Action, 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 {forkJoin, map, Observable, Subject, takeUntil } from 'rxjs';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\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' | 'action';\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 isMultiselect?: boolean;\r\n checkedValue?: any;\r\n unCheckedValue?: any;\r\n checkBoxLabel?: string;\r\n isRequired?:boolean,\r\n errorMessage?:string,\r\n // actionName?: string,\r\n // actionIconPath?: string,\r\n // apiType?:string,\r\n // apiUrlToCall?: string,\r\n // payloadOptions?: string[]\r\n action: string[]\r\n}\r\nexport interface TableConfig {\r\n columns: TableColumnConfig[];\r\n rows: any[];\r\n // apiDataToDrawTable: any[]\r\n}\r\n@Component({\r\n selector: 'fx-dynamic-table',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule,MultiSelectModule,InputNumberModule,InputTextModule,DropdownModule,ToastModule,ConfirmDialogModule,DialogModule],\r\n providers: [MessageService,ConfirmationService],\r\n templateUrl: './dynamic-table.component.html',\r\n styleUrl: './dynamic-table.component.scss',\r\n})\r\n\r\nexport class DynamicTableComponent extends FxBaseComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() tableRows: Array<any> = [];\r\n @Input() previewType: FxMode = FxMode.VIEW;\r\n @Input() tableConfig: any = {\r\n columns: [\r\n { header: 'Column 1', cellType: 'text' },\r\n { header: 'Column 2', cellType: 'text' },\r\n { header: 'Column 3', cellType: 'text' },\r\n { header: 'Column 4', cellType: 'text' },\r\n { header: 'Column 5', cellType: 'text' },\r\n ],\r\n};\r\n\r\n private destroy$ = new Subject<Boolean>();\r\n // public uploadedImages: Array<Record<string, string | File | null> | null> = [];\r\n public uploadedImages: Array<Array<{ result: string, file: File | null}>> = [];\r\n\r\npublic generalValues: any;\r\nselectedAction: any;\r\nselectedRow: any;\r\nselectedRowIndex: any;\r\ndisplayConfirmationDialog: boolean = false;\r\napiDataToDrawTable: any[] =[];\r\n\r\n public tableFormControl = new FormControl();\r\n public smartDropdownOptions: { [key: string]: Array<{ name: string, value: string }> } = {};\r\n private http = inject(HttpClient);\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService, private messageService: MessageService, private confirmationService: ConfirmationService) {\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,dynamicTableValues?.columns);\r\n }\r\n })\r\n this.tableConfig = this.initializeCheckboxDefaults(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 public uploadImage(event: Event, rowIndex: number): void {\r\n const files = (event.target as HTMLInputElement).files;\r\n if (files && files.length > 0) {\r\n this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n \r\n Array.from(files).forEach((file: File) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uploadedImages[rowIndex].push({\r\n result: reader.result as string,\r\n file: file\r\n });\r\n \r\n // Optionally add to tableConfig if only one file is tracked there\r\n const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n console.log(\"tableConfig\", this.tableConfig);\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n }\r\n \r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'column-size', $title: 'No. of columns', value: 1 }),\r\n new FxStringSetting({ key: 'table-config', $title: 'Table Configuration', value: {} }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public getArray(count: number): number[] {\r\n return Array.from({ length: count });\r\n }\r\n\r\n public onChangeConfiguration(event: any): void { \r\n this.generalValues = {\r\n enableAPI: event?.enableAPI,\r\n api: event?.api\r\n }\r\n const columns = event.columns.map((col: any) => {\r\n return {\r\n header: col?.header,\r\n cellType: col?.cellType,\r\n placeholder: col?.placeholder,\r\n options: col?.options,\r\n apiUrl: col?.apiUrl,\r\n valueKey: col?.valueKey,\r\n labelKey: col?.labelKey,\r\n className: col?.className,\r\n apiKey: col?.apiKey,\r\n isMultiselect: col?.isMultiselect,\r\n checkedValue: col?.checkedValue,\r\n unCheckedValue: col?.unCheckedValue,\r\n checkBoxLabel:col?.checkBoxLabel,\r\n isRequired:col?.isRequired,\r\n errorMessage:col?.errorMessage,\r\n // actionName: col?.actionName,\r\n // actionIconPath: col?.actionIconPath,\r\n // apiType:col?.apiType,\r\n // apiUrlToCall: col?.apiUrlToCall,\r\n // payloadOptions: col?.payloadOptions\r\n action: col?.action \r\n }\r\n });\r\n if(!event?.enableAPI) {\r\n this.tableConfig.columns = columns;\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => ({ name: `SKU-${index + 1}`, age: index % 2 !== 0, gender: 'male' }))\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => {\r\n // const rows = columns.map((c: any) => {\r\n // return {\r\n // c?.header: null\r\n // }\r\n // })\r\n // return rows\r\n // })\r\n this.tableConfig.rows = Array.from({ length: +event?.rows }, (_, index) => {\r\n return columns.reduce((acc: any, c: any) => {\r\n acc[c?.header] = ''; // Initialize each column key with null\r\n return acc;\r\n }, {});\r\n });\r\n \r\n this.fetchSmartDropdownData();\r\n }\r\n if(event?.enableAPI) {\r\n this.drawTable(event, columns)\r\n this.tableConfig = {\r\n columns: columns,\r\n rows: []\r\n };\r\n }\r\n this.tableConfig = this.initializeCheckboxDefaults(this.tableConfig);\r\n this.tableConfig.apiDataToDrawTable = this.apiDataToDrawTable;\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n private updateSettings(): void{\r\n if(this.fxData.settings){\r\n for(let setting of this.fxData.settings){\r\n if(setting.key === 'table-config'){\r\n setting.value = this.tableConfig;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // public drawTable(event: any, columns: any): void {\r\n // let rows;\r\n // this.http.get(event.api).subscribe((res: any) => {\r\n // if(res) {\r\n // rows = res.map((item: any) => {\r\n // const newObj: Record<string, any> = {};\r\n // columns.forEach((col: any) => {\r\n // newObj[col.header] = item[col.apiKey];\r\n // });\r\n // return newObj;\r\n // });\r\n // this.tableConfig = {\r\n // columns,\r\n // rows\r\n // }\r\n // this.tableConfig.generalValues = this.generalValues;\r\n // this.fxData.value = this.tableConfig;\r\n // this.tableFormControl.reset();\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n // }\r\n // })\r\n // }\r\n\r\n public 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 this.apiDataToDrawTable = res;\r\n \r\n rows = res.map((item: any) => {\r\n const newObj: Record<string, any> = {};\r\n columns.forEach((col: any) => {\r\n newObj[col.header] = item[col.apiKey] || '';\r\n });\r\n return newObj;\r\n });\r\n this.tableConfig = {\r\n columns,\r\n rows\r\n }\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.tableConfig.apiDataToDrawTable = this.apiDataToDrawTable;\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 deleteFile(rowIndex: number, imageIndex: number): void {\r\n // if (this.uploadedImages[rowIndex]) {\r\n // this.uploadedImages[rowIndex].splice(imageIndex, 1);\r\n \r\n // const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n // }\r\n // }\r\n\r\n public deleteFile(rowIndex: number, imageIndex: number): void {\r\n if (this.uploadedImages[rowIndex]) {\r\n const removedFile = this.uploadedImages[rowIndex][imageIndex];\r\n \r\n // Track the file to delete if it's an uploaded file (i.e., has URL and no File object)\r\n if (removedFile?.result && typeof removedFile.result === 'string' && removedFile.file === null) {\r\n this.tableConfig.rows[rowIndex].filesToDelete = this.tableConfig.rows[rowIndex].filesToDelete || [];\r\n this.tableConfig.rows[rowIndex].filesToDelete.push(removedFile.result);\r\n }\r\n \r\n // Remove the file from the UI\r\n this.uploadedImages[rowIndex].splice(imageIndex, 1);\r\n \r\n const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n }\r\n \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 parseUrls(url: string, rowIndex: 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 \r\n // this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n // this.uploadedImages[rowIndex].push({\r\n // result: imageURL,\r\n // file: null\r\n // });\r\n \r\n // const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n // this.tableFormControl.setValue(this.tableConfig);\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 parseUrls(urls: string[], rowIndex: number, columns: any): void {\r\n if (!Array.isArray(urls) || !urls.length) return;\r\n \r\n this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n \r\n const columnHeader = columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n if (!columnHeader) return;\r\n \r\n const imageFetches: Observable<string>[] = [];\r\n \r\n urls.forEach((url: string) => {\r\n if (url) {\r\n const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n map((imageBlob: Blob) => URL.createObjectURL(imageBlob))\r\n );\r\n imageFetches.push(image$);\r\n }\r\n });\r\n \r\n if (!imageFetches.length) return;\r\n \r\n forkJoin(imageFetches).subscribe({\r\n next: (imageURLs: string[]) => {\r\n imageURLs.forEach((imageURL: string) => {\r\n this.uploadedImages[rowIndex].push({\r\n result: imageURL,\r\n file: null\r\n });\r\n });\r\n \r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.result);\r\n \r\n // this.tableFormControl.setValue(this.tableConfig);\r\n },\r\n error: (error) => {\r\n console.error('Error fetching one or more images:', error);\r\n }\r\n });\r\n }\r\n \r\n onCheckboxChange(event: Event, row: any, column: any): void {\r\n const input = event.target as HTMLInputElement;\r\n row[column.header] = input.checked ? column.checkedValue : column.unCheckedValue;\r\n }\r\n \r\n\r\n initializeCheckboxDefaults(tableData: any): void {\r\n tableData.rows.forEach((row: any) => {\r\n tableData.columns.forEach((column: any) => {\r\n if (column.cellType === 'checkbox' && column.unCheckedValue && !row[column.header]) {\r\n row[column.header] = column.unCheckedValue;\r\n }\r\n });\r\n });\r\n return tableData;\r\n }\r\n\r\n handleAction(row: any, action: any,rowIndex:any): void {\r\n if (action.isConfirmationRequired) {\r\n this.selectedAction = action;\r\n this.selectedRow = row;\r\n this.selectedRowIndex = rowIndex\r\n this.displayConfirmationDialog = true;\r\n } else {\r\n this.executeAction(row, action,rowIndex);\r\n }\r\n }\r\n \r\n confirmAction(): void {\r\n this.executeAction(this.selectedRow, this.selectedAction,this.selectedRowIndex);\r\n this.displayConfirmationDialog = false;\r\n }\r\n \r\n cancelAction(): void {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: 'Cancelled',\r\n detail: 'Action was cancelled',\r\n life: 2000\r\n });\r\n this.displayConfirmationDialog = false;\r\n }\r\n \r\n // handleAction(row: any, action: any): void {\r\n // if (!action || !action.apiType || !action.payloadOptions) {\r\n // console.warn('Invalid action config:', action);\r\n // return;\r\n // }\r\n \r\n // const payload: { [key: string]: any } = {};\r\n \r\n // action.payloadOptions.forEach((option: any) => {\r\n // const key = option.payloadOptionName;\r\n // const value = option.payloadOptionValue ?? row[option.payloadOptionName];\r\n // if (key) {\r\n // payload[key] = value;\r\n // }\r\n // });\r\n \r\n // const handleSuccess = (res: any) => {\r\n // const actionKey = action.actionName || 'defaultAction';\r\n\r\n // if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n // row.response = {};\r\n // }\r\n \r\n // row.response[actionKey] = res;\r\n \r\n // this.messageService.add({\r\n // severity: 'success',\r\n // summary: 'Success',\r\n // detail: `Action \"${actionKey}\" completed successfully`,\r\n // life: 3000\r\n // });\r\n // };\r\n \r\n\r\n // const handleError = (err: any) => {\r\n // row.response = { error: err };\r\n // this.messageService.add({\r\n // severity: 'error',\r\n // summary: 'Error',\r\n // detail: 'Something went wrong',\r\n // life: 3000\r\n // });\r\n // };\r\n \r\n // switch (action.apiType) {\r\n // case 'POST':\r\n // this.http.post(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'PUT':\r\n // this.http.put(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'DELETE':\r\n // this.http.delete(action.apiUrlToCall, { body: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'GET':\r\n // this.http.get(action.apiUrlToCall, { params: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // default:\r\n // console.warn('Unknown API type:', action.apiType);\r\n // }\r\n // }\r\n \r\n // handleAction(row: any, action: any): void {\r\n // if (action.isConfirmationRequired) {\r\n // this.confirmationService.confirm({\r\n // message: `Are you sure you want to perform \"${action.actionName}\"?`,\r\n // header: 'Confirmation',\r\n // icon: 'pi pi-exclamation-triangle',\r\n // accept: () => this.executeAction(row, action),\r\n // reject: () => {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'Cancelled',\r\n // detail: 'Action was cancelled',\r\n // life: 2000\r\n // });\r\n // }\r\n // });\r\n // } else {\r\n // this.executeAction(row, action);\r\n // }\r\n // }\r\n \r\n\r\n executeAction(row: any, action: any,rowIndex:any): void {\r\n const payload: { [key: string]: any } = {};\r\n \r\n action.payloadOptions.forEach((option: any) => {\r\n const key = option.payloadOptionName;\r\n const value = option.payloadOptionValue || this.tableConfig?.apiDataToDrawTable[rowIndex][key];\r\n if (key) {\r\n payload[key] = value;\r\n }\r\n });\r\n \r\n const actionKey = action.actionName || 'defaultAction';\r\n \r\n const handleSuccess = (res: any) => {\r\n if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n row.response = {};\r\n }\r\n \r\n row.response[actionKey] = res;\r\n \r\n this.messageService.add({\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: `Action \"${actionKey}\" completed successfully`,\r\n life: 3000\r\n });\r\n };\r\n \r\n const handleError = (err: any) => {\r\n if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n row.response = {};\r\n }\r\n \r\n row.response[actionKey] = { error: err };\r\n \r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: `Action \"${actionKey}\" failed`,\r\n life: 3000\r\n });\r\n };\r\n \r\n switch (action.apiType) {\r\n case 'POST':\r\n this.http.post(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'PUT':\r\n this.http.put(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'DELETE':\r\n this.http.delete(action.apiUrlToCall, { body: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'GET':\r\n this.http.get(action.apiUrlToCall, { params: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n default:\r\n console.warn('Unknown API type:', action.apiType);\r\n }\r\n }\r\n \r\n \r\n \r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<fx-settings-panel [fxData]=\"fxData\" [tableData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n\r\n <!-- <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\" [placeholder]=\"column?.placeholder\"\r\n [(ngModel)]=\"row[column.header]\" /> -->\r\n\r\n <ng-container *ngSwitchCase=\"'input-text'\">\r\n <input [class]=\"column?.className\" type=\"text\" [placeholder]=\"column?.placeholder\"\r\n [(ngModel)]=\"row[column.header]\" [required]=\"column?.isRequired\" #model=\"ngModel\" />\r\n\r\n <div *ngIf=\"column?.isRequired && model.invalid && model.touched\" class=\"text-red-500 text-sm mt-1\">\r\n {{ column?.errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [placeholder]=\"column?.placeholder\" [(ngModel)]=\"row[column.header]\" />\r\n\r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\" [(ngModel)]=\"row[column.header]\">\r\n\r\n <option *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</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 *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</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 <!-- <p-multiSelect [options]=\"smartDropdownOptions[column.header]\" [(ngModel)]=\"row[column.header]\" optionLabel=\"name\" optionValue=\"value\" placeholder=\"Select Cities\" *ngSwitchCase=\"'smart-dropdown'\"/> -->\r\n\r\n <!-- smart-dropdown handling -->\r\n <ng-container *ngSwitchCase=\"'smart-dropdown'\">\r\n\r\n <!-- Regular dropdown if isMultiselect is false or not set -->\r\n <select *ngIf=\"!column?.isMultiselect\" [class]=\"column?.className\" style=\"width: 60%;\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</option>\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{ option?.name }}\r\n </option>\r\n <option value=\"__other__\">Other</option>\r\n\r\n </select>\r\n <input *ngIf=\"row[column.header] === '__other__'\" type=\"text\" class=\"mt-2 p-inputtext-sm\"\r\n [placeholder]=\"'Enter other ' + column.header\" [(ngModel)]=\"row[column.header + '_other']\" />\r\n\r\n <!-- PrimeNG multiselect if isMultiselect is true -->\r\n <p-multiSelect *ngIf=\"column?.isMultiselect\" [options]=\"smartDropdownOptions[column.header]\"\r\n [(ngModel)]=\"row[column.header]\" [class]=\"column?.className\" optionLabel=\"name\" optionValue=\"value\"\r\n [placeholder]=\"column.placeholder || ('Select ' + column.header)\">\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" /> -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <label [class]=\"column?.className\" class=\"inline-flex items-center gap-2\">\r\n <input type=\"checkbox\" [checked]=\"row[column.header] === column.checkedValue\"\r\n (change)=\"onCheckboxChange($event, row, column)\" />\r\n {{ column?.checkBoxLabel || '' }}\r\n </label>\r\n </ng-container>\r\n <p-toast></p-toast>\r\n <p-confirmDialog></p-confirmDialog>\r\n <ng-container *ngSwitchCase=\"'action'\">\r\n <div class=\"flex flex-row gap-6 justify-start items-start\">\r\n <div *ngFor=\"let action of column?.action\" class=\"flex flex-col items-center w-20 cursor-pointer\"\r\n (click)=\"handleAction(row, action,rowIndex)\">\r\n <img [src]=\"action?.actionIconPath\" alt=\"icon\" class=\"w-6 h-6 mb-1\" />\r\n <span class=\"text-xs text-center break-words\">\r\n {{ action?.actionName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\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 \r\n\r\n <div class=\"flex flex-col items-end justify-end relative\">\r\n <div class=\"flex gap-2 flex-wrap\">\r\n <div \r\n class=\"relative\" \r\n *ngFor=\"let image of uploadedImages?.[rowIndex]; let i = index\"\r\n >\r\n <img \r\n width=\"100\" \r\n [src]=\"image?.result\"\r\n alt=\"Uploaded Image\"\r\n class=\"rounded shadow\"\r\n />\r\n <button \r\n (click)=\"deleteFile(rowIndex, i)\" \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 </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 \r\n (click)=\"uploadFile.click()\" \r\n class=\"mt-2 bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600\"\r\n >\r\n Upload\r\n </button>\r\n </div>\r\n \r\n \r\n </ng-container> -->\r\n\r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div class=\"flex items-center justify-end relative gap-4 flex-wrap\">\r\n <div class=\"flex gap-2 flex-wrap\">\r\n <div class=\"relative\" *ngFor=\"let image of uploadedImages?.[rowIndex]; let i = index\">\r\n <img width=\"100\" height=\"80\" [src]=\"image?.result\" alt=\"Uploaded Image\"\r\n class=\"rounded shadow orientation\" />\r\n <a (click)=\"deleteFile(rowIndex, i)\"\r\n class=\"absolute top-0 right-0 text-white rounded-md w-5 h-5 flex items-center justify-center cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\"\r\n width=\"24\" height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <div class=\"flex flex-col justify-center items-center cursor-pointer\" (click)=\"uploadFile.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"uploadFile.click()\" class=\"text-base cursor-pointer\">\r\n {{ 'Upload' }}\r\n </a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"\r\n [placeholder]=\"column?.placeholder\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- Your main template -->\r\n<p-dialog header=\"Confirmation\"\r\n[(visible)]=\"displayConfirmationDialog\"\r\nmodal=\"true\"\r\n[closable]=\"false\"\r\n[responsive]=\"true\"\r\nstyleClass=\"confirmation-dialog\"\r\n[style]=\"{width: '400px'}\">\r\n\r\n<div class=\"p-d-flex p-ai-center\">\r\n<i class=\"pi pi-exclamation-triangle p-mr-2\" style=\"font-size: 2rem; color: #f39c12\"></i>\r\n<span>Are you sure you want to perform \"<strong>{{ selectedAction?.actionName }}</strong>\"?</span>\r\n</div>\r\n\r\n<ng-template pTemplate=\"footer\">\r\n<button pButton label=\"Yes\" icon=\"pi pi-check\" (click)=\"confirmAction()\" class=\"p-button-text\" autofocus></button>\r\n<button pButton label=\"No\" icon=\"pi pi-times\" (click)=\"cancelAction()\" class=\"p-button-text\"></button>\r\n</ng-template>\r\n</p-dialog>\r\n\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 <img src=\"assets/icons/cross.svg\" /> \r\n</fx-component>\r\n","import { \r\n Component, ElementRef, AfterViewInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy \r\n} from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as THREE from 'three';\r\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\r\n\r\n@Component({\r\n selector: 'app-three-viewer',\r\n templateUrl: './three-viewer.component.html',\r\n styleUrls: ['./three-viewer.component.scss'],\r\n standalone: true\r\n})\r\nexport class ThreeViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n @ViewChild('viewerContainer', { static: true }) viewerContainer!: ElementRef;\r\n @Input() file!: any;\r\n @Input() manualFileUpload: Blob | null = null;\r\n\r\n private scene!: THREE.Scene;\r\n private camera!: THREE.PerspectiveCamera;\r\n private renderer!: THREE.WebGLRenderer;\r\n private loader = new STLLoader();\r\n private model!: THREE.Mesh | null;\r\n\r\n private isDragging = false;\r\n private previousMousePosition = { x: 0, y: 0 };\r\n private zoomSpeed = 1.1;\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.initThree();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['manualFileUpload']?.currentValue && this.manualFileUpload) {\r\n this.loadModelFromBlob(this.manualFileUpload);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupThreeJS();\r\n }\r\n\r\n private initThree(): void {\r\n const container = this.viewerContainer.nativeElement;\r\n this.scene = new THREE.Scene();\r\n this.scene.background = new THREE.Color(0xf0f0f0);\r\n\r\n this.camera = new THREE.PerspectiveCamera(60, container.clientWidth / container.clientHeight, 0.1, 1000);\r\n this.camera.position.set(0, 0, 100);\r\n\r\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\r\n this.renderer.setSize(container.clientWidth, container.clientHeight);\r\n container.appendChild(this.renderer.domElement);\r\n\r\n const ambientLight = new THREE.AmbientLight(0x404040, 2);\r\n this.scene.add(ambientLight);\r\n\r\n const directionalLight = new THREE.DirectionalLight(0xffffff, 1);\r\n directionalLight.position.set(1, 1, 1).normalize();\r\n this.scene.add(directionalLight);\r\n\r\n this.initControls();\r\n this.animate();\r\n }\r\n\r\n private initControls(): void {\r\n const canvas = this.renderer.domElement;\r\n\r\n // Mouse Drag for Rotation\r\n canvas.addEventListener('mousedown', (event) => {\r\n this.isDragging = true;\r\n this.previousMousePosition.x = event.clientX;\r\n this.previousMousePosition.y = event.clientY;\r\n });\r\n\r\n canvas.addEventListener('mouseup', () => {\r\n this.isDragging = false;\r\n });\r\n\r\n canvas.addEventListener('mousemove', (event) => {\r\n if (!this.isDragging) return;\r\n\r\n const deltaX = event.clientX - this.previousMousePosition.x;\r\n const deltaY = event.clientY - this.previousMousePosition.y;\r\n\r\n const rotationSpeed = 0.005;\r\n this.model?.rotateY(deltaX * rotationSpeed);\r\n this.model?.rotateX(deltaY * rotationSpeed);\r\n\r\n this.previousMousePosition.x = event.clientX;\r\n this.previousMousePosition.y = event.clientY;\r\n });\r\n\r\n // Scroll for Zoom\r\n canvas.addEventListener('wheel', (event) => {\r\n // event.preventDefault();\r\n if (event.deltaY < 0) {\r\n this.camera.position.multiplyScalar(1 / this.zoomSpeed); // Zoom In\r\n } else {\r\n this.camera.position.multiplyScalar(this.zoomSpeed); // Zoom Out\r\n }\r\n this.camera.updateProjectionMatrix();\r\n });\r\n\r\n // Resize Handling\r\n window.addEventListener('resize', () => this.onWindowResize());\r\n }\r\n\r\n private loadModelFromBlob(blob: Blob): void {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const arrayBuffer = reader.result as ArrayBuffer;\r\n const geometry = this.loader.parse(arrayBuffer);\r\n geometry.computeVertexNormals();\r\n\r\n if (this.model) {\r\n this.scene.remove(this.model);\r\n this.model.geometry.dispose();\r\n }\r\n\r\n const material = new THREE.MeshPhysicalMaterial({\r\n color: 0xF8F0E3,\r\n metalness: 0.1,\r\n roughness: 0.5,\r\n transmission: 0.5, // Creates slight translucency\r\n clearcoat: 1.0, // Adds enamel-like reflection\r\n clearcoatRoughness: 0.3\r\n });\r\n \r\n this.model = new THREE.Mesh(geometry, material);\r\n this.scene.add(this.model);\r\n\r\n this.centerModel();\r\n };\r\n reader.readAsArrayBuffer(blob);\r\n }\r\n\r\n private centerModel(): void {\r\n if (!this.model) return;\r\n const box = new THREE.Box3().setFromObject(this.model);\r\n const center = new THREE.Vector3();\r\n box.getCenter(center);\r\n this.model.position.sub(center);\r\n\r\n const size = box.getSize(new THREE.Vector3()).length();\r\n this.camera.position.set(0, 0, size * 2);\r\n this.camera.updateProjectionMatrix();\r\n this.onWindowResize();\r\n }\r\n\r\n private animate = (): void => {\r\n requestAnimationFrame(this.animate);\r\n this.renderer.render(this.scene, this.camera);\r\n };\r\n\r\n onWindowResize(): void {\r\n const container = this.viewerContainer.nativeElement;\r\n this.camera.aspect = container.clientWidth / container.clientHeight;\r\n this.camera.updateProjectionMatrix();\r\n this.renderer.setSize(container.clientWidth, container.clientHeight);\r\n }\r\n\r\n private cleanupThreeJS(): void {\r\n // Remove event listeners\r\n const canvas = this.renderer.domElement;\r\n canvas.removeEventListener('mousedown', () => {});\r\n canvas.removeEventListener('mouseup', () => {});\r\n canvas.removeEventListener('mousemove', () => {});\r\n canvas.removeEventListener('wheel', () => {});\r\n window.removeEventListener('resize', () => this.onWindowResize());\r\n\r\n // Dispose of Three.js resources\r\n if (this.model) {\r\n this.scene.remove(this.model);\r\n this.model.geometry.dispose();\r\n }\r\n this.renderer.dispose();\r\n }\r\n}\r\n","<div #viewerContainer class=\"viewer-container\"></div>\r\n ","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { forkJoin, map, Observable, Subject, takeUntil } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { FileUploadModule, UploadEvent } from 'primeng/fileupload';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { ThreeViewerComponent } from '../three-viewer/three-viewer.component';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\n\r\n@Component({\r\n selector: 'fx-uploader',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule, FileUploadModule, ToastModule, ConfirmDialogModule, DialogModule, ThreeViewerComponent],\r\n providers: [MessageService, ConfirmationService],\r\n templateUrl: './uploader.component.html',\r\n styleUrl: './uploader.component.css'\r\n})\r\nexport class UploaderComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n // public uploadFileControl = new UntypedFormControl();\r\n public uploadFileControl = new FormControl();\r\n public uploadedFiles: Array<any> = [];\r\n public formattedData: any = {\r\n uploadedFiles: [],\r\n deletedFiles: []\r\n };\r\n categories = [\r\n { label: 'Oral Images', value: 16 },\r\n { label: 'Past Docs', value: 17 },\r\n { label: 'X-Rays', value: 14 },\r\n { label: 'Profile', value: 18 },\r\n ];\r\n\r\n visible: boolean = false;\r\n fileVisible: boolean = false;\r\n selecteImageUrl: string = '';\r\n fileUrl: SafeResourceUrl | null = null;\r\n fileType: string | null = null;\r\n fileName: string | null = null;\r\n private destroy$ = new Subject<Boolean>();\r\n private http = inject(HttpClient);\r\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService, private messageService: MessageService, private confirmationService: ConfirmationService, private sanitizer: DomSanitizer,\r\n private fxApiService: ApiServiceRegistry\r\n ) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData) => {\r\n this._register(this.uploadFileControl);\r\n })\r\n }\r\n\r\n stlFileVisible: boolean = false;\r\n stlFileUpload: any = null;\r\n\r\n uploadedImages: { [key: string]: { result: string, file: File | null }[] } = {};\r\n deletedFiles: any[] = [];\r\n uploadedFilesMap: { [key: string]: any[] } = {};\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n // public ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFiles: { [key: string]: string[] } = {};\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFiles[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFiles)) {\r\n // const imageFetches: Observable<string>[] = [];\r\n\r\n // urls.forEach((url: string) => {\r\n // if (url) {\r\n // const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => URL.createObjectURL(blob))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageUrls: string[]) => {\r\n // this.uploadedImages[uploaderKey] = imageUrls.map(result => ({\r\n // result,\r\n // file: null\r\n // }));\r\n // // this.uploadedFiles = [...this.uploadedImages]\r\n // this.uploadedFiles = Object.values(this.uploadedImages).flat();\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFiles: { [key: string]: string[] } = {};\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFiles[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFiles)) {\r\n // const imageFetches: Observable<{ result: string, originalUrl: string }>[] = [];\r\n\r\n // urls.forEach((url: string) => {\r\n // if (url) {\r\n // const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // just for preview\r\n // originalUrl: url\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n\r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // // const imageFetches: Observable<{ result: string; originalUrl: any; title:string ; notes:string }>[] = [];\r\n\r\n // // urls.forEach((originalUrl:any) => {\r\n // // if (originalUrl) {\r\n // // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // // map((blob: Blob) => ({\r\n // // result: URL.createObjectURL(blob), // for preview\r\n // // originalUrl: originalUrl?.originalUrl // preserve original\r\n // // }))\r\n // // );\r\n // // imageFetches.push(image$);\r\n // // }\r\n // // });\r\n\r\n // const imageFetches: Observable<{ result: string; originalUrl: any; title: string; notes: string }>[] = [];\r\n\r\n // urls.forEach((originalUrl: any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl: originalUrl?.originalUrl, // preserve original\r\n // title: originalUrl?.title || '', // default empty if not present\r\n // notes: originalUrl?.notes || ''\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result,\r\n // title: item.title,\r\n // notes: ''\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: { originalUrl: string }[] } = variables.uploadedFiles;\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const imageFetches: Observable<{ result: string; originalUrl: string }>[] = [];\r\n\r\n // urls.forEach((fileObj: any) => {\r\n // const originalUrl = fileObj?.originalUrl;\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\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 // result: e.target?.result,\r\n // name: file?.name,\r\n // id: uuidv4()\r\n // })\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // console.log(this.uploadFileControl);\r\n // }\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // 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\r\n // reader.onload = e => {\r\n // const newFile = {\r\n // id: uuidv4(),\r\n // file: file,\r\n // originalUrl: null,\r\n // result: e.target?.result,\r\n // name: file.name,\r\n // title: '',\r\n // notes: '',\r\n // category: '',\r\n // type: this.detectFileType(file),\r\n // };\r\n\r\n // this.uploadedFiles.push(newFile);\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // };\r\n\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: any[] } = {};\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const formatted = urls\r\n // .filter((fileObj: any) => !!fileObj) \r\n // .map((fileObj: any) => {\r\n // // const fileType = this.detectFileTypeFromUrl(fileObj?.originalUrl || fileObj?.name);\r\n\r\n // return {\r\n // id: uuidv4(),\r\n // file: null, \r\n // originalUrl: fileObj.originalUrl, \r\n // result: fileObj?.type === 'image' ? fileObj.originalUrl.previewUrl : null,\r\n // name: fileObj?.name || '',\r\n // title: fileObj?.title || '',\r\n // notes: fileObj?.notes || '',\r\n // category: fileObj?.category || '',\r\n // type: fileObj?.type, \r\n // };\r\n // });\r\n\r\n // if (formatted.length > 0) {\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: any[] } = {};\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && (value as any)?.uploadedFiles) {\r\n // uploadedFilesMap[key] = (value as any).uploadedFiles;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables)) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'uploadedFiles' in value\r\n ) {\r\n this.uploadedFilesMap[key] = (value as any).uploadedFiles;\r\n }\r\n}\r\n\r\n\r\n // for (const [uploaderKey, files] of Object.entries(this.uploadedFilesMap)) {\r\n // const formatted = files\r\n // .filter((fileObj: any) => !!fileObj)\r\n // .map((fileObj: any) => {\r\n // const originalUrlObj = fileObj.originalUrl;\r\n // const fileName = originalUrlObj?.fileName || '';\r\n // const fileUrl = originalUrlObj?.fileUrl || '';\r\n // const previewUrl = originalUrlObj?.previewUrl;\r\n // const type = fileObj?.type;\r\n\r\n // // detect type based on file extension\r\n // // const fileType = this.detectFileTypeFromUrl(fileName || fileUrl);\r\n\r\n // return {\r\n // id: uuidv4(),\r\n // file: null, // nothing local\r\n // originalUrl: originalUrlObj, // keep whole object\r\n // result: type === 'image'\r\n // ? (previewUrl) // prefer previewUrl, fallback to fileUrl\r\n // : previewUrl,\r\n // name: fileName,\r\n // title: fileObj?.title || '',\r\n // notes: fileObj?.notes || '',\r\n // categoryId: fileObj?.categoryId || '',\r\n // type: type, // computed type\r\n // };\r\n // });\r\n\r\n // if (formatted.length > 0) {\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n });\r\n }\r\n\r\nngAfterViewInit(): void {\r\n setTimeout(()=>{\r\n const key = this.fxComponent?.fxData?.name;\r\n const files = this.uploadedFilesMap?.[key];\r\n\r\n // Strong check — ensures patching happens only when files actually exist\r\n if (key && Array.isArray(files) && files.length > 0) {\r\n\r\n const formatted = files\r\n .filter((fileObj: any) => !!fileObj)\r\n .map((fileObj: any) => {\r\n const originalUrlObj = fileObj.originalUrl;\r\n const fileName = originalUrlObj?.fileName || '';\r\n const previewUrl = originalUrlObj?.previewUrl;\r\n const type = fileObj?.type;\r\n\r\n return {\r\n id: uuidv4(),\r\n file: null,\r\n originalUrl: originalUrlObj,\r\n result: previewUrl,\r\n name: fileName,\r\n title: fileObj?.title || '',\r\n notes: fileObj?.notes || '',\r\n categoryId: fileObj?.categoryId || '',\r\n type: type,\r\n };\r\n });\r\n if (formatted.length > 0) {\r\n this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n }\r\n },200)\r\n\r\n // setTimeout(() => {\r\n \r\n // if (this.setting('isUploaderRequired') === 'true') {\r\n // // this.isRequired = true;\r\n // this.uploadFileControl?.setValidators([Validators.required]);\r\n // this.uploadFileControl?.updateValueAndValidity();\r\n // }\r\n // }, 100)\r\n\r\n}\r\n\r\n\r\n onFileSelected(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files) return;\r\n const maxFileSize = this.setting('maxFileSize');\r\n\r\n Array.from(input.files).forEach(file => {\r\n const fileType = this.detectFileType(file);\r\n\r\n const fileSizeInMB = file.size / (1024 * 1024);\r\n const allowedTypes = ['.pdf', '.stl', 'image/*','.DCM','.htl','HTL'];\r\n\r\n if (fileSizeInMB > maxFileSize) {\r\n setTimeout(() => {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'File Too Large',\r\n detail: `The file \"${file.name}\" exceeds the maximum size limit of ${maxFileSize} MB.`,\r\n life: 4000,\r\n });\r\n }, 200);\r\n return;\r\n }\r\n\r\n const isValidFileType = allowedTypes.some(type => {\r\n if (type === 'image/*') {\r\n return file.type.startsWith('image/');\r\n } else {\r\n return file.name.endsWith(type);\r\n }\r\n });\r\n\r\n if (!isValidFileType) {\r\n setTimeout(() => {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Invalid File Type',\r\n detail: `File format not supported!`,\r\n life: 4000,\r\n });\r\n }, 200);\r\n return;\r\n }\r\n\r\n const newFile: any = {\r\n id: uuidv4(),\r\n file: file,\r\n originalUrl: null,\r\n result: null,\r\n name: file.name,\r\n title: '',\r\n notes: '',\r\n categoryId: '',\r\n type: fileType\r\n };\r\n\r\n if (fileType === 'image') {\r\n const reader = new FileReader();\r\n reader.onload = e => {\r\n newFile.result = e.target?.result;\r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n \r\n };\r\n reader.readAsDataURL(file); // only images need preview\r\n } else {\r\n // non-image → push directly\r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n \r\n }\r\n });\r\n input.value = '';\r\n }\r\n\r\n\r\n // onMetaChange() {\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n\r\n onMetaChange() {\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n\r\n // ❌ Invalid if any file is missing required fields\r\n const allValid = this.uploadedFiles.every(\r\n f => f.title?.trim() && f.notes?.trim() && f.categoryId?.toString().trim()\r\n );\r\n\r\n if (!allValid) {\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n } else {\r\n this.uploadFileControl.markAsUntouched();\r\n this.uploadFileControl.setErrors(null);\r\n }\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 // deleteFile(index: number): void {\r\n // const [deletedFile] = this.uploadedFiles.splice(index, 1);\r\n\r\n // if (deletedFile) {\r\n // this.deletedFiles.push(deletedFile);\r\n // this.formattedData = {\r\n // ...this.formattedData,\r\n // uploadedFiles: [...this.uploadedFiles],\r\n // deletedFiles: [...this.deletedFiles]\r\n // };\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n\r\n deleteFile(index: number): void {\r\n const deletedFile = this.uploadedFiles?.[index];\r\n if (!deletedFile) return;\r\n\r\n // Ensure formattedData exists and initialize if undefined\r\n this.formattedData = this.formattedData || { uploadedFiles: [], deletedFiles: [] };\r\n\r\n // Add the deleted file to the deletedFiles array\r\n\r\n\r\n // this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n\r\n if (!(deletedFile?.file instanceof File)) {\r\n this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n }\r\n\r\n // Remove the file from uploadedFiles using filter for immutability\r\n this.uploadedFiles = this.uploadedFiles.filter((_, i) => i !== index);\r\n\r\n // Update formattedData\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles\r\n };\r\n\r\n // Set the value of the uploadFileControl\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n\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 FxStringSetting({ key: 'uploaderErrorMessage', $title: 'Error Message', value: 'Please upload files' }),\r\n new FxSelectSetting({ key: 'multiple-upload', $title: 'Multiple Uploads', value: false }, [{ option: 'Enable', value: true }, { option: 'Disable', value: false }]),\r\n new FxStringSetting({ key: 'maxFileNo', $title: 'Maximum File Upload Allowed', value: 8 }),\r\n new FxStringSetting({ key: 'maxFileSize', $title: 'Maximum File Size Allowed', value: 10 }),\r\n new FxStringSetting({ key: 'maxFileSize', $title: 'Maximum File Size Allowed', value: 10 }),\r\n // new FxSelectSetting({ key: 'isUploaderRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n detectFileType(file: File): 'image' | 'csv' | 'text' | 'pdf' | 'excel' | 'word' | 'stl' | 'other' | 'dcm' | 'htl' {\r\n const mime = (file.type || '').toLowerCase();\r\n const name = (file.name || '').toLowerCase();\r\n\r\n // Images\r\n // if (mime.startsWith('image/') || /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(name)) {\r\n // return 'image';\r\n // }\r\n\r\n if (\r\n mime.startsWith('image/') || \r\n /\\.(png|jpe?g|gif|webp|bmp|svg|tiff?|ico|heif|heic|avif)$/i.test(name)\r\n) {\r\n return 'image';\r\n}\r\n\r\n\r\n // CSV\r\n if (mime === 'text/csv' || name.endsWith('.csv')) {\r\n return 'csv';\r\n }\r\n\r\n // Text files\r\n if (mime === 'text/plain' || name.endsWith('.txt')) {\r\n return 'text';\r\n }\r\n\r\n // PDF\r\n if (mime === 'application/pdf' || name.endsWith('.pdf')) {\r\n return 'pdf';\r\n }\r\n\r\n // Excel\r\n if (\r\n mime === 'application/vnd.ms-excel' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\r\n /\\.(xls|xlsx)$/i.test(name)\r\n ) {\r\n return 'excel';\r\n }\r\n\r\n // Word\r\n if (\r\n mime === 'application/msword' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\r\n /\\.(doc|docx)$/i.test(name)\r\n ) {\r\n return 'word';\r\n }\r\n\r\n \r\n if (\r\n mime === 'model/stl' ||\r\n mime === 'application/sla' || // Some browsers use this for STL\r\n /\\.stl$/i.test(name)\r\n ) {\r\n return 'stl';\r\n }\r\n\r\n if (\r\n /\\.dcm$/i.test(name)\r\n) {\r\n return 'dcm';\r\n}\r\n\r\n if (\r\n /\\.htl$/i.test(name)\r\n) {\r\n return 'htl';\r\n}\r\n\r\n\r\n\r\n\r\n return 'other';\r\n }\r\n\r\n\r\n // openFileDialog(fileInput: HTMLInputElement) {\r\n // // reset the value so change always triggers\r\n // fileInput.value = '';\r\n // fileInput.click();\r\n // }\r\n\r\n openFileDialog() {\r\n // if (this.uploadedFiles.length > this.setting('maxFileNo')) {\r\n // // this.messageService.add({\r\n // // severity: 'success',\r\n // // summary: 'Success',\r\n // // detail: `Maximum\"${this.setting('maxFileNo')}\" can be uploaded`,\r\n // // life: 3000\r\n // // });\r\n // return;\r\n // }\r\n this.fileInput.nativeElement.value = '';\r\n this.fileInput.nativeElement.click();\r\n }\r\n\r\n onBasicUploadAuto(event: UploadEvent) {\r\n \r\n }\r\n\r\n closeDialog() {\r\n this.visible = false;\r\n this.selecteImageUrl = '';\r\n }\r\n\r\n onImageSelect(url: string) {\r\n this.selecteImageUrl = url;\r\n this.visible = true;\r\n }\r\n\r\n onFileClick(file: any, name: any): void {\r\n\r\n if (!file) return;\r\n\r\n // this.fileName = file.name;\r\n let localUrl = '';\r\n\r\n if (file?.file) {\r\n localUrl = URL.createObjectURL(file.file);\r\n } else {\r\n localUrl = file?.result || '';\r\n }\r\n // const localUrl = URL.createObjectURL(file);\r\n\r\n\r\n this.loadFile(localUrl, name);\r\n this.fileVisible = true;\r\n }\r\n\r\n onOpenSTLFile(file: any): void {\r\n if (!file) {\r\n console.error('Invalid file structure:', file);\r\n return;\r\n }\r\n\r\n const actualFile = file.file;\r\n if(actualFile) {\r\n const blob = new Blob([actualFile], { type: 'application/octet-stream' });\r\n this.stlFileVisible = true;\r\n this.stlFileUpload = blob;\r\n } else {\r\n this.fetchAndLoadModel(file.originalUrl);\r\n }\r\n }\r\n\r\n private fetchAndLoadModel(originalUrl: any): void {\r\n const payload = {\r\n region: originalUrl.region,\r\n bucketName: originalUrl.bucketName,\r\n fileUrl: originalUrl.fileUrl,\r\n objectKey: originalUrl.objectKey,\r\n };\r\n const serviceUrl = `${this.fxApiService.getServiceUrl('workflow_service')}/workflow/files/download`;\r\n this.http.post(\r\n serviceUrl,\r\n payload,\r\n { responseType: 'arraybuffer' }\r\n ).subscribe(response => {\r\n const blob = new Blob([response], { type: 'application/octet-stream' });\r\n this.stlFileVisible = true;\r\n this.stlFileUpload = blob;\r\n });\r\n }\r\n\r\n private loadFile(url: string, fileName: string): void {\r\n const extension = fileName.split('.').pop()?.toLowerCase() || '';\r\n this.fileType = extension;\r\n\r\n if (extension === 'pdf') {\r\n // Native PDF rendering\r\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n else if (['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'csv', '.stl'].includes(extension)) {\r\n // Microsoft Office Viewer for Office files\r\n // const officeViewer = `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(url)}`;\r\n // console.log(officeViewer);\r\n const googleViewerUrl = 'https://docs.google.com/gview?url=' + encodeURIComponent(url) + '&embedded=true';\r\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(googleViewerUrl);\r\n\r\n // this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(officeViewer);\r\n }\r\n else {\r\n // Unsupported type\r\n this.fileUrl = null;\r\n this.fileType = 'unsupported';\r\n }\r\n }\r\n\r\n closeFileDialog() {\r\n this.fileVisible = false;\r\n this.fileUrl = null;\r\n this.fileType = null;\r\n this.fileName = null;\r\n }\r\n\r\n closeStlDialog() {\r\n this.stlFileVisible = false;\r\n this.stlFileUpload = null;\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-upload flex flex-col items-start justify-center p-0 rounded-sm\">\r\n <div class=\"flex gap-8 items-center mb-2\">\r\n <!-- <p class=\"text-base font-semibold\">Patient Images</p> -->\r\n <div class=\"flex justify-center items-center gap-1 upload-default cursor-pointer\" [ngClass]=\"{\r\n 'upload': (uploadedFiles ?? []).length > 0,\r\n 'upload-default': uploadedFiles?.length === 0\r\n }\" *ngIf=\"uploadedFiles.length < setting('maxFileNo')\" (click)=\"openFileDialog()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 29 28\" fill=\"none\"\r\n *ngIf=\"uploadedFiles.length===0\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#999999\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#999999\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"none\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 29 28\" fill=\"none\"\r\n *ngIf=\"uploadedFiles.length>0\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"none\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" class=\"upload_title \">\r\n {{ setting('upload-text') }}\r\n </a>\r\n <!-- <div>\r\n <small *ngIf=\"uploadFileControl?.errors?.['required'] && uploadFileControl?.touched\" class=\"text-red-500\">\r\n {{ setting('uploaderErrorMessage') }}\r\n</small>\r\n\r\n </div> -->\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n\r\n <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\"\r\n accept=\".pdf,image/*,.stl,.htl,.dcm\" hidden />\r\n\r\n <div class=\"file-list flex items-center gap-4 flex-wrap w-full\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"relative p-3 border rounded-lg shadow-sm bg-white w-[450px] upload_file\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"22\" height=\"22\" rx=\"11\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M7.08911 15.8889L6.11133 14.9111L10.0224 11L6.11133 7.08886L7.08911 6.11108L11.0002 10.0222L14.9113 6.11108L15.8891 7.08886L11.978 11L15.8891 14.9111L14.9113 15.8889L11.0002 11.9778L7.08911 15.8889Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"thumbnail_title flex\">\r\n <!-- Thumbnail on left -->\r\n <div class=\"thumbnail cursor-pointer\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail\" [src]=\"file?.result\" alt=\"preview\" (click)=\"onImageSelect(file?.result)\"\r\n *ngIf=\"file?.result\" />\r\n <svg *ngIf=\"!file?.result\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\"\r\n fill=\"#999999\" />\r\n </svg>\r\n\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n\r\n\r\n\r\n <svg *ngSwitchCase=\"'csv'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#23A761\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M6.94076 10.3433C6.85939 10.3433 6.78716 10.3588 6.72408 10.3899C6.66191 10.42 6.60934 10.464 6.56637 10.5216C6.52432 10.5793 6.49232 10.6489 6.47038 10.7305C6.44844 10.8122 6.43747 10.904 6.43747 11.006C6.43747 11.1435 6.45484 11.261 6.48958 11.3586C6.52523 11.4553 6.58009 11.5294 6.65414 11.5808C6.7282 11.6314 6.82373 11.6567 6.94076 11.6567C7.02212 11.6567 7.10349 11.6478 7.18486 11.6301C7.26714 11.6123 7.35628 11.587 7.45228 11.5542V11.9002C7.36359 11.9357 7.27628 11.961 7.19035 11.976C7.10441 11.992 7.00795 12 6.90099 12C6.69437 12 6.52432 11.9587 6.39084 11.8762C6.25827 11.7929 6.15999 11.6766 6.096 11.5276C6.032 11.3777 6 11.2029 6 11.0033C6 10.8561 6.02057 10.7212 6.06171 10.5988C6.10285 10.4764 6.16319 10.3704 6.24273 10.2808C6.32227 10.1912 6.42055 10.122 6.53758 10.0732C6.6546 10.0244 6.78899 10 6.94076 10C7.04041 10 7.14006 10.0124 7.23971 10.0373C7.34028 10.0612 7.43628 10.0945 7.5277 10.1371L7.39057 10.4724C7.3156 10.4378 7.24017 10.4076 7.16429 10.3819C7.08841 10.3562 7.0139 10.3433 6.94076 10.3433Z\"\r\n fill=\"white\" />\r\n <path\r\n d=\"M9.06363 11.4331C9.06363 11.5485 9.03483 11.6487 8.97724 11.7339C8.91964 11.819 8.83553 11.8847 8.7249 11.9308C8.61519 11.9769 8.48172 12 8.32447 12C8.25498 12 8.18687 11.9956 8.12013 11.9867C8.05431 11.9778 7.99077 11.965 7.92951 11.9481C7.86917 11.9304 7.81157 11.9086 7.75672 11.8829V11.4997C7.8518 11.5405 7.95054 11.5773 8.05293 11.6101C8.15533 11.6429 8.25681 11.6593 8.35738 11.6593C8.42686 11.6593 8.48263 11.6505 8.52468 11.6327C8.56765 11.615 8.59874 11.5906 8.61794 11.5595C8.63714 11.5285 8.64674 11.493 8.64674 11.4531C8.64674 11.4043 8.62982 11.3626 8.596 11.328C8.56217 11.2934 8.51554 11.261 8.45612 11.2309C8.3976 11.2007 8.33132 11.1683 8.25727 11.1337C8.21064 11.1124 8.1599 11.0867 8.10505 11.0566C8.05019 11.0255 7.99808 10.9878 7.94871 10.9434C7.89934 10.8991 7.85866 10.8454 7.82666 10.7824C7.79558 10.7186 7.78003 10.6423 7.78003 10.5536C7.78003 10.4373 7.80746 10.338 7.86231 10.2555C7.91717 10.173 7.99534 10.11 8.09682 10.0665C8.19921 10.0222 8.31989 10 8.45886 10C8.56308 10 8.66228 10.012 8.75645 10.0359C8.85153 10.059 8.95072 10.0927 9.05403 10.1371L8.9169 10.4578C8.82456 10.4214 8.74182 10.3934 8.66868 10.3739C8.59554 10.3535 8.52103 10.3433 8.44515 10.3433C8.39212 10.3433 8.34686 10.3517 8.30938 10.3686C8.2719 10.3846 8.24355 10.4076 8.22436 10.4378C8.20516 10.4671 8.19556 10.5012 8.19556 10.5403C8.19556 10.5864 8.20927 10.6254 8.2367 10.6574C8.26504 10.6884 8.30709 10.7186 8.36286 10.7478C8.41955 10.7771 8.48994 10.8113 8.57405 10.8503C8.67645 10.8973 8.76376 10.9466 8.83598 10.998C8.90912 11.0486 8.96535 11.1084 9.00466 11.1776C9.04398 11.246 9.06363 11.3311 9.06363 11.4331Z\"\r\n fill=\"white\" />\r\n <path\r\n d=\"M11 10.0279L10.3184 11.9734H9.85491L9.17471 10.0279H9.60395L9.98108 11.1856C9.98748 11.2051 9.99799 11.242 10.0126 11.2961C10.0272 11.3493 10.0419 11.4061 10.0565 11.4664C10.072 11.5258 10.0826 11.5751 10.088 11.6141C10.0935 11.5751 10.1031 11.5258 10.1168 11.4664C10.1315 11.407 10.1456 11.3506 10.1594 11.2974C10.174 11.2433 10.1845 11.206 10.1909 11.1856L10.5708 10.0279H11Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"9\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"9\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'text'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#1F5EBB\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'pdf'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#DD2025\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'stl'\" (click)=\"onOpenSTLFile(file)\" width=\"180px\" height=\"180\"\r\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#F3A041\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.17881 10.561C7.16954 10.4781 7.13048 10.4135 7.06162 10.3673C6.99343 10.3212 6.90471 10.2981 6.79547 10.2981C6.71867 10.2981 6.6528 10.3091 6.59784 10.3313C6.54289 10.3534 6.50085 10.3835 6.47172 10.4215C6.44259 10.4594 6.42769 10.5028 6.42703 10.5515C6.42703 10.592 6.43663 10.6271 6.45583 10.6569C6.47569 10.6866 6.50251 10.7119 6.53627 10.7328C6.57004 10.753 6.60744 10.7701 6.64849 10.7841C6.68954 10.798 6.73092 10.8097 6.77263 10.8192L6.9633 10.8647C7.0401 10.8818 7.11392 10.9049 7.18477 10.934C7.25627 10.9631 7.32016 10.9998 7.37643 11.0441C7.43337 11.0884 7.47839 11.1419 7.5115 11.2046C7.5446 11.2672 7.56115 11.3406 7.56115 11.4248C7.56115 11.5387 7.5307 11.639 7.46979 11.7257C7.40888 11.8117 7.32082 11.8791 7.20562 11.9279C7.09108 11.976 6.95238 12 6.78951 12C6.63128 12 6.4939 11.9766 6.37738 11.9298C6.26152 11.8829 6.17081 11.8146 6.10527 11.7247C6.04039 11.6349 6.0053 11.5254 6 11.3963H6.36248C6.36778 11.464 6.38963 11.5203 6.42803 11.5653C6.46643 11.6102 6.51641 11.6437 6.57798 11.6659C6.64022 11.688 6.70973 11.6991 6.78653 11.6991C6.86664 11.6991 6.93682 11.6877 6.99707 11.6649C7.05798 11.6415 7.10565 11.6092 7.14008 11.5681C7.1745 11.5263 7.19205 11.4776 7.19271 11.4219C7.19205 11.3713 7.17649 11.3295 7.14604 11.2966C7.11558 11.2631 7.07288 11.2352 7.01793 11.2131C6.96364 11.1903 6.90008 11.1701 6.82725 11.1523L6.59586 11.0954C6.42836 11.0543 6.29594 10.9919 6.19862 10.9084C6.10196 10.8242 6.05363 10.7125 6.05363 10.5733C6.05363 10.4588 6.08607 10.3585 6.15095 10.2724C6.2165 10.1864 6.30554 10.1196 6.41809 10.0721C6.53065 10.024 6.65809 10 6.80044 10C6.94477 10 7.07122 10.024 7.1798 10.0721C7.28904 10.1196 7.37478 10.1857 7.43701 10.2705C7.49925 10.3547 7.53136 10.4515 7.53334 10.561H7.17881Z\"\r\n fill=\"white\" />\r\n <path d=\"M7.80024 10.3218V10.0266H9.42296V10.3218H8.79433V11.9706H8.42887V10.3218H7.80024Z\"\r\n fill=\"white\" />\r\n <path d=\"M9.73579 11.9706V10.0266H10.1042V11.6754H11V11.9706H9.73579Z\" fill=\"white\" />\r\n <mask id=\"mask0_8011_7505\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"6\" y=\"3\"\r\n width=\"5\" height=\"5\">\r\n <rect x=\"6\" y=\"3\" width=\"5\" height=\"5\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_8011_7505)\">\r\n <path\r\n d=\"M8.22222 7.35625V5.64375L6.55556 4.775V6.4875L8.22222 7.35625ZM8.77778 7.35625L10.4444 6.4875V4.775L8.77778 5.64375V7.35625ZM8.5 5.2125L10.1458 4.35625L8.5 3.5L6.85417 4.35625L8.5 5.2125ZM6.27778 6.925C6.18981 6.87917 6.12153 6.81875 6.07292 6.74375C6.02431 6.66875 6 6.58542 6 6.49375V4.50625C6 4.41458 6.02431 4.33125 6.07292 4.25625C6.12153 4.18125 6.18981 4.12083 6.27778 4.075L8.22222 3.06875C8.31019 3.02292 8.40278 3 8.5 3C8.59722 3 8.68981 3.02292 8.77778 3.06875L10.7222 4.075C10.8102 4.12083 10.8785 4.18125 10.9271 4.25625C10.9757 4.33125 11 4.41458 11 4.50625V6.49375C11 6.58542 10.9757 6.66875 10.9271 6.74375C10.8785 6.81875 10.8102 6.87917 10.7222 6.925L8.77778 7.93125C8.68981 7.97708 8.59722 8 8.5 8C8.40278 8 8.31019 7.97708 8.22222 7.93125L6.27778 6.925Z\"\r\n fill=\"#CCCCCC\" />\r\n </g>\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'word'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#1F5EBB\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n\r\n <svg *ngSwitchCase=\"'dcm'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n\r\n<svg *ngSwitchCase=\"'htl'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n \r\n\r\n<svg *ngSwitchDefault width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"title_notes ml-2\">\r\n <!-- Title -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0 -mt-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\" name=\"title{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\" class=\" rounded px-3 py-2 mb-3 w-full outline-none focus:ring\" required\r\n #titleCtrl=\"ngModel\" />\r\n <div *ngIf=\"(titleCtrl.touched || uploadFileControl.touched) && titleCtrl.invalid\" class=\"text-red-500 text-xs mb-2\">\r\n Title is required\r\n </div>\r\n\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0 -mt-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\" name=\"notes{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\" class=\" rounded px-3 py-2 mb-0 w-full outline-none focus:ring\" rows=\"2\"\r\n required #notesCtrl=\"ngModel\" maxlength=\"768\"></textarea>\r\n <div *ngIf=\"(notesCtrl.touched || uploadFileControl.touched) && notesCtrl.invalid\" class=\"text-red-500 text-xs mt-1\">\r\n Notes are required\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"category mt-2\">\r\n <!-- Category -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0\">Category</label>\r\n <select [(ngModel)]=\"file.categoryId \" name=\"category{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n class=\" rounded px-3 py-2 w-full outline-none focus:ring\" required #categoryCtrl=\"ngModel\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c.value\">{{ c.label }}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"(categoryCtrl.touched || uploadFileControl.touched) && categoryCtrl.invalid\" class=\"text-red-500 text-xs mt-1\">\r\n Category is required\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <!-- Image Preview Dialog -->\r\n <p-dialog header=\"Image Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\"\r\n class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <img [src]=\"selecteImageUrl\" />\r\n </p-dialog>\r\n\r\n <!-- Document Preview Dialog -->\r\n <p-dialog header=\"Document Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"fileVisible\"\r\n [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeFileDialog()\">\r\n <div *ngIf=\"fileUrl && fileType !== 'unsupported'; else unsupportedMsg\" class=\"border rounded shadow-sm\">\r\n <iframe [src]=\"fileUrl\" width=\"100%\" height=\"600\" style=\"border: none;\" allowfullscreen>\r\n </iframe>\r\n </div>\r\n\r\n <ng-template #unsupportedMsg>\r\n <p class=\"text-red-600 mt-3\" *ngIf=\"fileType === 'unsupported'\">\r\n Unsupported file type. Please upload a PDF, DOCX, XLSX, or PPTX file.\r\n </p>\r\n </ng-template>\r\n </p-dialog>\r\n\r\n <!-- STL File Preview Dialog -->\r\n <ng-container *ngIf=\"stlFileUpload\">\r\n <p-dialog header=\"STL File Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"stlFileVisible\" [style]=\"{width: '70rem'}\"\r\n class=\"customDialogClass\" (onHide)=\"closeStlDialog()\">\r\n <app-three-viewer [manualFileUpload]=\"stlFileUpload\"></app-three-viewer>\r\n </p-dialog>\r\n </ng-container>\r\n <p-toast [preventOpenDuplicates]=\"true\" [breakpoints]=\"{ '426px': { width: '90%' } }\" position=\"top-center\"></p-toast>\r\n\r\n</fx-component>","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 { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxComponent } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil, Observable, map, forkJoin } from 'rxjs';\r\nimport { v4 as uuidv4} from 'uuid';\r\n\r\ninterface UploadedFile {\r\n id: string;\r\n file: any;\r\n result: string;\r\n originalUrl: string;\r\n}\r\ninterface UploaderData {\r\n uploadedFiles: UploadedFile[];\r\n checkboxEnabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'uploader-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './uploader-checkbox.component.html',\r\n styleUrl: './uploader-checkbox.component.css'\r\n})\r\nexport class UploaderCheckboxComponent extends FxBaseComponent implements OnInit , AfterViewInit{\r\n // public uploadFileControl = new UntypedFormControl();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n public uploadFileControl = new FormControl();\r\n public uploadedFiles: Array<any> = [];\r\n public formattedData: any = {\r\n uploadedFiles: [],\r\n deletedFiles: [],\r\n // checkboxEnabled: false\r\n };\r\n uploadedFilesMap: { [key: string]: { uploadedFiles: any[], checkboxEnabled: boolean } } = {};\r\n private destroy$ = new Subject<Boolean>();\r\n private http = inject(HttpClient);\r\n public checkboxEnabled: boolean = false;\r\n constructor(private cdr: ChangeDetectorRef,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.uploadFileControl);\r\n console.log(\"contextid\",this.getContextBaseId());\r\n })\r\n }\r\n // ngAfterViewInit(): void {\r\n // console.log(\"fxcomp\",this.fxComponent);\r\n // this.getContextBaseId();\r\n // }\r\n \r\n \r\n \r\n \r\n \r\n uploadedImages: { [key: string]: { result: string, file: File | null }[] } = {};\r\n deletedFiles: any[] = [];\r\n \r\n \r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n \r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n \r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader-checkbox') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n \r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n \r\n // urls.forEach((originalUrl:any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl: originalUrl?.originalUrl // preserve original\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n \r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n \r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n \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 // result: e.target?.result,\r\n // name: file?.name,\r\n // id: uuidv4()\r\n // })\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // console.log(this.uploadFileControl);\r\n // }\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // // Extract uploader keys and their corresponding URL arrays and store them in uploadedFilesMap\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n \r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n \r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader-checkbox') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n \r\n // this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use\r\n // });\r\n // }\r\n\r\n // ngAfterViewInit(): void {\r\n // console.log(\"fxcomp\", this.fxComponent);\r\n\r\n // const key = this.fxComponent?.fxData?.name;\r\n\r\n // if (key && this.uploadedFilesMap?.[key]) {\r\n // const urls = this.uploadedFilesMap[key];\r\n // const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n\r\n // urls.forEach((originalUrl: any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob),\r\n // originalUrl: originalUrl?.originalUrl\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${key}:`, err);\r\n // }\r\n // });\r\n // }\r\n // } else {\r\n // console.error('No files found for the provided key:', key);\r\n // }\r\n\r\n // this.getContextBaseId();\r\n // }\r\n\r\n ngOnInit(): void {\r\n // Extract uploader keys and their corresponding file objects and store them in uploadedFilesMap\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n \r\n // Initialize the map to store the structure of uploaded files and other data\r\n const uploadedFilesMap: { [key: string]: { uploadedFiles: any[], checkboxEnabled: boolean } } = {};\r\n \r\n // Iterate over the variables to extract uploader keys and their corresponding uploaded files data\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // // Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'\r\n // if (key.startsWith('uploader-checkbox') && (value as UploaderData).uploadedFiles) {\r\n // uploadedFilesMap[key] = {\r\n // uploadedFiles: (value as UploaderData).uploadedFiles,\r\n // checkboxEnabled: (value as UploaderData).checkboxEnabled || false\r\n // };\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (this.hasUploadedFiles(value)) {\r\n const otherKey = this.getOtherKey(value);\r\n const checkboxEnabled = value[otherKey];\r\n \r\n uploadedFilesMap[key] = {\r\n uploadedFiles: value.uploadedFiles,\r\n checkboxEnabled: checkboxEnabled,\r\n };\r\n }\r\n }\r\n \r\n \r\n \r\n this.uploadedFilesMap = uploadedFilesMap;\r\n });\r\n }\r\n\r\n private hasUploadedFiles(value: any): boolean {\r\n return value && value.hasOwnProperty('uploadedFiles');\r\n }\r\n \r\n private getOtherKey(value: any): string {\r\n const keysToIgnore = ['uploadedFiles', 'deletedFiles'];\r\n const keys = Object.keys(value);\r\n \r\n const filteredKeys = keys.filter(key => !keysToIgnore.includes(key));\r\n \r\n return filteredKeys.length > 0 ? filteredKeys[0] : '';\r\n }\r\n \r\n \r\n private getCheckboxEnabled(value: any): boolean {\r\n return value.hasOwnProperty('checkboxEnabled') ? value.checkboxEnabled : false;\r\n }\r\n \r\n ngAfterViewInit(): void {\r\n console.log(\"fxcomp\", this.fxComponent);\r\n \r\n const key = this.fxComponent?.fxData?.name;\r\n \r\n if (key && this.uploadedFilesMap?.[key]) {\r\n const uploadedFiles = this.uploadedFilesMap[key]?.uploadedFiles; \r\n this.checkboxEnabled = this.uploadedFilesMap[key]?.checkboxEnabled; // Get the uploadedFiles array\r\n const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n \r\n // Iterate over the uploaded files and fetch the images\r\n uploadedFiles.forEach((file: any) => {\r\n const originalUrl = file?.originalUrl;\r\n if (originalUrl) {\r\n const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(\r\n map((blob: Blob) => ({\r\n result: URL.createObjectURL(blob), // Blob URL for preview\r\n originalUrl: file?.originalUrl // Preserve the original URL\r\n }))\r\n );\r\n imageFetches.push(image$);\r\n }\r\n });\r\n \r\n // Fetch all images concurrently using forkJoin\r\n if (imageFetches.length > 0) {\r\n forkJoin(imageFetches).subscribe({\r\n next: (imageData) => {\r\n const formatted = imageData.map(item => ({\r\n id: uuidv4(),\r\n file: null,\r\n originalUrl: item.originalUrl,\r\n result: item.result\r\n }));\r\n \r\n this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n },\r\n error: (err) => {\r\n console.error(`Failed to fetch images for ${key}:`, err);\r\n }\r\n });\r\n }\r\n } else {\r\n console.error('No files found for the provided key:', key);\r\n }\r\n \r\n this.getContextBaseId();\r\n }\r\n \r\n \r\n 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 \r\n reader.onload = e => {\r\n const newFile = {\r\n id: uuidv4(),\r\n file: file,\r\n originalUrl: null,\r\n result: e.target?.result,\r\n name: file.name\r\n };\r\n \r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n };\r\n \r\n reader.readAsDataURL(file);\r\n }\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 // deleteFile(index: number): void {\r\n // const [deletedFile] = this.uploadedFiles.splice(index, 1);\r\n \r\n // if (deletedFile) {\r\n // this.deletedFiles.push(deletedFile);\r\n // this.formattedData = {\r\n // ...this.formattedData,\r\n // uploadedFiles: [...this.uploadedFiles],\r\n // deletedFiles: [...this.deletedFiles]\r\n // };\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n \r\n deleteFile(index: number): void {\r\n const deletedFile = this.uploadedFiles?.[index];\r\n if (!deletedFile) return;\r\n \r\n // Ensure formattedData exists and initialize if undefined\r\n this.formattedData = this.formattedData || { uploadedFiles: [], deletedFiles: [] };\r\n \r\n // Add the deleted file to the deletedFiles array\r\n this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n \r\n // Remove the file from uploadedFiles using filter for immutability\r\n this.uploadedFiles = this.uploadedFiles.filter((_, i) => i !== index);\r\n \r\n // Update formattedData\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles,\r\n [this.setting('checkbox-label') || 'checkboxEnabled']:this.checkboxEnabled\r\n };\r\n \r\n // Set the value of the uploadFileControl\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n \r\n onCheckboxChange(){\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles,\r\n [this.setting('checkbox-label') || 'checkboxEnabled']:this.checkboxEnabled\r\n };\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\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 FxStringSetting({ key: 'checkbox-label', $title: 'Checkbox Label', value: ''}),\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}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <label class=\"inline-flex items-center gap-2\">\r\n <input\r\n type=\"checkbox\"\r\n [(ngModel)] = \"checkboxEnabled\"\r\n (change)=\"onCheckboxChange()\"\r\n />\r\n {{ setting('checkbox-label') }}\r\n </label>\r\n <div class=\"custom-upload flex flex-row items-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex flex-col justify-center items-center\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" (click)=\"deleteFile(i)\"\r\n class=\"flex flex-col items-center justify-center\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n </div>\r\n \r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n@Component({\r\n selector: 'lib-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule],\r\n templateUrl: './date-picker.component.html',\r\n styleUrl: './date-picker.component.css'\r\n})\r\nexport class DatePickerComponent extends FxBaseComponent implements OnInit{\r\n private fb = inject(FormBuilder);\r\n // minDate = new Date();\r\n // maxDate = new Date();\r\nminDate!: string;\r\nmaxDate!: string;\r\n today = new Date();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n private destroy$ = new Subject<Boolean>();\r\n datePickerMap = new Map<string, any>();\r\n \r\n\r\n\r\n public datePickerForm: FormGroup = this.fb.group({\r\n date: [new Date(),[Validators.required]],\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.datePickerForm);\r\n });\r\n \r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n this.datePickerMap = new Map<string, any>();\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('lib-date-picker')) {\r\n // this.datePickerMap.set(key, value);\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'date' in value\r\n ) {\r\n this.datePickerMap.set(key, value);\r\n }\r\n}\r\n });\r\n\r\n\r\n // const today = new Date();\r\n // this.minDate = new Date(today);\r\n // this.minDate.setDate(today.getDate() - 30);\r\n\r\n // this.maxDate = new Date(today);\r\n // this.maxDate.setDate(today.getDate() + 30);\r\n\r\n // this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));\r\n // this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + 31)));\r\n\r\n const today = new Date();\r\n\r\nconst min = new Date();\r\nmin.setDate(today.getDate() - 30);\r\n\r\nconst max = new Date();\r\nmax.setDate(today.getDate());\r\n\r\n// this.minDate = this.formatDate(min);\r\n// this.maxDate = this.formatDate(max);\r\n\r\n // this.getRangeValues();\r\n\r\n\r\n }\r\n\r\n get dateControl() {\r\n return this.datePickerForm.get('date');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const key = this.fxComponent?.fxData?.name;\r\n if(key){\r\n const datePatch = this.datePickerMap.get(key)\r\n const finalDate = datePatch || this.formatDate(new Date())\r\n if(datePatch){\r\n this.minDate = datePatch.date;\r\n this.maxDate = datePatch.date;\r\n }\r\n else{\r\n this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));\r\n const today = new Date();\r\n const max = new Date();\r\nmax.setDate(today.getDate());\r\nthis.maxDate = this.formatDate(max);\r\n\r\n }\r\n \r\n\r\n this.datePickerForm.patchValue({date:finalDate});\r\n }\r\n this.getContextBaseId();\r\n }\r\n\r\n getRangeValues() {\r\n this.http.get<any>(this.setting('apiURL')).subscribe(response => {\r\n const today = new Date();\r\n \r\n const minOffset = response[this.setting('minDateKey')] || this.setting('minValidation');\r\n const maxOffset = response[this.setting('maxDateKey')] || this.setting('maxValidation');\r\n \r\n // this.minDate = new Date(today);\r\n // this.minDate.setDate(today.getDate() + minOffset);\r\n \r\n // this.maxDate = new Date(today);\r\n // this.maxDate.setDate(today.getDate() + maxOffset);\r\n\r\n this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + minOffset)));\r\n this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + maxOffset)));\r\n });\r\n }\r\n\r\n private formatDate(date: Date): string {\r\n return date.toISOString().split('T')[0]; \r\n}\r\n \r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'minValidation', $title: 'Min Validation', value: '' }),\r\n new FxStringSetting({ key: 'maxValidation', $title: 'Max Validation', value: '' }),\r\n new FxStringSetting({ key: 'apiURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'minDateKey', $title: 'Min Range API Key', value: '' }),\r\n new FxStringSetting({ key: 'maxDateKey', $title: 'Max Range API Key', value: '' }),\r\n new FxStringSetting({ key: 'placeHolder', $title: 'Placeholder', value: 'Select Date' }),\r\n new FxStringSetting({ key: 'label', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'datePickerErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n \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\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"datePickerForm\">\r\n <!-- <p-calendar formControlName=\"date\" [showIcon]=\"true\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\r\n [iconDisplay]=\"'input'\" [showOnFocus]=\"false\" dateFormat=\"dd/mm/yy\" [showButtonBar]=\"true\"\r\n placeholder=\"{{ setting('placeHolder') }}\">\r\n <ng-template pTemplate=\"inputicon\">\r\n <span class=\"absolute right-0 pt-2 pr-2\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"cursor-pointer\">\r\n <path\r\n d=\"M19.5624 2.25991H18.1956V3.13582C18.1956 3.61948 17.7982 4.01173 17.3078 4.01173C16.8177 4.01173 16.4202 3.61948 16.4202 3.13582V2.25991H7.58001V3.13582C7.58001 3.61948 7.18253 4.01173 6.69244 4.01173C6.20209 4.01173 5.80486 3.61948 5.80486 3.13582V2.25991H4.43787C3.26107 2.2604 2.13252 2.72182 1.30042 3.54299C0.468323 4.36441 0.000507185 5.47813 0 6.63946V19.6204C0.000495266 20.7818 0.468304 21.8955 1.30042 22.7167C2.13252 23.5381 3.26107 23.9995 4.43787 24H19.5621C20.7389 23.9995 21.8675 23.5381 22.6996 22.7167C23.5317 21.8955 23.9995 20.7818 24 19.6204V6.63946C23.9995 5.47813 23.5317 4.36441 22.6996 3.54299C21.8675 2.72183 20.7389 2.26041 19.5621 2.25991H19.5624ZM19.5624 22.2482H4.43818C3.73262 22.246 3.05655 21.9686 2.55779 21.4761C2.05878 20.9839 1.77768 20.3167 1.77546 19.6204V9.05698H22.2252V19.6204C22.2229 20.3167 21.9419 20.9839 21.4428 21.4761C20.9441 21.9686 20.268 22.246 19.5624 22.2482ZM7.58001 2.25991H5.80486L5.80505 0.87591C5.80505 0.392251 6.20227 0 6.69262 0C7.18272 0 7.58019 0.392251 7.58019 0.87591L7.58001 2.25991ZM18.1956 2.25991H16.4202L16.4202 0.87591C16.4202 0.392251 16.8177 0 17.3078 0C17.7981 0 18.1953 0.392251 18.1953 0.87591L18.1956 2.25991Z\"\r\n fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </p-calendar> -->\r\n <!-- <p-calendar formControlName=\"date\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"{{ setting('placeHolder') }}\"> -->\r\n <label for=\"date\" class=\"input-label\">{{ setting('label') }}<span class=\"field-required\">*</span></label>\r\n <div class=\"relative\">\r\n <input type=\"date\" id=\"date\" name=\"date\" formControlName=\"date\" [min]=\"minDate\" [max]=\"maxDate\">\r\n </div>\r\n <!-- <label for=\"date\" class=\"placeholder\">Select Date</label> -->\r\n <!-- <ng-template pTemplate=\"inputicon\">\r\n <span class=\"absolute right-0 pt-2 pr-2\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"cursor-pointer\">\r\n <path\r\n d=\"M19.5624 2.25991H18.1956V3.13582C18.1956 3.61948 17.7982 4.01173 17.3078 4.01173C16.8177 4.01173 16.4202 3.61948 16.4202 3.13582V2.25991H7.58001V3.13582C7.58001 3.61948 7.18253 4.01173 6.69244 4.01173C6.20209 4.01173 5.80486 3.61948 5.80486 3.13582V2.25991H4.43787C3.26107 2.2604 2.13252 2.72182 1.30042 3.54299C0.468323 4.36441 0.000507185 5.47813 0 6.63946V19.6204C0.000495266 20.7818 0.468304 21.8955 1.30042 22.7167C2.13252 23.5381 3.26107 23.9995 4.43787 24H19.5621C20.7389 23.9995 21.8675 23.5381 22.6996 22.7167C23.5317 21.8955 23.9995 20.7818 24 19.6204V6.63946C23.9995 5.47813 23.5317 4.36441 22.6996 3.54299C21.8675 2.72183 20.7389 2.26041 19.5621 2.25991H19.5624ZM19.5624 22.2482H4.43818C3.73262 22.246 3.05655 21.9686 2.55779 21.4761C2.05878 20.9839 1.77768 20.3167 1.77546 19.6204V9.05698H22.2252V19.6204C22.2229 20.3167 21.9419 20.9839 21.4428 21.4761C20.9441 21.9686 20.268 22.246 19.5624 22.2482ZM7.58001 2.25991H5.80486L5.80505 0.87591C5.80505 0.392251 6.20227 0 6.69262 0C7.18272 0 7.58019 0.392251 7.58019 0.87591L7.58001 2.25991ZM18.1956 2.25991H16.4202L16.4202 0.87591C16.4202 0.392251 16.8177 0 17.3078 0C17.7981 0 18.1953 0.392251 18.1953 0.87591L18.1956 2.25991Z\"\r\n fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n </svg>\r\n </span>\r\n </ng-template> -->\r\n <!-- </p-calendar> -->\r\n <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxOptionSetting, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { TitleStrategy } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'dropdown-with-other',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule],\r\n templateUrl: './dropdown-with-other.component.html',\r\n styleUrl: './dropdown-with-other.component.css'\r\n})\r\nexport class DropdownWithOtherComponent extends FxBaseComponent implements OnInit, AfterViewInit {\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n dropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n // options = [\r\n // { optionValue: 'Clinical Notes 1', optionName: 'Clinical Notes 1' },\r\n // { optionValue: 'Clinical Notes 2', optionName: 'Clinical Notes 2' },\r\n // { optionValue: 'Clinical Notes 3', optionName: 'Clinical Notes 3' },\r\n // { optionValue: 'other', optionName: 'Other' }\r\n // ];\r\n\r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n isChildRequired: boolean = false;\r\n otherMaxLength: number = 768;\r\n\r\n public dropDownForm: FormGroup = this.fb.group({\r\n selectedOption: [''],\r\n otherInput: [{ value: '', disabled: true }],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.dropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.dropdownMap.has(key)) {\r\n this.dropDownForm.patchValue(this.dropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n this.otherMaxLength = Number(this.setting('other-maxLength')) || 768;\r\n const mainControl = this.dropDownForm.get('selectedOption');\r\n if (this.setting('isRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'selectedOption' in value\r\n ) {\r\n this.dropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n // this.dropDownForm.get('selectedOption')?.valueChanges.subscribe(value => {\r\n // const otherControl = this.dropDownForm.get('otherInput');\r\n // if (value === 'other') {\r\n // otherControl?.enable();\r\n // } else {\r\n // otherControl?.disable();\r\n // otherControl?.reset();\r\n // }\r\n // });\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));\r\n this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));\r\n\r\n this.dropDownForm.get('selectedOption')?.valueChanges.subscribe(value => {\r\n const otherControl = this.dropDownForm.get('otherInput');\r\n\r\n if (value === 'other') {\r\n otherControl?.enable();\r\n this.isChildRequired = true;\r\n otherControl?.setValidators([Validators.required]);\r\n } else {\r\n this.isChildRequired = false;\r\n otherControl?.disable();\r\n otherControl?.reset();\r\n otherControl?.clearValidators();\r\n }\r\n\r\n otherControl?.updateValueAndValidity();\r\n otherControl?.markAsTouched();\r\n });\r\n\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'clinicalNotesURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClass', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'other-label', $title: 'Other Label', value: '' }),\r\n new FxStringSetting({ key: 'other-placeholder', $title: 'Other Placeholder', value: '' }),\r\n new FxStringSetting({ key: 'other-maxLength', $title: 'Other Max Length', value: 768 }),\r\n new FxSelectSetting({ key: 'serviceName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'errorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n new FxStringSetting({ key: 'errorMessageOther', $title: 'Other Error Message', value: 'Other is required' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n this.options.push({ value: 'other', label: 'Other' });\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"flex justify-center custom-dropdown\" [ngClass]=\"setting('customClass')\" *ngIf=\"false\">\r\n <form [formGroup]=\"dropDownForm\" class=\"flex flex-row gap-4 items-start\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex flex-col w-1/2\">\r\n <div class=\"relative\">\r\n\r\n <!-- <label class=\"mb-1 font-semibold text-sm\"></label> -->\r\n <span class=\"input-label dark:text-gray-300\">{{ setting('select-label') }}</span>\r\n <select formControlName=\"selectedOption\" class=\"border p-2 rounded w-full\">\r\n <option value=\"\">Select</option>\r\n <option *ngFor=\"let option of options\" [value]=\"option.value\">\r\n {{ option?.label }}\r\n </option>\r\n </select>\r\n <small *ngIf=\"dropDownForm.get('selectedOption')?.touched && dropDownForm.get('selectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorMessage')}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <!-- Other input (only if 'Other' selected) -->\r\n <div class=\"flex flex-col w-1/2\">\r\n <div class=\"relative\">\r\n <label class=\"input-label dark:text-gray-300\">{{ setting('other-label') }}</label>\r\n <div class=\"relative\">\r\n <textarea\r\n formControlName=\"otherInput\"\r\n placeholder=\"{{setting('other-placeholder')}}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n ></textarea>\r\n </div>\r\n <small *ngIf=\"dropDownForm.get('otherInput')?.touched && dropDownForm.get('otherInput')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n Other is required.\r\n </small>\r\n </div>\r\n </div>\r\n\r\n \r\n </form>\r\n</div>\r\n\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClass')\">\r\n <form [formGroup]=\"dropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <select\r\n formControlName=\"selectedOption\"\r\n class=\"border p-2 rounded w-full\"\r\n >\r\n <option value=\"\">Select</option>\r\n <option *ngFor=\"let option of options\" [value]=\"option.value\">\r\n {{ option?.label }}\r\n </option>\r\n </select>\r\n <small *ngIf=\"dropDownForm.get('selectedOption')?.touched && dropDownForm.get('selectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('other-label') }} <span class=\"field-required\" *ngIf=\"isChildRequired\">*</span>\r\n </label>\r\n <textarea\r\n formControlName=\"otherInput\"\r\n placeholder=\"{{ setting('other-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n [maxlength]=\"otherMaxLength\"\r\n ></textarea>\r\n\r\n <small\r\n *ngIf=\"dropDownForm.get('otherInput')?.touched && dropDownForm.get('otherInput')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('errorMessageOther')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n\r\n\r\n\r\n</fx-component>\r\n\r\n <!-- <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n Date is required.\r\n </small> -->","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core';\r\nimport { FxBaseComponent, FxComponent, FxOptionSetting, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n\r\n@Component({\r\n selector: 'radio-group-custom',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule,RadioButtonModule],\r\n templateUrl: './radio-group.component.html',\r\n styleUrl: './radio-group.component.css'\r\n})\r\nexport class RadioGroupComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\nprivate fb = inject(FormBuilder);\r\nprivate destroy$ = new Subject<Boolean>();\r\nformObject: object = {};\r\n@Input() showOnSelection: 'yes' | 'no' = 'yes'; // configurable: show textarea on Yes or No\r\n showTextArea = false;\r\n public confirmationForm = this.fb.group({\r\n confirmation: [''],\r\n remarks: [''],\r\n valueToShowTextArea: [''],\r\n label:['']\r\n });\r\n\r\n options: any[] = [\r\n { option: 'Yes', value: 'YES' },\r\n { option: 'No', value: 'NO' },\r\n { option: 'NA', value: 'NA' }\r\n ];\r\n\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n radoioMap = new Map<string, any>();\r\n compareValue: any;\r\n isRequired: boolean = false;\r\n isChildRequired: boolean = false;\r\n remarkMaxLength: number = 84;\r\n\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService,private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.confirmationForm);\r\n });\r\n \r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'items') as any)?.options || [];\r\n const labelData =\r\n (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'select-label') as any)?.value ??\r\n '';\r\nthis.compareValue = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'value-show-text') as any)?.value\r\n const label = this.confirmationForm.get('label');\r\n label?.setValue(labelData);\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.radoioMap.has(key)) {\r\n this.confirmationForm.patchValue(this.radoioMap.get(key));\r\n const data = this.radoioMap.get(key);\r\n this.onSelectionChange(data.confirmation);\r\n }\r\n}, 200);\r\n\r\n setTimeout(()=>{\r\n const mainControl = this.confirmationForm.get('confirmation');\r\n this.remarkMaxLength = Number(this.setting('remark-maxlength')) || 84;\r\n if(this.setting('isRadioRequired') === 'true'){\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n },100)\r\n\r\n \r\n }\r\n \r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n \r\n \r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('radio-group-custom')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'confirmation' in value\r\n ) {\r\n this.radoioMap.set(key, value);\r\n }\r\n}\r\n\r\n \r\n })\r\n\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'items') as any)?.options || [];\r\n\r\n\r\n // this.setting('items').length > 0 ? this.options = this.setting('items') : null;\r\n \r\n // this.confirmationForm.get('confirmation')?.valueChanges.subscribe(value => {\r\n // const otherControl = this.confirmationForm.get('remarks');\r\n // const valueToShowTextArea = this.confirmationForm.get('valueToShowTextArea');\r\n // if (value) {\r\n // otherControl?.setValidators([Validators.required]);\r\n // valueToShowTextArea?.setValue(this.setting('value-show-text'));\r\n\r\n // } else {\r\n // otherControl?.clearValidators();\r\n // otherControl?.reset();\r\n // valueToShowTextArea?.reset();\r\n // }\r\n // });\r\n \r\n \r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n // new FxStringSetting({ key: 'clinicalNotesURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClasss', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label', $title: 'Header Label', value: 'Header Label' }), \r\n // new FxStringSetting({ key: 'option-value-one', $title: 'Value one', value: 'Value one' }), \r\n // new FxStringSetting({ key: 'option-value-two', $title: 'Value two', value: 'Value two' }), \r\n // new FxStringSetting({ key: 'option-label-one', $title: 'Label one', value: 'Label one' }), \r\n // new FxStringSetting({ key: 'option-label-two', $title: 'Label two', value: 'Label two' }), \r\n new FxStringSetting({ key: 'value-show-text', $title: 'Value to show textarea', value: 'Value to show textarea' }),\r\n new FxOptionSetting({ key: 'items', $title: 'Options', value: [{option: 'Yes', value: 'yes'}, {option: 'No', value: 'no'}] }, [{option: 'Yes', value: 'yes'}, {option: 'No', value: 'no'}]), \r\n new FxStringSetting({ key: 'additional-field-label', $title: 'Additional field label', value: '' }),\r\n new FxStringSetting({ key: 'additional-field-error-msg', $title: 'Additional field error message', value: 'Please fill out the field' }),\r\n new FxStringSetting({ key: 'error-msg', $title: 'Error message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'remark-placeholder', $title: 'Additional field placeholder', value: 'enter here' }),\r\n new FxSelectSetting({key: 'isRadioRequired', $title: 'Required', value: 'true'}, [{option: 'Yes', value: 'true'}, {option: 'No', value: 'false'}]), \r\n new FxStringSetting({ key: 'remark-maxlength', $title: 'Additional field max length', value: 84 }),\r\n // new FxStringSetting({ key: 'other-placeholder', $title: 'Other Placeholder', value: '' }), \r\n // new FxSelectSetting({key: 'serviceName', $title: 'Service', value: ''}, [{option: 'User Service', value: 'user_service'}, {option: 'Patient Service', value: 'patient_service'},{option: 'Workflow Service', value: 'workflow_service'}]),\r\n // // new FxSelectSetting({key: 'service', $title: 'Service', value: 'local'}, [{option: 'Local', value: 'local'}, {option: 'QA', value: 'qa'},{option: 'UAT', value: 'uat'},{option: 'Production', value: 'prod'}]), \r\n // // new FxSelectSetting({key: 'isRequired', $title: 'Required', value: true}, [{option: 'Yes', value: true}, {option: 'No', value: false}]), \r\n // new FxStringSetting({ key: 'errorMessage', $title: 'Error Message', value: 'Please fill out the field' }), \r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n onSelectionChange(selection: string) {\r\n\r\n this.showTextArea = selection === this.compareValue;\r\n if(this.showTextArea){\r\nconst valueToShowTextArea = this.confirmationForm.get('valueToShowTextArea');\r\n valueToShowTextArea?.setValue(this.setting('value-show-text'));\r\nconst otherControl = this.confirmationForm.get('remarks');\r\nthis.isChildRequired = true;\r\notherControl?.setValidators([Validators.required]);\r\notherControl?.updateValueAndValidity();\r\n }\r\n else{\r\n const otherControl = this.confirmationForm.get('remarks');\r\n this.isChildRequired = false;\r\n otherControl?.reset();\r\n otherControl?.clearValidators();\r\n otherControl?.updateValueAndValidity();\r\n }\r\n\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1 relative mt-2 md:mt-1\">\r\n\r\n <label class=\"input-label font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }} <span class=\"field-required\" *ngIf=\"isChildRequired\">*</span>\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n [maxlength]=\"remarkMaxLength\" \r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n selector: 'lib-multiselect-dropdown',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule],\r\n templateUrl: './multiselect-dropdown.component.html',\r\n styleUrl: './multiselect-dropdown.component.css'\r\n})\r\nexport class MultiselectDropdownComponent extends FxBaseComponent implements OnInit, AfterViewInit {\r\n\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n multiselectDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n\r\n public multiselectDropDownForm: FormGroup = this.fb.group({\r\n multipleSelectedOption: [[]],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.multiselectDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('multiSelectOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsOption') as any)?.options || [];\r\n }\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.multiselectDropdownMap.has(key)) {\r\n this.multiselectDropDownForm.patchValue(this.multiselectDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.multiselectDropDownForm.get('multipleSelectedOption');\r\n if (this.setting('isMultiRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'multipleSelectedOption' in value\r\n ) {\r\n this.multiselectDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceMultiName'));\r\n this.getOptions(serviceUrl, this.setting('multiSelectOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsOption', $title: 'Options', value: [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'multiSelectOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassMulti', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-multi', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key', $title: 'Label Key', value: 'option' }),\r\n new FxSelectSetting({ key: 'serviceMultiName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isMultiRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiErrorMessage', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderMulti', $title: 'Placeholder', value: 'Select' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsOption') as any)?.options || [];\r\n }\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMulti')\">\r\n <form [formGroup]=\"multiselectDropDownForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleSelectedOption\" [optionLabel]=\"setting('label-key')\"\r\n [placeholder]=\"setting('placeholderMulti')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiselectDropDownForm.get('multipleSelectedOption')?.touched && multiselectDropDownForm.get('multipleSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiErrorMessage')}}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n selector: 'lib-multiselect-dropdown-with-childs',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule],\r\n templateUrl: './multiselect-dropdown-with-childs.component.html',\r\n styleUrl: './multiselect-dropdown-with-childs.component.css'\r\n})\r\nexport class MultiselectDropdownWithChildsComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n multiChildDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n isChild1Required: boolean = false;\r\n isChild2Required: boolean = false;\r\n\r\n public multiChildDropDownForm: FormGroup = this.fb.group({\r\n multipleChildSelectedOption: [[]],\r\n child1: [''],\r\n child2: [''],\r\n child1Label: [''],\r\n child2Label: [''],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.multiChildDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('multiChildOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsChildOption') as any)?.options || [];\r\n }\r\n\r\n const child1LabelControl = this.multiChildDropDownForm.get('child1Label');\r\n const child2LabelControl = this.multiChildDropDownForm.get('child2Label');\r\n child1LabelControl?.setValue(this.setting('child-1-label')); \r\n child2LabelControl?.setValue(this.setting('child-2-label'));\r\n child1LabelControl?.updateValueAndValidity();\r\n child2LabelControl?.updateValueAndValidity(); \r\n\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.multiChildDropdownMap.has(key)) {\r\n this.multiChildDropDownForm.patchValue(this.multiChildDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.multiChildDropDownForm.get('multipleChildSelectedOption');\r\n const child1Control = this.multiChildDropDownForm.get('child1');\r\n const child2Control = this.multiChildDropDownForm.get('child2');\r\n if (this.setting('isMultiChildRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n if (this.setting('isChild1Required') === 'true') {\r\n this.isChild1Required = true;\r\n child1Control?.setValidators([Validators.required]);\r\n child1Control?.updateValueAndValidity();\r\n }\r\n if (this.setting('isChild2Required') === 'true') {\r\n this.isChild2Required = true;\r\n child2Control?.setValidators([Validators.required]);\r\n child2Control?.updateValueAndValidity();\r\n }\r\n }, 1000)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'multipleChildSelectedOption' in value\r\n ) {\r\n this.multiChildDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceMultiName'));\r\n this.getOptions(serviceUrl, this.setting('multiChildOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsChildOption', $title: 'Options', value: [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'multiChildOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassMultiChild', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-multi-child', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key-child', $title: 'Label Key', value: 'option' }),\r\n new FxSelectSetting({ key: 'serviceMultiName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isMultiChildRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiChildErrorMessage', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderMultiChild', $title: 'Placeholder', value: 'Select' }),\r\n\r\n new FxStringSetting({ key: 'child-1-label', $title: 'Child 1 Label', value: '' }),\r\n new FxStringSetting({ key: 'child-1-placeholder', $title: 'Child 1 Placeholder', value: 'enter here' }),\r\n new FxSelectSetting({ key: 'isChild1Required', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'child1ErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n\r\n new FxStringSetting({ key: 'child-2-label', $title: 'Child 2 Label', value: '' }),\r\n new FxStringSetting({ key: 'child-2-placeholder', $title: 'Child 2 Placeholder', value: 'enter here' }),\r\n new FxSelectSetting({ key: 'isChild2Required', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'child2ErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsChildOption') as any)?.options || [];\r\n }\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }} <sup class=\"field-required\" *ngIf=\"isChild1Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }} <sup class=\"field-required\" *ngIf=\"isChild2Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\n\r\n@Component({\r\n selector: 'lib-dropdown-with-search',\r\n standalone: true,\r\n imports: [DropdownModule, CommonModule, FormsModule, ReactiveFormsModule, CalendarModule, MultiSelectModule, FxComponent],\r\n templateUrl: './dropdown-with-search.component.html',\r\n styleUrl: './dropdown-with-search.component.css'\r\n})\r\nexport class DropdownWithSearchComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n searchDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n\r\n public searchDropDownForm: FormGroup = this.fb.group({\r\n searchSelectedOption: [''],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.searchDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('searchSelectOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsSearchOption') as any)?.options || [];\r\n // this.options.unshift({ option: 'Select', value: '' });\r\n }\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.searchDropdownMap.has(key)) {\r\n this.searchDropDownForm.patchValue(this.searchDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.searchDropDownForm.get('searchSelectedOption');\r\n if (this.setting('isSearchRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'searchSelectedOption' in value\r\n ) {\r\n this.searchDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceSearchName'));\r\n this.getOptions(serviceUrl, this.setting('searchSelectOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsSearchOption', $title: 'Options', value: [{ option: 'Select', value: '' },{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'searchSelectOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassSearch', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-search', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key-search', $title: 'Label Key', value: 'option' }),\r\n new FxStringSetting({ key: 'value-key-search', $title: 'Label Key', value: 'value' }),\r\n new FxSelectSetting({ key: 'serviceSearchName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isSearchRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiErrorSearch', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderSearch', $title: 'Placeholder', value: 'Select' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.content || [];\r\n this.options.unshift({ option: 'Select', value: '' });\r\n\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsSearchOption') as any)?.options || [];\r\n // this.options.unshift({ option: 'Select', value: '' });\r\n }\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-dropdown\" [ngClass]=\"setting('customClassSearch')\">\r\n <form [formGroup]=\"searchDropDownForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-search') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-dropdown [options]=\"options\" formControlName=\"searchSelectedOption\" [optionLabel]=\"setting('label-key-search')\" [filter]=\"true\" [showClear]=\"true\" \r\n [placeholder]=\"setting('placeholderSearch')\" class=\"multiselect\" [optionValue]=\"setting('value-key-search')\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n\r\n\r\n <small\r\n *ngIf=\"searchDropDownForm.get('searchSelectedOption')?.touched && searchDropDownForm.get('searchSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiErrorSearch')}}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewChecked, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-summary',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './summary.component.html',\r\n styleUrl: './summary.component.css'\r\n})\r\nexport class SummaryComponent extends FxBaseComponent implements OnInit, AfterViewChecked{\r\n private fb = inject(FormBuilder);\r\n\r\nminDate!: string;\r\nmaxDate!: string;\r\n today = new Date();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n private destroy$ = new Subject<Boolean>();\r\n datePickerMap = new Map<string, any>();\r\n \r\n \r\n\r\n\r\n public summaryForm: FormGroup = this.fb.group({\r\n summary: [''],\r\n })\r\n\r\n dynamicText: string = '';\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.summaryForm);\r\n });\r\n \r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this.dynamicText = this.setting('summaryText') || '';\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const key = this.fxComponent?.fxData?.name;\r\n if(key){\r\n }\r\n this.getContextBaseId();\r\n }\r\n\r\n \r\n\r\n private formatDate(date: Date): string {\r\n return date.toISOString().split('T')[0]; \r\n}\r\n \r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'summaryText', $title: 'Summary Text', value: '' }),\r\n new FxStringSetting({ key: 'summaryLabel', $title: 'Label', value: '' }),\r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n updateTextArea(): void {\r\n const formValues = this.fxComponent?.fxData?.$formGroup?.value;\r\n const dynamicText = this.replacePlaceholders(this.dynamicText, formValues);\r\n this.summaryForm.patchValue({ summary: dynamicText });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n replacePlaceholders(template: string, values: any): string {\r\n return template.replace(/{(.*?)}/g, (match, placeholder) => {\r\n if (values[placeholder] !== undefined) {\r\n return values[placeholder];\r\n } else {\r\n return match;\r\n }\r\n });\r\n}\r\n\r\n\r\n ngAfterViewChecked(): void {\r\n this.updateTextArea();\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-summary relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label class=\"summary-label\">{{ setting('summaryLabel') }}</label>\r\n <div class=\"relative\">\r\n <textarea formControlName=\"summary\" readonly class=\"w-full\" rows=\"2\"></textarea>\r\n </div>\r\n <!-- <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div> -->\r\n </form>\r\n </div>\r\n\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core';\r\nimport {\r\n FxBaseComponent,\r\n FxComponent,\r\n FxSelectSetting,\r\n FxSetting,\r\n FxStringSetting,\r\n FxValidation,\r\n FxValidatorService\r\n} from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\ninterface SubOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface CustomDropdownOption {\r\n label: string;\r\n value: string;\r\n info?: string;\r\n selected: boolean;\r\n subOptions?: SubOption[];\r\n subSelection?: string | null;\r\n disabled?: boolean;\r\n touched?: boolean;\r\n}\r\n\r\ninterface CustomDropdownConfig {\r\n displayMode?: 'compact' | 'ellipsis';\r\n placeholderLabel?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-customize-dropdown',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './customize-dropdown.component.html',\r\n styleUrls: ['./customize-dropdown.component.css']\r\n})\r\nexport class CustomizeDropdownComponent extends FxBaseComponent implements OnInit , AfterViewInit{\r\n private destroy$ = new Subject<boolean>();\r\n form!: FormGroup;\r\n formObject: object = {};\r\n dropdownOpen = false;\r\n formSubmitted = false;\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n\r\n findingsOptions: CustomDropdownOption[] = [];\r\n\r\n type1Options: any[] = [ {\r\n label: 'Proclination',\r\n value: 'Proclination',\r\n info: 'Forward inclination of teeth',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Crowding',\r\n value: 'Crowding',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Spacing',\r\n value: 'Spacing',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Retroclination',\r\n value: 'Retroclination',\r\n info: 'Backward inclination of teeth',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n\r\n },\r\n {\r\n label: 'Rotation',\r\n value: 'Rotation',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n }];\r\n\r\n type2Options: any[] = [\r\n {\r\n label: 'Normal',\r\n value: 'Normal',\r\n info: '',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Deep Bite',\r\n value: 'Deep Bite',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Open Bite',\r\n value: 'Open Bite',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n ];\r\n\r\n isRequired: boolean = false;\r\n\r\n // @HostListener('document:click', ['$event'])\r\n // onClickOutside(event: MouseEvent) {\r\n // if (this.dropdownOpen && !this.eRef.nativeElement.contains(event.target)) {\r\n // this.dropdownOpen = false;\r\n // this.cdr.detectChanges();\r\n // }\r\n // }\r\n\r\n config: CustomDropdownConfig = {\r\n displayMode: 'ellipsis',\r\n placeholderLabel: 'Select Finding'\r\n };\r\n\r\n customizedDropDownMap = new Map<string, any>();\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private http: HttpClient,\r\n private fxBuilderWrapperService: FxBuilderWrapperService,\r\n private fxApiService: ApiServiceRegistry,\r\n private fb: FormBuilder,\r\n private eRef: ElementRef\r\n ) {\r\n super(cdr);\r\n this.form = this.fb.group({\r\n findings: [[]]\r\n });\r\n this.onInit.subscribe(() => this._register(this.form));\r\n }\r\n ngAfterViewInit(): void {\r\n// setTimeout(()=>{\r\n// const data = [\r\n// {\r\n// label: \"Proclination\",\r\n// value: \"proclination\",\r\n// subSelection: {\r\n// label: \"Mild\",\r\n// value: \"mild\"\r\n// }\r\n// },\r\n// {\r\n// label: \"Overbite\",\r\n// value: \"overbite\",\r\n// subSelection: {\r\n// label: \"Moderate\",\r\n// value: \"moderate\"\r\n// }\r\n// }\r\n// ];\r\n\r\n// this.patchExistingValues(data);\r\n// },2000);\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.customizedDropDownMap.has(key)) {\r\n const data = this.customizedDropDownMap.get(key)?.findings;\r\n this.patchExistingValues(data);\r\n\r\n }\r\n }, 1000);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.form.get('findings');\r\n if (this.setting('isFindingsRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 500)\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.setting('optionType') === 'type1') {\r\n this.findingsOptions = this.type1Options;\r\n\r\n }\r\n\r\n else if (this.setting('optionType') === 'type2') {\r\n this.findingsOptions = this.type2Options;\r\n }\r\n\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n\r\n if (!variables) return;\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'findings' in value\r\n ) {\r\n this.customizedDropDownMap.set(key, value);\r\n }\r\n }\r\n });\r\n // const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));\r\n // this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));\r\n }\r\n\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n // Future API logic here\r\n },\r\n error: (err) => console.error('Error fetching options', err)\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxSelectSetting({ key: 'displayMode', $title: 'Display Mode', value: 'ellipsis' }, [{ option: 'Ellipsis', value: 'ellipsis' }, { option: 'Compact', value: 'compact' }]),\r\n new FxSelectSetting({ key: 'optionType', $title: 'Option Type', value: 'type1' }, [{ option: 'Finding Type Options', value: 'type1' }, { option: 'Vetical Type Options', value: 'type2' }]),\r\n new FxStringSetting({ key: 'placeholderLabel', $title: 'Placeholder', value: 'Select Options' }),\r\n new FxStringSetting({ key: 'findingLabel', $title: 'Label', value: 'Label' }),\r\n new FxSelectSetting({ key: 'isFindingsRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'errorFindingMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n /** Dropdown Behavior **/\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n }\r\n\r\n toggleOption(option: CustomDropdownOption, event: Event) {\r\n event.stopPropagation();\r\n\r\n // Toggle checkbox value\r\n option.selected = !option.selected;\r\n\r\n // Reset radios when unchecked\r\n if (!option.selected) {\r\n option.subSelection = null;\r\n option.touched = false;\r\n }\r\n\r\n else{\r\n option.touched = true;\r\n }\r\n\r\n // ✅ Force UI refresh so radios appear instantly\r\n this.cdr.detectChanges();\r\n\r\n // Update reactive form\r\n this.updateFindings();\r\n }\r\n\r\n /** Form & Label Helpers **/\r\n get hasSelectedFindings(): boolean {\r\n return this.findingsOptions.some(f => f.selected);\r\n }\r\n\r\n get selectedFindingsLabel(): string {\r\n const selected = this.findingsOptions\r\n .filter(f => {\r\n if (f.selected) {\r\n // If finding has sub-options → only show if a sub-option is selected\r\n if (f.subOptions?.length) {\r\n return !!f.subSelection;\r\n }\r\n // If no sub-options → always show\r\n return true;\r\n }\r\n return false;\r\n })\r\n .map(f => f.label);\r\n\r\n if (selected.length === 0) return this.setting('placeholderLabel');\r\n\r\n // Display mode logic (Compact or Ellipsis)\r\n const maxCount = this.setting('displayMode') === 'compact' ? 2 : 3;\r\n if (this.setting('displayMode') === 'compact') {\r\n return selected.length <= maxCount\r\n ? selected.join(', ')\r\n : `${selected.slice(0, maxCount).join(', ')} +${selected.length - maxCount} more`;\r\n }\r\n\r\n if (this.setting('displayMode') === 'ellipsis') {\r\n return selected.length > maxCount\r\n ? `${selected.slice(0, maxCount).join(', ')}, ...`\r\n : selected.join(', ');\r\n }\r\n\r\n return selected.join(', ');\r\n }\r\n\r\n /** Update Findings + Validation **/\r\n // updateFindings() {\r\n // const selected = this.findingsOptions\r\n // .filter(f => {\r\n // if (f.selected) {\r\n // // Only include in final form if:\r\n // // - no subOptions, or\r\n // // - subOptions with valid subSelection\r\n // if (f.subOptions?.length) {\r\n // return !!f.subSelection;\r\n // }\r\n // return true;\r\n // }\r\n // return false;\r\n // })\r\n // .map(f => {\r\n // const sub = f.subOptions?.find(s => s.value === f.subSelection) || null;\r\n // return {\r\n // label: f.label,\r\n // value: f.value,\r\n // subSelection: sub ? { label: sub.label, value: sub.value } : null\r\n // };\r\n // });\r\n\r\n // // Update reactive form value\r\n // this.form.patchValue({ findings: selected }, { emitEvent: false });\r\n\r\n // // Validation logic remains same\r\n // const invalidItems = this.findingsOptions.filter(\r\n // f => f.selected && f.subOptions && !f.subSelection\r\n // );\r\n // this.form.get('findings')?.setErrors(\r\n // invalidItems.length > 0 ? { missingSubSelection: true } : null\r\n // );\r\n // }\r\n\r\n updateFindings() {\r\n // Filter selected options with valid subSelection (if subOptions exist)\r\n const selected = this.findingsOptions\r\n .filter(f => {\r\n if (f.selected) {\r\n // Only include in final form if:\r\n // - no subOptions, or\r\n // - subOptions with valid subSelection\r\n if (f.subOptions?.length) {\r\n return !!f.subSelection;\r\n }\r\n return true;\r\n }\r\n return false;\r\n })\r\n .map(f => {\r\n const sub = f.subOptions?.find(s => s.value === f.subSelection) || null;\r\n return {\r\n label: f.label,\r\n value: f.value,\r\n subSelection: sub ? { label: sub.label, value: sub.value } : null\r\n };\r\n });\r\n\r\n // Update reactive form value\r\n this.form.patchValue({ findings: selected }, { emitEvent: false });\r\n\r\n // Validation logic:\r\n // Check if there are any selected options with subOptions but without subSelection\r\n const invalidItems = this.findingsOptions.filter(\r\n f => f.selected && f.subOptions && !f.subSelection\r\n );\r\n\r\n // If there are any invalid items, mark the form as invalid with a custom error\r\n if (invalidItems.length > 0) {\r\n this.form.get('findings')?.setErrors({ missingSubSelection: true });\r\n } else {\r\n // Clear the error if everything is valid\r\n this.form.get('findings')?.setErrors(null);\r\n }\r\n}\r\n\r\n\r\n onSubmit() {\r\n this.formSubmitted = true;\r\n if (this.form.invalid) {\r\n console.warn('⚠️ Please select a sub-option for all selected findings with sub-options.');\r\n return;\r\n }\r\n console.log('✅ Form Value:', this.form.value);\r\n }\r\n\r\n // patchExistingValues(data: any[]) {\r\n // this.findingsOptions.forEach(opt => {\r\n // const match = data.find(x => x.value === opt.value);\r\n // opt.selected = !!match;\r\n // opt.subSelection = match?.severity?.value || null;\r\n // });\r\n // this.updateFindings();\r\n // }\r\n\r\npatchExistingValues(data: any[]) {\r\n // Iterate through the findingsOptions and find the corresponding option for each entry in data\r\n this.findingsOptions.forEach(opt => {\r\n const match = data.find(x => x.value === opt.value);\r\n \r\n if (match) {\r\n opt.selected = true;\r\n opt.subSelection = match.subSelection ? match.subSelection.value : null;\r\n\r\n // console.log(\"Matched Option:\", opt);\r\n // console.log(\"SubSelection Set To:\", this.findingsOptions);\r\n } else {\r\n opt.selected = false;\r\n opt.subSelection = null;\r\n }\r\n });\r\n\r\n // Manually trigger change detection if needed\r\n this.cdr.detectChanges();\r\n \r\n this.updateFindings();\r\n}\r\n\r\nselectSubOption(option: any, subOption: any) {\r\n // Set the subSelection to the clicked value\r\n option.subSelection = subOption.value;\r\n // Mark the option as touched, which will help in form validation\r\n option.touched = true;\r\n // Update the form state\r\n this.updateFindings();\r\n}\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"relative\">\r\n <!-- Header -->\r\n <label for=\"findings\" class=\"input-label\">\r\n {{ setting('findingLabel') }}\r\n <span *ngIf=\"isRequired\" class=\"field-required\">*</span>\r\n </label>\r\n <div #dropdownWrapper class=\"relative\">\r\n <button\r\n type=\"button\"\r\n class=\"w-full border border-gray-300 pl-3 pr-2 py-2 flex justify-between items-center bg-white text-gray-700 hover:border-blue-400\"\r\n (click)=\"toggleDropdown()\"\r\n >\r\n <span *ngIf=\"hasSelectedFindings; else placeholder\">\r\n {{ selectedFindingsLabel }}\r\n </span>\r\n <ng-template #placeholder>\r\n {{ setting('placeholderLabel') }}\r\n </ng-template>\r\n <svg width=\"22\" height=\"20\" viewBox=\"0 0 26 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" width=\"24.766\" height=\"24\" rx=\"3\" fill=\"#FF7900\" fill-opacity=\"0.1\" />\r\n <path\r\n d=\"M12.8918 16.5019C12.7255 16.5019 12.5695 16.4736 12.4239 16.4169C12.2783 16.3602 12.1431 16.2628 12.0183 16.1248L6.27803 9.8162C6.04925 9.56477 5.92946 9.25025 5.91864 8.87265C5.90783 8.49505 6.02762 8.16956 6.27803 7.89619C6.50681 7.64476 6.79799 7.51905 7.15155 7.51905C7.50512 7.51905 7.7963 7.64476 8.02508 7.89619L12.8918 13.2105L17.7586 7.89619C17.9874 7.64476 18.2736 7.51356 18.6172 7.50259C18.9607 7.49162 19.2569 7.62282 19.5056 7.89619C19.7344 8.14762 19.8488 8.46762 19.8488 8.85619C19.8488 9.24477 19.7344 9.56477 19.5056 9.8162L13.7654 16.1248C13.6406 16.2619 13.5054 16.3593 13.3598 16.4169C13.2142 16.4745 13.0582 16.5028 12.8918 16.5019Z\"\r\n fill=\"#FAA762\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Panel -->\r\n <div\r\n *ngIf=\"dropdownOpen\"\r\n class=\"absolute mt-1 w-full bg-white border border-gray-300 rounded-md shadow-lg max-h-64 overflow-y-auto z-10\"\r\n >\r\n <div\r\n *ngFor=\"let option of findingsOptions\"\r\n class=\"border-b border-gray-100 last:border-none p-2 hover:bg-gray-50 cursor-pointer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- Checkbox + Label -->\r\n <div class=\"flex items-center gap-2\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"w-4 h-4 text-blue-500 border-gray-300 rounded cursor-pointer\"\r\n [(ngModel)]=\"option.selected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"toggleOption(option, $event)\"\r\n />\r\n <label\r\n class=\"text-gray-800 font-medium cursor-pointer select-none\"\r\n (click)=\"toggleOption(option, $event)\"\r\n >\r\n {{ option.label }}\r\n </label>\r\n\r\n <span\r\n *ngIf=\"option.info\"\r\n class=\"ml-auto text-blue-500 text-sm cursor-pointer\"\r\n title=\"{{ option.info }}\"\r\n >\r\n ⓘ\r\n </span>\r\n </div>\r\n\r\n <!-- Radios -->\r\n <div\r\n class=\"flex items-center flex-wrap gap-4 ml-6 mt-2 text-sm\"\r\n *ngIf=\"option.selected && option.subOptions\"\r\n >\r\n <ng-container *ngFor=\"let s of option.subOptions\">\r\n <label\r\n class=\"flex items-center space-x-1 cursor-pointer\"\r\n (click)=\"selectSubOption(option, s)\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [name]=\"option.value\"\r\n [value]=\"s.value\"\r\n [(ngModel)]=\"option.subSelection\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"text-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ s.label }}</span>\r\n </label>\r\n</ng-container>\r\n\r\n <!-- Validation Message -->\r\n <div\r\n *ngIf=\"option.selected && option.subOptions && !option.subSelection\"\r\n class=\"text-red-500 text-xs mt-1 w-full ml-1\"\r\n >\r\n Please select one option\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <small *ngIf=\"form.get('findings')?.touched && form.get('findings')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorFindingMessage') }}\r\n </small>\r\n </div>\r\n \r\n </form>\r\n </div>\r\n</fx-component>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\n\r\n@Component({\r\n selector: 'lib-heading',\r\n standalone: true,\r\n imports: [FxComponent,CommonModule],\r\n templateUrl: './heading.component.html',\r\n styleUrl: './heading.component.css'\r\n})\r\nexport class HeadingComponent extends FxBaseComponent implements OnInit {\r\n selectedLevel: number = 1;\r\n headingText: string = '';\r\nsectionOpened: boolean = true;\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n // this._register(this.datePickerForm);\r\n });\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.selectedLevel = this.setting('hType') || 1;\r\n this.headingText = this.setting('hLabel') || 'Header';\r\n \r\n }\r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'hLabel', $title: 'Label', value: 'Header' }),\r\n // new FxSelectSetting({ key: 'hType', $title: 'Heading Type', value: 1 }, [{ option: 'H1', value: 1 }, { option: 'H2', value: 2 }, { option: 'H3', value: 3 }, { option: 'H4', value: 4 }, { option: 'H5', value: 5 }, { option: 'H6', value: 6 }]),\r\n new FxStringSetting({ key: 'hClass', $title: 'Custom Class Name', value: '' }),\r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('hClass')\" class=\"custom-header-section\">\r\n {{headingText}}\r\n </div>\r\n</fx-component> ","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\nimport { UploaderCheckboxComponent } from './components/uploader-checkbox/uploader-checkbox.component';\r\nimport { DatePickerComponent } from './components/date-picker/date-picker.component';\r\nimport { DropdownWithOtherComponent } from './components/dropdown-with-other/dropdown-with-other.component';\r\nimport { RadioGroupComponent } from './components/radio-group/radio-group.component';\r\nimport { MultiselectDropdownComponent } from './components/multiselect-dropdown/multiselect-dropdown.component';\r\nimport { MultiselectDropdownWithChildsComponent } from './components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component';\r\nimport { DropdownWithSearchComponent } from './components/dropdown-with-search/dropdown-with-search.component';\r\nimport { AccordianComponent } from './components/accordian/accordian.component';\r\nimport { SummaryComponent } from './components/summary/summary.component';\r\nimport { CustomizeDropdownComponent } from './components/customize-dropdown/customize-dropdown.component';\r\nimport { HeadingComponent } from './components/heading/heading.component';\r\n// import { CustomizeDropdownComponent } from './components/multiselect-with-form-fields/customize-dropdown.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('uploader-checkbox'))) {\r\n this.fxWrapperService.registerCustomComponent('Uploader with Checkbox', 'uploader-checkbox', UploaderCheckboxComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-date-picker'))) {\r\n this.fxWrapperService.registerCustomComponent('Date Picker', 'lib-date-picker', DatePickerComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('dropdown-with-other'))) {\r\n this.fxWrapperService.registerCustomComponent('Smartlist with Other', 'dropdown-with-other', DropdownWithOtherComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('radio-group-custom'))) {\r\n this.fxWrapperService.registerCustomComponent('Radio Group with Other', 'radio-group-custom', RadioGroupComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-multiselect-dropdown'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect Dropdown', 'lib-multiselect-dropdown', MultiselectDropdownComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-multiselect-dropdown-with-childs'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect Dropdown with Childs', 'lib-multiselect-dropdown-with-childs', MultiselectDropdownWithChildsComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-dropdown-with-search'))) {\r\n this.fxWrapperService.registerCustomComponent('Dropdown with Search', 'lib-dropdown-with-search', DropdownWithSearchComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-customize-dropdown'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect with Form', 'lib-customize-dropdown', CustomizeDropdownComponent);\r\n }\r\n // if (!Boolean(this.fxWrapperService.getComponent('lib-accordian'))) {\r\n // this.fxWrapperService.registerCustomComponent('Accordian', 'lib-accordian', AccordianComponent);\r\n // }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-summary'))) {\r\n this.fxWrapperService.registerCustomComponent('Summary', 'lib-summary', SummaryComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-heading'))) {\r\n this.fxWrapperService.registerCustomComponent('Header', 'lib-heading', HeadingComponent);\r\n }\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\nimport { UploaderCheckboxComponent } from '../uploader-checkbox/uploader-checkbox.component';\r\nimport { DatePickerComponent } from '../date-picker/date-picker.component';\r\nimport { DropdownWithOtherComponent } from '../dropdown-with-other/dropdown-with-other.component';\r\nimport { RadioGroupComponent } from '../radio-group/radio-group.component';\r\nimport { MultiselectDropdownComponent } from '../multiselect-dropdown/multiselect-dropdown.component';\r\nimport { MultiselectDropdownWithChildsComponent } from '../multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component';\r\nimport { DropdownWithSearchComponent } from '../dropdown-with-search/dropdown-with-search.component';\r\nimport { AccordianComponent } from '../accordian/accordian.component';\r\nimport { SummaryComponent } from '../summary/summary.component';\r\nimport { CustomizeDropdownComponent } from '../customize-dropdown/customize-dropdown.component';\r\nimport { HeadingComponent } from '../heading/heading.component';\r\n// import { CustomizeDropdownComponent } from '../multiselect-with-form-fields/customize-dropdown.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 { name: 'Uploader with Checkbox', key: 'uploader-checkbox', component: UploaderCheckboxComponent },\r\n { name: 'Date Picker', key: 'lib-date-picker', component: DatePickerComponent },\r\n { name: 'Smartlist with Other', key: 'dropdown-with-other', component: DropdownWithOtherComponent },\r\n { name: 'Radio Group with Other', key: 'radio-group-custom', component: RadioGroupComponent },\r\n { name: 'Multiselect Dropdown', key: 'lib-multiselect-dropdown', component: MultiselectDropdownComponent },\r\n { name: 'Multiselect Dropdown with Childs', key: 'lib-multiselect-dropdown-with-childs', component: MultiselectDropdownWithChildsComponent },\r\n { name: 'Dropdown with Search', key: 'lib-dropdown-with-search', component: DropdownWithSearchComponent },\r\n { name: 'Multiselect with Form ', key: 'lib-customize-dropdown', component: CustomizeDropdownComponent },\r\n { name: 'Summary', key: 'lib-summary', component: SummaryComponent },\r\n { name: 'Header', key: 'lib-heading', component: HeadingComponent },\r\n \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","i4","i5","i1.FxBuilderWrapperService","i3","i9","uuidv4","i6","i7","i8","i2.FxBuilderWrapperService"],"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/three-viewer/three-viewer.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/three-viewer/three-viewer.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/components/uploader-checkbox/uploader-checkbox.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/uploader-checkbox/uploader-checkbox.component.html","../../../projects/fx-builder-wrapper/src/lib/components/date-picker/date-picker.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/date-picker/date-picker.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-other/dropdown-with-other.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-other/dropdown-with-other.component.html","../../../projects/fx-builder-wrapper/src/lib/components/radio-group/radio-group.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/radio-group/radio-group.component.html","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown/multiselect-dropdown.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown/multiselect-dropdown.component.html","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.html","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-search/dropdown-with-search.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/dropdown-with-search/dropdown-with-search.component.html","../../../projects/fx-builder-wrapper/src/lib/components/summary/summary.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/summary/summary.component.html","../../../projects/fx-builder-wrapper/src/lib/components/customize-dropdown/customize-dropdown.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/customize-dropdown/customize-dropdown.component.html","../../../projects/fx-builder-wrapper/src/lib/components/heading/heading.component.ts","../../../projects/fx-builder-wrapper/src/lib/components/heading/heading.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 { inject, Injectable, Type } from '@angular/core';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/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 private fxApiRegistryService = inject(ApiServiceRegistry)\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 public setService(object:any){\r\n this.fxApiRegistryService.registerService(object)\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule, Validators, FormBuilder, FormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { BehaviorSubject, take } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-dispatch-to-clinic',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './dispatch-to-clinic.component.html'\r\n})\r\nexport class DispatchToClinicComponent extends FxBaseComponent {\r\n private fb = inject(FormBuilder);\r\n\r\n public clinicAddress$: BehaviorSubject<any> = new BehaviorSubject<any>({});\r\n\r\n public dispatchForm: FormGroup = this.fb.group({\r\n courierName: ['', Validators.required],\r\n trackingNumber: ['', Validators.required],\r\n trackingUrl: ['', [Validators.required, Validators.pattern('https?://.+')]],\r\n notes: ['', Validators.required]\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n super(cdr);\r\n\r\n this.onInit.subscribe(() => {\r\n this._register(this.dispatchForm);\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [new FxStringSetting({ key: 'heading-text', $title: 'Heading Text', value: 'My Default Value' })];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public copyToClipboard(address: any): void {\r\n navigator.clipboard.writeText(address);\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\">\r\n <section\r\n class=\"justify-content-around lg:justify-content-between w-full white-color border-1 border-solid stroke_light_grey p-3 mb-3 mt-3\">\r\n <form [formGroup]=\"dispatchForm\">\r\n <div class=\"grid\">\r\n <!-- Courier Name -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"courierName\" class=\"input-title\">Courier Name</label>\r\n <input autocomplete=\"off\" formControlName=\"courierName\" type=\"text\" id=\"courierName\"\r\n name=\"courierName\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter courier name\" />\r\n\r\n <!-- validation -->\r\n <small *ngIf=\"dispatchForm.get('courierName')?.invalid && dispatchForm.get('courierName')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Courier Name is required.\r\n </small>\r\n <!-- validation -->\r\n </div>\r\n <!-- Courier Name -->\r\n\r\n <!-- Tracking Number -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingNumber\" class=\"input-title\">Tracking Number</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingNumber\" type=\"text\" id=\"trackingNumber\"\r\n name=\"trackingNumber\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking number\" />\r\n <small\r\n *ngIf=\"dispatchForm.get('trackingNumber')?.invalid && dispatchForm.get('trackingNumber')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Tracking Number is required.\r\n </small>\r\n </div>\r\n <!-- Tracking Number -->\r\n\r\n <!-- Tracking URL -->\r\n <div class=\"col-12 sm:col-6 md:col-3 input-container\">\r\n <label for=\"trackingUrl\" class=\"input-title\">Tracking URL</label>\r\n <input autocomplete=\"off\" formControlName=\"trackingUrl\" type=\"text\" id=\"trackingUrl\"\r\n name=\"trackingUrl\" class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter tracking url\" />\r\n <small *ngIf=\"dispatchForm.get('trackingUrl')?.invalid && dispatchForm.get('trackingUrl')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['required']\">Tracking URL is\r\n required.</span>\r\n <span *ngIf=\"dispatchForm.get('trackingUrl')?.errors?.['pattern']\">Invalid URL format.</span>\r\n </small>\r\n </div>\r\n <!-- Tracking URL -->\r\n\r\n <!-- Notes -->\r\n <div class=\"col-12 md:col-6 input-container\">\r\n <label for=\"notes\" class=\"input-title\">Notes</label>\r\n <textarea autocomplete=\"off\" formControlName=\"notes\" rows=\"5\" id=\"notes\" name=\"notes\"\r\n class=\"p-inputtext p-component p-element input-field border-1 w-full\"\r\n placeholder=\"enter notes\"></textarea>\r\n <small *ngIf=\"dispatchForm.get('notes')?.invalid && dispatchForm.get('notes')?.touched\"\r\n class=\"text-danger-color block mt-1\">\r\n Notes are required.\r\n </small>\r\n </div>\r\n <!-- Notes -->\r\n\r\n <!-- Address with Copy Icon -->\r\n <div class=\"col-12 md:col-6 pt-0\">\r\n <div class=\"mb-1\">Address</div>\r\n <ng-container *ngIf=\"(clinicAddress$ | async) as address\">\r\n <address #completeAddress>{{address?.street}}, {{address?.state}}, {{address?.postalCode}}\r\n <i class=\"pi pi-copy cursor-pointer text-xl text-secondary-color\"\r\n (click)=\"copyToClipboard(completeAddress.textContent)\"></i>\r\n </address>\r\n </ng-container>\r\n </div>\r\n <!-- Address with Copy Icon -->\r\n </div>\r\n </form>\r\n </section>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { FormArray, FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'fx-configuration-panel',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ButtonModule, DialogModule, InputTextModule, FormsModule, DropdownModule, ButtonModule],\r\n templateUrl: './configuration-panel.component.html',\r\n styleUrl: './configuration-panel.component.css',\r\n})\r\nexport class ConfigurationPanelComponent implements OnInit , OnChanges{\r\n @Input() visible: boolean = false;\r\n @Input() configs: any;\r\n @Output() isVisible = new EventEmitter<boolean>();\r\n @Output() configuration = new EventEmitter<any>();\r\n @Input() tableConfigData:any;\r\n\r\n public rows: number = 1;\r\n public enableAPI: boolean = false;\r\n public api: string = '';\r\n\r\n public dynamicForm: FormGroup;\r\n public columnTypes: string[] = ['text', 'input-text', 'input-number', 'dropdown', 'smart-dropdown', 'checkbox', 'radio', 'radio-group', 'file-upload', 'textarea', 'action'];\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.dynamicForm = this.fb.group({\r\n columns: this.fb.array([])\r\n });\r\n }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n \r\n }\r\n ngOnInit(): void {\r\n if (this.tableConfigData?.value?.columns) {\r\n this.patchData(); // If data exists, patch it into the form\r\n } else {\r\n this.addColumn(); // Otherwise, add a default column\r\n }\r\n }\r\n\r\n get columns(): FormArray {\r\n return this.dynamicForm.get('columns') as FormArray;\r\n }\r\n\r\n // **🔹 Add Column Dynamically**\r\n public addColumn(): void {\r\n const columnFormGroup = this.fb.group({\r\n header: ['', Validators.required],\r\n cellType: ['', Validators.required],\r\n placeholder: '',\r\n options: this.fb.array([]),\r\n apiUrl: '',\r\n valueKey: '',\r\n labelKey: '',\r\n className: '',\r\n apiKey: '',\r\n isMultiselect: false,\r\n checkedValue: '',\r\n unCheckedValue: '',\r\n checkBoxLabel: '',\r\n isRequired:false,\r\n errorMessage:'',\r\n // actionName: '',\r\n // actionIconPath: '',\r\n // apiType:'',\r\n // apiUrlToCall: '',\r\n action: this.fb.array([]),\r\n payloadOptions: this.fb.array([])\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 isMultiselect: false,\r\n checkedValue: [currentColumn.checkedValue],\r\n unCheckedValue: [currentColumn.unCheckedValue],\r\n checkBoxLabel:[currentColumn.checkBoxLabel],\r\n isRequired:[currentColumn.isRequired],\r\n errorMessage:[currentColumn.errorMessage],\r\n // actionName: [currentColumn.actionName],\r\n // actionIconPath: [currentColumn.actionIconPath],\r\n // apiType:[currentColumn.apiType],\r\n // apiUrlToCall: [currentColumn.apiUrlToCall],\r\n // payloadOptions:this.fb.array(\r\n // currentColumn.payloadOptions.map((option: any) => this.fb.group({\r\n // payloadOptionName: [option.payloadOptionName, Validators.required],\r\n // payloadOptionValue: [option.payloadOptionValue, Validators.required]\r\n // }))\r\n // ),\r\n action: this.fb.array([]),\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 // public addPayloadOption(columnIndex: number): void {\r\n // const optionGroup = this.fb.group({\r\n // payloadOptionName: ['', Validators.required],\r\n // payloadOptionValue: ['', Validators.required]\r\n // });\r\n\r\n // this.getPayloadOptions(columnIndex).push(optionGroup);\r\n // }\r\n\r\n\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 // public getPayloadOptions(columnIndex: number): FormArray {\r\n // return this.columns.at(columnIndex).get('payloadOptions') as FormArray;\r\n // }\r\n\r\n // **🔹 Close Dialog**\r\n public closeDialog(): void {\r\n this.isVisible.emit(false);\r\n }\r\n\r\n // **🔹 Save Configuration**\r\n public saveConfiguration(): void {\r\n this.configuration.emit({\r\n rows: this.rows,\r\n columns: this.dynamicForm.value?.columns,\r\n enableAPI: this.enableAPI,\r\n api: this.api\r\n });\r\n this.isVisible.emit(false);\r\n }\r\n\r\n public onSubmit(): void {\r\n console.log(\"Value columns formArray\", this.dynamicForm.value);\r\n }\r\n\r\n // public patchData(): void {\r\n // this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;\r\n // this.api = this.tableConfigData?.value?.generalValues?.api;\r\n // this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n // // Creating the FormGroup for each column\r\n // const columnFormGroup = this.fb.group({\r\n // header: [column.header || '', Validators.required],\r\n // cellType: [column.cellType || '', Validators.required],\r\n // placeholder: [column.placeholder || ''],\r\n // options: this.fb.array(\r\n // column.options ? column.options.map((option: any) => \r\n // this.fb.group({\r\n // optionName: [option.optionName, Validators.required],\r\n // optionValue: [option.optionValue, Validators.required]\r\n // })\r\n // ) : []\r\n // ),\r\n // apiUrl: [column.apiUrl || ''],\r\n // valueKey: [column.valueKey || ''],\r\n // labelKey: [column.labelKey || ''],\r\n // className: [column.className || ''],\r\n // apiKey: [column.apiKey || ''],\r\n // isMultiselect: [column.isMultiselect || false],\r\n // checkBoxLabel: [column.checkBoxLabel || ''],\r\n // checkedValue: [column.checkedValue || ''],\r\n // unCheckedValue: [column.unCheckedValue || ''],\r\n // isRequired:[column.isRequired || false],\r\n // errorMessage:[column.errorMessage || ''],\r\n // });\r\n \r\n \r\n // this.columns.push(columnFormGroup);\r\n // });\r\n // }\r\n\r\n public patchData(): void {\r\n this.enableAPI = this.tableConfigData?.value?.generalValues?.enableAPI;\r\n this.api = this.tableConfigData?.value?.generalValues?.api;\r\n \r\n this.tableConfigData?.value?.columns.forEach((column: any) => {\r\n const actionArray = this.fb.array(\r\n column.action\r\n ? column.action.map((action: any) =>\r\n this.fb.group({\r\n actionName: [action.actionName || ''],\r\n actionIconPath: [action.actionIconPath || ''],\r\n apiType: [action.apiType || ''],\r\n apiUrlToCall: [action.apiUrlToCall || ''],\r\n isConfirmationRequired: [action.isConfirmationRequired || ''],\r\n payloadOptions: this.fb.array(\r\n action.payloadOptions\r\n ? action.payloadOptions.map((payload: any) =>\r\n this.fb.group({\r\n payloadOptionName: [payload.payloadOptionName || '', Validators.required],\r\n payloadOptionValue: [payload.payloadOptionValue || '', Validators.required]\r\n })\r\n )\r\n : []\r\n )\r\n })\r\n )\r\n : []\r\n );\r\n \r\n const columnFormGroup = this.fb.group({\r\n header: [column.header || '', Validators.required],\r\n cellType: [column.cellType || '', Validators.required],\r\n placeholder: [column.placeholder || ''],\r\n options: this.fb.array(\r\n column.options\r\n ? column.options.map((option: any) =>\r\n this.fb.group({\r\n optionName: [option.optionName, Validators.required],\r\n optionValue: [option.optionValue, Validators.required]\r\n })\r\n )\r\n : []\r\n ),\r\n apiUrl: [column.apiUrl || ''],\r\n valueKey: [column.valueKey || ''],\r\n labelKey: [column.labelKey || ''],\r\n className: [column.className || ''],\r\n apiKey: [column.apiKey || ''],\r\n isMultiselect: [column.isMultiselect || false],\r\n checkBoxLabel: [column.checkBoxLabel || ''],\r\n checkedValue: [column.checkedValue || ''],\r\n unCheckedValue: [column.unCheckedValue || ''],\r\n isRequired: [column.isRequired || false],\r\n errorMessage: [column.errorMessage || ''],\r\n action: actionArray // ✅ add the FormArray of actions here\r\n });\r\n \r\n this.columns.push(columnFormGroup);\r\n });\r\n }\r\n \r\n\r\n\r\n getActions(columnIndex: number): FormArray {\r\n return this.columns.at(columnIndex).get('action') as FormArray;\r\n }\r\n \r\n addActionToColumn(columnIndex: number): void {\r\n const actions = this.getActions(columnIndex);\r\n actions.push(this.fb.group({\r\n actionName: [''],\r\n actionIconPath: [''],\r\n apiType: [''],\r\n apiUrlToCall: [''],\r\n isConfirmationRequired: [''],\r\n payloadOptions: this.fb.array([])\r\n }));\r\n }\r\n \r\n removeActionFromColumn(columnIndex: number, actionIndex: number): void {\r\n const actions = this.getActions(columnIndex);\r\n actions.removeAt(actionIndex);\r\n }\r\n \r\n getPayloadOptions(columnIndex: number, actionIndex: number): FormArray {\r\n return this.getActions(columnIndex)\r\n .at(actionIndex)\r\n .get('payloadOptions') as FormArray;\r\n }\r\n \r\n addPayloadOption(columnIndex: number, actionIndex: number): void {\r\n const payloadOptions = this.getPayloadOptions(columnIndex, actionIndex);\r\n payloadOptions.push(this.fb.group({\r\n payloadOptionName: [''],\r\n payloadOptionValue: ['']\r\n }));\r\n }\r\n \r\n}\r\n","<p-dialog header=\"Edit Configurations\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\"\r\n [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <!-- <ng-template pTemplate=\"header\">\r\n <div class=\"flex p-2 bg-white border-2\">\r\n <p class=\"text-base\">Edit Configurations</p>\r\n </div>\r\n </ng-template> -->\r\n <div class=\"flex flex-col gap-4 bg-white p-2 border-2 border-gray-200\">\r\n <div class=\"flex items-center gap-4 mb-8 w-full\">\r\n <div class=\"w-1/3\">\r\n <label for=\"rows\" class=\"font-semibold w-24\">Rows</label>\r\n <input type=\"text\" [disabled]=\"enableAPI\" [(ngModel)]=\"rows\" placeholder=\"rows\" class=\"form__input\" id=\"name\"\r\n 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\"\r\n 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)\" class=\"text-white px-3 py-1 rounded-md hover:bg-red-600\"\r\n *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 <div class=\"col-span-3\" *ngIf=\"['smart-dropdown', 'dropdown'].includes(column.value.cellType)\">\r\n <label class=\"font-semibold\"> <input type=\"checkbox\" formControlName=\"isMultiselect\"\r\n class=\"custom-margin\" />Multiselect</label>\r\n <!-- <select formControlName=\"isMultiselect\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"true\">Enable</option>\r\n <option value=\"false\">Disable</option>\r\n </select> -->\r\n </div>\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">PlaceHolder:</label>\r\n <input formControlName=\"placeholder\" placeholder=\"Enter Placeholder\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n <ng-container *ngIf=\"['checkbox'].includes(column.value.cellType)\">\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">CheckedValue:</label>\r\n <input formControlName=\"checkedValue\" placeholder=\"Enter checkedvalue\"\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\">UnCheckedValue:</label>\r\n <input formControlName=\"unCheckedValue\" placeholder=\"Enter UnCheckedValue\"\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\">Checkbox Label:</label>\r\n <input formControlName=\"checkBoxLabel\" placeholder=\"Enter Checkbox Label\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"['input-text','input-number'].includes(column.value.cellType)\">\r\n <div class=\"col-span-3\">\r\n <label for=\"isRequired\" class=\"font-semibold w-24\">\r\n <input type=\"checkbox\" formControlName=\"isRequired\" class=\"custom-margin\" />Required</label>\r\n </div>\r\n\r\n <div class=\"col-span-3\">\r\n <label class=\"font-semibold\">Error Message:</label>\r\n <input formControlName=\"errorMessage\" placeholder=\"Enter Checkbox Label\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n </div>\r\n </ng-container>\r\n\r\n\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 <button type=\"button\" (click)=\"addOption(i)\" class=\"custom-save-button justify-end\"> ✚ </button>\r\n\r\n <div formArrayName=\"options\" class=\"card-height\">\r\n <div *ngFor=\"let option of getOptions(i).controls; let j = index\" [formGroupName]=\"j\"\r\n class=\"relative grid grid-cols-1 gap-4 items-center mt-2 option-card\">\r\n\r\n <button type=\"button\" (click)=\"getOptions(i).removeAt(j)\" class=\"absolute top-0 right-0 bg-transparent text-red-500 hover:text-red-700 \r\n text-xl font-bold p-1 cursor-pointer\">\r\n ❌\r\n </button>\r\n\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 </div>\r\n\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 *ngIf=\"['action'].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\">Action Name:</label>\r\n <input formControlName=\"actionName\" placeholder=\"Enter Action 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-4\">\r\n <label class=\"font-semibold\">Action Icon Path:</label>\r\n <input formControlName=\"actionIconPath\" placeholder=\"Enter Icon Path\" \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\">API Type:</label>\r\n <select formControlName=\"apiType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n </select>\r\n </div>\r\n <div class=\"col-span-4\">\r\n <label class=\"font-semibold\">API URL:</label>\r\n <input formControlName=\"apiUrlToCall\" 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\">API Payload:</label>\r\n <button type=\"button\" (click)=\"addPayloadOption(i)\" class=\"custom-save-button justify-end\"> ✚ </button>\r\n\r\n <div formArrayName=\"payloadOptions\" class=\"card-height\">\r\n <div *ngFor=\"let option of getPayloadOptions(i).controls; let j = index\" [formGroupName]=\"j\" \r\n class=\"relative grid grid-cols-1 gap-4 items-center mt-2 option-card\">\r\n \r\n <button type=\"button\" (click)=\"getPayloadOptions(i).removeAt(j)\" \r\n class=\"absolute top-0 right-0 bg-transparent text-red-500 hover:text-red-700 \r\n text-xl font-bold p-1 cursor-pointer\">\r\n ❌\r\n </button>\r\n \r\n <input formControlName=\"payloadOptionName\" 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=\"payloadOptionName\" 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 </div>\r\n </div>\r\n </div>\r\n \r\n </div> -->\r\n\r\n\r\n <!-- Only show if cellType is 'action' -->\r\n <div *ngIf=\"column.value.cellType === 'action'\" class=\"grid grid-cols-1 gap-4 mt-4\">\r\n\r\n <!-- Add Action Button -->\r\n <div class=\"flex justify-end mb-2\">\r\n <button type=\"button\" (click)=\"addActionToColumn(i)\"\r\n class=\"bg-orange-400 text-white px-3 py-1 rounded-md hover:bg-blue-600\">\r\n ➕ Add Action\r\n </button>\r\n </div>\r\n\r\n <!-- Loop through actions -->\r\n <div formArrayName=\"action\">\r\n <div *ngFor=\"let actionCtrl of getActions(i).controls; let j = index\" [formGroupName]=\"j\"\r\n class=\"border p-4 rounded-md mb-4 bg-gray-50 relative\">\r\n\r\n <!-- Remove action button -->\r\n <button type=\"button\" (click)=\"removeActionFromColumn(i, j)\"\r\n class=\"absolute top-0 right-0 text-red-600 text-xl font-bold hover:text-red-800\">❌</button>\r\n\r\n <div class=\"mb-2\">\r\n <label class=\"font-semibold\">Action Name:</label>\r\n <input formControlName=\"actionName\" placeholder=\"Enter Action Name\"\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 <div class=\"mb-2\">\r\n <label class=\"font-semibold\">Action Icon Path:</label>\r\n <input formControlName=\"actionIconPath\" placeholder=\"Enter Icon Path\"\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 <div class=\"mb-2\">\r\n <label class=\"font-semibold\">API Type:</label>\r\n <select formControlName=\"apiType\" class=\"w-full border rounded-md px-3 py-2\">\r\n <option value=\"GET\">GET</option>\r\n <option value=\"PUT\">PUT</option>\r\n <option value=\"POST\">POST</option>\r\n <option value=\"DELETE\">DELETE</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"mb-2\">\r\n <label class=\"font-semibold\">API URL:</label>\r\n <input formControlName=\"apiUrlToCall\" 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\r\n <!-- Payload Options -->\r\n <div class=\"mb-2\">\r\n <div class=\"flex justify-between items-center\">\r\n <label class=\"font-semibold\">API Payload:</label>\r\n <button type=\"button\" (click)=\"addPayloadOption(i, j)\"\r\n class=\"ml-2 text-green-600 font-bold text-xl\">✚</button>\r\n </div>\r\n <div formArrayName=\"payloadOptions\" class=\"mt-2\" class=\"payload_action\">\r\n <div *ngFor=\"let payload of getPayloadOptions(i, j).controls; let k = index\" [formGroupName]=\"k\"\r\n class=\"relative grid grid-cols-1 gap-2 items-center mb-2 border-1 border p-2 border-gray-500\">\r\n\r\n <button type=\"button\" (click)=\"getPayloadOptions(i, j).removeAt(k)\"\r\n class=\"text-red-500 hover:text-red-700 text-xl font-bold flex justify-end items-center\">❌</button>\r\n\r\n <input formControlName=\"payloadOptionName\" placeholder=\"Option Name\"\r\n class=\"w-full border rounded-md px-3 py-2 focus:ring focus:ring-blue-200\" />\r\n <input formControlName=\"payloadOptionValue\" placeholder=\"Option Value\"\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 </div>\r\n\r\n <div class=\"mb-2\">\r\n <label for=\"isConfirmationRequired\" class=\"font-semibold w-24\">\r\n <input type=\"checkbox\" formControlName=\"isConfirmationRequired\" class=\"custom-margin\" /> Confirmation Required</label>\r\n </div>\r\n\r\n </div>\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()\" 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 </div>\r\n </ng-template>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { FxComponent, FxData, FxMode, FxSettingComponent, FxSettingsService, FxUtils } from '@instantsys-labs/fx';\r\nimport { Dialog } from 'primeng/dialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { ConfigurationPanelComponent } from '../configuration-panel/configuration-panel.component';\r\n\r\n@Component({\r\n selector: 'fx-settings-panel',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, InputTextModule, ConfigurationPanelComponent],\r\n templateUrl: './settings-panel.component.html',\r\n styleUrl: './settings-panel.component.css'\r\n})\r\nexport class SettingsPanelComponent extends FxComponent implements OnInit ,OnChanges {\r\n \r\n @Output() configuration = new EventEmitter<any>();\r\n public visible: boolean = false;\r\n @Input() tableData:any;\r\n tableConfig:any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.tableConfig = this.tableData;\r\n }\r\n\r\n public openSettingDialog(): void {\r\n this.visible = true;\r\n }\r\n}\r\n","<fx-configuration-panel [visible]=\"visible\" (isVisible)=\"visible = $event\" [tableConfigData]=\"tableConfig\" (configuration)=\"configuration.emit($event)\"></fx-configuration-panel>\r\n\r\n<div class=\"fx-element\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"fxData.$fxForm?.$mode !== FxMode.VIEW\">\r\n <div class=\"fx-overlay border-gray-400 border rounded cursor-pointer\" (click)=\"onElementSelect(fxData)\"\r\n (dblclick)=\"openSettingDialog()\">\r\n <div class=\"fx-actions flex justify-between\">\r\n\r\n <div class=\"bg-gray-700 text-gray-300 px-2 rounded-t ml-2 text-xs flex justify-center items-center\">\r\n <div>#{{ fxData.name }}-<span class=\"text-xs italic\">{{ fxData.id }}</span></div>\r\n </div>\r\n\r\n <div class=\"flex justify-around items-end mr-2\">\r\n <div class=\"cursor-pointer bg-secondary text-white w-8 mr-1 text-center rounded-t\" title=\"Settings\"\r\n (click)=\"fxSettingService.openSetting(fxData)\">\r\n <i class=\"fa fa-cog text-xs\"></i>\r\n </div>\r\n <div (click)=\"deleteElement(fxData)\"\r\n class=\"cursor-pointer bg-red-600 text-white w-8 mr-1 text-center rounded-t\" title=\"Delete\">\r\n <i class=\"fa fa-times text-xs\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container #dynamicComponentContainer></ng-container>\r\n </ng-container>\r\n</div>","import { AfterViewInit, ChangeDetectorRef, Component, inject, Input, NgZone, OnDestroy, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Action, 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 {forkJoin, map, Observable, Subject, takeUntil } from 'rxjs';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { DialogModule } from 'primeng/dialog';\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' | 'action';\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 isMultiselect?: boolean;\r\n checkedValue?: any;\r\n unCheckedValue?: any;\r\n checkBoxLabel?: string;\r\n isRequired?:boolean,\r\n errorMessage?:string,\r\n // actionName?: string,\r\n // actionIconPath?: string,\r\n // apiType?:string,\r\n // apiUrlToCall?: string,\r\n // payloadOptions?: string[]\r\n action: string[]\r\n}\r\nexport interface TableConfig {\r\n columns: TableColumnConfig[];\r\n rows: any[];\r\n // apiDataToDrawTable: any[]\r\n}\r\n@Component({\r\n selector: 'fx-dynamic-table',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SettingsPanelComponent, ReactiveFormsModule,MultiSelectModule,InputNumberModule,InputTextModule,DropdownModule,ToastModule,ConfirmDialogModule,DialogModule],\r\n providers: [MessageService,ConfirmationService],\r\n templateUrl: './dynamic-table.component.html',\r\n styleUrl: './dynamic-table.component.scss',\r\n})\r\n\r\nexport class DynamicTableComponent extends FxBaseComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() tableRows: Array<any> = [];\r\n @Input() previewType: FxMode = FxMode.VIEW;\r\n @Input() tableConfig: any = {\r\n columns: [\r\n { header: 'Column 1', cellType: 'text' },\r\n { header: 'Column 2', cellType: 'text' },\r\n { header: 'Column 3', cellType: 'text' },\r\n { header: 'Column 4', cellType: 'text' },\r\n { header: 'Column 5', cellType: 'text' },\r\n ],\r\n};\r\n\r\n private destroy$ = new Subject<Boolean>();\r\n // public uploadedImages: Array<Record<string, string | File | null> | null> = [];\r\n public uploadedImages: Array<Array<{ result: string, file: File | null}>> = [];\r\n\r\npublic generalValues: any;\r\nselectedAction: any;\r\nselectedRow: any;\r\nselectedRowIndex: any;\r\ndisplayConfirmationDialog: boolean = false;\r\napiDataToDrawTable: any[] =[];\r\n\r\n public tableFormControl = new FormControl();\r\n public smartDropdownOptions: { [key: string]: Array<{ name: string, value: string }> } = {};\r\n private http = inject(HttpClient);\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService, private messageService: MessageService, private confirmationService: ConfirmationService) {\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,dynamicTableValues?.columns);\r\n }\r\n })\r\n this.tableConfig = this.initializeCheckboxDefaults(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 public uploadImage(event: Event, rowIndex: number): void {\r\n const files = (event.target as HTMLInputElement).files;\r\n if (files && files.length > 0) {\r\n this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n \r\n Array.from(files).forEach((file: File) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uploadedImages[rowIndex].push({\r\n result: reader.result as string,\r\n file: file\r\n });\r\n \r\n // Optionally add to tableConfig if only one file is tracked there\r\n const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n console.log(\"tableConfig\", this.tableConfig);\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n }\r\n \r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'column-size', $title: 'No. of columns', value: 1 }),\r\n new FxStringSetting({ key: 'table-config', $title: 'Table Configuration', value: {} }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n public getArray(count: number): number[] {\r\n return Array.from({ length: count });\r\n }\r\n\r\n public onChangeConfiguration(event: any): void { \r\n this.generalValues = {\r\n enableAPI: event?.enableAPI,\r\n api: event?.api\r\n }\r\n const columns = event.columns.map((col: any) => {\r\n return {\r\n header: col?.header,\r\n cellType: col?.cellType,\r\n placeholder: col?.placeholder,\r\n options: col?.options,\r\n apiUrl: col?.apiUrl,\r\n valueKey: col?.valueKey,\r\n labelKey: col?.labelKey,\r\n className: col?.className,\r\n apiKey: col?.apiKey,\r\n isMultiselect: col?.isMultiselect,\r\n checkedValue: col?.checkedValue,\r\n unCheckedValue: col?.unCheckedValue,\r\n checkBoxLabel:col?.checkBoxLabel,\r\n isRequired:col?.isRequired,\r\n errorMessage:col?.errorMessage,\r\n // actionName: col?.actionName,\r\n // actionIconPath: col?.actionIconPath,\r\n // apiType:col?.apiType,\r\n // apiUrlToCall: col?.apiUrlToCall,\r\n // payloadOptions: col?.payloadOptions\r\n action: col?.action \r\n }\r\n });\r\n if(!event?.enableAPI) {\r\n this.tableConfig.columns = columns;\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => ({ name: `SKU-${index + 1}`, age: index % 2 !== 0, gender: 'male' }))\r\n // this.tableConfig.rows = Array.from({ length: +event?.rows }, (e, index) => {\r\n // const rows = columns.map((c: any) => {\r\n // return {\r\n // c?.header: null\r\n // }\r\n // })\r\n // return rows\r\n // })\r\n this.tableConfig.rows = Array.from({ length: +event?.rows }, (_, index) => {\r\n return columns.reduce((acc: any, c: any) => {\r\n acc[c?.header] = ''; // Initialize each column key with null\r\n return acc;\r\n }, {});\r\n });\r\n \r\n this.fetchSmartDropdownData();\r\n }\r\n if(event?.enableAPI) {\r\n this.drawTable(event, columns)\r\n this.tableConfig = {\r\n columns: columns,\r\n rows: []\r\n };\r\n }\r\n this.tableConfig = this.initializeCheckboxDefaults(this.tableConfig);\r\n this.tableConfig.apiDataToDrawTable = this.apiDataToDrawTable;\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.fxData.value = this.tableConfig;\r\n this.tableFormControl.reset();\r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n\r\n private updateSettings(): void{\r\n if(this.fxData.settings){\r\n for(let setting of this.fxData.settings){\r\n if(setting.key === 'table-config'){\r\n setting.value = this.tableConfig;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // public drawTable(event: any, columns: any): void {\r\n // let rows;\r\n // this.http.get(event.api).subscribe((res: any) => {\r\n // if(res) {\r\n // rows = res.map((item: any) => {\r\n // const newObj: Record<string, any> = {};\r\n // columns.forEach((col: any) => {\r\n // newObj[col.header] = item[col.apiKey];\r\n // });\r\n // return newObj;\r\n // });\r\n // this.tableConfig = {\r\n // columns,\r\n // rows\r\n // }\r\n // this.tableConfig.generalValues = this.generalValues;\r\n // this.fxData.value = this.tableConfig;\r\n // this.tableFormControl.reset();\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n // }\r\n // })\r\n // }\r\n\r\n public 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 this.apiDataToDrawTable = res;\r\n \r\n rows = res.map((item: any) => {\r\n const newObj: Record<string, any> = {};\r\n columns.forEach((col: any) => {\r\n newObj[col.header] = item[col.apiKey] || '';\r\n });\r\n return newObj;\r\n });\r\n this.tableConfig = {\r\n columns,\r\n rows\r\n }\r\n this.tableConfig.generalValues = this.generalValues;\r\n this.tableConfig.apiDataToDrawTable = this.apiDataToDrawTable;\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 deleteFile(rowIndex: number, imageIndex: number): void {\r\n // if (this.uploadedImages[rowIndex]) {\r\n // this.uploadedImages[rowIndex].splice(imageIndex, 1);\r\n \r\n // const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n // this.tableFormControl.setValue(this.tableConfig);\r\n // }\r\n // }\r\n\r\n public deleteFile(rowIndex: number, imageIndex: number): void {\r\n if (this.uploadedImages[rowIndex]) {\r\n const removedFile = this.uploadedImages[rowIndex][imageIndex];\r\n \r\n // Track the file to delete if it's an uploaded file (i.e., has URL and no File object)\r\n if (removedFile?.result && typeof removedFile.result === 'string' && removedFile.file === null) {\r\n this.tableConfig.rows[rowIndex].filesToDelete = this.tableConfig.rows[rowIndex].filesToDelete || [];\r\n this.tableConfig.rows[rowIndex].filesToDelete.push(removedFile.result);\r\n }\r\n \r\n // Remove the file from the UI\r\n this.uploadedImages[rowIndex].splice(imageIndex, 1);\r\n \r\n const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n this.tableFormControl.setValue(this.tableConfig);\r\n }\r\n }\r\n \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 parseUrls(url: string, rowIndex: 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 \r\n // this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n // this.uploadedImages[rowIndex].push({\r\n // result: imageURL,\r\n // file: null\r\n // });\r\n \r\n // const columnHeader = this.tableConfig.columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.file);\r\n \r\n // this.tableFormControl.setValue(this.tableConfig);\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 parseUrls(urls: string[], rowIndex: number, columns: any): void {\r\n if (!Array.isArray(urls) || !urls.length) return;\r\n \r\n this.uploadedImages[rowIndex] = this.uploadedImages[rowIndex] || [];\r\n \r\n const columnHeader = columns.find((f: any) => f.cellType === 'file-upload')?.header;\r\n if (!columnHeader) return;\r\n \r\n const imageFetches: Observable<string>[] = [];\r\n \r\n urls.forEach((url: string) => {\r\n if (url) {\r\n const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n map((imageBlob: Blob) => URL.createObjectURL(imageBlob))\r\n );\r\n imageFetches.push(image$);\r\n }\r\n });\r\n \r\n if (!imageFetches.length) return;\r\n \r\n forkJoin(imageFetches).subscribe({\r\n next: (imageURLs: string[]) => {\r\n imageURLs.forEach((imageURL: string) => {\r\n this.uploadedImages[rowIndex].push({\r\n result: imageURL,\r\n file: null\r\n });\r\n });\r\n \r\n // this.tableConfig.rows[rowIndex][columnHeader] = this.uploadedImages[rowIndex].map(img => img.result);\r\n \r\n // this.tableFormControl.setValue(this.tableConfig);\r\n },\r\n error: (error) => {\r\n console.error('Error fetching one or more images:', error);\r\n }\r\n });\r\n }\r\n \r\n onCheckboxChange(event: Event, row: any, column: any): void {\r\n const input = event.target as HTMLInputElement;\r\n row[column.header] = input.checked ? column.checkedValue : column.unCheckedValue;\r\n }\r\n \r\n\r\n initializeCheckboxDefaults(tableData: any): void {\r\n tableData.rows.forEach((row: any) => {\r\n tableData.columns.forEach((column: any) => {\r\n if (column.cellType === 'checkbox' && column.unCheckedValue && !row[column.header]) {\r\n row[column.header] = column.unCheckedValue;\r\n }\r\n });\r\n });\r\n return tableData;\r\n }\r\n\r\n handleAction(row: any, action: any,rowIndex:any): void {\r\n if (action.isConfirmationRequired) {\r\n this.selectedAction = action;\r\n this.selectedRow = row;\r\n this.selectedRowIndex = rowIndex\r\n this.displayConfirmationDialog = true;\r\n } else {\r\n this.executeAction(row, action,rowIndex);\r\n }\r\n }\r\n \r\n confirmAction(): void {\r\n this.executeAction(this.selectedRow, this.selectedAction,this.selectedRowIndex);\r\n this.displayConfirmationDialog = false;\r\n }\r\n \r\n cancelAction(): void {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: 'Cancelled',\r\n detail: 'Action was cancelled',\r\n life: 2000\r\n });\r\n this.displayConfirmationDialog = false;\r\n }\r\n \r\n // handleAction(row: any, action: any): void {\r\n // if (!action || !action.apiType || !action.payloadOptions) {\r\n // console.warn('Invalid action config:', action);\r\n // return;\r\n // }\r\n \r\n // const payload: { [key: string]: any } = {};\r\n \r\n // action.payloadOptions.forEach((option: any) => {\r\n // const key = option.payloadOptionName;\r\n // const value = option.payloadOptionValue ?? row[option.payloadOptionName];\r\n // if (key) {\r\n // payload[key] = value;\r\n // }\r\n // });\r\n \r\n // const handleSuccess = (res: any) => {\r\n // const actionKey = action.actionName || 'defaultAction';\r\n\r\n // if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n // row.response = {};\r\n // }\r\n \r\n // row.response[actionKey] = res;\r\n \r\n // this.messageService.add({\r\n // severity: 'success',\r\n // summary: 'Success',\r\n // detail: `Action \"${actionKey}\" completed successfully`,\r\n // life: 3000\r\n // });\r\n // };\r\n \r\n\r\n // const handleError = (err: any) => {\r\n // row.response = { error: err };\r\n // this.messageService.add({\r\n // severity: 'error',\r\n // summary: 'Error',\r\n // detail: 'Something went wrong',\r\n // life: 3000\r\n // });\r\n // };\r\n \r\n // switch (action.apiType) {\r\n // case 'POST':\r\n // this.http.post(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'PUT':\r\n // this.http.put(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'DELETE':\r\n // this.http.delete(action.apiUrlToCall, { body: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // case 'GET':\r\n // this.http.get(action.apiUrlToCall, { params: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n // break;\r\n \r\n // default:\r\n // console.warn('Unknown API type:', action.apiType);\r\n // }\r\n // }\r\n \r\n // handleAction(row: any, action: any): void {\r\n // if (action.isConfirmationRequired) {\r\n // this.confirmationService.confirm({\r\n // message: `Are you sure you want to perform \"${action.actionName}\"?`,\r\n // header: 'Confirmation',\r\n // icon: 'pi pi-exclamation-triangle',\r\n // accept: () => this.executeAction(row, action),\r\n // reject: () => {\r\n // this.messageService.add({\r\n // severity: 'info',\r\n // summary: 'Cancelled',\r\n // detail: 'Action was cancelled',\r\n // life: 2000\r\n // });\r\n // }\r\n // });\r\n // } else {\r\n // this.executeAction(row, action);\r\n // }\r\n // }\r\n \r\n\r\n executeAction(row: any, action: any,rowIndex:any): void {\r\n const payload: { [key: string]: any } = {};\r\n \r\n action.payloadOptions.forEach((option: any) => {\r\n const key = option.payloadOptionName;\r\n const value = option.payloadOptionValue || this.tableConfig?.apiDataToDrawTable[rowIndex][key];\r\n if (key) {\r\n payload[key] = value;\r\n }\r\n });\r\n \r\n const actionKey = action.actionName || 'defaultAction';\r\n \r\n const handleSuccess = (res: any) => {\r\n if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n row.response = {};\r\n }\r\n \r\n row.response[actionKey] = res;\r\n \r\n this.messageService.add({\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: `Action \"${actionKey}\" completed successfully`,\r\n life: 3000\r\n });\r\n };\r\n \r\n const handleError = (err: any) => {\r\n if (!row.response || typeof row.response !== 'object' || Array.isArray(row.response)) {\r\n row.response = {};\r\n }\r\n \r\n row.response[actionKey] = { error: err };\r\n \r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: `Action \"${actionKey}\" failed`,\r\n life: 3000\r\n });\r\n };\r\n \r\n switch (action.apiType) {\r\n case 'POST':\r\n this.http.post(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'PUT':\r\n this.http.put(action.apiUrlToCall, payload).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'DELETE':\r\n this.http.delete(action.apiUrlToCall, { body: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n case 'GET':\r\n this.http.get(action.apiUrlToCall, { params: payload }).subscribe({ next: handleSuccess, error: handleError });\r\n break;\r\n default:\r\n console.warn('Unknown API type:', action.apiType);\r\n }\r\n }\r\n \r\n \r\n \r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","<fx-settings-panel [fxData]=\"fxData\" [tableData]=\"fxData\" (configuration)=\"onChangeConfiguration($event)\">\r\n <div *ngIf=\"fxData\">\r\n <table style=\"width: 100%;\" class=\"formBuilder_dynamic_table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableConfig.columns\">{{ column.header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of tableConfig.rows; let rowIndex = index\">\r\n <td *ngFor=\"let column of tableConfig.columns\">\r\n <ng-container [ngSwitch]=\"column.cellType\">\r\n <span [class]=\"column?.className\" *ngSwitchCase=\"'text'\">{{row[column.header]}}</span>\r\n\r\n <!-- <input [class]=\"column?.className\" *ngSwitchCase=\"'input-text'\" type=\"text\" [placeholder]=\"column?.placeholder\"\r\n [(ngModel)]=\"row[column.header]\" /> -->\r\n\r\n <ng-container *ngSwitchCase=\"'input-text'\">\r\n <input [class]=\"column?.className\" type=\"text\" [placeholder]=\"column?.placeholder\"\r\n [(ngModel)]=\"row[column.header]\" [required]=\"column?.isRequired\" #model=\"ngModel\" />\r\n\r\n <div *ngIf=\"column?.isRequired && model.invalid && model.touched\" class=\"text-red-500 text-sm mt-1\">\r\n {{ column?.errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n <input [class]=\"column?.className\" *ngSwitchCase=\"'input-number'\" type=\"number\"\r\n [placeholder]=\"column?.placeholder\" [(ngModel)]=\"row[column.header]\" />\r\n\r\n <select [class]=\"column?.className\" *ngSwitchCase=\"'dropdown'\" [(ngModel)]=\"row[column.header]\">\r\n\r\n <option *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</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 *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</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 <!-- <p-multiSelect [options]=\"smartDropdownOptions[column.header]\" [(ngModel)]=\"row[column.header]\" optionLabel=\"name\" optionValue=\"value\" placeholder=\"Select Cities\" *ngSwitchCase=\"'smart-dropdown'\"/> -->\r\n\r\n <!-- smart-dropdown handling -->\r\n <ng-container *ngSwitchCase=\"'smart-dropdown'\">\r\n\r\n <!-- Regular dropdown if isMultiselect is false or not set -->\r\n <select *ngIf=\"!column?.isMultiselect\" [class]=\"column?.className\" style=\"width: 60%;\"\r\n [(ngModel)]=\"row[column.header]\">\r\n <option *ngIf=\"column.placeholder\" value=\"\">{{ column.placeholder }}</option>\r\n <option *ngFor=\"let option of smartDropdownOptions[column.header]\" [value]=\"option?.value\">\r\n {{ option?.name }}\r\n </option>\r\n <option value=\"__other__\">Other</option>\r\n\r\n </select>\r\n <input *ngIf=\"row[column.header] === '__other__'\" type=\"text\" class=\"mt-2 p-inputtext-sm\"\r\n [placeholder]=\"'Enter other ' + column.header\" [(ngModel)]=\"row[column.header + '_other']\" />\r\n\r\n <!-- PrimeNG multiselect if isMultiselect is true -->\r\n <p-multiSelect *ngIf=\"column?.isMultiselect\" [options]=\"smartDropdownOptions[column.header]\"\r\n [(ngModel)]=\"row[column.header]\" [class]=\"column?.className\" optionLabel=\"name\" optionValue=\"value\"\r\n [placeholder]=\"column.placeholder || ('Select ' + column.header)\">\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- <input [class]=\"column?.className\" *ngSwitchCase=\"'checkbox'\" type=\"checkbox\"\r\n [(ngModel)]=\"row[column.header]\" /> -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <label [class]=\"column?.className\" class=\"inline-flex items-center gap-2\">\r\n <input type=\"checkbox\" [checked]=\"row[column.header] === column.checkedValue\"\r\n (change)=\"onCheckboxChange($event, row, column)\" />\r\n {{ column?.checkBoxLabel || '' }}\r\n </label>\r\n </ng-container>\r\n <p-toast></p-toast>\r\n <p-confirmDialog></p-confirmDialog>\r\n <ng-container *ngSwitchCase=\"'action'\">\r\n <div class=\"flex flex-row gap-6 justify-start items-start\">\r\n <div *ngFor=\"let action of column?.action\" class=\"flex flex-col items-center w-20 cursor-pointer\"\r\n (click)=\"handleAction(row, action,rowIndex)\">\r\n <img [src]=\"action?.actionIconPath\" alt=\"icon\" class=\"w-6 h-6 mb-1\" />\r\n <span class=\"text-xs text-center break-words\">\r\n {{ action?.actionName }}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\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 \r\n\r\n <div class=\"flex flex-col items-end justify-end relative\">\r\n <div class=\"flex gap-2 flex-wrap\">\r\n <div \r\n class=\"relative\" \r\n *ngFor=\"let image of uploadedImages?.[rowIndex]; let i = index\"\r\n >\r\n <img \r\n width=\"100\" \r\n [src]=\"image?.result\"\r\n alt=\"Uploaded Image\"\r\n class=\"rounded shadow\"\r\n />\r\n <button \r\n (click)=\"deleteFile(rowIndex, i)\" \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 </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 \r\n (click)=\"uploadFile.click()\" \r\n class=\"mt-2 bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600\"\r\n >\r\n Upload\r\n </button>\r\n </div>\r\n \r\n \r\n </ng-container> -->\r\n\r\n <ng-container *ngSwitchCase=\"'file-upload'\">\r\n <div class=\"flex items-center justify-end relative gap-4 flex-wrap\">\r\n <div class=\"flex gap-2 flex-wrap\">\r\n <div class=\"relative\" *ngFor=\"let image of uploadedImages?.[rowIndex]; let i = index\">\r\n <img width=\"100\" height=\"80\" [src]=\"image?.result\" alt=\"Uploaded Image\"\r\n class=\"rounded shadow orientation\" />\r\n <a (click)=\"deleteFile(rowIndex, i)\"\r\n class=\"absolute top-0 right-0 text-white rounded-md w-5 h-5 flex items-center justify-center cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\"\r\n width=\"24\" height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <input [class]=\"column?.className\" type=\"file\" name=\"file\" #uploadFile hidden multiple\r\n (change)=\"uploadImage($event, rowIndex)\" />\r\n <div class=\"flex flex-col justify-center items-center cursor-pointer\" (click)=\"uploadFile.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"uploadFile.click()\" class=\"text-base cursor-pointer\">\r\n {{ 'Upload' }}\r\n </a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea [class]=\"column?.className\" name=\"\" id=\"\" cols=\"30\" rows=\"2\"\r\n [placeholder]=\"column?.placeholder\"></textarea>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- Your main template -->\r\n<p-dialog header=\"Confirmation\"\r\n[(visible)]=\"displayConfirmationDialog\"\r\nmodal=\"true\"\r\n[closable]=\"false\"\r\n[responsive]=\"true\"\r\nstyleClass=\"confirmation-dialog\"\r\n[style]=\"{width: '400px'}\">\r\n\r\n<div class=\"p-d-flex p-ai-center\">\r\n<i class=\"pi pi-exclamation-triangle p-mr-2\" style=\"font-size: 2rem; color: #f39c12\"></i>\r\n<span>Are you sure you want to perform \"<strong>{{ selectedAction?.actionName }}</strong>\"?</span>\r\n</div>\r\n\r\n<ng-template pTemplate=\"footer\">\r\n<button pButton label=\"Yes\" icon=\"pi pi-check\" (click)=\"confirmAction()\" class=\"p-button-text\" autofocus></button>\r\n<button pButton label=\"No\" icon=\"pi pi-times\" (click)=\"cancelAction()\" class=\"p-button-text\"></button>\r\n</ng-template>\r\n</p-dialog>\r\n\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 <img src=\"assets/icons/cross.svg\" /> \r\n</fx-component>\r\n","import { \r\n Component, ElementRef, AfterViewInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy \r\n} from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as THREE from 'three';\r\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';\r\n\r\n@Component({\r\n selector: 'app-three-viewer',\r\n templateUrl: './three-viewer.component.html',\r\n styleUrls: ['./three-viewer.component.scss'],\r\n standalone: true\r\n})\r\nexport class ThreeViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n @ViewChild('viewerContainer', { static: true }) viewerContainer!: ElementRef;\r\n @Input() file!: any;\r\n @Input() manualFileUpload: Blob | null = null;\r\n\r\n private scene!: THREE.Scene;\r\n private camera!: THREE.PerspectiveCamera;\r\n private renderer!: THREE.WebGLRenderer;\r\n private loader = new STLLoader();\r\n private model!: THREE.Mesh | null;\r\n\r\n private isDragging = false;\r\n private previousMousePosition = { x: 0, y: 0 };\r\n private zoomSpeed = 1.1;\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.initThree();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['manualFileUpload']?.currentValue && this.manualFileUpload) {\r\n this.loadModelFromBlob(this.manualFileUpload);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupThreeJS();\r\n }\r\n\r\n private initThree(): void {\r\n const container = this.viewerContainer.nativeElement;\r\n this.scene = new THREE.Scene();\r\n this.scene.background = new THREE.Color(0xf0f0f0);\r\n\r\n this.camera = new THREE.PerspectiveCamera(60, container.clientWidth / container.clientHeight, 0.1, 1000);\r\n this.camera.position.set(0, 0, 100);\r\n\r\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\r\n this.renderer.setSize(container.clientWidth, container.clientHeight);\r\n container.appendChild(this.renderer.domElement);\r\n\r\n const ambientLight = new THREE.AmbientLight(0x404040, 2);\r\n this.scene.add(ambientLight);\r\n\r\n const directionalLight = new THREE.DirectionalLight(0xffffff, 1);\r\n directionalLight.position.set(1, 1, 1).normalize();\r\n this.scene.add(directionalLight);\r\n\r\n this.initControls();\r\n this.animate();\r\n }\r\n\r\n private initControls(): void {\r\n const canvas = this.renderer.domElement;\r\n\r\n // Mouse Drag for Rotation\r\n canvas.addEventListener('mousedown', (event) => {\r\n this.isDragging = true;\r\n this.previousMousePosition.x = event.clientX;\r\n this.previousMousePosition.y = event.clientY;\r\n });\r\n\r\n canvas.addEventListener('mouseup', () => {\r\n this.isDragging = false;\r\n });\r\n\r\n canvas.addEventListener('mousemove', (event) => {\r\n if (!this.isDragging) return;\r\n\r\n const deltaX = event.clientX - this.previousMousePosition.x;\r\n const deltaY = event.clientY - this.previousMousePosition.y;\r\n\r\n const rotationSpeed = 0.005;\r\n this.model?.rotateY(deltaX * rotationSpeed);\r\n this.model?.rotateX(deltaY * rotationSpeed);\r\n\r\n this.previousMousePosition.x = event.clientX;\r\n this.previousMousePosition.y = event.clientY;\r\n });\r\n\r\n // Scroll for Zoom\r\n canvas.addEventListener('wheel', (event) => {\r\n // event.preventDefault();\r\n if (event.deltaY < 0) {\r\n this.camera.position.multiplyScalar(1 / this.zoomSpeed); // Zoom In\r\n } else {\r\n this.camera.position.multiplyScalar(this.zoomSpeed); // Zoom Out\r\n }\r\n this.camera.updateProjectionMatrix();\r\n });\r\n\r\n // Resize Handling\r\n window.addEventListener('resize', () => this.onWindowResize());\r\n }\r\n\r\n private loadModelFromBlob(blob: Blob): void {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const arrayBuffer = reader.result as ArrayBuffer;\r\n const geometry = this.loader.parse(arrayBuffer);\r\n geometry.computeVertexNormals();\r\n\r\n if (this.model) {\r\n this.scene.remove(this.model);\r\n this.model.geometry.dispose();\r\n }\r\n\r\n const material = new THREE.MeshPhysicalMaterial({\r\n color: 0xF8F0E3,\r\n metalness: 0.1,\r\n roughness: 0.5,\r\n transmission: 0.5, // Creates slight translucency\r\n clearcoat: 1.0, // Adds enamel-like reflection\r\n clearcoatRoughness: 0.3\r\n });\r\n \r\n this.model = new THREE.Mesh(geometry, material);\r\n this.scene.add(this.model);\r\n\r\n this.centerModel();\r\n };\r\n reader.readAsArrayBuffer(blob);\r\n }\r\n\r\n private centerModel(): void {\r\n if (!this.model) return;\r\n const box = new THREE.Box3().setFromObject(this.model);\r\n const center = new THREE.Vector3();\r\n box.getCenter(center);\r\n this.model.position.sub(center);\r\n\r\n const size = box.getSize(new THREE.Vector3()).length();\r\n this.camera.position.set(0, 0, size * 2);\r\n this.camera.updateProjectionMatrix();\r\n this.onWindowResize();\r\n }\r\n\r\n private animate = (): void => {\r\n requestAnimationFrame(this.animate);\r\n this.renderer.render(this.scene, this.camera);\r\n };\r\n\r\n onWindowResize(): void {\r\n const container = this.viewerContainer.nativeElement;\r\n this.camera.aspect = container.clientWidth / container.clientHeight;\r\n this.camera.updateProjectionMatrix();\r\n this.renderer.setSize(container.clientWidth, container.clientHeight);\r\n }\r\n\r\n private cleanupThreeJS(): void {\r\n // Remove event listeners\r\n const canvas = this.renderer.domElement;\r\n canvas.removeEventListener('mousedown', () => {});\r\n canvas.removeEventListener('mouseup', () => {});\r\n canvas.removeEventListener('mousemove', () => {});\r\n canvas.removeEventListener('wheel', () => {});\r\n window.removeEventListener('resize', () => this.onWindowResize());\r\n\r\n // Dispose of Three.js resources\r\n if (this.model) {\r\n this.scene.remove(this.model);\r\n this.model.geometry.dispose();\r\n }\r\n this.renderer.dispose();\r\n }\r\n}\r\n","<div #viewerContainer class=\"viewer-container\"></div>\r\n ","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { forkJoin, map, Observable, Subject, takeUntil } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { FileUploadModule, UploadEvent } from 'primeng/fileupload';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { ThreeViewerComponent } from '../three-viewer/three-viewer.component';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\n\r\n@Component({\r\n selector: 'fx-uploader',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule, FileUploadModule, ToastModule, ConfirmDialogModule, DialogModule, ThreeViewerComponent],\r\n providers: [MessageService, ConfirmationService],\r\n templateUrl: './uploader.component.html',\r\n styleUrl: './uploader.component.css'\r\n})\r\nexport class UploaderComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n // public uploadFileControl = new UntypedFormControl();\r\n public uploadFileControl = new FormControl();\r\n public uploadedFiles: Array<any> = [];\r\n public formattedData: any = {\r\n uploadedFiles: [],\r\n deletedFiles: []\r\n };\r\n categories = [\r\n { label: 'Oral Images', value: 16 },\r\n { label: 'Past Docs', value: 17 },\r\n { label: 'X-Rays', value: 14 },\r\n { label: 'Profile', value: 18 },\r\n ];\r\n\r\n visible: boolean = false;\r\n fileVisible: boolean = false;\r\n selecteImageUrl: string = '';\r\n fileUrl: SafeResourceUrl | null = null;\r\n fileType: string | null = null;\r\n fileName: string | null = null;\r\n private destroy$ = new Subject<Boolean>();\r\n private http = inject(HttpClient);\r\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\r\n constructor(private cdr: ChangeDetectorRef, private fxBuilderWrapperService: FxBuilderWrapperService, private messageService: MessageService, private confirmationService: ConfirmationService, private sanitizer: DomSanitizer,\r\n private fxApiService: ApiServiceRegistry\r\n ) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData) => {\r\n this._register(this.uploadFileControl);\r\n })\r\n }\r\n\r\n stlFileVisible: boolean = false;\r\n stlFileUpload: any = null;\r\n\r\n uploadedImages: { [key: string]: { result: string, file: File | null }[] } = {};\r\n deletedFiles: any[] = [];\r\n uploadedFilesMap: { [key: string]: any[] } = {};\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n // public ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFiles: { [key: string]: string[] } = {};\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFiles[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFiles)) {\r\n // const imageFetches: Observable<string>[] = [];\r\n\r\n // urls.forEach((url: string) => {\r\n // if (url) {\r\n // const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => URL.createObjectURL(blob))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageUrls: string[]) => {\r\n // this.uploadedImages[uploaderKey] = imageUrls.map(result => ({\r\n // result,\r\n // file: null\r\n // }));\r\n // // this.uploadedFiles = [...this.uploadedImages]\r\n // this.uploadedFiles = Object.values(this.uploadedImages).flat();\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFiles: { [key: string]: string[] } = {};\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFiles[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFiles)) {\r\n // const imageFetches: Observable<{ result: string, originalUrl: string }>[] = [];\r\n\r\n // urls.forEach((url: string) => {\r\n // if (url) {\r\n // const image$ = this.http.get(url, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // just for preview\r\n // originalUrl: url\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n\r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // // const imageFetches: Observable<{ result: string; originalUrl: any; title:string ; notes:string }>[] = [];\r\n\r\n // // urls.forEach((originalUrl:any) => {\r\n // // if (originalUrl) {\r\n // // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // // map((blob: Blob) => ({\r\n // // result: URL.createObjectURL(blob), // for preview\r\n // // originalUrl: originalUrl?.originalUrl // preserve original\r\n // // }))\r\n // // );\r\n // // imageFetches.push(image$);\r\n // // }\r\n // // });\r\n\r\n // const imageFetches: Observable<{ result: string; originalUrl: any; title: string; notes: string }>[] = [];\r\n\r\n // urls.forEach((originalUrl: any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl: originalUrl?.originalUrl, // preserve original\r\n // title: originalUrl?.title || '', // default empty if not present\r\n // notes: originalUrl?.notes || ''\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result,\r\n // title: item.title,\r\n // notes: ''\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: { originalUrl: string }[] } = variables.uploadedFiles;\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const imageFetches: Observable<{ result: string; originalUrl: string }>[] = [];\r\n\r\n // urls.forEach((fileObj: any) => {\r\n // const originalUrl = fileObj?.originalUrl;\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\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 // result: e.target?.result,\r\n // name: file?.name,\r\n // id: uuidv4()\r\n // })\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // console.log(this.uploadFileControl);\r\n // }\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // 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\r\n // reader.onload = e => {\r\n // const newFile = {\r\n // id: uuidv4(),\r\n // file: file,\r\n // originalUrl: null,\r\n // result: e.target?.result,\r\n // name: file.name,\r\n // title: '',\r\n // notes: '',\r\n // category: '',\r\n // type: this.detectFileType(file),\r\n // };\r\n\r\n // this.uploadedFiles.push(newFile);\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // };\r\n\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: any[] } = {};\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n\r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const formatted = urls\r\n // .filter((fileObj: any) => !!fileObj) \r\n // .map((fileObj: any) => {\r\n // // const fileType = this.detectFileTypeFromUrl(fileObj?.originalUrl || fileObj?.name);\r\n\r\n // return {\r\n // id: uuidv4(),\r\n // file: null, \r\n // originalUrl: fileObj.originalUrl, \r\n // result: fileObj?.type === 'image' ? fileObj.originalUrl.previewUrl : null,\r\n // name: fileObj?.name || '',\r\n // title: fileObj?.title || '',\r\n // notes: fileObj?.notes || '',\r\n // category: fileObj?.category || '',\r\n // type: fileObj?.type, \r\n // };\r\n // });\r\n\r\n // if (formatted.length > 0) {\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n // });\r\n // }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n // const uploadedFilesMap: { [key: string]: any[] } = {};\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader') && (value as any)?.uploadedFiles) {\r\n // uploadedFilesMap[key] = (value as any).uploadedFiles;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables)) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'uploadedFiles' in value\r\n ) {\r\n this.uploadedFilesMap[key] = (value as any).uploadedFiles;\r\n }\r\n}\r\n\r\n\r\n // for (const [uploaderKey, files] of Object.entries(this.uploadedFilesMap)) {\r\n // const formatted = files\r\n // .filter((fileObj: any) => !!fileObj)\r\n // .map((fileObj: any) => {\r\n // const originalUrlObj = fileObj.originalUrl;\r\n // const fileName = originalUrlObj?.fileName || '';\r\n // const fileUrl = originalUrlObj?.fileUrl || '';\r\n // const previewUrl = originalUrlObj?.previewUrl;\r\n // const type = fileObj?.type;\r\n\r\n // // detect type based on file extension\r\n // // const fileType = this.detectFileTypeFromUrl(fileName || fileUrl);\r\n\r\n // return {\r\n // id: uuidv4(),\r\n // file: null, // nothing local\r\n // originalUrl: originalUrlObj, // keep whole object\r\n // result: type === 'image'\r\n // ? (previewUrl) // prefer previewUrl, fallback to fileUrl\r\n // : previewUrl,\r\n // name: fileName,\r\n // title: fileObj?.title || '',\r\n // notes: fileObj?.notes || '',\r\n // categoryId: fileObj?.categoryId || '',\r\n // type: type, // computed type\r\n // };\r\n // });\r\n\r\n // if (formatted.length > 0) {\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n });\r\n }\r\n\r\nngAfterViewInit(): void {\r\n setTimeout(()=>{\r\n const key = this.fxComponent?.fxData?.name;\r\n const files = this.uploadedFilesMap?.[key];\r\n\r\n // Strong check — ensures patching happens only when files actually exist\r\n if (key && Array.isArray(files) && files.length > 0) {\r\n\r\n const formatted = files\r\n .filter((fileObj: any) => !!fileObj)\r\n .map((fileObj: any) => {\r\n const originalUrlObj = fileObj.originalUrl;\r\n const fileName = originalUrlObj?.fileName || '';\r\n const previewUrl = originalUrlObj?.previewUrl;\r\n const type = fileObj?.type;\r\n\r\n return {\r\n id: uuidv4(),\r\n file: null,\r\n originalUrl: originalUrlObj,\r\n result: previewUrl,\r\n name: fileName,\r\n title: fileObj?.title || '',\r\n notes: fileObj?.notes || '',\r\n categoryId: fileObj?.categoryId || '',\r\n type: type,\r\n };\r\n });\r\n if (formatted.length > 0) {\r\n this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n }\r\n },200)\r\n\r\n // setTimeout(() => {\r\n \r\n // if (this.setting('isUploaderRequired') === 'true') {\r\n // // this.isRequired = true;\r\n // this.uploadFileControl?.setValidators([Validators.required]);\r\n // this.uploadFileControl?.updateValueAndValidity();\r\n // }\r\n // }, 100)\r\n\r\n}\r\n\r\n\r\n onFileSelected(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files) return;\r\n const maxFileSize = this.setting('maxFileSize');\r\n\r\n Array.from(input.files).forEach(file => {\r\n const fileType = this.detectFileType(file);\r\n\r\n const fileSizeInMB = file.size / (1024 * 1024);\r\n const allowedTypes = ['.pdf', '.stl', 'image/*','.DCM','.htl','HTL'];\r\n\r\n if (fileSizeInMB > maxFileSize) {\r\n setTimeout(() => {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'File Too Large',\r\n detail: `The file \"${file.name}\" exceeds the maximum size limit of ${maxFileSize} MB.`,\r\n life: 4000,\r\n });\r\n }, 200);\r\n return;\r\n }\r\n\r\n const isValidFileType = allowedTypes.some(type => {\r\n if (type === 'image/*') {\r\n return file.type.startsWith('image/');\r\n } else {\r\n return file.name.endsWith(type);\r\n }\r\n });\r\n\r\n if (!isValidFileType) {\r\n setTimeout(() => {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Invalid File Type',\r\n detail: `File format not supported!`,\r\n life: 4000,\r\n });\r\n }, 200);\r\n return;\r\n }\r\n\r\n const newFile: any = {\r\n id: uuidv4(),\r\n file: file,\r\n originalUrl: null,\r\n result: null,\r\n name: file.name,\r\n title: '',\r\n notes: '',\r\n categoryId: '',\r\n type: fileType\r\n };\r\n\r\n if (fileType === 'image') {\r\n const reader = new FileReader();\r\n reader.onload = e => {\r\n newFile.result = e.target?.result;\r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n \r\n };\r\n reader.readAsDataURL(file); // only images need preview\r\n } else {\r\n // non-image → push directly\r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n \r\n }\r\n });\r\n input.value = '';\r\n }\r\n\r\n\r\n // onMetaChange() {\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n\r\n onMetaChange() {\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n\r\n // ❌ Invalid if any file is missing required fields\r\n const allValid = this.uploadedFiles.every(\r\n f => f.title?.trim() && f.notes?.trim() && f.categoryId?.toString().trim()\r\n );\r\n\r\n if (!allValid) {\r\n this.uploadFileControl.setErrors({ requiredMeta: true });\r\n } else {\r\n this.uploadFileControl.markAsUntouched();\r\n this.uploadFileControl.setErrors(null);\r\n }\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 // deleteFile(index: number): void {\r\n // const [deletedFile] = this.uploadedFiles.splice(index, 1);\r\n\r\n // if (deletedFile) {\r\n // this.deletedFiles.push(deletedFile);\r\n // this.formattedData = {\r\n // ...this.formattedData,\r\n // uploadedFiles: [...this.uploadedFiles],\r\n // deletedFiles: [...this.deletedFiles]\r\n // };\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n\r\n deleteFile(index: number): void {\r\n const deletedFile = this.uploadedFiles?.[index];\r\n if (!deletedFile) return;\r\n\r\n // Ensure formattedData exists and initialize if undefined\r\n this.formattedData = this.formattedData || { uploadedFiles: [], deletedFiles: [] };\r\n\r\n // Add the deleted file to the deletedFiles array\r\n\r\n\r\n // this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n\r\n if (!(deletedFile?.file instanceof File)) {\r\n this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n }\r\n\r\n // Remove the file from uploadedFiles using filter for immutability\r\n this.uploadedFiles = this.uploadedFiles.filter((_, i) => i !== index);\r\n\r\n // Update formattedData\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles\r\n };\r\n\r\n // Set the value of the uploadFileControl\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n\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 FxStringSetting({ key: 'uploaderErrorMessage', $title: 'Error Message', value: 'Please upload files' }),\r\n new FxSelectSetting({ key: 'multiple-upload', $title: 'Multiple Uploads', value: false }, [{ option: 'Enable', value: true }, { option: 'Disable', value: false }]),\r\n new FxStringSetting({ key: 'maxFileNo', $title: 'Maximum File Upload Allowed', value: 8 }),\r\n new FxStringSetting({ key: 'maxFileSize', $title: 'Maximum File Size Allowed', value: 10 }),\r\n new FxStringSetting({ key: 'maxFileSize', $title: 'Maximum File Size Allowed', value: 10 }),\r\n // new FxSelectSetting({ key: 'isUploaderRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n detectFileType(file: File): 'image' | 'csv' | 'text' | 'pdf' | 'excel' | 'word' | 'stl' | 'other' | 'dcm' | 'htl' {\r\n const mime = (file.type || '').toLowerCase();\r\n const name = (file.name || '').toLowerCase();\r\n\r\n // Images\r\n // if (mime.startsWith('image/') || /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(name)) {\r\n // return 'image';\r\n // }\r\n\r\n if (\r\n mime.startsWith('image/') || \r\n /\\.(png|jpe?g|gif|webp|bmp|svg|tiff?|ico|heif|heic|avif)$/i.test(name)\r\n) {\r\n return 'image';\r\n}\r\n\r\n\r\n // CSV\r\n if (mime === 'text/csv' || name.endsWith('.csv')) {\r\n return 'csv';\r\n }\r\n\r\n // Text files\r\n if (mime === 'text/plain' || name.endsWith('.txt')) {\r\n return 'text';\r\n }\r\n\r\n // PDF\r\n if (mime === 'application/pdf' || name.endsWith('.pdf')) {\r\n return 'pdf';\r\n }\r\n\r\n // Excel\r\n if (\r\n mime === 'application/vnd.ms-excel' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\r\n /\\.(xls|xlsx)$/i.test(name)\r\n ) {\r\n return 'excel';\r\n }\r\n\r\n // Word\r\n if (\r\n mime === 'application/msword' ||\r\n mime === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\r\n /\\.(doc|docx)$/i.test(name)\r\n ) {\r\n return 'word';\r\n }\r\n\r\n \r\n if (\r\n mime === 'model/stl' ||\r\n mime === 'application/sla' || // Some browsers use this for STL\r\n /\\.stl$/i.test(name)\r\n ) {\r\n return 'stl';\r\n }\r\n\r\n if (\r\n /\\.dcm$/i.test(name)\r\n) {\r\n return 'dcm';\r\n}\r\n\r\n if (\r\n /\\.htl$/i.test(name)\r\n) {\r\n return 'htl';\r\n}\r\n\r\n\r\n\r\n\r\n return 'other';\r\n }\r\n\r\n\r\n // openFileDialog(fileInput: HTMLInputElement) {\r\n // // reset the value so change always triggers\r\n // fileInput.value = '';\r\n // fileInput.click();\r\n // }\r\n\r\n openFileDialog() {\r\n // if (this.uploadedFiles.length > this.setting('maxFileNo')) {\r\n // // this.messageService.add({\r\n // // severity: 'success',\r\n // // summary: 'Success',\r\n // // detail: `Maximum\"${this.setting('maxFileNo')}\" can be uploaded`,\r\n // // life: 3000\r\n // // });\r\n // return;\r\n // }\r\n this.fileInput.nativeElement.value = '';\r\n this.fileInput.nativeElement.click();\r\n }\r\n\r\n onBasicUploadAuto(event: UploadEvent) {\r\n \r\n }\r\n\r\n closeDialog() {\r\n this.visible = false;\r\n this.selecteImageUrl = '';\r\n }\r\n\r\n onImageSelect(url: string) {\r\n this.selecteImageUrl = url;\r\n this.visible = true;\r\n }\r\n\r\n onFileClick(file: any, name: any): void {\r\n\r\n if (!file) return;\r\n\r\n // this.fileName = file.name;\r\n let localUrl = '';\r\n\r\n if (file?.file) {\r\n localUrl = URL.createObjectURL(file.file);\r\n } else {\r\n localUrl = file?.result || '';\r\n }\r\n // const localUrl = URL.createObjectURL(file);\r\n\r\n\r\n this.loadFile(localUrl, name);\r\n this.fileVisible = true;\r\n }\r\n\r\n onOpenSTLFile(file: any): void {\r\n if (!file) {\r\n console.error('Invalid file structure:', file);\r\n return;\r\n }\r\n\r\n const actualFile = file.file;\r\n if(actualFile) {\r\n const blob = new Blob([actualFile], { type: 'application/octet-stream' });\r\n this.stlFileVisible = true;\r\n this.stlFileUpload = blob;\r\n } else {\r\n this.fetchAndLoadModel(file.originalUrl);\r\n }\r\n }\r\n\r\n private fetchAndLoadModel(originalUrl: any): void {\r\n const payload = {\r\n region: originalUrl.region,\r\n bucketName: originalUrl.bucketName,\r\n fileUrl: originalUrl.fileUrl,\r\n objectKey: originalUrl.objectKey,\r\n };\r\n const serviceUrl = `${this.fxApiService.getServiceUrl('workflow_service')}/workflow/files/download`;\r\n this.http.post(\r\n serviceUrl,\r\n payload,\r\n { responseType: 'arraybuffer' }\r\n ).subscribe(response => {\r\n const blob = new Blob([response], { type: 'application/octet-stream' });\r\n this.stlFileVisible = true;\r\n this.stlFileUpload = blob;\r\n });\r\n }\r\n\r\n private loadFile(url: string, fileName: string): void {\r\n const extension = fileName.split('.').pop()?.toLowerCase() || '';\r\n this.fileType = extension;\r\n\r\n if (extension === 'pdf') {\r\n // Native PDF rendering\r\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n else if (['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'csv', '.stl'].includes(extension)) {\r\n // Microsoft Office Viewer for Office files\r\n // const officeViewer = `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(url)}`;\r\n // console.log(officeViewer);\r\n const googleViewerUrl = 'https://docs.google.com/gview?url=' + encodeURIComponent(url) + '&embedded=true';\r\n this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(googleViewerUrl);\r\n\r\n // this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(officeViewer);\r\n }\r\n else {\r\n // Unsupported type\r\n this.fileUrl = null;\r\n this.fileType = 'unsupported';\r\n }\r\n }\r\n\r\n closeFileDialog() {\r\n this.fileVisible = false;\r\n this.fileUrl = null;\r\n this.fileType = null;\r\n this.fileName = null;\r\n }\r\n\r\n closeStlDialog() {\r\n this.stlFileVisible = false;\r\n this.stlFileUpload = null;\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-upload flex flex-col items-start justify-center p-0 rounded-sm\">\r\n <div class=\"flex gap-8 items-center mb-2\">\r\n <!-- <p class=\"text-base font-semibold\">Patient Images</p> -->\r\n <div class=\"flex justify-center items-center gap-1 upload-default cursor-pointer\" [ngClass]=\"{\r\n 'upload': (uploadedFiles ?? []).length > 0,\r\n 'upload-default': uploadedFiles?.length === 0\r\n }\" *ngIf=\"uploadedFiles.length < setting('maxFileNo')\" (click)=\"openFileDialog()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 29 28\" fill=\"none\"\r\n *ngIf=\"uploadedFiles.length===0\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#999999\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#999999\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"none\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 29 28\" fill=\"none\"\r\n *ngIf=\"uploadedFiles.length>0\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"none\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" class=\"upload_title \">\r\n {{ setting('upload-text') }}\r\n </a>\r\n <!-- <div>\r\n <small *ngIf=\"uploadFileControl?.errors?.['required'] && uploadFileControl?.touched\" class=\"text-red-500\">\r\n {{ setting('uploaderErrorMessage') }}\r\n</small>\r\n\r\n </div> -->\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n\r\n <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\"\r\n accept=\".pdf,image/*,.stl,.htl,.dcm\" hidden />\r\n\r\n <div class=\"file-list flex items-center gap-4 flex-wrap w-full\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\"\r\n class=\"relative p-3 border rounded-lg shadow-sm bg-white w-[450px] upload_file\">\r\n\r\n <!-- Close icon -->\r\n <div class=\"close_icon cursor-pointer absolute top-2 right-2\" (click)=\"deleteFile(i)\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"22\" height=\"22\" rx=\"11\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M7.08911 15.8889L6.11133 14.9111L10.0224 11L6.11133 7.08886L7.08911 6.11108L11.0002 10.0222L14.9113 6.11108L15.8891 7.08886L11.978 11L15.8891 14.9111L14.9113 15.8889L11.0002 11.9778L7.08911 15.8889Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"thumbnail_title flex\">\r\n <!-- Thumbnail on left -->\r\n <div class=\"thumbnail cursor-pointer\">\r\n <ng-container *ngIf=\"file.type === 'image'; else nonImageThumb\">\r\n <img class=\"file-thumbnail\" [src]=\"file?.result\" alt=\"preview\" (click)=\"onImageSelect(file?.result)\"\r\n *ngIf=\"file?.result\" />\r\n <svg *ngIf=\"!file?.result\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\"\r\n fill=\"#999999\" />\r\n </svg>\r\n\r\n </ng-container>\r\n\r\n <ng-template #nonImageThumb>\r\n <div class=\"file-thumbnail\">\r\n <ng-container [ngSwitch]=\"file.type\">\r\n\r\n\r\n\r\n <svg *ngSwitchCase=\"'csv'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#23A761\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M6.94076 10.3433C6.85939 10.3433 6.78716 10.3588 6.72408 10.3899C6.66191 10.42 6.60934 10.464 6.56637 10.5216C6.52432 10.5793 6.49232 10.6489 6.47038 10.7305C6.44844 10.8122 6.43747 10.904 6.43747 11.006C6.43747 11.1435 6.45484 11.261 6.48958 11.3586C6.52523 11.4553 6.58009 11.5294 6.65414 11.5808C6.7282 11.6314 6.82373 11.6567 6.94076 11.6567C7.02212 11.6567 7.10349 11.6478 7.18486 11.6301C7.26714 11.6123 7.35628 11.587 7.45228 11.5542V11.9002C7.36359 11.9357 7.27628 11.961 7.19035 11.976C7.10441 11.992 7.00795 12 6.90099 12C6.69437 12 6.52432 11.9587 6.39084 11.8762C6.25827 11.7929 6.15999 11.6766 6.096 11.5276C6.032 11.3777 6 11.2029 6 11.0033C6 10.8561 6.02057 10.7212 6.06171 10.5988C6.10285 10.4764 6.16319 10.3704 6.24273 10.2808C6.32227 10.1912 6.42055 10.122 6.53758 10.0732C6.6546 10.0244 6.78899 10 6.94076 10C7.04041 10 7.14006 10.0124 7.23971 10.0373C7.34028 10.0612 7.43628 10.0945 7.5277 10.1371L7.39057 10.4724C7.3156 10.4378 7.24017 10.4076 7.16429 10.3819C7.08841 10.3562 7.0139 10.3433 6.94076 10.3433Z\"\r\n fill=\"white\" />\r\n <path\r\n d=\"M9.06363 11.4331C9.06363 11.5485 9.03483 11.6487 8.97724 11.7339C8.91964 11.819 8.83553 11.8847 8.7249 11.9308C8.61519 11.9769 8.48172 12 8.32447 12C8.25498 12 8.18687 11.9956 8.12013 11.9867C8.05431 11.9778 7.99077 11.965 7.92951 11.9481C7.86917 11.9304 7.81157 11.9086 7.75672 11.8829V11.4997C7.8518 11.5405 7.95054 11.5773 8.05293 11.6101C8.15533 11.6429 8.25681 11.6593 8.35738 11.6593C8.42686 11.6593 8.48263 11.6505 8.52468 11.6327C8.56765 11.615 8.59874 11.5906 8.61794 11.5595C8.63714 11.5285 8.64674 11.493 8.64674 11.4531C8.64674 11.4043 8.62982 11.3626 8.596 11.328C8.56217 11.2934 8.51554 11.261 8.45612 11.2309C8.3976 11.2007 8.33132 11.1683 8.25727 11.1337C8.21064 11.1124 8.1599 11.0867 8.10505 11.0566C8.05019 11.0255 7.99808 10.9878 7.94871 10.9434C7.89934 10.8991 7.85866 10.8454 7.82666 10.7824C7.79558 10.7186 7.78003 10.6423 7.78003 10.5536C7.78003 10.4373 7.80746 10.338 7.86231 10.2555C7.91717 10.173 7.99534 10.11 8.09682 10.0665C8.19921 10.0222 8.31989 10 8.45886 10C8.56308 10 8.66228 10.012 8.75645 10.0359C8.85153 10.059 8.95072 10.0927 9.05403 10.1371L8.9169 10.4578C8.82456 10.4214 8.74182 10.3934 8.66868 10.3739C8.59554 10.3535 8.52103 10.3433 8.44515 10.3433C8.39212 10.3433 8.34686 10.3517 8.30938 10.3686C8.2719 10.3846 8.24355 10.4076 8.22436 10.4378C8.20516 10.4671 8.19556 10.5012 8.19556 10.5403C8.19556 10.5864 8.20927 10.6254 8.2367 10.6574C8.26504 10.6884 8.30709 10.7186 8.36286 10.7478C8.41955 10.7771 8.48994 10.8113 8.57405 10.8503C8.67645 10.8973 8.76376 10.9466 8.83598 10.998C8.90912 11.0486 8.96535 11.1084 9.00466 11.1776C9.04398 11.246 9.06363 11.3311 9.06363 11.4331Z\"\r\n fill=\"white\" />\r\n <path\r\n d=\"M11 10.0279L10.3184 11.9734H9.85491L9.17471 10.0279H9.60395L9.98108 11.1856C9.98748 11.2051 9.99799 11.242 10.0126 11.2961C10.0272 11.3493 10.0419 11.4061 10.0565 11.4664C10.072 11.5258 10.0826 11.5751 10.088 11.6141C10.0935 11.5751 10.1031 11.5258 10.1168 11.4664C10.1315 11.407 10.1456 11.3506 10.1594 11.2974C10.174 11.2433 10.1845 11.206 10.1909 11.1856L10.5708 10.0279H11Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"9\" y=\"7\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n <rect x=\"9\" y=\"5\" width=\"3\" height=\"1\" rx=\"0.2\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'text'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#1F5EBB\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'pdf'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#DD2025\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M6.6084 9.96038C6.87161 9.96038 7.06366 10.0171 7.18457 10.1306C7.30548 10.2431 7.36593 10.3984 7.36593 10.5965C7.36593 10.6858 7.35245 10.7714 7.32547 10.8532C7.2985 10.9342 7.25432 11.0062 7.19294 11.0695C7.13249 11.1327 7.05157 11.1829 6.9502 11.2201C6.84882 11.2564 6.72373 11.2746 6.57492 11.2746H6.38937V12H5.95689V9.96038H6.6084ZM6.58608 10.3147H6.38937V10.9202H6.53167C6.61258 10.9202 6.6828 10.9095 6.74233 10.8881C6.80185 10.8667 6.84789 10.8332 6.88044 10.7877C6.91299 10.7421 6.92927 10.6835 6.92927 10.6119C6.92927 10.5114 6.90137 10.437 6.84556 10.3887C6.78976 10.3394 6.70326 10.3147 6.58608 10.3147ZM9.44322 10.9607C9.44322 11.1904 9.39904 11.3824 9.31069 11.5368C9.22326 11.6903 9.09631 11.8061 8.92983 11.8842C8.76335 11.9614 8.56292 12 8.32854 12H7.75098V9.96038H8.39132C8.60524 9.96038 8.79078 9.99851 8.94796 10.0748C9.10514 10.1501 9.22698 10.2622 9.31348 10.411C9.39997 10.5589 9.44322 10.7421 9.44322 10.9607ZM8.994 10.9718C8.994 10.8211 8.97168 10.6975 8.92704 10.6007C8.88332 10.5031 8.81822 10.431 8.73172 10.3845C8.64616 10.338 8.54013 10.3147 8.41364 10.3147H8.18345V11.6429H8.369C8.58012 11.6429 8.73684 11.5866 8.83915 11.4741C8.94238 11.3615 8.994 11.1941 8.994 10.9718ZM10.2914 12H9.86593V9.96038H11.035V10.3147H10.2914V10.8407H10.9834V11.1936H10.2914V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'stl'\" (click)=\"onOpenSTLFile(file)\" width=\"180px\" height=\"180\"\r\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#F3A041\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.17881 10.561C7.16954 10.4781 7.13048 10.4135 7.06162 10.3673C6.99343 10.3212 6.90471 10.2981 6.79547 10.2981C6.71867 10.2981 6.6528 10.3091 6.59784 10.3313C6.54289 10.3534 6.50085 10.3835 6.47172 10.4215C6.44259 10.4594 6.42769 10.5028 6.42703 10.5515C6.42703 10.592 6.43663 10.6271 6.45583 10.6569C6.47569 10.6866 6.50251 10.7119 6.53627 10.7328C6.57004 10.753 6.60744 10.7701 6.64849 10.7841C6.68954 10.798 6.73092 10.8097 6.77263 10.8192L6.9633 10.8647C7.0401 10.8818 7.11392 10.9049 7.18477 10.934C7.25627 10.9631 7.32016 10.9998 7.37643 11.0441C7.43337 11.0884 7.47839 11.1419 7.5115 11.2046C7.5446 11.2672 7.56115 11.3406 7.56115 11.4248C7.56115 11.5387 7.5307 11.639 7.46979 11.7257C7.40888 11.8117 7.32082 11.8791 7.20562 11.9279C7.09108 11.976 6.95238 12 6.78951 12C6.63128 12 6.4939 11.9766 6.37738 11.9298C6.26152 11.8829 6.17081 11.8146 6.10527 11.7247C6.04039 11.6349 6.0053 11.5254 6 11.3963H6.36248C6.36778 11.464 6.38963 11.5203 6.42803 11.5653C6.46643 11.6102 6.51641 11.6437 6.57798 11.6659C6.64022 11.688 6.70973 11.6991 6.78653 11.6991C6.86664 11.6991 6.93682 11.6877 6.99707 11.6649C7.05798 11.6415 7.10565 11.6092 7.14008 11.5681C7.1745 11.5263 7.19205 11.4776 7.19271 11.4219C7.19205 11.3713 7.17649 11.3295 7.14604 11.2966C7.11558 11.2631 7.07288 11.2352 7.01793 11.2131C6.96364 11.1903 6.90008 11.1701 6.82725 11.1523L6.59586 11.0954C6.42836 11.0543 6.29594 10.9919 6.19862 10.9084C6.10196 10.8242 6.05363 10.7125 6.05363 10.5733C6.05363 10.4588 6.08607 10.3585 6.15095 10.2724C6.2165 10.1864 6.30554 10.1196 6.41809 10.0721C6.53065 10.024 6.65809 10 6.80044 10C6.94477 10 7.07122 10.024 7.1798 10.0721C7.28904 10.1196 7.37478 10.1857 7.43701 10.2705C7.49925 10.3547 7.53136 10.4515 7.53334 10.561H7.17881Z\"\r\n fill=\"white\" />\r\n <path d=\"M7.80024 10.3218V10.0266H9.42296V10.3218H8.79433V11.9706H8.42887V10.3218H7.80024Z\"\r\n fill=\"white\" />\r\n <path d=\"M9.73579 11.9706V10.0266H10.1042V11.6754H11V11.9706H9.73579Z\" fill=\"white\" />\r\n <mask id=\"mask0_8011_7505\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"6\" y=\"3\"\r\n width=\"5\" height=\"5\">\r\n <rect x=\"6\" y=\"3\" width=\"5\" height=\"5\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_8011_7505)\">\r\n <path\r\n d=\"M8.22222 7.35625V5.64375L6.55556 4.775V6.4875L8.22222 7.35625ZM8.77778 7.35625L10.4444 6.4875V4.775L8.77778 5.64375V7.35625ZM8.5 5.2125L10.1458 4.35625L8.5 3.5L6.85417 4.35625L8.5 5.2125ZM6.27778 6.925C6.18981 6.87917 6.12153 6.81875 6.07292 6.74375C6.02431 6.66875 6 6.58542 6 6.49375V4.50625C6 4.41458 6.02431 4.33125 6.07292 4.25625C6.12153 4.18125 6.18981 4.12083 6.27778 4.075L8.22222 3.06875C8.31019 3.02292 8.40278 3 8.5 3C8.59722 3 8.68981 3.02292 8.77778 3.06875L10.7222 4.075C10.8102 4.12083 10.8785 4.18125 10.9271 4.25625C10.9757 4.33125 11 4.41458 11 4.50625V6.49375C11 6.58542 10.9757 6.66875 10.9271 6.74375C10.8785 6.81875 10.8102 6.87917 10.7222 6.925L8.77778 7.93125C8.68981 7.97708 8.59722 8 8.5 8C8.40278 8 8.31019 7.97708 8.22222 7.93125L6.27778 6.925Z\"\r\n fill=\"#CCCCCC\" />\r\n </g>\r\n </svg>\r\n\r\n <svg *ngSwitchCase=\"'word'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"onFileClick(file,file?.name)\">\r\n <path\r\n d=\"M11.1757 1.17574C11.0632 1.06321 10.9106 1 10.7515 1H3.6C3.26863 1 3 1.26863 3 1.6V14.4C3 14.7314 3.26863 15 3.6 15H13.4C13.7314 15 14 14.7314 14 14.4V4.24853C14 4.0894 13.9368 3.93679 13.8243 3.82426L11.1757 1.17574Z\"\r\n fill=\"#F4F4F4\" />\r\n <path\r\n d=\"M15 12.7C15 12.8657 14.8657 13 14.7 13H2.3C2.13431 13 2 12.8657 2 12.7V9.3C2 9.13431 2.13431 9 2.3 9H14.7C14.8657 9 15 9.13431 15 9.3V12.7Z\"\r\n fill=\"#1F5EBB\" />\r\n <path d=\"M11 1L12.5 2.5L14 4H11.2C11.0895 4 11 3.91046 11 3.8V1Z\" fill=\"#D9D9D9\" />\r\n <path\r\n d=\"M7.04353 12H6.61105V10.3203H6.0572V9.96038H7.59738V10.3203H7.04353V12ZM9.56027 12H9.06641L8.59208 11.2285L8.11775 12H7.65458L8.33119 10.9481L7.69782 9.96038H8.17494L8.6144 10.6942L9.04548 9.96038H9.51144L8.87109 10.9718L9.56027 12ZM10.6038 12H10.1713V10.3203H9.61747V9.96038H11.1576V10.3203H10.6038V12Z\"\r\n fill=\"white\" />\r\n <rect x=\"5\" y=\"5\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"6\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n <rect x=\"5\" y=\"7\" width=\"7\" height=\"0.5\" rx=\"0.25\" fill=\"#CCCCCC\" />\r\n </svg>\r\n\r\n\r\n <svg *ngSwitchCase=\"'dcm'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n\r\n<svg *ngSwitchCase=\"'htl'\" width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n \r\n\r\n<svg *ngSwitchDefault width=\"180px\" height=\"180px\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<path d=\"M12.7013 13H3.3127C2.58501 13 2 12.4048 2 11.6645V4.33548C2 3.59516 2.58501 3 3.3127 3H12.6871C13.4147 3 13.9998 3.59516 13.9998 4.33548V11.6645C14.014 12.4048 13.4147 13 12.7013 13ZM9.24836 7.90484L7.39347 10.0677C7.27932 10.2129 7.05102 10.2129 6.93688 10.0823L5.93809 8.99355C5.80967 8.8629 5.60991 8.8629 5.4815 8.99355L3.76929 10.8661C3.5838 11.0694 3.72648 11.4032 3.99758 11.4032H6.26626H8.13543H12.0164C12.2875 11.4032 12.4302 11.0839 12.2447 10.8806L9.71922 7.90484C9.59081 7.75968 9.37678 7.75968 9.24836 7.90484ZM6.73712 5.98871C6.25199 5.98871 5.85248 6.39516 5.85248 6.88871C5.85248 7.38226 6.25199 7.78871 6.73712 7.78871C7.22225 7.78871 7.62176 7.38226 7.62176 6.88871C7.62176 6.39516 7.22225 5.98871 6.73712 5.98871Z\" fill=\"#999999\"/>\r\n</svg>\r\n\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Metadata on right -->\r\n <div class=\"title_notes ml-2\">\r\n <!-- Title -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0 -mt-1\">Title</label>\r\n <input [(ngModel)]=\"file.title\" name=\"title{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter title\" class=\" rounded px-3 py-2 mb-3 w-full outline-none focus:ring\" required\r\n #titleCtrl=\"ngModel\" />\r\n <div *ngIf=\"(titleCtrl.touched || uploadFileControl.touched) && titleCtrl.invalid\" class=\"text-red-500 text-xs mb-2\">\r\n Title is required\r\n </div>\r\n\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0 -mt-1\">Notes</label>\r\n <textarea [(ngModel)]=\"file.notes\" name=\"notes{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n placeholder=\"Enter notes\" class=\" rounded px-3 py-2 mb-0 w-full outline-none focus:ring\" rows=\"2\"\r\n required #notesCtrl=\"ngModel\" maxlength=\"768\"></textarea>\r\n <div *ngIf=\"(notesCtrl.touched || uploadFileControl.touched) && notesCtrl.invalid\" class=\"text-red-500 text-xs mt-1\">\r\n Notes are required\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"category mt-2\">\r\n <!-- Category -->\r\n <div class=\"input-container\">\r\n <label class=\"font-semibold text-sm input-title m-0\">Category</label>\r\n <select [(ngModel)]=\"file.categoryId \" name=\"category{{i}}\" (ngModelChange)=\"onMetaChange()\"\r\n class=\" rounded px-3 py-2 w-full outline-none focus:ring\" required #categoryCtrl=\"ngModel\">\r\n <option value=\"\">Select Category</option>\r\n <option *ngFor=\"let c of categories\" [ngValue]=\"c.value\">{{ c.label }}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"(categoryCtrl.touched || uploadFileControl.touched) && categoryCtrl.invalid\" class=\"text-red-500 text-xs mt-1\">\r\n Category is required\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <!-- Image Preview Dialog -->\r\n <p-dialog header=\"Image Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"visible\" [style]=\"{width: '70rem'}\"\r\n class=\"customDialogClass\" (onHide)=\"closeDialog()\">\r\n <img [src]=\"selecteImageUrl\" />\r\n </p-dialog>\r\n\r\n <!-- Document Preview Dialog -->\r\n <p-dialog header=\"Document Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"fileVisible\"\r\n [style]=\"{width: '70rem'}\" class=\"customDialogClass\" (onHide)=\"closeFileDialog()\">\r\n <div *ngIf=\"fileUrl && fileType !== 'unsupported'; else unsupportedMsg\" class=\"border rounded shadow-sm\">\r\n <iframe [src]=\"fileUrl\" width=\"100%\" height=\"600\" style=\"border: none;\" allowfullscreen>\r\n </iframe>\r\n </div>\r\n\r\n <ng-template #unsupportedMsg>\r\n <p class=\"text-red-600 mt-3\" *ngIf=\"fileType === 'unsupported'\">\r\n Unsupported file type. Please upload a PDF, DOCX, XLSX, or PPTX file.\r\n </p>\r\n </ng-template>\r\n </p-dialog>\r\n\r\n <!-- STL File Preview Dialog -->\r\n <ng-container *ngIf=\"stlFileUpload\">\r\n <p-dialog header=\"STL File Preview\" [modal]=\"true\" [draggable]=\"false\" [(visible)]=\"stlFileVisible\" [style]=\"{width: '70rem'}\"\r\n class=\"customDialogClass\" (onHide)=\"closeStlDialog()\">\r\n <app-three-viewer [manualFileUpload]=\"stlFileUpload\"></app-three-viewer>\r\n </p-dialog>\r\n </ng-container>\r\n <p-toast [preventOpenDuplicates]=\"true\" [breakpoints]=\"{ '426px': { width: '90%' } }\" position=\"top-center\"></p-toast>\r\n\r\n</fx-component>","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 { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FxBaseComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxComponent } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil, Observable, map, forkJoin } from 'rxjs';\r\nimport { v4 as uuidv4} from 'uuid';\r\n\r\ninterface UploadedFile {\r\n id: string;\r\n file: any;\r\n result: string;\r\n originalUrl: string;\r\n}\r\ninterface UploaderData {\r\n uploadedFiles: UploadedFile[];\r\n checkboxEnabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'uploader-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, FxComponent, FormsModule, ReactiveFormsModule],\r\n templateUrl: './uploader-checkbox.component.html',\r\n styleUrl: './uploader-checkbox.component.css'\r\n})\r\nexport class UploaderCheckboxComponent extends FxBaseComponent implements OnInit , AfterViewInit{\r\n // public uploadFileControl = new UntypedFormControl();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n public uploadFileControl = new FormControl();\r\n public uploadedFiles: Array<any> = [];\r\n public formattedData: any = {\r\n uploadedFiles: [],\r\n deletedFiles: [],\r\n // checkboxEnabled: false\r\n };\r\n uploadedFilesMap: { [key: string]: { uploadedFiles: any[], checkboxEnabled: boolean } } = {};\r\n private destroy$ = new Subject<Boolean>();\r\n private http = inject(HttpClient);\r\n public checkboxEnabled: boolean = false;\r\n constructor(private cdr: ChangeDetectorRef,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe((fxData)=>{\r\n this._register(this.uploadFileControl);\r\n console.log(\"contextid\",this.getContextBaseId());\r\n })\r\n }\r\n // ngAfterViewInit(): void {\r\n // console.log(\"fxcomp\",this.fxComponent);\r\n // this.getContextBaseId();\r\n // }\r\n \r\n \r\n \r\n \r\n \r\n uploadedImages: { [key: string]: { result: string, file: File | null }[] } = {};\r\n deletedFiles: any[] = [];\r\n \r\n \r\n // ngOnInit(): void {\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n \r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n \r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader-checkbox') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n \r\n // for (const [uploaderKey, urls] of Object.entries(uploadedFilesMap)) {\r\n // const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n \r\n // urls.forEach((originalUrl:any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob), // for preview\r\n // originalUrl: originalUrl?.originalUrl // preserve original\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n \r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n \r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${uploaderKey}:`, err);\r\n // }\r\n // });\r\n // }\r\n // }\r\n // });\r\n // }\r\n \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 // result: e.target?.result,\r\n // name: file?.name,\r\n // id: uuidv4()\r\n // })\r\n // this.uploadFileControl.setValue(this.uploadedFiles);\r\n // console.log(this.uploadFileControl);\r\n // }\r\n // reader.readAsDataURL(file);\r\n // }\r\n // }\r\n // }\r\n\r\n // ngOnInit(): void {\r\n // // Extract uploader keys and their corresponding URL arrays and store them in uploadedFilesMap\r\n // this.fxBuilderWrapperService.variables$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((variables: any) => {\r\n // if (!variables) return;\r\n \r\n // const uploadedFilesMap: { [key: string]: string[] } = {};\r\n \r\n // // Extract uploader keys and their corresponding URL arrays\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // if (key.includes('uploader-checkbox') && Array.isArray(value)) {\r\n // uploadedFilesMap[key] = value;\r\n // }\r\n // }\r\n \r\n // this.uploadedFilesMap = uploadedFilesMap; // Store the map for later use\r\n // });\r\n // }\r\n\r\n // ngAfterViewInit(): void {\r\n // console.log(\"fxcomp\", this.fxComponent);\r\n\r\n // const key = this.fxComponent?.fxData?.name;\r\n\r\n // if (key && this.uploadedFilesMap?.[key]) {\r\n // const urls = this.uploadedFilesMap[key];\r\n // const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n\r\n // urls.forEach((originalUrl: any) => {\r\n // if (originalUrl) {\r\n // const image$ = this.http.get(originalUrl?.originalUrl, { responseType: 'blob' }).pipe(\r\n // map((blob: Blob) => ({\r\n // result: URL.createObjectURL(blob),\r\n // originalUrl: originalUrl?.originalUrl\r\n // }))\r\n // );\r\n // imageFetches.push(image$);\r\n // }\r\n // });\r\n\r\n // if (imageFetches.length > 0) {\r\n // forkJoin(imageFetches).subscribe({\r\n // next: (imageData) => {\r\n // const formatted = imageData.map(item => ({\r\n // id: uuidv4(),\r\n // file: null,\r\n // originalUrl: item.originalUrl,\r\n // result: item.result\r\n // }));\r\n\r\n // this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n // this.formattedData.uploadedFiles = this.uploadedFiles;\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // },\r\n // error: (err) => {\r\n // console.error(`Failed to fetch images for ${key}:`, err);\r\n // }\r\n // });\r\n // }\r\n // } else {\r\n // console.error('No files found for the provided key:', key);\r\n // }\r\n\r\n // this.getContextBaseId();\r\n // }\r\n\r\n ngOnInit(): void {\r\n // Extract uploader keys and their corresponding file objects and store them in uploadedFilesMap\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n \r\n // Initialize the map to store the structure of uploaded files and other data\r\n const uploadedFilesMap: { [key: string]: { uploadedFiles: any[], checkboxEnabled: boolean } } = {};\r\n \r\n // Iterate over the variables to extract uploader keys and their corresponding uploaded files data\r\n // for (const [key, value] of Object.entries(variables)) {\r\n // // Check if the key starts with 'uploader-checkbox' and if value is an object containing 'uploadedFiles'\r\n // if (key.startsWith('uploader-checkbox') && (value as UploaderData).uploadedFiles) {\r\n // uploadedFilesMap[key] = {\r\n // uploadedFiles: (value as UploaderData).uploadedFiles,\r\n // checkboxEnabled: (value as UploaderData).checkboxEnabled || false\r\n // };\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (this.hasUploadedFiles(value)) {\r\n const otherKey = this.getOtherKey(value);\r\n const checkboxEnabled = value[otherKey];\r\n \r\n uploadedFilesMap[key] = {\r\n uploadedFiles: value.uploadedFiles,\r\n checkboxEnabled: checkboxEnabled,\r\n };\r\n }\r\n }\r\n \r\n \r\n \r\n this.uploadedFilesMap = uploadedFilesMap;\r\n });\r\n }\r\n\r\n private hasUploadedFiles(value: any): boolean {\r\n return value && value.hasOwnProperty('uploadedFiles');\r\n }\r\n \r\n private getOtherKey(value: any): string {\r\n const keysToIgnore = ['uploadedFiles', 'deletedFiles'];\r\n const keys = Object.keys(value);\r\n \r\n const filteredKeys = keys.filter(key => !keysToIgnore.includes(key));\r\n \r\n return filteredKeys.length > 0 ? filteredKeys[0] : '';\r\n }\r\n \r\n \r\n private getCheckboxEnabled(value: any): boolean {\r\n return value.hasOwnProperty('checkboxEnabled') ? value.checkboxEnabled : false;\r\n }\r\n \r\n ngAfterViewInit(): void {\r\n console.log(\"fxcomp\", this.fxComponent);\r\n \r\n const key = this.fxComponent?.fxData?.name;\r\n \r\n if (key && this.uploadedFilesMap?.[key]) {\r\n const uploadedFiles = this.uploadedFilesMap[key]?.uploadedFiles; \r\n this.checkboxEnabled = this.uploadedFilesMap[key]?.checkboxEnabled; // Get the uploadedFiles array\r\n const imageFetches: Observable<{ result: string; originalUrl: any }>[] = [];\r\n \r\n // Iterate over the uploaded files and fetch the images\r\n uploadedFiles.forEach((file: any) => {\r\n const originalUrl = file?.originalUrl;\r\n if (originalUrl) {\r\n const image$ = this.http.get(originalUrl, { responseType: 'blob' }).pipe(\r\n map((blob: Blob) => ({\r\n result: URL.createObjectURL(blob), // Blob URL for preview\r\n originalUrl: file?.originalUrl // Preserve the original URL\r\n }))\r\n );\r\n imageFetches.push(image$);\r\n }\r\n });\r\n \r\n // Fetch all images concurrently using forkJoin\r\n if (imageFetches.length > 0) {\r\n forkJoin(imageFetches).subscribe({\r\n next: (imageData) => {\r\n const formatted = imageData.map(item => ({\r\n id: uuidv4(),\r\n file: null,\r\n originalUrl: item.originalUrl,\r\n result: item.result\r\n }));\r\n \r\n this.uploadedFiles = [...this.uploadedFiles, ...formatted];\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n },\r\n error: (err) => {\r\n console.error(`Failed to fetch images for ${key}:`, err);\r\n }\r\n });\r\n }\r\n } else {\r\n console.error('No files found for the provided key:', key);\r\n }\r\n \r\n this.getContextBaseId();\r\n }\r\n \r\n \r\n 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 \r\n reader.onload = e => {\r\n const newFile = {\r\n id: uuidv4(),\r\n file: file,\r\n originalUrl: null,\r\n result: e.target?.result,\r\n name: file.name\r\n };\r\n \r\n this.uploadedFiles.push(newFile);\r\n this.formattedData.uploadedFiles = this.uploadedFiles;\r\n this.formattedData[this.setting('checkbox-label') || 'checkboxEnabled'] = this.checkboxEnabled;\r\n this.uploadFileControl.setValue(this.formattedData);\r\n };\r\n \r\n reader.readAsDataURL(file);\r\n }\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 // deleteFile(index: number): void {\r\n // const [deletedFile] = this.uploadedFiles.splice(index, 1);\r\n \r\n // if (deletedFile) {\r\n // this.deletedFiles.push(deletedFile);\r\n // this.formattedData = {\r\n // ...this.formattedData,\r\n // uploadedFiles: [...this.uploadedFiles],\r\n // deletedFiles: [...this.deletedFiles]\r\n // };\r\n // this.uploadFileControl.setValue(this.formattedData);\r\n // }\r\n // }\r\n \r\n deleteFile(index: number): void {\r\n const deletedFile = this.uploadedFiles?.[index];\r\n if (!deletedFile) return;\r\n \r\n // Ensure formattedData exists and initialize if undefined\r\n this.formattedData = this.formattedData || { uploadedFiles: [], deletedFiles: [] };\r\n \r\n // Add the deleted file to the deletedFiles array\r\n this.deletedFiles = [...this.deletedFiles, deletedFile];\r\n \r\n // Remove the file from uploadedFiles using filter for immutability\r\n this.uploadedFiles = this.uploadedFiles.filter((_, i) => i !== index);\r\n \r\n // Update formattedData\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles,\r\n [this.setting('checkbox-label') || 'checkboxEnabled']:this.checkboxEnabled\r\n };\r\n \r\n // Set the value of the uploadFileControl\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\r\n \r\n onCheckboxChange(){\r\n this.formattedData = {\r\n ...this.formattedData,\r\n uploadedFiles: this.uploadedFiles,\r\n deletedFiles: this.deletedFiles,\r\n [this.setting('checkbox-label') || 'checkboxEnabled']:this.checkboxEnabled\r\n };\r\n this.uploadFileControl.setValue(this.formattedData);\r\n }\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 FxStringSetting({ key: 'checkbox-label', $title: 'Checkbox Label', value: ''}),\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}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <label class=\"inline-flex items-center gap-2\">\r\n <input\r\n type=\"checkbox\"\r\n [(ngModel)] = \"checkboxEnabled\"\r\n (change)=\"onCheckboxChange()\"\r\n />\r\n {{ setting('checkbox-label') }}\r\n </label>\r\n <div class=\"custom-upload flex flex-row items-center gap-2 p-2 pb-0 rounded-sm\">\r\n <div class=\"flex flex-col justify-center items-center\" (click)=\"fileInput.click()\">\r\n <div>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"29\" height=\"28\" viewBox=\"0 0 29 28\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.001 3.00195C11.5322 3.00195 9.16722 3.86956 7.23641 5.38414L7.23598 4.59695C7.23598 4.52473 7.22175 4.45321 7.19411 4.38648C7.16647 4.31975 7.12596 4.25912 7.07489 4.20804C7.02381 4.15697 6.96318 4.11646 6.89645 4.08882C6.82972 4.06118 6.7582 4.04695 6.68598 4.04695C6.61375 4.04695 6.54223 4.06118 6.4755 4.08882C6.40877 4.11646 6.34814 4.15697 6.29707 4.20804C6.24599 4.25912 6.20548 4.31975 6.17784 4.38648C6.1502 4.45321 6.13598 4.52473 6.13598 4.59695L6.13642 6.68652C6.13643 6.83239 6.19438 6.97228 6.29752 7.07542C6.40067 7.17856 6.54055 7.23651 6.68642 7.23652H8.77598C8.8482 7.23652 8.91972 7.2223 8.98645 7.19466C9.05318 7.16702 9.11381 7.12651 9.16489 7.07543C9.21596 7.02436 9.25647 6.96373 9.28411 6.897C9.31175 6.83027 9.32598 6.75875 9.32598 6.68652C9.32598 6.6143 9.31175 6.54278 9.28411 6.47605C9.25647 6.40932 9.21596 6.34869 9.16489 6.29761C9.11381 6.24654 9.05318 6.20603 8.98645 6.17839C8.91972 6.15075 8.8482 6.13652 8.77598 6.13652H8.0584C9.7702 4.84387 11.8399 4.10195 14.001 4.10195C19.4751 4.10195 23.901 8.52782 23.901 14.002C23.901 19.4761 19.4751 23.902 14.001 23.902C8.52684 23.902 4.10098 19.4761 4.10098 14.002C4.10098 12.6381 4.38263 11.2888 4.92855 10.0389C4.98691 9.90532 4.98982 9.75399 4.93665 9.61822C4.88347 9.48246 4.77855 9.37336 4.64496 9.31492C4.57877 9.28596 4.50753 9.27032 4.4353 9.2689C4.36306 9.26747 4.29126 9.2803 4.22398 9.30663C4.15671 9.33297 4.09528 9.3723 4.04321 9.42238C3.99114 9.47247 3.94944 9.53232 3.92051 9.59852C3.31393 10.9872 3.00098 12.4866 3.00098 14.002C3.00098 20.0706 7.93236 25.002 14.001 25.002C20.0696 25.002 25.001 20.0706 25.001 14.002C25.001 7.93334 20.0696 3.00195 14.001 3.00195Z\"\r\n fill=\"#F3A041\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M13.9988 6.13965C9.6616 6.13965 6.13379 9.66746 6.13379 14.0046C6.13379 18.3418 9.6616 21.8696 13.9988 21.8696C18.336 21.8696 21.8638 18.3418 21.8638 14.0046C21.8638 9.66746 18.336 6.13965 13.9988 6.13965ZM13.9988 8.22965C14.1447 8.22965 14.2846 8.28759 14.3877 8.39074C14.4908 8.49388 14.5488 8.63378 14.5488 8.77965V13.7769L17.5227 16.7508C17.6258 16.8539 17.6837 16.9938 17.6837 17.1396C17.6837 17.2855 17.6258 17.4254 17.5227 17.5285C17.4195 17.6316 17.2796 17.6896 17.1338 17.6896C16.9879 17.6896 16.8481 17.6316 16.7449 17.5285L13.6099 14.3935C13.5068 14.2904 13.4488 14.1505 13.4488 14.0046V8.77965C13.4488 8.63378 13.5067 8.49388 13.6099 8.39074C13.713 8.28759 13.8529 8.22965 13.9988 8.22965Z\"\r\n fill=\"#F3A041\" />\r\n <rect width=\"28.56\" height=\"28\" rx=\"1.51479\" fill=\"#F3A041\" />\r\n <path\r\n d=\"M15.068 22.7391V17.6708H18.4968L14.2108 12.6025L9.9248 17.6708H13.3536V22.7391H9.06759V22.6969C8.92358 22.7053 8.78643 22.7391 8.63899 22.7391C6.93391 22.7391 5.29866 22.0717 4.09298 20.8835C2.8873 19.6954 2.20996 18.084 2.20996 16.4037C2.20996 13.1532 4.70443 10.5042 7.90523 10.141C8.18585 8.6953 8.96892 7.39118 10.1197 6.45292C11.2706 5.51465 12.7172 5.00089 14.2108 5C15.7047 5.00082 17.1515 5.51452 18.3026 6.45277C19.4537 7.39101 20.2371 8.69516 20.5181 10.141C23.7189 10.5042 26.21 13.1532 26.21 16.4037C26.21 18.084 25.5326 19.6954 24.3269 20.8835C23.1213 22.0717 21.486 22.7391 19.7809 22.7391C19.6369 22.7391 19.4981 22.7053 19.3523 22.6969V22.7391H15.068Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </div>\r\n <a type=\"button\" (click)=\"fileInput.click()\" class=\"text-base cursor-pointer\">\r\n {{ setting('upload-text') }}\r\n </a>\r\n </div>\r\n <input #fileInput type=\"file\" [multiple]=\"setting('multiple-upload')\" (change)=\"onFileSelected($event)\" hidden />\r\n <div class=\"separator\"></div>\r\n <div class=\"file-list flex items-center gap-4 flex-wrap\">\r\n <ng-container *ngIf=\"uploadedFiles?.length\">\r\n <div *ngFor=\"let file of uploadedFiles; let i = index\" (click)=\"deleteFile(i)\"\r\n class=\"flex flex-col items-center justify-center\">\r\n <div class=\"relative\">\r\n <div class=\"close_icon cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6837_29683)\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"#F3A041\" />\r\n <mask id=\"mask0_6837_29683\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"4\" y=\"4\" width=\"24\"\r\n height=\"24\">\r\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" fill=\"#D9D9D9\" />\r\n </mask>\r\n <g mask=\"url(#mask0_6837_29683)\">\r\n <path\r\n d=\"M8.2045 8.99815L5.81802 6.61167L6.61351 5.81617L9 8.20266L11.3865 5.81617L12.182 6.61167L9.7955 8.99815L12.182 11.3846L11.3865 12.1801L9 9.79365L6.61351 12.1801L5.81802 11.3846L8.2045 8.99815Z\"\r\n fill=\"white\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6837_29683\">\r\n <rect width=\"18\" height=\"18\" rx=\"9\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <img class=\"file-thumbnail\" style=\"border-radius: 4px\" [src]=\"file?.result\" alt=\"\" />\r\n </div>\r\n \r\n <p>{{file?.name}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n@Component({\r\n selector: 'lib-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule],\r\n templateUrl: './date-picker.component.html',\r\n styleUrl: './date-picker.component.css'\r\n})\r\nexport class DatePickerComponent extends FxBaseComponent implements OnInit{\r\n private fb = inject(FormBuilder);\r\n // minDate = new Date();\r\n // maxDate = new Date();\r\nminDate!: string;\r\nmaxDate!: string;\r\n today = new Date();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n private destroy$ = new Subject<Boolean>();\r\n datePickerMap = new Map<string, any>();\r\n trtStartDatePatch!: string;\r\n\r\n\r\n public datePickerForm: FormGroup = this.fb.group({\r\n date: [new Date(),[Validators.required]],\r\n })\r\n\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.datePickerForm);\r\n });\r\n \r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n this.datePickerMap = new Map<string, any>();\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('lib-date-picker')) {\r\n // this.datePickerMap.set(key, value);\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'date' in value\r\n ) {\r\n this.datePickerMap.set(key, value);\r\n }\r\n\r\n if (key === 'trtStartDatePatch' && typeof value === 'string') {\r\n const formattedDate = value.split('T')[0];\r\n this.trtStartDatePatch = formattedDate;\r\n}\r\n\r\n}\r\n });\r\n\r\n\r\n // const today = new Date();\r\n // this.minDate = new Date(today);\r\n // this.minDate.setDate(today.getDate() - 30);\r\n\r\n // this.maxDate = new Date(today);\r\n // this.maxDate.setDate(today.getDate() + 30);\r\n\r\n // this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));\r\n // this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + 31)));\r\n\r\n const today = new Date();\r\n\r\nconst min = new Date();\r\nmin.setDate(today.getDate() - 30);\r\n\r\nconst max = new Date();\r\nmax.setDate(today.getDate());\r\n\r\n// this.minDate = this.formatDate(min);\r\n// this.maxDate = this.formatDate(max);\r\n\r\n // this.getRangeValues();\r\n\r\n\r\n }\r\n\r\n get dateControl() {\r\n return this.datePickerForm.get('date');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const key = this.fxComponent?.fxData?.name;\r\n if(key){\r\n const datePatch = this.datePickerMap.get(key)\r\n const finalDate = datePatch || this.formatDate(new Date())\r\n if(datePatch){\r\n this.minDate = this.trtStartDatePatch;\r\n const today = new Date();\r\n const max = new Date();\r\nmax.setDate(today.getDate());\r\nthis.maxDate = this.formatDate(max);\r\n\r\n }\r\n else{\r\n// this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() - 30)));\r\n// const today = new Date();\r\n// const max = new Date();\r\n// max.setDate(today.getDate());\r\n// this.maxDate = this.formatDate(max);\r\n this.minDate = this.trtStartDatePatch;\r\n const today = new Date();\r\n const max = new Date();\r\nmax.setDate(today.getDate());\r\nthis.maxDate = this.formatDate(max);\r\n\r\n }\r\n \r\n\r\n this.datePickerForm.patchValue({date:finalDate});\r\n }\r\n this.getContextBaseId();\r\n }\r\n\r\n getRangeValues() {\r\n this.http.get<any>(this.setting('apiURL')).subscribe(response => {\r\n const today = new Date();\r\n \r\n const minOffset = response[this.setting('minDateKey')] || this.setting('minValidation');\r\n const maxOffset = response[this.setting('maxDateKey')] || this.setting('maxValidation');\r\n \r\n // this.minDate = new Date(today);\r\n // this.minDate.setDate(today.getDate() + minOffset);\r\n \r\n // this.maxDate = new Date(today);\r\n // this.maxDate.setDate(today.getDate() + maxOffset);\r\n\r\n this.minDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + minOffset)));\r\n this.maxDate = this.formatDate(new Date(this.today.setDate(new Date().getDate() + maxOffset)));\r\n });\r\n }\r\n\r\n private formatDate(date: Date): string {\r\n return date.toISOString().split('T')[0]; \r\n}\r\n \r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'minValidation', $title: 'Min Validation', value: '' }),\r\n new FxStringSetting({ key: 'maxValidation', $title: 'Max Validation', value: '' }),\r\n new FxStringSetting({ key: 'apiURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'minDateKey', $title: 'Min Range API Key', value: '' }),\r\n new FxStringSetting({ key: 'maxDateKey', $title: 'Max Range API Key', value: '' }),\r\n new FxStringSetting({ key: 'placeHolder', $title: 'Placeholder', value: 'Select Date' }),\r\n new FxStringSetting({ key: 'label', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'datePickerErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n \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\" #fxComponent>\r\n <div class=\"custom-date-picker relative\">\r\n <form [formGroup]=\"datePickerForm\">\r\n <!-- <p-calendar formControlName=\"date\" [showIcon]=\"true\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\r\n [iconDisplay]=\"'input'\" [showOnFocus]=\"false\" dateFormat=\"dd/mm/yy\" [showButtonBar]=\"true\"\r\n placeholder=\"{{ setting('placeHolder') }}\">\r\n <ng-template pTemplate=\"inputicon\">\r\n <span class=\"absolute right-0 pt-2 pr-2\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"cursor-pointer\">\r\n <path\r\n d=\"M19.5624 2.25991H18.1956V3.13582C18.1956 3.61948 17.7982 4.01173 17.3078 4.01173C16.8177 4.01173 16.4202 3.61948 16.4202 3.13582V2.25991H7.58001V3.13582C7.58001 3.61948 7.18253 4.01173 6.69244 4.01173C6.20209 4.01173 5.80486 3.61948 5.80486 3.13582V2.25991H4.43787C3.26107 2.2604 2.13252 2.72182 1.30042 3.54299C0.468323 4.36441 0.000507185 5.47813 0 6.63946V19.6204C0.000495266 20.7818 0.468304 21.8955 1.30042 22.7167C2.13252 23.5381 3.26107 23.9995 4.43787 24H19.5621C20.7389 23.9995 21.8675 23.5381 22.6996 22.7167C23.5317 21.8955 23.9995 20.7818 24 19.6204V6.63946C23.9995 5.47813 23.5317 4.36441 22.6996 3.54299C21.8675 2.72183 20.7389 2.26041 19.5621 2.25991H19.5624ZM19.5624 22.2482H4.43818C3.73262 22.246 3.05655 21.9686 2.55779 21.4761C2.05878 20.9839 1.77768 20.3167 1.77546 19.6204V9.05698H22.2252V19.6204C22.2229 20.3167 21.9419 20.9839 21.4428 21.4761C20.9441 21.9686 20.268 22.246 19.5624 22.2482ZM7.58001 2.25991H5.80486L5.80505 0.87591C5.80505 0.392251 6.20227 0 6.69262 0C7.18272 0 7.58019 0.392251 7.58019 0.87591L7.58001 2.25991ZM18.1956 2.25991H16.4202L16.4202 0.87591C16.4202 0.392251 16.8177 0 17.3078 0C17.7981 0 18.1953 0.392251 18.1953 0.87591L18.1956 2.25991Z\"\r\n fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </p-calendar> -->\r\n <!-- <p-calendar formControlName=\"date\"\r\n dateFormat=\"dd/mm/yy\"\r\n placeholder=\"{{ setting('placeHolder') }}\"> -->\r\n <label for=\"date\" class=\"input-label\">{{ setting('label') }}<span class=\"field-required\">*</span></label>\r\n <div class=\"relative\">\r\n <input type=\"date\" id=\"date\" name=\"date\" formControlName=\"date\" [min]=\"minDate\" [max]=\"maxDate\">\r\n </div>\r\n <!-- <label for=\"date\" class=\"placeholder\">Select Date</label> -->\r\n <!-- <ng-template pTemplate=\"inputicon\">\r\n <span class=\"absolute right-0 pt-2 pr-2\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"cursor-pointer\">\r\n <path\r\n d=\"M19.5624 2.25991H18.1956V3.13582C18.1956 3.61948 17.7982 4.01173 17.3078 4.01173C16.8177 4.01173 16.4202 3.61948 16.4202 3.13582V2.25991H7.58001V3.13582C7.58001 3.61948 7.18253 4.01173 6.69244 4.01173C6.20209 4.01173 5.80486 3.61948 5.80486 3.13582V2.25991H4.43787C3.26107 2.2604 2.13252 2.72182 1.30042 3.54299C0.468323 4.36441 0.000507185 5.47813 0 6.63946V19.6204C0.000495266 20.7818 0.468304 21.8955 1.30042 22.7167C2.13252 23.5381 3.26107 23.9995 4.43787 24H19.5621C20.7389 23.9995 21.8675 23.5381 22.6996 22.7167C23.5317 21.8955 23.9995 20.7818 24 19.6204V6.63946C23.9995 5.47813 23.5317 4.36441 22.6996 3.54299C21.8675 2.72183 20.7389 2.26041 19.5621 2.25991H19.5624ZM19.5624 22.2482H4.43818C3.73262 22.246 3.05655 21.9686 2.55779 21.4761C2.05878 20.9839 1.77768 20.3167 1.77546 19.6204V9.05698H22.2252V19.6204C22.2229 20.3167 21.9419 20.9839 21.4428 21.4761C20.9441 21.9686 20.268 22.246 19.5624 22.2482ZM7.58001 2.25991H5.80486L5.80505 0.87591C5.80505 0.392251 6.20227 0 6.69262 0C7.18272 0 7.58019 0.392251 7.58019 0.87591L7.58001 2.25991ZM18.1956 2.25991H16.4202L16.4202 0.87591C16.4202 0.392251 16.8177 0 17.3078 0C17.7981 0 18.1953 0.392251 18.1953 0.87591L18.1956 2.25991Z\"\r\n fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"5.33203\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"10.3711\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"11.5547\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n <rect x=\"15.4062\" y=\"16.5898\" width=\"2.96296\" height=\"2.96296\" rx=\"0.444444\" fill=\"#F3A041\" />\r\n </svg>\r\n </span>\r\n </ng-template> -->\r\n <!-- </p-calendar> -->\r\n <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxOptionSetting, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { TitleStrategy } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'dropdown-with-other',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule],\r\n templateUrl: './dropdown-with-other.component.html',\r\n styleUrl: './dropdown-with-other.component.css'\r\n})\r\nexport class DropdownWithOtherComponent extends FxBaseComponent implements OnInit, AfterViewInit {\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n dropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n // options = [\r\n // { optionValue: 'Clinical Notes 1', optionName: 'Clinical Notes 1' },\r\n // { optionValue: 'Clinical Notes 2', optionName: 'Clinical Notes 2' },\r\n // { optionValue: 'Clinical Notes 3', optionName: 'Clinical Notes 3' },\r\n // { optionValue: 'other', optionName: 'Other' }\r\n // ];\r\n\r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n isChildRequired: boolean = false;\r\n otherMaxLength: number = 768;\r\n\r\n public dropDownForm: FormGroup = this.fb.group({\r\n selectedOption: [''],\r\n otherInput: [{ value: '', disabled: true }],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.dropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.dropdownMap.has(key)) {\r\n this.dropDownForm.patchValue(this.dropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n this.otherMaxLength = Number(this.setting('other-maxLength')) || 768;\r\n const mainControl = this.dropDownForm.get('selectedOption');\r\n if (this.setting('isRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'selectedOption' in value\r\n ) {\r\n this.dropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n // this.dropDownForm.get('selectedOption')?.valueChanges.subscribe(value => {\r\n // const otherControl = this.dropDownForm.get('otherInput');\r\n // if (value === 'other') {\r\n // otherControl?.enable();\r\n // } else {\r\n // otherControl?.disable();\r\n // otherControl?.reset();\r\n // }\r\n // });\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));\r\n this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));\r\n\r\n this.dropDownForm.get('selectedOption')?.valueChanges.subscribe(value => {\r\n const otherControl = this.dropDownForm.get('otherInput');\r\n\r\n if (value === 'other') {\r\n otherControl?.enable();\r\n this.isChildRequired = true;\r\n otherControl?.setValidators([Validators.required]);\r\n } else {\r\n this.isChildRequired = false;\r\n otherControl?.disable();\r\n otherControl?.reset();\r\n otherControl?.clearValidators();\r\n }\r\n\r\n otherControl?.updateValueAndValidity();\r\n otherControl?.markAsTouched();\r\n });\r\n\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'clinicalNotesURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClass', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'other-label', $title: 'Other Label', value: '' }),\r\n new FxStringSetting({ key: 'other-placeholder', $title: 'Other Placeholder', value: '' }),\r\n new FxStringSetting({ key: 'other-maxLength', $title: 'Other Max Length', value: 768 }),\r\n new FxSelectSetting({ key: 'serviceName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'errorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n new FxStringSetting({ key: 'errorMessageOther', $title: 'Other Error Message', value: 'Other is required' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n this.options.push({ value: 'other', label: 'Other' });\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"flex justify-center custom-dropdown\" [ngClass]=\"setting('customClass')\" *ngIf=\"false\">\r\n <form [formGroup]=\"dropDownForm\" class=\"flex flex-row gap-4 items-start\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex flex-col w-1/2\">\r\n <div class=\"relative\">\r\n\r\n <!-- <label class=\"mb-1 font-semibold text-sm\"></label> -->\r\n <span class=\"input-label dark:text-gray-300\">{{ setting('select-label') }}</span>\r\n <select formControlName=\"selectedOption\" class=\"border p-2 rounded w-full\">\r\n <option value=\"\">Select</option>\r\n <option *ngFor=\"let option of options\" [value]=\"option.value\">\r\n {{ option?.label }}\r\n </option>\r\n </select>\r\n <small *ngIf=\"dropDownForm.get('selectedOption')?.touched && dropDownForm.get('selectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorMessage')}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <!-- Other input (only if 'Other' selected) -->\r\n <div class=\"flex flex-col w-1/2\">\r\n <div class=\"relative\">\r\n <label class=\"input-label dark:text-gray-300\">{{ setting('other-label') }}</label>\r\n <div class=\"relative\">\r\n <textarea\r\n formControlName=\"otherInput\"\r\n placeholder=\"{{setting('other-placeholder')}}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n ></textarea>\r\n </div>\r\n <small *ngIf=\"dropDownForm.get('otherInput')?.touched && dropDownForm.get('otherInput')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n Other is required.\r\n </small>\r\n </div>\r\n </div>\r\n\r\n \r\n </form>\r\n</div>\r\n\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClass')\">\r\n <form [formGroup]=\"dropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <select\r\n formControlName=\"selectedOption\"\r\n class=\"border p-2 rounded w-full\"\r\n >\r\n <option value=\"\">Select</option>\r\n <option *ngFor=\"let option of options\" [value]=\"option.value\">\r\n {{ option?.label }}\r\n </option>\r\n </select>\r\n <small *ngIf=\"dropDownForm.get('selectedOption')?.touched && dropDownForm.get('selectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('other-label') }} <span class=\"field-required\" *ngIf=\"isChildRequired\">*</span>\r\n </label>\r\n <textarea\r\n formControlName=\"otherInput\"\r\n placeholder=\"{{ setting('other-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n [maxlength]=\"otherMaxLength\"\r\n ></textarea>\r\n\r\n <small\r\n *ngIf=\"dropDownForm.get('otherInput')?.touched && dropDownForm.get('otherInput')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('errorMessageOther')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n\r\n\r\n\r\n</fx-component>\r\n\r\n <!-- <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n Date is required.\r\n </small> -->","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core';\r\nimport { FxBaseComponent, FxComponent, FxOptionSetting, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\n\r\n@Component({\r\n selector: 'radio-group-custom',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule,RadioButtonModule],\r\n templateUrl: './radio-group.component.html',\r\n styleUrl: './radio-group.component.css'\r\n})\r\nexport class RadioGroupComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\nprivate fb = inject(FormBuilder);\r\nprivate destroy$ = new Subject<Boolean>();\r\nformObject: object = {};\r\n@Input() showOnSelection: 'yes' | 'no' = 'yes'; // configurable: show textarea on Yes or No\r\n showTextArea = false;\r\n public confirmationForm = this.fb.group({\r\n confirmation: [''],\r\n remarks: [''],\r\n valueToShowTextArea: [''],\r\n label:['']\r\n });\r\n\r\n options: any[] = [\r\n { option: 'Yes', value: 'YES' },\r\n { option: 'No', value: 'NO' },\r\n { option: 'NA', value: 'NA' }\r\n ];\r\n\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n radoioMap = new Map<string, any>();\r\n compareValue: any;\r\n isRequired: boolean = false;\r\n isChildRequired: boolean = false;\r\n remarkMaxLength: number = 84;\r\n\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService,private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.confirmationForm);\r\n });\r\n \r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'items') as any)?.options || [];\r\n const labelData =\r\n (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'select-label') as any)?.value ??\r\n '';\r\nthis.compareValue = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'value-show-text') as any)?.value\r\n const label = this.confirmationForm.get('label');\r\n label?.setValue(labelData);\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.radoioMap.has(key)) {\r\n this.confirmationForm.patchValue(this.radoioMap.get(key));\r\n const data = this.radoioMap.get(key);\r\n this.onSelectionChange(data.confirmation);\r\n }\r\n}, 200);\r\n\r\n setTimeout(()=>{\r\n const mainControl = this.confirmationForm.get('confirmation');\r\n this.remarkMaxLength = Number(this.setting('remark-maxlength')) || 84;\r\n if(this.setting('isRadioRequired') === 'true'){\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n },100)\r\n\r\n \r\n }\r\n \r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n \r\n \r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('radio-group-custom')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'confirmation' in value\r\n ) {\r\n this.radoioMap.set(key, value);\r\n }\r\n}\r\n\r\n \r\n })\r\n\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'items') as any)?.options || [];\r\n\r\n\r\n // this.setting('items').length > 0 ? this.options = this.setting('items') : null;\r\n \r\n // this.confirmationForm.get('confirmation')?.valueChanges.subscribe(value => {\r\n // const otherControl = this.confirmationForm.get('remarks');\r\n // const valueToShowTextArea = this.confirmationForm.get('valueToShowTextArea');\r\n // if (value) {\r\n // otherControl?.setValidators([Validators.required]);\r\n // valueToShowTextArea?.setValue(this.setting('value-show-text'));\r\n\r\n // } else {\r\n // otherControl?.clearValidators();\r\n // otherControl?.reset();\r\n // valueToShowTextArea?.reset();\r\n // }\r\n // });\r\n \r\n \r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n // new FxStringSetting({ key: 'clinicalNotesURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClasss', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label', $title: 'Header Label', value: 'Header Label' }), \r\n // new FxStringSetting({ key: 'option-value-one', $title: 'Value one', value: 'Value one' }), \r\n // new FxStringSetting({ key: 'option-value-two', $title: 'Value two', value: 'Value two' }), \r\n // new FxStringSetting({ key: 'option-label-one', $title: 'Label one', value: 'Label one' }), \r\n // new FxStringSetting({ key: 'option-label-two', $title: 'Label two', value: 'Label two' }), \r\n new FxStringSetting({ key: 'value-show-text', $title: 'Value to show textarea', value: 'Value to show textarea' }),\r\n new FxOptionSetting({ key: 'items', $title: 'Options', value: [{option: 'Yes', value: 'yes'}, {option: 'No', value: 'no'}] }, [{option: 'Yes', value: 'yes'}, {option: 'No', value: 'no'}]), \r\n new FxStringSetting({ key: 'additional-field-label', $title: 'Additional field label', value: '' }),\r\n new FxStringSetting({ key: 'additional-field-error-msg', $title: 'Additional field error message', value: 'Please fill out the field' }),\r\n new FxStringSetting({ key: 'error-msg', $title: 'Error message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'remark-placeholder', $title: 'Additional field placeholder', value: 'enter here' }),\r\n new FxSelectSetting({key: 'isRadioRequired', $title: 'Required', value: 'true'}, [{option: 'Yes', value: 'true'}, {option: 'No', value: 'false'}]), \r\n new FxStringSetting({ key: 'remark-maxlength', $title: 'Additional field max length', value: 84 }),\r\n // new FxStringSetting({ key: 'other-placeholder', $title: 'Other Placeholder', value: '' }), \r\n // new FxSelectSetting({key: 'serviceName', $title: 'Service', value: ''}, [{option: 'User Service', value: 'user_service'}, {option: 'Patient Service', value: 'patient_service'},{option: 'Workflow Service', value: 'workflow_service'}]),\r\n // // new FxSelectSetting({key: 'service', $title: 'Service', value: 'local'}, [{option: 'Local', value: 'local'}, {option: 'QA', value: 'qa'},{option: 'UAT', value: 'uat'},{option: 'Production', value: 'prod'}]), \r\n // // new FxSelectSetting({key: 'isRequired', $title: 'Required', value: true}, [{option: 'Yes', value: true}, {option: 'No', value: false}]), \r\n // new FxStringSetting({ key: 'errorMessage', $title: 'Error Message', value: 'Please fill out the field' }), \r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n onSelectionChange(selection: string) {\r\n\r\n this.showTextArea = selection === this.compareValue;\r\n if(this.showTextArea){\r\nconst valueToShowTextArea = this.confirmationForm.get('valueToShowTextArea');\r\n valueToShowTextArea?.setValue(this.setting('value-show-text'));\r\nconst otherControl = this.confirmationForm.get('remarks');\r\nthis.isChildRequired = true;\r\notherControl?.setValidators([Validators.required]);\r\notherControl?.updateValueAndValidity();\r\n }\r\n else{\r\n const otherControl = this.confirmationForm.get('remarks');\r\n this.isChildRequired = false;\r\n otherControl?.reset();\r\n otherControl?.clearValidators();\r\n otherControl?.updateValueAndValidity();\r\n }\r\n\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1 relative mt-2 md:mt-1\">\r\n\r\n <label class=\"input-label font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }} <span class=\"field-required\" *ngIf=\"isChildRequired\">*</span>\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n [maxlength]=\"remarkMaxLength\" \r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n selector: 'lib-multiselect-dropdown',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule],\r\n templateUrl: './multiselect-dropdown.component.html',\r\n styleUrl: './multiselect-dropdown.component.css'\r\n})\r\nexport class MultiselectDropdownComponent extends FxBaseComponent implements OnInit, AfterViewInit {\r\n\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n multiselectDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n\r\n public multiselectDropDownForm: FormGroup = this.fb.group({\r\n multipleSelectedOption: [[]],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.multiselectDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('multiSelectOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsOption') as any)?.options || [];\r\n }\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.multiselectDropdownMap.has(key)) {\r\n this.multiselectDropDownForm.patchValue(this.multiselectDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.multiselectDropDownForm.get('multipleSelectedOption');\r\n if (this.setting('isMultiRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'multipleSelectedOption' in value\r\n ) {\r\n this.multiselectDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceMultiName'));\r\n this.getOptions(serviceUrl, this.setting('multiSelectOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsOption', $title: 'Options', value: [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'multiSelectOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassMulti', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-multi', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key', $title: 'Label Key', value: 'option' }),\r\n new FxSelectSetting({ key: 'serviceMultiName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isMultiRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiErrorMessage', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderMulti', $title: 'Placeholder', value: 'Select' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsOption') as any)?.options || [];\r\n }\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMulti')\">\r\n <form [formGroup]=\"multiselectDropDownForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleSelectedOption\" [optionLabel]=\"setting('label-key')\"\r\n [placeholder]=\"setting('placeholderMulti')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiselectDropDownForm.get('multipleSelectedOption')?.touched && multiselectDropDownForm.get('multipleSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiErrorMessage')}}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n selector: 'lib-multiselect-dropdown-with-childs',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, MultiSelectModule],\r\n templateUrl: './multiselect-dropdown-with-childs.component.html',\r\n styleUrl: './multiselect-dropdown-with-childs.component.css'\r\n})\r\nexport class MultiselectDropdownWithChildsComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n multiChildDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n isChild1Required: boolean = false;\r\n isChild2Required: boolean = false;\r\n\r\n public multiChildDropDownForm: FormGroup = this.fb.group({\r\n multipleChildSelectedOption: [[]],\r\n child1: [''],\r\n child2: [''],\r\n child1Label: [''],\r\n child2Label: [''],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.multiChildDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('multiChildOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsChildOption') as any)?.options || [];\r\n }\r\n\r\n const child1LabelControl = this.multiChildDropDownForm.get('child1Label');\r\n const child2LabelControl = this.multiChildDropDownForm.get('child2Label');\r\n child1LabelControl?.setValue(this.setting('child-1-label')); \r\n child2LabelControl?.setValue(this.setting('child-2-label'));\r\n child1LabelControl?.updateValueAndValidity();\r\n child2LabelControl?.updateValueAndValidity(); \r\n\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.multiChildDropdownMap.has(key)) {\r\n this.multiChildDropDownForm.patchValue(this.multiChildDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.multiChildDropDownForm.get('multipleChildSelectedOption');\r\n const child1Control = this.multiChildDropDownForm.get('child1');\r\n const child2Control = this.multiChildDropDownForm.get('child2');\r\n if (this.setting('isMultiChildRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n if (this.setting('isChild1Required') === 'true') {\r\n this.isChild1Required = true;\r\n child1Control?.setValidators([Validators.required]);\r\n child1Control?.updateValueAndValidity();\r\n }\r\n if (this.setting('isChild2Required') === 'true') {\r\n this.isChild2Required = true;\r\n child2Control?.setValidators([Validators.required]);\r\n child2Control?.updateValueAndValidity();\r\n }\r\n }, 1000)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'multipleChildSelectedOption' in value\r\n ) {\r\n this.multiChildDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceMultiName'));\r\n this.getOptions(serviceUrl, this.setting('multiChildOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsChildOption', $title: 'Options', value: [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'multiChildOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassMultiChild', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-multi-child', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key-child', $title: 'Label Key', value: 'option' }),\r\n new FxSelectSetting({ key: 'serviceMultiName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isMultiChildRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiChildErrorMessage', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderMultiChild', $title: 'Placeholder', value: 'Select' }),\r\n\r\n new FxStringSetting({ key: 'child-1-label', $title: 'Child 1 Label', value: '' }),\r\n new FxStringSetting({ key: 'child-1-placeholder', $title: 'Child 1 Placeholder', value: 'enter here' }),\r\n new FxSelectSetting({ key: 'isChild1Required', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'child1ErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n\r\n new FxStringSetting({ key: 'child-2-label', $title: 'Child 2 Label', value: '' }),\r\n new FxStringSetting({ key: 'child-2-placeholder', $title: 'Child 2 Placeholder', value: 'enter here' }),\r\n new FxSelectSetting({ key: 'isChild2Required', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'child2ErrorMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.data;\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsChildOption') as any)?.options || [];\r\n }\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n<div class=\"custom-dropdown\" [ngClass]=\"setting('customClassMultiChild')\">\r\n <form [formGroup]=\"multiChildDropDownForm\" class=\"flex gap-4 w-full\">\r\n \r\n <!-- Dropdown -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-multi-child') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-multiSelect [options]=\"options\" formControlName=\"multipleChildSelectedOption\" [optionLabel]=\"setting('label-key-child')\"\r\n [placeholder]=\"setting('placeholderMultiChild')\" class=\"multiselect\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('multipleChildSelectedOption')?.touched && multiChildDropDownForm.get('multipleChildSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiChildErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <!-- Other input -->\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-1-label') }} <sup class=\"field-required\" *ngIf=\"isChild1Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child1\"\r\n placeholder=\"{{ setting('child-1-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child1')?.touched && multiChildDropDownForm.get('child1')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child1ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('child-2-label') }} <sup class=\"field-required\" *ngIf=\"isChild2Required\">*</sup>\r\n </label>\r\n <input\r\n type=\"text\"\r\n formControlName=\"child2\"\r\n placeholder=\"{{ setting('child-2-placeholder') }}\"\r\n class=\"border p-2 rounded w-full\"\r\n rows=\"2\"\r\n >\r\n\r\n <small\r\n *ngIf=\"multiChildDropDownForm.get('child2')?.touched && multiChildDropDownForm.get('child2')?.errors?.['required']\"\r\n class=\"text-red-500\"\r\n >\r\n {{ setting('child2ErrorMessage')}}\r\n </small>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n</fx-component>","import { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { FxComponent, FxSetting, FxStringSetting, FxSelectSetting, FxValidation, FxValidatorService, FxBaseComponent, FxOptionSetting } from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\n\r\n@Component({\r\n selector: 'lib-dropdown-with-search',\r\n standalone: true,\r\n imports: [DropdownModule, CommonModule, FormsModule, ReactiveFormsModule, CalendarModule, MultiSelectModule, FxComponent],\r\n templateUrl: './dropdown-with-search.component.html',\r\n styleUrl: './dropdown-with-search.component.css'\r\n})\r\nexport class DropdownWithSearchComponent extends FxBaseComponent implements OnInit, AfterViewInit{\r\n private fb = inject(FormBuilder);\r\n private destroy$ = new Subject<Boolean>();\r\n formObject: object = {};\r\n searchDropdownMap = new Map<string, any>();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n \r\n options: any[] = [];\r\n isRequired: boolean = false;\r\n\r\n public searchDropDownForm: FormGroup = this.fb.group({\r\n searchSelectedOption: [''],\r\n });\r\n\r\n constructor(private cdr: ChangeDetectorRef, private http: HttpClient, private fxBuilderWrapperService: FxBuilderWrapperService, private fxApiService: ApiServiceRegistry) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.searchDropDownForm);\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.setting('searchSelectOptionAPIURL')) {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsSearchOption') as any)?.options || [];\r\n // this.options.unshift({ option: 'Select', value: '' });\r\n }\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.searchDropdownMap.has(key)) {\r\n this.searchDropDownForm.patchValue(this.searchDropdownMap.get(key));\r\n }\r\n }, 200);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.searchDropDownForm.get('searchSelectedOption');\r\n if (this.setting('isSearchRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 100)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n\r\n\r\n // for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n // if (key.includes('dropdown-with-other')) {\r\n // this.formObject = value;\r\n // }\r\n // }\r\n\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'searchSelectedOption' in value\r\n ) {\r\n this.searchDropdownMap.set(key, value);\r\n }\r\n }\r\n\r\n })\r\n\r\n const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceSearchName'));\r\n this.getOptions(serviceUrl, this.setting('searchSelectOptionAPIURL'));\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxOptionSetting({ key: 'itemsSearchOption', $title: 'Options', value: [{ option: 'Select', value: '' },{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }] }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),\r\n new FxStringSetting({ key: 'searchSelectOptionAPIURL', $title: 'API Url', value: '' }),\r\n new FxStringSetting({ key: 'customClassSearch', $title: 'Custom Class Name', value: '' }),\r\n new FxStringSetting({ key: 'select-label-search', $title: 'Label', value: '' }),\r\n new FxStringSetting({ key: 'label-key-search', $title: 'Label Key', value: 'option' }),\r\n new FxStringSetting({ key: 'value-key-search', $title: 'Label Key', value: 'value' }),\r\n new FxSelectSetting({ key: 'serviceSearchName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),\r\n new FxSelectSetting({ key: 'isSearchRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'multiErrorSearch', $title: 'Error Message', value: 'Please select' }),\r\n new FxStringSetting({ key: 'placeholderSearch', $title: 'Placeholder', value: 'Select' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n if (url) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n this.options = response?.content || [];\r\n this.options.unshift({ option: 'Select', value: '' });\r\n\r\n },\r\n error: (err) => {\r\n console.error('Error fetching options', err);\r\n }\r\n });\r\n } else {\r\n this.options = (this.fxComponent?.fxData?.settings?.find((s: any) => s.key === 'itemsSearchOption') as any)?.options || [];\r\n // this.options.unshift({ option: 'Select', value: '' });\r\n }\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-dropdown\" [ngClass]=\"setting('customClassSearch')\">\r\n <form [formGroup]=\"searchDropDownForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 relative\">\r\n <label class=\"input-label dark:text-gray-300\">\r\n {{ setting('select-label-search') }} <span class=\"field-required\" *ngIf=\"isRequired\">*</span>\r\n </label>\r\n <p-dropdown [options]=\"options\" formControlName=\"searchSelectedOption\" [optionLabel]=\"setting('label-key-search')\" [filter]=\"true\" [showClear]=\"true\" \r\n [placeholder]=\"setting('placeholderSearch')\" class=\"multiselect\" [optionValue]=\"setting('value-key-search')\">\r\n\r\n <!-- Custom Dropdown Icon -->\r\n <ng-template pTemplate=\"dropdownicon\">\r\n <div class=\"flex align-items-center dd_down_icon\">\r\n <span class=\"pi pi-angle-down text-xl\"></span>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n\r\n\r\n <small\r\n *ngIf=\"searchDropDownForm.get('searchSelectedOption')?.touched && searchDropDownForm.get('searchSelectedOption')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('multiErrorSearch')}}\r\n </small>\r\n </div>\r\n </form>\r\n </div>\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewChecked, ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-summary',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './summary.component.html',\r\n styleUrl: './summary.component.css'\r\n})\r\nexport class SummaryComponent extends FxBaseComponent implements OnInit, AfterViewChecked{\r\n private fb = inject(FormBuilder);\r\n\r\nminDate!: string;\r\nmaxDate!: string;\r\n today = new Date();\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n private destroy$ = new Subject<Boolean>();\r\n datePickerMap = new Map<string, any>();\r\n \r\n \r\n\r\n\r\n public summaryForm: FormGroup = this.fb.group({\r\n summary: [''],\r\n })\r\n\r\n dynamicText: string = '';\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n this._register(this.summaryForm);\r\n });\r\n \r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this.dynamicText = this.setting('summaryText') || '';\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n if (!variables) return;\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const key = this.fxComponent?.fxData?.name;\r\n if(key){\r\n }\r\n this.getContextBaseId();\r\n }\r\n\r\n \r\n\r\n private formatDate(date: Date): string {\r\n return date.toISOString().split('T')[0]; \r\n}\r\n \r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'summaryText', $title: 'Summary Text', value: '' }),\r\n new FxStringSetting({ key: 'summaryLabel', $title: 'Label', value: '' }),\r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n updateTextArea(): void {\r\n const formValues = this.fxComponent?.fxData?.$formGroup?.value;\r\n const dynamicText = this.replacePlaceholders(this.dynamicText, formValues);\r\n this.summaryForm.patchValue({ summary: dynamicText });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n replacePlaceholders(template: string, values: any): string {\r\n return template.replace(/{(.*?)}/g, (match, placeholder) => {\r\n if (values[placeholder] !== undefined) {\r\n return values[placeholder];\r\n } else {\r\n return match;\r\n }\r\n });\r\n}\r\n\r\n\r\n ngAfterViewChecked(): void {\r\n this.updateTextArea();\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"custom-summary relative\">\r\n <form [formGroup]=\"summaryForm\">\r\n\r\n <label class=\"summary-label\">{{ setting('summaryLabel') }}</label>\r\n <div class=\"relative\">\r\n <textarea formControlName=\"summary\" readonly class=\"w-full\" rows=\"2\"></textarea>\r\n </div>\r\n <!-- <div>\r\n <small *ngIf=\"datePickerForm.get('date')?.touched && datePickerForm.get('date')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('datePickerErrorMessage') }}\r\n </small>\r\n </div> -->\r\n </form>\r\n </div>\r\n\r\n</fx-component>","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ApiServiceRegistry } from '@instantsys-labs/core';\r\nimport {\r\n FxBaseComponent,\r\n FxComponent,\r\n FxSelectSetting,\r\n FxSetting,\r\n FxStringSetting,\r\n FxValidation,\r\n FxValidatorService\r\n} from '@instantsys-labs/fx';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\n\r\ninterface SubOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface CustomDropdownOption {\r\n label: string;\r\n value: string;\r\n info?: string;\r\n selected: boolean;\r\n subOptions?: SubOption[];\r\n subSelection?: string | null;\r\n disabled?: boolean;\r\n touched?: boolean;\r\n}\r\n\r\ninterface CustomDropdownConfig {\r\n displayMode?: 'compact' | 'ellipsis';\r\n placeholderLabel?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-customize-dropdown',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent],\r\n templateUrl: './customize-dropdown.component.html',\r\n styleUrls: ['./customize-dropdown.component.css']\r\n})\r\nexport class CustomizeDropdownComponent extends FxBaseComponent implements OnInit , AfterViewInit{\r\n private destroy$ = new Subject<boolean>();\r\n form!: FormGroup;\r\n formObject: object = {};\r\n dropdownOpen = false;\r\n formSubmitted = false;\r\n @ViewChild('fxComponent') fxComponent!: FxComponent;\r\n\r\n findingsOptions: CustomDropdownOption[] = [];\r\n\r\n type1Options: any[] = [ {\r\n label: 'Proclination',\r\n value: 'Proclination',\r\n info: 'Forward inclination of teeth',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Crowding',\r\n value: 'Crowding',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Spacing',\r\n value: 'Spacing',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Retroclination',\r\n value: 'Retroclination',\r\n info: 'Backward inclination of teeth',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n\r\n },\r\n {\r\n label: 'Rotation',\r\n value: 'Rotation',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n }];\r\n\r\n type2Options: any[] = [\r\n {\r\n label: 'Normal',\r\n value: 'Normal',\r\n info: '',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Deep Bite',\r\n value: 'Deep Bite',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n {\r\n label: 'Open Bite',\r\n value: 'Open Bite',\r\n selected: false,\r\n subOptions: [\r\n { label: 'Mild', value: 'mild' },\r\n { label: 'Moderate', value: 'moderate' },\r\n { label: 'Severe', value: 'severe' }\r\n ]\r\n },\r\n ];\r\n\r\n isRequired: boolean = false;\r\n\r\n // @HostListener('document:click', ['$event'])\r\n // onClickOutside(event: MouseEvent) {\r\n // if (this.dropdownOpen && !this.eRef.nativeElement.contains(event.target)) {\r\n // this.dropdownOpen = false;\r\n // this.cdr.detectChanges();\r\n // }\r\n // }\r\n\r\n config: CustomDropdownConfig = {\r\n displayMode: 'ellipsis',\r\n placeholderLabel: 'Select Finding'\r\n };\r\n\r\n customizedDropDownMap = new Map<string, any>();\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private http: HttpClient,\r\n private fxBuilderWrapperService: FxBuilderWrapperService,\r\n private fxApiService: ApiServiceRegistry,\r\n private fb: FormBuilder,\r\n private eRef: ElementRef\r\n ) {\r\n super(cdr);\r\n this.form = this.fb.group({\r\n findings: [[]]\r\n });\r\n this.onInit.subscribe(() => this._register(this.form));\r\n }\r\n ngAfterViewInit(): void {\r\n// setTimeout(()=>{\r\n// const data = [\r\n// {\r\n// label: \"Proclination\",\r\n// value: \"proclination\",\r\n// subSelection: {\r\n// label: \"Mild\",\r\n// value: \"mild\"\r\n// }\r\n// },\r\n// {\r\n// label: \"Overbite\",\r\n// value: \"overbite\",\r\n// subSelection: {\r\n// label: \"Moderate\",\r\n// value: \"moderate\"\r\n// }\r\n// }\r\n// ];\r\n\r\n// this.patchExistingValues(data);\r\n// },2000);\r\n\r\n setTimeout(() => {\r\n const key = this.fxComponent?.fxData?.name;\r\n\r\n if (key && this.customizedDropDownMap.has(key)) {\r\n const data = this.customizedDropDownMap.get(key)?.findings;\r\n this.patchExistingValues(data);\r\n\r\n }\r\n }, 1000);\r\n\r\n setTimeout(() => {\r\n const mainControl = this.form.get('findings');\r\n if (this.setting('isFindingsRequired') === 'true') {\r\n this.isRequired = true;\r\n mainControl?.setValidators([Validators.required]);\r\n mainControl?.updateValueAndValidity();\r\n }\r\n }, 500)\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.setting('optionType') === 'type1') {\r\n this.findingsOptions = this.type1Options;\r\n\r\n }\r\n\r\n else if (this.setting('optionType') === 'type2') {\r\n this.findingsOptions = this.type2Options;\r\n }\r\n\r\n this.fxBuilderWrapperService.variables$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((variables: any) => {\r\n\r\n if (!variables) return;\r\n for (const [key, value] of Object.entries(variables) as [string, any][]) {\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n 'findings' in value\r\n ) {\r\n this.customizedDropDownMap.set(key, value);\r\n }\r\n }\r\n });\r\n // const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));\r\n // this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));\r\n }\r\n\r\n\r\n getOptions(serviceUrl: string, url: string) {\r\n const finalUrl = serviceUrl + url;\r\n this.http.get<any[]>(finalUrl).subscribe({\r\n next: (response: any) => {\r\n // Future API logic here\r\n },\r\n error: (err) => console.error('Error fetching options', err)\r\n });\r\n }\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxSelectSetting({ key: 'displayMode', $title: 'Display Mode', value: 'ellipsis' }, [{ option: 'Ellipsis', value: 'ellipsis' }, { option: 'Compact', value: 'compact' }]),\r\n new FxSelectSetting({ key: 'optionType', $title: 'Option Type', value: 'type1' }, [{ option: 'Finding Type Options', value: 'type1' }, { option: 'Vetical Type Options', value: 'type2' }]),\r\n new FxStringSetting({ key: 'placeholderLabel', $title: 'Placeholder', value: 'Select Options' }),\r\n new FxStringSetting({ key: 'findingLabel', $title: 'Label', value: 'Label' }),\r\n new FxSelectSetting({ key: 'isFindingsRequired', $title: 'Required', value: 'true' }, [{ option: 'Yes', value: 'true' }, { option: 'No', value: 'false' }]),\r\n new FxStringSetting({ key: 'errorFindingMessage', $title: 'Error Message', value: 'Please fill out the field' }),\r\n ];\r\n }\r\n\r\n protected validations(): FxValidation[] {\r\n return [FxValidatorService.required];\r\n }\r\n\r\n /** Dropdown Behavior **/\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n }\r\n\r\n toggleOption(option: CustomDropdownOption, event: Event) {\r\n event.stopPropagation();\r\n\r\n // Toggle checkbox value\r\n option.selected = !option.selected;\r\n\r\n // Reset radios when unchecked\r\n if (!option.selected) {\r\n option.subSelection = null;\r\n option.touched = false;\r\n }\r\n\r\n else{\r\n option.touched = true;\r\n }\r\n\r\n // ✅ Force UI refresh so radios appear instantly\r\n this.cdr.detectChanges();\r\n\r\n // Update reactive form\r\n this.updateFindings();\r\n }\r\n\r\n /** Form & Label Helpers **/\r\n get hasSelectedFindings(): boolean {\r\n return this.findingsOptions.some(f => f.selected);\r\n }\r\n\r\n get selectedFindingsLabel(): string {\r\n const selected = this.findingsOptions\r\n .filter(f => {\r\n if (f.selected) {\r\n // If finding has sub-options → only show if a sub-option is selected\r\n if (f.subOptions?.length) {\r\n return !!f.subSelection;\r\n }\r\n // If no sub-options → always show\r\n return true;\r\n }\r\n return false;\r\n })\r\n .map(f => f.label);\r\n\r\n if (selected.length === 0) return this.setting('placeholderLabel');\r\n\r\n // Display mode logic (Compact or Ellipsis)\r\n const maxCount = this.setting('displayMode') === 'compact' ? 2 : 3;\r\n if (this.setting('displayMode') === 'compact') {\r\n return selected.length <= maxCount\r\n ? selected.join(', ')\r\n : `${selected.slice(0, maxCount).join(', ')} +${selected.length - maxCount} more`;\r\n }\r\n\r\n if (this.setting('displayMode') === 'ellipsis') {\r\n return selected.length > maxCount\r\n ? `${selected.slice(0, maxCount).join(', ')}, ...`\r\n : selected.join(', ');\r\n }\r\n\r\n return selected.join(', ');\r\n }\r\n\r\n /** Update Findings + Validation **/\r\n // updateFindings() {\r\n // const selected = this.findingsOptions\r\n // .filter(f => {\r\n // if (f.selected) {\r\n // // Only include in final form if:\r\n // // - no subOptions, or\r\n // // - subOptions with valid subSelection\r\n // if (f.subOptions?.length) {\r\n // return !!f.subSelection;\r\n // }\r\n // return true;\r\n // }\r\n // return false;\r\n // })\r\n // .map(f => {\r\n // const sub = f.subOptions?.find(s => s.value === f.subSelection) || null;\r\n // return {\r\n // label: f.label,\r\n // value: f.value,\r\n // subSelection: sub ? { label: sub.label, value: sub.value } : null\r\n // };\r\n // });\r\n\r\n // // Update reactive form value\r\n // this.form.patchValue({ findings: selected }, { emitEvent: false });\r\n\r\n // // Validation logic remains same\r\n // const invalidItems = this.findingsOptions.filter(\r\n // f => f.selected && f.subOptions && !f.subSelection\r\n // );\r\n // this.form.get('findings')?.setErrors(\r\n // invalidItems.length > 0 ? { missingSubSelection: true } : null\r\n // );\r\n // }\r\n\r\n updateFindings() {\r\n // Filter selected options with valid subSelection (if subOptions exist)\r\n const selected = this.findingsOptions\r\n .filter(f => {\r\n if (f.selected) {\r\n // Only include in final form if:\r\n // - no subOptions, or\r\n // - subOptions with valid subSelection\r\n if (f.subOptions?.length) {\r\n return !!f.subSelection;\r\n }\r\n return true;\r\n }\r\n return false;\r\n })\r\n .map(f => {\r\n const sub = f.subOptions?.find(s => s.value === f.subSelection) || null;\r\n return {\r\n label: f.label,\r\n value: f.value,\r\n subSelection: sub ? { label: sub.label, value: sub.value } : null\r\n };\r\n });\r\n\r\n // Update reactive form value\r\n this.form.patchValue({ findings: selected }, { emitEvent: false });\r\n\r\n // Validation logic:\r\n // Check if there are any selected options with subOptions but without subSelection\r\n const invalidItems = this.findingsOptions.filter(\r\n f => f.selected && f.subOptions && !f.subSelection\r\n );\r\n\r\n // If there are any invalid items, mark the form as invalid with a custom error\r\n if (invalidItems.length > 0) {\r\n this.form.get('findings')?.setErrors({ missingSubSelection: true });\r\n } else {\r\n // Clear the error if everything is valid\r\n this.form.get('findings')?.setErrors(null);\r\n }\r\n}\r\n\r\n\r\n onSubmit() {\r\n this.formSubmitted = true;\r\n if (this.form.invalid) {\r\n console.warn('⚠️ Please select a sub-option for all selected findings with sub-options.');\r\n return;\r\n }\r\n console.log('✅ Form Value:', this.form.value);\r\n }\r\n\r\n // patchExistingValues(data: any[]) {\r\n // this.findingsOptions.forEach(opt => {\r\n // const match = data.find(x => x.value === opt.value);\r\n // opt.selected = !!match;\r\n // opt.subSelection = match?.severity?.value || null;\r\n // });\r\n // this.updateFindings();\r\n // }\r\n\r\npatchExistingValues(data: any[]) {\r\n // Iterate through the findingsOptions and find the corresponding option for each entry in data\r\n this.findingsOptions.forEach(opt => {\r\n const match = data.find(x => x.value === opt.value);\r\n \r\n if (match) {\r\n opt.selected = true;\r\n opt.subSelection = match.subSelection ? match.subSelection.value : null;\r\n\r\n // console.log(\"Matched Option:\", opt);\r\n // console.log(\"SubSelection Set To:\", this.findingsOptions);\r\n } else {\r\n opt.selected = false;\r\n opt.subSelection = null;\r\n }\r\n });\r\n\r\n // Manually trigger change detection if needed\r\n this.cdr.detectChanges();\r\n \r\n this.updateFindings();\r\n}\r\n\r\nselectSubOption(option: any, subOption: any) {\r\n // Set the subSelection to the clicked value\r\n option.subSelection = subOption.value;\r\n // Mark the option as touched, which will help in form validation\r\n option.touched = true;\r\n // Update the form state\r\n this.updateFindings();\r\n}\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"relative\">\r\n <!-- Header -->\r\n <label for=\"findings\" class=\"input-label\">\r\n {{ setting('findingLabel') }}\r\n <span *ngIf=\"isRequired\" class=\"field-required\">*</span>\r\n </label>\r\n <div #dropdownWrapper class=\"relative\">\r\n <button\r\n type=\"button\"\r\n class=\"w-full border border-gray-300 pl-3 pr-2 py-2 flex justify-between items-center bg-white text-gray-700 hover:border-blue-400\"\r\n (click)=\"toggleDropdown()\"\r\n >\r\n <span *ngIf=\"hasSelectedFindings; else placeholder\">\r\n {{ selectedFindingsLabel }}\r\n </span>\r\n <ng-template #placeholder>\r\n {{ setting('placeholderLabel') }}\r\n </ng-template>\r\n <svg width=\"22\" height=\"20\" viewBox=\"0 0 26 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" width=\"24.766\" height=\"24\" rx=\"3\" fill=\"#FF7900\" fill-opacity=\"0.1\" />\r\n <path\r\n d=\"M12.8918 16.5019C12.7255 16.5019 12.5695 16.4736 12.4239 16.4169C12.2783 16.3602 12.1431 16.2628 12.0183 16.1248L6.27803 9.8162C6.04925 9.56477 5.92946 9.25025 5.91864 8.87265C5.90783 8.49505 6.02762 8.16956 6.27803 7.89619C6.50681 7.64476 6.79799 7.51905 7.15155 7.51905C7.50512 7.51905 7.7963 7.64476 8.02508 7.89619L12.8918 13.2105L17.7586 7.89619C17.9874 7.64476 18.2736 7.51356 18.6172 7.50259C18.9607 7.49162 19.2569 7.62282 19.5056 7.89619C19.7344 8.14762 19.8488 8.46762 19.8488 8.85619C19.8488 9.24477 19.7344 9.56477 19.5056 9.8162L13.7654 16.1248C13.6406 16.2619 13.5054 16.3593 13.3598 16.4169C13.2142 16.4745 13.0582 16.5028 12.8918 16.5019Z\"\r\n fill=\"#FAA762\" />\r\n </svg>\r\n </button>\r\n\r\n <!-- Panel -->\r\n <div\r\n *ngIf=\"dropdownOpen\"\r\n class=\"absolute mt-1 w-full bg-white border border-gray-300 rounded-md shadow-lg max-h-64 overflow-y-auto z-10\"\r\n >\r\n <div\r\n *ngFor=\"let option of findingsOptions\"\r\n class=\"border-b border-gray-100 last:border-none p-2 hover:bg-gray-50 cursor-pointer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- Checkbox + Label -->\r\n <div class=\"flex items-center gap-2\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"w-4 h-4 text-blue-500 border-gray-300 rounded cursor-pointer\"\r\n [(ngModel)]=\"option.selected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (click)=\"toggleOption(option, $event)\"\r\n />\r\n <label\r\n class=\"text-gray-800 font-medium cursor-pointer select-none\"\r\n (click)=\"toggleOption(option, $event)\"\r\n >\r\n {{ option.label }}\r\n </label>\r\n\r\n <span\r\n *ngIf=\"option.info\"\r\n class=\"ml-auto text-blue-500 text-sm cursor-pointer\"\r\n title=\"{{ option.info }}\"\r\n >\r\n ⓘ\r\n </span>\r\n </div>\r\n\r\n <!-- Radios -->\r\n <div\r\n class=\"flex items-center flex-wrap gap-4 ml-6 mt-2 text-sm\"\r\n *ngIf=\"option.selected && option.subOptions\"\r\n >\r\n <ng-container *ngFor=\"let s of option.subOptions\">\r\n <label\r\n class=\"flex items-center space-x-1 cursor-pointer\"\r\n (click)=\"selectSubOption(option, s)\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [name]=\"option.value\"\r\n [value]=\"s.value\"\r\n [(ngModel)]=\"option.subSelection\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"text-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ s.label }}</span>\r\n </label>\r\n</ng-container>\r\n\r\n <!-- Validation Message -->\r\n <div\r\n *ngIf=\"option.selected && option.subOptions && !option.subSelection\"\r\n class=\"text-red-500 text-xs mt-1 w-full ml-1\"\r\n >\r\n Please select one option\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <small *ngIf=\"form.get('findings')?.touched && form.get('findings')?.errors?.['required']\"\r\n class=\"text-red-500\">\r\n {{ setting('errorFindingMessage') }}\r\n </small>\r\n </div>\r\n \r\n </form>\r\n </div>\r\n</fx-component>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { FxBaseComponent, FxComponent, FxSelectSetting, FxSetting, FxStringSetting, FxValidation, FxValidatorService } from '@instantsys-labs/fx';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { FxBuilderWrapperService } from '../../fx-builder-wrapper.service';\r\n\r\n@Component({\r\n selector: 'lib-heading',\r\n standalone: true,\r\n imports: [FxComponent,CommonModule],\r\n templateUrl: './heading.component.html',\r\n styleUrl: './heading.component.css'\r\n})\r\nexport class HeadingComponent extends FxBaseComponent implements OnInit {\r\n selectedLevel: number = 1;\r\n headingText: string = '';\r\nsectionOpened: boolean = true;\r\n constructor(private cdr: ChangeDetectorRef,private http: HttpClient,private fxBuilderWrapperService: FxBuilderWrapperService) {\r\n super(cdr)\r\n this.onInit.subscribe(() => {\r\n // this._register(this.datePickerForm);\r\n });\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.selectedLevel = this.setting('hType') || 1;\r\n this.headingText = this.setting('hLabel') || 'Header';\r\n \r\n }\r\n\r\n\r\n protected settings(): FxSetting[] {\r\n return [\r\n new FxStringSetting({ key: 'hLabel', $title: 'Label', value: 'Header' }),\r\n // new FxSelectSetting({ key: 'hType', $title: 'Heading Type', value: 1 }, [{ option: 'H1', value: 1 }, { option: 'H2', value: 2 }, { option: 'H3', value: 3 }, { option: 'H4', value: 4 }, { option: 'H5', value: 5 }, { option: 'H6', value: 6 }]),\r\n new FxStringSetting({ key: 'hClass', $title: 'Custom Class Name', value: '' }),\r\n ];\r\n }\r\n \r\n protected validations(): FxValidation[] {\r\n return [];\r\n }\r\n\r\n}\r\n","<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('hClass')\" class=\"custom-header-section\">\r\n {{headingText}}\r\n </div>\r\n</fx-component> ","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\nimport { UploaderCheckboxComponent } from './components/uploader-checkbox/uploader-checkbox.component';\r\nimport { DatePickerComponent } from './components/date-picker/date-picker.component';\r\nimport { DropdownWithOtherComponent } from './components/dropdown-with-other/dropdown-with-other.component';\r\nimport { RadioGroupComponent } from './components/radio-group/radio-group.component';\r\nimport { MultiselectDropdownComponent } from './components/multiselect-dropdown/multiselect-dropdown.component';\r\nimport { MultiselectDropdownWithChildsComponent } from './components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component';\r\nimport { DropdownWithSearchComponent } from './components/dropdown-with-search/dropdown-with-search.component';\r\nimport { AccordianComponent } from './components/accordian/accordian.component';\r\nimport { SummaryComponent } from './components/summary/summary.component';\r\nimport { CustomizeDropdownComponent } from './components/customize-dropdown/customize-dropdown.component';\r\nimport { HeadingComponent } from './components/heading/heading.component';\r\n// import { CustomizeDropdownComponent } from './components/multiselect-with-form-fields/customize-dropdown.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('uploader-checkbox'))) {\r\n this.fxWrapperService.registerCustomComponent('Uploader with Checkbox', 'uploader-checkbox', UploaderCheckboxComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('toggle'))) {\r\n this.fxWrapperService.registerCustomComponent('Toggle', 'toggle', ToggleComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-date-picker'))) {\r\n this.fxWrapperService.registerCustomComponent('Date Picker', 'lib-date-picker', DatePickerComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('dropdown-with-other'))) {\r\n this.fxWrapperService.registerCustomComponent('Smartlist with Other', 'dropdown-with-other', DropdownWithOtherComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('radio-group-custom'))) {\r\n this.fxWrapperService.registerCustomComponent('Radio Group with Other', 'radio-group-custom', RadioGroupComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-multiselect-dropdown'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect Dropdown', 'lib-multiselect-dropdown', MultiselectDropdownComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-multiselect-dropdown-with-childs'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect Dropdown with Childs', 'lib-multiselect-dropdown-with-childs', MultiselectDropdownWithChildsComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-dropdown-with-search'))) {\r\n this.fxWrapperService.registerCustomComponent('Dropdown with Search', 'lib-dropdown-with-search', DropdownWithSearchComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-customize-dropdown'))) {\r\n this.fxWrapperService.registerCustomComponent('Multiselect with Form', 'lib-customize-dropdown', CustomizeDropdownComponent);\r\n }\r\n // if (!Boolean(this.fxWrapperService.getComponent('lib-accordian'))) {\r\n // this.fxWrapperService.registerCustomComponent('Accordian', 'lib-accordian', AccordianComponent);\r\n // }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-summary'))) {\r\n this.fxWrapperService.registerCustomComponent('Summary', 'lib-summary', SummaryComponent);\r\n }\r\n if (!Boolean(this.fxWrapperService.getComponent('lib-heading'))) {\r\n this.fxWrapperService.registerCustomComponent('Header', 'lib-heading', HeadingComponent);\r\n }\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\nimport { UploaderCheckboxComponent } from '../uploader-checkbox/uploader-checkbox.component';\r\nimport { DatePickerComponent } from '../date-picker/date-picker.component';\r\nimport { DropdownWithOtherComponent } from '../dropdown-with-other/dropdown-with-other.component';\r\nimport { RadioGroupComponent } from '../radio-group/radio-group.component';\r\nimport { MultiselectDropdownComponent } from '../multiselect-dropdown/multiselect-dropdown.component';\r\nimport { MultiselectDropdownWithChildsComponent } from '../multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component';\r\nimport { DropdownWithSearchComponent } from '../dropdown-with-search/dropdown-with-search.component';\r\nimport { AccordianComponent } from '../accordian/accordian.component';\r\nimport { SummaryComponent } from '../summary/summary.component';\r\nimport { CustomizeDropdownComponent } from '../customize-dropdown/customize-dropdown.component';\r\nimport { HeadingComponent } from '../heading/heading.component';\r\n// import { CustomizeDropdownComponent } from '../multiselect-with-form-fields/customize-dropdown.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 { name: 'Uploader with Checkbox', key: 'uploader-checkbox', component: UploaderCheckboxComponent },\r\n { name: 'Date Picker', key: 'lib-date-picker', component: DatePickerComponent },\r\n { name: 'Smartlist with Other', key: 'dropdown-with-other', component: DropdownWithOtherComponent },\r\n { name: 'Radio Group with Other', key: 'radio-group-custom', component: RadioGroupComponent },\r\n { name: 'Multiselect Dropdown', key: 'lib-multiselect-dropdown', component: MultiselectDropdownComponent },\r\n { name: 'Multiselect Dropdown with Childs', key: 'lib-multiselect-dropdown-with-childs', component: MultiselectDropdownWithChildsComponent },\r\n { name: 'Dropdown with Search', key: 'lib-dropdown-with-search', component: DropdownWithSearchComponent },\r\n { name: 'Multiselect with Form ', key: 'lib-customize-dropdown', component: CustomizeDropdownComponent },\r\n { name: 'Summary', key: 'lib-summary', component: SummaryComponent },\r\n { name: 'Header', key: 'lib-heading', component: HeadingComponent },\r\n \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","i4","i5","i1.FxBuilderWrapperService","i3","i9","uuidv4","i6","i7","i8","i2.FxBuilderWrapperService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQa,uBAAuB,CAAA;AAGd,IAAA,mBAAA,CAAA;AAFb,IAAA,UAAU,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC,CAAC;AACjD,IAAA,oBAAoB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC1D,IAAA,WAAA,CAAoB,mBAA+C,EAAA;QAA/C,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA4B;KAAK;AAEjE,IAAA,uBAAuB,CAAC,KAAa,EAAE,QAAgB,EAAE,SAAgC,EAAA;QAE9F,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC9D,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,WAAW,EAAE;gBACX,KAAK;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,MAAM,EAAE;AACN,oBAAA,EAAE,EAAE,IAAI;AACR,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,MAAM,EAAE,EAAE;AACX,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAA;KACH;AAEM,IAAA,YAAY,CAAC,QAAgB,EAAA;QAClC,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;KACxD;IAEO,oBAAoB,GAAA;AACxB,QAAA,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;KAChC;AAEM,IAAA,UAAU,CAAC,MAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;KAClD;wGAlCQ,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACKK,MAAO,yBAA0B,SAAQ,eAAe,CAAA;AAYxC,IAAA,GAAA,CAAA;AAXZ,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAE1B,IAAA,cAAc,GAAyB,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AAEpE,IAAA,YAAY,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC7C,QAAA,WAAW,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACtC,QAAA,cAAc,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACzC,QAAA,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3E,QAAA,KAAK,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACjC,KAAA,CAAC,CAAA;AAEF,IAAA,WAAA,CAAoB,GAAsB,EAAA;QACxC,KAAK,CAAC,GAAG,CAAC,CAAC;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAGxC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;IAES,QAAQ,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;KAC1G;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;AAEM,IAAA,eAAe,CAAC,OAAY,EAAA;AACjC,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACxC;wGA9BU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZtC,qtJA6Ee,EDpEH,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,uLAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAG1D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,qtJAAA,EAAA,CAAA;;;MEM3D,2BAA2B,CAAA;AAclB,IAAA,EAAA,CAAA;IAbX,OAAO,GAAY,KAAK,CAAC;AACzB,IAAA,OAAO,CAAM;AACZ,IAAA,SAAS,GAAG,IAAI,YAAY,EAAW,CAAC;AACxC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAO,CAAC;AACzC,IAAA,eAAe,CAAK;IAEtB,IAAI,GAAW,CAAC,CAAC;IACjB,SAAS,GAAY,KAAK,CAAC;IAC3B,GAAG,GAAW,EAAE,CAAC;AAEjB,IAAA,WAAW,CAAY;IACvB,WAAW,GAAa,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE7K,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC/B,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3B,SAAA,CAAC,CAAC;KACJ;AACD,IAAA,WAAW,CAAC,OAAsB,EAAA;KAEjC;IACD,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE;AACxC,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;aAAM;AACL,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;KACrD;;IAGM,SAAS,GAAA;AACd,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,MAAM,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACjC,YAAA,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,YAAA,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,UAAU,EAAC,KAAK;AAChB,YAAA,YAAY,EAAC,EAAE;;;;;YAKf,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAClC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KACpC;AAGM,IAAA,YAAY,CAAC,KAAa,EAAA;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC9B;KACF;;AAGM,IAAA,eAAe,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACnD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACpC,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;YACnD,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;AACvD,YAAA,WAAW,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;AACxC,YAAA,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9B,YAAA,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;AAClC,YAAA,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;AAClC,YAAA,SAAS,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC;AACpC,YAAA,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9B,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,YAAY,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AAC1C,YAAA,cAAc,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC;AAC9C,YAAA,aAAa,EAAC,CAAC,aAAa,CAAC,aAAa,CAAC;AAC3C,YAAA,UAAU,EAAC,CAAC,aAAa,CAAC,UAAU,CAAC;AACrC,YAAA,YAAY,EAAC,CAAC,aAAa,CAAC,YAAY,CAAC;;;;;;;;;;;YAWzC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CACpB,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACvD,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC;gBACpD,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;AACvD,aAAA,CAAC,CAAC,CACJ;AACF,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;KACjD;;AAGM,IAAA,SAAS,CAAC,WAAmB,EAAA;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAChC,YAAA,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACrC,YAAA,WAAW,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACvC,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAChD;;;;;;;;;AAeM,IAAA,UAAU,CAAC,WAAmB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;KACjE;;;;;IAOM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;;IAGM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,IAAI,CAAC,GAAG;AACd,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAEM,QAAQ,GAAA;QACb,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAChE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqCM,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;AACvE,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC;AAE3D,QAAA,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAC/B,MAAM,CAAC,MAAM;AACX,kBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAW,KAC5B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACZ,oBAAA,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AACrC,oBAAA,cAAc,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;AAC7C,oBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC/B,oBAAA,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AACzC,oBAAA,sBAAsB,EAAE,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,CAAC;oBAC7D,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAC3B,MAAM,CAAC,cAAc;AACnB,0BAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAY,KACrC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;4BACZ,iBAAiB,EAAE,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;4BACzE,kBAAkB,EAAE,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC5E,yBAAA,CAAC,CACH;0BACD,EAAE,CACP;AACF,iBAAA,CAAC,CACH;kBACD,EAAE,CACP,CAAC;AAEF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACpC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAClD,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACtD,gBAAA,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;gBACvC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CACpB,MAAM,CAAC,OAAO;AACZ,sBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,KAC7B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;wBACZ,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC;wBACpD,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC;AACvD,qBAAA,CAAC,CACH;sBACD,EAAE,CACP;AACD,gBAAA,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,gBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjC,gBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjC,gBAAA,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;AACnC,gBAAA,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,gBAAA,aAAa,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;AAC9C,gBAAA,aAAa,EAAE,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;AAC3C,gBAAA,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AACzC,gBAAA,cAAc,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;AAC7C,gBAAA,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;AACxC,gBAAA,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;gBACzC,MAAM,EAAE,WAAW;AACpB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;KACJ;AAID,IAAA,UAAU,CAAC,WAAmB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAc,CAAC;KAChE;AAED,IAAA,iBAAiB,CAAC,WAAmB,EAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACzB,UAAU,EAAE,CAAC,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC,EAAE,CAAC;YACb,YAAY,EAAE,CAAC,EAAE,CAAC;YAClB,sBAAsB,EAAE,CAAC,EAAE,CAAC;YAC5B,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAClC,SAAA,CAAC,CAAC,CAAC;KACL;IAED,sBAAsB,CAAC,WAAmB,EAAE,WAAmB,EAAA;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC7C,QAAA,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC/B;IAED,iBAAiB,CAAC,WAAmB,EAAE,WAAmB,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;aACvB,EAAE,CAAC,WAAW,CAAC;aACf,GAAG,CAAC,gBAAgB,CAAc,CAAC;KAChD;IAED,gBAAgB,CAAC,WAAmB,EAAE,WAAmB,EAAA;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAChC,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACvB,kBAAkB,EAAE,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC,CAAC;KACL;wGAlSU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,ECfxC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0xnBAmVW,EDxUC,MAAA,EAAA,CAAA,s1jDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,sPAAE,cAAc,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1G,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,0xnBAAA,EAAA,MAAA,EAAA,CAAA,s1jDAAA,CAAA,EAAA,CAAA;gFAK3H,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACE,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;AELF,MAAO,sBAAuB,SAAQ,WAAW,CAAA;AAEzC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAO,CAAC;IAC3C,OAAO,GAAY,KAAK,CAAC;AACvB,IAAA,SAAS,CAAK;AACvB,IAAA,WAAW,CAAK;AAEhB,IAAA,WAAW,CAAC,OAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;KAClC;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;wGAbQ,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfnC,igDA2BM,EDhBM,MAAA,EAAA,CAAA,iZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,2BAA2B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIvE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,igDAAA,EAAA,MAAA,EAAA,CAAA,iZAAA,CAAA,EAAA,CAAA;8BAMvE,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEE,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;AEkCJ,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AA2BpC,IAAA,GAAA,CAAA;AAAgC,IAAA,uBAAA,CAAA;AAA4D,IAAA,cAAA,CAAA;AAAwC,IAAA,mBAAA,CAAA;IA1B/I,SAAS,GAAe,EAAE,CAAC;AAC3B,IAAA,WAAW,GAAW,MAAM,CAAC,IAAI,CAAC;AAClC,IAAA,WAAW,GAAQ;AAC1B,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACxC,YAAA,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACzC,SAAA;KACJ,CAAC;AAEQ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;;IAEnC,cAAc,GAAuD,EAAE,CAAC;AAE1E,IAAA,aAAa,CAAM;AAC1B,IAAA,cAAc,CAAM;AACpB,IAAA,WAAW,CAAM;AACjB,IAAA,gBAAgB,CAAM;IACtB,yBAAyB,GAAY,KAAK,CAAC;IAC3C,kBAAkB,GAAS,EAAE,CAAC;AAErB,IAAA,gBAAgB,GAAG,IAAI,WAAW,EAAE,CAAC;IACrC,oBAAoB,GAA8D,EAAE,CAAC;AACpF,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAClC,IAAA,WAAA,CAAoB,GAAsB,EAAU,uBAAgD,EAAY,cAA8B,EAAU,mBAAwC,EAAA;QAC9L,KAAK,CAAC,GAAG,CAAC,CAAC;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAY,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAU,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QAE9L,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAG;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,SAAC,CAAC,CAAA;KACH;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAC1C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAc,KAAI;YACrD,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,kBAAuB,CAAC;AAC5B,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACpD,oBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;wBACjC,kBAAkB,GAAG,KAAK,CAAC;qBAC5B;iBACF;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE;;oBAE1C,MAAM,cAAc,GAAG,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC;oBAC1G,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,KAAI;;;;;;AAQ7D,wBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE;AACxB,4BAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;yBACzE;AACH,qBAAC,CAAC,CAAA;oBACH,IAAI,CAAC,WAAW,GAAI,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;;oBAEvE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;;;AAGrC,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC1C,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBACxE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtD,wBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;qBAC1B,EAAE,EAAE,CAAC,CAAC;iBACR;aACF;AACH,SAAC,CAAC,CAAA;KACL;IAEM,eAAe,GAAA;QACpB,UAAU,CAAC,MAAK;YACd,IAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE;gBACrE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;SACF,EAAE,GAAG,CAAC,CAAA;KACR;IAES,sBAAsB,GAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,OAAO;AACrB,aAAA,MAAM,CAAC,CAAC,MAAyB,KAAK,MAAM,CAAC,QAAQ,KAAK,gBAAgB,IAAI,MAAM,EAAE,MAAM,CAAC;AAC7F,aAAA,OAAO,CAAC,CAAC,MAAyB,KAAI;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,MAAM,CAAC,MAAO,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC7D,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;AACtE,oBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC;AAC7B,oBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC;AAC7B,iBAAA,CAAC,CAAC,CAAC;AACN,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACN;;;;;;;;;;;;;;;;IAkBM,WAAW,CAAC,KAAY,EAAE,QAAgB,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEpE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAU,KAAI;AACvC,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;wBACjC,MAAM,EAAE,MAAM,CAAC,MAAgB;AAC/B,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA,CAAC,CAAC;;oBAGH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC;AACrG,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;oBAEnG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/C,iBAAC,CAAC;AACF,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAC,CAAC,CAAC;SACJ;KACF;IAGS,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC/E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SACvF,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;AAEM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACtC;AAEM,IAAA,qBAAqB,CAAC,KAAU,EAAA;QACpC,IAAI,CAAC,aAAa,GAAG;YACpB,SAAS,EAAE,KAAK,EAAE,SAAS;YAC3B,GAAG,EAAE,KAAK,EAAE,GAAG;SAChB,CAAA;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;YAC7C,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,MAAM;gBACnB,QAAQ,EAAE,GAAG,EAAE,QAAQ;gBACvB,WAAW,EAAE,GAAG,EAAE,WAAW;gBAC7B,OAAO,EAAE,GAAG,EAAE,OAAO;gBACrB,MAAM,EAAE,GAAG,EAAE,MAAM;gBACnB,QAAQ,EAAE,GAAG,EAAE,QAAQ;gBACvB,QAAQ,EAAE,GAAG,EAAE,QAAQ;gBACvB,SAAS,EAAE,GAAG,EAAE,SAAS;gBACzB,MAAM,EAAE,GAAG,EAAE,MAAM;gBACnB,aAAa,EAAE,GAAG,EAAE,aAAa;gBACjC,YAAY,EAAE,GAAG,EAAE,YAAY;gBAC/B,cAAc,EAAE,GAAG,EAAE,cAAc;gBACnC,aAAa,EAAC,GAAG,EAAE,aAAa;gBAChC,UAAU,EAAC,GAAG,EAAE,UAAU;gBAC1B,YAAY,EAAC,GAAG,EAAE,YAAY;;;;;;gBAM9B,MAAM,EAAE,GAAG,EAAE,MAAM;aACpB,CAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAG,CAAC,KAAK,EAAE,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;;;;;;;;;;YAUnC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;gBACxE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,CAAM,KAAI;oBACzC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AACpB,oBAAA,OAAO,GAAG,CAAC;iBACZ,EAAE,EAAE,CAAC,CAAC;AACT,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;AACD,QAAA,IAAG,KAAK,EAAE,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9B,IAAI,CAAC,WAAW,GAAG;AACjB,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,IAAI,EAAE,EAAE;aACT,CAAC;SACH;QACF,IAAI,CAAC,WAAW,GAAI,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAClD;IAEO,cAAc,GAAA;AACpB,QAAA,IAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAC;YACtB,KAAI,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAC;AACxC,gBAAA,IAAG,OAAO,CAAC,GAAG,KAAK,cAAc,EAAC;AAChC,oBAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;iBAChC;aACF;SACF;KACF;;;;;;;;;;;;;;;;;;;;;;;IAyBQ,SAAS,CAAC,KAAU,EAAE,OAAY,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;YAC9C,IAAG,GAAG,EAAE;AACN,gBAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;gBAE9B,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;oBAC3B,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAQ,KAAI;AAC3B,wBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9C,qBAAC,CAAC,CAAC;AACH,oBAAA,OAAO,MAAM,CAAC;AAChB,iBAAC,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG;oBACjB,OAAO;oBACP,IAAI;iBACL,CAAA;gBACD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACpD,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAClD;AACH,SAAC,CAAC,CAAA;KACH;;;;;;;;;;;;;;;IAmBM,UAAU,CAAC,QAAgB,EAAE,UAAkB,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;;AAG9D,YAAA,IAAI,WAAW,EAAE,MAAM,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;AACpG,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACxE;;AAGD,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAEpD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC;AACrG,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAClD;KACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCM,IAAA,SAAS,CAAC,IAAc,EAAE,QAAgB,EAAE,OAAY,EAAA;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AAEjD,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEpE,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,EAAE,MAAM,CAAC;AACpF,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAyB,EAAE,CAAC;AAE9C,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;YAC3B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,SAAe,KAAK,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CACzD,CAAC;AACF,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;AAEjC,QAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;AAC/B,YAAA,IAAI,EAAE,CAAC,SAAmB,KAAI;AAC5B,gBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;AACrC,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;AACjC,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;;;aAKJ;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;aAC5D;AACF,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAE,GAAQ,EAAE,MAAW,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;KAClF;AAGD,IAAA,0BAA0B,CAAC,SAAc,EAAA;QACvC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,KAAI;YAClC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AACxC,gBAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;oBAClF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;iBAC5C;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,YAAY,CAAC,GAAQ,EAAE,MAAW,EAAC,QAAY,EAAA;AAC7C,QAAA,IAAI,MAAM,CAAC,sBAAsB,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAA;AAChC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;SACvC;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAC,QAAQ,CAAC,CAAC;SAC1C;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;KACxC;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;KACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FD,IAAA,aAAa,CAAC,GAAQ,EAAE,MAAW,EAAC,QAAY,EAAA;QAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AAC5C,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/F,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACtB;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,IAAI,eAAe,CAAC;AAEvD,QAAA,MAAM,aAAa,GAAG,CAAC,GAAQ,KAAI;YACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpF,gBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;aACnB;AAED,YAAA,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AAE9B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,CAAW,QAAA,EAAA,SAAS,CAA0B,wBAAA,CAAA;AACtD,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,CAAC,GAAQ,KAAI;YAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpF,gBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;aACnB;YAED,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,CAAW,QAAA,EAAA,SAAS,CAAU,QAAA,CAAA;AACtC,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,QAAQ,MAAM,CAAC,OAAO;AACpB,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpG,MAAM;AACR,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBACnG,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBAChH,MAAM;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC/G,MAAM;AACR,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;SACrD;KACF;IAKM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;wGA/kBU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EALrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,cAAc,EAAC,mBAAmB,CAAC,EChDjD,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,42hBAyPoB,ED1MR,MAAA,EAAA,CAAA,y6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EAAE,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAC,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EAAC,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EAAC,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAC,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EAAC,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAC,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,ozBAAC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAMrL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAChB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,mBAAmB,EAAC,iBAAiB,EAAC,iBAAiB,EAAC,eAAe,EAAC,cAAc,EAAC,WAAW,EAAC,mBAAmB,EAAC,YAAY,CAAC,EACtL,SAAA,EAAA,CAAC,cAAc,EAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,42hBAAA,EAAA,MAAA,EAAA,CAAA,y6FAAA,CAAA,EAAA,CAAA;wLAMtC,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;AE5CF,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AAIpC,IAAA,GAAA,CAAA;AAHb,IAAA,gBAAgB,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,SAAS,GAAG,KAAK,CAAC;AAEzB,IAAA,WAAA,CAAoB,GAAsB,EAAA;QACxC,KAAK,CAAC,GAAG,CAAC,CAAC;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAExC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAG;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,SAAC,CAAC,CAAA;KACH;IAEM,MAAM,GAAA;QACX,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAChD;IAES,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACrE,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SACrF,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;wGA1BU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZlC,kbAWA,EDHY,MAAA,EAAA,CAAA,6QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,kbAAA,EAAA,MAAA,EAAA,CAAA,6QAAA,CAAA,EAAA,CAAA;;;MEK3D,oBAAoB,CAAA;AAeX,IAAA,IAAA,CAAA;AAd4B,IAAA,eAAe,CAAc;AACpE,IAAA,IAAI,CAAO;IACX,gBAAgB,GAAgB,IAAI,CAAC;AAEtC,IAAA,KAAK,CAAe;AACpB,IAAA,MAAM,CAA2B;AACjC,IAAA,QAAQ,CAAuB;AAC/B,IAAA,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AACzB,IAAA,KAAK,CAAqB;IAE1B,UAAU,GAAG,KAAK,CAAC;IACnB,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACvC,SAAS,GAAG,GAAG,CAAC;AAExB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAI;IAExC,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,kBAAkB,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACtE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SAC/C;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAEO,SAAS,GAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzG,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QACrE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE7B,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjE,QAAA,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEjC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAEO,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;;QAGxC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;AAC7C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/C,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAK;AACtC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B,SAAC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;YAC7C,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO;YAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAE5D,MAAM,aAAa,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;YAE5C,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/C,SAAC,CAAC,CAAC;;QAGH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;;AAEzC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;aACzD;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACrD;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACvC,SAAC,CAAC,CAAC;;AAGH,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KAChE;AAEO,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAqB,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAChD,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAEhC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;aAC/B;AAED,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;AAC9C,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,SAAS,EAAE,GAAG;gBACd,YAAY,EAAE,GAAG;gBACjB,SAAS,EAAE,GAAG;AACd,gBAAA,kBAAkB,EAAE,GAAG;AACxB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE3B,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC;AACF,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAChC;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEhC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAEO,OAAO,GAAG,MAAW;AAC3B,QAAA,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,KAAC,CAAC;IAEF,cAAc,GAAA;AACZ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC;AACpE,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;KACtE;IAEO,cAAc,GAAA;;AAEpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACxC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAK,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAK,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAK,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAK,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;;AAGlE,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;SAC/B;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;KACzB;wGAtKU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,mSCbjC,+DACE,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,CAAA,CAAA;;4FDYW,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,IAAI,EAAA,QAAA,EAAA,+DAAA,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,CAAA;iFAGgC,eAAe,EAAA,CAAA;sBAA9D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBACrC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;;;AESF,MAAO,iBAAkB,SAAQ,eAAe,CAAA;AAwBhC,IAAA,GAAA,CAAA;AAAgC,IAAA,uBAAA,CAAA;AAA0D,IAAA,cAAA,CAAA;AAAwC,IAAA,mBAAA,CAAA;AAAkD,IAAA,SAAA,CAAA;AAC9L,IAAA,YAAA,CAAA;;AAvBH,IAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,aAAa,GAAe,EAAE,CAAC;AAC/B,IAAA,aAAa,GAAQ;AAC1B,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;KACjB,CAAC;AACF,IAAA,UAAU,GAAG;AACX,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;AACnC,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;AACjC,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;AAC9B,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;KAChC,CAAC;IAEF,OAAO,GAAY,KAAK,CAAC;IACzB,WAAW,GAAY,KAAK,CAAC;IAC7B,eAAe,GAAW,EAAE,CAAC;IAC7B,OAAO,GAA2B,IAAI,CAAC;IACvC,QAAQ,GAAkB,IAAI,CAAC;IAC/B,QAAQ,GAAkB,IAAI,CAAC;AACvB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AAClC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACV,IAAA,SAAS,CAAgC;IACjE,WAAoB,CAAA,GAAsB,EAAU,uBAAgD,EAAU,cAA8B,EAAU,mBAAwC,EAAU,SAAuB,EACrN,YAAgC,EAAA;QAExC,KAAK,CAAC,GAAG,CAAC,CAAA;QAHQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAU,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAU,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QAAU,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;QACrN,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;QAGxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACzC,SAAC,CAAC,CAAA;KACH;IAED,cAAc,GAAY,KAAK,CAAC;IAChC,aAAa,GAAQ,IAAI,CAAC;IAE1B,cAAc,GAA+D,EAAE,CAAC;IAChF,YAAY,GAAU,EAAE,CAAC;IACzB,gBAAgB,GAA6B,EAAE,CAAC;AACtB,IAAA,WAAW,CAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuTpD,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;;AAWvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5D,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,eAAe,IAAI,KAAK,EACxB;oBACA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,aAAa,CAAC;iBAC3D;aACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCK,SAAC,CAAC,CAAC;KACN;IAEH,eAAe,GAAA;QACb,UAAU,CAAC,MAAI;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;;AAG3C,YAAA,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAEnD,MAAM,SAAS,GAAG,KAAK;qBACpB,MAAM,CAAC,CAAC,OAAY,KAAK,CAAC,CAAC,OAAO,CAAC;AACnC,qBAAA,GAAG,CAAC,CAAC,OAAY,KAAI;AACpB,oBAAA,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;AAC3C,oBAAA,MAAM,QAAQ,GAAG,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;AAChD,oBAAA,MAAM,UAAU,GAAG,cAAc,EAAE,UAAU,CAAC;AAC9C,oBAAA,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;oBAE3B,OAAO;wBACL,EAAE,EAAEM,EAAM,EAAE;AACZ,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;AAC3B,wBAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;AAC3B,wBAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;AACrC,wBAAA,IAAI,EAAE,IAAI;qBACX,CAAC;AACJ,iBAAC,CAAC,CAAC;AACL,gBAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC;oBAC3D,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;oBACtD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACrD;aACF;SACA,EAAC,GAAG,CAAC,CAAA;;;;;;;;KAWP;AAGC,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAEhD,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;AAC/C,YAAA,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,KAAK,CAAC,CAAC;AAErE,YAAA,IAAI,YAAY,GAAG,WAAW,EAAE;gBAC9B,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,wBAAA,QAAQ,EAAE,OAAO;AACjB,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,MAAM,EAAE,CAAa,UAAA,EAAA,IAAI,CAAC,IAAI,CAAA,oCAAA,EAAuC,WAAW,CAAM,IAAA,CAAA;AACtF,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA,CAAC,CAAC;iBACJ,EAAE,GAAG,CAAC,CAAC;gBACR,OAAO;aACR;YAED,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,IAAG;AACnD,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBACvC;qBAAM;oBACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACjC;AACH,aAAC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,EAAE;gBACpB,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,wBAAA,QAAQ,EAAE,OAAO;AACjB,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,MAAM,EAAE,CAA4B,0BAAA,CAAA;AACpC,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA,CAAC,CAAC;iBACJ,EAAE,GAAG,CAAC,CAAC;gBACR,OAAO;aACR;AAEG,YAAA,MAAM,OAAO,GAAQ;gBACnB,EAAE,EAAEA,EAAM,EAAE;AACZ,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,IAAI,EAAE,QAAQ;aACf,CAAC;AAEF,YAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,gBAAA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAG;oBAClB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;AAClC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;oBACtD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACpD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAE3D,iBAAC,CAAC;AACF,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC5B;iBAAM;;AAEL,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACtD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;aAE1D;AACH,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;KAClB;;;;;IAQD,YAAY,GAAA;QACV,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACtD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;AAGpD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CACvC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAC3E,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;aAAM;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACxC;KACF;;;;;;;;;;;;;;;;AAsBD,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW;YAAE,OAAO;;AAGzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;;QAOnF,IAAI,EAAE,WAAW,EAAE,IAAI,YAAY,IAAI,CAAC,EAAE;YACxC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;SACzD;;QAGD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;QAGtE,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,IAAI,CAAC,aAAa;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;;QAGF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACrD;IAIS,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;;AAExF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnK,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC1F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC1F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,2BAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;;SAE7F,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;;;;;AAO7C,QAAA,IACF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzB,YAAA,2DAA2D,CAAC,IAAI,CAAC,IAAI,CAAC,EACtE;AACA,YAAA,OAAO,OAAO,CAAC;SAChB;;QAIG,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChD,YAAA,OAAO,KAAK,CAAC;SACd;;QAGD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClD,YAAA,OAAO,MAAM,CAAC;SACf;;QAGD,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvD,YAAA,OAAO,KAAK,CAAC;SACd;;QAGD,IACE,IAAI,KAAK,0BAA0B;AACnC,YAAA,IAAI,KAAK,mEAAmE;AAC5E,YAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B;AACA,YAAA,OAAO,OAAO,CAAC;SAChB;;QAGD,IACE,IAAI,KAAK,oBAAoB;AAC7B,YAAA,IAAI,KAAK,yEAAyE;AAClF,YAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B;AACA,YAAA,OAAO,MAAM,CAAC;SACf;QAGD,IACE,IAAI,KAAK,WAAW;YACpB,IAAI,KAAK,iBAAiB;AAC1B,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB;AACA,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,IACF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB;AACA,YAAA,OAAO,KAAK,CAAC;SACd;AAEG,QAAA,IACF,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB;AACA,YAAA,OAAO,KAAK,CAAC;SACd;AAKG,QAAA,OAAO,OAAO,CAAC;KAChB;;;;;;IASD,cAAc,GAAA;;;;;;;;;;QAUZ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACtC;AAED,IAAA,iBAAiB,CAAC,KAAkB,EAAA;KAEnC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;AAED,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB;IAED,WAAW,CAAC,IAAS,EAAE,IAAS,EAAA;AAE9B,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;;QAGlB,IAAI,QAAQ,GAAG,EAAE,CAAC;AAElB,QAAA,IAAI,IAAI,EAAE,IAAI,EAAE;YACd,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3C;aAAM;AACL,YAAA,QAAQ,GAAG,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;SAC/B;;AAID,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;AAED,IAAA,aAAa,CAAC,IAAS,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;SACR;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAG,UAAU,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;aAAM;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1C;KACF;AAEO,IAAA,iBAAiB,CAAC,WAAgB,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC;AACF,QAAA,MAAM,UAAU,GAAG,CAAG,EAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAA,wBAAA,CAA0B,CAAC;QACpG,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,UAAU,EACV,OAAO,EACP,EAAE,YAAY,EAAE,aAAa,EAAE,CAChC,CAAC,SAAS,CAAC,QAAQ,IAAG;AACrB,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5B,SAAC,CAAC,CAAC;KACJ;IAEO,QAAQ,CAAC,GAAW,EAAE,QAAgB,EAAA;AAC5C,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAE1B,QAAA,IAAI,SAAS,KAAK,KAAK,EAAE;;YAEvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC;SACnE;aACI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;;;;YAIzF,MAAM,eAAe,GAAG,oCAAoC,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;YAC1G,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,eAAe,CAAC,CAAC;;SAG/E;aACI;;AAEH,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;SAC/B;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC3B;wGA9zBU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAJjB,CAAC,cAAc,EAAE,mBAAmB,CAAC,ECrBlD,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,s7gCAkSe,ED9QH,MAAA,EAAA,CAAA,62mDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,4EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKlJ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,CAAC,EAAA,SAAA,EACnJ,CAAC,cAAc,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,s7gCAAA,EAAA,MAAA,EAAA,CAAA,62mDAAA,CAAA,EAAA,CAAA;wPA2BxB,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW,CAAA;gBAgBI,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEpDpB,MAAO,eAAgB,SAAQ,eAAe,CAAA;AAG9B,IAAA,GAAA,CAAA;AAFb,IAAA,aAAa,GAAG,IAAI,WAAW,CAAU,KAAK,CAAC,CAAA;AAEtD,IAAA,WAAA,CAAoB,GAAsB,EAAA;QACxC,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAExC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAG;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,SAAC,CAAC,CAAA;KACH;IAES,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC3E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC3E,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;wGAnBU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ5B,okBAYA,EDJY,MAAA,EAAA,CAAA,isBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,okBAAA,EAAA,MAAA,EAAA,CAAA,isBAAA,CAAA,EAAA,CAAA;;;AEmBlE,MAAO,yBAA0B,SAAQ,eAAe,CAAA;AAcvC,IAAA,GAAA,CAAA;AAA+B,IAAA,uBAAA,CAAA;;AAZzB,IAAA,WAAW,CAAe;AAC7C,IAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,aAAa,GAAe,EAAE,CAAC;AAC/B,IAAA,aAAa,GAAQ;AAC1B,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;;KAEjB,CAAC;IACF,gBAAgB,GAA0E,EAAE,CAAC;AACrF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AAClC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,eAAe,GAAY,KAAK,CAAC;IACxC,WAAoB,CAAA,GAAsB,EAAS,uBAAgD,EAAA;QACjG,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAS,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAEjG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAG;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACnD,SAAC,CAAC,CAAA;KACH;;;;;IAUD,cAAc,GAA+D,EAAE,CAAC;IAChF,YAAY,GAAU,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmJ1B,QAAQ,GAAA;;QAEN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;YAGvB,MAAM,gBAAgB,GAA0E,EAAE,CAAC;;;;;;;;;;;AAanG,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACzC,oBAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAExC,gBAAgB,CAAC,GAAG,CAAC,GAAG;wBACtB,aAAa,EAAE,KAAK,CAAC,aAAa;AAClC,wBAAA,eAAe,EAAE,eAAe;qBACjC,CAAC;iBACH;aACF;AAID,YAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC3C,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACjC,OAAO,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;KACvD;AAEO,IAAA,WAAW,CAAC,KAAU,EAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEhC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAErE,QAAA,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACvD;AAGO,IAAA,kBAAkB,CAAC,KAAU,EAAA;AACnC,QAAA,OAAO,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;KAChF;IAED,eAAe,GAAA;QACb,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;QAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;AAChE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC;YACnE,MAAM,YAAY,GAAuD,EAAE,CAAC;;AAG5E,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AAClC,gBAAA,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;gBACtC,IAAI,WAAW,EAAE;oBACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACtE,GAAG,CAAC,CAAC,IAAU,MAAM;wBACnB,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AACjC,wBAAA,WAAW,EAAE,IAAI,EAAE,WAAW;qBAC/B,CAAC,CAAC,CACJ,CAAC;AACF,oBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;AACH,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,QAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;AAC/B,oBAAA,IAAI,EAAE,CAAC,SAAS,KAAI;wBAClB,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK;4BACvC,EAAE,EAAEM,EAAM,EAAE;AACZ,4BAAA,IAAI,EAAE,IAAI;4BACV,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,yBAAA,CAAC,CAAC,CAAC;AAEJ,wBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC;wBAC3D,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACtD,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;wBAC/F,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBACrD;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;wBACb,OAAO,CAAC,KAAK,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAG,CAAA,CAAA,EAAE,GAAG,CAAC,CAAC;qBAC1D;AACF,iBAAA,CAAC,CAAC;aACJ;SACF;aAAM;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;SAC5D;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAGA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;AAC/C,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAEhC,gBAAA,MAAM,CAAC,MAAM,GAAG,CAAC,IAAG;AAClB,oBAAA,MAAM,OAAO,GAAG;wBACd,EAAE,EAAEA,EAAM,EAAE;AACZ,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM;wBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB,CAAC;AAEF,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACtD,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;oBAC/F,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtD,iBAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC5B;SACF;KACF;;;;;;;;;;;;;;;;AAqBD,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW;YAAE,OAAO;;AAGzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;QAGnF,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;;QAGxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;QAGtE,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,IAAI,CAAC,aAAa;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,GAAE,IAAI,CAAC,eAAe;SAC3E,CAAC;;QAGF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACrD;IAED,gBAAgB,GAAA;QACf,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,IAAI,CAAC,aAAa;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,GAAE,IAAI,CAAC,eAAe;SAC3E,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACpD;IAGS,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC;AACvF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC;AAClF,YAAA,IAAI,eAAe,CAAC,EAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAC,EAAE,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAC,EAAE,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;SAC7J,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;wGA5XS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BtC,uwMAiEiB,ED1CL,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,gQAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,uwMAAA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA,CAAA;yHAM3C,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEdrB,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AAiBjC,IAAA,GAAA,CAAA;AAA+B,IAAA,IAAA,CAAA;AAAyB,IAAA,uBAAA,CAAA;AAhBpE,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;;;AAGpC,IAAA,OAAO,CAAU;AACjB,IAAA,OAAO,CAAU;AACd,IAAA,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACO,IAAA,WAAW,CAAe;AAC5C,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AACzC,IAAA,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;AACxC,IAAA,iBAAiB,CAAU;AAGnB,IAAA,cAAc,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACzC,KAAA,CAAC,CAAA;AAEJ,IAAA,WAAA,CAAoB,GAAsB,EAAS,IAAgB,EAAS,uBAAgD,EAAA;QACzH,KAAK,CAAC,GAAG,CAAC,CAAA;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAS,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAS,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;AAEzH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;KAEJ;IAGH,QAAQ,GAAA;QAEP,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;AAEvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;;;;;;AAQ5C,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AAC3E,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,MAAM,IAAI,KAAK,EACf;oBACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBACpC;gBAED,IAAI,GAAG,KAAK,mBAAmB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;iBACxC;aAEA;AACC,SAAC,CAAC,CAAC;;;;;;;;AAaH,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAE3B,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAElC,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;;;;KAQ1B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACxC;IAEA,eAAe,GAAA;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;QAC3C,IAAG,GAAG,EAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC7C,YAAA,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;YAC1D,IAAG,SAAS,EAAC;AACT,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACrC,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAC7B,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAE3B;iBACG;;;;;;AAMA,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACrC,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAC7B,gBAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAE3B;YAGH,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAC,IAAI,EAAC,SAAS,EAAC,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAG;AAC9D,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AAEzB,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACxF,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;;;;;YAQ1F,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7F,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;IAIa,QAAQ,GAAA;QACd,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpE,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AACxF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACjE,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;SAEpH,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;wGAlKM,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,m5LAyDe,EAAA,MAAA,EAAA,CAAA,q4BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9CJ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIzE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EACf,UAAA,EAAA,IAAI,EACR,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,m5LAAA,EAAA,MAAA,EAAA,CAAA,q4BAAA,CAAA,EAAA,CAAA;oJAW1D,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEJrB,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAuBzC,IAAA,GAAA,CAAA;AAAgC,IAAA,IAAA,CAAA;AAA0B,IAAA,uBAAA,CAAA;AAA0D,IAAA,YAAA,CAAA;AAtBhI,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;IAC1C,UAAU,GAAW,EAAE,CAAC;AACxB,IAAA,WAAW,GAAG,IAAI,GAAG,EAAe,CAAC;AACX,IAAA,WAAW,CAAe;;;;;;;IAQpD,OAAO,GAAU,EAAE,CAAC;IACpB,UAAU,GAAY,KAAK,CAAC;IAC5B,eAAe,GAAY,KAAK,CAAC;IACjC,cAAc,GAAW,GAAG,CAAC;AAEtB,IAAA,YAAY,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7C,cAAc,EAAE,CAAC,EAAE,CAAC;QACpB,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5C,KAAA,CAAC,CAAC;AAEH,IAAA,WAAA,CAAoB,GAAsB,EAAU,IAAgB,EAAU,uBAAgD,EAAU,YAAgC,EAAA;QACtK,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;AAEtK,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KAEJ;IAED,eAAe,GAAA;QAEb,UAAU,CAAC,MAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACzD;SACF,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,MAAM,EAAE;AACzC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACvC;SACF,EAAE,GAAG,CAAC,CAAA;KACR;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;AASvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,gBAAgB,IAAI,KAAK,EACzB;oBACA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAClC;aACF;AAEH,SAAC,CAAC,CAAA;;;;;;;;;;AAWJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YACtE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAEzD,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;gBACrB,YAAY,EAAE,MAAM,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,YAAY,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;aACpD;iBAAM;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,YAAY,EAAE,OAAO,EAAE,CAAC;gBACxB,YAAY,EAAE,KAAK,EAAE,CAAC;gBACtB,YAAY,EAAE,eAAe,EAAE,CAAC;aACjC;YAED,YAAY,EAAE,sBAAsB,EAAE,CAAC;YACvC,YAAY,EAAE,aAAa,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KAEJ;IAES,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC9E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACxE,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACzF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACvF,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAClP,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACnJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;AACzG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;SAC7G,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;IAED,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;aACvD;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;aAC9C;AACF,SAAA,CAAC,CAAC;KACJ;wGA3IU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBvC,+tHAoGkB,EAAA,MAAA,EAAA,CAAA,+6FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtFN,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1E,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACnB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,+tHAAA,EAAA,MAAA,EAAA,CAAA,+6FAAA,CAAA,EAAA,CAAA;uLAS5D,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AELpB,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AA0BhC,IAAA,GAAA,CAAA;AAA+B,IAAA,IAAA,CAAA;AAAyB,IAAA,uBAAA,CAAA;AAAyD,IAAA,YAAA,CAAA;AAzBjI,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;IAC1C,UAAU,GAAW,EAAE,CAAC;AACf,IAAA,eAAe,GAAiB,KAAK,CAAC;IAC7C,YAAY,GAAG,KAAK,CAAC;AACf,IAAA,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACnC,YAAY,EAAE,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,EAAE,CAAC;QACb,mBAAmB,EAAE,CAAC,EAAE,CAAC;QACzB,KAAK,EAAC,CAAC,EAAE,CAAC;AACX,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,GAAU;AACf,QAAA,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC/B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;KAC9B,CAAC;AAEwB,IAAA,WAAW,CAAe;AACpD,IAAA,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;AACnC,IAAA,YAAY,CAAM;IAClB,UAAU,GAAY,KAAK,CAAC;IAC5B,eAAe,GAAY,KAAK,CAAC;IACjC,eAAe,GAAW,EAAE,CAAC;AAE7B,IAAA,WAAA,CAAoB,GAAsB,EAAS,IAAgB,EAAS,uBAAgD,EAAS,YAAgC,EAAA;QAClK,KAAK,CAAC,GAAG,CAAC,CAAA;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAS,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAS,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAS,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;AAEjK,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;KAEL;IAEC,eAAe,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,GAAK,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;QACjH,MAAM,SAAS,GACnB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,cAAc,CAAS,EAAE,KAAK;AAC9F,YAAA,EAAE,CAAC;QACL,IAAI,CAAC,YAAY,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,iBAAiB,CAAS,EAAE,KAAK,CAAA;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjD,QAAA,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,UAAU,CAAC,MAAK;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC3C;SACF,EAAE,GAAG,CAAC,CAAC;QAED,UAAU,CAAC,MAAI;YACjB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;YACtE,IAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAC;AAC7C,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACtC;SACD,EAAC,GAAG,CAAC,CAAA;KAGF;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;AASvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACnF,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,cAAc,IAAI,KAAK,EACvB;oBACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAChC;aACF;AAGM,SAAC,CAAC,CAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAK,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;;;;;;;;;;;;;;KAoBlH;IAES,QAAQ,GAAA;QACb,OAAO;;AAEL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;;;;;AAKxF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;YAClH,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,EAAG,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;AAC5L,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,EAAE,gCAAgC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;AACxI,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AAC1F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,8BAA8B,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC/G,YAAA,IAAI,eAAe,CAAC,EAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAC,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC,CAAC;AAClJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,6BAA6B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;;;;;;SAMvG,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QAEvC,IAAI,CAAC,YAAY,GAAG,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC;AACpD,QAAA,IAAG,IAAI,CAAC,YAAY,EAAC;YACzB,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YAC5E,mBAAmB,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,YAAY,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,YAAY,EAAE,sBAAsB,EAAE,CAAC;SAClC;aACG;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,YAAY,EAAE,KAAK,EAAE,CAAC;YACtB,YAAY,EAAE,eAAe,EAAE,CAAC;YAChC,YAAY,EAAE,sBAAsB,EAAE,CAAC;SACxC;KAEF;wGAjKU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EClBhC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6hFAmFA,EDrEY,MAAA,EAAA,CAAA,mEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,8BAAC,iBAAiB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI5F,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAClB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAC,iBAAiB,CAAC,EAAA,QAAA,EAAA,6hFAAA,EAAA,MAAA,EAAA,CAAA,mEAAA,CAAA,EAAA,CAAA;uLAQjG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAewB,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEnBtB,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAe3C,IAAA,GAAA,CAAA;AAAgC,IAAA,IAAA,CAAA;AAA0B,IAAA,uBAAA,CAAA;AAA0D,IAAA,YAAA,CAAA;AAbhI,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;IAC1C,UAAU,GAAW,EAAE,CAAC;AACxB,IAAA,sBAAsB,GAAG,IAAI,GAAG,EAAe,CAAC;AACtB,IAAA,WAAW,CAAe;IAEpD,OAAO,GAAU,EAAE,CAAC;IACpB,UAAU,GAAY,KAAK,CAAC;AAErB,IAAA,uBAAuB,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACxD,sBAAsB,EAAE,CAAC,EAAE,CAAC;AAC7B,KAAA,CAAC,CAAC;AAEH,IAAA,WAAA,CAAoB,GAAsB,EAAU,IAAgB,EAAU,uBAAgD,EAAU,YAAgC,EAAA;QACtK,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;AAEtK,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KAEJ;IAED,eAAe,GAAA;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,aAAa,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;SACtH;QAED,UAAU,CAAC,MAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/E;SACF,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,CAAC,MAAK;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,MAAM,EAAE;AAC9C,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACvC;SACF,EAAE,GAAG,CAAC,CAAA;KACR;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;AASvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,wBAAwB,IAAI,KAAK,EACjC;oBACA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC7C;aACF;AAEH,SAAC,CAAC,CAAA;AAEJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;KACtE;IAES,QAAQ,GAAA;QAChB,OAAO;YACL,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACzM,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACrF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACxF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC9E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC/E,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACvP,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACxJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AAClG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACzF,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;IAED,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAA;QACxC,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC;AACvC,gBAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,oBAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC;iBAC/B;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;iBAC9C;AACF,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,aAAa,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;SACtH;KACF;wGA5GU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EClBzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,myCAyBe,EDXH,MAAA,EAAA,CAAA,ibAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,qIAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI7F,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EACxB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,myCAAA,EAAA,MAAA,EAAA,CAAA,ibAAA,CAAA,EAAA,CAAA;uLAU/E,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AENpB,MAAO,sCAAuC,SAAQ,eAAe,CAAA;AAoBrD,IAAA,GAAA,CAAA;AAAgC,IAAA,IAAA,CAAA;AAA0B,IAAA,uBAAA,CAAA;AAA0D,IAAA,YAAA,CAAA;AAnB/H,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC1B,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;IAC1C,UAAU,GAAW,EAAE,CAAC;AACxB,IAAA,qBAAqB,GAAG,IAAI,GAAG,EAAe,CAAC;AACrB,IAAA,WAAW,CAAe;IAEpD,OAAO,GAAU,EAAE,CAAC;IACpB,UAAU,GAAY,KAAK,CAAC;IAC5B,gBAAgB,GAAY,KAAK,CAAC;IAClC,gBAAgB,GAAY,KAAK,CAAC;AAE3B,IAAA,sBAAsB,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACvD,2BAA2B,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC,EAAE,CAAC;QACjB,WAAW,EAAE,CAAC,EAAE,CAAC;AAClB,KAAA,CAAC,CAAC;AAEH,IAAA,WAAA,CAAoB,GAAsB,EAAU,IAAgB,EAAU,uBAAgD,EAAU,YAAgC,EAAA;QACtK,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;AAEtK,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KAEJ;IAED,eAAe,GAAA;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,kBAAkB,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;SAC3H;QAEA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzE,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5D,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5D,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;QAC7C,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;QAG/C,UAAU,CAAC,MAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7E;SACF,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,CAAC,MAAK;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YACnF,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,MAAM,EAAE;AACnD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACvC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,MAAM,EAAE;AAC/C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpD,aAAa,EAAE,sBAAsB,EAAE,CAAC;aACzC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,MAAM,EAAE;AAC/C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpD,aAAa,EAAE,sBAAsB,EAAE,CAAC;aACzC;SACF,EAAE,IAAI,CAAC,CAAA;KACT;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;AASvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,6BAA6B,IAAI,KAAK,EACtC;oBACA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5C;aACF;AAEH,SAAC,CAAC,CAAA;AAEJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;KACrE;IAES,QAAQ,GAAA;QAChB,OAAO;YACL,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9M,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACpF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACrF,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACvP,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7J,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACvG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAE5F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACjF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACvG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;AAE9G,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACjF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACvG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;SAClH,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;IAED,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAA;QACxC,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC;AACvC,gBAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,oBAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC;iBAC/B;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;iBAC9C;AACF,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,kBAAkB,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;SAC3H;KACF;wGA/IU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,EClBnD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kyFAqEe,EDvDH,MAAA,EAAA,CAAA,ibAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,qIAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI7F,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAPlD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EACpC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,kyFAAA,EAAA,MAAA,EAAA,CAAA,ibAAA,CAAA,EAAA,CAAA;uLAS/E,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEJpB,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAc1C,IAAA,GAAA,CAAA;AAAgC,IAAA,IAAA,CAAA;AAA0B,IAAA,uBAAA,CAAA;AAA0D,IAAA,YAAA,CAAA;AAbhI,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACzB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;IAC1C,UAAU,GAAW,EAAE,CAAC;AACxB,IAAA,iBAAiB,GAAG,IAAI,GAAG,EAAe,CAAC;AACjB,IAAA,WAAW,CAAe;IAEpD,OAAO,GAAU,EAAE,CAAC;IACpB,UAAU,GAAY,KAAK,CAAC;AAErB,IAAA,kBAAkB,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QACnD,oBAAoB,EAAE,CAAC,EAAE,CAAC;AAC3B,KAAA,CAAC,CAAC;AAEH,IAAA,WAAA,CAAoB,GAAsB,EAAU,IAAgB,EAAU,uBAAgD,EAAU,YAAgC,EAAA;QACtK,KAAK,CAAC,GAAG,CAAC,CAAA;QADQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAU,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;AAEtK,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;KAEJ;IAED,eAAe,GAAA;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,mBAAmB,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;;SAE5H;QAED,UAAU,CAAC,MAAK;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACrE;SACF,EAAE,GAAG,CAAC,CAAC;QAER,UAAU,CAAC,MAAK;YACd,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACxE,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,MAAM,EAAE;AAC/C,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACvC;SACF,EAAE,GAAG,CAAC,CAAA;KACR;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;;;;;;AASvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,sBAAsB,IAAI,KAAK,EAC/B;oBACA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBACxC;aACF;AAEH,SAAC,CAAC,CAAA;AAEJ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;KACvE;IAES,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/O,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACzF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACrF,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACtF,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACxP,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AACzJ,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AACjG,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SAC1F,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;IAED,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAA;QACxC,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC;AACvC,gBAAA,IAAI,EAAE,CAAC,QAAa,KAAI;oBACtB,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;AACvC,oBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;iBAEvD;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;iBAC9C;AACF,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,mBAAmB,CAAS,EAAE,OAAO,IAAI,EAAE,CAAC;;SAE5H;KACF;wGAhHU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,ECnBxC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+2CA2Be,EDZH,MAAA,EAAA,CAAA,8aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,g0CAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,+BAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI7G,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cACxB,IAAI,EAAA,OAAA,EACP,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,+2CAAA,EAAA,MAAA,EAAA,CAAA,8aAAA,CAAA,EAAA,CAAA;uLAS/F,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AERpB,MAAO,gBAAiB,SAAQ,eAAe,CAAA;AAkB9B,IAAA,GAAA,CAAA;AAA+B,IAAA,IAAA,CAAA;AAAyB,IAAA,uBAAA,CAAA;AAjBrE,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEnC,IAAA,OAAO,CAAU;AACjB,IAAA,OAAO,CAAU;AACd,IAAA,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACO,IAAA,WAAW,CAAe;AAC5C,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AAC1C,IAAA,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;AAK/B,IAAA,WAAW,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3C,OAAO,EAAE,CAAC,EAAE,CAAC;AACd,KAAA,CAAC,CAAA;IAED,WAAW,GAAW,EAAE,CAAC;AAC5B,IAAA,WAAA,CAAoB,GAAsB,EAAS,IAAgB,EAAS,uBAAgD,EAAA;QACzH,KAAK,CAAC,GAAG,CAAC,CAAA;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAS,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAS,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;AAEzH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;KAEJ;IAGH,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;AACzB,SAAC,CAAC,CAAC;KACF;IAEA,eAAe,GAAA;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;QAC3C,IAAG,GAAG,EAAC;SACN;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;AAIO,IAAA,UAAU,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;IAIa,QAAQ,GAAA;QACd,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC9E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SACzE,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;IAEH,cAAc,GAAA;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;AAC/D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,mBAAmB,CAAC,QAAgB,EAAE,MAAW,EAAA;QACjD,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,KAAI;AACzD,YAAA,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE;AACrC,gBAAA,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;aAC5B;iBAAM;AACL,gBAAA,OAAO,KAAK,CAAC;aACd;AACH,SAAC,CAAC,CAAC;KACJ;IAGC,kBAAkB,GAAA;QAChB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;wGAnFU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAR,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB7B,kqBAiBe,EDLH,MAAA,EAAA,CAAA,sLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,kqBAAA,EAAA,MAAA,EAAA,CAAA,sLAAA,CAAA,EAAA,CAAA;oJAU3C,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEuBrB,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAoHnD,IAAA,GAAA,CAAA;AACA,IAAA,IAAA,CAAA;AACA,IAAA,uBAAA,CAAA;AACA,IAAA,YAAA,CAAA;AACA,IAAA,EAAA,CAAA;AACA,IAAA,IAAA,CAAA;AAxHF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW,CAAC;AAC1C,IAAA,IAAI,CAAa;IACjB,UAAU,GAAW,EAAE,CAAC;IACxB,YAAY,GAAG,KAAK,CAAC;IACrB,aAAa,GAAG,KAAK,CAAC;AACI,IAAA,WAAW,CAAe;IAEpD,eAAe,GAA2B,EAAE,CAAC;AAE7C,IAAA,YAAY,GAAU,CAAK;AACvB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,IAAI,EAAE,8BAA8B;AACpC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,IAAI,EAAE,+BAA+B;AACrC,YAAA,QAAQ,EAAE,KAAK;AACd,YAAA,UAAU,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AAEF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,KAAK;AACd,YAAA,UAAU,EAAE;AACX,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA,CAAC,CAAC;AAEL,IAAA,YAAY,GAAU;AAChB,QAAA;AACF,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;AACV,gBAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrC,aAAA;AACF,SAAA;KACF,CAAC;IAEF,UAAU,GAAY,KAAK,CAAC;;;;;;;;AAU5B,IAAA,MAAM,GAAyB;AAC7B,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,gBAAgB,EAAE,gBAAgB;KACnC,CAAC;AAEF,IAAA,qBAAqB,GAAG,IAAI,GAAG,EAAe,CAAC;IAE/C,WACU,CAAA,GAAsB,EACtB,IAAgB,EAChB,uBAAgD,EAChD,YAAgC,EAChC,EAAe,EACf,IAAgB,EAAA;QAExB,KAAK,CAAC,GAAG,CAAC,CAAC;QAPH,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoB;QAChC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAGxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,QAAQ,EAAE,CAAC,EAAE,CAAC;AACf,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACxD;IACD,eAAe,GAAA;;;;;;;;;;;;;;;;;;;;;;QAwBT,UAAU,CAAC,MAAK;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;YAE3C,IAAI,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC3D,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAEhC;SACF,EAAE,IAAI,CAAC,CAAC;QAET,UAAU,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,MAAM,EAAE;AACjD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,WAAW,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,WAAW,EAAE,sBAAsB,EAAE,CAAC;aACvC;SACF,EAAE,GAAG,CAAC,CAAA;KACZ;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE;AAC1C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;SAE1C;aAEI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,EAAE;AAC/C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC;SAC1C;QAED,IAAI,CAAC,uBAAuB,CAAC,UAAU;AACpC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,SAAc,KAAI;AAE5B,YAAA,IAAI,CAAC,SAAS;gBAAE,OAAO;AACvB,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAoB,EAAE;AACvE,gBAAA,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,UAAU,IAAI,KAAK,EACnB;oBACA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBAC5C;aACF;AACH,SAAC,CAAC,CAAC;;;KAGN;IAGD,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAA;AACxC,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;;aAEvB;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC;AAC7D,SAAA,CAAC,CAAC;KACJ;IAES,QAAQ,GAAA;QAChB,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5K,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3L,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;AAC/F,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7E,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1J,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;SACnH,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACtC;;IAGD,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;KACxC;IAED,YAAY,CAAC,MAA4B,EAAE,KAAY,EAAA;QACrD,KAAK,CAAC,eAAe,EAAE,CAAC;;AAGxB,QAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAGnC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,YAAA,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;AAC3B,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;aAEG;AACF,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;;AAGD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;;QAGzB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;;AAGD,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;KACnD;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe;aAClC,MAAM,CAAC,CAAC,IAAG;AACV,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;;AAEd,gBAAA,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE;AACxB,oBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;iBACzB;;AAED,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAErB,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;;AAGnE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE;AAC7C,YAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,QAAQ;AAChC,kBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;kBACnB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAK,EAAA,EAAA,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAA,KAAA,CAAO,CAAC;SACrF;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE;AAC9C,YAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,QAAQ;AAC/B,kBAAE,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAO,KAAA,CAAA;AAClD,kBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;AAED,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsCD,cAAc,GAAA;;AAEd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe;aAClC,MAAM,CAAC,CAAC,IAAG;AACV,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;;;;AAId,gBAAA,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE;AACxB,oBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;iBACzB;AACD,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAG;YACP,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;YACxE,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI;aAClE,CAAC;AACJ,SAAC,CAAC,CAAC;;AAGL,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;;QAInE,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAC9C,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,CACnD,CAAC;;AAGF,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;SACrE;aAAM;;AAEL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SAC5C;KACF;IAGC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YAC1F,OAAO;SACR;QACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/C;;;;;;;;;AAWH,IAAA,mBAAmB,CAAC,IAAW,EAAA;;AAE7B,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAEpD,IAAI,KAAK,EAAE;AACT,gBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;AACpB,gBAAA,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;;;aAIzE;iBAAM;AACL,gBAAA,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;AACrB,gBAAA,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC;aACzB;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,eAAe,CAAC,MAAW,EAAE,SAAc,EAAA;;AAEzC,QAAA,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;;AAEtC,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;;QAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;wGAtaY,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CvC,0qJA0GA,EDjEY,MAAA,EAAA,CAAA,gmCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI1D,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,0qJAAA,EAAA,MAAA,EAAA,CAAA,gmCAAA,CAAA,EAAA,CAAA;0OAU5C,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;;;AEpCpB,MAAO,gBAAiB,SAAQ,eAAe,CAAA;AAI9B,IAAA,GAAA,CAAA;AAA+B,IAAA,IAAA,CAAA;AAAyB,IAAA,uBAAA,CAAA;IAH7E,aAAa,GAAW,CAAC,CAAC;IAC1B,WAAW,GAAW,EAAE,CAAC;IAC3B,aAAa,GAAY,IAAI,CAAC;AAC3B,IAAA,WAAA,CAAoB,GAAsB,EAAS,IAAgB,EAAS,uBAAgD,EAAA;QACzH,KAAK,CAAC,GAAG,CAAC,CAAA;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAS,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAAS,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;AAEzH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;;AAE3B,SAAC,CAAC,CAAC;KAEJ;IAED,QAAQ,GAAA;QAEN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;KAEvD;IAGQ,QAAQ,GAAA;QACb,OAAO;AACL,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;;AAEzE,YAAA,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;SAC9E,CAAC;KACH;IAES,WAAW,GAAA;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;wGA9BM,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,ECf7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4LAImB,EDOP,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,4EAAC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIvB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAC,YAAY,CAAC,EAAA,QAAA,EAAA,4LAAA,EAAA,CAAA;;;AESrC;MAiBa,yBAAyB,CAAA;AAahB,IAAA,gBAAA,CAAA;AAZW,IAAA,gBAAgB,CAAsB;AACxB,IAAA,MAAM,GAAW,OAAO,CAAC,aAAa,EAAE,CAAC;AAC/E,IAAA,MAAM,GAAW,MAAM,CAAC,IAAI,CAAC;AAC7B,IAAA,eAAe,GAA2B;AAC/C,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,cAAc,EAAE,IAAI;KACrB,CAAA;IAEkB,OAAO,GAAG,OAAO,CAAC;IAClB,MAAM,GAAG,MAAM,CAAC;AAEnC,IAAA,WAAA,CAAoB,gBAAyC,EAAA;QAAzC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;KAAK;IAE3D,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE;YACtE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;SACtH;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE;YACjE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,eAAe,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;SACxG;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE;YACjE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,eAAe,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;SACxG;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;YAC5D,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;SAC1F;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,EAAE;YACrE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,wBAAwB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;SACzH;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE;YAC1D,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;SACpF;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,EAAE;YACnE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;SACtG;AACG,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,EAAE;YAC3E,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,0BAA0B,CAAC,CAAC;SAC1H;AACE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,EAAE;YACzE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;SACpH;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,EAAE;YAC7E,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,4BAA4B,CAAC,CAAC;SACjI;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,EAAE;YACzF,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,kCAAkC,EAAE,sCAAsC,EAAE,sCAAsC,CAAC,CAAC;SACnK;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,EAAE;YAC7E,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,2BAA2B,CAAC,CAAC;SAChI;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,EAAE;YAC3E,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,0BAA0B,CAAC,CAAC;SAC9H;;;;AAIA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,EAAE;YAChE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;SAC3F;AACI,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,EAAE;YACpE,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;SAC1F;KACF;;IAGM,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;KAC9C;IAEM,oBAAoB,GAAA;AACzB,QAAA,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;KAChC;wGAzEU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAX1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;GAQT,EATS,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAY/B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAfrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,kBAAkB,CAAC,EACjC,QAAA,EAAA,CAAA;;;;;;;;AAQT,EAAA,CAAA,EAAA,CAAA;yFAI8B,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;gBACgB,MAAM,EAAA,CAAA;sBAAlD,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;;;ACnB7C;MAgBa,sBAAsB,CAAA;AAMb,IAAA,gBAAA,CAAA;AALD,IAAA,IAAI,CAAmB;AACjC,IAAA,MAAM,CAAU;AAChB,IAAA,SAAS,CAAM;AACd,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO,CAAC;AAEjD,IAAA,WAAA,CAAoB,gBAAyC,EAAA;QAAzC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;QAC3D,IAAI,CAAC,wBAAwB,EAAE,CAAC;KAChC;AAEK,IAAA,WAAW,CAAC,OAAsB,EAAA;;;;AAIvC,QAAA,IAAI,WAAW,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACvD;KACF;IAEM,QAAQ,GAAA;;;;;;;;;;;;;;;;KAgBd;IAGO,wBAAwB,GAAA;AAC9B,QAAA,MAAM,UAAU,GAAG;YACjB,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,EAAE,SAAS,EAAE,yBAAyB,EAAE;YAC/F,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAqB,EAAE;YACjF,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAqB,EAAE;YACjF,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE;YACnE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE;YAC7D,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,mBAAmB,EAAE,SAAS,EAAE,yBAAyB,EAAE;YAClG,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE;YAC/E,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,0BAA0B,EAAE;YACnG,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,oBAAoB,EAAE,SAAS,EAAE,mBAAmB,EAAE;YAC7F,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,0BAA0B,EAAE,SAAS,EAAE,4BAA4B,EAAE;YAC1G,EAAE,IAAI,EAAE,kCAAkC,EAAE,GAAG,EAAE,sCAAsC,EAAE,SAAS,EAAE,sCAAsC,EAAE;YAC5I,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,0BAA0B,EAAE,SAAS,EAAE,2BAA2B,EAAE;YACzG,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,wBAAwB,EAAE,SAAS,EAAE,0BAA0B,EAAE;YACxG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;YACpE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;SAEpE,CAAC;AAEF,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAI;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBAC5C,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;aACrE;AACH,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KACpB;wGAvEU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAVvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;GAQT,EATS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAW5B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;AACxC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;AAQT,EAAA,CAAA;AACF,iBAAA,CAAA;yFAEoB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM,CAAA;gBACR,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;ACxCT;;AAEG;;ACFH;;AAEG;;;;"}