ngx-histaff-alpha 6.5.7 → 6.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-jjLsyAjo.mjs → ngx-histaff-alpha-ai-hint-for-table.component-DZSfRTyy.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-jjLsyAjo.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-DZSfRTyy.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-C5V2qL7i.mjs → ngx-histaff-alpha-core-form-design.component-BbMhVVY9.mjs} +4 -4
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-C5V2qL7i.mjs.map → ngx-histaff-alpha-core-form-design.component-BbMhVVY9.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-CiuYu8tX.mjs → ngx-histaff-alpha-core-sys-action.component-49ClhUYT.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-CiuYu8tX.mjs.map → ngx-histaff-alpha-core-sys-action.component-49ClhUYT.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-o-l6CJCB.mjs → ngx-histaff-alpha-core-template-editor.component-C9e83Wx3.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-o-l6CJCB.mjs.map → ngx-histaff-alpha-core-template-editor.component-C9e83Wx3.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-Wp4T1Ocl.mjs → ngx-histaff-alpha-core-toast-loading.component-BHIbqb9s.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-Wp4T1Ocl.mjs.map → ngx-histaff-alpha-core-toast-loading.component-BHIbqb9s.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-lHVSEOjK.mjs → ngx-histaff-alpha-core-workflow-consume.component-BRWsSdsH.mjs} +2 -2
  12. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-lHVSEOjK.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-BRWsSdsH.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CWsFTU2w.mjs → ngx-histaff-alpha-db-settings.component-CpqDyd6d.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CWsFTU2w.mjs.map → ngx-histaff-alpha-db-settings.component-CpqDyd6d.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DkMARRd1.mjs → ngx-histaff-alpha-design-wrapper.component-aDfLzGtl.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DkMARRd1.mjs.map → ngx-histaff-alpha-design-wrapper.component-aDfLzGtl.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-BseZ1XS-.mjs → ngx-histaff-alpha-design-wrapper.route-CE9_pw33.mjs} +5 -5
  18. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-BseZ1XS-.mjs.map → ngx-histaff-alpha-design-wrapper.route-CE9_pw33.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BA1jIgss.mjs → ngx-histaff-alpha-hrm-schema.component-CwD71dcc.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BA1jIgss.mjs.map → ngx-histaff-alpha-hrm-schema.component-CwD71dcc.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-Crfm98eG.mjs → ngx-histaff-alpha-live-form.component-D9yEPVnX.mjs} +2 -2
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-Crfm98eG.mjs.map → ngx-histaff-alpha-live-form.component-D9yEPVnX.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-DG_1bGMU.mjs → ngx-histaff-alpha-ngx-histaff-alpha-a_p3RrmK.mjs} +29 -22
  24. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-DG_1bGMU.mjs.map → ngx-histaff-alpha-ngx-histaff-alpha-a_p3RrmK.mjs.map} +1 -1
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-avASjVnh.mjs → ngx-histaff-alpha-simple-chat.component-kgT6oHEP.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-avASjVnh.mjs.map → ngx-histaff-alpha-simple-chat.component-kgT6oHEP.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-BSU6GbSf.mjs → ngx-histaff-alpha-sys-smtp-client-edit.component-BRfI9xfI.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-BSU6GbSf.mjs.map → ngx-histaff-alpha-sys-smtp-client-edit.component-BRfI9xfI.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-DUsFlMG6.mjs → ngx-histaff-alpha-sys-smtp-client.component-DnPCvCvu.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-DUsFlMG6.mjs.map → ngx-histaff-alpha-sys-smtp-client.component-DnPCvCvu.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-template-list.component-CvTxt882.mjs → ngx-histaff-alpha-template-list.component-CxbcizPE.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-template-list.component-CvTxt882.mjs.map → ngx-histaff-alpha-template-list.component-CxbcizPE.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-BDDQN8MV.mjs → ngx-histaff-alpha-tracker-studio.component-BcevcaX3.mjs} +2 -2
  34. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-BDDQN8MV.mjs.map → ngx-histaff-alpha-tracker-studio.component-BcevcaX3.mjs.map} +1 -1
  35. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qflFHbmm.mjs → ngx-histaff-alpha-wf-form-assign.component-COwhOpq_.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qflFHbmm.mjs.map → ngx-histaff-alpha-wf-form-assign.component-COwhOpq_.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-BnhN2buA.mjs → ngx-histaff-alpha-wf-global-config.component-CM9yHKLd.mjs} +4 -2
  38. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-CM9yHKLd.mjs.map +1 -0
  39. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BYurLRbW.mjs → ngx-histaff-alpha-wf-instance-status.component-BkV0bd4V.mjs} +2 -2
  40. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BYurLRbW.mjs.map → ngx-histaff-alpha-wf-instance-status.component-BkV0bd4V.mjs.map} +1 -1
  41. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-D6HhtsxU.mjs → ngx-histaff-alpha-wf-instance-step-react.component-BgVyc_2N.mjs} +3 -3
  42. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-D6HhtsxU.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-BgVyc_2N.mjs.map} +1 -1
  43. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-Djyg0fsp.mjs → ngx-histaff-alpha-wf-lab.component-sJQxqHIZ.mjs} +2 -2
  44. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-Djyg0fsp.mjs.map → ngx-histaff-alpha-wf-lab.component-sJQxqHIZ.mjs.map} +1 -1
  45. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  46. package/lib/app/libraries/core-org-param-dropdown/core-org-param-dropdown.component.d.ts +1 -0
  47. package/package.json +2 -2
  48. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-BnhN2buA.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-core-form-design.component-C5V2qL7i.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/animations/slide-animations.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-field-helper.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/base-props/base-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/email-props/email-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/email-props/email-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/calculated-props/calculated-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/calculated-props/calculated-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting-props.registry.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/props-host/props-host.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/enums/EnumLeftPanelMode.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-control-palette/core-form-array-control-palette.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-control-palette/core-form-array-control-palette.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-group-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-group-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design-monitor/core-form-design-monitor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design-monitor/core-form-design-monitor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-layout-editor/core-form-array-layout-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-layout-editor/core-form-array-layout-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.html"],"sourcesContent":["import { trigger, transition, style, animate, state } from '@angular/animations';\r\n\r\nexport const slideFromTopFadeIn = trigger('slideFromTopFadeIn', [\r\n state('in', style({ opacity: 1, transform: 'translateY(0)' })),\r\n state('out', style({ opacity: 0, transform: 'translateY(-50vh)' })),\r\n transition('out => in', [\r\n animate('200ms ease-out')\r\n ]),\r\n transition('in => out', [\r\n animate('150ms ease-in')\r\n ])\r\n]);","import { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\n\r\n@Component({\r\n selector: 'save-live-json',\r\n imports: [],\r\n templateUrl: './save-live-json.component.html',\r\n styleUrl: './save-live-json.component.scss'\r\n})\r\nexport class SaveLiveJsonComponent implements AfterViewInit, OnDestroy {\r\n public fds = inject(CoreFormDesignService);\r\n cdr = inject(ChangeDetectorRef);\r\n wfs = inject(CoreWorkflowService);\r\n\r\n\r\n\r\n copyToClipboard() {\r\n navigator.clipboard.writeText(this.fds.$saveLiveJson());\r\n }\r\n \r\n download() {\r\n const blob = new Blob([this.fds.$saveLiveJson()], { type: 'application/json' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = `${this.fds.$afInstance().name || 'form'}.json`;\r\n link.click();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.wfs.$initialFormDesignJson.set('{}');\r\n }\r\n}\r\n","<pre class=\"json-preview\">{{ fds.$saveLiveJson() }}</pre>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, HostListener, inject, signal, WritableSignal } from '@angular/core';\r\nimport { CoreFormDesignService, READONLY_WORKFLOW_FIELDS } from '../core-form-design.service';\r\nimport { CoreFormComponent } from '../../core-form/core-form/core-form.component';\r\nimport { FormControlStatus, FormGroup } from '@angular/forms';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { BehaviorSubject, catchError, Observable, of } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreButtonGroupVnsComponent } from '../../core-button-group-vns/core-button-group-vns/core-button-group-vns.component';\r\nimport { SaveLiveJsonComponent } from '../save-live-json/save-live-json.component';\r\nimport { ICoreChecklistOption } from '../../core-checklist/core-checklist/core-checklist.component';\r\nimport { ICoreButtonVNS } from '../../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { noneAutoClosedAlertOptions } from '../../../constants/alertOptions';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\nimport { Router } from '@angular/router';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\n\r\n@Component({\r\n selector: 'form-metadata',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TranslatePipe,\r\n CorePageHeaderComponent,\r\n CoreFormComponent,\r\n SaveLiveJsonComponent,\r\n CoreButtonGroupVnsComponent\r\n ],\r\n templateUrl: './form-metadata.component.html',\r\n styleUrl: './form-metadata.component.scss'\r\n})\r\nexport class FormMetadataComponent extends BaseEditComponent implements AfterViewInit {\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n wfs = inject(CoreWorkflowService);\r\n cdr = inject(ChangeDetectorRef);\r\n alertService = inject(AlertService);\r\n router = inject(Router);\r\n appConfigService = inject(AppConfigService)\r\n override form: FormGroup<any> = this.coreFormDesignService.formMetadata;\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscape() {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n @HostListener('window:click', ['$event'])\r\n onWindowClick(_: MouseEvent) {\r\n /*\r\n Trigger\tWhat Happens\r\n 🖱️ First Click:\tOpens checklist overlay, but Angular hasn’t re-checked the DOM yet → markForCheck() is called, but view not updated yet\r\n🖱️ Second Click:\tNow DOM is updated, click is registered inside the actual rendered checklist, interaction works\r\n */\r\n //This lets Angular finish updating the DOM before running change detection.\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n\r\n mode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.UPDATE)\r\n\r\n formStatus!: FormControlStatus;\r\n\r\n customButtonChecklistOptions$ = this.coreFormDesignService.formMetadataCustomButtonChecklistOptions$;\r\n\r\n $sections = this.coreFormDesignService.$formMetadataSections;\r\n\r\n $isInWorkflowDesign = this.coreFormDesignService.$isInWorkflowDesign;\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n private mls: MultiLanguageService\r\n ) {\r\n super(dialogService);\r\n effect(() => {\r\n if (this.coreFormDesignService.$shouldPatchMetadataForm()) {\r\n this.patchFormFromInstance();\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(false); // ✅ reset\r\n }\r\n });\r\n\r\n effect(() => {\r\n const isInWorkflowDesign = this.$isInWorkflowDesign();\r\n\r\n if (isInWorkflowDesign) {\r\n\r\n READONLY_WORKFLOW_FIELDS.forEach(x => {\r\n const control = this.form.get(x);\r\n control?.disable();\r\n })\r\n } else {\r\n }\r\n })\r\n\r\n }\r\n\r\n patchFormFromInstance(): void {\r\n const instance = this.coreFormDesignService.$afInstance();\r\n\r\n this.form.patchValue({\r\n name: instance.name,\r\n captionCode: instance.captionCode,\r\n entityTable: instance.entityTable ?? '',\r\n\r\n submitApi: instance.submitApi,\r\n postSubmitRoute: instance.postSubmitRoute ?? '',\r\n postCancelRoute: instance.postCancelRoute ?? '',\r\n\r\n normalMode: instance.normalMode ?? false,\r\n autoGetByIdOff: instance.autoGetByIdOff ?? false,\r\n hasIdOfStringType: instance.hasIdOfStringType ?? false,\r\n\r\n customFormButtonItems: instance.customFormButtonItems ?? [],\r\n\r\n crudCreate: instance.crud?.c ?? '',\r\n crudRead: instance.crud?.r ?? '',\r\n crudUpdate: instance.crud?.u ?? '',\r\n crudDelete: instance.crud?.d ?? '',\r\n crudReadChildren: instance.crud?.rChildren ?? '',\r\n\r\n entityUniqueIndexesJson: JSON.stringify(instance.entityUniqueIndexes ?? [])\r\n });\r\n }\r\n\r\n customButtons: EnumCoreButtonVNSCode[] = [\r\n EnumCoreButtonVNSCode.NONE_HEADER_SAVE,\r\n ]\r\n\r\n\r\n onButtonClick(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.NONE_HEADER_SAVE) {\r\n if (this.form.valid) {\r\n this.$loading.set(true);\r\n\r\n const apiObject: Observable<any> = this.coreFormDesignService.editMode$.value === EnumCorePageEditMode.CREATE ?\r\n this.coreFormDesignService.createFormInstance(this.coreFormDesignService.$afInstance()) :\r\n this.coreFormDesignService.updateFormInstance(this.coreFormDesignService.$afInstance())\r\n const apiObservable = apiObject.pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n\r\n this.alertService.error(msg, noneAutoClosedAlertOptions);\r\n return of(msg);\r\n })\r\n )\r\n\r\n apiObservable.subscribe(x => {\r\n\r\n this.$loading.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n })\r\n } else {\r\n this.coreFormDesignService.formMetadataCheckError$.next(true);\r\n setTimeout(() => this.cdr.markForCheck())\r\n setTimeout(() => this.coreFormDesignService.formMetadataCheckError$.next(false), 5000)\r\n }\r\n }\r\n }\r\n\r\n onClose(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n onSave(e: any): void {\r\n\r\n }\r\n\r\n onFormCreated(event: { formName: string; formGroup: FormGroup }) {\r\n const form = event.formGroup;\r\n\r\n form.get('normalMode')?.valueChanges.subscribe(x => {\r\n this.coreFormDesignService.$liveFormNormalMode.set(!!x)\r\n })\r\n\r\n form.get('customFormButtonItems')?.valueChanges.subscribe(x => {\r\n if (Array.isArray(x)) {\r\n this.coreFormDesignService.$customFormButtonItems.set(x)\r\n } else {\r\n this.coreFormDesignService.$customFormButtonItems.set(undefined)\r\n }\r\n })\r\n\r\n const widthField = form.get('width');\r\n if (!!widthField) {\r\n widthField.valueChanges.subscribe(width => {\r\n console.warn(`WAR [width$] changed explicitly:`, width);\r\n });\r\n } else {\r\n console.warn(`WAR [widthField] not found`);\r\n }\r\n\r\n\r\n form.valueChanges.subscribe(value => {\r\n\r\n console.warn('[width] from form.valueChanges', value?.width);\r\n\r\n const current = this.coreFormDesignService.$afInstance();\r\n\r\n const {\r\n crudCreate,\r\n crudRead,\r\n crudUpdate,\r\n crudDelete,\r\n crudReadChildren,\r\n // ES6 destructuring: Pull id out of the object and throw it away under the name _ignored — don’t include it in rest\r\n id: _ignored,\r\n ...rest\r\n } = value;\r\n\r\n const updatedCrud = {\r\n ...current.crud,\r\n ...(crudCreate !== undefined ? { c: crudCreate } : {}),\r\n ...(crudRead !== undefined ? { r: crudRead } : {}),\r\n ...(crudUpdate !== undefined ? { u: crudUpdate } : {}),\r\n ...(crudDelete !== undefined ? { d: crudDelete } : {}),\r\n ...(crudReadChildren !== undefined ? { rChildren: crudReadChildren } : {})\r\n };\r\n\r\n const next = {\r\n ...current,\r\n ...rest,\r\n width: rest.width ?? current.width, // That way, rogue undefined values can’t silently override valid ones.\r\n crud: updatedCrud\r\n };\r\n console.log(\"[FormMetadataComponent][onFormCreated]: $afInstance is being set on form.valueChanges\");\r\n this.coreFormDesignService.$afInstance.set(next);\r\n });\r\n\r\n form.statusChanges.subscribe(status => {\r\n // Optional: Save status if you want to show error summary, disable save button, etc.\r\n this.formStatus = status; // string: 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED'\r\n });\r\n\r\n this.form = form;\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Defer to next tick to avoid ExpressionChangedAfterItHasBeenCheckedError\r\n\r\n this.$isInWorkflowDesign.set(this.router.url.includes('/workflow/design'));\r\n\r\n setTimeout(() => {\r\n\r\n const allButtons = Object.values(EnumCoreButtonVNSCode);\r\n\r\n const noneHeaderOptions: ICoreChecklistOption[] = allButtons\r\n .filter(value => value.startsWith('NONE_HEADER_') && value !== 'NONE_HEADER_IMPORT_OPTION')\r\n .map(value => ({\r\n value,\r\n text: this.mls.trans(value),\r\n checked: false\r\n }));\r\n\r\n this.customButtonChecklistOptions$.next(noneHeaderOptions);\r\n\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n // 🔥 DO NOT READ this.$afInstance()\r\n console.log(\"[FormMetadataComponent][ngAfterViewInit]: $afInstance is being updated\");\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n formDesignSections: sections\r\n }));\r\n\r\n // Inform Angular to re-check since values arrived late\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n\r\n}\r\n","<div class=\"form-metadata-container\">\r\n\r\n <div class=\"metadata-body\">\r\n\r\n <div class=\"header-n-form\">\r\n\r\n @if (!$isInWorkflowDesign()) {\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"d-flex d-flex-start w-100 pr1rem\">\r\n <core-button-group-vns [showCaption]=\"true\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"customButtons\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"header-wrapper\">\r\n <core-page-header [title]=\"'FORM OVERVIEW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"close-wrapper\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n } \r\n\r\n\r\n\r\n <div class=\"af-instance\">\r\n\r\n <div class=\"af-instance-left\">\r\n <core-form \r\n [inputSections]=\"$sections()\" \r\n [width]=\"800\" \r\n [mode$]=\"mode$\" \r\n [checkError$]=\"coreFormDesignService.formMetadataCheckError$\"\r\n [hideButtons]=\"true\" \r\n [forceCreateNewForm]=\"true\"\r\n [hideDevSector]=\"!!$isInWorkflowDesign()\"\r\n (onFormCreated)=\"onFormCreated($event)\" />\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n @if (!$isInWorkflowDesign()) {\r\n <div class=\"af-instance-right\">\r\n <save-live-json></save-live-json>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces'; \r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\nimport { IFormDesignRow } from '../../../interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AttachmentFieldHelperService {\r\n\r\n static isAttachment(control: IFormBaseControl): boolean {\r\n return control.controlType === 'ATTACHMENT';\r\n }\r\n\r\n static autoGenerateAttachmentNames(baseName: string): {\r\n field: string;\r\n assignTo: string;\r\n } {\r\n return {\r\n field: baseName + 'Buffer',\r\n assignTo: baseName\r\n };\r\n }\r\n\r\n static buildHiddenAssignToField(baseFieldName: string): IFormBaseControl {\r\n return {\r\n field: baseFieldName,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n label: '',\r\n value: '',\r\n hidden: true,\r\n flexSize: 0\r\n };\r\n }\r\n\r\n static injectAssignToFieldIntoRow(row: IFormDesignRow, assignToField: IFormBaseControl): void {\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: assignToField.flexSize ?? 12, control: assignToField });\r\n }\r\n\r\n /**\r\n * Called when user edits the \"field\" of an ATTACHMENT control\r\n */\r\n static handleFieldNameChangeForAttachment(\r\n control: IFormBaseControl,\r\n form: IFormBaseControl[],\r\n typedFieldName: string\r\n ): void {\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(typedFieldName);\r\n control.field = field;\r\n control.assignTo = assignTo;\r\n }\r\n\r\n /**\r\n * Called in drop handler when user drops a new ATTACHMENT\r\n */\r\n static setupAttachmentOnDrop(\r\n newControl: IFormBaseControl,\r\n form: IFormBaseControl[]\r\n ): void {\r\n if (this.isAttachment(newControl)) {\r\n const baseName = newControl.field.replace(/Buffer$/, '');\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(baseName);\r\n newControl.field = field;\r\n newControl.assignTo = assignTo;\r\n }\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, Input, input, isDevMode } from '@angular/core';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { IFormBaseControl } from '../../../core-form/core-form/enum-interfaces';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions, noneAutoClosedAlertOptions } from '../../../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'base-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: './base-props.component.html'\r\n})\r\nexport abstract class BasePropsComponent extends BaseComponent {\r\n\r\n @Input() isNested = false;\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n\r\n $selectedCell = computed(() => {\r\n if (this.isNested) {\r\n return this.coreFormDesignService.$nestedSelectedCell();\r\n } else {\r\n return this.coreFormDesignService.$selectedCell();\r\n }\r\n })\r\n $formContext = computed(() => {\r\n if (this.isNested) {\r\n return this.coreFormDesignService.$nestedFormContext();\r\n } else {\r\n return this.coreFormDesignService.$formContext();\r\n }\r\n })\r\n\r\n form = this.isNested ? this.coreFormDesignService.nestedFormDesign : this.coreFormDesignService.formDesign;\r\n\r\n patchControl = this.coreFormDesignService.patchControl.bind(this.coreFormDesignService);\r\n normalize = this.coreFormDesignService.normalize.bind(this.coreFormDesignService);\r\n\r\n cdr = inject(ChangeDetectorRef);\r\n as = inject(AlertService);\r\n\r\n setControlProp<K extends keyof IFormBaseControl>(\r\n key: K,\r\n value: IFormBaseControl[K]\r\n ): void {\r\n const nestedValue = this.isNested;\r\n // if (isDevMode()) {\r\n // this.as.error(`[BasePropsComponent] forwarding ${key}, nested=${nestedValue} from ${this.constructor.name}`, noneAutoClosedAlertOptions)\r\n // }\r\n this.coreFormDesignService.setControlProp(key, value, nestedValue);\r\n }\r\n\r\n selectedCellRuntimeId!: string;\r\n control!: IFormBaseControl;\r\n nestedSelectedCellRuntimeId!: string;\r\n nestedControl!: IFormBaseControl;\r\n\r\n $control = computed<IFormBaseControl>(() => {\r\n const isNested = this.isNested;\r\n let control = isNested ? this.coreFormDesignService.$nestedControl() : this.coreFormDesignService.$control();\r\n if (!control) {\r\n control = this.coreFormDesignService.normalize({});\r\n }\r\n //console.log(\"🔴 BasePropsComponent computed $control value\", control);\r\n return control;\r\n });\r\n\r\n // constructor(public override mls: MultiLanguageService) {\r\n\r\n // super(mls);\r\n\r\n // effect(() => {\r\n // const nested = this.isNested;\r\n // if (nested && isDevMode()) {\r\n // this.as.warn(\"$isNested in BasePropsComponent is also set to true\", noneAutoClosedAlertOptions);\r\n // }\r\n // })\r\n // }\r\n\r\n}","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AttachmentFieldHelperService } from '../type-specific/attachment-props/attachment-field-helper.service';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { NgStyle } from '@angular/common';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions } from '../../../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'mandatory-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgStyle, FormsModule],\r\n templateUrl: './mandatory-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class MandatoryPropsComponent extends BasePropsComponent {\r\n\r\n $fieldInputRef = viewChild<ElementRef>('fieldInput');\r\n\r\n afs = inject(CoreFormDesignService);\r\n\r\n $isNormalField = computed(() => {\r\n if (this.isNested) {\r\n return this.afs.$nestedControl()?.type !== 'calculated'\r\n } else {\r\n return this.afs.$control()?.type !== 'calculated'\r\n }\r\n })\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n const field = AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n return field;\r\n });\r\n\r\n /*\r\n onFieldChange(val: string) {\r\n this.setControlProp('field', val);\r\n\r\n const expected = this.$typedField();\r\n const actual = this.$fieldInputRef()?.nativeElement.value;\r\n\r\n if (!!actual && actual !== expected) {\r\n console.warn('Manual fix: input mismatch detected. Forcing value reset.');\r\n this.$fieldInputRef()!.nativeElement.value = expected;\r\n }\r\n }\r\n */\r\n\r\n onFieldChange(val: string) {\r\n let nextVal = val;\r\n\r\n if (!this.isCamelCase(val)) {\r\n const fixed = this.toCamelCase(val);\r\n\r\n this.as.warn(`[FormDesign] Field name \"${val}\" is not camelCase. Auto-corrected to \"${fixed}\".`, alertOptions);\r\n\r\n nextVal = fixed;\r\n\r\n // fix input UI ngay lập tức\r\n const inputEl = this.$fieldInputRef()?.nativeElement;\r\n if (inputEl) {\r\n inputEl.value = fixed;\r\n }\r\n }\r\n\r\n // cập nhật state chuẩn hoá\r\n this.setControlProp('field', nextVal);\r\n\r\n // safety net: sync ngược nếu DOM lệch state\r\n const expected = this.$typedField();\r\n const actual = this.$fieldInputRef()?.nativeElement.value;\r\n\r\n if (!!actual && actual !== expected) {\r\n this.as.warn('[FormDesign] Manual fix: input mismatch detected. Forcing value reset.', alertOptions);\r\n this.$fieldInputRef()!.nativeElement.value = expected;\r\n }\r\n }\r\n\r\n private isCamelCase(value: string): boolean {\r\n return /^[a-z][a-zA-Z0-9]*$/.test(value);\r\n }\r\n\r\n private toCamelCase(value: string): string {\r\n return value\r\n .trim()\r\n .replace(/[_\\-\\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : '')\r\n .replace(/^[A-Z]/, c => c.toLowerCase());\r\n }\r\n\r\n}\r\n","<div class=\"setting-group mandatory-group\" [ngStyle]=\"{ padding: '15px', maxWidth: '352px' }\">\r\n\r\n <div class=\"setting-row\">\r\n <label>Field</label>\r\n <input #fieldInput class=\"form-control\" type=\"text\" \r\n [ngModel]=\"$typedField()\" \r\n (ngModelChange)=\"onFieldChange($event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Label</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.label\" (ngModelChange)=\"setControlProp('label', $event)\" />\r\n </div>\r\n\r\n @if ($isNormalField()) {\r\n\r\n <div class=\"setting-row\">\r\n <label>Flex Size</label>\r\n <input class=\"form-control\" type=\"number\" [ngModel]=\"$control()?.flexSize\" (ngModelChange)=\"setControlProp('flexSize', $event)\" />\r\n </div>\r\n\r\n @if ($control()?.controlType !== 'FORM_ARRAY') {\r\n <div class=\"setting-row\">\r\n <label>Default</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.value\" (ngModelChange)=\"setControlProp('value', $event)\" />\r\n </div>\r\n }\r\n }\r\n\r\n</div>","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumCoreTablePipeType } from '../../../core-table/EnumCoreTablePipeType';\r\nimport { ICoreDropdownOption } from '../../../../interfaces/ICoreDropdownOption';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreDropdownComponent } from '../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'optional-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreCheckboxComponent,\r\n CoreDropdownComponent\r\n ],\r\n templateUrl: './optional-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class OptionalPropsComponent extends BasePropsComponent {\r\n\r\n pipeOptions = Object.values(EnumCoreTablePipeType);\r\n\r\n pipeOptions$ = new BehaviorSubject<ICoreDropdownOption[]>(\r\n Object.values(EnumCoreTablePipeType).map(x => ({ value: x, text: x }))\r\n )\r\n\r\n}","<div class=\"setting-group optional-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Readonly</label>\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"$control().readonly\" (ngModelChange)=\"setControlProp('readonly', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Hidden</label>\r\n <core-checkbox [ngModel]=\"$control().hidden\" (ngModelChange)=\"setControlProp('hidden', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Disabled</label>\r\n <core-checkbox [ngModel]=\"$control().disabled\" (ngModelChange)=\"setControlProp('disabled', $event)\" /> \r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Hint</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().hint\" (ngModelChange)=\"setControlProp('hint', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Pipe</label>\r\n <div class=\"control-wrapper\">\r\n <core-dropdown [ngModel]=\"$control().pipe\" (ngModelChange)=\"setControlProp('pipe', $event)\"\r\n [paramMode]=\"true\"\r\n [options$]=\"pipeOptions$\"\r\n >\r\n </core-dropdown>\r\n </div>\r\n </div>\r\n\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'number-props',\r\n imports: [NgStyle],\r\n templateUrl: './number-props.component.html',\r\n styleUrl: './number-props.component.scss'\r\n})\r\nexport class NumberPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<div class=\"number-props-container\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'email-props',\r\n imports: [],\r\n templateUrl: './email-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class EmailPropsComponent {\r\n\r\n}\r\n","<p>email-props works!</p>\r\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CoreDropdownComponent } from '../../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { CoreCheckboxComponent } from '../../../../core-checkbox/core-checkbox/core-checkbox.component';\r\n\r\n@Component({\r\n selector: 'dropdown-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreCheckboxComponent,\r\n CoreDropdownComponent,\r\n ],\r\n templateUrl: './dropdown-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class DropdownPropsComponent extends BasePropsComponent {\r\n\r\n jsonPayload: string = '';\r\n\r\n httpVerbOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n {\r\n value: 'HttpGet',\r\n text: 'GET'\r\n },\r\n {\r\n value: 'HttpPost',\r\n text: 'POST'\r\n }\r\n ])\r\n\r\n onPayloadJsonBlur(): void {\r\n try {\r\n const optionHttpPayload = JSON.parse(this.jsonPayload);\r\n this.setControlProp('optionHttpPayload', optionHttpPayload)\r\n } catch (e) {\r\n console.warn('⚠️ Invalid JSON payload');\r\n }\r\n }\r\n}\r\n","<div class=\"setting-group dropdown-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Use API</label>\r\n <core-checkbox [ngModel]=\"$control().optionApiDriven\" (ngModelChange)=\"setControlProp('optionApiDriven', $event)\" />\r\n </div>\r\n\r\n @if (!!$control().optionApiDriven) {\r\n <div class=\"setting-row\">\r\n <label>API Endpoint</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionApi\" (ngModelChange)=\"setControlProp('optionApi', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>HTTP Verb</label>\r\n <div class=\"control-wrapper\">\r\n <core-dropdown [ngModel]=\"$control().optionHttpVerb\" (ngModelChange)=\"setControlProp('optionHttpVerb', $event)\" [paramMode]=\"true\"\r\n [options$]=\"httpVerbOptions$\">\r\n </core-dropdown>\r\n </div>\r\n </div>\r\n\r\n @if ($control().optionHttpVerb === 'HttpPost') {\r\n <div class=\"setting-row\">\r\n <label>Payload (JSON)</label>\r\n <div class=\"control-wrapper\">\r\n <textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"jsonPayload\" (ngModelChange)=\"onPayloadJsonBlur()\"></textarea>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"setting-row\">\r\n <label>Value Field</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionValueFrom\" (ngModelChange)=\"setControlProp('optionValueFrom', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Text Field</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionTextFrom\" (ngModelChange)=\"setControlProp('optionTextFrom', $event)\" />\r\n </div>\r\n }\r\n</div>","import { Component } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'form-array-props',\r\n imports: [],\r\n templateUrl: './form-array-props.component.html',\r\n styleUrl: './form-array-props.component.scss'\r\n})\r\nexport class FormArrayPropsComponent extends BasePropsComponent {\r\n\r\n openDesigner() {\r\n const control = this.coreFormDesignService.$control();\r\n if (control?.controlType === EnumFormBaseContolType.FORM_ARRAY) {\r\n\r\n\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$showFormArrayDesign.set(true);\r\n\r\n // Since $nestedDesignSections is of type WritableSignal<ICoreFormSection[] | null>\r\n // if set (not null), we use @if in parent conponent (CoreFormDesignComponent template)\r\n // to display a popup containing CoreFormArrayLayoutEditorComponent\r\n }\r\n }\r\n}\r\n"," <div class=\"mt-3 d-flex d-flex-center\">\r\n <button class=\"btn btn-outline-primary\" (click)=\"openDesigner()\">\r\n Design Nested Layout\r\n </button>\r\n </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'textarea-props',\r\n imports: [],\r\n templateUrl: './textarea-props.component.html',\r\n styleUrl: './textarea-props.component.scss'\r\n})\r\nexport class TextareaPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>textarea-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'checklist-props',\r\n imports: [],\r\n templateUrl: './checklist-props.component.html',\r\n styleUrl: './checklist-props.component.scss'\r\n})\r\nexport class ChecklistPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>checklist-props works!</p>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { EnumFilterOperator } from '../../../../../interfaces/IQueryListRequest';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SeekerPropsService {\r\n\r\n // ============================================================\r\n // CONSTANT OPTIONS (đưa hết vào service)\r\n // ============================================================\r\n readonly sourceTypeOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n { value: EnumCoreFormControlSeekerSourceType.JOB_SEEK, text: 'Job Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK, text: 'Employee Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.CONTRACT_SEEK, text: 'Contract Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.WORKING_SEEK, text: 'Working Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.WAGE_SEEK, text: 'Wage Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.POSITION_SEEK, text: 'Position Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.POSITION_CONCURRENT_SEEK, text: 'Concurrent Position Seek' },\r\n // { value: EnumCoreFormControlSeekerSourceType.ORGANIZATION_UNIT_SEEK, text: 'Org Unit Seek' }, // TO DO LATER\r\n { value: EnumCoreFormControlSeekerSourceType.COM_UNIT_SEEK, text: 'Company Unit Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.TOPICPICKER, text: 'Topic Picker' },\r\n { value: EnumCoreFormControlSeekerSourceType.FORM_SEEK, text: 'Form Seek' },\r\n ]);\r\n\r\n readonly filterOperatorOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n { value: EnumFilterOperator.EQUAL, text: '==' },\r\n { value: EnumFilterOperator.NOT_EQUAL, text: '!=' },\r\n { value: EnumFilterOperator.GREATER_THAN_OR_EQUAL, text: '>=' },\r\n { value: EnumFilterOperator.LESS_THAN_OR_EQUAL, text: '<=' },\r\n { value: EnumFilterOperator.GREATER_THAN, text: '>' },\r\n { value: EnumFilterOperator.LESS_THAN, text: '<' },\r\n ]);\r\n\r\n // ============================================================\r\n // HELPERS\r\n // ============================================================\r\n extractArray<T>(input: BehaviorSubject<T[]> | T[] | undefined): T[] {\r\n if (!input) return [];\r\n if (input instanceof BehaviorSubject) return input.getValue() ?? [];\r\n return input;\r\n }\r\n\r\n extractObject<T>(input: BehaviorSubject<T> | T | undefined): T {\r\n if (!input) return {} as T;\r\n if (input instanceof BehaviorSubject) return input.getValue();\r\n return input;\r\n }\r\n\r\n wrapArray<T>(arr: T[]): BehaviorSubject<T[]> {\r\n return new BehaviorSubject<T[]>(arr);\r\n }\r\n\r\n wrapObject<T>(obj: T): BehaviorSubject<T> {\r\n return new BehaviorSubject<T>(obj);\r\n }\r\n\r\n addItem<T>(source: T[], newItem: T): T[] {\r\n return [...source, newItem];\r\n }\r\n\r\n updateItem<T>(source: T[], index: number, updated: Partial<T>): T[] {\r\n const arr = [...source];\r\n arr[index] = { ...(arr[index] as any), ...updated } as T;\r\n return arr;\r\n }\r\n\r\n removeItem<T>(source: T[], index: number): T[] {\r\n const arr = [...source];\r\n arr.splice(index, 1);\r\n return arr;\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, computed, inject, input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { SeekerPropsService } from './seeker-props.service';\r\n\r\nimport { CoreDropdownComponent } from '../../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreCheckboxComponent } from '../../../../core-checkbox/core-checkbox/core-checkbox.component';\r\n\r\nimport { EnumFilterOperator, IFilterOperator } from '../../../../../interfaces/IQueryListRequest';\r\nimport { ICoreTableColumnItem } from '../../../../core-table/ICoreTableColumnItem';\r\nimport { ICoreFormSection } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'seeker-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreDropdownComponent,\r\n CoreCheckboxComponent,\r\n ],\r\n templateUrl: './seeker-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class SeekerPropsComponent extends BasePropsComponent {\r\n\r\n readonly svc = inject(SeekerPropsService);\r\n\r\n // -----------------------------------------------------------\r\n // BASIC CSV\r\n // -----------------------------------------------------------\r\n $useTheseColumnsCsv = computed(() => (this.$control()?.useTheseColumns ?? []).join(', '));\r\n $excludedColumnsCsv = computed(() => (this.$control()?.excludedColumns ?? []).join(', '));\r\n\r\n onUseColumnsChanged(raw: string) {\r\n const arr = raw.split(',').map(x => x.trim()).filter(Boolean);\r\n this.setControlProp('useTheseColumns', arr);\r\n }\r\n\r\n onExcludedColumnsChanged(raw: string) {\r\n const arr = raw.split(',').map(x => x.trim()).filter(Boolean);\r\n this.setControlProp('excludedColumns', arr);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // ALSO BIND TO\r\n // -----------------------------------------------------------\r\n $alsoBind = computed(() =>\r\n this.svc.extractArray(this.$control()?.alsoBindTo)\r\n );\r\n\r\n addAlsoBindRow() {\r\n const next = this.svc.addItem(this.$alsoBind(), { takeFrom: '', bindTo: '' });\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n updateAlsoBindRow(i: number, key: 'takeFrom' | 'bindTo', v: string) {\r\n const next = this.svc.updateItem(this.$alsoBind(), i, { [key]: v });\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n removeAlsoBindRow(i: number) {\r\n const next = this.svc.removeItem(this.$alsoBind(), i);\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // OUTER PARAM (JSON)\r\n // -----------------------------------------------------------\r\n $outerParam = computed(() =>\r\n this.svc.extractObject(this.$control()?.___preDefinedOuterParam)\r\n );\r\n\r\n $outerParamJson = computed(() =>\r\n JSON.stringify(this.$outerParam(), null, 2)\r\n );\r\n\r\n onOuterParamJsonChange(raw: string) {\r\n try {\r\n const parsed = JSON.parse(raw);\r\n this.setControlProp('preDefinedOuterParam$', this.svc.wrapObject(parsed));\r\n } catch { }\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // OUTER FILTER (RuleTree mini)\r\n // -----------------------------------------------------------\r\n $outerFilter = computed<IFilterOperator[]>(() =>\r\n this.svc.extractArray(this.$control()?.___preDefinedOuterFilter)\r\n );\r\n\r\n addOuterFilter() {\r\n const next = this.svc.addItem(this.$outerFilter(), {\r\n field: '',\r\n operator: EnumFilterOperator.EQUAL,\r\n dateTimeValue: null\r\n });\r\n\r\n // (1) metadata / design (LƯU JSON)\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n\r\n // (2) runtime (KHÔNG LƯU JSON)\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n updateOuterFilter(i: number, key: keyof IFilterOperator, v: any) {\r\n const next = this.svc.updateItem(this.$outerFilter(), i, { [key]: v });\r\n\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n removeOuterFilter(i: number) {\r\n const next = this.svc.removeItem(this.$outerFilter(), i);\r\n\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n\r\n // -----------------------------------------------------------\r\n // EXTENDED COLUMNS\r\n // -----------------------------------------------------------\r\n $extendedColumns = computed<ICoreTableColumnItem[]>(() =>\r\n this.svc.extractArray(this.$control()?.multiModeExtendedColumns)\r\n );\r\n\r\n addExtendedColumn() {\r\n const next = this.svc.addItem(this.$extendedColumns(), {\r\n caption: '',\r\n field: '',\r\n type: 'string',\r\n align: 'left',\r\n width: 120,\r\n hidden: false,\r\n translate: false\r\n });\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n updateExtendedColumn(i: number, key: keyof ICoreTableColumnItem, v: any) {\r\n const next = this.svc.updateItem(this.$extendedColumns(), i, { [key]: v });\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n removeExtendedColumn(i: number) {\r\n const next = this.svc.removeItem(this.$extendedColumns(), i);\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // EXTENDED SECTIONS\r\n // -----------------------------------------------------------\r\n $extendedSections = computed<ICoreFormSection[]>(() =>\r\n this.svc.extractArray(this.$control()?.multiModeExtendedSections)\r\n );\r\n\r\n addExtendedSection() {\r\n const next = this.svc.addItem(this.$extendedSections(), {\r\n caption: 'New Section',\r\n rows: []\r\n });\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n\r\n updateExtendedSection(i: number, caption: string) {\r\n const next = this.svc.updateItem(this.$extendedSections(), i, { caption });\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n\r\n removeExtendedSection(i: number) {\r\n const next = this.svc.removeItem(this.$extendedSections(), i);\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n}\r\n","<div class=\"setting-group seeker-group\" [style.padding.px]=\"15\">\r\n\r\n <div class=\"setting-row\">\r\n Basic Settings\r\n </div>\r\n \r\n\r\n <div class=\"setting-row\">\r\n <label>Source Type</label>\r\n <core-dropdown\r\n [options$]=\"svc.sourceTypeOptions$\"\r\n [paramMode]=\"true\"\r\n [ngModel]=\"$control().seekerSourceType\"\r\n (ngModelChange)=\"setControlProp('seekerSourceType', $event)\">\r\n </core-dropdown>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Multi Mode</label>\r\n <core-checkbox\r\n [ngModel]=\"$control().multiMode\"\r\n (ngModelChange)=\"setControlProp('multiMode', $event)\">\r\n </core-checkbox>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Hide Org Tree</label>\r\n <core-checkbox\r\n [ngModel]=\"$control().hideOrgTree\"\r\n (ngModelChange)=\"setControlProp('hideOrgTree', $event)\">\r\n </core-checkbox>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Source Space Height</label>\r\n <input class=\"form-control\"\r\n type=\"number\"\r\n [ngModel]=\"$control().sourceSpaceHeight\"\r\n (ngModelChange)=\"setControlProp('sourceSpaceHeight', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Bound From</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$control().boundFrom\"\r\n (ngModelChange)=\"setControlProp('boundFrom', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Shown From</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$control().shownFrom\"\r\n (ngModelChange)=\"setControlProp('shownFrom', $event)\" />\r\n </div>\r\n\r\n <!-- <div class=\"setting-row\">\r\n <label>Use These Columns (CSV)</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$useTheseColumnsCsv()\"\r\n (ngModelChange)=\"onUseColumnsChanged($event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Excluded Columns (CSV)</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$excludedColumnsCsv()\"\r\n (ngModelChange)=\"onExcludedColumnsChanged($event)\" />\r\n </div> -->\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- ALSO BIND TO -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Also Bind To\r\n </div>\r\n \r\n <button class=\"btn-add\" (click)=\"addAlsoBindRow()\">+ Add Mapping</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>takeFrom</th>\r\n <th>bindTo</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (item of $alsoBind(); track $index) {\r\n <tr>\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"item.takeFrom\"\r\n (ngModelChange)=\"updateAlsoBindRow($index, 'takeFrom', $event)\" />\r\n </td>\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"item.bindTo\"\r\n (ngModelChange)=\"updateAlsoBindRow($index, 'bindTo', $event)\" />\r\n </td>\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeAlsoBindRow($index)\">x</button>\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- OUTER PARAM -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Outer Param JSON\r\n </div>\r\n\r\n <textarea class=\"form-control\"\r\n [style.height.px]=\"140\"\r\n [ngModel]=\"$outerParamJson()\"\r\n (ngModelChange)=\"onOuterParamJsonChange($event)\">\r\n </textarea>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- OUTER FILTER -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Outer Filter (RuleTree Mini)\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addOuterFilter()\">+ Add Filter</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>Field</th>\r\n <th>Operator</th>\r\n <th>Value</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (f of $outerFilter(); track $index) {\r\n <tr>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"f.field\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'field', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <core-dropdown\r\n [options$]=\"svc.filterOperatorOptions$\"\r\n [ngModel]=\"f.operator\"\r\n [paramMode]=\"true\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'operator', $event)\">\r\n </core-dropdown>\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n type=\"text\"\r\n [ngModel]=\"f.dateTimeValue\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'dateTimeValue', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeOuterFilter($index)\">x</button>\r\n </td>\r\n\r\n </tr>\r\n }\r\n </table>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- EXTENDED COLUMNS -->\r\n <!-- ================================================ -->\r\n <!-- <div class=\"setting-row\">\r\n Extended Columns\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addExtendedColumn()\">+ Add Column</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>Caption</th>\r\n <th>Field</th>\r\n <th>Type</th>\r\n <th>Align</th>\r\n <th>Width</th>\r\n <th>Hidden</th>\r\n <th>Translate</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (c of $extendedColumns(); track $index) {\r\n <tr>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.caption\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'caption', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.field\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'field', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.type\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'type', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.align\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'align', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input type=\"number\"\r\n class=\"form-control\"\r\n [ngModel]=\"c.width\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'width', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <core-checkbox\r\n [ngModel]=\"c.hidden\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'hidden', $event)\">\r\n </core-checkbox>\r\n </td>\r\n\r\n <td>\r\n <core-checkbox\r\n [ngModel]=\"c.translate\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'translate', $event)\">\r\n </core-checkbox>\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeExtendedColumn($index)\">x</button>\r\n </td>\r\n\r\n </tr>\r\n }\r\n </table> -->\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- EXTENDED SECTIONS -->\r\n <!-- ================================================ -->\r\n <!-- <div class=\"setting-row\">\r\n Extended Sections\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addExtendedSection()\">+ Add Section</button>\r\n\r\n @for (s of $extendedSections(); track $index) {\r\n <div class=\"section-box\">\r\n\r\n <div class=\"setting-row\">\r\n <label>Caption</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"s.caption\"\r\n (ngModelChange)=\"updateExtendedSection($index, $event)\" />\r\n </div>\r\n\r\n <button class=\"btn-remove\"\r\n (click)=\"removeExtendedSection($index)\">\r\n Remove\r\n </button>\r\n\r\n </div>\r\n } -->\r\n\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'datepicker-props',\r\n imports: [],\r\n templateUrl: './datepicker-props.component.html',\r\n styleUrl: './datepicker-props.component.scss'\r\n})\r\nexport class DatepickerPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>datepicker-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'grid-buffer-props',\r\n imports: [],\r\n templateUrl: './grid-buffer-props.component.html',\r\n styleUrl: './grid-buffer-props.component.scss'\r\n})\r\nexport class GridBufferPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>grid-buffer-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'list-props',\r\n imports: [],\r\n templateUrl: './list-props.component.html',\r\n styleUrl: './list-props.component.scss'\r\n})\r\nexport class ListPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>list-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'mcc-props',\r\n imports: [],\r\n templateUrl: './mcc-props.component.html',\r\n styleUrl: './mcc-props.component.scss'\r\n})\r\nexport class MccPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>mcc-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'radio-group-props',\r\n imports: [],\r\n templateUrl: './radio-group-props.component.html',\r\n styleUrl: './radio-group-props.component.scss'\r\n})\r\nexport class RadioGroupPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>radio-group-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'uploader-props',\r\n imports: [],\r\n templateUrl: './uploader-props.component.html',\r\n styleUrl: './uploader-props.component.scss'\r\n})\r\nexport class UploaderPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>uploader-props works!</p>\r\n","import { Component, computed } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { AttachmentFieldHelperService } from './attachment-field-helper.service';\r\n\r\n\r\n@Component({\r\n selector: 'attachment-props',\r\n imports: [],\r\n templateUrl: './attachment-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class AttachmentPropsComponent extends BasePropsComponent {\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n return AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n });\r\n\r\n setTypedField(val: string): void {\r\n const control = this.$control();\r\n const context = this.$formContext();\r\n\r\n if (AttachmentFieldHelperService.isAttachment(control)) {\r\n AttachmentFieldHelperService.handleFieldNameChangeForAttachment(control, context, val);\r\n } else {\r\n control.field = val;\r\n }\r\n\r\n this.patchControl(control, this.isNested);\r\n }\r\n\r\n}","<p>attachment-props works!</p>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, inject, signal, TemplateRef, viewChild, WritableSignal } from '@angular/core';\r\nimport { CoreStickerCollectionComponent } from '../../../core-sticker-collection/core-sticker-collection.component';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreWorkflowService } from '../../../core-workflow-builder/core-workflow.service';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject, catchError, of } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IGptAskRequest } from '../../../../interfaces/IGptAskRequest';\r\nimport { GptService } from '../../../../services/gpt.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions } from '../../../../constants/alertOptions';\r\nimport { NgStyle } from '@angular/common';\r\nimport { IWorkflowSchemaTable } from '../../../core-workflow-builder/interfaces/IWorkflowSchema';\r\nimport { DbService, IGetWorkflowSchemaRequest } from '../../../../services/db.service';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\n\r\n@Component({\r\n selector: 'calculated-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreStickerCollectionComponent,\r\n CoreRadioGroupComponent,\r\n ],\r\n templateUrl: './calculated-props.component.html',\r\n styleUrls: ['./calculated-props.component.scss']\r\n})\r\nexport class CalculatedPropsComponent extends BasePropsComponent implements AfterViewInit {\r\n\r\n $shortHtmlHintForCSharpSyntax = viewChild<TemplateRef<any>>('shortHtmlHintForCSharpSyntax');\r\n $shortHtmlHintForSqlSyntax = viewChild<TemplateRef<any>>('shortHtmlHintForSqlSyntax');\r\n\r\n $loading = signal(false);\r\n $beingValidated = signal(false);\r\n public wfs = inject(CoreWorkflowService);\r\n public fds = inject(CoreFormDesignService);\r\n dbs = inject(DbService);\r\n gpt = inject(GptService);\r\n alertService = inject(AlertService);\r\n //$control = this.fds.$control;\r\n\r\n $sqlScriptError: WritableSignal<string | null> = signal(null);\r\n\r\n $aiGeneratorOn = signal(false);\r\n $selectedTables = signal<IWorkflowSchemaTable[]>([]);\r\n $generatedScript = signal('');\r\n $sqlPrompt = signal('');\r\n\r\n $selectedTablesForAi = computed(() => {\r\n const selectedTables: IWorkflowSchemaTable[] = this.$selectedTables();\r\n\r\n if (!selectedTables.length) return 'No tables selected.';\r\n\r\n let result = 'Consider the following database tables and columns:\\n\\n';\r\n\r\n for (const table of selectedTables) {\r\n result += `Table: ${table.table}\\n`;\r\n\r\n const activeColumns = table.columns.filter(c => c.isActive);\r\n for (const col of activeColumns) {\r\n const hint = col.hintForAi?.trim();\r\n result += ` - ${col.column}` + (hint ? ` (${hint})` : '') + `\\n`;\r\n }\r\n\r\n result += '\\n';\r\n }\r\n\r\n return result.trim();\r\n });\r\n\r\n radioOptions$ = new BehaviorSubject<ICoreRadioOption[]>([\r\n {\r\n value: 'in-memory',\r\n text: 'In Memory',\r\n htmlTooltip: this.$shortHtmlHintForCSharpSyntax()\r\n },\r\n {\r\n value: 'sql-query',\r\n text: 'SQL Query',\r\n htmlTooltip: this.$shortHtmlHintForSqlSyntax()\r\n },\r\n ]);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n const shortHtmlHintForCSharpSyntax = this.$shortHtmlHintForCSharpSyntax();\r\n const shortHtmlHintForSqlSyntax = this.$shortHtmlHintForSqlSyntax();\r\n\r\n if (!!shortHtmlHintForCSharpSyntax && !!shortHtmlHintForSqlSyntax) {\r\n this.radioOptions$.next(\r\n [\r\n {\r\n value: 'in-memory',\r\n text: 'In Memory',\r\n htmlTooltip: shortHtmlHintForCSharpSyntax\r\n },\r\n {\r\n value: 'sql-query',\r\n text: 'SQL Query',\r\n htmlTooltip: shortHtmlHintForSqlSyntax\r\n },\r\n ]\r\n )\r\n }\r\n })\r\n\r\n }\r\n\r\n $fields = computed(() => {\r\n const currentField = this.fds.$control()?.field;\r\n return this.wfs.$availableCols().filter(c => c.field !== currentField).map(c => ({ field: c.field }));\r\n })\r\n\r\n loadDbSchema(): void {\r\n const fullRequest: IGetWorkflowSchemaRequest = {};\r\n this.subscriptions.push(\r\n this.dbs.syncAndGetWorkflowSchemaMetadata(fullRequest).pipe(\r\n catchError(() => of({ ok: false, status: 500 })),\r\n )\r\n .subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.wfs.$workflowDbSchema.set(x.body.innerBody.items)\r\n }\r\n })\r\n )\r\n }\r\n\r\n toTables(names: string[]): IWorkflowSchemaTable[] {\r\n const allTables = this.wfs.$workflowDbSchema(); // All available tables\r\n return allTables.filter(table => names.includes(table.table));\r\n }\r\n\r\n\r\n validateScript(e: any): void {\r\n\r\n e.stopPropagation();\r\n\r\n const control = this.fds.$control();\r\n\r\n if (!control) {\r\n this.alertService.info(`No current control detected`);\r\n return;\r\n }\r\n if (!control!.script) {\r\n this.alertService.info(`There is no script to validate for ${control.field}`)\r\n return;\r\n }\r\n\r\n if (!control!.returnType) {\r\n this.alertService.info(`You should set return type for ${control!.field}`)\r\n return;\r\n }\r\n\r\n const evalMode = this.fds.$control()?.evaluationMode;\r\n\r\n if (!evalMode) {\r\n this.alertService.error('Please select avaluation mode', alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGptAskRequest = {\r\n input: control.script,\r\n context: this.getValidationContextByMode(evalMode),\r\n purpose: 'validate-calculated-field',\r\n isSystemPrompt: true\r\n };\r\n\r\n this.$beingValidated.set(true);\r\n\r\n this.subscriptions.push(\r\n this.gpt.askGpt(request).pipe(\r\n catchError(err => {\r\n this.$beingValidated.set(false);\r\n this.alertService.error('Validation failed.');\r\n return of({ ok: false, status: 500 });\r\n })\r\n ).subscribe(x => {\r\n this.$beingValidated.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const reply = x.body.innerBody?.trim();\r\n this.alertService.success(`GPT: ${reply}`);\r\n } else {\r\n this.alertService.error('Could not validate script.');\r\n }\r\n })\r\n );\r\n }\r\n\r\n generateScript(): void {\r\n this.$aiGeneratorOn.update(current => !current);\r\n }\r\n\r\n applyGeneratedSql(): void {\r\n const generated = this.$generatedScript();\r\n if (!generated) return;\r\n\r\n this.setControlProp('script', generated);\r\n this.alertService.success('Script applied from AI.');\r\n this.$aiGeneratorOn.set(false);\r\n }\r\n\r\n\r\n submitScriptPrompt(): void {\r\n const control = this.fds.$control();\r\n const evalMode = control?.evaluationMode;\r\n const prompt = this.$sqlPrompt().trim();\r\n const dependsOn = control?.dependsOn ?? [];\r\n const selectedTables = this.$selectedTables();\r\n\r\n if (!evalMode) {\r\n this.alertService.warn('Please select an evaluation mode.');\r\n return;\r\n }\r\n\r\n if (!prompt) {\r\n this.alertService.warn('Please enter a description for the AI to generate your script.');\r\n return;\r\n }\r\n\r\n if (dependsOn.length === 0) {\r\n this.alertService.warn('Please select at least one field that the script depends on.');\r\n return;\r\n }\r\n\r\n if (evalMode === 'sql-query') {\r\n if (!selectedTables.length) {\r\n this.alertService.warn('Please select at least one table.');\r\n return;\r\n }\r\n\r\n const tablesWithNoHint = selectedTables\r\n .filter(t => !t.hintForAi?.trim())\r\n .map(t => t.table);\r\n\r\n if (tablesWithNoHint.length > 0) {\r\n this.alertService.warn(\r\n `Please provide a hint for the following table(s): ${tablesWithNoHint.join(', ')}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n // 🧠 Construct prompt\r\n const dependsOnLine = `The script should depend on: ${dependsOn.join(', ')}.`;\r\n const contextIntro = this.getContextByMode(evalMode);\r\n const tableContext = this.$selectedTablesForAi(); // nicely formatted\r\n const fullPrompt = `${prompt}\\n\\n${dependsOnLine}\\n\\n${tableContext}`;\r\n\r\n const request: IGptAskRequest = {\r\n input: fullPrompt,\r\n context: contextIntro,\r\n purpose: 'generate-calculated-field',\r\n isSystemPrompt: true\r\n };\r\n\r\n this.$loading.set(true);\r\n\r\n this.subscriptions.push(\r\n this.gpt.askGpt(request).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n this.alertService.error('AI generation failed.');\r\n return of({ ok: false, status: 500 });\r\n })\r\n ).subscribe(res => {\r\n this.$loading.set(false);\r\n\r\n if (res.ok && res.status === 200 && res.body?.statusCode === 200) {\r\n const reply = res.body.innerBody?.trim();\r\n if (reply) {\r\n this.$generatedScript.set(reply);\r\n } else {\r\n this.alertService.warn('AI returned an empty result.');\r\n }\r\n } else {\r\n this.alertService.error('AI could not generate a valid script.');\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n $placeholderForScriptInput = computed<string>(() => {\r\n switch (this.fds.$control()?.evaluationMode) {\r\n case 'in-memory':\r\n return 'Enter expression formula';\r\n case 'sql-query':\r\n return 'Enter SQL script';\r\n default:\r\n return 'Please select Evaluation Mode'\r\n }\r\n })\r\n\r\n tableCheckedChange(selected: string[]): void {\r\n this.$selectedTables.set(this.toTables(selected));\r\n }\r\n\r\n getContextByMode(mode: 'sql-query' | 'in-memory'): string[] {\r\n if (mode === 'sql-query') {\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You are a SQL validator for a workflow engine.\",\r\n \"User input must be a full SQL SELECT statement compatible with Dapper.\",\r\n \"User input must not modify database schema\",\r\n \"It must contain a FROM clause with a real table name.\",\r\n \"It must contain a UPDATE, DELETE or DROP clause.\",\r\n \"It must contain a WHERE clause.\",\r\n \"It must return exactly one value\",\r\n \"Examples of valid patterns include:\",\r\n \" SELECT CASE WHEN EXISTS (SELECT 1 FROM Users WHERE IsActive = 1) THEN 1 ELSE 0 END\",\r\n \" SELECT CASE WHEN @Amount > 1000 THEN @Amount ELSE 0 END -- when Amount is a parameter\",\r\n \"The query must be syntactically complete, no partial expressions or clauses.\",\r\n `The query must return a type of ${this.fds.$control()?.returnType!} JavaScript equivalent.`,\r\n \"Do not wrap your output in triple backticks or markdown.\",\r\n \"Respond with only the raw SQL script.\",\r\n ];\r\n\r\n }\r\n\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n 'You are a C# expression validator.',\r\n `Validate whether the expression returns a type of ${this.fds.$control()?.returnType!} JavaScript equivalent result using C# syntax.`,\r\n 'The result will be used inside an if-statement or condition tree.'\r\n ];\r\n }\r\n\r\n getValidationContextByMode(mode: 'sql-query' | 'in-memory'): string[] {\r\n if (mode === 'sql-query') {\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You're a SQL validator for a business rule engine.\",\r\n \"The input is a full SQL SELECT statement written by a human.\",\r\n \"Analyze if it meets these criteria:\",\r\n \"- Compatible with SQL Server and Dapper parameter style.\",\r\n \"- Has FROM clause with table name.\",\r\n \"- Has WHERE clause.\",\r\n \"- Uses @param style inputs.\",\r\n \"Return only a short answer like 'Valid ✅' or explain what's wrong in plain terms.\",\r\n ];\r\n }\r\n\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You're a validator for C# expressions and the result should be compatible with DynamicExpresso\",\r\n `Analyze whether this expression is valid syntax and returns a type = ${this.$control().returnType!}`,\r\n \"If valid, say 'Valid ✅'. If not, explain the syntax issue.\",\r\n ];\r\n }\r\n\r\n\r\n validateSqlScript(input: string): string | null {\r\n const trimmed = input.trim();\r\n\r\n if (!/^SELECT\\b/i.test(trimmed)) {\r\n return 'Only SELECT queries are allowed.';\r\n }\r\n\r\n const destructivePattern = /^\\s*(DELETE|DROP|UPDATE|INSERT|ALTER|TRUNCATE|EXEC|MERGE)\\b/gi;\r\n\r\n if (destructivePattern.test(trimmed)) {\r\n return 'Dangerous SQL operations (DELETE, DROP, etc.) are not allowed.';\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n onScriptChange(script: string): void {\r\n\r\n if (this.$control().evaluationMode === 'sql-query') {\r\n const error = this.validateSqlScript(script);\r\n this.setControlProp('isUnsafe', !!error);\r\n this.$sqlScriptError.set(error);\r\n this.setControlProp('script', script);\r\n } else {\r\n this.setControlProp('script', script);\r\n this.setControlProp('isUnsafe', false);\r\n }\r\n\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => this.loadDbSchema())\r\n }\r\n\r\n openHintEditor(table: IWorkflowSchemaTable, e: any): void {\r\n\r\n }\r\n\r\n}\r\n","<div class=\"setting-group calculated-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row evaluation-mode-row\">\r\n <label class=\"setting-label\">Evaluation Mode</label>\r\n <core-radio-group [options$]=\"radioOptions$\" [vertical]=\"true\" [gapY]=\"8\"\r\n [ngModel]=\"fds.$control()?.evaluationMode\" (ngModelChange)=\"setControlProp('evaluationMode', $event)\">\r\n </core-radio-group>\r\n </div>\r\n\r\n <div class=\"setting-row depends-on-row\">\r\n <label class=\"setting-label\">Depends On</label>\r\n <core-sticker-collection [$items]=\"$fields()\" [$shownFrom]=\"'field'\"\r\n [$initialChecked]=\"fds.$control()?.dependsOn || []\" ($checkedChange)=\"setControlProp('dependsOn', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row return-type-row\">\r\n <label class=\"setting-label\">Return Type</label>\r\n <select class=\"form-control setting-input\" [ngModel]=\"fds.$control()?.returnType || 'number'\"\r\n (ngModelChange)=\"setControlProp('returnType', $event)\">\r\n <option value=\"boolean\">Boolean</option>\r\n <option value=\"number\">Number</option>\r\n <option value=\"string\">String</option>\r\n <option value=\"number[]\">Number[]</option>\r\n <option value=\"string[]\">String[]</option>\r\n <!-- Omitting 'Date' and 'object' -->\r\n </select>\r\n </div>\r\n\r\n @if (!!fds.$control()?.dependsOn && !!fds.$control()?.dependsOn!.length) {\r\n\r\n\r\n <div class=\"setting-row script-row\">\r\n <label class=\"setting-label\">Script {{ $beingValidated() ? 'is being validated...' : '' }}</label>\r\n <textarea [ngStyle]=\"{ minHeight: '150px', borderRadius: '8px' }\" [readonly]=\"!fds.$control()?.evaluationMode\"\r\n [disabled]=\"!fds.$control()?.evaluationMode\" class=\"form-control\"\r\n [class.form-control-disabled]=\"!fds.$control()?.evaluationMode\" rows=\"20\" [ngModel]=\"fds.$control()?.script\"\r\n (ngModelChange)=\"onScriptChange($event)\" [placeholder]=\"$placeholderForScriptInput()\">\r\n </textarea>\r\n @if (!!$sqlScriptError()) {\r\n <small class=\"text-danger\">{{ $sqlScriptError() }}</small>\r\n }\r\n\r\n\r\n @if (!!fds.$control()?.evaluationMode) {\r\n <div class=\"button-group\">\r\n <button class=\"btn btn-secondary validate-btn\" (click)=\"validateScript($event)\">Validate with AI</button>\r\n <button class=\"btn btn-primary validate-btn\" (click)=\"generateScript()\">\r\n {{ $aiGeneratorOn() ? 'Hide AI Prompt Editor' : 'Show AI Prompt Editor' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n @if ($aiGeneratorOn()) {\r\n <div class=\"sql-generator-panel\">\r\n <div class=\"alert alert-info\" style=\"margin-top: 1rem;\">\r\n <strong>SQL Generator:</strong> Describe what you want the script to do, and AI will generate SQL for you.\r\n </div>\r\n\r\n @if (fds.$control()?.evaluationMode==='sql-query') {\r\n <div class=\"sql-generator-panel mt-4\">\r\n <label class=\"fw-bold mb-2\">Select Related Tables</label>\r\n\r\n <core-sticker-collection [$enableFilter]=\"true\" [$items]=\"wfs.$workflowDbSchema()\" [$shownFrom]=\"'table'\"\r\n [$tooltipFrom]=\"'hintForAi'\" [$initialChecked]=\"[]\" ($checkedChange)=\"tableCheckedChange($event)\">\r\n </core-sticker-collection>\r\n\r\n </div>\r\n }\r\n\r\n @if (!!fds.$control()?.evaluationMode) {\r\n <textarea class=\"form-control\" style=\"min-height: 100px; margin-top: 0.5rem; border-radius: 8px;\"\r\n [(ngModel)]=\"$sqlPrompt\" placeholder=\"e.g., Calculate leave days between FROM_DATE and TO_DATE\">\r\n </textarea>\r\n\r\n <div class=\"mt-2 d-flex gap-2 justify-content-end\">\r\n <button class=\"btn btn-success\" (click)=\"submitScriptPrompt()\">\r\n Generate Script\r\n </button>\r\n </div>\r\n }\r\n\r\n @if ($generatedScript()) {\r\n <div class=\"generated-sql-box mt-3\">\r\n <label class=\"fw-bold\">Generated by AI:</label>\r\n <pre class=\"bg-light p-3 rounded\" style=\"white-space: pre-wrap;\">{{$generatedScript()}}</pre>\r\n <button class=\"btn btn-sm btn-primary mt-2\" (click)=\"applyGeneratedSql()\">Apply to Script</button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n\r\n\r\n }\r\n\r\n<ng-template #shortHtmlHintForCSharpSyntax>\r\n <div class=\"syntax-hint\">\r\n <strong>Example (C# Expression):</strong>\r\n <pre><code>FullName.ToUpper() + \" #\" + EmployeeCode</code></pre>\r\n <div class=\"note\">\r\n This expression will be evaluated dynamically using <code>DynamicExpresso</code>.<br>\r\n You can return any value from context.\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #shortHtmlHintForSqlSyntax>\r\n <div class=\"syntax-hint\">\r\n <strong>Example (SQL Query):</strong>\r\n <pre><code>SELECT EMPLOYEE_CODE FROM HU_EMPLOYEE WHERE ORG_ID = 123</code></pre>\r\n <div class=\"note\">\r\n Your SQL can return either a single value <em>or</em> a list.<br>\r\n The system will extract data from the <strong>first column of all rows</strong>.<br>\r\n Use standard SQL compatible with your database.\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n</div>","import { Type } from '@angular/core';\r\n\r\nimport { NumberPropsComponent } from './type-specific/number-props/number-props.component';\r\nimport { EmailPropsComponent } from './type-specific/email-props/email-props.component';\r\nimport { DropdownPropsComponent } from './type-specific/dropdown-props/dropdown-props.component';\r\nimport { FormArrayPropsComponent } from './type-specific/form-array-props/form-array-props.component';\r\nimport { TextareaPropsComponent } from './type-specific/textarea-props/textarea-props.component';\r\nimport { ChecklistPropsComponent } from './type-specific/checklist-props/checklist-props.component';\r\nimport { SeekerPropsComponent } from './type-specific/seeker-props/seeker-props.component';\r\nimport { DatepickerPropsComponent } from './type-specific/datepicker-props/datepicker-props.component';\r\nimport { GridBufferPropsComponent } from './type-specific/grid-buffer-props/grid-buffer-props.component';\r\nimport { ListPropsComponent } from './type-specific/list-props/list-props.component';\r\nimport { MccPropsComponent } from './type-specific/mcc-props/mcc-props.component';\r\nimport { RadioGroupPropsComponent } from './type-specific/radio-group-props/radio-group-props.component';\r\nimport { UploaderPropsComponent } from './type-specific/uploader-props/uploader-props.component';\r\nimport { AttachmentPropsComponent } from './type-specific/attachment-props/attachment-props.component';\r\nimport { CalculatedPropsComponent } from './calculated-props/calculated-props.component';\r\n\r\nexport const FIELD_SETTING_PROPS_REGISTRY: Record<string, Type<any>> = {\r\n 'NUMBER': NumberPropsComponent,\r\n 'EMAIL': EmailPropsComponent,\r\n 'DROPDOWN': DropdownPropsComponent,\r\n 'FORM_ARRAY': FormArrayPropsComponent,\r\n 'TEXTAREA': TextareaPropsComponent,\r\n 'CHECKLIST': ChecklistPropsComponent,\r\n 'SEEKER': SeekerPropsComponent,\r\n 'DATEPICKER': DatepickerPropsComponent,\r\n 'GRID_BUFFER': GridBufferPropsComponent,\r\n 'LIST': ListPropsComponent,\r\n 'MCC': MccPropsComponent,\r\n 'RADIO_GROUP': RadioGroupPropsComponent,\r\n 'UPLOADER': UploaderPropsComponent,\r\n 'ATTACHMENT': AttachmentPropsComponent,\r\n 'CALCULATED': CalculatedPropsComponent,\r\n};\r\n","import { ChangeDetectionStrategy, Component, ComponentRef, inject, Input, isDevMode, OnInit, Type, ViewContainerRef } from \"@angular/core\";\r\nimport { AlertService } from \"../../alert/alert.service\";\r\nimport { noneAutoClosedAlertOptions } from \"../../../constants/alertOptions\";\r\nimport { FIELD_SETTING_PROPS_REGISTRY } from \"../field-setting/field-setting-props.registry\";\r\n\r\n@Component({\r\n selector: 'props-host',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropsHostComponent implements OnInit {\r\n\r\n @Input() isNested = false;\r\n @Input() type!: string;\r\n @Input() props: any = {};\r\n\r\n private vcRef = inject(ViewContainerRef);\r\n private alert = inject(AlertService);\r\n\r\n private componentRef?: ComponentRef<any>;\r\n\r\n ngOnInit() {\r\n const componentType = FIELD_SETTING_PROPS_REGISTRY[this.type];\r\n\r\n if (!componentType) {\r\n this.alert.error(`[PropsHost] Component type '${this.type}' not found in registry.`, noneAutoClosedAlertOptions);\r\n return;\r\n }\r\n\r\n this.componentRef = this.vcRef.createComponent(componentType);\r\n\r\n // truyền props trực tiếp\r\n if (this.props) {\r\n Object.assign(this.componentRef.instance, this.props);\r\n }\r\n\r\n // truyền isNested nếu có @Input bên con\r\n this.componentRef.setInput?.('isNested', this.isNested);\r\n\r\n this.componentRef.changeDetectorRef.markForCheck();\r\n }\r\n}","import { ChangeDetectionStrategy, Component, computed, effect, signal } from '@angular/core';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { EnumSupportedRuntimeValidator } from '../../enums/EnumSupportedRuntimeValidator';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '../../../../app-pipes/translate.pipe';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { IValidator } from '../../../core-form/core-form/enum-interfaces';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'validator-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n TranslatePipe,\r\n TooltipDirective,\r\n CoreCheckboxComponent\r\n ],\r\n templateUrl: './validator-editor.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class ValidatorEditorComponent extends BasePropsComponent {\r\n\r\n // 🔹 Computed list based on controlType\r\n $availableValidators = computed(() =>\r\n this.coreFormDesignService.getSupportedValidators(this.$control())\r\n );\r\n\r\n // 🔹 Signal for selected validators with their values\r\n $selectedValidators = signal<Partial<Record<EnumSupportedRuntimeValidator, IValidator>>>({});\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n const c = this.$control(); // will re-run when selection changes\r\n this.syncFromControl();\r\n });\r\n }\r\n\r\n // ✅ Check if a validator is enabled\r\n isChecked(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v] !== undefined;\r\n }\r\n\r\n private syncFromControl(): void {\r\n const control = this.$control();\r\n const validators = control.validators ?? [];\r\n \r\n const validatorMap: Partial<Record<EnumSupportedRuntimeValidator, IValidator>> = {};\r\n \r\n for (const v of validators) {\r\n validatorMap[v.name as EnumSupportedRuntimeValidator] = v;\r\n }\r\n \r\n this.$selectedValidators.set(validatorMap);\r\n }\r\n\r\n toggleValidator(v: EnumSupportedRuntimeValidator): void {\r\n const current = { ...this.$selectedValidators() };\r\n\r\n const requiresValue = ['minLength', 'maxLength', 'min', 'max', 'pattern'];\r\n const isAlreadyChecked = !!current[v];\r\n\r\n if (isAlreadyChecked) {\r\n delete current[v]; // ❌ Remove validator\r\n } else {\r\n const validator: IValidator = {\r\n name: v,\r\n errorMessage: this.coreFormDesignService.getErrorMessageFor(v),\r\n validator: this.coreFormDesignService.getValidatorFn(v, null), // stub until value is filled\r\n value: requiresValue.includes(v) ? '' : true\r\n };\r\n\r\n current[v] = validator;\r\n }\r\n\r\n this.$selectedValidators.set(current);\r\n\r\n // ✅ Skip update if validator requires value but it's still empty\r\n const shouldSkip =\r\n !isAlreadyChecked &&\r\n requiresValue.includes(v) &&\r\n current[v]?.value === '';\r\n\r\n if (shouldSkip) return;\r\n\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(current);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n updateValidatorValue(v: EnumSupportedRuntimeValidator, raw: any): void {\r\n const value = raw?.toString().trim();\r\n\r\n const updated = { ...this.$selectedValidators() };\r\n\r\n if (value === '') {\r\n // 👇 Remove the validator if it was cleared\r\n delete updated[v];\r\n } else {\r\n if (updated[v]) {\r\n updated[v].value = value;\r\n }\r\n }\r\n\r\n this.$selectedValidators.set(updated);\r\n\r\n // ✅ Only update the control if it's valid or fully removed\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(updated);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n isReadOnlyValidator(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v]?.readOnly === true;\r\n }\r\n\r\n\r\n}","<div class=\"setting-group validator-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n @for (v of $availableValidators(); track v) {\r\n <div class=\"setting-row\">\r\n\r\n <label>\r\n {{ v }}\r\n @if (isReadOnlyValidator(v)) {\r\n <i class=\"feather-lock tiny-lock\" title=\"Read-only system validator\"></i>\r\n }\r\n </label>\r\n\r\n <div class=\"control-wrapper\">\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"isChecked(v)\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'System validator' : ''\" (ngModelChange)=\"toggleValidator(v)\" />\r\n\r\n @if (isChecked(v) && ['minLength', 'maxLength', 'min', 'max'].includes(v)) {\r\n <input class=\"form-control validator-value\" [type]=\"'number'\"\r\n [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\"\r\n [placeholder]=\"'Enter value' | translate: lang\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n\r\n @else if (isChecked(v) && v === 'pattern') {\r\n <input class=\"form-control validator-value\" type=\"text\" [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\" [placeholder]=\"'Enter regex'\"\r\n [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input, Renderer2, Type } from '@angular/core';\r\nimport { IFormBaseControl } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MandatoryPropsComponent } from './mandatory-props/mandatory-props.component';\r\nimport { OptionalPropsComponent } from './optional-props/optional-props.component';\r\nimport { PropsHostComponent } from '../props-host/props-host.component';\r\nimport { AttachmentPropsComponent } from './type-specific/attachment-props/attachment-props.component';\r\nimport { ChecklistPropsComponent } from './type-specific/checklist-props/checklist-props.component';\r\nimport { DatepickerPropsComponent } from './type-specific/datepicker-props/datepicker-props.component';\r\nimport { DropdownPropsComponent } from './type-specific/dropdown-props/dropdown-props.component';\r\nimport { GridBufferPropsComponent } from './type-specific/grid-buffer-props/grid-buffer-props.component';\r\nimport { ListPropsComponent } from './type-specific/list-props/list-props.component';\r\nimport { MccPropsComponent } from './type-specific/mcc-props/mcc-props.component';\r\nimport { NumberPropsComponent } from './type-specific/number-props/number-props.component';\r\nimport { RadioGroupPropsComponent } from './type-specific/radio-group-props/radio-group-props.component';\r\nimport { SeekerPropsComponent } from './type-specific/seeker-props/seeker-props.component';\r\nimport { TextareaPropsComponent } from './type-specific/textarea-props/textarea-props.component';\r\nimport { UploaderPropsComponent } from './type-specific/uploader-props/uploader-props.component';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { ValidatorEditorComponent } from './validator-editor/validator-editor.component';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { CalculatedPropsComponent } from './calculated-props/calculated-props.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { HtmlTooltipDirective } from '../../../directives/html-tooltip.directive';\r\nimport { FIELD_SETTING_PROPS_REGISTRY } from './field-setting-props.registry';\r\n\r\n@Component({\r\n selector: 'field-setting',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n NgStyle,\r\n MandatoryPropsComponent,\r\n OptionalPropsComponent,\r\n ValidatorEditorComponent,\r\n PropsHostComponent,\r\n AttachmentPropsComponent,\r\n ChecklistPropsComponent,\r\n DatepickerPropsComponent,\r\n DropdownPropsComponent,\r\n GridBufferPropsComponent,\r\n ListPropsComponent,\r\n MccPropsComponent,\r\n NumberPropsComponent,\r\n RadioGroupPropsComponent,\r\n SeekerPropsComponent,\r\n TextareaPropsComponent,\r\n UploaderPropsComponent,\r\n CalculatedPropsComponent,\r\n HtmlTooltipDirective,\r\n SeekerPropsComponent\r\n ],\r\n templateUrl: './field-setting.component.html',\r\n styleUrl: './field-setting.component.scss'\r\n})\r\nexport class FieldSettingComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $isNested = input<boolean>(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService)\r\n\r\n enumControlType = EnumFormBaseContolType;\r\n\r\n listenerFn!: () => void;\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n // 🔹 Reactive normalized control (always derived from selected cell)\r\n $control = computed<IFormBaseControl | null>(() => {\r\n const cell = this.$isNested() ? this.coreFormDesignService.$nestedSelectedCell() : this.coreFormDesignService.$selectedCell();\r\n if (!cell?.control) return null;\r\n return this.coreFormDesignService.normalize(cell.control);\r\n });\r\n\r\n // 🔹 Context (flat control list)\r\n readonly $formContext = computed(() => this.coreFormDesignService.$formContext());\r\n\r\n readonly onParamsChanged = (updated: IFormBaseControl) =>\r\n this.coreFormDesignService.patchControl(updated, this.$isNested());\r\n\r\n readonly $resolvedType = computed(() => {\r\n const ctrl = this.$control();\r\n if (!ctrl) return 'UNKNOWN';\r\n return this.resolvePropsType(ctrl) ?? 'UNKNOWN';\r\n });\r\n\r\n readonly $props = computed(() => {\r\n const ctrl = this.$control();\r\n if (!ctrl) return null;\r\n\r\n return {\r\n control: ctrl,\r\n onChange: this.onParamsChanged\r\n };\r\n });\r\n\r\n\r\n resolvePropsType(control: IFormBaseControl | null): string | null {\r\n\r\n console.log(\"resolvePropsType\", control);\r\n\r\n if (!control) return null;\r\n\r\n const type = control.controlType?.toUpperCase();\r\n console.log(\"resolvePropsType\", type);\r\n\r\n return FIELD_SETTING_PROPS_REGISTRY[type] ? type : null;\r\n }\r\n\r\n // 🔹 Optional trigger for downstream side-effects (no longer emits)\r\n onControlParamsChange(): void {\r\n const updated = this.$control();\r\n if (!updated) return;\r\n this.coreFormDesignService.patchControl(updated, this.$isNested());\r\n }\r\n\r\n closeFieldSettingPanel(): void {\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n }\r\n\r\n getFriendlyControlLabel(control: IFormBaseControl | null): string {\r\n if (!control) return 'Control';\r\n\r\n // 🧠 Detailed mapping: \"controlType:type\" → Friendly Name\r\n const fullTypeMap: Record<string, string> = {\r\n 'TEXTBOX:string': 'String Box',\r\n 'TEXTBOX:number': 'Number Box',\r\n 'TEXTBOX:email': 'Email Field',\r\n\r\n 'DROPDOWN': 'Dropdown',\r\n 'CHECKLIST': 'Checklist',\r\n 'SEEKER': 'Seeker',\r\n 'DATEPICKER': 'Date Picker',\r\n 'TEXTAREA': 'Text Area',\r\n 'CHECKBOX': 'Checkbox'\r\n // Add more mappings as needed\r\n };\r\n\r\n const controlType = control.controlType?.toUpperCase() ?? '';\r\n const inputType = control.type?.toLowerCase();\r\n\r\n const fullKey = inputType ? `${controlType}:${inputType}` : controlType;\r\n\r\n return fullTypeMap[fullKey] ?? this.camelToTitle(control.controlType ?? 'Control');\r\n }\r\n\r\n camelToTitle(input: string): string {\r\n return input\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .replace(/^./, str => str.toUpperCase());\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\r\n this.cdr.markForCheck();\r\n\r\n });\r\n\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n if (this.listenerFn) this.listenerFn();\r\n }\r\n\r\n}\r\n","<div class=\"field-setting-container\">\r\n\r\n @if (!!$control()) {\r\n <div class=\"panel-caption-header\">\r\n <div class=\"panel-caption\">\r\n Editing: {{ (!!$control() && $control()!.type !== 'calculated') ? $control()?.controlType + ' - ' : '' }}{{ $control()?.field ||\r\n 'Unnamed' }}\r\n </div>\r\n @if (!$isNested()) {\r\n <div class=\"close-wrapper pointer\" (click)=\"closeFieldSettingPanel()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n\r\n\r\n <div class=\"field-setting-content\">\r\n\r\n\r\n @if (!!$control() && $control()!.type === 'calculated') {\r\n\r\n <div class=\"group-title mandatory\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Mandatory</div>\r\n </div>\r\n <mandatory-props [isNested]=\"$isNested()\"></mandatory-props>\r\n\r\n <div class=\"group-title calculated\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Calculated Rule<i class=\"feather-help-circle\" [htmlTooltip]=\"aboutCalculatedField\"\r\n [maxWidthUnset]=\"true\"></i></div>\r\n </div>\r\n <calculated-props [isNested]=\"$isNested()\"></calculated-props>\r\n\r\n\r\n } @else {\r\n\r\n <div class=\"group-title mandatory\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Mandatory</div>\r\n </div>\r\n <mandatory-props [isNested]=\"$isNested()\"></mandatory-props>\r\n\r\n <!-- <div class=\"setting-divider\"></div> -->\r\n\r\n @if (!!$control() && $control()!.controlType !== 'FORM_ARRAY') {\r\n <div class=\"group-title optional\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-sliders\"></i>\r\n </div>\r\n <div class=\"group-name\">Optional</div>\r\n </div>\r\n <optional-props [isNested]=\"$isNested()\"></optional-props>\r\n\r\n <!-- <div class=\"setting-divider\"></div> -->\r\n\r\n <div class=\"group-title validators\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-check-square\"></i>\r\n </div>\r\n <div class=\"group-name\">Validators</div>\r\n </div>\r\n <validator-editor [isNested]=\"$isNested()\"></validator-editor>\r\n }\r\n\r\n @if (!!$control() && !($control()!.controlType === 'TEXTBOX' && ['string', 'text', 'email'].includes(($control()!.type ||\r\n '').toLowerCase()))) {\r\n\r\n <div class=\"group-title\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-check-square\"></i>\r\n </div>\r\n <div class=\"group-name\">{{ getFriendlyControlLabel($control()) }} Settings</div>\r\n </div>\r\n\r\n <props-host \r\n [type]=\"$resolvedType()\"\r\n [props]=\"$props()\"\r\n [isNested]=\"$isNested()\"\r\n ></props-host>\r\n\r\n\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n\r\n\r\n</div>\r\n\r\n<ng-template #aboutCalculatedField>\r\n\r\n <div class=\"calculated-field-rule\" style=\"padding: 1rem; border-radius: 8px; background: #000; width: 800px;\">\r\n <h4 style=\"margin-top: 0; color: #fff;\">Calculated Field Rule</h4>\r\n <p><strong>Calculated fields</strong> are invisible boolean fields evaluated based on form inputs and logic. They\r\n help drive dynamic workflow behavior, such as conditional routing or validation triggers.</p>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Key Properties</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li><strong>script:</strong> Expression to evaluate (e.g.,\r\n <code>leaveDays &gt; 3 &amp;&amp; status == 'Approved'</code>)</li>\r\n <li><strong>evaluationMode:</strong> <code>\"in-memory\"</code> or <code>\"sql-query\"</code></li>\r\n <li><strong>dependsOn[]:</strong> List of field names the script depends on</li>\r\n <li><strong>filterMode:</strong> <code>\"HardBlock\"</code> or <code>\"SoftWarn\"</code></li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Evaluation Modes</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li>\r\n <strong>in-memory:</strong> Uses <code>DynamicExpresso</code> to evaluate C#-like logic at runtime<br />\r\n <small>Example: <code>leaveType == \"ANNUAL\" &amp;&amp; leaveDays &lt; 5</code></small>\r\n </li>\r\n <li>\r\n <strong>sql-query:</strong> Runs backend SQL to evaluate conditions via\r\n <code>SELECT CASE WHEN ... THEN 1 ELSE 0 END</code><br />\r\n <small>Example:\r\n <code>SELECT CASE WHEN QUOTA &gt; 0 THEN 1 ELSE 0 END FROM LEAVE_QUOTA WHERE EMPLOYEE_ID = {{ '@' }}employeeId</code></small>\r\n </li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Use Cases</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li>Validate complex logic without showing the field</li>\r\n <li>Route to a different workflow branch based on hidden logic</li>\r\n <li>Trigger warning or block submission based on business rules</li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Example</h5>\r\n <pre style=\"color: #eee; padding: 0.5rem 1rem; border-radius: 4px; overflow-x: auto;\">\r\n {{ '{' }}\r\n \"script\": \"leaveDays > 3 && status == 'APPROVED'\",\r\n \"evaluationMode\": \"in-memory\",\r\n \"dependsOn\": [\"leaveDays\", \"status\"],\r\n \"filterMode\": \"HardBlock\"\r\n {{ '}' }}\r\n </pre>\r\n </div>\r\n\r\n\r\n</ng-template>","export enum EnumLeftPanelMode {\r\n FieldCollection = \"FieldCollection\",\r\n Json = \"Json\"\r\n}","import { Component, inject } from '@angular/core';\r\nimport { CoreControlNoFormArrayComponent } from '../../core-control-no-form-array/core-control-no-form-array.component';\r\nimport { IFormBaseControl } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { JsonPipe } from '@angular/common';\r\nimport { ICoreDropdownOption } from '../../../interfaces/ICoreDropdownOption';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { ICoreChecklistOption } from '../../core-checklist/core-checklist/core-checklist.component';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'core-form-array-control-palette',\r\n imports: [\r\n JsonPipe,\r\n CoreControlNoFormArrayComponent,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './core-form-array-control-palette.component.html',\r\n styleUrl: './core-form-array-control-palette.component.scss'\r\n})\r\nexport class CoreFormArrayControlPaletteComponent {\r\n\r\n coreFormDesignService = inject(CoreFormDesignService)\r\n\r\n controlOptions: IFormBaseControl[] = [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n //readonly: true,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n //readonly: true,\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n //readonly: true,\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n //readonly: true,\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n //readonly: true,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n }\r\n ]\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n })\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl) {\r\n this.coreFormDesignService.beginDragTemplate(control, true);\r\n }\r\n}\r\n","<ul [formGroup]=\"form\">\r\n <!-- <div class=\"palette-debug\">\r\n <div>controlOptions length: {{ controlOptions.length }}</div>\r\n <pre>{{ controlOptions | json }}</pre>\r\n </div> -->\r\n @for (control of controlOptions; track $index) {\r\n <li class=\"palette-item\" draggable=\"true\" (dragstart)=\"onDragStart($event, control)\">\r\n <core-control-no-form-array [control]=\"control\" [checkError$]=\"checkError$\" />\r\n </li>\r\n }\r\n</ul>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, Renderer2, signal, viewChild, WritableSignal } from '@angular/core';\r\nimport { slideFromTopFadeIn } from '../animations/slide-animations';\r\nimport { CoreAttachmentComponent } from '../core-attachment/core-attachment/core-attachment.component';\r\nimport { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreChecklistComponent, ICoreChecklistOption } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreMonthSelectorComponent } from '../core-month-selector/core-month-selector/core-month-selector.component';\r\nimport { CoreRadioGroupComponent } from '../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { HotKeysDirective } from '../../directives/hot-keys.directive';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { IFormBaseControl, IValidator } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlComponent } from '../core-control/core-control/core-control.component';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, of, Subscription, switchMap, tap } from 'rxjs';\r\nimport { IFormDesignCell, IFormDesignRow, IFormDesignSection } from './interfaces';\r\nimport { FormMetadataComponent } from './form-metadata/form-metadata.component';\r\nimport { ICoreDropdownOption } from '../../interfaces/ICoreDropdownOption';\r\nimport { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';\r\nimport { ICoreButtonVNS } from '../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { EnumCoreButtonVNSCode } from '../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreFormComponent } from '../core-form/core-form/core-form.component';\r\nimport { FieldSettingComponent } from './field-setting/field-setting.component';\r\nimport { EnumFormDesignMode } from './enums/EnumFormDesignMode';\r\nimport { EnumLeftPanelMode } from './enums/EnumLeftPanelMode';\r\nimport { CoreFormDesignService } from './core-form-design.service';\r\nimport { AttachmentFieldHelperService } from './field-setting/type-specific/attachment-props/attachment-field-helper.service';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { TableCellPipe } from '../pipes/table-cell.pipe';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { EnumCorePageEditMode } from '../core-page-edit/EnumCorePageEditMode';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { LiveFormComponent } from './live-form/live-form.component'\r\nimport { ApplicationHelpService } from '../../services/application-help.service';\r\nimport { CoreWorkflowService } from '../core-workflow-builder/core-workflow.service';\r\nimport { CoreToastLoadingComponent } from '../core-toast-loading/core-toast-loading.component';\r\nimport { HtmlTooltipDirective } from '../../directives/html-tooltip.directive';\r\nimport { DbService } from '../../services/db.service';\r\nimport { DomService } from '../services/dom.service';\r\nimport { AppConfigService } from '../../services/app-config.service';\r\nimport { JsonService } from '../../services/json.service';\r\nimport { CoreFormArrayLayoutEditorComponent } from './core-form-array-layout-editor/core-form-array-layout-editor.component';\r\nimport { JsonSafePipe } from './json-safe.pipe';\r\nimport { alertOptions } from '../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'core-form-group-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n AsyncPipe,\r\n JsonSafePipe,\r\n NgTemplateOutlet,\r\n CoreFormArrayLayoutEditorComponent,\r\n CoreToastLoadingComponent,\r\n CorePageHeaderComponent,\r\n FormMetadataComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe,\r\n TableCellPipe,\r\n TooltipDirective,\r\n HotKeysDirective,\r\n CoreFormComponent,\r\n CoreControlComponent,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCheckboxComponent,\r\n CoreAttachmentComponent,\r\n CoreDatePickerComponent,\r\n CoreRadioGroupComponent,\r\n CoreMonthSelectorComponent,\r\n TooltipDirective,\r\n CoreCurrencyInputComponent,\r\n FieldSettingComponent,\r\n LiveFormComponent,\r\n HtmlTooltipDirective,\r\n ],\r\n templateUrl: './core-form-group-editor.component.html',\r\n styleUrls: [\r\n './core-form-group-editor.component.scss',\r\n '../core-form/core-form/core-form.component.scss',\r\n '../core-button-group-vns/core-button-vns/core-button-vns.component.scss',\r\n ],\r\n animations: [slideFromTopFadeIn]\r\n})\r\nexport class CoreFormGroupEditorComponent extends BaseComponent {\r\n\r\n $isNested = input<boolean>(false);\r\n\r\n $idAsInput = input<boolean>()\r\n $id = input<string | undefined>();\r\n\r\n $settingPanel = viewChild<ElementRef>('settingPanel');\r\n\r\n $jsonMode = signal<'selectedField' | 'full'>('selectedField');\r\n\r\n injectedFields$ = new BehaviorSubject<IFormBaseControl[]>([]);\r\n\r\n $sections = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedSimplifiedSections();\r\n } else {\r\n return this.coreFormDesignService.$sections();\r\n }\r\n })\r\n\r\n\r\n enumType = EnumFormDesignMode;\r\n enumLeftPanelMode = EnumLeftPanelMode;\r\n $leftPanelMode = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.enumLeftPanelMode.Json\r\n } else {\r\n return this.enumLeftPanelMode.FieldCollection\r\n }\r\n })\r\n\r\n ds = inject(DomService);\r\n js = inject(JsonService);\r\n\r\n $zIndex = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.ds.getMaxZIndex() + 1;\r\n } else {\r\n return 0;\r\n }\r\n })\r\n\r\n previewMode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n\r\n $selectedCell = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedSelectedCell();\r\n } else {\r\n return this.coreFormDesignService.$selectedCell();\r\n }\r\n })\r\n\r\n $control = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedControl();\r\n } else {\r\n return this.coreFormDesignService.$control();\r\n }\r\n })\r\n\r\n $isInWorkflowDesign = this.coreFormDesignService.$isInWorkflowDesign;\r\n\r\n $placeholderSections = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedPlaceholderSections();\r\n } else {\r\n return this.coreFormDesignService.$placeholderSections();\r\n }\r\n })\r\n\r\n $mode = this.coreFormDesignService.$mode;\r\n\r\n $afInstance = this.coreFormDesignService.$afInstance;\r\n\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n wfs = inject(CoreWorkflowService);\r\n dbs = inject(DbService);\r\n appConfigService = inject(AppConfigService);\r\n\r\n $hasCalculatedSection = computed<boolean>(() => {\r\n return this.$placeholderSections().some(s => !!s.forCalculatedFields)\r\n });\r\n\r\n formDesign!: FormGroup;\r\n formDesignValueChangesSubscription!: Subscription;\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n isDragOverMap: Record<string, boolean> = {};\r\n\r\n idStream$ = new BehaviorSubject<any>(undefined);\r\n getByIdStream$ = this.idStream$.pipe(\r\n filter(id => !!id && id !== '0'),\r\n distinctUntilChanged(),\r\n tap(() => {\r\n this.$loading.set(true);\r\n this.coreFormDesignService.editMode$.next(EnumCorePageEditMode.UPDATE);\r\n this.coreFormDesignService.$submitText.set(EnumTranslateKey.UI_EDIT_FORM_BUTTON_SAVE);\r\n }),\r\n switchMap(id => {\r\n return this.coreFormDesignService.getById(id)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n )\r\n })\r\n );\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n if (this.$isNested()) {\r\n this.formDesign = this.coreFormDesignService.nestedFormDesign;\r\n } else {\r\n this.formDesign = this.coreFormDesignService.formDesign;\r\n }\r\n if (!!this.formDesign) {\r\n if (!!this.formDesignValueChangesSubscription) {\r\n this.formDesignValueChangesSubscription.unsubscribe();\r\n }\r\n this.formDesignValueChangesSubscription = this.formDesign.valueChanges.subscribe(() => {\r\n this.checkError$.next(true);\r\n setTimeout(() => this.checkError$.next(false), 2000)\r\n })\r\n }\r\n })\r\n\r\n effect(() => {\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.resetNestedFormDesignState();\r\n } else {\r\n this.coreFormDesignService.resetFormDesignState();\r\n }\r\n })\r\n\r\n // effect(() => {\r\n // const _ = this.coreFormDesignService.$placeholderSections();\r\n // this.syncFormDesignWithSections();\r\n // });\r\n\r\n effect(() => {\r\n this.idStream$.next(this.$id())\r\n })\r\n\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n break;\r\n case 'F6':\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Preview);\r\n break;\r\n case 'Escape':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n if (this.appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n this.injectedFields$.next([\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n },\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ])\r\n } else {\r\n this.injectedFields$.next([\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ]);\r\n }\r\n }\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n calculated: new FormControl(),\r\n formArray: new FormArray([\r\n new FormControl('')\r\n ])\r\n })\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n controlCategories: { name: string, controls: IFormBaseControl[] }[] = [\r\n {\r\n name: 'Calculated fields',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CALCULATED,\r\n type: 'calculated',\r\n field: 'calculated',\r\n label: '',\r\n value: '',\r\n placeholder: 'Calculated',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Text',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Numerical',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Single selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Multiple Selection',\r\n controls: [\r\n // {\r\n // flexSize: 12,\r\n // controlType: EnumFormBaseContolType.GRIDBUFFER,\r\n // type: 'children',\r\n // field: 'gridbuffer',\r\n // label: '',\r\n // value: [],\r\n // placeholder: 'Grid buffer',\r\n // gridBufferFormSections: [\r\n // {\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 6,\r\n // field: 'field1',\r\n // type: 'date',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.DATEPICKER,\r\n // label: 'field 1'\r\n // },\r\n // {\r\n // flexSize: 6,\r\n // field: 'field2',\r\n // type: 'number',\r\n // value: null,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // label: 'field 2'\r\n // },\r\n // ]\r\n // ]\r\n // }\r\n // ],\r\n // gridBufferTableColumns: [\r\n // {\r\n // caption: 'id',\r\n // field: 'id',\r\n // hidden: true,\r\n // type: 'string',\r\n // align: 'left',\r\n // width: 0,\r\n // },\r\n // {\r\n // field: 'field1',\r\n // width: 200,\r\n // caption: 'field 1',\r\n // type: 'date',\r\n // pipe: EnumCoreTablePipeType.DATE,\r\n // align: 'center'\r\n // },\r\n // {\r\n // field: 'field2',\r\n // width: 100,\r\n // caption: 'field 2',\r\n // type: 'number',\r\n // align: 'right'\r\n // },\r\n // ],\r\n // headless: true,\r\n // tableHeight: 100,\r\n // liteMode: true,\r\n // },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Date',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Other',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Form Array',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.FORM_ARRAY,\r\n type: 'children',\r\n field: 'formArray',\r\n label: '',\r\n value: '',\r\n placeholder: 'FormArray',\r\n headless: true,\r\n formArraySections: [\r\n {\r\n rows: [\r\n [\r\n {\r\n field: 'placeholder',\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.PLACEHOLDER,\r\n type: 'text',\r\n value: '',\r\n label: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n\r\n switchJson(): void {\r\n if (this.$jsonMode() === 'full') {\r\n this.$jsonMode.set('selectedField');\r\n } else {\r\n this.$jsonMode.set('full');\r\n }\r\n\r\n }\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl) {\r\n this.coreFormDesignService.beginDragTemplate(control, this.$isNested());\r\n }\r\n\r\n onDragOver(event: DragEvent, section: IFormDesignSection, control: Partial<IFormBaseControl>) {\r\n event.preventDefault(); // necessary to allow drop\r\n if (\r\n (!!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type === 'calculated') ||\r\n (!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type !== 'calculated')\r\n ) {\r\n event.dataTransfer!.dropEffect = 'copy';\r\n } else {\r\n event.dataTransfer!.dropEffect = 'none';\r\n }\r\n\r\n }\r\n\r\n onDragEnter(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = true;\r\n }\r\n\r\n onDragLeave(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = false;\r\n }\r\n\r\n onDropIntoCell(event: DragEvent, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n event.preventDefault();\r\n\r\n // In case of parent context\r\n if (!this.$isNested()) {\r\n\r\n const template = this.coreFormDesignService.$controlTemplate();\r\n if (!template) return;\r\n\r\n if (template.controlType === EnumFormBaseContolType.FORM_ARRAY && !!template.formArraySections) {\r\n this.alertService.info(\"Bạn vừa thả một con FORM_ARRAY vào đấy\", alertOptions)\r\n }\r\n\r\n const fas = structuredClone(template.formArraySections);\r\n console.log(\"🔴🟠🟡🟢🔵🟣 Bạn vừa thả một con FORM_ARRAY vào đấy fas\", fas)\r\n\r\n const section = this.coreFormDesignService.$placeholderSections()[sectionIndex];\r\n if (!section.forCalculatedFields && template.type === 'calculated') return;\r\n if (!!section.forCalculatedFields && template.type !== 'calculated') return;\r\n\r\n const normalized = this.coreFormDesignService.normalize({\r\n ...template,\r\n field: this.generateFieldNameFor(template),\r\n label: this.generateLabelNameFor(template),\r\n formArraySections: fas,\r\n value: null\r\n });\r\n\r\n console.log(\"🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴 normalized:\", normalized)\r\n\r\n const row = section.rows[rowIndex];\r\n\r\n if (row) {\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n }\r\n\r\n const $placeholderSections = this.coreFormDesignService.$placeholderSections;\r\n const $selectedCell = this.coreFormDesignService.$selectedCell\r\n if (row) {\r\n $selectedCell.set({ ...row.cells[colIndex] });\r\n }\r\n\r\n $placeholderSections.update(sections => {\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows[rowIndex];\r\n if (!row || row.cells.length <= colIndex) return sections;\r\n\r\n normalized.flexSize = row.cells[colIndex].flexSize;\r\n const previousField = row.cells[colIndex]?.control?.field ?? null;\r\n this.coreFormDesignService.replaceControl(previousField, normalized, false);\r\n // 🔹 INSERT FIRST\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n row.cells[colIndex].childrenSections = this.coreFormDesignService.$nestedPlaceholderSections();\r\n\r\n // 🔹 THEN CALL setup\r\n if (AttachmentFieldHelperService.isAttachment(normalized)) {\r\n const assignToField = AttachmentFieldHelperService.buildHiddenAssignToField(normalized.field);\r\n normalized.field = `${normalized.field}Buffer`\r\n normalized.assignTo = assignToField.field;\r\n AttachmentFieldHelperService.injectAssignToFieldIntoRow(row, assignToField);\r\n }\r\n\r\n\r\n setTimeout(() => {\r\n this.coreFormDesignService.setControlPropDirectly(\r\n 'validators',\r\n normalized.validators ?? [],\r\n false,\r\n normalized\r\n );\r\n });\r\n\r\n return sections;\r\n });\r\n\r\n this.triggerUpdateSections();\r\n this.isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex] = false;\r\n this.coreFormDesignService.endDrag(this.$isNested());\r\n\r\n this.openSettingsForCell(this.coreFormDesignService.$selectedCell()!, sectionIndex, rowIndex, colIndex)\r\n\r\n // In case of nested context\r\n } else {\r\n const template = this.coreFormDesignService.$nestedControlTemplate();\r\n if (!template) return;\r\n\r\n const section = this.coreFormDesignService.$nestedPlaceholderSections()[sectionIndex];\r\n if (!section.forCalculatedFields && template.type === 'calculated') return;\r\n if (!!section.forCalculatedFields && template.type !== 'calculated') return;\r\n\r\n const normalized = this.coreFormDesignService.normalize({\r\n ...template,\r\n field: this.generateFieldNameFor(template),\r\n label: this.generateLabelNameFor(template),\r\n value: null\r\n });\r\n\r\n const row = section.rows[rowIndex];\r\n\r\n console.group('$afInstance 💥 DROP DEBUG');\r\n console.log('$afInstance Template from Service:', template);\r\n console.log('$afInstance Normalized Control:', normalized);\r\n console.log('$afInstance Target Cell BEFORE insert:', row?.cells[colIndex]);\r\n if (row) {\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n } else {\r\n console.log('$afInstance No row detected');\r\n }\r\n console.log('$afInstance ✅ Target Cell AFTER insert:', row?.cells[colIndex]);\r\n console.groupEnd();\r\n\r\n const $nestedPlaceholderSections = this.coreFormDesignService.$nestedPlaceholderSections;\r\n const $nestedSelectedCell = this.coreFormDesignService.$nestedSelectedCell;\r\n\r\n if (!!row) {\r\n $nestedSelectedCell.set({ ...row.cells[colIndex] });\r\n }\r\n\r\n $nestedPlaceholderSections.update(sections => {\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows[rowIndex];\r\n if (!row || row.cells.length <= colIndex) return sections;\r\n\r\n normalized.flexSize = row.cells[colIndex].flexSize;\r\n const previousField = row.cells[colIndex]?.control?.field ?? null;\r\n console.log('$afInstance Before replaceControl:', row.cells[colIndex]);\r\n this.coreFormDesignService.replaceControl(previousField, normalized, true);\r\n console.log('$afInstance After replaceControl:', row.cells[colIndex]);\r\n // 🔹 INSERT FIRST\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n\r\n // 🔹 THEN CALL setup\r\n if (AttachmentFieldHelperService.isAttachment(normalized)) {\r\n const assignToField = AttachmentFieldHelperService.buildHiddenAssignToField(normalized.field);\r\n normalized.field = `${normalized.field}Buffer`\r\n normalized.assignTo = assignToField.field;\r\n AttachmentFieldHelperService.injectAssignToFieldIntoRow(row, assignToField);\r\n }\r\n\r\n\r\n setTimeout(() => {\r\n this.coreFormDesignService.setControlPropDirectly(\r\n 'validators',\r\n normalized.validators ?? [],\r\n true,\r\n normalized\r\n );\r\n });\r\n\r\n return sections;\r\n });\r\n\r\n const parentId = this.$selectedCell()?.runtimeId;\r\n if (!!parentId) {\r\n this.coreFormDesignService.updatePlaceholderSectionsPerNestedChanges()\r\n } else {\r\n this.alertService.error(\"No $selectedCell value found\", alertOptions);\r\n }\r\n\r\n this.triggerUpdateSections();\r\n this.isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex] = false;\r\n this.coreFormDesignService.endDrag(this.$isNested());\r\n\r\n }\r\n\r\n }\r\n\r\n generateFieldNameFor = this.coreFormDesignService.generateFieldNameFor.bind(this.coreFormDesignService);\r\n generateLabelNameFor = this.coreFormDesignService.generateLabelNameFor.bind(this.coreFormDesignService);\r\n\r\n getAllControlsFromSections = this.coreFormDesignService.getAllControlsFromSections.bind(this.coreFormDesignService);\r\n\r\n addCalculatedSection(): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => [\r\n {\r\n caption: `Calculated Section`,\r\n forCalculatedFields: true,\r\n hidden: true,\r\n rows: [{ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] }]\r\n },\r\n ...sections,\r\n ]);\r\n }\r\n\r\n addSection(): void {\r\n const $signalPlaceholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n\r\n $signalPlaceholderSections.update(sections => [\r\n ...sections,\r\n {\r\n caption: `Section ${sections.length + 1}`,\r\n rows: [{ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] }]\r\n }\r\n ]);\r\n\r\n }\r\n\r\n deleteSection(sectionIndex: number): void {\r\n const $signalPlaceholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n const sections = $signalPlaceholderSections();\r\n const section = sections[sectionIndex];\r\n\r\n const hasControls = section?.rows?.some(row =>\r\n row?.cells?.some(cell => !!cell?.control)\r\n );\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This section contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return;\r\n }\r\n\r\n $signalPlaceholderSections.update(prev =>\r\n prev.filter((_, idx) => idx !== sectionIndex)\r\n );\r\n }\r\n\r\n deleteRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows?.[rowIndex];\r\n\r\n if (!row) return; // safety check\r\n\r\n const hasControls = row.cells?.some(cell => !!cell?.control);\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This row contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return; // user canceled\r\n }\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n return sections.map((section, sIdx) => {\r\n if (sIdx !== sectionIndex) return section;\r\n\r\n return {\r\n ...section,\r\n rows: (section.rows ?? []).filter((_, rIdx) => rIdx !== rowIndex)\r\n };\r\n });\r\n });\r\n }\r\n\r\n addRow(sectionIndex: number): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const section = sections[sectionIndex];\r\n if (section) {\r\n section.rows.push({ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] });\r\n }\r\n return sections;\r\n });\r\n }\r\n\r\n addColumn(row: IFormDesignRow | undefined, sectionIndex: number, rowIndex: number): void {\r\n\r\n const normalizeControlFlexSize = () => {\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.update(sections => {\r\n if (!!sections) {\r\n const _section = sections[sectionIndex];\r\n const _row = _section.rows[rowIndex];\r\n if (!!_row) {\r\n _row.cells.forEach(cell => {\r\n if (!!cell.control) {\r\n cell.control.flexSize = cell.flexSize;\r\n if (this.coreFormDesignService.$nestedSelectedCell()?.control?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedSelectedCell.update(c => {\r\n if (!!c && !!c.control) c.control.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n if (this.coreFormDesignService.$nestedControl()?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedControl.update(c => {\r\n if (!!c) c.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n }\r\n return sections\r\n })\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n if (!!sections) {\r\n const _section = sections[sectionIndex];\r\n const _row = _section.rows[rowIndex];\r\n if (!!_row) {\r\n _row.cells.forEach(cell => {\r\n if (!!cell.control) {\r\n cell.control.flexSize = cell.flexSize;\r\n if (this.coreFormDesignService.$selectedCell()?.control?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedSelectedCell.update(c => {\r\n if (!!c && !!c.control) c.control.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n if (this.coreFormDesignService.$control()?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedControl.update(c => {\r\n if (!!c) c.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n }\r\n return sections\r\n })\r\n }\r\n }\r\n\r\n if (!row || row.cells.length >= 4) return;\r\n\r\n const usedFlex = row.cells.reduce((sum, c) => sum + (c.flexSize ?? 0), 0);\r\n\r\n // ✅ Case 1: Normal case – still space available\r\n if (usedFlex < 12) {\r\n const remaining = 12 - usedFlex;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: Math.min(3, remaining) });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n // 💥 Case 2: Full row — try to rebalance\r\n if (usedFlex === 12) {\r\n const count = row.cells.length;\r\n\r\n if (count === 1) {\r\n // 12 → 6 + 6\r\n row.cells[0].flexSize = 6;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 6 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n if (count === 2) {\r\n // 6 + 6 → 4 + 4 + 4\r\n row.cells.forEach(c => (c.flexSize = 4));\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 4 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n if (count === 3) {\r\n // 4 + 4 + 4 → 3 + 3 + 3 + 3\r\n row.cells.forEach(c => (c.flexSize = 3));\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 3 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n // ❌ Already 4 cells, each 3 — can’t split further\r\n return;\r\n }\r\n\r\n // 🔧 Optional fallback logic for unknown edge cases\r\n const maxIndex = row.cells.reduce((maxI, c, i, arr) =>\r\n (c.flexSize ?? 0) > (arr[maxI]?.flexSize ?? 0) ? i : maxI, 0\r\n );\r\n\r\n const maxCell = row.cells[maxIndex];\r\n if ((maxCell?.flexSize ?? 0) <= 3) return; // nothing to shrink\r\n\r\n maxCell.flexSize -= 3;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 3 });\r\n }\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_SWITCH_VIEW) {\r\n if (this.coreFormDesignService.$mode() === EnumFormDesignMode.Default) {\r\n const sections = this.coreFormDesignService.toCoreFormSections(this.coreFormDesignService.$placeholderSections());\r\n this.coreFormDesignService.$liveFormSections.set(sections);\r\n }\r\n setTimeout(() => this.coreFormDesignService.$mode.set(this.coreFormDesignService.$mode() === EnumFormDesignMode.Preview ? EnumFormDesignMode.Default : EnumFormDesignMode.Preview))\r\n } else if (e.code === EnumCoreButtonVNSCode.HEADER_SAVE) {\r\n\r\n }\r\n }\r\n\r\n closePreview() {\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default)\r\n }\r\n\r\n onPreviewSubmit(e: any): void {\r\n alert(JSON.stringify(e, null, 2))\r\n }\r\n\r\n onCellClicked(sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n\r\n if (!!row) {\r\n // Toggle selection\r\n if (!!row.cells && row.cells.length > colIndex) {\r\n row.cells[colIndex].selected = !row.cells[colIndex].selected;\r\n }\r\n\r\n\r\n // Only allow max 2 selections\r\n const selected = row.cells.filter(c => c?.selected);\r\n if (selected.length > 2) {\r\n row.cells.forEach(c => c && (c.selected = false));\r\n row[colIndex].selected = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n canMergeCells(sectionIndex: number, rowIndex: number): boolean {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n const selected = row?.cells.map((c, i) => ({ c, i })).filter(x => x.c?.selected);\r\n\r\n if (selected?.length !== 2) return false;\r\n\r\n const [a, b] = selected;\r\n\r\n if (a.c.control || b.c.control) return false;\r\n\r\n return Math.abs(a.i - b.i) === 1; // Must be neighbors\r\n }\r\n\r\n mergeCells(sectionIndex: number, rowIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n if (!row) return;\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const selected = row.cells\r\n .map((c, i) => ({ c, i }))\r\n .filter(x => x.c?.selected);\r\n\r\n if (selected.length !== 2) return sections;\r\n\r\n const [a, b] = selected.sort((a, b) => a.i - b.i);\r\n\r\n const mergedFlex =\r\n (typeof a.c.flexSize === 'number' ? a.c.flexSize : 3) +\r\n (typeof b.c.flexSize === 'number' ? b.c.flexSize : 3);\r\n\r\n const mergedCell: IFormDesignCell = {\r\n //control: { ...a.c.control, flexSize: mergedFlex }, // keep control data\r\n runtimeId: crypto.randomUUID(),\r\n flexSize: mergedFlex,\r\n selected: false\r\n };\r\n\r\n row.cells.splice(a.i, 2, mergedCell); // replace both cells with one\r\n\r\n return sections;\r\n });\r\n }\r\n\r\n getControl = this.coreFormDesignService.getControl.bind(this.coreFormDesignService);\r\n\r\n openSettingsForCell(cell: IFormDesignCell, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedSectionIndex.set(sectionIndex);\r\n this.coreFormDesignService.$nestedRowIndex.set(rowIndex);\r\n this.coreFormDesignService.$nestedColIndex.set(colIndex);\r\n\r\n this.coreFormDesignService.$nestedSelectedCell.set({ ...cell });\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n\r\n } else {\r\n // this.coreFormDesignService.$sectionIndex.set(sectionIndex);\r\n // this.coreFormDesignService.$rowIndex.set(rowIndex);\r\n // this.coreFormDesignService.$colIndex.set(colIndex);\r\n\r\n // this.coreFormDesignService.$selectedCell.set({ ...cell });\r\n // this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n console.log('Non-nested mode triggered');\r\n this.coreFormDesignService.$sectionIndex.set(sectionIndex);\r\n console.log('Set sectionIndex');\r\n this.coreFormDesignService.$rowIndex.set(rowIndex);\r\n console.log('Set rowIndex');\r\n this.coreFormDesignService.$colIndex.set(colIndex);\r\n console.log('Set colIndex');\r\n this.coreFormDesignService.$selectedCell.set({ ...cell });\r\n console.log('Set selectedCell');\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n console.log('Set fieldSettingPanelOpen to true');\r\n }\r\n\r\n }\r\n\r\n deleteField(row: IFormDesignRow | undefined, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n\r\n if (!row) return;\r\n const dCell: IFormDesignCell = row.cells[colIndex];\r\n const currentControl = dCell.control;\r\n if (!currentControl) return;\r\n\r\n const $placeholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n const $selectedCell = this.$isNested() ? this.coreFormDesignService.$nestedSelectedCell : this.coreFormDesignService.$selectedCell\r\n\r\n if (!$placeholderSections()[sectionIndex].rows[rowIndex]) return;\r\n\r\n $placeholderSections()[sectionIndex].rows[rowIndex]!.cells[colIndex].control = undefined;\r\n\r\n $selectedCell.set(null);\r\n $placeholderSections.set([...$placeholderSections()]);\r\n\r\n this.coreFormDesignService.updatePlaceholderSectionsPerNestedChanges();\r\n }\r\n\r\n onCaptionEditEnd(index: number, event: any): void {\r\n const newCaption = (event.target as HTMLElement).innerText.trim();\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.update(sections => {\r\n sections[index].caption = newCaption;\r\n return sections;\r\n });\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n sections[index].caption = newCaption;\r\n return sections;\r\n });\r\n }\r\n }\r\n\r\n onFieldCaptionEditEnd(cell: IFormDesignCell, event: Event): void {\r\n const element = event.target as HTMLElement;\r\n const newLabel = element.innerText.trim();\r\n\r\n // Fallback if empty\r\n cell.control!.label = newLabel || 'Unnamed Field';\r\n\r\n this.triggerUpdateSections();\r\n }\r\n\r\n insertRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections() : this.coreFormDesignService.$placeholderSections();\r\n const section = sections[sectionIndex];\r\n if (!section) return;\r\n\r\n const newRow: IFormDesignRow = {\r\n cells: [\r\n { runtimeId: crypto.randomUUID(), flexSize: 12 },\r\n ]\r\n };\r\n\r\n section.rows.splice(rowIndex + 1, 0, newRow);\r\n\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.set([...sections]);\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.set([...sections]);\r\n }\r\n\r\n }\r\n\r\n triggerUpdateSections(): void {\r\n if (this.$isNested()) {\r\n const newValue = this.coreFormDesignService.$nestedPlaceholderSections();\r\n console.log(\"OMG $nestedPlaceholderSections being set to a new value\")\r\n this.coreFormDesignService.$nestedPlaceholderSections.set([...newValue]);\r\n const newParenValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newParenValue]);\r\n } else {\r\n const newValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newValue]);\r\n }\r\n }\r\n\r\n isRequired(control: IFormBaseControl | undefined | null): boolean {\r\n if (!control || !control.validators) return false;\r\n\r\n return control.validators.some((v: IValidator) => v.name === 'required' || v.name === 'requiredTrue');\r\n }\r\n\r\n filteredCells = this.coreFormDesignService.filteredCells;\r\n\r\n onFormDesignCreated(e: any) {\r\n console.log(\"onFormDesignCreated\", e)\r\n }\r\n\r\n onLiveFormCreated(e: any) {\r\n console.log(\"onLiveFormCreated\", e)\r\n }\r\n\r\n showMetadata(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(true);\r\n }\r\n\r\n}","<div class=\"core-form-group-editor-container\">\r\n\r\n <div class=\"form-design-right\">\r\n\r\n @if ($mode() === enumType.Default) {\r\n <div class=\"form-wrapper\">\r\n\r\n @if (!$isNested() && !!$isInWorkflowDesign()) {\r\n <form-metadata></form-metadata>\r\n }\r\n\r\n <form [formGroup]=\"formDesign\" autocomplete=\"off\">\r\n <div class=\"form-cells\"> \r\n\r\n <div class=\"form-tool-bar\">\r\n @if (!$isNested() && !$hasCalculatedSection()) {\r\n <button class=\"core-button-vns-container\" (click)=\"addCalculatedSection()\">+ Calculated fields</button>\r\n }\r\n <button class=\"core-button-vns-container\" (click)=\"addSection()\">+ Add Section</button>\r\n </div>\r\n \r\n @for (section of $placeholderSections(); track $index; let sectionIndex = $index) {\r\n <div class=\"form-section-placeholder\">\r\n\r\n <div class=\"section-header\">\r\n\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\" [class.calculated]=\"section.forCalculatedFields\"></div>\r\n </div>\r\n\r\n <label [attr.contenteditable]=\"!section.forCalculatedFields\"\r\n [htmlTooltip]=\"!!section.forCalculatedFields ? calculatedFieldsTooltip : null\"\r\n (blur)=\"onCaptionEditEnd(sectionIndex, $event)\"\r\n (keydown.enter)=\"onCaptionEditEnd(sectionIndex, $event); $event.preventDefault()\"\r\n >{{ section.caption }}</label>\r\n\r\n <div class=\"section-tool pointer\" (click)=\"deleteSection(sectionIndex)\" [appTooltip]=\"'Delete section'\" [showAnyway]=\"true\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n @for (row of section.rows; track $index; let rowIndex = $index) {\r\n\r\n <div class=\"form-row-wrapper\">\r\n <div class=\"form-row\">\r\n @for (cell of filteredCells(row); track $index; let colIndex = $index) {\r\n <div class=\"form-cell drop-target\" \r\n [ngStyle]=\"{ flex: (cell.flexSize ?? 0) + ' 1 0%' }\"\r\n [attr.data-flex]=\"cell.flexSize ?? 0\"\r\n (drop)=\"onDropIntoCell($event, sectionIndex, rowIndex, colIndex)\"\r\n (dragover)=\"onDragOver($event, section, cell.control!)\"\r\n (dragenter)=\"onDragEnter(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n (dragleave)=\"onDragLeave(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n [class.selected]=\"cell?.runtimeId === $selectedCell()?.runtimeId\"\r\n [class.dragging-over]=\"isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]\"\r\n [class.has-control]=\"!!cell && !!cell.control && !!getControl(cell)\"\r\n (click)=\"onCellClicked(sectionIndex, rowIndex, colIndex)\"\r\n >\r\n\r\n\r\n @if (!isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]) {\r\n\r\n @if (!!cell && !!cell.control && !!getControl(cell)) {\r\n\r\n @if (!$isNested()) {\r\n <label contenteditable=\"true\"\r\n (blur)=\"onFieldCaptionEditEnd(cell, $event)\"\r\n (keydown.enter)=\"onFieldCaptionEditEnd(cell, $event); $event.preventDefault()\"\r\n [class.d-none]=\"!!getControl(cell)?.hidden\"\r\n [class.required]=\"!!cell && !!cell.control && !!getControl(cell) && isRequired(getControl(cell))\"\r\n >{{ cell.control.label || 'label' }}</label>\r\n }\r\n\r\n @if (cell.control.controlType==='CALCULATED') {\r\n <div class=\"control-wrapper\" (click)=\"openSettingsForCell(cell, sectionIndex, rowIndex, colIndex)\">\r\n <core-control \r\n [control]=\"getControl(cell)!\" \r\n [form]=\"formDesign\"\r\n [checkError$]=\"checkError$\" />\r\n </div>\r\n } @else {\r\n <core-control \r\n [control]=\"getControl(cell)!\" \r\n [form]=\"formDesign\"\r\n [checkError$]=\"checkError$\" />\r\n }\r\n \r\n <div class=\"field-toolbar\">\r\n <ul>\r\n <!-- @if (!$isNested()) { -->\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"openSettingsForCell(cell, sectionIndex, rowIndex, colIndex)\" [appTooltip]=\"'Show settings'\" [showAnyway]=\"true\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n </li>\r\n <!-- } -->\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"deleteField(row, sectionIndex, rowIndex, colIndex)\" [appTooltip]=\"'Remove field from cell'\" [showAnyway]=\"true\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n \r\n } @else {\r\n <div class=\"calculated-placeholder\" [class.calculated]=\"!!section.forCalculatedFields\">\r\n {{ !!section.forCalculatedFields ? 'Drop calculated field here' : 'Drop here'}}\r\n </div>\r\n }\r\n\r\n @if (cell?.selected && canMergeCells(sectionIndex, rowIndex)) {\r\n <div class=\"merge-toolbar\">\r\n <button (click)=\"mergeCells(sectionIndex, rowIndex)\">🔗 Merge</button>\r\n </div>\r\n }\r\n \r\n }\r\n\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row-tool-bar\">\r\n <div class=\"icon-wrapper\" (click)=\"deleteRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Delete row'\" [showAnyway]=\"true\"><i class=\"feather-x\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addRow(sectionIndex)\" [appTooltip]=\"'Add row'\" [showAnyway]=\"true\"><i class=\"feather-arrow-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"insertRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Insert row'\" [showAnyway]=\"true\"><i class=\"feather-corner-right-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addColumn(row, sectionIndex, rowIndex)\" [appTooltip]=\"'Add column'\" [showAnyway]=\"true\"><i class=\"feather-arrow-right\"></i></div>\r\n </div>\r\n </div>\r\n\r\n }\r\n </div>\r\n }\r\n \r\n \r\n </div>\r\n </form>\r\n </div>\r\n } @else if (!!$sections()) {\r\n\r\n @if(!!(injectedFields$ | async) && !!(injectedFields$ | async)!.length) {\r\n\r\n @if (!!$afInstance().normalMode) {\r\n <live-form [$designMode]=\"true\" [$forKickOff]=\"true\" />\r\n } @else {\r\n <live-form [$designMode]=\"true\" [$forKickOff]=\"true\" ($onClose)=\"closePreview()\" />\r\n }\r\n\r\n } @else {\r\n <h2>COULD NOT UPDATE injectedFields$</h2>\r\n }\r\n\r\n } @else {\r\n <h2>$sections() empty / null / undefined</h2>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #calculatedFieldsTooltip>\r\n <div style=\"max-width: 280px;\">\r\n <strong>Calculated Fields</strong><br />\r\n <p></p>\r\n These fields are hidden from the form and cannot be edited directly.<br /><br />\r\n - They are computed automatically during workflow execution.<br />\r\n - Each field depends on one or more standard input fields.<br />\r\n - The calculation is evaluated using either an SQL query engine (like <strong>Dapper</strong>) or an in-memory expression engine (like <strong>Dynamic Expresso</strong>).<br /><br />\r\n These results can be used to influence workflow logic, rule trees, or approval paths.\r\n </div>\r\n</ng-template>\r\n\r\n\r\n ","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { HtmlTooltipDirective } from '../../../directives/html-tooltip.directive';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\n\r\nexport const HOLD_KEYS = [\r\n 'controlTemplate',\r\n 'nestedControlTemplate',\r\n 'selectedCell',\r\n 'nestedSelectedCell',\r\n 'control',\r\n 'nestedControl',\r\n 'placeholderSections',\r\n 'nestedPlaceholderSections',\r\n] as const;\r\n\r\nexport type HoldKey = typeof HOLD_KEYS[number];\r\n\r\n@Component({\r\n selector: 'core-form-design-monitor',\r\n imports: [ \r\n JsonPipe,\r\n TooltipDirective,\r\n JsonSafePipe,\r\n AsyncPipe,\r\n HtmlTooltipDirective,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './core-form-design-monitor.component.html',\r\n styleUrls: ['./core-form-design-monitor.component.scss'],\r\n})\r\nexport class CoreFormDesignMonitorComponent implements AfterViewInit {\r\n $mode = input<'main' | 'nested'>();\r\n\r\n domService = inject(DomService);\r\n fds = inject(CoreFormDesignService);\r\n\r\n // Signals\r\n $controlTemplate = this.fds.$controlTemplate;\r\n $nestedControlTemplate = this.fds.$nestedControlTemplate;\r\n $selectedCell = this.fds.$selectedCell;\r\n $nestedSelectedCell = this.fds.$nestedSelectedCell;\r\n $control = this.fds.$control;\r\n $nestedControl = this.fds.$nestedControl;\r\n $placeholderSections = this.fds.$placeholderSections;\r\n $nestedPlaceholderSections = this.fds.$nestedPlaceholderSections;\r\n\r\n normalizeCalledCount$ = this.fds.normalizeCalledCount$;\r\n\r\n // Holds\r\n holdControlTemplate$ = new BehaviorSubject<boolean>(false);\r\n holdNestedControlTemplate$ = new BehaviorSubject<boolean>(false);\r\n holdSelectedCell$ = new BehaviorSubject<boolean>(false);\r\n holdNestedSelectedCell$ = new BehaviorSubject<boolean>(false);\r\n holdControl$ = new BehaviorSubject<boolean>(false);\r\n holdNestedControl$ = new BehaviorSubject<boolean>(false);\r\n holdPlaceholderSections$ = new BehaviorSubject<boolean>(false);\r\n holdNestedPlaceholderSections$ = new BehaviorSubject<boolean>(false);\r\n\r\n private holdMap: Record<HoldKey, BehaviorSubject<boolean>> = {\r\n controlTemplate: this.holdControlTemplate$,\r\n nestedControlTemplate: this.holdNestedControlTemplate$,\r\n selectedCell: this.holdSelectedCell$,\r\n nestedSelectedCell: this.holdNestedSelectedCell$,\r\n control: this.holdControl$,\r\n nestedControl: this.holdNestedControl$,\r\n placeholderSections: this.holdPlaceholderSections$,\r\n nestedPlaceholderSections: this.holdNestedPlaceholderSections$,\r\n };\r\n\r\n toggleHold(code: HoldKey): void {\r\n const subject = this.holdMap[code];\r\n if (!subject) {\r\n console.warn(`[toggleHold] Unknown key: ${code}`);\r\n return;\r\n }\r\n subject.next(!subject.value);\r\n }\r\n\r\n viewFormInConsole(): void {\r\n console.log('🔴',\r\n this.$mode() === 'main'\r\n ? this.fds.formDesign\r\n : this.fds.nestedFormDesign\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {}\r\n}\r\n","<div class=\"core-form-design-monitor-container\">\r\n <div class=\"list-wrapper\">\r\n <ul>\r\n <li [appTooltip]=\"'Click to view form in the Console'\" [showAnyway]=\"true\" (click)=\"viewFormInConsole()\">📦</li>\r\n <li [appTooltip]=\"'The normalize function called count'\" [showAnyway]=\"true\">{{ normalizeCalledCount$ | async }}</li>\r\n <li [htmlTooltip]=\"controlTemplate\" [hold$]=\"holdControlTemplate$\"\r\n [class.hold]=\"holdControlTemplate$ | async\" (click)=\"toggleHold('controlTemplate')\">CT\r\n </li>\r\n <li [htmlTooltip]=\"nestedControlTemplate\" [hold$]=\"holdNestedControlTemplate$\"\r\n [class.hold]=\"holdNestedControlTemplate$ | async\"\r\n (click)=\"toggleHold('nestedControlTemplate')\">NCT</li>\r\n <li [htmlTooltip]=\"selectedCell\" [hold$]=\"holdSelectedCell$\" [class.hold]=\"holdSelectedCell$ | async\"\r\n (click)=\"toggleHold('selectedCell')\">SC</li>\r\n <li [htmlTooltip]=\"nestedSelectedCell\" [hold$]=\"holdNestedSelectedCell$\"\r\n [class.hold]=\"holdNestedSelectedCell$ | async\" (click)=\"toggleHold('nestedSelectedCell')\">NSC</li>\r\n <li [htmlTooltip]=\"control\" [hold$]=\"holdControl$\" [class.hold]=\"holdControl$ | async\"\r\n (click)=\"toggleHold('control')\">C</li>\r\n <li [htmlTooltip]=\"nestedControl\" [hold$]=\"holdNestedControl$\"\r\n [class.hold]=\"holdNestedControl$ | async\" (click)=\"toggleHold('nestedControl')\">NC</li>\r\n <li [htmlTooltip]=\"placeholderSections\" [hold$]=\"holdPlaceholderSections$\"\r\n [class.hold]=\"holdPlaceholderSections$ | async\" (click)=\"toggleHold('placeholderSections')\">PHS</li>\r\n <li [htmlTooltip]=\"nestedPlaceholderSections\" [hold$]=\"holdNestedPlaceholderSections$\"\r\n [class.hold]=\"holdNestedPlaceholderSections$ | async\" (click)=\"toggleHold('nestedPlaceholderSections')\">\r\n NPHS</li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #controlTemplate>\r\n <div class=\"pre-holder\">\r\n <p>$controlTemplate</p>\r\n <pre>{{ $controlTemplate() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedControlTemplate>\r\n <div class=\"pre-holder\">\r\n <p>$nestedControlTemplate</p>\r\n <pre>{{ $nestedControlTemplate() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #selectedCell>\r\n <div class=\"pre-holder\">\r\n <p>$selectedCell</p>\r\n <pre>{{ $selectedCell() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedSelectedCell>\r\n <div class=\"pre-holder\">\r\n <p>$nestedSelectedCell</p>\r\n <pre>{{ $nestedSelectedCell() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #control>\r\n <div class=\"pre-holder\">\r\n <p>$control</p>\r\n <pre>{{ $control() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedControl>\r\n <div class=\"pre-holder\">\r\n <p>$nestedControl</p>\r\n <pre>{{ $nestedControl() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #placeholderSections>\r\n <div class=\"pre-holder\">\r\n <p>$placeholderSections</p>\r\n <pre>{{ $placeholderSections() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedPlaceholderSections>\r\n <div class=\"pre-holder\">\r\n <p>$nestedPlaceholderSections</p>\r\n <pre>{{ $nestedPlaceholderSections() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, computed, effect, inject, isDevMode, signal, WritableSignal } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { CoreControlNoFormArrayComponent } from '../../core-control-no-form-array/core-control-no-form-array.component';\r\nimport { CoreFormArrayControlPaletteComponent } from '../core-form-array-control-palette/core-form-array-control-palette.component';\r\nimport { CoreFormGroupEditorComponent } from '../core-form-group-editor.component';\r\nimport { CoreFormDesignMonitorComponent } from '../../core-form-design/core-form-design-monitor/core-form-design-monitor.component';\r\nimport { FieldSettingComponent } from '../field-setting/field-setting.component';\r\nimport { JsonPipe } from '@angular/common';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\n\r\n@Component({\r\n selector: 'core-form-array-layout-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n JsonPipe,\r\n JsonSafePipe,\r\n CoreControlNoFormArrayComponent,\r\n CoreFormArrayControlPaletteComponent,\r\n CoreFormGroupEditorComponent,\r\n FieldSettingComponent,\r\n CoreFormDesignMonitorComponent\r\n ],\r\n templateUrl: './core-form-array-layout-editor.component.html',\r\n styleUrl: './core-form-array-layout-editor.component.scss'\r\n})\r\nexport class CoreFormArrayLayoutEditorComponent {\r\n\r\n fds = inject(CoreFormDesignService);\r\n js = inject(JsonService);\r\n as = inject(AlertService);\r\n $placeholderSections = this.fds.$placeholderSections;\r\n $control = this.fds.$control;\r\n $nestedControl = this.fds.$nestedControl;\r\n $nestedSimplifiedSections = this.fds.$nestedSimplifiedSections;\r\n\r\n ignoredKeys: string[] = [];\r\n droppedKeys: string[] = [];\r\n //placeholderSectionsJson: string = '';\r\n\r\n constructor() {\r\n console.log(\"CoreFormArrayLayoutEditorComponent constructor\");\r\n\r\n /*\r\n effect(() => {\r\n const placeholderSections = this.coreFormDesignService.$placeholderSections();\r\n console.log(\"🔴 OMG before safeTransform\", placeholderSections)\r\n const { obj, ignoredKeys, droppedKeys } = this.js.safeTransform(placeholderSections);\r\n console.log(\"🔴 OMG obj in output\", obj)\r\n this.ignoredKeys = ignoredKeys;\r\n this.droppedKeys = droppedKeys;\r\n if (droppedKeys.some(x => x.endsWith(\"validator\"))) {\r\n if (isDevMode()) {\r\n this.as.info(\"The safeTransform function correctly drops 'validator' key!\", alertOptions);\r\n }\r\n }\r\n //this.placeholderSectionsJson = JSON.stringify(obj, null, 2)\r\n })\r\n */\r\n }\r\n\r\n onClose(): void {\r\n this.fds.$showFormArrayDesign.set(false);\r\n }\r\n\r\n showPlaceholderSectionsInConsole(): void {\r\n console.log(\"$placeholderSections()\", this.fds.$placeholderSections())\r\n }\r\n\r\n}\r\n","<div class=\"core-form-array-layout-editor-container\">\r\n\r\n <!-- <div class=\"modal-container\">\r\n <div class=\"modal-content-root\"> -->\r\n\r\n <div class=\"layout-header\">\r\n DESIGN FORM ARRAY LAYOUT: {{ $control()?.field }}\r\n <core-form-design-monitor [$mode]=\"'nested'\"></core-form-design-monitor>\r\n <button class=\"btn btn-sm btn-outline-secondary\" (click)=\"onClose()\">✖</button>\r\n </div>\r\n\r\n <div class=\"layout-body\">\r\n <div class=\"json-holder\">\r\n <button type=\"button\" class=\"btn btn-sm btn-success\" (click)=\"showPlaceholderSectionsInConsole()\">Show $placeholderSections() in console</button>\r\n <pre>{{ $placeholderSections() | jsonSafe }}</pre>\r\n Ignored keys:\r\n <pre>{{ ignoredKeys | json }}</pre>\r\n DroppedKeys:\r\n <pre>{{ droppedKeys | json }}</pre>\r\n </div>\r\n <div class=\"palete\">\r\n <core-form-array-control-palette />\r\n </div>\r\n <div class=\"sections-holder\">\r\n <core-form-group-editor [$idAsInput]=\"true\" [$isNested]=\"true\"/>\r\n </div>\r\n <div class=\"field-setting-holder\">\r\n <field-setting [$isNested]=\"true\">{{ $nestedControl()?.field }}</field-setting>\r\n </div>\r\n </div>\r\n\r\n <!-- </div>\r\n </div> -->\r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, isDevMode, Renderer2, signal, viewChild, ViewChild, WritableSignal } from '@angular/core';\r\nimport { slideFromTopFadeIn } from '../animations/slide-animations';\r\nimport { CoreAttachmentComponent } from '../core-attachment/core-attachment/core-attachment.component';\r\nimport { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreChecklistComponent, ICoreChecklistOption } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreMonthSelectorComponent } from '../core-month-selector/core-month-selector/core-month-selector.component';\r\nimport { CoreRadioGroupComponent } from '../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { HotKeysDirective } from '../../directives/hot-keys.directive';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { ICoreFormSection, IFormBaseControl, IValidator } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlComponent } from '../core-control/core-control/core-control.component';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, of, switchMap, tap } from 'rxjs';\r\nimport { IFormDesignCell, IFormDesignRow, IFormDesignSection } from './interfaces';\r\nimport { FormMetadataComponent } from './form-metadata/form-metadata.component';\r\nimport { ICoreDropdownOption } from '../../interfaces/ICoreDropdownOption';\r\nimport { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';\r\nimport { ICoreButtonVNS } from '../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { EnumCoreButtonVNSCode } from '../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreFormComponent } from '../core-form/core-form/core-form.component';\r\nimport { FieldSettingComponent } from './field-setting/field-setting.component';\r\nimport { EnumFormDesignMode } from './enums/EnumFormDesignMode';\r\nimport { EnumLeftPanelMode } from './enums/EnumLeftPanelMode';\r\nimport { CoreFormDesignService } from './core-form-design.service';\r\nimport { AttachmentFieldHelperService } from './field-setting/type-specific/attachment-props/attachment-field-helper.service';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { TableCellPipe } from '../pipes/table-cell.pipe';\r\nimport { ActivatedRoute, Router, UrlSegment } from '@angular/router';\r\nimport { EnumCorePageEditMode } from '../core-page-edit/EnumCorePageEditMode';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { noneAutoClosedAlertOptions } from '../../constants/alertOptions';\r\nimport { LiveFormComponent } from './live-form/live-form.component'\r\nimport { ApplicationHelpService } from '../../services/application-help.service';\r\nimport { CoreWorkflowService } from '../core-workflow-builder/core-workflow.service';\r\nimport { CoreToastLoadingComponent } from '../core-toast-loading/core-toast-loading.component';\r\nimport { HtmlTooltipDirective } from '../../directives/html-tooltip.directive';\r\nimport { DbService } from '../../services/db.service';\r\nimport { DomService } from '../services/dom.service';\r\nimport { AppConfigService } from '../../services/app-config.service';\r\nimport { JsonService } from '../../services/json.service';\r\nimport { CoreFormArrayLayoutEditorComponent } from './core-form-array-layout-editor/core-form-array-layout-editor.component';\r\nimport { CoreFormGroupEditorComponent } from './core-form-group-editor.component';\r\nimport { CoreFormDesignMonitorComponent } from './core-form-design-monitor/core-form-design-monitor.component';\r\n\r\n@Component({\r\n selector: 'core-form-design',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n AsyncPipe,\r\n NgTemplateOutlet,\r\n CoreFormDesignMonitorComponent,\r\n CoreFormGroupEditorComponent,\r\n CoreFormArrayLayoutEditorComponent,\r\n CoreToastLoadingComponent,\r\n CorePageHeaderComponent,\r\n FormMetadataComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe,\r\n TableCellPipe,\r\n TooltipDirective,\r\n HotKeysDirective,\r\n CoreFormComponent,\r\n CoreControlComponent,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCheckboxComponent,\r\n CoreAttachmentComponent,\r\n CoreDatePickerComponent,\r\n CoreRadioGroupComponent,\r\n CoreMonthSelectorComponent,\r\n TooltipDirective,\r\n CoreCurrencyInputComponent,\r\n FieldSettingComponent,\r\n LiveFormComponent,\r\n HtmlTooltipDirective,\r\n ],\r\n templateUrl: './core-form-design.component.html',\r\n styleUrls: [\r\n './core-form-design.component.scss',\r\n '../core-form/core-form/core-form.component.scss',\r\n '../core-button-group-vns/core-button-vns/core-button-vns.component.scss',\r\n ],\r\n animations: [slideFromTopFadeIn]\r\n})\r\nexport class CoreFormDesignComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $idAsInput = input<boolean>()\r\n $id = input<string | undefined>();\r\n\r\n $settingPanel = viewChild<ElementRef>('settingPanel');\r\n\r\n $jsonMode = signal<'selectedField' | 'full'>('selectedField');\r\n\r\n injectedFields$ = new BehaviorSubject<IFormBaseControl[]>([]);\r\n\r\n\r\n enumType = EnumFormDesignMode;\r\n enumLeftPanelMode = EnumLeftPanelMode;\r\n $leftPanelMode = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.enumLeftPanelMode.Json\r\n } else {\r\n return this.enumLeftPanelMode.FieldCollection\r\n }\r\n })\r\n\r\n ds = inject(DomService);\r\n js = inject(JsonService);\r\n\r\n $zIndex = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.ds.getMaxZIndex() + 1;\r\n } else {\r\n return 0;\r\n }\r\n })\r\n\r\n previewMode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n wfs = inject(CoreWorkflowService);\r\n dbs = inject(DbService);\r\n appConfigService = inject(AppConfigService);\r\n\r\n $hasCalculatedSection = computed<boolean>(() => {\r\n return this.coreFormDesignService.$placeholderSections().some(s => !!s.forCalculatedFields)\r\n });\r\n\r\n formDesign = this.coreFormDesignService.formDesign;\r\n nestedFormDesign = this.coreFormDesignService.nestedFormDesign;\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n isDragOverMap: Record<string, boolean> = {};\r\n\r\n idStream$ = new BehaviorSubject<any>(undefined);\r\n getByIdStream$ = this.idStream$.pipe(\r\n filter(id => !!id && id !== '0'),\r\n distinctUntilChanged(),\r\n tap(() => {\r\n this.$loading.set(true);\r\n this.coreFormDesignService.editMode$.next(EnumCorePageEditMode.UPDATE);\r\n this.coreFormDesignService.$submitText.set(EnumTranslateKey.UI_EDIT_FORM_BUTTON_SAVE);\r\n }),\r\n switchMap(id => {\r\n return this.coreFormDesignService.getById(id)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n )\r\n })\r\n );\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n this.idStream$.next(this.$id())\r\n })\r\n\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n break;\r\n case 'F6':\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Preview);\r\n break;\r\n case 'Escape':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n if (this.appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n this.injectedFields$.next([\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n },\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ])\r\n } else {\r\n this.injectedFields$.next([\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ]);\r\n }\r\n }\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n calculated: new FormControl(),\r\n formArray: new FormArray<FormGroup<{\r\n stringBox: FormControl<string>;\r\n }>>([\r\n new FormGroup({\r\n stringBox: new FormControl('', { nonNullable: true }),\r\n }),\r\n ])\r\n })\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n controlCategories: { name: string, controls: IFormBaseControl[] }[] = [\r\n {\r\n name: 'Calculated fields',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CALCULATED,\r\n type: 'calculated',\r\n field: 'calculated',\r\n label: '',\r\n value: '',\r\n placeholder: 'Calculated',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Text',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Numerical',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Single selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Multiple Selection',\r\n controls: [\r\n // {\r\n // flexSize: 12,\r\n // controlType: EnumFormBaseContolType.GRIDBUFFER,\r\n // type: 'children',\r\n // field: 'gridbuffer',\r\n // label: '',\r\n // value: [],\r\n // placeholder: 'Grid buffer',\r\n // gridBufferFormSections: [\r\n // {\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 6,\r\n // field: 'field1',\r\n // type: 'date',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.DATEPICKER,\r\n // label: 'field 1'\r\n // },\r\n // {\r\n // flexSize: 6,\r\n // field: 'field2',\r\n // type: 'number',\r\n // value: null,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // label: 'field 2'\r\n // },\r\n // ]\r\n // ]\r\n // }\r\n // ],\r\n // gridBufferTableColumns: [\r\n // {\r\n // caption: 'id',\r\n // field: 'id',\r\n // hidden: true,\r\n // type: 'string',\r\n // align: 'left',\r\n // width: 0,\r\n // },\r\n // {\r\n // field: 'field1',\r\n // width: 200,\r\n // caption: 'field 1',\r\n // type: 'date',\r\n // pipe: EnumCoreTablePipeType.DATE,\r\n // align: 'center'\r\n // },\r\n // {\r\n // field: 'field2',\r\n // width: 100,\r\n // caption: 'field 2',\r\n // type: 'number',\r\n // align: 'right'\r\n // },\r\n // ],\r\n // headless: true,\r\n // tableHeight: 100,\r\n // liteMode: true,\r\n // },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Date',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Other',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Form Array',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.FORM_ARRAY,\r\n type: 'children',\r\n field: 'formArray',\r\n label: '',\r\n value: '',\r\n placeholder: 'FormArray',\r\n headless: true,\r\n formArraySections: [\r\n {\r\n rows: [\r\n [\r\n { \r\n field: 'stringBox',\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'text',\r\n value: '',\r\n label: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n\r\n switchJson(): void {\r\n if (this.$jsonMode() === 'full') {\r\n this.$jsonMode.set('selectedField');\r\n } else {\r\n this.$jsonMode.set('full');\r\n }\r\n\r\n }\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl, isNested: boolean) {\r\n this.coreFormDesignService.beginDragTemplate(control, isNested);\r\n }\r\n \r\n\r\n onDragOver(event: DragEvent, section: IFormDesignSection, control: Partial<IFormBaseControl>) {\r\n event.preventDefault(); // necessary to allow drop\r\n if (\r\n (!!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type === 'calculated') ||\r\n (!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type !== 'calculated')\r\n ) {\r\n event.dataTransfer!.dropEffect = 'copy';\r\n } else {\r\n event.dataTransfer!.dropEffect = 'none';\r\n }\r\n\r\n }\r\n\r\n onDragEnter(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = true;\r\n }\r\n\r\n onDragLeave(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = false;\r\n }\r\n\r\n generateFieldNameFor = this.coreFormDesignService.generateFieldNameFor.bind(this.coreFormDesignService);\r\n generateLabelNameFor = this.coreFormDesignService.generateLabelNameFor.bind(this.coreFormDesignService);\r\n\r\n getAllControlsFromSections = this.coreFormDesignService.getAllControlsFromSections.bind(this.coreFormDesignService);\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_SWITCH_VIEW) {\r\n if (this.coreFormDesignService.$mode() === EnumFormDesignMode.Default) {\r\n const sections = this.coreFormDesignService.toCoreFormSections(this.coreFormDesignService.$placeholderSections());\r\n this.coreFormDesignService.$liveFormSections.set(sections);\r\n }\r\n setTimeout(() => this.coreFormDesignService.$mode.set(this.coreFormDesignService.$mode() === EnumFormDesignMode.Preview ? EnumFormDesignMode.Default : EnumFormDesignMode.Preview))\r\n } else if (e.code === EnumCoreButtonVNSCode.HEADER_SAVE) {\r\n\r\n }\r\n }\r\n\r\n closePreview() {\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default)\r\n }\r\n\r\n onPreviewSubmit(e: any): void {\r\n alert(JSON.stringify(e, null, 2))\r\n }\r\n\r\n getControl = this.coreFormDesignService.getControl.bind(this.coreFormDesignService);\r\n\r\n ngAfterViewInit(): void {\r\n\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.getByIdStream$.subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n console.log(\"[CoreFormDesignComponent][ngAfterViewInit]: $afInstance is being set inside getByIdStream$ subscription\");\r\n this.coreFormDesignService.$afInstance.set(\r\n this.coreFormDesignService.mapFromAfInstanceDTO(x.body.innerBody)\r\n )\r\n this.coreFormDesignService.syncPlaceholderSectionsFromInstance();\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(true);\r\n const saveLiveJson = this.coreFormDesignService.$saveLiveJson();\r\n setTimeout(() => this.wfs.$initialFormDesignJson.set(\r\n saveLiveJson\r\n ));\r\n }\r\n\r\n })\r\n );\r\n\r\n if (!this.$idAsInput()) {\r\n\r\n this.subscriptions.push(\r\n this.route.params.subscribe(x => {\r\n let id: string = '0';\r\n try {\r\n id = atob(x['id']);\r\n console.log(\"[CoreFormDesignComponent][ngAfterViewInit]: $afInstance is being updated inside this.route.params subscription\");\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n id\r\n }))\r\n } catch (err: any) {\r\n if (isDevMode()) {\r\n this.alertService.error(err.toString(), noneAutoClosedAlertOptions);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.idStream$.next(id);\r\n\r\n })\r\n )\r\n\r\n }\r\n\r\n console.warn('InitialFormDesignJson on load', this.wfs.$initialFormDesignJson());\r\n\r\n })\r\n\r\n }\r\n\r\n onControlParamsChange(updated: IFormBaseControl): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n if (!cell) return sections;\r\n\r\n // Patch the selected cell\r\n Object.assign(cell.control!, updated);\r\n return sections;\r\n });\r\n }\r\n\r\n get normalizedSelectedControl(): IFormBaseControl {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n\r\n if (!cell?.control) {\r\n throw new Error('No control is currently selected.');\r\n }\r\n\r\n return this.coreFormDesignService.normalize(cell.control);\r\n }\r\n\r\n triggerUpdateSections(): void {\r\n const newValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newValue]);\r\n }\r\n\r\n isRequired(control: IFormBaseControl | undefined | null): boolean {\r\n if (!control || !control.validators) return false;\r\n\r\n return control.validators.some((v: IValidator) => v.name === 'required' || v.name === 'requiredTrue');\r\n }\r\n\r\n filteredCells = this.coreFormDesignService.filteredCells;\r\n\r\n onFormDesignCreated(e: any) {\r\n console.log(\"onFormDesignCreated\", e)\r\n }\r\n\r\n onLiveFormCreated(e: any) {\r\n console.log(\"onLiveFormCreated\", e)\r\n }\r\n\r\n showMetadata(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(true);\r\n }\r\n\r\n}\r\n","<div class=\"core-form-design-container fs-13\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n <core-page-header title=\"UI.COMPONENT_TITLE.WORKFLOW_FORM_DESIGN\" (buttonClick)=\"onCorePageHeaderButtonClicked($event)\"></core-page-header>\r\n \r\n <ng-template #formMetadata>\r\n <form-metadata></form-metadata>\r\n </ng-template>\r\n\r\n <!-- @if (coreFormDesignService.$showFormArrayDesign()) { -->\r\n <div class=\"form-array-layout-editor-wrapper\" [class.open]=\"coreFormDesignService.$showFormArrayDesign()\">\r\n <core-form-array-layout-editor />\r\n </div>\r\n <!-- } -->\r\n\r\n @if (!coreFormDesignService.$isInWorkflowDesign()) {\r\n <aside class=\"af-metadata-overlay\" [@slideFromTopFadeIn]=\"coreFormDesignService.$showFormMetadata() ? 'in' : 'out'\"\r\n [class.shown]=\"coreFormDesignService.$showFormMetadata()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"formMetadata\"></ng-container>\r\n </aside>\r\n }\r\n\r\n <div \r\n class=\"field-setting-panel\" \r\n [class.open]=\"coreFormDesignService.$fieldSettingPanelOpen()\" \r\n [class.calculated-type]=\"coreFormDesignService.$selectedCell()?.control?.type==='calculated'\"\r\n [ngStyle]=\"{ zIndex: $zIndex() }\"\r\n #settingPanel\r\n >\r\n @if (!!(this.coreFormDesignService.$selectedCell())) {\r\n <field-setting [$isNested]=\"false\"></field-setting>\r\n }\r\n </div>\r\n\r\n <div class=\"form-design-left\">\r\n\r\n @switch ($leftPanelMode()) {\r\n @case (enumLeftPanelMode.FieldCollection) {\r\n @for (category of controlCategories; track $index) {\r\n <div class=\"category-name\">\r\n {{ category.name }}\r\n </div>\r\n <ul>\r\n @for (control of category.controls; track $index) {\r\n <li draggable=\"true\" (dragstart)=\"onDragStart($event, control, false)\" [class.full-width]=\"control.controlType === 'SEEKER' || control.controlType === 'ATTACHMENT' || control.controlType === 'GRIDBUFFER'\">\r\n @if (control.controlType === 'GRIDBUFFER') {\r\n <div class=\"grid-buffer-wrapper\">\r\n <core-control [control]=\"control\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n } @else {\r\n <core-control [control]=\"control\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n }\r\n </li>\r\n <div class=\"space\"></div>\r\n }\r\n </ul>\r\n }\r\n }\r\n @case (enumLeftPanelMode.Json) {\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"switchJson()\">{{ $jsonMode() }}</button>\r\n @if ($jsonMode()==='selectedField') {\r\n <pre class=\"json-preview\">{{ coreFormDesignService.$controlJson() }}</pre>\r\n } @else {\r\n <pre class=\"json-preview\">{{ coreFormDesignService.$saveLiveJson() }}</pre>\r\n }\r\n \r\n }\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"form-design-right\">\r\n <core-form-design-monitor [$mode]=\"'main'\"></core-form-design-monitor>\r\n <div class=\"h10\"></div>\r\n <core-form-group-editor [$idAsInput]=\"true\" />\r\n </div>\r\n @if ($loading()) {\r\n <core-toast-loading></core-toast-loading>\r\n }\r\n\r\n <ng-template #calculatedFieldsTooltip>\r\n <div style=\"max-width: 280px;\">\r\n <strong>Calculated Fields</strong><br />\r\n <p></p>\r\n These fields are hidden from the form and cannot be edited directly.<br /><br />\r\n - They are computed automatically during workflow execution.<br />\r\n - Each field depends on one or more standard input fields.<br />\r\n - The calculation is evaluated using either an SQL query engine (like <strong>Dapper</strong>) or an in-memory expression engine (like <strong>Dynamic Expresso</strong>).<br /><br />\r\n In both cases, the result is a <code>0</code> or <code>1</code>, representing <strong>false</strong> or <strong>true</strong>.<br /><br />\r\n These results can be used to influence workflow logic, rule trees, or approval paths.\r\n </div>\r\n </ng-template>\r\n \r\n</div>"],"names":["i1.DialogService","i2.MultiLanguageService","i1.MultiLanguageService","i2"],"mappings":";;;;;;;;;;;;;AAEO,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,EAAE;AAC9D,IAAA,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AAC9D,IAAA,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACnE,UAAU,CAAC,WAAW,EAAE;QACtB,OAAO,CAAC,gBAAgB;KACzB,CAAC;IACF,UAAU,CAAC,WAAW,EAAE;QACtB,OAAO,CAAC,eAAe;KACxB;AACF,CAAA,CAAC;;MCDW,qBAAqB,CAAA;AANlC,IAAA,WAAA,GAAA;AAOS,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC1C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAwBlC;IApBC,eAAe,GAAA;AACb,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;;IAGzD,QAAQ,GAAA;QACN,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,MAAM,OAAO;QAC/D,IAAI,CAAC,KAAK,EAAE;;IAGd,eAAe,GAAA;QACb,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;;IAG3C,WAAW,GAAA;QACT,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;;8GAzBhC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,0ECVlC,6DAAyD,EAAA,MAAA,EAAA,CAAA,8QAAA,CAAA,EAAA,CAAA,CAAA;;2FDU5C,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,EAAE,EAAA,QAAA,EAAA,6DAAA,EAAA,MAAA,EAAA,CAAA,8QAAA,CAAA,EAAA;;;AE6BP,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;IAa1D,QAAQ,GAAA;QACN,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAIzD,IAAA,aAAa,CAAC,CAAa,EAAA;AACzB;;;;AAIE;;QAEF,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;;IAa3C,WACkB,CAAA,aAA4B,EACpC,GAAyB,EAAA;QAEjC,KAAK,CAAC,aAAa,CAAC;QAHJ,IAAa,CAAA,aAAA,GAAb,aAAa;QACrB,IAAG,CAAA,GAAA,GAAH,GAAG;AAtCN,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC5D,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,QAAA,IAAA,CAAA,IAAI,GAAmB,IAAI,CAAC,qBAAqB,CAAC,YAAY;AAEvE,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,CAAC;QAkBjD,IAAK,CAAA,KAAA,GAAG,IAAI,eAAe,CAAuB,oBAAoB,CAAC,MAAM,CAAC;AAI9E,QAAA,IAAA,CAAA,6BAA6B,GAAG,IAAI,CAAC,qBAAqB,CAAC,yCAAyC;AAEpG,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,qBAAqB;AAE5D,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;AAyDpE,QAAA,IAAA,CAAA,aAAa,GAA4B;AACvC,YAAA,qBAAqB,CAAC,gBAAgB;SACvC;QApDC,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,EAAE;gBACzD,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAEnE,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAErD,IAAI,kBAAkB,EAAE;AAEtB,gBAAA,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAG;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChC,OAAO,EAAE,OAAO,EAAE;AACpB,iBAAC,CAAC;;iBACG;;AAET,SAAC,CAAC;;IAIJ,qBAAqB,GAAA;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;AAEzD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;AACjC,YAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;YAEvC,SAAS,EAAE,QAAQ,CAAC,SAAS;AAC7B,YAAA,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,EAAE;AAC/C,YAAA,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,EAAE;AAE/C,YAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK;AACxC,YAAA,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,KAAK;AAChD,YAAA,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,KAAK;AAEtD,YAAA,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,IAAI,EAAE;AAE3D,YAAA,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;AAChC,YAAA,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;AAClC,YAAA,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;AAClC,YAAA,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE;YAEhD,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,EAAE;AAC3E,SAAA,CAAC;;AAQJ,IAAA,aAAa,CAAC,CAAiB,EAAA;QAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,gBAAgB,EAAE;AACrD,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAEvB,gBAAA,MAAM,SAAS,GAAoB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,KAAK,oBAAoB,CAAC,MAAM;AAC3G,oBAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;AACvF,oBAAA,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;gBACzF,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAClC,UAAU,CAAC,GAAG,IAAG;AACf,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;oBACxB,MAAM,GAAG,GACP,GAAG,EAAE,KAAK,EAAE,OAAO;wBACnB,GAAG,EAAE,OAAO;wBACZ,GAAG,EAAE,UAAU;AACf,wBAAA,4BAA4B;oBAE9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,0BAA0B,CAAC;AACxD,oBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;iBACf,CAAC,CACH;AAED,gBAAA,aAAa,CAAC,SAAS,CAAC,CAAC,IAAG;AAE1B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAExB,oBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;wBAC1D,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG3D,iBAAC,CAAC;;iBACG;gBACL,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7D,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACzC,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;;;;IAK5F,OAAO,GAAA;QACL,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGzD,IAAA,MAAM,CAAC,CAAM,EAAA;;AAIb,IAAA,aAAa,CAAC,KAAiD,EAAA;AAC7D,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS;AAE5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,IAAG;YACjD,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,IAAG;AAC5D,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACpB,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;;iBACnD;gBACL,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEpE,SAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,CAAC,CAAC,UAAU,EAAE;AAChB,YAAA,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;AACxC,gBAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC;AACzD,aAAC,CAAC;;aACG;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,0BAAA,CAA4B,CAAC;;AAI5C,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YAElC,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,KAAK,CAAC;YAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;YAExD,MAAM,EACJ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,UAAU,EACV,gBAAgB;;YAEhB,EAAE,EAAE,QAAQ,EACZ,GAAG,IAAI,EACR,GAAG,KAAK;AAET,YAAA,MAAM,WAAW,GAAG;gBAClB,GAAG,OAAO,CAAC,IAAI;AACf,gBAAA,IAAI,UAAU,KAAK,SAAS,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACtD,gBAAA,IAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAClD,gBAAA,IAAI,UAAU,KAAK,SAAS,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACtD,gBAAA,IAAI,UAAU,KAAK,SAAS,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACtD,gBAAA,IAAI,gBAAgB,KAAK,SAAS,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE;aAC1E;AAED,YAAA,MAAM,IAAI,GAAG;AACX,gBAAA,GAAG,OAAO;AACV,gBAAA,GAAG,IAAI;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;AAClC,gBAAA,IAAI,EAAE;aACP;AACD,YAAA,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC;YACpG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAClD,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAG;;AAEpC,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AAC3B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;IAIlB,eAAe,GAAA;;AAGb,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAE1E,UAAU,CAAC,MAAK;YAEd,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;YAEvD,MAAM,iBAAiB,GAA2B;AAC/C,iBAAA,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,2BAA2B;AACzF,iBAAA,GAAG,CAAC,KAAK,KAAK;gBACb,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3B,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC,CAAC;AAEL,YAAA,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAG1D,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;;AAGlE,YAAA,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC;YACrF,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,KAAK;AACzD,gBAAA,GAAG,QAAQ;AACX,gBAAA,kBAAkB,EAAE;AACrB,aAAA,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;;8GAtPO,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnClC,m4DAqDM,ED1BF,MAAA,EAAA,CAAA,qnBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,+KACvB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,OAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKlB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACR,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,aAAa;wBACb,uBAAuB;wBACvB,iBAAiB;wBACjB,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,m4DAAA,EAAA,MAAA,EAAA,CAAA,qnBAAA,CAAA,EAAA;+GAiBD,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;gBAMnD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;;;ME5C7B,4BAA4B,CAAA;IAEvC,OAAO,YAAY,CAAC,OAAyB,EAAA;AAC3C,QAAA,OAAO,OAAO,CAAC,WAAW,KAAK,YAAY;;IAG7C,OAAO,2BAA2B,CAAC,QAAgB,EAAA;QAIjD,OAAO;YACL,KAAK,EAAE,QAAQ,GAAG,QAAQ;AAC1B,YAAA,QAAQ,EAAE;SACX;;IAGH,OAAO,wBAAwB,CAAC,aAAqB,EAAA;QACnD,OAAO;AACL,YAAA,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE;SACX;;AAGH,IAAA,OAAO,0BAA0B,CAAC,GAAmB,EAAE,aAA+B,EAAA;QACpF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;;AAGpH;;AAEG;AACH,IAAA,OAAO,kCAAkC,CACvC,OAAyB,EACzB,IAAwB,EACxB,cAAsB,EAAA;AAEtB,QAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC;AAC5E,QAAA,OAAO,CAAC,KAAK,GAAG,KAAK;AACrB,QAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ;;AAG7B;;AAEG;AACH,IAAA,OAAO,qBAAqB,CAC1B,UAA4B,EAC5B,IAAwB,EAAA;AAExB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AACjC,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACxD,YAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AACtE,YAAA,UAAU,CAAC,KAAK,GAAG,KAAK;AACxB,YAAA,UAAU,CAAC,QAAQ,GAAG,QAAQ;;;8GAxDvB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;2FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACMK,MAAgB,kBAAmB,SAAQ,aAAa,CAAA;AAL9D,IAAA,WAAA,GAAA;;QAOW,IAAQ,CAAA,QAAA,GAAG,KAAK;AAElB,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE5D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;;iBAClD;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;;AAErD,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE;;iBACjD;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;;AAEpD,SAAC,CAAC;QAEF,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU;AAE1G,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACvF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAEjF,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAkBzB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAmB,MAAK;AACzC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC9B,IAAI,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;YAC5G,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;;;AAGpD,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AAcH;IAtCC,cAAc,CACZ,GAAM,EACN,KAA0B,EAAA;AAE1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;;;;QAIjC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC;;8GArChD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+HAF5B,6BAA6B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;oBACtB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;AACX,iBAAA;8BAGU,QAAQ,EAAA,CAAA;sBAAhB;;;ACCG,MAAO,uBAAwB,SAAQ,kBAAkB,CAAA;AAP/D,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAa,YAAY,CAAC;AAEpD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,IAAI,KAAK,YAAY;;iBAClD;gBACL,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK,YAAY;;AAErD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,4BAA4B,CAAC,YAAY,CAAC,OAAO;AAC7D,kBAAE,OAAO,CAAC,QAAQ,IAAI;AACtB,kBAAE,OAAO,CAAC,KAAK;AACjB,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAyDH;AAvDC;;;;;;;;;;;;AAYE;AAEF,IAAA,aAAa,CAAC,GAAW,EAAA;QACvB,IAAI,OAAO,GAAG,GAAG;QAEjB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAEnC,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,yBAAA,EAA4B,GAAG,CAAA,uCAAA,EAA0C,KAAK,CAAA,EAAA,CAAI,EAAE,YAAY,CAAC;YAE9G,OAAO,GAAG,KAAK;;YAGf,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;YACpD,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,GAAG,KAAK;;;;AAKzB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;;AAGrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,KAAK;QAEzD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wEAAwE,EAAE,YAAY,CAAC;YACpG,IAAI,CAAC,cAAc,EAAG,CAAC,aAAa,CAAC,KAAK,GAAG,QAAQ;;;AAIjD,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlC,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO;AACJ,aAAA,IAAI;aACJ,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE;AAC3D,aAAA,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;;8GA1EjC,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EChBpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gnCA6BM,EDjBM,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0EAAE,WAAW,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,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAInB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;+BACE,iBAAiB,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,WACtC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,gnCAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;AEU3B,MAAO,sBAAuB,SAAQ,kBAAkB,CAAA;AAZ9D,IAAA,WAAA,GAAA;;AAcE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAElD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAChC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CACvE;AAEF;8GARY,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBnC,62CAiCM,EDnBF,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0EACP,WAAW,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,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,EACX,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,WAAW;wBACX,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,62CAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;MERU,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVjC,wFAEM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIM,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,cAAc,EAAA,OAAA,EACf,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,wFAAA,EAAA;8BAKT,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEJU,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,uECRhC,+BACA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,CAAA,CAAA;;2FDOa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,EAAE,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;AEiBP,MAAO,sBAAuB,SAAQ,kBAAkB,CAAA;AAZ9D,IAAA,WAAA,GAAA;;QAcE,IAAW,CAAA,WAAA,GAAW,EAAE;QAExB,IAAgB,CAAA,gBAAA,GAAG,IAAI,eAAe,CAAwB;AAC5D,YAAA;AACE,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE;AACP,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,IAAI,EAAE;AACP;AACF,SAAA,CAAC;AAUH;IARC,iBAAiB,GAAA;AACf,QAAA,IAAI;YACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;;QAC3D,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC;;;8GApBhC,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBnC,u0DAyCM,ED5BF,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0EACP,WAAW,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,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,EACX,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,WAAW;wBACX,qBAAqB;wBACrB,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,u0DAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;AEPG,MAAO,uBAAwB,SAAQ,kBAAkB,CAAA;IAE7D,YAAY,GAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;QACnD,IAAI,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAC,UAAU,EAAE;YAG9D,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5D,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;;;;;;8GARpD,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,mGCVpC,+LAIU,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA,CAAA,CAAA;;2FDMG,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,+LAAA,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA;;;MEGA,sBAAsB,CAAA;AANnC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,uJCTnC,kCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,EAAE,EAAA,QAAA,EAAA,kCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,wJCTpC,mCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,WAClB,EAAE,EAAA,QAAA,EAAA,mCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEJU,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;;;;QAMW,IAAkB,CAAA,kBAAA,GAAG,IAAI,eAAe,CAAwB;YACvE,EAAE,KAAK,EAAE,mCAAmC,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;YACzE,EAAE,KAAK,EAAE,mCAAmC,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;YACnF,EAAE,KAAK,EAAE,mCAAmC,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;YACnF,EAAE,KAAK,EAAE,mCAAmC,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE;YACjF,EAAE,KAAK,EAAE,mCAAmC,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;YAC3E,EAAE,KAAK,EAAE,mCAAmC,CAAC,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;YACnF,EAAE,KAAK,EAAE,mCAAmC,CAAC,wBAAwB,EAAE,IAAI,EAAE,0BAA0B,EAAE;;YAEzG,EAAE,KAAK,EAAE,mCAAmC,CAAC,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACvF,EAAE,KAAK,EAAE,mCAAmC,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE;YAChF,EAAE,KAAK,EAAE,mCAAmC,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;AAC5E,SAAA,CAAC;QAEO,IAAsB,CAAA,sBAAA,GAAG,IAAI,eAAe,CAAwB;YAC3E,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;YAC/C,EAAE,KAAK,EAAE,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;YACnD,EAAE,KAAK,EAAE,kBAAkB,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE;YAC/D,EAAE,KAAK,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE;YAC5D,EAAE,KAAK,EAAE,kBAAkB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE;YACrD,EAAE,KAAK,EAAE,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;AACnD,SAAA,CAAC;AAwCH;;;;AAnCC,IAAA,YAAY,CAAI,KAA6C,EAAA;AAC3D,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QACrB,IAAI,KAAK,YAAY,eAAe;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;AACnE,QAAA,OAAO,KAAK;;AAGd,IAAA,aAAa,CAAI,KAAyC,EAAA;AACxD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAO;QAC1B,IAAI,KAAK,YAAY,eAAe;AAAE,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AAC7D,QAAA,OAAO,KAAK;;AAGd,IAAA,SAAS,CAAI,GAAQ,EAAA;AACnB,QAAA,OAAO,IAAI,eAAe,CAAM,GAAG,CAAC;;AAGtC,IAAA,UAAU,CAAI,GAAM,EAAA;AAClB,QAAA,OAAO,IAAI,eAAe,CAAI,GAAG,CAAC;;IAGpC,OAAO,CAAI,MAAW,EAAE,OAAU,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC;;AAG7B,IAAA,UAAU,CAAI,MAAW,EAAE,KAAa,EAAE,OAAmB,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;AACvB,QAAA,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAI,GAAG,CAAC,KAAK,CAAS,EAAE,GAAG,OAAO,EAAO;AACxD,QAAA,OAAO,GAAG;;IAGZ,UAAU,CAAI,MAAW,EAAE,KAAa,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACpB,QAAA,OAAO,GAAG;;8GAhED,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACkB5B,MAAO,oBAAqB,SAAQ,kBAAkB,CAAA;AAX5D,IAAA,WAAA,GAAA;;AAaW,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;;;;QAKzC,IAAmB,CAAA,mBAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,IAAmB,CAAA,mBAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;;;QAezF,IAAS,CAAA,SAAA,GAAG,QAAQ,CAAC,MACnB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CACnD;;;;QAoBD,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC,MACrB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CACjE;QAED,IAAe,CAAA,eAAA,GAAG,QAAQ,CAAC,MACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5C;;;;QAYD,IAAY,CAAA,YAAA,GAAG,QAAQ,CAAoB,MACzC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,wBAAwB,CAAC,CACjE;;;;QAkCD,IAAgB,CAAA,gBAAA,GAAG,QAAQ,CAAyB,MAClD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,wBAAwB,CAAC,CACjE;;;;QA4BD,IAAiB,CAAA,iBAAA,GAAG,QAAQ,CAAqB,MAC/C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,yBAAyB,CAAC,CAClE;AAmBF;AA5IC,IAAA,mBAAmB,CAAC,GAAW,EAAA;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC;;AAG7C,IAAA,wBAAwB,CAAC,GAAW,EAAA;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC;;IAU7C,cAAc,GAAA;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC;;AAGzC,IAAA,iBAAiB,CAAC,CAAS,EAAE,GAA0B,EAAE,CAAS,EAAA;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC;;AAGzC,IAAA,iBAAiB,CAAC,CAAS,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC;;AAczC,IAAA,sBAAsB,CAAC,GAAW,EAAA;AAChC,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;QACzE,MAAM;;IAUV,cAAc,GAAA;AACZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACjD,YAAA,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,kBAAkB,CAAC,KAAK;AAClC,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;;QAGrD,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGpD,IAAA,iBAAiB,CAAC,CAAS,EAAE,GAA0B,EAAE,CAAM,EAAA;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAEtE,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC;;AAGpD,IAAA,iBAAiB,CAAC,CAAS,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC;;IAWpD,iBAAiB,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACrD,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;;AAGvD,IAAA,oBAAoB,CAAC,CAAS,EAAE,GAA+B,EAAE,CAAM,EAAA;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;;AAGvD,IAAA,oBAAoB,CAAC,CAAS,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,cAAc,CAAC,0BAA0B,EAAE,IAAI,CAAC;;IAUvD,kBAAkB,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACtD,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,2BAA2B,EAAE,IAAI,CAAC;;IAGxD,qBAAqB,CAAC,CAAS,EAAE,OAAe,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,cAAc,CAAC,2BAA2B,EAAE,IAAI,CAAC;;AAGxD,IAAA,qBAAqB,CAAC,CAAS,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,cAAc,CAAC,2BAA2B,EAAE,IAAI,CAAC;;8GApJ7C,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,+FCxBjC,m0QAqRA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpQI,WAAW,EACX,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,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,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,qBAAqB,sVACrB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACP,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,WAAW;wBACX,qBAAqB;wBACrB,qBAAqB;AACtB,qBAAA,EAAA,QAAA,EAAA,m0QAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;MEXU,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,yJCTrC,oCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,oCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,0JCTrC,qCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,EAAE,EAAA,QAAA,EAAA,qCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,mJCT/B,8BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,8BAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,iBAAiB,CAAA;AAN9B,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,kJCT9B,6BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,EAAE,EAAA,QAAA,EAAA,6BAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,0JCTrC,qCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,WACpB,EAAE,EAAA,QAAA,EAAA,qCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEFU,sBAAsB,CAAA;AANnC,IAAA,WAAA,GAAA;AAQY,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoB;AAK/D;IAHC,MAAM,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;8GAL5B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,uJCTnC,kCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDQa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,EAAE,EAAA,QAAA,EAAA,kCAAA,EAAA;8BAKF,OAAO,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;AEAG,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;AANhE,IAAA,WAAA,GAAA;;AAQE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,OAAO,4BAA4B,CAAC,YAAY,CAAC,OAAO;AACtD,kBAAE,OAAO,CAAC,QAAQ,IAAI;AACtB,kBAAE,OAAO,CAAC,KAAK;AACnB,SAAC,CAAC;AAeH;AAbC,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AAEnC,QAAA,IAAI,4BAA4B,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YACtD,4BAA4B,CAAC,kCAAkC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;;aACjF;AACL,YAAA,OAAO,CAAC,KAAK,GAAG,GAAG;;QAGrB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;;8GAnBhC,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,mGCXrC,oCACA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,CAAA,CAAA;;2FDUa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;AEsBP,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;AAwD9D,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;AAtD/B,QAAA,IAAA,CAAA,6BAA6B,GAAG,SAAS,CAAmB,8BAA8B,CAAC;AAC3F,QAAA,IAAA,CAAA,0BAA0B,GAAG,SAAS,CAAmB,2BAA2B,CAAC;AAErF,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC1C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;AACvB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;AACxB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGnC,QAAA,IAAA,CAAA,eAAe,GAAkC,MAAM,CAAC,IAAI,CAAC;AAE7D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAyB,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;AAEvB,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,cAAc,GAA2B,IAAI,CAAC,eAAe,EAAE;YAErE,IAAI,CAAC,cAAc,CAAC,MAAM;AAAE,gBAAA,OAAO,qBAAqB;YAExD,IAAI,MAAM,GAAG,yDAAyD;AAEtE,YAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;AAClC,gBAAA,MAAM,IAAI,CAAU,OAAA,EAAA,KAAK,CAAC,KAAK,IAAI;AAEnC,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AAC3D,gBAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;oBAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE;oBAClC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,CAAE,CAAA,IAAI,IAAI,GAAG,CAAK,EAAA,EAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA,EAAA,CAAI;;gBAGnE,MAAM,IAAI,IAAI;;AAGhB,YAAA,OAAO,MAAM,CAAC,IAAI,EAAE;AACtB,SAAC,CAAC;QAEF,IAAa,CAAA,aAAA,GAAG,IAAI,eAAe,CAAqB;AACtD,YAAA;AACE,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,WAAW,EAAE,IAAI,CAAC,6BAA6B;AAChD,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,WAAW,EAAE,IAAI,CAAC,0BAA0B;AAC7C,aAAA;AACF,SAAA,CAAC;AA6BF,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK;AAC/C,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACvG,SAAC,CAAC;AA4KF,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAS,MAAK;YACjD,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,cAAc;AACzC,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,0BAA0B;AACnC,gBAAA,KAAK,WAAW;AACd,oBAAA,OAAO,kBAAkB;AAC3B,gBAAA;AACE,oBAAA,OAAO,+BAA+B;;AAE5C,SAAC,CAAC;QAhNA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,6BAA6B,EAAE;AACzE,YAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,EAAE;YAEnE,IAAI,CAAC,CAAC,4BAA4B,IAAI,CAAC,CAAC,yBAAyB,EAAE;AACjE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB;AACE,oBAAA;AACE,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,WAAW,EAAE;AACd,qBAAA;AACD,oBAAA;AACE,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,WAAW,EAAE;AACd,qBAAA;AACF,iBAAA,CACF;;AAEL,SAAC,CAAC;;IASJ,YAAY,GAAA;QACV,MAAM,WAAW,GAA8B,EAAE;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CACzD,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;aAE/C,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AAC1D,gBAAA,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;SAEzD,CAAC,CACL;;AAGH,IAAA,QAAQ,CAAC,KAAe,EAAA;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;AAC/C,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAI/D,IAAA,cAAc,CAAC,CAAM,EAAA;QAEnB,CAAC,CAAC,eAAe,EAAE;QAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;QAEnC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA,2BAAA,CAA6B,CAAC;YACrD;;AAEF,QAAA,IAAI,CAAC,OAAQ,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAsC,mCAAA,EAAA,OAAO,CAAC,KAAK,CAAE,CAAA,CAAC;YAC7E;;AAGF,QAAA,IAAI,CAAC,OAAQ,CAAC,UAAU,EAAE;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAkC,+BAAA,EAAA,OAAQ,CAAC,KAAK,CAAE,CAAA,CAAC;YAC1E;;QAGF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,cAAc;QAEpD,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,+BAA+B,EAAE,YAAY,CAAC;YACtE;;AAGF,QAAA,MAAM,OAAO,GAAmB;YAC9B,KAAK,EAAE,OAAO,CAAC,MAAM;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AAClD,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,cAAc,EAAE;SACjB;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAE9B,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3B,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACvC,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAE/B,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;gBAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;gBACtC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAQ,KAAA,EAAA,KAAK,CAAE,CAAA,CAAC;;iBACrC;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,4BAA4B,CAAC;;SAExD,CAAC,CACH;;IAGH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC;;IAGjD,iBAAiB,GAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,yBAAyB,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;;IAIhC,kBAAkB,GAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,cAAc;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;AACvC,QAAA,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE;AAC1C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE;QAE7C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mCAAmC,CAAC;YAC3D;;QAGF,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gEAAgE,CAAC;YACxF;;AAGF,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,8DAA8D,CAAC;YACtF;;AAGF,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mCAAmC,CAAC;gBAC3D;;YAGF,MAAM,gBAAgB,GAAG;AACtB,iBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE;iBAChC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAEpB,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,CAAqD,kDAAA,EAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACnF;gBACD;;;;QAKJ,MAAM,aAAa,GAAG,CAAA,6BAAA,EAAgC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;QAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,CAAG,EAAA,MAAM,OAAO,aAAa,CAAA,IAAA,EAAO,YAAY,CAAA,CAAE;AAErE,QAAA,MAAM,OAAO,GAAmB;AAC9B,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,cAAc,EAAE;SACjB;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAEvB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3B,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC;AAChD,YAAA,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACvC,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,GAAG,IAAG;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;gBAChE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;gBACxC,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;qBAC3B;AACL,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC;;;iBAEnD;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,uCAAuC,CAAC;;SAEnE,CAAC,CACH;;AAeH,IAAA,kBAAkB,CAAC,QAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;AAGnD,IAAA,gBAAgB,CAAC,IAA+B,EAAA;AAC9C,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,OAAO;gBACL,CAAW,QAAA,EAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,YAAY,GAAG,SAAS,CAAa,WAAA,CAAA;gBAC9F,gDAAgD;gBAChD,wEAAwE;gBACxE,4CAA4C;gBAC5C,uDAAuD;gBACvD,kDAAkD;gBAClD,iCAAiC;gBACjC,kCAAkC;gBAClC,qCAAqC;gBACrC,sFAAsF;gBACtF,yFAAyF;gBACzF,8EAA8E;gBAC9E,CAAmC,gCAAA,EAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAW,CAAyB,uBAAA,CAAA;gBAC5F,0DAA0D;gBAC1D,uCAAuC;aACxC;;QAIH,OAAO;YACL,CAAW,QAAA,EAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,YAAY,GAAG,SAAS,CAAa,WAAA,CAAA;YAC9F,oCAAoC;YACpC,CAAqD,kDAAA,EAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAW,CAAgD,8CAAA,CAAA;YACrI;SACD;;AAGH,IAAA,0BAA0B,CAAC,IAA+B,EAAA;AACxD,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,OAAO;gBACL,CAAW,QAAA,EAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,YAAY,GAAG,SAAS,CAAa,WAAA,CAAA;gBAC9F,oDAAoD;gBACpD,8DAA8D;gBAC9D,qCAAqC;gBACrC,0DAA0D;gBAC1D,oCAAoC;gBACpC,qBAAqB;gBACrB,6BAA6B;gBAC7B,mFAAmF;aACpF;;QAGH,OAAO;YACL,CAAW,QAAA,EAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,YAAY,GAAG,SAAS,CAAa,WAAA,CAAA;YAC9F,gGAAgG;AAChG,YAAA,CAAA,qEAAA,EAAwE,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAW,CAAE,CAAA;YACrG,4DAA4D;SAC7D;;AAIH,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAE5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC/B,YAAA,OAAO,kCAAkC;;QAG3C,MAAM,kBAAkB,GAAG,+DAA+D;AAE1F,QAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACpC,YAAA,OAAO,gEAAgE;;AAGzE,QAAA,OAAO,IAAI;;AAIb,IAAA,cAAc,CAAC,MAAc,EAAA;QAE3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,KAAK,WAAW,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;;aAChC;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC;;;IAM1C,eAAe,GAAA;QACb,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;;IAGvC,cAAc,CAAC,KAA2B,EAAE,CAAM,EAAA;;8GA3WvC,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BrC,+sKAwHM,EDnGF,MAAA,EAAA,CAAA,kwBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,0EACP,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,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,EACX,8BAA8B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC9B,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAZpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACX,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,WAAW;wBACX,8BAA8B;wBAC9B,uBAAuB;AACxB,qBAAA,EAAA,QAAA,EAAA,+sKAAA,EAAA,MAAA,EAAA,CAAA,kwBAAA,CAAA,EAAA;;;AEPI,MAAM,4BAA4B,GAA8B;AACrE,IAAA,QAAQ,EAAE,oBAAoB;AAC9B,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,YAAY,EAAE,uBAAuB;AACrC,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,WAAW,EAAE,uBAAuB;AACpC,IAAA,QAAQ,EAAE,oBAAoB;AAC9B,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,aAAa,EAAE,wBAAwB;AACvC,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,aAAa,EAAE,wBAAwB;AACvC,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,YAAY,EAAE,wBAAwB;CACvC;;MCxBY,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;QAOW,IAAQ,CAAA,QAAA,GAAG,KAAK;QAEhB,IAAK,CAAA,KAAA,GAAQ,EAAE;AAEhB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAChC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAwBrC;IApBC,QAAQ,GAAA;QACN,MAAM,aAAa,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QAE7D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAC,IAAI,CAAA,wBAAA,CAA0B,EAAE,0BAA0B,CAAC;YAChH;;QAGF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC;;AAG7D,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;;;AAIvD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;AAEvD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,EAAE;;8GA7BzC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sIAHnB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;8BAGU,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;;;ACUG,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;AAU9D,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;;AAP/B,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CACnE;;AAGD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAA6D,EAAE,CAAC;QAI1F,MAAM,CAAC,MAAK;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,EAAE;AACxB,SAAC,CAAC;;;AAIJ,IAAA,SAAS,CAAC,CAAgC,EAAA;QACxC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;;IAG5C,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE;QAE3C,MAAM,YAAY,GAA+D,EAAE;AAEnF,QAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;AAC1B,YAAA,YAAY,CAAC,CAAC,CAAC,IAAqC,CAAC,GAAG,CAAC;;AAG3D,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;;AAG5C,IAAA,eAAe,CAAC,CAAgC,EAAA;QAC9C,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAEjD,QAAA,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;QACzE,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAErC,IAAI,gBAAgB,EAAE;AACpB,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;;aACb;AACL,YAAA,MAAM,SAAS,GAAe;AAC5B,gBAAA,IAAI,EAAE,CAAC;gBACP,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC9D,gBAAA,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;AAC7D,gBAAA,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG;aACzC;AAED,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS;;AAGxB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;;QAGrC,MAAM,UAAU,GACd,CAAC,gBAAgB;AACjB,YAAA,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzB,YAAA,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE;AAE1B,QAAA,IAAI,UAAU;YAAE;QAEhB,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC;;IAGnD,oBAAoB,CAAC,CAAgC,EAAE,GAAQ,EAAA;QAC7D,MAAM,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;QAEpC,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAEjD,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;;AAEhB,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC;;aACZ;AACL,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AACd,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;;;AAI5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;;QAGrC,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC;;AAGnD,IAAA,mBAAmB,CAAC,CAAgC,EAAA;QAClD,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI;;8GA3F9C,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBrC,2wDAiCA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlBI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,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,MAAA,EAAA,IAAA,EACX,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACX,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,WAAW;wBACX,aAAa;wBACb,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,2wDAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;AEoCG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AA7BxD,IAAA,WAAA,GAAA;;AA+BE,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AAE1B,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAE5D,IAAe,CAAA,eAAA,GAAG,sBAAsB;AAGxC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG/B,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAA0B,MAAK;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;YAC7H,IAAI,CAAC,IAAI,EAAE,OAAO;AAAE,gBAAA,OAAO,IAAI;YAC/B,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3D,SAAC,CAAC;;AAGO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,OAAyB,KACnD,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AAE3D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,SAAS;YAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,SAAS;AACjD,SAAC,CAAC;AAEO,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI,CAAC;aAChB;AACH,SAAC,CAAC;AAyEH;AAtEC,IAAA,gBAAgB,CAAC,OAAgC,EAAA;AAE/C,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAExC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAErC,QAAA,OAAO,4BAA4B,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;;;IAIzD,qBAAqB,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;IAGpE,sBAAsB,GAAA;QACpB,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG9D,IAAA,uBAAuB,CAAC,OAAgC,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;;AAG9B,QAAA,MAAM,WAAW,GAA2B;AAC1C,YAAA,gBAAgB,EAAE,YAAY;AAC9B,YAAA,gBAAgB,EAAE,YAAY;AAC9B,YAAA,eAAe,EAAE,aAAa;AAE9B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,YAAY,EAAE,aAAa;AAC3B,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,UAAU,EAAE;;SAEb;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;QAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE;AAE7C,QAAA,MAAM,OAAO,GAAG,SAAS,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,SAAS,CAAE,CAAA,GAAG,WAAW;AAEvE,QAAA,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;;AAGpF,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,aAAA,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;;IAG5C,eAAe,GAAA;AAEb,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAQ,KAAI;AAErE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEzB,SAAC,CAAC;;IAIK,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,EAAE;;8GA7G7B,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ECxDlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,w9KAkJc,EDnHV,MAAA,EAAA,CAAA,0/DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+BAEX,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,EACxB,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAalB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,6DACxB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA7BjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACR,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,WAAW;wBACX,OAAO;wBACP,uBAAuB;wBACvB,sBAAsB;wBACtB,wBAAwB;wBACxB,kBAAkB;wBAClB,wBAAwB;wBACxB,uBAAuB;wBACvB,wBAAwB;wBACxB,sBAAsB;wBACtB,wBAAwB;wBACxB,kBAAkB;wBAClB,iBAAiB;wBACjB,oBAAoB;wBACpB,wBAAwB;wBACxB,oBAAoB;wBACpB,sBAAsB;wBACtB,sBAAsB;wBACtB,wBAAwB;wBACxB,oBAAoB;wBACpB;AACD,qBAAA,EAAA,QAAA,EAAA,w9KAAA,EAAA,MAAA,EAAA,CAAA,0/DAAA,CAAA,EAAA;;;AEpDH,IAAY,iBAGX;AAHD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA;;MCmBY,oCAAoC,CAAA;AAVjD,IAAA,WAAA,GAAA;AAYE,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAErD,QAAA,IAAA,CAAA,cAAc,GAAuB;AACnC,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,GAAG;;AAEV,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,gBAAgB,EAAE,IAAI,eAAe,CAAwB,EAAE,CAAC;AAChE,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;gBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,CAAC,UAAU,CAAC;;AAEnB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,SAAS;AAC7C,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,iBAAiB,EAAE,IAAI,eAAe,CAAyB,EAAE,CAAC;AAClE,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;gBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,wBAAwB;AAC/B,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC3C,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,gBAAA,oBAAoB,EAAE,GAAG;AACzB,gBAAA,WAAW,EAAE,8BAA8B;AAC3C,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,aAAa;AAC1B,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,IAAI;;AAEX,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,aAAa;AACjD,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,gBAAgB;AAC7B,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,EAAE;;AAET,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,QAAQ,EAAE,IAAI;AACf;SACF;QAED,IAAI,CAAA,IAAA,GAAc,IAAI,SAAS,CAAC;YAC9B,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,OAAO,EAAE,IAAI,WAAW,EAAE;YAC1B,KAAK,EAAE,IAAI,WAAW,EAAE;YACxB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,MAAM,EAAE,IAAI,WAAW,EAAE;YACzB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,cAAc,EAAE,IAAI,WAAW,EAAE;YACjC,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,sBAAsB,EAAE,IAAI,WAAW,EAAE;YACzC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,aAAa,EAAE,IAAI,WAAW,EAAE;YAChC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,gBAAgB,EAAE,IAAI,WAAW,EAAE;YACnC,QAAQ,EAAE,IAAI,WAAW,EAAE;AAC5B,SAAA,CAAC;AACF,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAKlD;IAHC,WAAW,CAAC,KAAgB,EAAE,OAAyB,EAAA;QACrD,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC;;8GAzMlD,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,ECtBjD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kdAUK,EDMD,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,+BAA+B,gJAC/B,mBAAmB,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,CAAA,EAAA,CAAA,CAAA;;2FAKV,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAVhD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAClC,OAAA,EAAA;wBACP,QAAQ;wBACR,+BAA+B;wBAC/B;AACD,qBAAA,EAAA,QAAA,EAAA,kdAAA,EAAA,MAAA,EAAA,CAAA,iOAAA,CAAA,EAAA;;;AE4EG,MAAO,4BAA6B,SAAQ,aAAa,CAAA;AAwH7D,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;AAtH/B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;QAEjC,IAAU,CAAA,UAAA,GAAG,KAAK,EAAW;QAC7B,IAAG,CAAA,GAAA,GAAG,KAAK,EAAsB;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAAa,cAAc,CAAC;AAErD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA2B,eAAe,CAAC;AAE7D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC;AAE7D,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,EAAE;;iBACxD;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE;;AAEjD,SAAC,CAAC;QAGF,IAAQ,CAAA,QAAA,GAAG,kBAAkB;QAC7B,IAAiB,CAAA,iBAAA,GAAG,iBAAiB;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI;;iBAC7B;AACL,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe;;AAEjD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAExB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,EAAE;gBACvD,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC;;iBAC5B;AACL,gBAAA,OAAO,CAAC;;AAEZ,SAAC,CAAC;QAEF,IAAY,CAAA,YAAA,GAAG,IAAI,eAAe,CAAuB,oBAAoB,CAAC,MAAM,CAAC;AAErF,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,CAAC;AAE1C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE5D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;;iBAClD;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;;AAErD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE;;iBAC7C;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;;AAEhD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;AAEpE,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE;;iBACzD;AACL,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;;AAE5D,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAExC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW;AAEpD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE3C,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAU,MAAK;AAC7C,YAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACvE,SAAC,CAAC;AAKF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAE3F,IAAa,CAAA,aAAA,GAA4B,EAAE;AAE3C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAM,SAAS,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAClC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAChC,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AACvF,SAAC,CAAC,EACF,SAAS,CAAC,EAAE,IAAG;AACb,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE;AACzC,iBAAA,IAAI,CACH,UAAU,CAAC,GAAG,IAAG;AACf,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;aACf,CAAC,CACH;SACJ,CAAC,CACH;QAmHD,IAAI,CAAA,IAAA,GAAc,IAAI,SAAS,CAAC;YAC9B,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,OAAO,EAAE,IAAI,WAAW,EAAE;YAC1B,KAAK,EAAE,IAAI,WAAW,EAAE;YACxB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,MAAM,EAAE,IAAI,WAAW,EAAE;YACzB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,cAAc,EAAE,IAAI,WAAW,EAAE;YACjC,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,sBAAsB,EAAE,IAAI,WAAW,EAAE;YACzC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,aAAa,EAAE,IAAI,WAAW,EAAE;YAChC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,gBAAgB,EAAE,IAAI,WAAW,EAAE;YACnC,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,SAAS,EAAE,IAAI,SAAS,CAAC;gBACvB,IAAI,WAAW,CAAC,EAAE;aACnB;AACF,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAqD;AACpE,YAAA;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,YAAY,EAAE,CAAC;AACf,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,GAAG;AACV,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,gBAAgB,EAAE,IAAI,eAAe,CAAwB,EAAE,CAAC;AAChE,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;wBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,KAAK,EAAE,EAAE;wBACT,KAAK,EAAE,CAAC,UAAU,CAAC;AACnB,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,SAAS;AAC7C,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,iBAAiB,EAAE,IAAI,eAAe,CAAyB,EAAE,CAAC;AAClE,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;wBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC3C,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,oBAAoB,EAAE,GAAG;AACzB,wBAAA,WAAW,EAAE,8BAA8B;AAC3C,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,eAAe,EAAE,IAAI;AACrB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,aAAa;AACjD,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,gBAAgB;AAC7B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,QAAQ,EAAE,SAAS;AACnB,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,iBAAiB,EAAE;AACjB,4BAAA;AACE,gCAAA,IAAI,EAAE;AACJ,oCAAA;AACE,wCAAA;AACE,4CAAA,KAAK,EAAE,aAAa;AACpB,4CAAA,QAAQ,EAAE,EAAE;4CACZ,WAAW,EAAE,sBAAsB,CAAC,WAAW;AAC/C,4CAAA,IAAI,EAAE,MAAM;AACZ,4CAAA,KAAK,EAAE,EAAE;AACT,4CAAA,KAAK,EAAE;AACR;AACF;AACF;AACF;AACF;AACF,qBAAA;AACF;AACF,aAAA;SACF;AA6MD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACvG,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAEvG,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AA6RnH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAwHnF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa;QArhCtD,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB;;iBACxD;gBACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU;;AAEzD,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kCAAkC,EAAE;AAC7C,oBAAA,IAAI,CAAC,kCAAkC,CAAC,WAAW,EAAE;;AAEvD,gBAAA,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACpF,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACtD,iBAAC,CAAC;;AAEN,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE;;iBAClD;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;;AAErD,SAAC,CAAC;;;;;QAOF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CACzC,oBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,CAAC,IAAG;YACd,QAAQ,CAAC;AACP,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC3D;AACF,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBAChE;AACF,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC5D,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBAChE;;AAEN,SAAC,CAAC;;IAGK,QAAQ,GAAA;QACf,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAC7C;AACD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,EAAE;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA;AACE,oBAAA,KAAK,EAAE,wBAAwB;AAC/B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sBAAsB,CAAC,MAAM;oBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,oBAAA,UAAU,EAAE,EAAE;AACd,oBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,oBAAA,KAAK,EAAE,qBAAqB;AAC5B,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,8BAA8B;AACrC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;4BAC9B,YAAY,EAAE,gBAAgB,CAAC;AAChC;AACF,qBAAA;AACF;AACF,aAAA,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA;AACE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,8BAA8B;AACrC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;4BAC9B,YAAY,EAAE,gBAAgB,CAAC;AAChC;AACF,qBAAA;AACF;AACF,aAAA,CAAC;;;IAwUN,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;;aAC9B;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;;IAK9B,WAAW,CAAC,KAAgB,EAAE,OAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;;AAGzE,IAAA,UAAU,CAAC,KAAgB,EAAE,OAA2B,EAAE,OAAkC,EAAA;AAC1F,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IACE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,IAAI,KAAK,YAAY;AACtG,aAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,IAAI,KAAK,YAAY,CAAC,EACtG;AACA,YAAA,KAAK,CAAC,YAAa,CAAC,UAAU,GAAG,MAAM;;aAClC;AACL,YAAA,KAAK,CAAC,YAAa,CAAC,UAAU,GAAG,MAAM;;;AAK3C,IAAA,WAAW,CAAC,aAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI;;AAG1C,IAAA,WAAW,CAAC,aAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,KAAK;;AAG3C,IAAA,cAAc,CAAC,KAAgB,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;QACvF,KAAK,CAAC,cAAc,EAAE;;AAGtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;AAC9D,YAAA,IAAI,CAAC,QAAQ;gBAAE;AAEf,YAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,sBAAsB,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE;gBAC9F,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,wCAAwC,EAAE,YAAY,CAAC;;YAGhF,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACvD,YAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,GAAG,CAAC;YAE3E,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC;YAC/E,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAAE;YACpE,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAAE;AAErE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;AACtD,gBAAA,GAAG,QAAQ;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC1C,gBAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC1C,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,UAAU,CAAC;YAE/D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAElC,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE;;AAGvE,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;AAC5E,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa;YAC9D,IAAI,GAAG,EAAE;AACP,gBAAA,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAG/C,YAAA,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;AAErC,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;gBACtC,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ;AAAE,oBAAA,OAAO,QAAQ;gBAEzD,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ;AAClD,gBAAA,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;gBACjE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,CAAC;;AAE3E,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE;AACrE,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE;;AAG9F,gBAAA,IAAI,4BAA4B,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBACzD,MAAM,aAAa,GAAG,4BAA4B,CAAC,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC7F,UAAU,CAAC,KAAK,GAAG,CAAA,EAAG,UAAU,CAAC,KAAK,QAAQ;AAC9C,oBAAA,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK;AACzC,oBAAA,4BAA4B,CAAC,0BAA0B,CAAC,GAAG,EAAE,aAAa,CAAC;;gBAI7E,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAC/C,YAAY,EACZ,UAAU,CAAC,UAAU,IAAI,EAAE,EAC3B,KAAK,EACL,UAAU,CACX;AACH,iBAAC,CAAC;AAEF,gBAAA,OAAO,QAAQ;AACjB,aAAC,CAAC;YAEF,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,KAAK;YAC1E,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AAEpD,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;;;aAGlG;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE;AACpE,YAAA,IAAI,CAAC,QAAQ;gBAAE;YAEf,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,CAAC,YAAY,CAAC;YACrF,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAAE;YACpE,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAAE;AAErE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;AACtD,gBAAA,GAAG,QAAQ;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC1C,gBAAA,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAC1C,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;YAEF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAElC,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC;AAC1C,YAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,QAAQ,CAAC;AAC3D,YAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,UAAU,CAAC;AAC1D,YAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE;;iBAChE;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;;AAE5C,YAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5E,OAAO,CAAC,QAAQ,EAAE;AAElB,YAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B;AACxF,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB;AAE1E,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE;AACT,gBAAA,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGrD,YAAA,0BAA0B,CAAC,MAAM,CAAC,QAAQ,IAAG;AAE3C,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;gBACtC,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ;AAAE,oBAAA,OAAO,QAAQ;gBAEzD,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ;AAClD,gBAAA,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;AACjE,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC;AAC1E,gBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;;AAErE,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE;;AAGrE,gBAAA,IAAI,4BAA4B,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBACzD,MAAM,aAAa,GAAG,4BAA4B,CAAC,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC7F,UAAU,CAAC,KAAK,GAAG,CAAA,EAAG,UAAU,CAAC,KAAK,QAAQ;AAC9C,oBAAA,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK;AACzC,oBAAA,4BAA4B,CAAC,0BAA0B,CAAC,GAAG,EAAE,aAAa,CAAC;;gBAI7E,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAC/C,YAAY,EACZ,UAAU,CAAC,UAAU,IAAI,EAAE,EAC3B,IAAI,EACJ,UAAU,CACX;AACH,iBAAC,CAAC;AAEF,gBAAA,OAAO,QAAQ;AACjB,aAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS;AAChD,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,gBAAA,IAAI,CAAC,qBAAqB,CAAC,yCAAyC,EAAE;;iBACjE;gBACL,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,8BAA8B,EAAE,YAAY,CAAC;;YAGvE,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,KAAK;YAC1E,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;;;IAWxD,oBAAoB,GAAA;QAClB,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAI;AACjE,YAAA;AACE,gBAAA,OAAO,EAAE,CAAoB,kBAAA,CAAA;AAC7B,gBAAA,mBAAmB,EAAE,IAAI;AACzB,gBAAA,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE,aAAA;AACD,YAAA,GAAG,QAAQ;AACZ,SAAA,CAAC;;IAGJ,UAAU,GAAA;QACR,MAAM,0BAA0B,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;AAE7J,QAAA,0BAA0B,CAAC,MAAM,CAAC,QAAQ,IAAI;AAC5C,YAAA,GAAG,QAAQ;AACX,YAAA;AACE,gBAAA,OAAO,EAAE,CAAW,QAAA,EAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;gBACzC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE;AACF,SAAA,CAAC;;AAIJ,IAAA,aAAa,CAAC,YAAoB,EAAA;QAChC,MAAM,0BAA0B,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;AAC7J,QAAA,MAAM,QAAQ,GAAG,0BAA0B,EAAE;AAC7C,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;AAEtC,QAAA,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IACzC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAC1C;QAED,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,qEAAqE,CAAC;AAChG,YAAA,IAAI,CAAC,SAAS;gBAAE;;QAGlB,0BAA0B,CAAC,MAAM,CAAC,IAAI,IACpC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,YAAY,CAAC,CAC9C;;IAGH,SAAS,CAAC,YAAoB,EAAE,QAAgB,EAAA;QAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AAElE,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,GAAG,QAAQ,CAAC;AAErC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO;AAEjB,QAAA,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;QAE5D,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,iEAAiE,CAAC;AAC5F,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO;;QAGzB,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;YAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,KAAI;gBACpC,IAAI,IAAI,KAAK,YAAY;AAAE,oBAAA,OAAO,OAAO;gBAEzC,OAAO;AACL,oBAAA,GAAG,OAAO;oBACV,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,KAAK,QAAQ;iBACjE;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ,IAAA,MAAM,CAAC,YAAoB,EAAA;QACzB,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;AAChE,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;YACtC,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;;AAElF,YAAA,OAAO,QAAQ;AACjB,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,GAA+B,EAAE,YAAoB,EAAE,QAAgB,EAAA;QAE/E,MAAM,wBAAwB,GAAG,MAAK;AACpC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,IAAG;AACtE,oBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,wBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC;wBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,wBAAA,IAAI,CAAC,CAAC,IAAI,EAAE;AACV,4BAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACxB,gCAAA,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;oCAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACrC,oCAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wCAC3F,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAG;4CACxD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;gDAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC1D,4CAAA,OAAO,CAAC;AACV,yCAAC,CAAC;;AAEJ,oCAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wCAC7E,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAG;4CACnD,IAAI,CAAC,CAAC,CAAC;AAAE,gDAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACnC,4CAAA,OAAO,CAAC;AACV,yCAAC,CAAC;;;AAGR,6BAAC,CAAC;;;AAIN,oBAAA,OAAO,QAAQ;AACjB,iBAAC,CAAC;;iBACG;gBACL,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;AAChE,oBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,wBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC;wBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC,wBAAA,IAAI,CAAC,CAAC,IAAI,EAAE;AACV,4BAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACxB,gCAAA,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;oCAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACrC,oCAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wCACrF,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAG;4CACxD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;gDAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC1D,4CAAA,OAAO,CAAC;AACV,yCAAC,CAAC;;AAEJ,oCAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;wCACvE,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAG;4CACnD,IAAI,CAAC,CAAC,CAAC;AAAE,gDAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACnC,4CAAA,OAAO,CAAC;AACV,yCAAC,CAAC;;;AAGR,6BAAC,CAAC;;;AAIN,oBAAA,OAAO,QAAQ;AACjB,iBAAC,CAAC;;AAEN,SAAC;QAED,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE;QAEnC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGzE,QAAA,IAAI,QAAQ,GAAG,EAAE,EAAE;AACjB,YAAA,MAAM,SAAS,GAAG,EAAE,GAAG,QAAQ;YAC/B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;AACpF,YAAA,wBAAwB,EAAE;YAC1B;;;AAIF,QAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM;AAE9B,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;;gBAEf,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;AACzB,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC/D,gBAAA,wBAAwB,EAAE;gBAC1B;;AAGF,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;;AAEf,gBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACxC,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC/D,gBAAA,wBAAwB,EAAE;gBAC1B;;AAGF,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;;AAEf,gBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACxC,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC/D,gBAAA,wBAAwB,EAAE;gBAC1B;;;YAIF;;;QAIF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAChD,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAC7D;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO;AAE1C,QAAA,OAAO,CAAC,QAAQ,IAAI,CAAC;AACrB,QAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;;AAGjE,IAAA,6BAA6B,CAAC,CAAiB,EAAA;QAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,kBAAkB,EAAE;YACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,kBAAkB,CAAC,OAAO,EAAE;AACrE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC;gBACjH,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE5D,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;;aAC9K,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,WAAW,EAAE;;;IAK3D,YAAY,GAAA;QACV,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;;AAGlE,IAAA,eAAe,CAAC,CAAM,EAAA;AACpB,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;AAGnC,IAAA,aAAa,CAAC,YAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;AACpE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE1F,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE;;AAET,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE;AAC9C,gBAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ;;;AAK9D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AACnD,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,gBAAA,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACjD,gBAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,IAAI;;;;IAMnC,aAAa,CAAC,YAAoB,EAAE,QAAgB,EAAA;AAClD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1F,QAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAEhF,QAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAExC,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ;QAEvB,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;AAE5C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;IAGnC,UAAU,CAAC,YAAoB,EAAE,QAAgB,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1F,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;AAChE,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC;AAClB,iBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBACxB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAE7B,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,QAAQ;YAE1C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEjD,MAAM,UAAU,GACd,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;iBACnD,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AAEvD,YAAA,MAAM,UAAU,GAAoB;;AAElC,gBAAA,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;AAC9B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,QAAQ,EAAE;aACX;AAED,YAAA,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AAErC,YAAA,OAAO,QAAQ;AACjB,SAAC,CAAC;;AAKJ,IAAA,mBAAmB,CAAC,IAAqB,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;AAEjG,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;YAChE,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YACxD,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAExD,YAAA,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;YAC/D,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;;aAEvD;;;;;;AAOL,YAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;YACxC,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1D,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC/B,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClD,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClD,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;AACzD,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC/B,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3D,YAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC;;;AAKpD,IAAA,WAAW,CAAC,GAA+B,EAAE,YAAoB,EAAE,QAAgB,EAAE,QAAgB,EAAA;AAEnG,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,MAAM,KAAK,GAAoB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO;AACpC,QAAA,IAAI,CAAC,cAAc;YAAE;QAErB,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB;QACvJ,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa;QAElI,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE;AAE1D,QAAA,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,SAAS;AAExF,QAAA,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,oBAAoB,EAAE,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,qBAAqB,CAAC,yCAAyC,EAAE;;IAGxE,gBAAgB,CAAC,KAAa,EAAE,KAAU,EAAA;QACxC,MAAM,UAAU,GAAI,KAAK,CAAC,MAAsB,CAAC,SAAS,CAAC,IAAI,EAAE;AACjE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,IAAG;AACtE,gBAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,UAAU;AACpC,gBAAA,OAAO,QAAQ;AACjB,aAAC,CAAC;;aACG;YACL,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;AAChE,gBAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,UAAU;AACpC,gBAAA,OAAO,QAAQ;AACjB,aAAC,CAAC;;;IAIN,qBAAqB,CAAC,IAAqB,EAAE,KAAY,EAAA;AACvD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAqB;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;;QAGzC,IAAI,CAAC,OAAQ,CAAC,KAAK,GAAG,QAAQ,IAAI,eAAe;QAEjD,IAAI,CAAC,qBAAqB,EAAE;;IAG9B,SAAS,CAAC,YAAoB,EAAE,QAAgB,EAAA;QAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AAC/I,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,MAAM,MAAM,GAAmB;AAC7B,YAAA,KAAK,EAAE;gBACL,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AACjD;SACF;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;AAE5C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;;aACnE;AACL,YAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;;;IAKtE,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,EAAE;AACxE,YAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC;AACtE,YAAA,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;YACxE,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AACvE,YAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;;aAClE;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AAClE,YAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;;;AAItE,IAAA,UAAU,CAAC,OAA4C,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;QAEjD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAa,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;;AAKvG,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;;AAGvC,IAAA,iBAAiB,CAAC,CAAM,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;;IAGrC,YAAY,GAAA;QACV,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;8GA3pC7C,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9FzC,q3VA2KC,EDlHG,MAAA,EAAA,CAAA,o1UAAA,EAAA,kuKAAA,EAAA,2iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,sEACP,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAMT,qBAAqB,EACrB,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,qbAGnB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGhB,oBAAoB,EAYpB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,8IACjB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAQV,CAAC,kBAAkB,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAzCxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EACjB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,SAAS;wBACT,YAAY;wBACZ,gBAAgB;wBAChB,kCAAkC;wBAClC,yBAAyB;wBACzB,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,iBAAiB;wBACjB,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,8BAA8B;wBAC9B,qBAAqB;wBACrB,uBAAuB;wBACvB,uBAAuB;wBACvB,uBAAuB;wBACvB,0BAA0B;wBAC1B,gBAAgB;wBAChB,0BAA0B;wBAC1B,qBAAqB;wBACrB,iBAAiB;wBACjB,oBAAoB;qBACrB,EAOW,UAAA,EAAA,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAA,q3VAAA,EAAA,MAAA,EAAA,CAAA,o1UAAA,EAAA,kuKAAA,EAAA,2iCAAA,CAAA,EAAA;;;AE7E3B,MAAM,SAAS,GAAG;IACvB,iBAAiB;IACjB,uBAAuB;IACvB,cAAc;IACd,oBAAoB;IACpB,SAAS;IACT,eAAe;IACf,qBAAqB;IACrB,2BAA2B;CACnB;MAiBG,8BAA8B,CAAA;AAb3C,IAAA,WAAA,GAAA;QAcE,IAAK,CAAA,KAAA,GAAG,KAAK,EAAqB;AAElC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;;AAGnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB;AAC5C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB;AACxD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa;AACtC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc;AACxC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpD,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B;AAEhE,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB;;AAGtD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC1D,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAChE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACvD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC7D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAClD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACxD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC9D,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAE5D,QAAA,IAAA,CAAA,OAAO,GAA8C;YAC3D,eAAe,EAAE,IAAI,CAAC,oBAAoB;YAC1C,qBAAqB,EAAE,IAAI,CAAC,0BAA0B;YACtD,YAAY,EAAE,IAAI,CAAC,iBAAiB;YACpC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB;YAChD,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,aAAa,EAAE,IAAI,CAAC,kBAAkB;YACtC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB;YAClD,yBAAyB,EAAE,IAAI,CAAC,8BAA8B;SAC/D;AAoBF;AAlBC,IAAA,UAAU,CAAC,IAAa,EAAA;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAA,CAAE,CAAC;YACjD;;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;;IAG9B,iBAAiB,GAAA;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,EACd,IAAI,CAAC,KAAK,EAAE,KAAK;AACf,cAAE,IAAI,CAAC,GAAG,CAAC;AACX,cAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAC9B;;AAGH,IAAA,eAAe;8GAxDJ,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC3C,+wHA6EM,ED7CF,MAAA,EAAA,CAAA,uhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,kIAChB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMX,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAb1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAC3B,OAAA,EAAA;wBACP,QAAQ;wBACR,gBAAgB;wBAChB,YAAY;wBACZ,SAAS;wBACT,oBAAoB;qBACrB,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+wHAAA,EAAA,MAAA,EAAA,CAAA,uhBAAA,CAAA,EAAA;;;MEVpC,kCAAkC,CAAA;;AAc7C,IAAA,WAAA,GAAA;AAZA,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACnC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AACzB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB;AACpD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc;AACxC,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB;QAE9D,IAAW,CAAA,WAAA,GAAa,EAAE;QAC1B,IAAW,CAAA,WAAA,GAAa,EAAE;AAIxB,QAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC;AAE7D;;;;;;;;;;;;;;;AAeE;;IAGJ,OAAO,GAAA;QACL,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG1C,gCAAgC,GAAA;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;;8GAxC7D,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EC3B/C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+3CAkCM,EDlBF,MAAA,EAAA,CAAA,mrBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,QAAQ,EACR,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAY,EAEZ,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oCAAoC,EACpC,QAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,EAC5B,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,iFACrB,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKrB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAf9C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EACxB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,QAAQ;wBACR,YAAY;wBACZ,+BAA+B;wBAC/B,oCAAoC;wBACpC,4BAA4B;wBAC5B,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,+3CAAA,EAAA,MAAA,EAAA,CAAA,mrBAAA,CAAA,EAAA;;;AEyEG,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AA+ExD,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;QA7E/B,IAAU,CAAA,UAAA,GAAG,KAAK,EAAW;QAC7B,IAAG,CAAA,GAAA,GAAG,KAAK,EAAsB;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAAa,cAAc,CAAC;AAErD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA2B,eAAe,CAAC;AAE7D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC;QAG7D,IAAQ,CAAA,QAAA,GAAG,kBAAkB;QAC7B,IAAiB,CAAA,iBAAA,GAAG,iBAAiB;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI;;iBAC7B;AACL,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe;;AAEjD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAExB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,EAAE;gBACvD,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC;;iBAC5B;AACL,gBAAA,OAAO,CAAC;;AAEZ,SAAC,CAAC;QAEF,IAAY,CAAA,YAAA,GAAG,IAAI,eAAe,CAAuB,oBAAoB,CAAC,MAAM,CAAC;AAErF,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,CAAC;AAE1C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC5D,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE3C,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAU,MAAK;AAC7C,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAC7F,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU;AAClD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB;AAE9D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAE3F,IAAa,CAAA,aAAA,GAA4B,EAAE;AAE3C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAM,SAAS,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAClC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAChC,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AACvF,SAAC,CAAC,EACF,SAAS,CAAC,EAAE,IAAG;AACb,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE;AACzC,iBAAA,IAAI,CACH,UAAU,CAAC,GAAG,IAAG;AACf,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;aACf,CAAC,CACH;SACJ,CAAC,CACH;QAqFD,IAAI,CAAA,IAAA,GAAc,IAAI,SAAS,CAAC;YAC9B,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,OAAO,EAAE,IAAI,WAAW,EAAE;YAC1B,KAAK,EAAE,IAAI,WAAW,EAAE;YACxB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,MAAM,EAAE,IAAI,WAAW,EAAE;YACzB,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,cAAc,EAAE,IAAI,WAAW,EAAE;YACjC,SAAS,EAAE,IAAI,WAAW,EAAE;YAC5B,sBAAsB,EAAE,IAAI,WAAW,EAAE;YACzC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,aAAa,EAAE,IAAI,WAAW,EAAE;YAChC,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,gBAAgB,EAAE,IAAI,WAAW,EAAE;YACnC,QAAQ,EAAE,IAAI,WAAW,EAAE;YAC3B,UAAU,EAAE,IAAI,WAAW,EAAE;YAC7B,SAAS,EAAE,IAAI,SAAS,CAEpB;AACF,gBAAA,IAAI,SAAS,CAAC;oBACZ,SAAS,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;iBACtD,CAAC;aACH;AACF,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAqD;AACpE,YAAA;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,YAAY,EAAE,CAAC;AACf,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,GAAG;AACV,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,gBAAgB,EAAE,IAAI,eAAe,CAAwB,EAAE,CAAC;AAChE,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;wBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,KAAK,EAAE,EAAE;wBACT,KAAK,EAAE,CAAC,UAAU,CAAC;AACnB,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,SAAS;AAC7C,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,iBAAiB,EAAE,IAAI,eAAe,CAAyB,EAAE,CAAC;AAClE,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;wBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,IAAI,eAAe,CAAQ,EAAE,CAAC;AAC3C,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,oBAAoB,EAAE,GAAG;AACzB,wBAAA,WAAW,EAAE,8BAA8B;AAC3C,wBAAA,QAAQ,EAAE,IAAI;AACf;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,eAAe,EAAE,IAAI;AACrB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,aAAa;AACjD,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,gBAAgB;AAC7B,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,QAAQ,EAAE,SAAS;AACnB,wBAAA,WAAW,EAAE,YAAY;AACzB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACF;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,QAAQ,EAAE,EAAE;wBACZ,WAAW,EAAE,sBAAsB,CAAC,UAAU;AAC9C,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,KAAK,EAAE,EAAE;AACT,wBAAA,WAAW,EAAE,WAAW;AACxB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,iBAAiB,EAAE;AACjB,4BAAA;AACE,gCAAA,IAAI,EAAE;AACJ,oCAAA;AACE,wCAAA;AACE,4CAAA,KAAK,EAAE,WAAW;AAClB,4CAAA,QAAQ,EAAE,EAAE;4CACZ,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,4CAAA,IAAI,EAAE,MAAM;AACZ,4CAAA,KAAK,EAAE,EAAE;AACT,4CAAA,KAAK,EAAE;AACR;AACF;AACF;AACF;AACF;AACF,qBAAA;AACF;AACF,aAAA;SACF;AAqCD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACvG,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAEvG,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAsBnH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AA0FnF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa;QA9iBtD,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CACzC,oBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,CAAC,IAAG;YACd,QAAQ,CAAC;AACP,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC3D;AACF,gBAAA,KAAK,IAAI;oBACP,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBAChE;AACF,gBAAA,KAAK,QAAQ;oBACX,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC5D,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBAChE;;AAEN,SAAC,CAAC;;IAGK,QAAQ,GAAA;QACf,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAC7C;AACD,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,EAAE;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA;AACE,oBAAA,KAAK,EAAE,wBAAwB;AAC/B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sBAAsB,CAAC,MAAM;oBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,oBAAA,UAAU,EAAE,EAAE;AACd,oBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,oBAAA,KAAK,EAAE,qBAAqB;AAC5B,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,8BAA8B;AACrC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;4BAC9B,YAAY,EAAE,gBAAgB,CAAC;AAChC;AACF,qBAAA;AACF;AACF,aAAA,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,gBAAA;AACE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,8BAA8B;AACrC,oBAAA,QAAQ,EAAE,EAAE;oBACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;4BAC9B,YAAY,EAAE,gBAAgB,CAAC;AAChC;AACF,qBAAA;AACF;AACF,aAAA,CAAC;;;IA4UN,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;;aAC9B;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;;AAK9B,IAAA,WAAW,CAAC,KAAgB,EAAE,OAAyB,EAAE,QAAiB,EAAA;QACxE,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC;;AAIjE,IAAA,UAAU,CAAC,KAAgB,EAAE,OAA2B,EAAE,OAAkC,EAAA;AAC1F,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IACE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,IAAI,KAAK,YAAY;AACtG,aAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,IAAI,KAAK,YAAY,CAAC,EACtG;AACA,YAAA,KAAK,CAAC,YAAa,CAAC,UAAU,GAAG,MAAM;;aAClC;AACL,YAAA,KAAK,CAAC,YAAa,CAAC,UAAU,GAAG,MAAM;;;AAK3C,IAAA,WAAW,CAAC,aAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI;;AAG1C,IAAA,WAAW,CAAC,aAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,KAAK;;AAQ3C,IAAA,6BAA6B,CAAC,CAAiB,EAAA;QAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,kBAAkB,EAAE;YACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,kBAAkB,CAAC,OAAO,EAAE;AACrE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,CAAC;gBACjH,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE5D,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;;aAC9K,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,WAAW,EAAE;;;IAK3D,YAAY,GAAA;QACV,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC;;AAGlE,IAAA,eAAe,CAAC,CAAM,EAAA;AACpB,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;IAKnC,eAAe,GAAA;QAEb,UAAU,CAAC,MAAK;AAEd,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAG;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AAC1D,oBAAA,OAAO,CAAC,GAAG,CAAC,yGAAyG,CAAC;oBACtH,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,CACxC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAClE;AACD,oBAAA,IAAI,CAAC,qBAAqB,CAAC,mCAAmC,EAAE;oBAChE,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAC/D,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAClD,YAAY,CACb,CAAC;;aAGL,CAAC,CACH;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAEtB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;oBAC9B,IAAI,EAAE,GAAW,GAAG;AACpB,oBAAA,IAAI;wBACF,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClB,wBAAA,OAAO,CAAC,GAAG,CAAC,gHAAgH,CAAC;wBAC7H,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,KAAK;AACzD,4BAAA,GAAG,QAAQ;4BACX;AACD,yBAAA,CAAC,CAAC;;oBACH,OAAO,GAAQ,EAAE;wBACjB,IAAI,SAAS,EAAE,EAAE;AACf,4BAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,0BAA0B,CAAC;;wBAGrE;;AAGF,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;iBAExB,CAAC,CACH;;AAIH,YAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AAElF,SAAC,CAAC;;AAIJ,IAAA,qBAAqB,CAAC,OAAyB,EAAA;QAC7C,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,IAAG;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AACvD,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,QAAQ;;YAG1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAQ,EAAE,OAAO,CAAC;AACrC,YAAA,OAAO,QAAQ;AACjB,SAAC,CAAC;;AAGJ,IAAA,IAAI,yBAAyB,GAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE;AAEvD,QAAA,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;QAGtD,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;IAG3D,qBAAqB,GAAA;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,EAAE;AAClE,QAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;;AAGpE,IAAA,UAAU,CAAC,OAA4C,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;QAEjD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAa,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;;AAKvG,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;;AAGvC,IAAA,iBAAiB,CAAC,CAAM,EAAA;AACtB,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;;IAGrC,YAAY,GAAA;QACV,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;8GA3oB7C,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EChGpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4nJA6FM,EDnCF,MAAA,EAAA,CAAA,8uTAAA,EAAA,kuKAAA,EAAA,2iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAEP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,EAC5B,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kCAAkC,EAClC,QAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAInB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAEhB,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EAWpB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EAUX,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,kBAAkB,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAErB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1CnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACX,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,SAAS;wBACT,gBAAgB;wBAChB,8BAA8B;wBAC9B,4BAA4B;wBAC5B,kCAAkC;wBAClC,yBAAyB;wBACzB,uBAAuB;wBACvB,qBAAqB;wBACrB,mBAAmB;wBACnB,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,iBAAiB;wBACjB,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,8BAA8B;wBAC9B,qBAAqB;wBACrB,uBAAuB;wBACvB,uBAAuB;wBACvB,uBAAuB;wBACvB,0BAA0B;wBAC1B,gBAAgB;wBAChB,0BAA0B;wBAC1B,qBAAqB;wBACrB,iBAAiB;wBACjB,oBAAoB;qBACrB,EAOW,UAAA,EAAA,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAA,4nJAAA,EAAA,MAAA,EAAA,CAAA,8uTAAA,EAAA,kuKAAA,EAAA,2iCAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"ngx-histaff-alpha-core-form-design.component-BbMhVVY9.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/animations/slide-animations.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-field-helper.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/base-props/base-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/email-props/email-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/email-props/email-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/calculated-props/calculated-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/calculated-props/calculated-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting-props.registry.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/props-host/props-host.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/enums/EnumLeftPanelMode.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-control-palette/core-form-array-control-palette.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-control-palette/core-form-array-control-palette.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-group-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-group-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design-monitor/core-form-design-monitor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design-monitor/core-form-design-monitor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-layout-editor/core-form-array-layout-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-array-layout-editor/core-form-array-layout-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.html"],"sourcesContent":["import { trigger, transition, style, animate, state } from '@angular/animations';\r\n\r\nexport const slideFromTopFadeIn = trigger('slideFromTopFadeIn', [\r\n state('in', style({ opacity: 1, transform: 'translateY(0)' })),\r\n state('out', style({ opacity: 0, transform: 'translateY(-50vh)' })),\r\n transition('out => in', [\r\n animate('200ms ease-out')\r\n ]),\r\n transition('in => out', [\r\n animate('150ms ease-in')\r\n ])\r\n]);","import { AfterViewInit, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\n\r\n@Component({\r\n selector: 'save-live-json',\r\n imports: [],\r\n templateUrl: './save-live-json.component.html',\r\n styleUrl: './save-live-json.component.scss'\r\n})\r\nexport class SaveLiveJsonComponent implements AfterViewInit, OnDestroy {\r\n public fds = inject(CoreFormDesignService);\r\n cdr = inject(ChangeDetectorRef);\r\n wfs = inject(CoreWorkflowService);\r\n\r\n\r\n\r\n copyToClipboard() {\r\n navigator.clipboard.writeText(this.fds.$saveLiveJson());\r\n }\r\n \r\n download() {\r\n const blob = new Blob([this.fds.$saveLiveJson()], { type: 'application/json' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = `${this.fds.$afInstance().name || 'form'}.json`;\r\n link.click();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.wfs.$initialFormDesignJson.set('{}');\r\n }\r\n}\r\n","<pre class=\"json-preview\">{{ fds.$saveLiveJson() }}</pre>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, HostListener, inject, signal, WritableSignal } from '@angular/core';\r\nimport { CoreFormDesignService, READONLY_WORKFLOW_FIELDS } from '../core-form-design.service';\r\nimport { CoreFormComponent } from '../../core-form/core-form/core-form.component';\r\nimport { FormControlStatus, FormGroup } from '@angular/forms';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { BehaviorSubject, catchError, Observable, of } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreButtonGroupVnsComponent } from '../../core-button-group-vns/core-button-group-vns/core-button-group-vns.component';\r\nimport { SaveLiveJsonComponent } from '../save-live-json/save-live-json.component';\r\nimport { ICoreChecklistOption } from '../../core-checklist/core-checklist/core-checklist.component';\r\nimport { ICoreButtonVNS } from '../../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { noneAutoClosedAlertOptions } from '../../../constants/alertOptions';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\nimport { Router } from '@angular/router';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\n\r\n@Component({\r\n selector: 'form-metadata',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TranslatePipe,\r\n CorePageHeaderComponent,\r\n CoreFormComponent,\r\n SaveLiveJsonComponent,\r\n CoreButtonGroupVnsComponent\r\n ],\r\n templateUrl: './form-metadata.component.html',\r\n styleUrl: './form-metadata.component.scss'\r\n})\r\nexport class FormMetadataComponent extends BaseEditComponent implements AfterViewInit {\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n wfs = inject(CoreWorkflowService);\r\n cdr = inject(ChangeDetectorRef);\r\n alertService = inject(AlertService);\r\n router = inject(Router);\r\n appConfigService = inject(AppConfigService)\r\n override form: FormGroup<any> = this.coreFormDesignService.formMetadata;\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscape() {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n @HostListener('window:click', ['$event'])\r\n onWindowClick(_: MouseEvent) {\r\n /*\r\n Trigger\tWhat Happens\r\n 🖱️ First Click:\tOpens checklist overlay, but Angular hasn’t re-checked the DOM yet → markForCheck() is called, but view not updated yet\r\n🖱️ Second Click:\tNow DOM is updated, click is registered inside the actual rendered checklist, interaction works\r\n */\r\n //This lets Angular finish updating the DOM before running change detection.\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n\r\n mode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.UPDATE)\r\n\r\n formStatus!: FormControlStatus;\r\n\r\n customButtonChecklistOptions$ = this.coreFormDesignService.formMetadataCustomButtonChecklistOptions$;\r\n\r\n $sections = this.coreFormDesignService.$formMetadataSections;\r\n\r\n $isInWorkflowDesign = this.coreFormDesignService.$isInWorkflowDesign;\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n private mls: MultiLanguageService\r\n ) {\r\n super(dialogService);\r\n effect(() => {\r\n if (this.coreFormDesignService.$shouldPatchMetadataForm()) {\r\n this.patchFormFromInstance();\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(false); // ✅ reset\r\n }\r\n });\r\n\r\n effect(() => {\r\n const isInWorkflowDesign = this.$isInWorkflowDesign();\r\n\r\n if (isInWorkflowDesign) {\r\n\r\n READONLY_WORKFLOW_FIELDS.forEach(x => {\r\n const control = this.form.get(x);\r\n control?.disable();\r\n })\r\n } else {\r\n }\r\n })\r\n\r\n }\r\n\r\n patchFormFromInstance(): void {\r\n const instance = this.coreFormDesignService.$afInstance();\r\n\r\n this.form.patchValue({\r\n name: instance.name,\r\n captionCode: instance.captionCode,\r\n entityTable: instance.entityTable ?? '',\r\n\r\n submitApi: instance.submitApi,\r\n postSubmitRoute: instance.postSubmitRoute ?? '',\r\n postCancelRoute: instance.postCancelRoute ?? '',\r\n\r\n normalMode: instance.normalMode ?? false,\r\n autoGetByIdOff: instance.autoGetByIdOff ?? false,\r\n hasIdOfStringType: instance.hasIdOfStringType ?? false,\r\n\r\n customFormButtonItems: instance.customFormButtonItems ?? [],\r\n\r\n crudCreate: instance.crud?.c ?? '',\r\n crudRead: instance.crud?.r ?? '',\r\n crudUpdate: instance.crud?.u ?? '',\r\n crudDelete: instance.crud?.d ?? '',\r\n crudReadChildren: instance.crud?.rChildren ?? '',\r\n\r\n entityUniqueIndexesJson: JSON.stringify(instance.entityUniqueIndexes ?? [])\r\n });\r\n }\r\n\r\n customButtons: EnumCoreButtonVNSCode[] = [\r\n EnumCoreButtonVNSCode.NONE_HEADER_SAVE,\r\n ]\r\n\r\n\r\n onButtonClick(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.NONE_HEADER_SAVE) {\r\n if (this.form.valid) {\r\n this.$loading.set(true);\r\n\r\n const apiObject: Observable<any> = this.coreFormDesignService.editMode$.value === EnumCorePageEditMode.CREATE ?\r\n this.coreFormDesignService.createFormInstance(this.coreFormDesignService.$afInstance()) :\r\n this.coreFormDesignService.updateFormInstance(this.coreFormDesignService.$afInstance())\r\n const apiObservable = apiObject.pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n\r\n this.alertService.error(msg, noneAutoClosedAlertOptions);\r\n return of(msg);\r\n })\r\n )\r\n\r\n apiObservable.subscribe(x => {\r\n\r\n this.$loading.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n })\r\n } else {\r\n this.coreFormDesignService.formMetadataCheckError$.next(true);\r\n setTimeout(() => this.cdr.markForCheck())\r\n setTimeout(() => this.coreFormDesignService.formMetadataCheckError$.next(false), 5000)\r\n }\r\n }\r\n }\r\n\r\n onClose(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n onSave(e: any): void {\r\n\r\n }\r\n\r\n onFormCreated(event: { formName: string; formGroup: FormGroup }) {\r\n const form = event.formGroup;\r\n\r\n form.get('normalMode')?.valueChanges.subscribe(x => {\r\n this.coreFormDesignService.$liveFormNormalMode.set(!!x)\r\n })\r\n\r\n form.get('customFormButtonItems')?.valueChanges.subscribe(x => {\r\n if (Array.isArray(x)) {\r\n this.coreFormDesignService.$customFormButtonItems.set(x)\r\n } else {\r\n this.coreFormDesignService.$customFormButtonItems.set(undefined)\r\n }\r\n })\r\n\r\n const widthField = form.get('width');\r\n if (!!widthField) {\r\n widthField.valueChanges.subscribe(width => {\r\n console.warn(`WAR [width$] changed explicitly:`, width);\r\n });\r\n } else {\r\n console.warn(`WAR [widthField] not found`);\r\n }\r\n\r\n\r\n form.valueChanges.subscribe(value => {\r\n\r\n console.warn('[width] from form.valueChanges', value?.width);\r\n\r\n const current = this.coreFormDesignService.$afInstance();\r\n\r\n const {\r\n crudCreate,\r\n crudRead,\r\n crudUpdate,\r\n crudDelete,\r\n crudReadChildren,\r\n // ES6 destructuring: Pull id out of the object and throw it away under the name _ignored — don’t include it in rest\r\n id: _ignored,\r\n ...rest\r\n } = value;\r\n\r\n const updatedCrud = {\r\n ...current.crud,\r\n ...(crudCreate !== undefined ? { c: crudCreate } : {}),\r\n ...(crudRead !== undefined ? { r: crudRead } : {}),\r\n ...(crudUpdate !== undefined ? { u: crudUpdate } : {}),\r\n ...(crudDelete !== undefined ? { d: crudDelete } : {}),\r\n ...(crudReadChildren !== undefined ? { rChildren: crudReadChildren } : {})\r\n };\r\n\r\n const next = {\r\n ...current,\r\n ...rest,\r\n width: rest.width ?? current.width, // That way, rogue undefined values can’t silently override valid ones.\r\n crud: updatedCrud\r\n };\r\n console.log(\"[FormMetadataComponent][onFormCreated]: $afInstance is being set on form.valueChanges\");\r\n this.coreFormDesignService.$afInstance.set(next);\r\n });\r\n\r\n form.statusChanges.subscribe(status => {\r\n // Optional: Save status if you want to show error summary, disable save button, etc.\r\n this.formStatus = status; // string: 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED'\r\n });\r\n\r\n this.form = form;\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Defer to next tick to avoid ExpressionChangedAfterItHasBeenCheckedError\r\n\r\n this.$isInWorkflowDesign.set(this.router.url.includes('/workflow/design'));\r\n\r\n setTimeout(() => {\r\n\r\n const allButtons = Object.values(EnumCoreButtonVNSCode);\r\n\r\n const noneHeaderOptions: ICoreChecklistOption[] = allButtons\r\n .filter(value => value.startsWith('NONE_HEADER_') && value !== 'NONE_HEADER_IMPORT_OPTION')\r\n .map(value => ({\r\n value,\r\n text: this.mls.trans(value),\r\n checked: false\r\n }));\r\n\r\n this.customButtonChecklistOptions$.next(noneHeaderOptions);\r\n\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n // 🔥 DO NOT READ this.$afInstance()\r\n console.log(\"[FormMetadataComponent][ngAfterViewInit]: $afInstance is being updated\");\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n formDesignSections: sections\r\n }));\r\n\r\n // Inform Angular to re-check since values arrived late\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n\r\n}\r\n","<div class=\"form-metadata-container\">\r\n\r\n <div class=\"metadata-body\">\r\n\r\n <div class=\"header-n-form\">\r\n\r\n @if (!$isInWorkflowDesign()) {\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"d-flex d-flex-start w-100 pr1rem\">\r\n <core-button-group-vns [showCaption]=\"true\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"customButtons\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"header-wrapper\">\r\n <core-page-header [title]=\"'FORM OVERVIEW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"close-wrapper\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n } \r\n\r\n\r\n\r\n <div class=\"af-instance\">\r\n\r\n <div class=\"af-instance-left\">\r\n <core-form \r\n [inputSections]=\"$sections()\" \r\n [width]=\"800\" \r\n [mode$]=\"mode$\" \r\n [checkError$]=\"coreFormDesignService.formMetadataCheckError$\"\r\n [hideButtons]=\"true\" \r\n [forceCreateNewForm]=\"true\"\r\n [hideDevSector]=\"!!$isInWorkflowDesign()\"\r\n (onFormCreated)=\"onFormCreated($event)\" />\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n @if (!$isInWorkflowDesign()) {\r\n <div class=\"af-instance-right\">\r\n <save-live-json></save-live-json>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces'; \r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\nimport { IFormDesignRow } from '../../../interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AttachmentFieldHelperService {\r\n\r\n static isAttachment(control: IFormBaseControl): boolean {\r\n return control.controlType === 'ATTACHMENT';\r\n }\r\n\r\n static autoGenerateAttachmentNames(baseName: string): {\r\n field: string;\r\n assignTo: string;\r\n } {\r\n return {\r\n field: baseName + 'Buffer',\r\n assignTo: baseName\r\n };\r\n }\r\n\r\n static buildHiddenAssignToField(baseFieldName: string): IFormBaseControl {\r\n return {\r\n field: baseFieldName,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n label: '',\r\n value: '',\r\n hidden: true,\r\n flexSize: 0\r\n };\r\n }\r\n\r\n static injectAssignToFieldIntoRow(row: IFormDesignRow, assignToField: IFormBaseControl): void {\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: assignToField.flexSize ?? 12, control: assignToField });\r\n }\r\n\r\n /**\r\n * Called when user edits the \"field\" of an ATTACHMENT control\r\n */\r\n static handleFieldNameChangeForAttachment(\r\n control: IFormBaseControl,\r\n form: IFormBaseControl[],\r\n typedFieldName: string\r\n ): void {\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(typedFieldName);\r\n control.field = field;\r\n control.assignTo = assignTo;\r\n }\r\n\r\n /**\r\n * Called in drop handler when user drops a new ATTACHMENT\r\n */\r\n static setupAttachmentOnDrop(\r\n newControl: IFormBaseControl,\r\n form: IFormBaseControl[]\r\n ): void {\r\n if (this.isAttachment(newControl)) {\r\n const baseName = newControl.field.replace(/Buffer$/, '');\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(baseName);\r\n newControl.field = field;\r\n newControl.assignTo = assignTo;\r\n }\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, Input, input, isDevMode } from '@angular/core';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { IFormBaseControl } from '../../../core-form/core-form/enum-interfaces';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions, noneAutoClosedAlertOptions } from '../../../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'base-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: './base-props.component.html'\r\n})\r\nexport abstract class BasePropsComponent extends BaseComponent {\r\n\r\n @Input() isNested = false;\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n\r\n $selectedCell = computed(() => {\r\n if (this.isNested) {\r\n return this.coreFormDesignService.$nestedSelectedCell();\r\n } else {\r\n return this.coreFormDesignService.$selectedCell();\r\n }\r\n })\r\n $formContext = computed(() => {\r\n if (this.isNested) {\r\n return this.coreFormDesignService.$nestedFormContext();\r\n } else {\r\n return this.coreFormDesignService.$formContext();\r\n }\r\n })\r\n\r\n form = this.isNested ? this.coreFormDesignService.nestedFormDesign : this.coreFormDesignService.formDesign;\r\n\r\n patchControl = this.coreFormDesignService.patchControl.bind(this.coreFormDesignService);\r\n normalize = this.coreFormDesignService.normalize.bind(this.coreFormDesignService);\r\n\r\n cdr = inject(ChangeDetectorRef);\r\n as = inject(AlertService);\r\n\r\n setControlProp<K extends keyof IFormBaseControl>(\r\n key: K,\r\n value: IFormBaseControl[K]\r\n ): void {\r\n const nestedValue = this.isNested;\r\n // if (isDevMode()) {\r\n // this.as.error(`[BasePropsComponent] forwarding ${key}, nested=${nestedValue} from ${this.constructor.name}`, noneAutoClosedAlertOptions)\r\n // }\r\n this.coreFormDesignService.setControlProp(key, value, nestedValue);\r\n }\r\n\r\n selectedCellRuntimeId!: string;\r\n control!: IFormBaseControl;\r\n nestedSelectedCellRuntimeId!: string;\r\n nestedControl!: IFormBaseControl;\r\n\r\n $control = computed<IFormBaseControl>(() => {\r\n const isNested = this.isNested;\r\n let control = isNested ? this.coreFormDesignService.$nestedControl() : this.coreFormDesignService.$control();\r\n if (!control) {\r\n control = this.coreFormDesignService.normalize({});\r\n }\r\n //console.log(\"🔴 BasePropsComponent computed $control value\", control);\r\n return control;\r\n });\r\n\r\n // constructor(public override mls: MultiLanguageService) {\r\n\r\n // super(mls);\r\n\r\n // effect(() => {\r\n // const nested = this.isNested;\r\n // if (nested && isDevMode()) {\r\n // this.as.warn(\"$isNested in BasePropsComponent is also set to true\", noneAutoClosedAlertOptions);\r\n // }\r\n // })\r\n // }\r\n\r\n}","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AttachmentFieldHelperService } from '../type-specific/attachment-props/attachment-field-helper.service';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { NgStyle } from '@angular/common';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions } from '../../../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'mandatory-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgStyle, FormsModule],\r\n templateUrl: './mandatory-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class MandatoryPropsComponent extends BasePropsComponent {\r\n\r\n $fieldInputRef = viewChild<ElementRef>('fieldInput');\r\n\r\n afs = inject(CoreFormDesignService);\r\n\r\n $isNormalField = computed(() => {\r\n if (this.isNested) {\r\n return this.afs.$nestedControl()?.type !== 'calculated'\r\n } else {\r\n return this.afs.$control()?.type !== 'calculated'\r\n }\r\n })\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n const field = AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n return field;\r\n });\r\n\r\n /*\r\n onFieldChange(val: string) {\r\n this.setControlProp('field', val);\r\n\r\n const expected = this.$typedField();\r\n const actual = this.$fieldInputRef()?.nativeElement.value;\r\n\r\n if (!!actual && actual !== expected) {\r\n console.warn('Manual fix: input mismatch detected. Forcing value reset.');\r\n this.$fieldInputRef()!.nativeElement.value = expected;\r\n }\r\n }\r\n */\r\n\r\n onFieldChange(val: string) {\r\n let nextVal = val;\r\n\r\n if (!this.isCamelCase(val)) {\r\n const fixed = this.toCamelCase(val);\r\n\r\n this.as.warn(`[FormDesign] Field name \"${val}\" is not camelCase. Auto-corrected to \"${fixed}\".`, alertOptions);\r\n\r\n nextVal = fixed;\r\n\r\n // fix input UI ngay lập tức\r\n const inputEl = this.$fieldInputRef()?.nativeElement;\r\n if (inputEl) {\r\n inputEl.value = fixed;\r\n }\r\n }\r\n\r\n // cập nhật state chuẩn hoá\r\n this.setControlProp('field', nextVal);\r\n\r\n // safety net: sync ngược nếu DOM lệch state\r\n const expected = this.$typedField();\r\n const actual = this.$fieldInputRef()?.nativeElement.value;\r\n\r\n if (!!actual && actual !== expected) {\r\n this.as.warn('[FormDesign] Manual fix: input mismatch detected. Forcing value reset.', alertOptions);\r\n this.$fieldInputRef()!.nativeElement.value = expected;\r\n }\r\n }\r\n\r\n private isCamelCase(value: string): boolean {\r\n return /^[a-z][a-zA-Z0-9]*$/.test(value);\r\n }\r\n\r\n private toCamelCase(value: string): string {\r\n return value\r\n .trim()\r\n .replace(/[_\\-\\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : '')\r\n .replace(/^[A-Z]/, c => c.toLowerCase());\r\n }\r\n\r\n}\r\n","<div class=\"setting-group mandatory-group\" [ngStyle]=\"{ padding: '15px', maxWidth: '352px' }\">\r\n\r\n <div class=\"setting-row\">\r\n <label>Field</label>\r\n <input #fieldInput class=\"form-control\" type=\"text\" \r\n [ngModel]=\"$typedField()\" \r\n (ngModelChange)=\"onFieldChange($event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Label</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.label\" (ngModelChange)=\"setControlProp('label', $event)\" />\r\n </div>\r\n\r\n @if ($isNormalField()) {\r\n\r\n <div class=\"setting-row\">\r\n <label>Flex Size</label>\r\n <input class=\"form-control\" type=\"number\" [ngModel]=\"$control()?.flexSize\" (ngModelChange)=\"setControlProp('flexSize', $event)\" />\r\n </div>\r\n\r\n @if ($control()?.controlType !== 'FORM_ARRAY') {\r\n <div class=\"setting-row\">\r\n <label>Default</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.value\" (ngModelChange)=\"setControlProp('value', $event)\" />\r\n </div>\r\n }\r\n }\r\n\r\n</div>","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumCoreTablePipeType } from '../../../core-table/EnumCoreTablePipeType';\r\nimport { ICoreDropdownOption } from '../../../../interfaces/ICoreDropdownOption';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreDropdownComponent } from '../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'optional-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreCheckboxComponent,\r\n CoreDropdownComponent\r\n ],\r\n templateUrl: './optional-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class OptionalPropsComponent extends BasePropsComponent {\r\n\r\n pipeOptions = Object.values(EnumCoreTablePipeType);\r\n\r\n pipeOptions$ = new BehaviorSubject<ICoreDropdownOption[]>(\r\n Object.values(EnumCoreTablePipeType).map(x => ({ value: x, text: x }))\r\n )\r\n\r\n}","<div class=\"setting-group optional-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Readonly</label>\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"$control().readonly\" (ngModelChange)=\"setControlProp('readonly', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Hidden</label>\r\n <core-checkbox [ngModel]=\"$control().hidden\" (ngModelChange)=\"setControlProp('hidden', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Disabled</label>\r\n <core-checkbox [ngModel]=\"$control().disabled\" (ngModelChange)=\"setControlProp('disabled', $event)\" /> \r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Hint</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().hint\" (ngModelChange)=\"setControlProp('hint', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Pipe</label>\r\n <div class=\"control-wrapper\">\r\n <core-dropdown [ngModel]=\"$control().pipe\" (ngModelChange)=\"setControlProp('pipe', $event)\"\r\n [paramMode]=\"true\"\r\n [options$]=\"pipeOptions$\"\r\n >\r\n </core-dropdown>\r\n </div>\r\n </div>\r\n\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'number-props',\r\n imports: [NgStyle],\r\n templateUrl: './number-props.component.html',\r\n styleUrl: './number-props.component.scss'\r\n})\r\nexport class NumberPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<div class=\"number-props-container\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'email-props',\r\n imports: [],\r\n templateUrl: './email-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class EmailPropsComponent {\r\n\r\n}\r\n","<p>email-props works!</p>\r\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CoreDropdownComponent } from '../../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { CoreCheckboxComponent } from '../../../../core-checkbox/core-checkbox/core-checkbox.component';\r\n\r\n@Component({\r\n selector: 'dropdown-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreCheckboxComponent,\r\n CoreDropdownComponent,\r\n ],\r\n templateUrl: './dropdown-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class DropdownPropsComponent extends BasePropsComponent {\r\n\r\n jsonPayload: string = '';\r\n\r\n httpVerbOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n {\r\n value: 'HttpGet',\r\n text: 'GET'\r\n },\r\n {\r\n value: 'HttpPost',\r\n text: 'POST'\r\n }\r\n ])\r\n\r\n onPayloadJsonBlur(): void {\r\n try {\r\n const optionHttpPayload = JSON.parse(this.jsonPayload);\r\n this.setControlProp('optionHttpPayload', optionHttpPayload)\r\n } catch (e) {\r\n console.warn('⚠️ Invalid JSON payload');\r\n }\r\n }\r\n}\r\n","<div class=\"setting-group dropdown-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Use API</label>\r\n <core-checkbox [ngModel]=\"$control().optionApiDriven\" (ngModelChange)=\"setControlProp('optionApiDriven', $event)\" />\r\n </div>\r\n\r\n @if (!!$control().optionApiDriven) {\r\n <div class=\"setting-row\">\r\n <label>API Endpoint</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionApi\" (ngModelChange)=\"setControlProp('optionApi', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>HTTP Verb</label>\r\n <div class=\"control-wrapper\">\r\n <core-dropdown [ngModel]=\"$control().optionHttpVerb\" (ngModelChange)=\"setControlProp('optionHttpVerb', $event)\" [paramMode]=\"true\"\r\n [options$]=\"httpVerbOptions$\">\r\n </core-dropdown>\r\n </div>\r\n </div>\r\n\r\n @if ($control().optionHttpVerb === 'HttpPost') {\r\n <div class=\"setting-row\">\r\n <label>Payload (JSON)</label>\r\n <div class=\"control-wrapper\">\r\n <textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"jsonPayload\" (ngModelChange)=\"onPayloadJsonBlur()\"></textarea>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"setting-row\">\r\n <label>Value Field</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionValueFrom\" (ngModelChange)=\"setControlProp('optionValueFrom', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Text Field</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().optionTextFrom\" (ngModelChange)=\"setControlProp('optionTextFrom', $event)\" />\r\n </div>\r\n }\r\n</div>","import { Component } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'form-array-props',\r\n imports: [],\r\n templateUrl: './form-array-props.component.html',\r\n styleUrl: './form-array-props.component.scss'\r\n})\r\nexport class FormArrayPropsComponent extends BasePropsComponent {\r\n\r\n openDesigner() {\r\n const control = this.coreFormDesignService.$control();\r\n if (control?.controlType === EnumFormBaseContolType.FORM_ARRAY) {\r\n\r\n\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$showFormArrayDesign.set(true);\r\n\r\n // Since $nestedDesignSections is of type WritableSignal<ICoreFormSection[] | null>\r\n // if set (not null), we use @if in parent conponent (CoreFormDesignComponent template)\r\n // to display a popup containing CoreFormArrayLayoutEditorComponent\r\n }\r\n }\r\n}\r\n"," <div class=\"mt-3 d-flex d-flex-center\">\r\n <button class=\"btn btn-outline-primary\" (click)=\"openDesigner()\">\r\n Design Nested Layout\r\n </button>\r\n </div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'textarea-props',\r\n imports: [],\r\n templateUrl: './textarea-props.component.html',\r\n styleUrl: './textarea-props.component.scss'\r\n})\r\nexport class TextareaPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>textarea-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'checklist-props',\r\n imports: [],\r\n templateUrl: './checklist-props.component.html',\r\n styleUrl: './checklist-props.component.scss'\r\n})\r\nexport class ChecklistPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>checklist-props works!</p>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { EnumFilterOperator } from '../../../../../interfaces/IQueryListRequest';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SeekerPropsService {\r\n\r\n // ============================================================\r\n // CONSTANT OPTIONS (đưa hết vào service)\r\n // ============================================================\r\n readonly sourceTypeOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n { value: EnumCoreFormControlSeekerSourceType.JOB_SEEK, text: 'Job Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK, text: 'Employee Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.CONTRACT_SEEK, text: 'Contract Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.WORKING_SEEK, text: 'Working Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.WAGE_SEEK, text: 'Wage Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.POSITION_SEEK, text: 'Position Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.POSITION_CONCURRENT_SEEK, text: 'Concurrent Position Seek' },\r\n // { value: EnumCoreFormControlSeekerSourceType.ORGANIZATION_UNIT_SEEK, text: 'Org Unit Seek' }, // TO DO LATER\r\n { value: EnumCoreFormControlSeekerSourceType.COM_UNIT_SEEK, text: 'Company Unit Seek' },\r\n { value: EnumCoreFormControlSeekerSourceType.TOPICPICKER, text: 'Topic Picker' },\r\n { value: EnumCoreFormControlSeekerSourceType.FORM_SEEK, text: 'Form Seek' },\r\n ]);\r\n\r\n readonly filterOperatorOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([\r\n { value: EnumFilterOperator.EQUAL, text: '==' },\r\n { value: EnumFilterOperator.NOT_EQUAL, text: '!=' },\r\n { value: EnumFilterOperator.GREATER_THAN_OR_EQUAL, text: '>=' },\r\n { value: EnumFilterOperator.LESS_THAN_OR_EQUAL, text: '<=' },\r\n { value: EnumFilterOperator.GREATER_THAN, text: '>' },\r\n { value: EnumFilterOperator.LESS_THAN, text: '<' },\r\n ]);\r\n\r\n // ============================================================\r\n // HELPERS\r\n // ============================================================\r\n extractArray<T>(input: BehaviorSubject<T[]> | T[] | undefined): T[] {\r\n if (!input) return [];\r\n if (input instanceof BehaviorSubject) return input.getValue() ?? [];\r\n return input;\r\n }\r\n\r\n extractObject<T>(input: BehaviorSubject<T> | T | undefined): T {\r\n if (!input) return {} as T;\r\n if (input instanceof BehaviorSubject) return input.getValue();\r\n return input;\r\n }\r\n\r\n wrapArray<T>(arr: T[]): BehaviorSubject<T[]> {\r\n return new BehaviorSubject<T[]>(arr);\r\n }\r\n\r\n wrapObject<T>(obj: T): BehaviorSubject<T> {\r\n return new BehaviorSubject<T>(obj);\r\n }\r\n\r\n addItem<T>(source: T[], newItem: T): T[] {\r\n return [...source, newItem];\r\n }\r\n\r\n updateItem<T>(source: T[], index: number, updated: Partial<T>): T[] {\r\n const arr = [...source];\r\n arr[index] = { ...(arr[index] as any), ...updated } as T;\r\n return arr;\r\n }\r\n\r\n removeItem<T>(source: T[], index: number): T[] {\r\n const arr = [...source];\r\n arr.splice(index, 1);\r\n return arr;\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, computed, inject, input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { SeekerPropsService } from './seeker-props.service';\r\n\r\nimport { CoreDropdownComponent } from '../../../../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreCheckboxComponent } from '../../../../core-checkbox/core-checkbox/core-checkbox.component';\r\n\r\nimport { EnumFilterOperator, IFilterOperator } from '../../../../../interfaces/IQueryListRequest';\r\nimport { ICoreTableColumnItem } from '../../../../core-table/ICoreTableColumnItem';\r\nimport { ICoreFormSection } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'seeker-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreDropdownComponent,\r\n CoreCheckboxComponent,\r\n ],\r\n templateUrl: './seeker-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class SeekerPropsComponent extends BasePropsComponent {\r\n\r\n readonly svc = inject(SeekerPropsService);\r\n\r\n // -----------------------------------------------------------\r\n // BASIC CSV\r\n // -----------------------------------------------------------\r\n $useTheseColumnsCsv = computed(() => (this.$control()?.useTheseColumns ?? []).join(', '));\r\n $excludedColumnsCsv = computed(() => (this.$control()?.excludedColumns ?? []).join(', '));\r\n\r\n onUseColumnsChanged(raw: string) {\r\n const arr = raw.split(',').map(x => x.trim()).filter(Boolean);\r\n this.setControlProp('useTheseColumns', arr);\r\n }\r\n\r\n onExcludedColumnsChanged(raw: string) {\r\n const arr = raw.split(',').map(x => x.trim()).filter(Boolean);\r\n this.setControlProp('excludedColumns', arr);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // ALSO BIND TO\r\n // -----------------------------------------------------------\r\n $alsoBind = computed(() =>\r\n this.svc.extractArray(this.$control()?.alsoBindTo)\r\n );\r\n\r\n addAlsoBindRow() {\r\n const next = this.svc.addItem(this.$alsoBind(), { takeFrom: '', bindTo: '' });\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n updateAlsoBindRow(i: number, key: 'takeFrom' | 'bindTo', v: string) {\r\n const next = this.svc.updateItem(this.$alsoBind(), i, { [key]: v });\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n removeAlsoBindRow(i: number) {\r\n const next = this.svc.removeItem(this.$alsoBind(), i);\r\n this.setControlProp('alsoBindTo', next);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // OUTER PARAM (JSON)\r\n // -----------------------------------------------------------\r\n $outerParam = computed(() =>\r\n this.svc.extractObject(this.$control()?.___preDefinedOuterParam)\r\n );\r\n\r\n $outerParamJson = computed(() =>\r\n JSON.stringify(this.$outerParam(), null, 2)\r\n );\r\n\r\n onOuterParamJsonChange(raw: string) {\r\n try {\r\n const parsed = JSON.parse(raw);\r\n this.setControlProp('preDefinedOuterParam$', this.svc.wrapObject(parsed));\r\n } catch { }\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // OUTER FILTER (RuleTree mini)\r\n // -----------------------------------------------------------\r\n $outerFilter = computed<IFilterOperator[]>(() =>\r\n this.svc.extractArray(this.$control()?.___preDefinedOuterFilter)\r\n );\r\n\r\n addOuterFilter() {\r\n const next = this.svc.addItem(this.$outerFilter(), {\r\n field: '',\r\n operator: EnumFilterOperator.EQUAL,\r\n dateTimeValue: null\r\n });\r\n\r\n // (1) metadata / design (LƯU JSON)\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n\r\n // (2) runtime (KHÔNG LƯU JSON)\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n updateOuterFilter(i: number, key: keyof IFilterOperator, v: any) {\r\n const next = this.svc.updateItem(this.$outerFilter(), i, { [key]: v });\r\n\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n removeOuterFilter(i: number) {\r\n const next = this.svc.removeItem(this.$outerFilter(), i);\r\n\r\n this.setControlProp('___preDefinedOuterFilter', next);\r\n this.$control().preDefinedOuterFilter$?.next(next);\r\n }\r\n\r\n\r\n // -----------------------------------------------------------\r\n // EXTENDED COLUMNS\r\n // -----------------------------------------------------------\r\n $extendedColumns = computed<ICoreTableColumnItem[]>(() =>\r\n this.svc.extractArray(this.$control()?.multiModeExtendedColumns)\r\n );\r\n\r\n addExtendedColumn() {\r\n const next = this.svc.addItem(this.$extendedColumns(), {\r\n caption: '',\r\n field: '',\r\n type: 'string',\r\n align: 'left',\r\n width: 120,\r\n hidden: false,\r\n translate: false\r\n });\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n updateExtendedColumn(i: number, key: keyof ICoreTableColumnItem, v: any) {\r\n const next = this.svc.updateItem(this.$extendedColumns(), i, { [key]: v });\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n removeExtendedColumn(i: number) {\r\n const next = this.svc.removeItem(this.$extendedColumns(), i);\r\n this.setControlProp('multiModeExtendedColumns', next);\r\n }\r\n\r\n // -----------------------------------------------------------\r\n // EXTENDED SECTIONS\r\n // -----------------------------------------------------------\r\n $extendedSections = computed<ICoreFormSection[]>(() =>\r\n this.svc.extractArray(this.$control()?.multiModeExtendedSections)\r\n );\r\n\r\n addExtendedSection() {\r\n const next = this.svc.addItem(this.$extendedSections(), {\r\n caption: 'New Section',\r\n rows: []\r\n });\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n\r\n updateExtendedSection(i: number, caption: string) {\r\n const next = this.svc.updateItem(this.$extendedSections(), i, { caption });\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n\r\n removeExtendedSection(i: number) {\r\n const next = this.svc.removeItem(this.$extendedSections(), i);\r\n this.setControlProp('multiModeExtendedSections', next);\r\n }\r\n}\r\n","<div class=\"setting-group seeker-group\" [style.padding.px]=\"15\">\r\n\r\n <div class=\"setting-row\">\r\n Basic Settings\r\n </div>\r\n \r\n\r\n <div class=\"setting-row\">\r\n <label>Source Type</label>\r\n <core-dropdown\r\n [options$]=\"svc.sourceTypeOptions$\"\r\n [paramMode]=\"true\"\r\n [ngModel]=\"$control().seekerSourceType\"\r\n (ngModelChange)=\"setControlProp('seekerSourceType', $event)\">\r\n </core-dropdown>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Multi Mode</label>\r\n <core-checkbox\r\n [ngModel]=\"$control().multiMode\"\r\n (ngModelChange)=\"setControlProp('multiMode', $event)\">\r\n </core-checkbox>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Hide Org Tree</label>\r\n <core-checkbox\r\n [ngModel]=\"$control().hideOrgTree\"\r\n (ngModelChange)=\"setControlProp('hideOrgTree', $event)\">\r\n </core-checkbox>\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Source Space Height</label>\r\n <input class=\"form-control\"\r\n type=\"number\"\r\n [ngModel]=\"$control().sourceSpaceHeight\"\r\n (ngModelChange)=\"setControlProp('sourceSpaceHeight', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Bound From</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$control().boundFrom\"\r\n (ngModelChange)=\"setControlProp('boundFrom', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Shown From</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$control().shownFrom\"\r\n (ngModelChange)=\"setControlProp('shownFrom', $event)\" />\r\n </div>\r\n\r\n <!-- <div class=\"setting-row\">\r\n <label>Use These Columns (CSV)</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$useTheseColumnsCsv()\"\r\n (ngModelChange)=\"onUseColumnsChanged($event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Excluded Columns (CSV)</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"$excludedColumnsCsv()\"\r\n (ngModelChange)=\"onExcludedColumnsChanged($event)\" />\r\n </div> -->\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- ALSO BIND TO -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Also Bind To\r\n </div>\r\n \r\n <button class=\"btn-add\" (click)=\"addAlsoBindRow()\">+ Add Mapping</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>takeFrom</th>\r\n <th>bindTo</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (item of $alsoBind(); track $index) {\r\n <tr>\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"item.takeFrom\"\r\n (ngModelChange)=\"updateAlsoBindRow($index, 'takeFrom', $event)\" />\r\n </td>\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"item.bindTo\"\r\n (ngModelChange)=\"updateAlsoBindRow($index, 'bindTo', $event)\" />\r\n </td>\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeAlsoBindRow($index)\">x</button>\r\n </td>\r\n </tr>\r\n }\r\n </table>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- OUTER PARAM -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Outer Param JSON\r\n </div>\r\n\r\n <textarea class=\"form-control\"\r\n [style.height.px]=\"140\"\r\n [ngModel]=\"$outerParamJson()\"\r\n (ngModelChange)=\"onOuterParamJsonChange($event)\">\r\n </textarea>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- OUTER FILTER -->\r\n <!-- ================================================ -->\r\n <div class=\"setting-row\">\r\n Outer Filter (RuleTree Mini)\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addOuterFilter()\">+ Add Filter</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>Field</th>\r\n <th>Operator</th>\r\n <th>Value</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (f of $outerFilter(); track $index) {\r\n <tr>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"f.field\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'field', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <core-dropdown\r\n [options$]=\"svc.filterOperatorOptions$\"\r\n [ngModel]=\"f.operator\"\r\n [paramMode]=\"true\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'operator', $event)\">\r\n </core-dropdown>\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n type=\"text\"\r\n [ngModel]=\"f.dateTimeValue\"\r\n (ngModelChange)=\"updateOuterFilter($index, 'dateTimeValue', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeOuterFilter($index)\">x</button>\r\n </td>\r\n\r\n </tr>\r\n }\r\n </table>\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- EXTENDED COLUMNS -->\r\n <!-- ================================================ -->\r\n <!-- <div class=\"setting-row\">\r\n Extended Columns\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addExtendedColumn()\">+ Add Column</button>\r\n\r\n <table class=\"mini-table\">\r\n <tr>\r\n <th>Caption</th>\r\n <th>Field</th>\r\n <th>Type</th>\r\n <th>Align</th>\r\n <th>Width</th>\r\n <th>Hidden</th>\r\n <th>Translate</th>\r\n <th></th>\r\n </tr>\r\n\r\n @for (c of $extendedColumns(); track $index) {\r\n <tr>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.caption\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'caption', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.field\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'field', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.type\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'type', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input class=\"form-control\"\r\n [ngModel]=\"c.align\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'align', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <input type=\"number\"\r\n class=\"form-control\"\r\n [ngModel]=\"c.width\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'width', $event)\" />\r\n </td>\r\n\r\n <td>\r\n <core-checkbox\r\n [ngModel]=\"c.hidden\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'hidden', $event)\">\r\n </core-checkbox>\r\n </td>\r\n\r\n <td>\r\n <core-checkbox\r\n [ngModel]=\"c.translate\"\r\n (ngModelChange)=\"updateExtendedColumn($index, 'translate', $event)\">\r\n </core-checkbox>\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-remove\" (click)=\"removeExtendedColumn($index)\">x</button>\r\n </td>\r\n\r\n </tr>\r\n }\r\n </table> -->\r\n\r\n\r\n <!-- ================================================ -->\r\n <!-- EXTENDED SECTIONS -->\r\n <!-- ================================================ -->\r\n <!-- <div class=\"setting-row\">\r\n Extended Sections\r\n </div>\r\n\r\n <button class=\"btn-add\" (click)=\"addExtendedSection()\">+ Add Section</button>\r\n\r\n @for (s of $extendedSections(); track $index) {\r\n <div class=\"section-box\">\r\n\r\n <div class=\"setting-row\">\r\n <label>Caption</label>\r\n <input class=\"form-control\"\r\n [ngModel]=\"s.caption\"\r\n (ngModelChange)=\"updateExtendedSection($index, $event)\" />\r\n </div>\r\n\r\n <button class=\"btn-remove\"\r\n (click)=\"removeExtendedSection($index)\">\r\n Remove\r\n </button>\r\n\r\n </div>\r\n } -->\r\n\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'datepicker-props',\r\n imports: [],\r\n templateUrl: './datepicker-props.component.html',\r\n styleUrl: './datepicker-props.component.scss'\r\n})\r\nexport class DatepickerPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>datepicker-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'grid-buffer-props',\r\n imports: [],\r\n templateUrl: './grid-buffer-props.component.html',\r\n styleUrl: './grid-buffer-props.component.scss'\r\n})\r\nexport class GridBufferPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>grid-buffer-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'list-props',\r\n imports: [],\r\n templateUrl: './list-props.component.html',\r\n styleUrl: './list-props.component.scss'\r\n})\r\nexport class ListPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>list-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'mcc-props',\r\n imports: [],\r\n templateUrl: './mcc-props.component.html',\r\n styleUrl: './mcc-props.component.scss'\r\n})\r\nexport class MccPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>mcc-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'radio-group-props',\r\n imports: [],\r\n templateUrl: './radio-group-props.component.html',\r\n styleUrl: './radio-group-props.component.scss'\r\n})\r\nexport class RadioGroupPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>radio-group-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'uploader-props',\r\n imports: [],\r\n templateUrl: './uploader-props.component.html',\r\n styleUrl: './uploader-props.component.scss'\r\n})\r\nexport class UploaderPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>uploader-props works!</p>\r\n","import { Component, computed } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { AttachmentFieldHelperService } from './attachment-field-helper.service';\r\n\r\n\r\n@Component({\r\n selector: 'attachment-props',\r\n imports: [],\r\n templateUrl: './attachment-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class AttachmentPropsComponent extends BasePropsComponent {\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n return AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n });\r\n\r\n setTypedField(val: string): void {\r\n const control = this.$control();\r\n const context = this.$formContext();\r\n\r\n if (AttachmentFieldHelperService.isAttachment(control)) {\r\n AttachmentFieldHelperService.handleFieldNameChangeForAttachment(control, context, val);\r\n } else {\r\n control.field = val;\r\n }\r\n\r\n this.patchControl(control, this.isNested);\r\n }\r\n\r\n}","<p>attachment-props works!</p>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, inject, signal, TemplateRef, viewChild, WritableSignal } from '@angular/core';\r\nimport { CoreStickerCollectionComponent } from '../../../core-sticker-collection/core-sticker-collection.component';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreWorkflowService } from '../../../core-workflow-builder/core-workflow.service';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject, catchError, of } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IGptAskRequest } from '../../../../interfaces/IGptAskRequest';\r\nimport { GptService } from '../../../../services/gpt.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions } from '../../../../constants/alertOptions';\r\nimport { NgStyle } from '@angular/common';\r\nimport { IWorkflowSchemaTable } from '../../../core-workflow-builder/interfaces/IWorkflowSchema';\r\nimport { DbService, IGetWorkflowSchemaRequest } from '../../../../services/db.service';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\n\r\n@Component({\r\n selector: 'calculated-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n CoreStickerCollectionComponent,\r\n CoreRadioGroupComponent,\r\n ],\r\n templateUrl: './calculated-props.component.html',\r\n styleUrls: ['./calculated-props.component.scss']\r\n})\r\nexport class CalculatedPropsComponent extends BasePropsComponent implements AfterViewInit {\r\n\r\n $shortHtmlHintForCSharpSyntax = viewChild<TemplateRef<any>>('shortHtmlHintForCSharpSyntax');\r\n $shortHtmlHintForSqlSyntax = viewChild<TemplateRef<any>>('shortHtmlHintForSqlSyntax');\r\n\r\n $loading = signal(false);\r\n $beingValidated = signal(false);\r\n public wfs = inject(CoreWorkflowService);\r\n public fds = inject(CoreFormDesignService);\r\n dbs = inject(DbService);\r\n gpt = inject(GptService);\r\n alertService = inject(AlertService);\r\n //$control = this.fds.$control;\r\n\r\n $sqlScriptError: WritableSignal<string | null> = signal(null);\r\n\r\n $aiGeneratorOn = signal(false);\r\n $selectedTables = signal<IWorkflowSchemaTable[]>([]);\r\n $generatedScript = signal('');\r\n $sqlPrompt = signal('');\r\n\r\n $selectedTablesForAi = computed(() => {\r\n const selectedTables: IWorkflowSchemaTable[] = this.$selectedTables();\r\n\r\n if (!selectedTables.length) return 'No tables selected.';\r\n\r\n let result = 'Consider the following database tables and columns:\\n\\n';\r\n\r\n for (const table of selectedTables) {\r\n result += `Table: ${table.table}\\n`;\r\n\r\n const activeColumns = table.columns.filter(c => c.isActive);\r\n for (const col of activeColumns) {\r\n const hint = col.hintForAi?.trim();\r\n result += ` - ${col.column}` + (hint ? ` (${hint})` : '') + `\\n`;\r\n }\r\n\r\n result += '\\n';\r\n }\r\n\r\n return result.trim();\r\n });\r\n\r\n radioOptions$ = new BehaviorSubject<ICoreRadioOption[]>([\r\n {\r\n value: 'in-memory',\r\n text: 'In Memory',\r\n htmlTooltip: this.$shortHtmlHintForCSharpSyntax()\r\n },\r\n {\r\n value: 'sql-query',\r\n text: 'SQL Query',\r\n htmlTooltip: this.$shortHtmlHintForSqlSyntax()\r\n },\r\n ]);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n const shortHtmlHintForCSharpSyntax = this.$shortHtmlHintForCSharpSyntax();\r\n const shortHtmlHintForSqlSyntax = this.$shortHtmlHintForSqlSyntax();\r\n\r\n if (!!shortHtmlHintForCSharpSyntax && !!shortHtmlHintForSqlSyntax) {\r\n this.radioOptions$.next(\r\n [\r\n {\r\n value: 'in-memory',\r\n text: 'In Memory',\r\n htmlTooltip: shortHtmlHintForCSharpSyntax\r\n },\r\n {\r\n value: 'sql-query',\r\n text: 'SQL Query',\r\n htmlTooltip: shortHtmlHintForSqlSyntax\r\n },\r\n ]\r\n )\r\n }\r\n })\r\n\r\n }\r\n\r\n $fields = computed(() => {\r\n const currentField = this.fds.$control()?.field;\r\n return this.wfs.$availableCols().filter(c => c.field !== currentField).map(c => ({ field: c.field }));\r\n })\r\n\r\n loadDbSchema(): void {\r\n const fullRequest: IGetWorkflowSchemaRequest = {};\r\n this.subscriptions.push(\r\n this.dbs.syncAndGetWorkflowSchemaMetadata(fullRequest).pipe(\r\n catchError(() => of({ ok: false, status: 500 })),\r\n )\r\n .subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.wfs.$workflowDbSchema.set(x.body.innerBody.items)\r\n }\r\n })\r\n )\r\n }\r\n\r\n toTables(names: string[]): IWorkflowSchemaTable[] {\r\n const allTables = this.wfs.$workflowDbSchema(); // All available tables\r\n return allTables.filter(table => names.includes(table.table));\r\n }\r\n\r\n\r\n validateScript(e: any): void {\r\n\r\n e.stopPropagation();\r\n\r\n const control = this.fds.$control();\r\n\r\n if (!control) {\r\n this.alertService.info(`No current control detected`);\r\n return;\r\n }\r\n if (!control!.script) {\r\n this.alertService.info(`There is no script to validate for ${control.field}`)\r\n return;\r\n }\r\n\r\n if (!control!.returnType) {\r\n this.alertService.info(`You should set return type for ${control!.field}`)\r\n return;\r\n }\r\n\r\n const evalMode = this.fds.$control()?.evaluationMode;\r\n\r\n if (!evalMode) {\r\n this.alertService.error('Please select avaluation mode', alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGptAskRequest = {\r\n input: control.script,\r\n context: this.getValidationContextByMode(evalMode),\r\n purpose: 'validate-calculated-field',\r\n isSystemPrompt: true\r\n };\r\n\r\n this.$beingValidated.set(true);\r\n\r\n this.subscriptions.push(\r\n this.gpt.askGpt(request).pipe(\r\n catchError(err => {\r\n this.$beingValidated.set(false);\r\n this.alertService.error('Validation failed.');\r\n return of({ ok: false, status: 500 });\r\n })\r\n ).subscribe(x => {\r\n this.$beingValidated.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const reply = x.body.innerBody?.trim();\r\n this.alertService.success(`GPT: ${reply}`);\r\n } else {\r\n this.alertService.error('Could not validate script.');\r\n }\r\n })\r\n );\r\n }\r\n\r\n generateScript(): void {\r\n this.$aiGeneratorOn.update(current => !current);\r\n }\r\n\r\n applyGeneratedSql(): void {\r\n const generated = this.$generatedScript();\r\n if (!generated) return;\r\n\r\n this.setControlProp('script', generated);\r\n this.alertService.success('Script applied from AI.');\r\n this.$aiGeneratorOn.set(false);\r\n }\r\n\r\n\r\n submitScriptPrompt(): void {\r\n const control = this.fds.$control();\r\n const evalMode = control?.evaluationMode;\r\n const prompt = this.$sqlPrompt().trim();\r\n const dependsOn = control?.dependsOn ?? [];\r\n const selectedTables = this.$selectedTables();\r\n\r\n if (!evalMode) {\r\n this.alertService.warn('Please select an evaluation mode.');\r\n return;\r\n }\r\n\r\n if (!prompt) {\r\n this.alertService.warn('Please enter a description for the AI to generate your script.');\r\n return;\r\n }\r\n\r\n if (dependsOn.length === 0) {\r\n this.alertService.warn('Please select at least one field that the script depends on.');\r\n return;\r\n }\r\n\r\n if (evalMode === 'sql-query') {\r\n if (!selectedTables.length) {\r\n this.alertService.warn('Please select at least one table.');\r\n return;\r\n }\r\n\r\n const tablesWithNoHint = selectedTables\r\n .filter(t => !t.hintForAi?.trim())\r\n .map(t => t.table);\r\n\r\n if (tablesWithNoHint.length > 0) {\r\n this.alertService.warn(\r\n `Please provide a hint for the following table(s): ${tablesWithNoHint.join(', ')}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n // 🧠 Construct prompt\r\n const dependsOnLine = `The script should depend on: ${dependsOn.join(', ')}.`;\r\n const contextIntro = this.getContextByMode(evalMode);\r\n const tableContext = this.$selectedTablesForAi(); // nicely formatted\r\n const fullPrompt = `${prompt}\\n\\n${dependsOnLine}\\n\\n${tableContext}`;\r\n\r\n const request: IGptAskRequest = {\r\n input: fullPrompt,\r\n context: contextIntro,\r\n purpose: 'generate-calculated-field',\r\n isSystemPrompt: true\r\n };\r\n\r\n this.$loading.set(true);\r\n\r\n this.subscriptions.push(\r\n this.gpt.askGpt(request).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n this.alertService.error('AI generation failed.');\r\n return of({ ok: false, status: 500 });\r\n })\r\n ).subscribe(res => {\r\n this.$loading.set(false);\r\n\r\n if (res.ok && res.status === 200 && res.body?.statusCode === 200) {\r\n const reply = res.body.innerBody?.trim();\r\n if (reply) {\r\n this.$generatedScript.set(reply);\r\n } else {\r\n this.alertService.warn('AI returned an empty result.');\r\n }\r\n } else {\r\n this.alertService.error('AI could not generate a valid script.');\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n $placeholderForScriptInput = computed<string>(() => {\r\n switch (this.fds.$control()?.evaluationMode) {\r\n case 'in-memory':\r\n return 'Enter expression formula';\r\n case 'sql-query':\r\n return 'Enter SQL script';\r\n default:\r\n return 'Please select Evaluation Mode'\r\n }\r\n })\r\n\r\n tableCheckedChange(selected: string[]): void {\r\n this.$selectedTables.set(this.toTables(selected));\r\n }\r\n\r\n getContextByMode(mode: 'sql-query' | 'in-memory'): string[] {\r\n if (mode === 'sql-query') {\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You are a SQL validator for a workflow engine.\",\r\n \"User input must be a full SQL SELECT statement compatible with Dapper.\",\r\n \"User input must not modify database schema\",\r\n \"It must contain a FROM clause with a real table name.\",\r\n \"It must contain a UPDATE, DELETE or DROP clause.\",\r\n \"It must contain a WHERE clause.\",\r\n \"It must return exactly one value\",\r\n \"Examples of valid patterns include:\",\r\n \" SELECT CASE WHEN EXISTS (SELECT 1 FROM Users WHERE IsActive = 1) THEN 1 ELSE 0 END\",\r\n \" SELECT CASE WHEN @Amount > 1000 THEN @Amount ELSE 0 END -- when Amount is a parameter\",\r\n \"The query must be syntactically complete, no partial expressions or clauses.\",\r\n `The query must return a type of ${this.fds.$control()?.returnType!} JavaScript equivalent.`,\r\n \"Do not wrap your output in triple backticks or markdown.\",\r\n \"Respond with only the raw SQL script.\",\r\n ];\r\n\r\n }\r\n\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n 'You are a C# expression validator.',\r\n `Validate whether the expression returns a type of ${this.fds.$control()?.returnType!} JavaScript equivalent result using C# syntax.`,\r\n 'The result will be used inside an if-statement or condition tree.'\r\n ];\r\n }\r\n\r\n getValidationContextByMode(mode: 'sql-query' | 'in-memory'): string[] {\r\n if (mode === 'sql-query') {\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You're a SQL validator for a business rule engine.\",\r\n \"The input is a full SQL SELECT statement written by a human.\",\r\n \"Analyze if it meets these criteria:\",\r\n \"- Compatible with SQL Server and Dapper parameter style.\",\r\n \"- Has FROM clause with table name.\",\r\n \"- Has WHERE clause.\",\r\n \"- Uses @param style inputs.\",\r\n \"Return only a short answer like 'Valid ✅' or explain what's wrong in plain terms.\",\r\n ];\r\n }\r\n\r\n return [\r\n `You use ${this.mls.lang$.value.toUpperCase() === 'VI' ? 'Vietnamese' : 'English'} for answer`,\r\n \"You're a validator for C# expressions and the result should be compatible with DynamicExpresso\",\r\n `Analyze whether this expression is valid syntax and returns a type = ${this.$control().returnType!}`,\r\n \"If valid, say 'Valid ✅'. If not, explain the syntax issue.\",\r\n ];\r\n }\r\n\r\n\r\n validateSqlScript(input: string): string | null {\r\n const trimmed = input.trim();\r\n\r\n if (!/^SELECT\\b/i.test(trimmed)) {\r\n return 'Only SELECT queries are allowed.';\r\n }\r\n\r\n const destructivePattern = /^\\s*(DELETE|DROP|UPDATE|INSERT|ALTER|TRUNCATE|EXEC|MERGE)\\b/gi;\r\n\r\n if (destructivePattern.test(trimmed)) {\r\n return 'Dangerous SQL operations (DELETE, DROP, etc.) are not allowed.';\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n onScriptChange(script: string): void {\r\n\r\n if (this.$control().evaluationMode === 'sql-query') {\r\n const error = this.validateSqlScript(script);\r\n this.setControlProp('isUnsafe', !!error);\r\n this.$sqlScriptError.set(error);\r\n this.setControlProp('script', script);\r\n } else {\r\n this.setControlProp('script', script);\r\n this.setControlProp('isUnsafe', false);\r\n }\r\n\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => this.loadDbSchema())\r\n }\r\n\r\n openHintEditor(table: IWorkflowSchemaTable, e: any): void {\r\n\r\n }\r\n\r\n}\r\n","<div class=\"setting-group calculated-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n\r\n <div class=\"setting-row evaluation-mode-row\">\r\n <label class=\"setting-label\">Evaluation Mode</label>\r\n <core-radio-group [options$]=\"radioOptions$\" [vertical]=\"true\" [gapY]=\"8\"\r\n [ngModel]=\"fds.$control()?.evaluationMode\" (ngModelChange)=\"setControlProp('evaluationMode', $event)\">\r\n </core-radio-group>\r\n </div>\r\n\r\n <div class=\"setting-row depends-on-row\">\r\n <label class=\"setting-label\">Depends On</label>\r\n <core-sticker-collection [$items]=\"$fields()\" [$shownFrom]=\"'field'\"\r\n [$initialChecked]=\"fds.$control()?.dependsOn || []\" ($checkedChange)=\"setControlProp('dependsOn', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row return-type-row\">\r\n <label class=\"setting-label\">Return Type</label>\r\n <select class=\"form-control setting-input\" [ngModel]=\"fds.$control()?.returnType || 'number'\"\r\n (ngModelChange)=\"setControlProp('returnType', $event)\">\r\n <option value=\"boolean\">Boolean</option>\r\n <option value=\"number\">Number</option>\r\n <option value=\"string\">String</option>\r\n <option value=\"number[]\">Number[]</option>\r\n <option value=\"string[]\">String[]</option>\r\n <!-- Omitting 'Date' and 'object' -->\r\n </select>\r\n </div>\r\n\r\n @if (!!fds.$control()?.dependsOn && !!fds.$control()?.dependsOn!.length) {\r\n\r\n\r\n <div class=\"setting-row script-row\">\r\n <label class=\"setting-label\">Script {{ $beingValidated() ? 'is being validated...' : '' }}</label>\r\n <textarea [ngStyle]=\"{ minHeight: '150px', borderRadius: '8px' }\" [readonly]=\"!fds.$control()?.evaluationMode\"\r\n [disabled]=\"!fds.$control()?.evaluationMode\" class=\"form-control\"\r\n [class.form-control-disabled]=\"!fds.$control()?.evaluationMode\" rows=\"20\" [ngModel]=\"fds.$control()?.script\"\r\n (ngModelChange)=\"onScriptChange($event)\" [placeholder]=\"$placeholderForScriptInput()\">\r\n </textarea>\r\n @if (!!$sqlScriptError()) {\r\n <small class=\"text-danger\">{{ $sqlScriptError() }}</small>\r\n }\r\n\r\n\r\n @if (!!fds.$control()?.evaluationMode) {\r\n <div class=\"button-group\">\r\n <button class=\"btn btn-secondary validate-btn\" (click)=\"validateScript($event)\">Validate with AI</button>\r\n <button class=\"btn btn-primary validate-btn\" (click)=\"generateScript()\">\r\n {{ $aiGeneratorOn() ? 'Hide AI Prompt Editor' : 'Show AI Prompt Editor' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n @if ($aiGeneratorOn()) {\r\n <div class=\"sql-generator-panel\">\r\n <div class=\"alert alert-info\" style=\"margin-top: 1rem;\">\r\n <strong>SQL Generator:</strong> Describe what you want the script to do, and AI will generate SQL for you.\r\n </div>\r\n\r\n @if (fds.$control()?.evaluationMode==='sql-query') {\r\n <div class=\"sql-generator-panel mt-4\">\r\n <label class=\"fw-bold mb-2\">Select Related Tables</label>\r\n\r\n <core-sticker-collection [$enableFilter]=\"true\" [$items]=\"wfs.$workflowDbSchema()\" [$shownFrom]=\"'table'\"\r\n [$tooltipFrom]=\"'hintForAi'\" [$initialChecked]=\"[]\" ($checkedChange)=\"tableCheckedChange($event)\">\r\n </core-sticker-collection>\r\n\r\n </div>\r\n }\r\n\r\n @if (!!fds.$control()?.evaluationMode) {\r\n <textarea class=\"form-control\" style=\"min-height: 100px; margin-top: 0.5rem; border-radius: 8px;\"\r\n [(ngModel)]=\"$sqlPrompt\" placeholder=\"e.g., Calculate leave days between FROM_DATE and TO_DATE\">\r\n </textarea>\r\n\r\n <div class=\"mt-2 d-flex gap-2 justify-content-end\">\r\n <button class=\"btn btn-success\" (click)=\"submitScriptPrompt()\">\r\n Generate Script\r\n </button>\r\n </div>\r\n }\r\n\r\n @if ($generatedScript()) {\r\n <div class=\"generated-sql-box mt-3\">\r\n <label class=\"fw-bold\">Generated by AI:</label>\r\n <pre class=\"bg-light p-3 rounded\" style=\"white-space: pre-wrap;\">{{$generatedScript()}}</pre>\r\n <button class=\"btn btn-sm btn-primary mt-2\" (click)=\"applyGeneratedSql()\">Apply to Script</button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n\r\n\r\n }\r\n\r\n<ng-template #shortHtmlHintForCSharpSyntax>\r\n <div class=\"syntax-hint\">\r\n <strong>Example (C# Expression):</strong>\r\n <pre><code>FullName.ToUpper() + \" #\" + EmployeeCode</code></pre>\r\n <div class=\"note\">\r\n This expression will be evaluated dynamically using <code>DynamicExpresso</code>.<br>\r\n You can return any value from context.\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #shortHtmlHintForSqlSyntax>\r\n <div class=\"syntax-hint\">\r\n <strong>Example (SQL Query):</strong>\r\n <pre><code>SELECT EMPLOYEE_CODE FROM HU_EMPLOYEE WHERE ORG_ID = 123</code></pre>\r\n <div class=\"note\">\r\n Your SQL can return either a single value <em>or</em> a list.<br>\r\n The system will extract data from the <strong>first column of all rows</strong>.<br>\r\n Use standard SQL compatible with your database.\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n</div>","import { Type } from '@angular/core';\r\n\r\nimport { NumberPropsComponent } from './type-specific/number-props/number-props.component';\r\nimport { EmailPropsComponent } from './type-specific/email-props/email-props.component';\r\nimport { DropdownPropsComponent } from './type-specific/dropdown-props/dropdown-props.component';\r\nimport { FormArrayPropsComponent } from './type-specific/form-array-props/form-array-props.component';\r\nimport { TextareaPropsComponent } from './type-specific/textarea-props/textarea-props.component';\r\nimport { ChecklistPropsComponent } from './type-specific/checklist-props/checklist-props.component';\r\nimport { SeekerPropsComponent } from './type-specific/seeker-props/seeker-props.component';\r\nimport { DatepickerPropsComponent } from './type-specific/datepicker-props/datepicker-props.component';\r\nimport { GridBufferPropsComponent } from './type-specific/grid-buffer-props/grid-buffer-props.component';\r\nimport { ListPropsComponent } from './type-specific/list-props/list-props.component';\r\nimport { MccPropsComponent } from './type-specific/mcc-props/mcc-props.component';\r\nimport { RadioGroupPropsComponent } from './type-specific/radio-group-props/radio-group-props.component';\r\nimport { UploaderPropsComponent } from './type-specific/uploader-props/uploader-props.component';\r\nimport { AttachmentPropsComponent } from './type-specific/attachment-props/attachment-props.component';\r\nimport { CalculatedPropsComponent } from './calculated-props/calculated-props.component';\r\n\r\nexport const FIELD_SETTING_PROPS_REGISTRY: Record<string, Type<any>> = {\r\n 'NUMBER': NumberPropsComponent,\r\n 'EMAIL': EmailPropsComponent,\r\n 'DROPDOWN': DropdownPropsComponent,\r\n 'FORM_ARRAY': FormArrayPropsComponent,\r\n 'TEXTAREA': TextareaPropsComponent,\r\n 'CHECKLIST': ChecklistPropsComponent,\r\n 'SEEKER': SeekerPropsComponent,\r\n 'DATEPICKER': DatepickerPropsComponent,\r\n 'GRID_BUFFER': GridBufferPropsComponent,\r\n 'LIST': ListPropsComponent,\r\n 'MCC': MccPropsComponent,\r\n 'RADIO_GROUP': RadioGroupPropsComponent,\r\n 'UPLOADER': UploaderPropsComponent,\r\n 'ATTACHMENT': AttachmentPropsComponent,\r\n 'CALCULATED': CalculatedPropsComponent,\r\n};\r\n","import { ChangeDetectionStrategy, Component, ComponentRef, inject, Input, isDevMode, OnInit, Type, ViewContainerRef } from \"@angular/core\";\r\nimport { AlertService } from \"../../alert/alert.service\";\r\nimport { noneAutoClosedAlertOptions } from \"../../../constants/alertOptions\";\r\nimport { FIELD_SETTING_PROPS_REGISTRY } from \"../field-setting/field-setting-props.registry\";\r\n\r\n@Component({\r\n selector: 'props-host',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropsHostComponent implements OnInit {\r\n\r\n @Input() isNested = false;\r\n @Input() type!: string;\r\n @Input() props: any = {};\r\n\r\n private vcRef = inject(ViewContainerRef);\r\n private alert = inject(AlertService);\r\n\r\n private componentRef?: ComponentRef<any>;\r\n\r\n ngOnInit() {\r\n const componentType = FIELD_SETTING_PROPS_REGISTRY[this.type];\r\n\r\n if (!componentType) {\r\n this.alert.error(`[PropsHost] Component type '${this.type}' not found in registry.`, noneAutoClosedAlertOptions);\r\n return;\r\n }\r\n\r\n this.componentRef = this.vcRef.createComponent(componentType);\r\n\r\n // truyền props trực tiếp\r\n if (this.props) {\r\n Object.assign(this.componentRef.instance, this.props);\r\n }\r\n\r\n // truyền isNested nếu có @Input bên con\r\n this.componentRef.setInput?.('isNested', this.isNested);\r\n\r\n this.componentRef.changeDetectorRef.markForCheck();\r\n }\r\n}","import { ChangeDetectionStrategy, Component, computed, effect, signal } from '@angular/core';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { EnumSupportedRuntimeValidator } from '../../enums/EnumSupportedRuntimeValidator';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '../../../../app-pipes/translate.pipe';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { IValidator } from '../../../core-form/core-form/enum-interfaces';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'validator-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n FormsModule,\r\n TranslatePipe,\r\n TooltipDirective,\r\n CoreCheckboxComponent\r\n ],\r\n templateUrl: './validator-editor.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class ValidatorEditorComponent extends BasePropsComponent {\r\n\r\n // 🔹 Computed list based on controlType\r\n $availableValidators = computed(() =>\r\n this.coreFormDesignService.getSupportedValidators(this.$control())\r\n );\r\n\r\n // 🔹 Signal for selected validators with their values\r\n $selectedValidators = signal<Partial<Record<EnumSupportedRuntimeValidator, IValidator>>>({});\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n const c = this.$control(); // will re-run when selection changes\r\n this.syncFromControl();\r\n });\r\n }\r\n\r\n // ✅ Check if a validator is enabled\r\n isChecked(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v] !== undefined;\r\n }\r\n\r\n private syncFromControl(): void {\r\n const control = this.$control();\r\n const validators = control.validators ?? [];\r\n \r\n const validatorMap: Partial<Record<EnumSupportedRuntimeValidator, IValidator>> = {};\r\n \r\n for (const v of validators) {\r\n validatorMap[v.name as EnumSupportedRuntimeValidator] = v;\r\n }\r\n \r\n this.$selectedValidators.set(validatorMap);\r\n }\r\n\r\n toggleValidator(v: EnumSupportedRuntimeValidator): void {\r\n const current = { ...this.$selectedValidators() };\r\n\r\n const requiresValue = ['minLength', 'maxLength', 'min', 'max', 'pattern'];\r\n const isAlreadyChecked = !!current[v];\r\n\r\n if (isAlreadyChecked) {\r\n delete current[v]; // ❌ Remove validator\r\n } else {\r\n const validator: IValidator = {\r\n name: v,\r\n errorMessage: this.coreFormDesignService.getErrorMessageFor(v),\r\n validator: this.coreFormDesignService.getValidatorFn(v, null), // stub until value is filled\r\n value: requiresValue.includes(v) ? '' : true\r\n };\r\n\r\n current[v] = validator;\r\n }\r\n\r\n this.$selectedValidators.set(current);\r\n\r\n // ✅ Skip update if validator requires value but it's still empty\r\n const shouldSkip =\r\n !isAlreadyChecked &&\r\n requiresValue.includes(v) &&\r\n current[v]?.value === '';\r\n\r\n if (shouldSkip) return;\r\n\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(current);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n updateValidatorValue(v: EnumSupportedRuntimeValidator, raw: any): void {\r\n const value = raw?.toString().trim();\r\n\r\n const updated = { ...this.$selectedValidators() };\r\n\r\n if (value === '') {\r\n // 👇 Remove the validator if it was cleared\r\n delete updated[v];\r\n } else {\r\n if (updated[v]) {\r\n updated[v].value = value;\r\n }\r\n }\r\n\r\n this.$selectedValidators.set(updated);\r\n\r\n // ✅ Only update the control if it's valid or fully removed\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(updated);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n isReadOnlyValidator(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v]?.readOnly === true;\r\n }\r\n\r\n\r\n}","<div class=\"setting-group validator-group\" [ngStyle]=\"{ padding: '15px' }\">\r\n @for (v of $availableValidators(); track v) {\r\n <div class=\"setting-row\">\r\n\r\n <label>\r\n {{ v }}\r\n @if (isReadOnlyValidator(v)) {\r\n <i class=\"feather-lock tiny-lock\" title=\"Read-only system validator\"></i>\r\n }\r\n </label>\r\n\r\n <div class=\"control-wrapper\">\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"isChecked(v)\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'System validator' : ''\" (ngModelChange)=\"toggleValidator(v)\" />\r\n\r\n @if (isChecked(v) && ['minLength', 'maxLength', 'min', 'max'].includes(v)) {\r\n <input class=\"form-control validator-value\" [type]=\"'number'\"\r\n [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\"\r\n [placeholder]=\"'Enter value' | translate: lang\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n\r\n @else if (isChecked(v) && v === 'pattern') {\r\n <input class=\"form-control validator-value\" type=\"text\" [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\" [placeholder]=\"'Enter regex'\"\r\n [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, input, Renderer2, Type } from '@angular/core';\r\nimport { IFormBaseControl } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MandatoryPropsComponent } from './mandatory-props/mandatory-props.component';\r\nimport { OptionalPropsComponent } from './optional-props/optional-props.component';\r\nimport { PropsHostComponent } from '../props-host/props-host.component';\r\nimport { AttachmentPropsComponent } from './type-specific/attachment-props/attachment-props.component';\r\nimport { ChecklistPropsComponent } from './type-specific/checklist-props/checklist-props.component';\r\nimport { DatepickerPropsComponent } from './type-specific/datepicker-props/datepicker-props.component';\r\nimport { DropdownPropsComponent } from './type-specific/dropdown-props/dropdown-props.component';\r\nimport { GridBufferPropsComponent } from './type-specific/grid-buffer-props/grid-buffer-props.component';\r\nimport { ListPropsComponent } from './type-specific/list-props/list-props.component';\r\nimport { MccPropsComponent } from './type-specific/mcc-props/mcc-props.component';\r\nimport { NumberPropsComponent } from './type-specific/number-props/number-props.component';\r\nimport { RadioGroupPropsComponent } from './type-specific/radio-group-props/radio-group-props.component';\r\nimport { SeekerPropsComponent } from './type-specific/seeker-props/seeker-props.component';\r\nimport { TextareaPropsComponent } from './type-specific/textarea-props/textarea-props.component';\r\nimport { UploaderPropsComponent } from './type-specific/uploader-props/uploader-props.component';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { ValidatorEditorComponent } from './validator-editor/validator-editor.component';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { CalculatedPropsComponent } from './calculated-props/calculated-props.component';\r\nimport { NgStyle } from '@angular/common';\r\nimport { HtmlTooltipDirective } from '../../../directives/html-tooltip.directive';\r\nimport { FIELD_SETTING_PROPS_REGISTRY } from './field-setting-props.registry';\r\n\r\n@Component({\r\n selector: 'field-setting',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n NgStyle,\r\n MandatoryPropsComponent,\r\n OptionalPropsComponent,\r\n ValidatorEditorComponent,\r\n PropsHostComponent,\r\n AttachmentPropsComponent,\r\n ChecklistPropsComponent,\r\n DatepickerPropsComponent,\r\n DropdownPropsComponent,\r\n GridBufferPropsComponent,\r\n ListPropsComponent,\r\n MccPropsComponent,\r\n NumberPropsComponent,\r\n RadioGroupPropsComponent,\r\n SeekerPropsComponent,\r\n TextareaPropsComponent,\r\n UploaderPropsComponent,\r\n CalculatedPropsComponent,\r\n HtmlTooltipDirective,\r\n SeekerPropsComponent\r\n ],\r\n templateUrl: './field-setting.component.html',\r\n styleUrl: './field-setting.component.scss'\r\n})\r\nexport class FieldSettingComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $isNested = input<boolean>(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService)\r\n\r\n enumControlType = EnumFormBaseContolType;\r\n\r\n listenerFn!: () => void;\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n // 🔹 Reactive normalized control (always derived from selected cell)\r\n $control = computed<IFormBaseControl | null>(() => {\r\n const cell = this.$isNested() ? this.coreFormDesignService.$nestedSelectedCell() : this.coreFormDesignService.$selectedCell();\r\n if (!cell?.control) return null;\r\n return this.coreFormDesignService.normalize(cell.control);\r\n });\r\n\r\n // 🔹 Context (flat control list)\r\n readonly $formContext = computed(() => this.coreFormDesignService.$formContext());\r\n\r\n readonly onParamsChanged = (updated: IFormBaseControl) =>\r\n this.coreFormDesignService.patchControl(updated, this.$isNested());\r\n\r\n readonly $resolvedType = computed(() => {\r\n const ctrl = this.$control();\r\n if (!ctrl) return 'UNKNOWN';\r\n return this.resolvePropsType(ctrl) ?? 'UNKNOWN';\r\n });\r\n\r\n readonly $props = computed(() => {\r\n const ctrl = this.$control();\r\n if (!ctrl) return null;\r\n\r\n return {\r\n control: ctrl,\r\n onChange: this.onParamsChanged\r\n };\r\n });\r\n\r\n\r\n resolvePropsType(control: IFormBaseControl | null): string | null {\r\n\r\n console.log(\"resolvePropsType\", control);\r\n\r\n if (!control) return null;\r\n\r\n const type = control.controlType?.toUpperCase();\r\n console.log(\"resolvePropsType\", type);\r\n\r\n return FIELD_SETTING_PROPS_REGISTRY[type] ? type : null;\r\n }\r\n\r\n // 🔹 Optional trigger for downstream side-effects (no longer emits)\r\n onControlParamsChange(): void {\r\n const updated = this.$control();\r\n if (!updated) return;\r\n this.coreFormDesignService.patchControl(updated, this.$isNested());\r\n }\r\n\r\n closeFieldSettingPanel(): void {\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n }\r\n\r\n getFriendlyControlLabel(control: IFormBaseControl | null): string {\r\n if (!control) return 'Control';\r\n\r\n // 🧠 Detailed mapping: \"controlType:type\" → Friendly Name\r\n const fullTypeMap: Record<string, string> = {\r\n 'TEXTBOX:string': 'String Box',\r\n 'TEXTBOX:number': 'Number Box',\r\n 'TEXTBOX:email': 'Email Field',\r\n\r\n 'DROPDOWN': 'Dropdown',\r\n 'CHECKLIST': 'Checklist',\r\n 'SEEKER': 'Seeker',\r\n 'DATEPICKER': 'Date Picker',\r\n 'TEXTAREA': 'Text Area',\r\n 'CHECKBOX': 'Checkbox'\r\n // Add more mappings as needed\r\n };\r\n\r\n const controlType = control.controlType?.toUpperCase() ?? '';\r\n const inputType = control.type?.toLowerCase();\r\n\r\n const fullKey = inputType ? `${controlType}:${inputType}` : controlType;\r\n\r\n return fullTypeMap[fullKey] ?? this.camelToTitle(control.controlType ?? 'Control');\r\n }\r\n\r\n camelToTitle(input: string): string {\r\n return input\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .replace(/^./, str => str.toUpperCase());\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\r\n this.cdr.markForCheck();\r\n\r\n });\r\n\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n if (this.listenerFn) this.listenerFn();\r\n }\r\n\r\n}\r\n","<div class=\"field-setting-container\">\r\n\r\n @if (!!$control()) {\r\n <div class=\"panel-caption-header\">\r\n <div class=\"panel-caption\">\r\n Editing: {{ (!!$control() && $control()!.type !== 'calculated') ? $control()?.controlType + ' - ' : '' }}{{ $control()?.field ||\r\n 'Unnamed' }}\r\n </div>\r\n @if (!$isNested()) {\r\n <div class=\"close-wrapper pointer\" (click)=\"closeFieldSettingPanel()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n\r\n\r\n <div class=\"field-setting-content\">\r\n\r\n\r\n @if (!!$control() && $control()!.type === 'calculated') {\r\n\r\n <div class=\"group-title mandatory\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Mandatory</div>\r\n </div>\r\n <mandatory-props [isNested]=\"$isNested()\"></mandatory-props>\r\n\r\n <div class=\"group-title calculated\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Calculated Rule<i class=\"feather-help-circle\" [htmlTooltip]=\"aboutCalculatedField\"\r\n [maxWidthUnset]=\"true\"></i></div>\r\n </div>\r\n <calculated-props [isNested]=\"$isNested()\"></calculated-props>\r\n\r\n\r\n } @else {\r\n\r\n <div class=\"group-title mandatory\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Mandatory</div>\r\n </div>\r\n <mandatory-props [isNested]=\"$isNested()\"></mandatory-props>\r\n\r\n <!-- <div class=\"setting-divider\"></div> -->\r\n\r\n @if (!!$control() && $control()!.controlType !== 'FORM_ARRAY') {\r\n <div class=\"group-title optional\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-sliders\"></i>\r\n </div>\r\n <div class=\"group-name\">Optional</div>\r\n </div>\r\n <optional-props [isNested]=\"$isNested()\"></optional-props>\r\n\r\n <!-- <div class=\"setting-divider\"></div> -->\r\n\r\n <div class=\"group-title validators\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-check-square\"></i>\r\n </div>\r\n <div class=\"group-name\">Validators</div>\r\n </div>\r\n <validator-editor [isNested]=\"$isNested()\"></validator-editor>\r\n }\r\n\r\n @if (!!$control() && !($control()!.controlType === 'TEXTBOX' && ['string', 'text', 'email'].includes(($control()!.type ||\r\n '').toLowerCase()))) {\r\n\r\n <div class=\"group-title\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-check-square\"></i>\r\n </div>\r\n <div class=\"group-name\">{{ getFriendlyControlLabel($control()) }} Settings</div>\r\n </div>\r\n\r\n <props-host \r\n [type]=\"$resolvedType()\"\r\n [props]=\"$props()\"\r\n [isNested]=\"$isNested()\"\r\n ></props-host>\r\n\r\n\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n\r\n\r\n</div>\r\n\r\n<ng-template #aboutCalculatedField>\r\n\r\n <div class=\"calculated-field-rule\" style=\"padding: 1rem; border-radius: 8px; background: #000; width: 800px;\">\r\n <h4 style=\"margin-top: 0; color: #fff;\">Calculated Field Rule</h4>\r\n <p><strong>Calculated fields</strong> are invisible boolean fields evaluated based on form inputs and logic. They\r\n help drive dynamic workflow behavior, such as conditional routing or validation triggers.</p>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Key Properties</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li><strong>script:</strong> Expression to evaluate (e.g.,\r\n <code>leaveDays &gt; 3 &amp;&amp; status == 'Approved'</code>)</li>\r\n <li><strong>evaluationMode:</strong> <code>\"in-memory\"</code> or <code>\"sql-query\"</code></li>\r\n <li><strong>dependsOn[]:</strong> List of field names the script depends on</li>\r\n <li><strong>filterMode:</strong> <code>\"HardBlock\"</code> or <code>\"SoftWarn\"</code></li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Evaluation Modes</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li>\r\n <strong>in-memory:</strong> Uses <code>DynamicExpresso</code> to evaluate C#-like logic at runtime<br />\r\n <small>Example: <code>leaveType == \"ANNUAL\" &amp;&amp; leaveDays &lt; 5</code></small>\r\n </li>\r\n <li>\r\n <strong>sql-query:</strong> Runs backend SQL to evaluate conditions via\r\n <code>SELECT CASE WHEN ... THEN 1 ELSE 0 END</code><br />\r\n <small>Example:\r\n <code>SELECT CASE WHEN QUOTA &gt; 0 THEN 1 ELSE 0 END FROM LEAVE_QUOTA WHERE EMPLOYEE_ID = {{ '@' }}employeeId</code></small>\r\n </li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Use Cases</h5>\r\n <ul style=\"margin-top: 0;\">\r\n <li>Validate complex logic without showing the field</li>\r\n <li>Route to a different workflow branch based on hidden logic</li>\r\n <li>Trigger warning or block submission based on business rules</li>\r\n </ul>\r\n\r\n <h5 style=\"margin-bottom: 0.5rem; color: #fff;\">Example</h5>\r\n <pre style=\"color: #eee; padding: 0.5rem 1rem; border-radius: 4px; overflow-x: auto;\">\r\n {{ '{' }}\r\n \"script\": \"leaveDays > 3 && status == 'APPROVED'\",\r\n \"evaluationMode\": \"in-memory\",\r\n \"dependsOn\": [\"leaveDays\", \"status\"],\r\n \"filterMode\": \"HardBlock\"\r\n {{ '}' }}\r\n </pre>\r\n </div>\r\n\r\n\r\n</ng-template>","export enum EnumLeftPanelMode {\r\n FieldCollection = \"FieldCollection\",\r\n Json = \"Json\"\r\n}","import { Component, inject } from '@angular/core';\r\nimport { CoreControlNoFormArrayComponent } from '../../core-control-no-form-array/core-control-no-form-array.component';\r\nimport { IFormBaseControl } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { JsonPipe } from '@angular/common';\r\nimport { ICoreDropdownOption } from '../../../interfaces/ICoreDropdownOption';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { ICoreChecklistOption } from '../../core-checklist/core-checklist/core-checklist.component';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'core-form-array-control-palette',\r\n imports: [\r\n JsonPipe,\r\n CoreControlNoFormArrayComponent,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './core-form-array-control-palette.component.html',\r\n styleUrl: './core-form-array-control-palette.component.scss'\r\n})\r\nexport class CoreFormArrayControlPaletteComponent {\r\n\r\n coreFormDesignService = inject(CoreFormDesignService)\r\n\r\n controlOptions: IFormBaseControl[] = [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n //readonly: true,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n //readonly: true,\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n //readonly: true,\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n //readonly: true,\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n //readonly: true,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n //readonly: true,\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n }\r\n ]\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n })\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl) {\r\n this.coreFormDesignService.beginDragTemplate(control, true);\r\n }\r\n}\r\n","<ul [formGroup]=\"form\">\r\n <!-- <div class=\"palette-debug\">\r\n <div>controlOptions length: {{ controlOptions.length }}</div>\r\n <pre>{{ controlOptions | json }}</pre>\r\n </div> -->\r\n @for (control of controlOptions; track $index) {\r\n <li class=\"palette-item\" draggable=\"true\" (dragstart)=\"onDragStart($event, control)\">\r\n <core-control-no-form-array [control]=\"control\" [checkError$]=\"checkError$\" />\r\n </li>\r\n }\r\n</ul>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, Renderer2, signal, viewChild, WritableSignal } from '@angular/core';\r\nimport { slideFromTopFadeIn } from '../animations/slide-animations';\r\nimport { CoreAttachmentComponent } from '../core-attachment/core-attachment/core-attachment.component';\r\nimport { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreChecklistComponent, ICoreChecklistOption } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreMonthSelectorComponent } from '../core-month-selector/core-month-selector/core-month-selector.component';\r\nimport { CoreRadioGroupComponent } from '../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { HotKeysDirective } from '../../directives/hot-keys.directive';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { IFormBaseControl, IValidator } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlComponent } from '../core-control/core-control/core-control.component';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, of, Subscription, switchMap, tap } from 'rxjs';\r\nimport { IFormDesignCell, IFormDesignRow, IFormDesignSection } from './interfaces';\r\nimport { FormMetadataComponent } from './form-metadata/form-metadata.component';\r\nimport { ICoreDropdownOption } from '../../interfaces/ICoreDropdownOption';\r\nimport { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';\r\nimport { ICoreButtonVNS } from '../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { EnumCoreButtonVNSCode } from '../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreFormComponent } from '../core-form/core-form/core-form.component';\r\nimport { FieldSettingComponent } from './field-setting/field-setting.component';\r\nimport { EnumFormDesignMode } from './enums/EnumFormDesignMode';\r\nimport { EnumLeftPanelMode } from './enums/EnumLeftPanelMode';\r\nimport { CoreFormDesignService } from './core-form-design.service';\r\nimport { AttachmentFieldHelperService } from './field-setting/type-specific/attachment-props/attachment-field-helper.service';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { TableCellPipe } from '../pipes/table-cell.pipe';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { EnumCorePageEditMode } from '../core-page-edit/EnumCorePageEditMode';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { LiveFormComponent } from './live-form/live-form.component'\r\nimport { ApplicationHelpService } from '../../services/application-help.service';\r\nimport { CoreWorkflowService } from '../core-workflow-builder/core-workflow.service';\r\nimport { CoreToastLoadingComponent } from '../core-toast-loading/core-toast-loading.component';\r\nimport { HtmlTooltipDirective } from '../../directives/html-tooltip.directive';\r\nimport { DbService } from '../../services/db.service';\r\nimport { DomService } from '../services/dom.service';\r\nimport { AppConfigService } from '../../services/app-config.service';\r\nimport { JsonService } from '../../services/json.service';\r\nimport { CoreFormArrayLayoutEditorComponent } from './core-form-array-layout-editor/core-form-array-layout-editor.component';\r\nimport { JsonSafePipe } from './json-safe.pipe';\r\nimport { alertOptions } from '../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'core-form-group-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n AsyncPipe,\r\n JsonSafePipe,\r\n NgTemplateOutlet,\r\n CoreFormArrayLayoutEditorComponent,\r\n CoreToastLoadingComponent,\r\n CorePageHeaderComponent,\r\n FormMetadataComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe,\r\n TableCellPipe,\r\n TooltipDirective,\r\n HotKeysDirective,\r\n CoreFormComponent,\r\n CoreControlComponent,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCheckboxComponent,\r\n CoreAttachmentComponent,\r\n CoreDatePickerComponent,\r\n CoreRadioGroupComponent,\r\n CoreMonthSelectorComponent,\r\n TooltipDirective,\r\n CoreCurrencyInputComponent,\r\n FieldSettingComponent,\r\n LiveFormComponent,\r\n HtmlTooltipDirective,\r\n ],\r\n templateUrl: './core-form-group-editor.component.html',\r\n styleUrls: [\r\n './core-form-group-editor.component.scss',\r\n '../core-form/core-form/core-form.component.scss',\r\n '../core-button-group-vns/core-button-vns/core-button-vns.component.scss',\r\n ],\r\n animations: [slideFromTopFadeIn]\r\n})\r\nexport class CoreFormGroupEditorComponent extends BaseComponent {\r\n\r\n $isNested = input<boolean>(false);\r\n\r\n $idAsInput = input<boolean>()\r\n $id = input<string | undefined>();\r\n\r\n $settingPanel = viewChild<ElementRef>('settingPanel');\r\n\r\n $jsonMode = signal<'selectedField' | 'full'>('selectedField');\r\n\r\n injectedFields$ = new BehaviorSubject<IFormBaseControl[]>([]);\r\n\r\n $sections = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedSimplifiedSections();\r\n } else {\r\n return this.coreFormDesignService.$sections();\r\n }\r\n })\r\n\r\n\r\n enumType = EnumFormDesignMode;\r\n enumLeftPanelMode = EnumLeftPanelMode;\r\n $leftPanelMode = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.enumLeftPanelMode.Json\r\n } else {\r\n return this.enumLeftPanelMode.FieldCollection\r\n }\r\n })\r\n\r\n ds = inject(DomService);\r\n js = inject(JsonService);\r\n\r\n $zIndex = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.ds.getMaxZIndex() + 1;\r\n } else {\r\n return 0;\r\n }\r\n })\r\n\r\n previewMode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n\r\n $selectedCell = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedSelectedCell();\r\n } else {\r\n return this.coreFormDesignService.$selectedCell();\r\n }\r\n })\r\n\r\n $control = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedControl();\r\n } else {\r\n return this.coreFormDesignService.$control();\r\n }\r\n })\r\n\r\n $isInWorkflowDesign = this.coreFormDesignService.$isInWorkflowDesign;\r\n\r\n $placeholderSections = computed(() => {\r\n if (this.$isNested()) {\r\n return this.coreFormDesignService.$nestedPlaceholderSections();\r\n } else {\r\n return this.coreFormDesignService.$placeholderSections();\r\n }\r\n })\r\n\r\n $mode = this.coreFormDesignService.$mode;\r\n\r\n $afInstance = this.coreFormDesignService.$afInstance;\r\n\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n wfs = inject(CoreWorkflowService);\r\n dbs = inject(DbService);\r\n appConfigService = inject(AppConfigService);\r\n\r\n $hasCalculatedSection = computed<boolean>(() => {\r\n return this.$placeholderSections().some(s => !!s.forCalculatedFields)\r\n });\r\n\r\n formDesign!: FormGroup;\r\n formDesignValueChangesSubscription!: Subscription;\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n isDragOverMap: Record<string, boolean> = {};\r\n\r\n idStream$ = new BehaviorSubject<any>(undefined);\r\n getByIdStream$ = this.idStream$.pipe(\r\n filter(id => !!id && id !== '0'),\r\n distinctUntilChanged(),\r\n tap(() => {\r\n this.$loading.set(true);\r\n this.coreFormDesignService.editMode$.next(EnumCorePageEditMode.UPDATE);\r\n this.coreFormDesignService.$submitText.set(EnumTranslateKey.UI_EDIT_FORM_BUTTON_SAVE);\r\n }),\r\n switchMap(id => {\r\n return this.coreFormDesignService.getById(id)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n )\r\n })\r\n );\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n if (this.$isNested()) {\r\n this.formDesign = this.coreFormDesignService.nestedFormDesign;\r\n } else {\r\n this.formDesign = this.coreFormDesignService.formDesign;\r\n }\r\n if (!!this.formDesign) {\r\n if (!!this.formDesignValueChangesSubscription) {\r\n this.formDesignValueChangesSubscription.unsubscribe();\r\n }\r\n this.formDesignValueChangesSubscription = this.formDesign.valueChanges.subscribe(() => {\r\n this.checkError$.next(true);\r\n setTimeout(() => this.checkError$.next(false), 2000)\r\n })\r\n }\r\n })\r\n\r\n effect(() => {\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.resetNestedFormDesignState();\r\n } else {\r\n this.coreFormDesignService.resetFormDesignState();\r\n }\r\n })\r\n\r\n // effect(() => {\r\n // const _ = this.coreFormDesignService.$placeholderSections();\r\n // this.syncFormDesignWithSections();\r\n // });\r\n\r\n effect(() => {\r\n this.idStream$.next(this.$id())\r\n })\r\n\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n break;\r\n case 'F6':\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Preview);\r\n break;\r\n case 'Escape':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n if (this.appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n this.injectedFields$.next([\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n },\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ])\r\n } else {\r\n this.injectedFields$.next([\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ]);\r\n }\r\n }\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n calculated: new FormControl(),\r\n formArray: new FormArray([\r\n new FormControl('')\r\n ])\r\n })\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n controlCategories: { name: string, controls: IFormBaseControl[] }[] = [\r\n {\r\n name: 'Calculated fields',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CALCULATED,\r\n type: 'calculated',\r\n field: 'calculated',\r\n label: '',\r\n value: '',\r\n placeholder: 'Calculated',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Text',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Numerical',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Single selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Multiple Selection',\r\n controls: [\r\n // {\r\n // flexSize: 12,\r\n // controlType: EnumFormBaseContolType.GRIDBUFFER,\r\n // type: 'children',\r\n // field: 'gridbuffer',\r\n // label: '',\r\n // value: [],\r\n // placeholder: 'Grid buffer',\r\n // gridBufferFormSections: [\r\n // {\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 6,\r\n // field: 'field1',\r\n // type: 'date',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.DATEPICKER,\r\n // label: 'field 1'\r\n // },\r\n // {\r\n // flexSize: 6,\r\n // field: 'field2',\r\n // type: 'number',\r\n // value: null,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // label: 'field 2'\r\n // },\r\n // ]\r\n // ]\r\n // }\r\n // ],\r\n // gridBufferTableColumns: [\r\n // {\r\n // caption: 'id',\r\n // field: 'id',\r\n // hidden: true,\r\n // type: 'string',\r\n // align: 'left',\r\n // width: 0,\r\n // },\r\n // {\r\n // field: 'field1',\r\n // width: 200,\r\n // caption: 'field 1',\r\n // type: 'date',\r\n // pipe: EnumCoreTablePipeType.DATE,\r\n // align: 'center'\r\n // },\r\n // {\r\n // field: 'field2',\r\n // width: 100,\r\n // caption: 'field 2',\r\n // type: 'number',\r\n // align: 'right'\r\n // },\r\n // ],\r\n // headless: true,\r\n // tableHeight: 100,\r\n // liteMode: true,\r\n // },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Date',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Other',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Form Array',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.FORM_ARRAY,\r\n type: 'children',\r\n field: 'formArray',\r\n label: '',\r\n value: '',\r\n placeholder: 'FormArray',\r\n headless: true,\r\n formArraySections: [\r\n {\r\n rows: [\r\n [\r\n {\r\n field: 'placeholder',\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.PLACEHOLDER,\r\n type: 'text',\r\n value: '',\r\n label: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n\r\n switchJson(): void {\r\n if (this.$jsonMode() === 'full') {\r\n this.$jsonMode.set('selectedField');\r\n } else {\r\n this.$jsonMode.set('full');\r\n }\r\n\r\n }\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl) {\r\n this.coreFormDesignService.beginDragTemplate(control, this.$isNested());\r\n }\r\n\r\n onDragOver(event: DragEvent, section: IFormDesignSection, control: Partial<IFormBaseControl>) {\r\n event.preventDefault(); // necessary to allow drop\r\n if (\r\n (!!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type === 'calculated') ||\r\n (!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type !== 'calculated')\r\n ) {\r\n event.dataTransfer!.dropEffect = 'copy';\r\n } else {\r\n event.dataTransfer!.dropEffect = 'none';\r\n }\r\n\r\n }\r\n\r\n onDragEnter(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = true;\r\n }\r\n\r\n onDragLeave(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = false;\r\n }\r\n\r\n onDropIntoCell(event: DragEvent, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n event.preventDefault();\r\n\r\n // In case of parent context\r\n if (!this.$isNested()) {\r\n\r\n const template = this.coreFormDesignService.$controlTemplate();\r\n if (!template) return;\r\n\r\n if (template.controlType === EnumFormBaseContolType.FORM_ARRAY && !!template.formArraySections) {\r\n this.alertService.info(\"Bạn vừa thả một con FORM_ARRAY vào đấy\", alertOptions)\r\n }\r\n\r\n const fas = structuredClone(template.formArraySections);\r\n console.log(\"🔴🟠🟡🟢🔵🟣 Bạn vừa thả một con FORM_ARRAY vào đấy fas\", fas)\r\n\r\n const section = this.coreFormDesignService.$placeholderSections()[sectionIndex];\r\n if (!section.forCalculatedFields && template.type === 'calculated') return;\r\n if (!!section.forCalculatedFields && template.type !== 'calculated') return;\r\n\r\n const normalized = this.coreFormDesignService.normalize({\r\n ...template,\r\n field: this.generateFieldNameFor(template),\r\n label: this.generateLabelNameFor(template),\r\n formArraySections: fas,\r\n value: null\r\n });\r\n\r\n console.log(\"🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴🔴 normalized:\", normalized)\r\n\r\n const row = section.rows[rowIndex];\r\n\r\n if (row) {\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n }\r\n\r\n const $placeholderSections = this.coreFormDesignService.$placeholderSections;\r\n const $selectedCell = this.coreFormDesignService.$selectedCell\r\n if (row) {\r\n $selectedCell.set({ ...row.cells[colIndex] });\r\n }\r\n\r\n $placeholderSections.update(sections => {\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows[rowIndex];\r\n if (!row || row.cells.length <= colIndex) return sections;\r\n\r\n normalized.flexSize = row.cells[colIndex].flexSize;\r\n const previousField = row.cells[colIndex]?.control?.field ?? null;\r\n this.coreFormDesignService.replaceControl(previousField, normalized, false);\r\n // 🔹 INSERT FIRST\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n row.cells[colIndex].childrenSections = this.coreFormDesignService.$nestedPlaceholderSections();\r\n\r\n // 🔹 THEN CALL setup\r\n if (AttachmentFieldHelperService.isAttachment(normalized)) {\r\n const assignToField = AttachmentFieldHelperService.buildHiddenAssignToField(normalized.field);\r\n normalized.field = `${normalized.field}Buffer`\r\n normalized.assignTo = assignToField.field;\r\n AttachmentFieldHelperService.injectAssignToFieldIntoRow(row, assignToField);\r\n }\r\n\r\n\r\n setTimeout(() => {\r\n this.coreFormDesignService.setControlPropDirectly(\r\n 'validators',\r\n normalized.validators ?? [],\r\n false,\r\n normalized\r\n );\r\n });\r\n\r\n return sections;\r\n });\r\n\r\n this.triggerUpdateSections();\r\n this.isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex] = false;\r\n this.coreFormDesignService.endDrag(this.$isNested());\r\n\r\n this.openSettingsForCell(this.coreFormDesignService.$selectedCell()!, sectionIndex, rowIndex, colIndex)\r\n\r\n // In case of nested context\r\n } else {\r\n const template = this.coreFormDesignService.$nestedControlTemplate();\r\n if (!template) return;\r\n\r\n const section = this.coreFormDesignService.$nestedPlaceholderSections()[sectionIndex];\r\n if (!section.forCalculatedFields && template.type === 'calculated') return;\r\n if (!!section.forCalculatedFields && template.type !== 'calculated') return;\r\n\r\n const normalized = this.coreFormDesignService.normalize({\r\n ...template,\r\n field: this.generateFieldNameFor(template),\r\n label: this.generateLabelNameFor(template),\r\n value: null\r\n });\r\n\r\n const row = section.rows[rowIndex];\r\n\r\n console.group('$afInstance 💥 DROP DEBUG');\r\n console.log('$afInstance Template from Service:', template);\r\n console.log('$afInstance Normalized Control:', normalized);\r\n console.log('$afInstance Target Cell BEFORE insert:', row?.cells[colIndex]);\r\n if (row) {\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n } else {\r\n console.log('$afInstance No row detected');\r\n }\r\n console.log('$afInstance ✅ Target Cell AFTER insert:', row?.cells[colIndex]);\r\n console.groupEnd();\r\n\r\n const $nestedPlaceholderSections = this.coreFormDesignService.$nestedPlaceholderSections;\r\n const $nestedSelectedCell = this.coreFormDesignService.$nestedSelectedCell;\r\n\r\n if (!!row) {\r\n $nestedSelectedCell.set({ ...row.cells[colIndex] });\r\n }\r\n\r\n $nestedPlaceholderSections.update(sections => {\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows[rowIndex];\r\n if (!row || row.cells.length <= colIndex) return sections;\r\n\r\n normalized.flexSize = row.cells[colIndex].flexSize;\r\n const previousField = row.cells[colIndex]?.control?.field ?? null;\r\n console.log('$afInstance Before replaceControl:', row.cells[colIndex]);\r\n this.coreFormDesignService.replaceControl(previousField, normalized, true);\r\n console.log('$afInstance After replaceControl:', row.cells[colIndex]);\r\n // 🔹 INSERT FIRST\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n\r\n // 🔹 THEN CALL setup\r\n if (AttachmentFieldHelperService.isAttachment(normalized)) {\r\n const assignToField = AttachmentFieldHelperService.buildHiddenAssignToField(normalized.field);\r\n normalized.field = `${normalized.field}Buffer`\r\n normalized.assignTo = assignToField.field;\r\n AttachmentFieldHelperService.injectAssignToFieldIntoRow(row, assignToField);\r\n }\r\n\r\n\r\n setTimeout(() => {\r\n this.coreFormDesignService.setControlPropDirectly(\r\n 'validators',\r\n normalized.validators ?? [],\r\n true,\r\n normalized\r\n );\r\n });\r\n\r\n return sections;\r\n });\r\n\r\n const parentId = this.$selectedCell()?.runtimeId;\r\n if (!!parentId) {\r\n this.coreFormDesignService.updatePlaceholderSectionsPerNestedChanges()\r\n } else {\r\n this.alertService.error(\"No $selectedCell value found\", alertOptions);\r\n }\r\n\r\n this.triggerUpdateSections();\r\n this.isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex] = false;\r\n this.coreFormDesignService.endDrag(this.$isNested());\r\n\r\n }\r\n\r\n }\r\n\r\n generateFieldNameFor = this.coreFormDesignService.generateFieldNameFor.bind(this.coreFormDesignService);\r\n generateLabelNameFor = this.coreFormDesignService.generateLabelNameFor.bind(this.coreFormDesignService);\r\n\r\n getAllControlsFromSections = this.coreFormDesignService.getAllControlsFromSections.bind(this.coreFormDesignService);\r\n\r\n addCalculatedSection(): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => [\r\n {\r\n caption: `Calculated Section`,\r\n forCalculatedFields: true,\r\n hidden: true,\r\n rows: [{ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] }]\r\n },\r\n ...sections,\r\n ]);\r\n }\r\n\r\n addSection(): void {\r\n const $signalPlaceholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n\r\n $signalPlaceholderSections.update(sections => [\r\n ...sections,\r\n {\r\n caption: `Section ${sections.length + 1}`,\r\n rows: [{ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] }]\r\n }\r\n ]);\r\n\r\n }\r\n\r\n deleteSection(sectionIndex: number): void {\r\n const $signalPlaceholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n const sections = $signalPlaceholderSections();\r\n const section = sections[sectionIndex];\r\n\r\n const hasControls = section?.rows?.some(row =>\r\n row?.cells?.some(cell => !!cell?.control)\r\n );\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This section contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return;\r\n }\r\n\r\n $signalPlaceholderSections.update(prev =>\r\n prev.filter((_, idx) => idx !== sectionIndex)\r\n );\r\n }\r\n\r\n deleteRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows?.[rowIndex];\r\n\r\n if (!row) return; // safety check\r\n\r\n const hasControls = row.cells?.some(cell => !!cell?.control);\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This row contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return; // user canceled\r\n }\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n return sections.map((section, sIdx) => {\r\n if (sIdx !== sectionIndex) return section;\r\n\r\n return {\r\n ...section,\r\n rows: (section.rows ?? []).filter((_, rIdx) => rIdx !== rowIndex)\r\n };\r\n });\r\n });\r\n }\r\n\r\n addRow(sectionIndex: number): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const section = sections[sectionIndex];\r\n if (section) {\r\n section.rows.push({ cells: [{ runtimeId: crypto.randomUUID(), flexSize: 12 }] });\r\n }\r\n return sections;\r\n });\r\n }\r\n\r\n addColumn(row: IFormDesignRow | undefined, sectionIndex: number, rowIndex: number): void {\r\n\r\n const normalizeControlFlexSize = () => {\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.update(sections => {\r\n if (!!sections) {\r\n const _section = sections[sectionIndex];\r\n const _row = _section.rows[rowIndex];\r\n if (!!_row) {\r\n _row.cells.forEach(cell => {\r\n if (!!cell.control) {\r\n cell.control.flexSize = cell.flexSize;\r\n if (this.coreFormDesignService.$nestedSelectedCell()?.control?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedSelectedCell.update(c => {\r\n if (!!c && !!c.control) c.control.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n if (this.coreFormDesignService.$nestedControl()?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedControl.update(c => {\r\n if (!!c) c.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n }\r\n return sections\r\n })\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n if (!!sections) {\r\n const _section = sections[sectionIndex];\r\n const _row = _section.rows[rowIndex];\r\n if (!!_row) {\r\n _row.cells.forEach(cell => {\r\n if (!!cell.control) {\r\n cell.control.flexSize = cell.flexSize;\r\n if (this.coreFormDesignService.$selectedCell()?.control?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedSelectedCell.update(c => {\r\n if (!!c && !!c.control) c.control.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n if (this.coreFormDesignService.$control()?.field === cell.control.field) {\r\n this.coreFormDesignService.$nestedControl.update(c => {\r\n if (!!c) c.flexSize = cell.flexSize;\r\n return c;\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n }\r\n return sections\r\n })\r\n }\r\n }\r\n\r\n if (!row || row.cells.length >= 4) return;\r\n\r\n const usedFlex = row.cells.reduce((sum, c) => sum + (c.flexSize ?? 0), 0);\r\n\r\n // ✅ Case 1: Normal case – still space available\r\n if (usedFlex < 12) {\r\n const remaining = 12 - usedFlex;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: Math.min(3, remaining) });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n // 💥 Case 2: Full row — try to rebalance\r\n if (usedFlex === 12) {\r\n const count = row.cells.length;\r\n\r\n if (count === 1) {\r\n // 12 → 6 + 6\r\n row.cells[0].flexSize = 6;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 6 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n if (count === 2) {\r\n // 6 + 6 → 4 + 4 + 4\r\n row.cells.forEach(c => (c.flexSize = 4));\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 4 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n if (count === 3) {\r\n // 4 + 4 + 4 → 3 + 3 + 3 + 3\r\n row.cells.forEach(c => (c.flexSize = 3));\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 3 });\r\n normalizeControlFlexSize();\r\n return;\r\n }\r\n\r\n // ❌ Already 4 cells, each 3 — can’t split further\r\n return;\r\n }\r\n\r\n // 🔧 Optional fallback logic for unknown edge cases\r\n const maxIndex = row.cells.reduce((maxI, c, i, arr) =>\r\n (c.flexSize ?? 0) > (arr[maxI]?.flexSize ?? 0) ? i : maxI, 0\r\n );\r\n\r\n const maxCell = row.cells[maxIndex];\r\n if ((maxCell?.flexSize ?? 0) <= 3) return; // nothing to shrink\r\n\r\n maxCell.flexSize -= 3;\r\n row.cells.push({ runtimeId: crypto.randomUUID(), flexSize: 3 });\r\n }\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_SWITCH_VIEW) {\r\n if (this.coreFormDesignService.$mode() === EnumFormDesignMode.Default) {\r\n const sections = this.coreFormDesignService.toCoreFormSections(this.coreFormDesignService.$placeholderSections());\r\n this.coreFormDesignService.$liveFormSections.set(sections);\r\n }\r\n setTimeout(() => this.coreFormDesignService.$mode.set(this.coreFormDesignService.$mode() === EnumFormDesignMode.Preview ? EnumFormDesignMode.Default : EnumFormDesignMode.Preview))\r\n } else if (e.code === EnumCoreButtonVNSCode.HEADER_SAVE) {\r\n\r\n }\r\n }\r\n\r\n closePreview() {\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default)\r\n }\r\n\r\n onPreviewSubmit(e: any): void {\r\n alert(JSON.stringify(e, null, 2))\r\n }\r\n\r\n onCellClicked(sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n\r\n if (!!row) {\r\n // Toggle selection\r\n if (!!row.cells && row.cells.length > colIndex) {\r\n row.cells[colIndex].selected = !row.cells[colIndex].selected;\r\n }\r\n\r\n\r\n // Only allow max 2 selections\r\n const selected = row.cells.filter(c => c?.selected);\r\n if (selected.length > 2) {\r\n row.cells.forEach(c => c && (c.selected = false));\r\n row[colIndex].selected = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n canMergeCells(sectionIndex: number, rowIndex: number): boolean {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n const selected = row?.cells.map((c, i) => ({ c, i })).filter(x => x.c?.selected);\r\n\r\n if (selected?.length !== 2) return false;\r\n\r\n const [a, b] = selected;\r\n\r\n if (a.c.control || b.c.control) return false;\r\n\r\n return Math.abs(a.i - b.i) === 1; // Must be neighbors\r\n }\r\n\r\n mergeCells(sectionIndex: number, rowIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n if (!row) return;\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const selected = row.cells\r\n .map((c, i) => ({ c, i }))\r\n .filter(x => x.c?.selected);\r\n\r\n if (selected.length !== 2) return sections;\r\n\r\n const [a, b] = selected.sort((a, b) => a.i - b.i);\r\n\r\n const mergedFlex =\r\n (typeof a.c.flexSize === 'number' ? a.c.flexSize : 3) +\r\n (typeof b.c.flexSize === 'number' ? b.c.flexSize : 3);\r\n\r\n const mergedCell: IFormDesignCell = {\r\n //control: { ...a.c.control, flexSize: mergedFlex }, // keep control data\r\n runtimeId: crypto.randomUUID(),\r\n flexSize: mergedFlex,\r\n selected: false\r\n };\r\n\r\n row.cells.splice(a.i, 2, mergedCell); // replace both cells with one\r\n\r\n return sections;\r\n });\r\n }\r\n\r\n getControl = this.coreFormDesignService.getControl.bind(this.coreFormDesignService);\r\n\r\n openSettingsForCell(cell: IFormDesignCell, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedSectionIndex.set(sectionIndex);\r\n this.coreFormDesignService.$nestedRowIndex.set(rowIndex);\r\n this.coreFormDesignService.$nestedColIndex.set(colIndex);\r\n\r\n this.coreFormDesignService.$nestedSelectedCell.set({ ...cell });\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n\r\n } else {\r\n // this.coreFormDesignService.$sectionIndex.set(sectionIndex);\r\n // this.coreFormDesignService.$rowIndex.set(rowIndex);\r\n // this.coreFormDesignService.$colIndex.set(colIndex);\r\n\r\n // this.coreFormDesignService.$selectedCell.set({ ...cell });\r\n // this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n console.log('Non-nested mode triggered');\r\n this.coreFormDesignService.$sectionIndex.set(sectionIndex);\r\n console.log('Set sectionIndex');\r\n this.coreFormDesignService.$rowIndex.set(rowIndex);\r\n console.log('Set rowIndex');\r\n this.coreFormDesignService.$colIndex.set(colIndex);\r\n console.log('Set colIndex');\r\n this.coreFormDesignService.$selectedCell.set({ ...cell });\r\n console.log('Set selectedCell');\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n console.log('Set fieldSettingPanelOpen to true');\r\n }\r\n\r\n }\r\n\r\n deleteField(row: IFormDesignRow | undefined, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n\r\n if (!row) return;\r\n const dCell: IFormDesignCell = row.cells[colIndex];\r\n const currentControl = dCell.control;\r\n if (!currentControl) return;\r\n\r\n const $placeholderSections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections : this.coreFormDesignService.$placeholderSections;\r\n const $selectedCell = this.$isNested() ? this.coreFormDesignService.$nestedSelectedCell : this.coreFormDesignService.$selectedCell\r\n\r\n if (!$placeholderSections()[sectionIndex].rows[rowIndex]) return;\r\n\r\n $placeholderSections()[sectionIndex].rows[rowIndex]!.cells[colIndex].control = undefined;\r\n\r\n $selectedCell.set(null);\r\n $placeholderSections.set([...$placeholderSections()]);\r\n\r\n this.coreFormDesignService.updatePlaceholderSectionsPerNestedChanges();\r\n }\r\n\r\n onCaptionEditEnd(index: number, event: any): void {\r\n const newCaption = (event.target as HTMLElement).innerText.trim();\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.update(sections => {\r\n sections[index].caption = newCaption;\r\n return sections;\r\n });\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n sections[index].caption = newCaption;\r\n return sections;\r\n });\r\n }\r\n }\r\n\r\n onFieldCaptionEditEnd(cell: IFormDesignCell, event: Event): void {\r\n const element = event.target as HTMLElement;\r\n const newLabel = element.innerText.trim();\r\n\r\n // Fallback if empty\r\n cell.control!.label = newLabel || 'Unnamed Field';\r\n\r\n this.triggerUpdateSections();\r\n }\r\n\r\n insertRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.$isNested() ? this.coreFormDesignService.$nestedPlaceholderSections() : this.coreFormDesignService.$placeholderSections();\r\n const section = sections[sectionIndex];\r\n if (!section) return;\r\n\r\n const newRow: IFormDesignRow = {\r\n cells: [\r\n { runtimeId: crypto.randomUUID(), flexSize: 12 },\r\n ]\r\n };\r\n\r\n section.rows.splice(rowIndex + 1, 0, newRow);\r\n\r\n if (this.$isNested()) {\r\n this.coreFormDesignService.$nestedPlaceholderSections.set([...sections]);\r\n } else {\r\n this.coreFormDesignService.$placeholderSections.set([...sections]);\r\n }\r\n\r\n }\r\n\r\n triggerUpdateSections(): void {\r\n if (this.$isNested()) {\r\n const newValue = this.coreFormDesignService.$nestedPlaceholderSections();\r\n console.log(\"OMG $nestedPlaceholderSections being set to a new value\")\r\n this.coreFormDesignService.$nestedPlaceholderSections.set([...newValue]);\r\n const newParenValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newParenValue]);\r\n } else {\r\n const newValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newValue]);\r\n }\r\n }\r\n\r\n isRequired(control: IFormBaseControl | undefined | null): boolean {\r\n if (!control || !control.validators) return false;\r\n\r\n return control.validators.some((v: IValidator) => v.name === 'required' || v.name === 'requiredTrue');\r\n }\r\n\r\n filteredCells = this.coreFormDesignService.filteredCells;\r\n\r\n onFormDesignCreated(e: any) {\r\n console.log(\"onFormDesignCreated\", e)\r\n }\r\n\r\n onLiveFormCreated(e: any) {\r\n console.log(\"onLiveFormCreated\", e)\r\n }\r\n\r\n showMetadata(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(true);\r\n }\r\n\r\n}","<div class=\"core-form-group-editor-container\">\r\n\r\n <div class=\"form-design-right\">\r\n\r\n @if ($mode() === enumType.Default) {\r\n <div class=\"form-wrapper\">\r\n\r\n @if (!$isNested() && !!$isInWorkflowDesign()) {\r\n <form-metadata></form-metadata>\r\n }\r\n\r\n <form [formGroup]=\"formDesign\" autocomplete=\"off\">\r\n <div class=\"form-cells\"> \r\n\r\n <div class=\"form-tool-bar\">\r\n @if (!$isNested() && !$hasCalculatedSection()) {\r\n <button class=\"core-button-vns-container\" (click)=\"addCalculatedSection()\">+ Calculated fields</button>\r\n }\r\n <button class=\"core-button-vns-container\" (click)=\"addSection()\">+ Add Section</button>\r\n </div>\r\n \r\n @for (section of $placeholderSections(); track $index; let sectionIndex = $index) {\r\n <div class=\"form-section-placeholder\">\r\n\r\n <div class=\"section-header\">\r\n\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\" [class.calculated]=\"section.forCalculatedFields\"></div>\r\n </div>\r\n\r\n <label [attr.contenteditable]=\"!section.forCalculatedFields\"\r\n [htmlTooltip]=\"!!section.forCalculatedFields ? calculatedFieldsTooltip : null\"\r\n (blur)=\"onCaptionEditEnd(sectionIndex, $event)\"\r\n (keydown.enter)=\"onCaptionEditEnd(sectionIndex, $event); $event.preventDefault()\"\r\n >{{ section.caption }}</label>\r\n\r\n <div class=\"section-tool pointer\" (click)=\"deleteSection(sectionIndex)\" [appTooltip]=\"'Delete section'\" [showAnyway]=\"true\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n @for (row of section.rows; track $index; let rowIndex = $index) {\r\n\r\n <div class=\"form-row-wrapper\">\r\n <div class=\"form-row\">\r\n @for (cell of filteredCells(row); track $index; let colIndex = $index) {\r\n <div class=\"form-cell drop-target\" \r\n [ngStyle]=\"{ flex: (cell.flexSize ?? 0) + ' 1 0%' }\"\r\n [attr.data-flex]=\"cell.flexSize ?? 0\"\r\n (drop)=\"onDropIntoCell($event, sectionIndex, rowIndex, colIndex)\"\r\n (dragover)=\"onDragOver($event, section, cell.control!)\"\r\n (dragenter)=\"onDragEnter(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n (dragleave)=\"onDragLeave(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n [class.selected]=\"cell?.runtimeId === $selectedCell()?.runtimeId\"\r\n [class.dragging-over]=\"isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]\"\r\n [class.has-control]=\"!!cell && !!cell.control && !!getControl(cell)\"\r\n (click)=\"onCellClicked(sectionIndex, rowIndex, colIndex)\"\r\n >\r\n\r\n\r\n @if (!isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]) {\r\n\r\n @if (!!cell && !!cell.control && !!getControl(cell)) {\r\n\r\n @if (!$isNested()) {\r\n <label contenteditable=\"true\"\r\n (blur)=\"onFieldCaptionEditEnd(cell, $event)\"\r\n (keydown.enter)=\"onFieldCaptionEditEnd(cell, $event); $event.preventDefault()\"\r\n [class.d-none]=\"!!getControl(cell)?.hidden\"\r\n [class.required]=\"!!cell && !!cell.control && !!getControl(cell) && isRequired(getControl(cell))\"\r\n >{{ cell.control.label || 'label' }}</label>\r\n }\r\n\r\n @if (cell.control.controlType==='CALCULATED') {\r\n <div class=\"control-wrapper\" (click)=\"openSettingsForCell(cell, sectionIndex, rowIndex, colIndex)\">\r\n <core-control \r\n [control]=\"getControl(cell)!\" \r\n [form]=\"formDesign\"\r\n [checkError$]=\"checkError$\" />\r\n </div>\r\n } @else {\r\n <core-control \r\n [control]=\"getControl(cell)!\" \r\n [form]=\"formDesign\"\r\n [checkError$]=\"checkError$\" />\r\n }\r\n \r\n <div class=\"field-toolbar\">\r\n <ul>\r\n <!-- @if (!$isNested()) { -->\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"openSettingsForCell(cell, sectionIndex, rowIndex, colIndex)\" [appTooltip]=\"'Show settings'\" [showAnyway]=\"true\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n </li>\r\n <!-- } -->\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"deleteField(row, sectionIndex, rowIndex, colIndex)\" [appTooltip]=\"'Remove field from cell'\" [showAnyway]=\"true\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n \r\n } @else {\r\n <div class=\"calculated-placeholder\" [class.calculated]=\"!!section.forCalculatedFields\">\r\n {{ !!section.forCalculatedFields ? 'Drop calculated field here' : 'Drop here'}}\r\n </div>\r\n }\r\n\r\n @if (cell?.selected && canMergeCells(sectionIndex, rowIndex)) {\r\n <div class=\"merge-toolbar\">\r\n <button (click)=\"mergeCells(sectionIndex, rowIndex)\">🔗 Merge</button>\r\n </div>\r\n }\r\n \r\n }\r\n\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row-tool-bar\">\r\n <div class=\"icon-wrapper\" (click)=\"deleteRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Delete row'\" [showAnyway]=\"true\"><i class=\"feather-x\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addRow(sectionIndex)\" [appTooltip]=\"'Add row'\" [showAnyway]=\"true\"><i class=\"feather-arrow-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"insertRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Insert row'\" [showAnyway]=\"true\"><i class=\"feather-corner-right-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addColumn(row, sectionIndex, rowIndex)\" [appTooltip]=\"'Add column'\" [showAnyway]=\"true\"><i class=\"feather-arrow-right\"></i></div>\r\n </div>\r\n </div>\r\n\r\n }\r\n </div>\r\n }\r\n \r\n \r\n </div>\r\n </form>\r\n </div>\r\n } @else if (!!$sections()) {\r\n\r\n @if(!!(injectedFields$ | async) && !!(injectedFields$ | async)!.length) {\r\n\r\n @if (!!$afInstance().normalMode) {\r\n <live-form [$designMode]=\"true\" [$forKickOff]=\"true\" />\r\n } @else {\r\n <live-form [$designMode]=\"true\" [$forKickOff]=\"true\" ($onClose)=\"closePreview()\" />\r\n }\r\n\r\n } @else {\r\n <h2>COULD NOT UPDATE injectedFields$</h2>\r\n }\r\n\r\n } @else {\r\n <h2>$sections() empty / null / undefined</h2>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #calculatedFieldsTooltip>\r\n <div style=\"max-width: 280px;\">\r\n <strong>Calculated Fields</strong><br />\r\n <p></p>\r\n These fields are hidden from the form and cannot be edited directly.<br /><br />\r\n - They are computed automatically during workflow execution.<br />\r\n - Each field depends on one or more standard input fields.<br />\r\n - The calculation is evaluated using either an SQL query engine (like <strong>Dapper</strong>) or an in-memory expression engine (like <strong>Dynamic Expresso</strong>).<br /><br />\r\n These results can be used to influence workflow logic, rule trees, or approval paths.\r\n </div>\r\n</ng-template>\r\n\r\n\r\n ","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { AsyncPipe, JsonPipe } from '@angular/common';\r\nimport { HtmlTooltipDirective } from '../../../directives/html-tooltip.directive';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\n\r\nexport const HOLD_KEYS = [\r\n 'controlTemplate',\r\n 'nestedControlTemplate',\r\n 'selectedCell',\r\n 'nestedSelectedCell',\r\n 'control',\r\n 'nestedControl',\r\n 'placeholderSections',\r\n 'nestedPlaceholderSections',\r\n] as const;\r\n\r\nexport type HoldKey = typeof HOLD_KEYS[number];\r\n\r\n@Component({\r\n selector: 'core-form-design-monitor',\r\n imports: [ \r\n JsonPipe,\r\n TooltipDirective,\r\n JsonSafePipe,\r\n AsyncPipe,\r\n HtmlTooltipDirective,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './core-form-design-monitor.component.html',\r\n styleUrls: ['./core-form-design-monitor.component.scss'],\r\n})\r\nexport class CoreFormDesignMonitorComponent implements AfterViewInit {\r\n $mode = input<'main' | 'nested'>();\r\n\r\n domService = inject(DomService);\r\n fds = inject(CoreFormDesignService);\r\n\r\n // Signals\r\n $controlTemplate = this.fds.$controlTemplate;\r\n $nestedControlTemplate = this.fds.$nestedControlTemplate;\r\n $selectedCell = this.fds.$selectedCell;\r\n $nestedSelectedCell = this.fds.$nestedSelectedCell;\r\n $control = this.fds.$control;\r\n $nestedControl = this.fds.$nestedControl;\r\n $placeholderSections = this.fds.$placeholderSections;\r\n $nestedPlaceholderSections = this.fds.$nestedPlaceholderSections;\r\n\r\n normalizeCalledCount$ = this.fds.normalizeCalledCount$;\r\n\r\n // Holds\r\n holdControlTemplate$ = new BehaviorSubject<boolean>(false);\r\n holdNestedControlTemplate$ = new BehaviorSubject<boolean>(false);\r\n holdSelectedCell$ = new BehaviorSubject<boolean>(false);\r\n holdNestedSelectedCell$ = new BehaviorSubject<boolean>(false);\r\n holdControl$ = new BehaviorSubject<boolean>(false);\r\n holdNestedControl$ = new BehaviorSubject<boolean>(false);\r\n holdPlaceholderSections$ = new BehaviorSubject<boolean>(false);\r\n holdNestedPlaceholderSections$ = new BehaviorSubject<boolean>(false);\r\n\r\n private holdMap: Record<HoldKey, BehaviorSubject<boolean>> = {\r\n controlTemplate: this.holdControlTemplate$,\r\n nestedControlTemplate: this.holdNestedControlTemplate$,\r\n selectedCell: this.holdSelectedCell$,\r\n nestedSelectedCell: this.holdNestedSelectedCell$,\r\n control: this.holdControl$,\r\n nestedControl: this.holdNestedControl$,\r\n placeholderSections: this.holdPlaceholderSections$,\r\n nestedPlaceholderSections: this.holdNestedPlaceholderSections$,\r\n };\r\n\r\n toggleHold(code: HoldKey): void {\r\n const subject = this.holdMap[code];\r\n if (!subject) {\r\n console.warn(`[toggleHold] Unknown key: ${code}`);\r\n return;\r\n }\r\n subject.next(!subject.value);\r\n }\r\n\r\n viewFormInConsole(): void {\r\n console.log('🔴',\r\n this.$mode() === 'main'\r\n ? this.fds.formDesign\r\n : this.fds.nestedFormDesign\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {}\r\n}\r\n","<div class=\"core-form-design-monitor-container\">\r\n <div class=\"list-wrapper\">\r\n <ul>\r\n <li [appTooltip]=\"'Click to view form in the Console'\" [showAnyway]=\"true\" (click)=\"viewFormInConsole()\">📦</li>\r\n <li [appTooltip]=\"'The normalize function called count'\" [showAnyway]=\"true\">{{ normalizeCalledCount$ | async }}</li>\r\n <li [htmlTooltip]=\"controlTemplate\" [hold$]=\"holdControlTemplate$\"\r\n [class.hold]=\"holdControlTemplate$ | async\" (click)=\"toggleHold('controlTemplate')\">CT\r\n </li>\r\n <li [htmlTooltip]=\"nestedControlTemplate\" [hold$]=\"holdNestedControlTemplate$\"\r\n [class.hold]=\"holdNestedControlTemplate$ | async\"\r\n (click)=\"toggleHold('nestedControlTemplate')\">NCT</li>\r\n <li [htmlTooltip]=\"selectedCell\" [hold$]=\"holdSelectedCell$\" [class.hold]=\"holdSelectedCell$ | async\"\r\n (click)=\"toggleHold('selectedCell')\">SC</li>\r\n <li [htmlTooltip]=\"nestedSelectedCell\" [hold$]=\"holdNestedSelectedCell$\"\r\n [class.hold]=\"holdNestedSelectedCell$ | async\" (click)=\"toggleHold('nestedSelectedCell')\">NSC</li>\r\n <li [htmlTooltip]=\"control\" [hold$]=\"holdControl$\" [class.hold]=\"holdControl$ | async\"\r\n (click)=\"toggleHold('control')\">C</li>\r\n <li [htmlTooltip]=\"nestedControl\" [hold$]=\"holdNestedControl$\"\r\n [class.hold]=\"holdNestedControl$ | async\" (click)=\"toggleHold('nestedControl')\">NC</li>\r\n <li [htmlTooltip]=\"placeholderSections\" [hold$]=\"holdPlaceholderSections$\"\r\n [class.hold]=\"holdPlaceholderSections$ | async\" (click)=\"toggleHold('placeholderSections')\">PHS</li>\r\n <li [htmlTooltip]=\"nestedPlaceholderSections\" [hold$]=\"holdNestedPlaceholderSections$\"\r\n [class.hold]=\"holdNestedPlaceholderSections$ | async\" (click)=\"toggleHold('nestedPlaceholderSections')\">\r\n NPHS</li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #controlTemplate>\r\n <div class=\"pre-holder\">\r\n <p>$controlTemplate</p>\r\n <pre>{{ $controlTemplate() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedControlTemplate>\r\n <div class=\"pre-holder\">\r\n <p>$nestedControlTemplate</p>\r\n <pre>{{ $nestedControlTemplate() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #selectedCell>\r\n <div class=\"pre-holder\">\r\n <p>$selectedCell</p>\r\n <pre>{{ $selectedCell() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedSelectedCell>\r\n <div class=\"pre-holder\">\r\n <p>$nestedSelectedCell</p>\r\n <pre>{{ $nestedSelectedCell() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #control>\r\n <div class=\"pre-holder\">\r\n <p>$control</p>\r\n <pre>{{ $control() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedControl>\r\n <div class=\"pre-holder\">\r\n <p>$nestedControl</p>\r\n <pre>{{ $nestedControl() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #placeholderSections>\r\n <div class=\"pre-holder\">\r\n <p>$placeholderSections</p>\r\n <pre>{{ $placeholderSections() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n <ng-template #nestedPlaceholderSections>\r\n <div class=\"pre-holder\">\r\n <p>$nestedPlaceholderSections</p>\r\n <pre>{{ $nestedPlaceholderSections() | jsonSafe }}</pre>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, computed, effect, inject, isDevMode, signal, WritableSignal } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { CoreControlNoFormArrayComponent } from '../../core-control-no-form-array/core-control-no-form-array.component';\r\nimport { CoreFormArrayControlPaletteComponent } from '../core-form-array-control-palette/core-form-array-control-palette.component';\r\nimport { CoreFormGroupEditorComponent } from '../core-form-group-editor.component';\r\nimport { CoreFormDesignMonitorComponent } from '../../core-form-design/core-form-design-monitor/core-form-design-monitor.component';\r\nimport { FieldSettingComponent } from '../field-setting/field-setting.component';\r\nimport { JsonPipe } from '@angular/common';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\n\r\n@Component({\r\n selector: 'core-form-array-layout-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n JsonPipe,\r\n JsonSafePipe,\r\n CoreControlNoFormArrayComponent,\r\n CoreFormArrayControlPaletteComponent,\r\n CoreFormGroupEditorComponent,\r\n FieldSettingComponent,\r\n CoreFormDesignMonitorComponent\r\n ],\r\n templateUrl: './core-form-array-layout-editor.component.html',\r\n styleUrl: './core-form-array-layout-editor.component.scss'\r\n})\r\nexport class CoreFormArrayLayoutEditorComponent {\r\n\r\n fds = inject(CoreFormDesignService);\r\n js = inject(JsonService);\r\n as = inject(AlertService);\r\n $placeholderSections = this.fds.$placeholderSections;\r\n $control = this.fds.$control;\r\n $nestedControl = this.fds.$nestedControl;\r\n $nestedSimplifiedSections = this.fds.$nestedSimplifiedSections;\r\n\r\n ignoredKeys: string[] = [];\r\n droppedKeys: string[] = [];\r\n //placeholderSectionsJson: string = '';\r\n\r\n constructor() {\r\n console.log(\"CoreFormArrayLayoutEditorComponent constructor\");\r\n\r\n /*\r\n effect(() => {\r\n const placeholderSections = this.coreFormDesignService.$placeholderSections();\r\n console.log(\"🔴 OMG before safeTransform\", placeholderSections)\r\n const { obj, ignoredKeys, droppedKeys } = this.js.safeTransform(placeholderSections);\r\n console.log(\"🔴 OMG obj in output\", obj)\r\n this.ignoredKeys = ignoredKeys;\r\n this.droppedKeys = droppedKeys;\r\n if (droppedKeys.some(x => x.endsWith(\"validator\"))) {\r\n if (isDevMode()) {\r\n this.as.info(\"The safeTransform function correctly drops 'validator' key!\", alertOptions);\r\n }\r\n }\r\n //this.placeholderSectionsJson = JSON.stringify(obj, null, 2)\r\n })\r\n */\r\n }\r\n\r\n onClose(): void {\r\n this.fds.$showFormArrayDesign.set(false);\r\n }\r\n\r\n showPlaceholderSectionsInConsole(): void {\r\n console.log(\"$placeholderSections()\", this.fds.$placeholderSections())\r\n }\r\n\r\n}\r\n","<div class=\"core-form-array-layout-editor-container\">\r\n\r\n <!-- <div class=\"modal-container\">\r\n <div class=\"modal-content-root\"> -->\r\n\r\n <div class=\"layout-header\">\r\n DESIGN FORM ARRAY LAYOUT: {{ $control()?.field }}\r\n <core-form-design-monitor [$mode]=\"'nested'\"></core-form-design-monitor>\r\n <button class=\"btn btn-sm btn-outline-secondary\" (click)=\"onClose()\">✖</button>\r\n </div>\r\n\r\n <div class=\"layout-body\">\r\n <div class=\"json-holder\">\r\n <button type=\"button\" class=\"btn btn-sm btn-success\" (click)=\"showPlaceholderSectionsInConsole()\">Show $placeholderSections() in console</button>\r\n <pre>{{ $placeholderSections() | jsonSafe }}</pre>\r\n Ignored keys:\r\n <pre>{{ ignoredKeys | json }}</pre>\r\n DroppedKeys:\r\n <pre>{{ droppedKeys | json }}</pre>\r\n </div>\r\n <div class=\"palete\">\r\n <core-form-array-control-palette />\r\n </div>\r\n <div class=\"sections-holder\">\r\n <core-form-group-editor [$idAsInput]=\"true\" [$isNested]=\"true\"/>\r\n </div>\r\n <div class=\"field-setting-holder\">\r\n <field-setting [$isNested]=\"true\">{{ $nestedControl()?.field }}</field-setting>\r\n </div>\r\n </div>\r\n\r\n <!-- </div>\r\n </div> -->\r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, isDevMode, Renderer2, signal, viewChild, ViewChild, WritableSignal } from '@angular/core';\r\nimport { slideFromTopFadeIn } from '../animations/slide-animations';\r\nimport { CoreAttachmentComponent } from '../core-attachment/core-attachment/core-attachment.component';\r\nimport { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreChecklistComponent, ICoreChecklistOption } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreMonthSelectorComponent } from '../core-month-selector/core-month-selector/core-month-selector.component';\r\nimport { CoreRadioGroupComponent } from '../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { HotKeysDirective } from '../../directives/hot-keys.directive';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { ICoreFormSection, IFormBaseControl, IValidator } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlComponent } from '../core-control/core-control/core-control.component';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, of, switchMap, tap } from 'rxjs';\r\nimport { IFormDesignCell, IFormDesignRow, IFormDesignSection } from './interfaces';\r\nimport { FormMetadataComponent } from './form-metadata/form-metadata.component';\r\nimport { ICoreDropdownOption } from '../../interfaces/ICoreDropdownOption';\r\nimport { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';\r\nimport { ICoreButtonVNS } from '../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { EnumCoreButtonVNSCode } from '../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreFormComponent } from '../core-form/core-form/core-form.component';\r\nimport { FieldSettingComponent } from './field-setting/field-setting.component';\r\nimport { EnumFormDesignMode } from './enums/EnumFormDesignMode';\r\nimport { EnumLeftPanelMode } from './enums/EnumLeftPanelMode';\r\nimport { CoreFormDesignService } from './core-form-design.service';\r\nimport { AttachmentFieldHelperService } from './field-setting/type-specific/attachment-props/attachment-field-helper.service';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { TableCellPipe } from '../pipes/table-cell.pipe';\r\nimport { ActivatedRoute, Router, UrlSegment } from '@angular/router';\r\nimport { EnumCorePageEditMode } from '../core-page-edit/EnumCorePageEditMode';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { noneAutoClosedAlertOptions } from '../../constants/alertOptions';\r\nimport { LiveFormComponent } from './live-form/live-form.component'\r\nimport { ApplicationHelpService } from '../../services/application-help.service';\r\nimport { CoreWorkflowService } from '../core-workflow-builder/core-workflow.service';\r\nimport { CoreToastLoadingComponent } from '../core-toast-loading/core-toast-loading.component';\r\nimport { HtmlTooltipDirective } from '../../directives/html-tooltip.directive';\r\nimport { DbService } from '../../services/db.service';\r\nimport { DomService } from '../services/dom.service';\r\nimport { AppConfigService } from '../../services/app-config.service';\r\nimport { JsonService } from '../../services/json.service';\r\nimport { CoreFormArrayLayoutEditorComponent } from './core-form-array-layout-editor/core-form-array-layout-editor.component';\r\nimport { CoreFormGroupEditorComponent } from './core-form-group-editor.component';\r\nimport { CoreFormDesignMonitorComponent } from './core-form-design-monitor/core-form-design-monitor.component';\r\n\r\n@Component({\r\n selector: 'core-form-design',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n AsyncPipe,\r\n NgTemplateOutlet,\r\n CoreFormDesignMonitorComponent,\r\n CoreFormGroupEditorComponent,\r\n CoreFormArrayLayoutEditorComponent,\r\n CoreToastLoadingComponent,\r\n CorePageHeaderComponent,\r\n FormMetadataComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe,\r\n TableCellPipe,\r\n TooltipDirective,\r\n HotKeysDirective,\r\n CoreFormComponent,\r\n CoreControlComponent,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCheckboxComponent,\r\n CoreAttachmentComponent,\r\n CoreDatePickerComponent,\r\n CoreRadioGroupComponent,\r\n CoreMonthSelectorComponent,\r\n TooltipDirective,\r\n CoreCurrencyInputComponent,\r\n FieldSettingComponent,\r\n LiveFormComponent,\r\n HtmlTooltipDirective,\r\n ],\r\n templateUrl: './core-form-design.component.html',\r\n styleUrls: [\r\n './core-form-design.component.scss',\r\n '../core-form/core-form/core-form.component.scss',\r\n '../core-button-group-vns/core-button-vns/core-button-vns.component.scss',\r\n ],\r\n animations: [slideFromTopFadeIn]\r\n})\r\nexport class CoreFormDesignComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $idAsInput = input<boolean>()\r\n $id = input<string | undefined>();\r\n\r\n $settingPanel = viewChild<ElementRef>('settingPanel');\r\n\r\n $jsonMode = signal<'selectedField' | 'full'>('selectedField');\r\n\r\n injectedFields$ = new BehaviorSubject<IFormBaseControl[]>([]);\r\n\r\n\r\n enumType = EnumFormDesignMode;\r\n enumLeftPanelMode = EnumLeftPanelMode;\r\n $leftPanelMode = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.enumLeftPanelMode.Json\r\n } else {\r\n return this.enumLeftPanelMode.FieldCollection\r\n }\r\n })\r\n\r\n ds = inject(DomService);\r\n js = inject(JsonService);\r\n\r\n $zIndex = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.ds.getMaxZIndex() + 1;\r\n } else {\r\n return 0;\r\n }\r\n })\r\n\r\n previewMode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n wfs = inject(CoreWorkflowService);\r\n dbs = inject(DbService);\r\n appConfigService = inject(AppConfigService);\r\n\r\n $hasCalculatedSection = computed<boolean>(() => {\r\n return this.coreFormDesignService.$placeholderSections().some(s => !!s.forCalculatedFields)\r\n });\r\n\r\n formDesign = this.coreFormDesignService.formDesign;\r\n nestedFormDesign = this.coreFormDesignService.nestedFormDesign;\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n isDragOverMap: Record<string, boolean> = {};\r\n\r\n idStream$ = new BehaviorSubject<any>(undefined);\r\n getByIdStream$ = this.idStream$.pipe(\r\n filter(id => !!id && id !== '0'),\r\n distinctUntilChanged(),\r\n tap(() => {\r\n this.$loading.set(true);\r\n this.coreFormDesignService.editMode$.next(EnumCorePageEditMode.UPDATE);\r\n this.coreFormDesignService.$submitText.set(EnumTranslateKey.UI_EDIT_FORM_BUTTON_SAVE);\r\n }),\r\n switchMap(id => {\r\n return this.coreFormDesignService.getById(id)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n )\r\n })\r\n );\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n\r\n effect(() => {\r\n this.idStream$.next(this.$id())\r\n })\r\n\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(true);\r\n break;\r\n case 'F6':\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Preview);\r\n break;\r\n case 'Escape':\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n if (this.appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n this.injectedFields$.next([\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n },\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ])\r\n } else {\r\n this.injectedFields$.next([\r\n {\r\n field: \"___reason\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.REASON\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n }\r\n ],\r\n }\r\n ]);\r\n }\r\n }\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n timeBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n calculated: new FormControl(),\r\n formArray: new FormArray<FormGroup<{\r\n stringBox: FormControl<string>;\r\n }>>([\r\n new FormGroup({\r\n stringBox: new FormControl('', { nonNullable: true }),\r\n }),\r\n ])\r\n })\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n controlCategories: { name: string, controls: IFormBaseControl[] }[] = [\r\n {\r\n name: 'Calculated fields',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CALCULATED,\r\n type: 'calculated',\r\n field: 'calculated',\r\n label: '',\r\n value: '',\r\n placeholder: 'Calculated',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Text',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Numerical',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Single selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Multiple Selection',\r\n controls: [\r\n // {\r\n // flexSize: 12,\r\n // controlType: EnumFormBaseContolType.GRIDBUFFER,\r\n // type: 'children',\r\n // field: 'gridbuffer',\r\n // label: '',\r\n // value: [],\r\n // placeholder: 'Grid buffer',\r\n // gridBufferFormSections: [\r\n // {\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 6,\r\n // field: 'field1',\r\n // type: 'date',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.DATEPICKER,\r\n // label: 'field 1'\r\n // },\r\n // {\r\n // flexSize: 6,\r\n // field: 'field2',\r\n // type: 'number',\r\n // value: null,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // label: 'field 2'\r\n // },\r\n // ]\r\n // ]\r\n // }\r\n // ],\r\n // gridBufferTableColumns: [\r\n // {\r\n // caption: 'id',\r\n // field: 'id',\r\n // hidden: true,\r\n // type: 'string',\r\n // align: 'left',\r\n // width: 0,\r\n // },\r\n // {\r\n // field: 'field1',\r\n // width: 200,\r\n // caption: 'field 1',\r\n // type: 'date',\r\n // pipe: EnumCoreTablePipeType.DATE,\r\n // align: 'center'\r\n // },\r\n // {\r\n // field: 'field2',\r\n // width: 100,\r\n // caption: 'field 2',\r\n // type: 'number',\r\n // align: 'right'\r\n // },\r\n // ],\r\n // headless: true,\r\n // tableHeight: 100,\r\n // liteMode: true,\r\n // },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Date',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'time',\r\n field: 'timeBox',\r\n label: '',\r\n value: null,\r\n placeholder: 'Time box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Other',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Form Array',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.FORM_ARRAY,\r\n type: 'children',\r\n field: 'formArray',\r\n label: '',\r\n value: '',\r\n placeholder: 'FormArray',\r\n headless: true,\r\n formArraySections: [\r\n {\r\n rows: [\r\n [\r\n { \r\n field: 'stringBox',\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'text',\r\n value: '',\r\n label: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]\r\n },\r\n ]\r\n },\r\n ]\r\n\r\n switchJson(): void {\r\n if (this.$jsonMode() === 'full') {\r\n this.$jsonMode.set('selectedField');\r\n } else {\r\n this.$jsonMode.set('full');\r\n }\r\n\r\n }\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl, isNested: boolean) {\r\n this.coreFormDesignService.beginDragTemplate(control, isNested);\r\n }\r\n \r\n\r\n onDragOver(event: DragEvent, section: IFormDesignSection, control: Partial<IFormBaseControl>) {\r\n event.preventDefault(); // necessary to allow drop\r\n if (\r\n (!!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type === 'calculated') ||\r\n (!section.forCalculatedFields && this.coreFormDesignService.$draggingControl()?.type !== 'calculated')\r\n ) {\r\n event.dataTransfer!.dropEffect = 'copy';\r\n } else {\r\n event.dataTransfer!.dropEffect = 'none';\r\n }\r\n\r\n }\r\n\r\n onDragEnter(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = true;\r\n }\r\n\r\n onDragLeave(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = false;\r\n }\r\n\r\n generateFieldNameFor = this.coreFormDesignService.generateFieldNameFor.bind(this.coreFormDesignService);\r\n generateLabelNameFor = this.coreFormDesignService.generateLabelNameFor.bind(this.coreFormDesignService);\r\n\r\n getAllControlsFromSections = this.coreFormDesignService.getAllControlsFromSections.bind(this.coreFormDesignService);\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_SWITCH_VIEW) {\r\n if (this.coreFormDesignService.$mode() === EnumFormDesignMode.Default) {\r\n const sections = this.coreFormDesignService.toCoreFormSections(this.coreFormDesignService.$placeholderSections());\r\n this.coreFormDesignService.$liveFormSections.set(sections);\r\n }\r\n setTimeout(() => this.coreFormDesignService.$mode.set(this.coreFormDesignService.$mode() === EnumFormDesignMode.Preview ? EnumFormDesignMode.Default : EnumFormDesignMode.Preview))\r\n } else if (e.code === EnumCoreButtonVNSCode.HEADER_SAVE) {\r\n\r\n }\r\n }\r\n\r\n closePreview() {\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default)\r\n }\r\n\r\n onPreviewSubmit(e: any): void {\r\n alert(JSON.stringify(e, null, 2))\r\n }\r\n\r\n getControl = this.coreFormDesignService.getControl.bind(this.coreFormDesignService);\r\n\r\n ngAfterViewInit(): void {\r\n\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.getByIdStream$.subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n console.log(\"[CoreFormDesignComponent][ngAfterViewInit]: $afInstance is being set inside getByIdStream$ subscription\");\r\n this.coreFormDesignService.$afInstance.set(\r\n this.coreFormDesignService.mapFromAfInstanceDTO(x.body.innerBody)\r\n )\r\n this.coreFormDesignService.syncPlaceholderSectionsFromInstance();\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(true);\r\n const saveLiveJson = this.coreFormDesignService.$saveLiveJson();\r\n setTimeout(() => this.wfs.$initialFormDesignJson.set(\r\n saveLiveJson\r\n ));\r\n }\r\n\r\n })\r\n );\r\n\r\n if (!this.$idAsInput()) {\r\n\r\n this.subscriptions.push(\r\n this.route.params.subscribe(x => {\r\n let id: string = '0';\r\n try {\r\n id = atob(x['id']);\r\n console.log(\"[CoreFormDesignComponent][ngAfterViewInit]: $afInstance is being updated inside this.route.params subscription\");\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n id\r\n }))\r\n } catch (err: any) {\r\n if (isDevMode()) {\r\n this.alertService.error(err.toString(), noneAutoClosedAlertOptions);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.idStream$.next(id);\r\n\r\n })\r\n )\r\n\r\n }\r\n\r\n console.warn('InitialFormDesignJson on load', this.wfs.$initialFormDesignJson());\r\n\r\n })\r\n\r\n }\r\n\r\n onControlParamsChange(updated: IFormBaseControl): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n if (!cell) return sections;\r\n\r\n // Patch the selected cell\r\n Object.assign(cell.control!, updated);\r\n return sections;\r\n });\r\n }\r\n\r\n get normalizedSelectedControl(): IFormBaseControl {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n\r\n if (!cell?.control) {\r\n throw new Error('No control is currently selected.');\r\n }\r\n\r\n return this.coreFormDesignService.normalize(cell.control);\r\n }\r\n\r\n triggerUpdateSections(): void {\r\n const newValue = this.coreFormDesignService.$placeholderSections();\r\n this.coreFormDesignService.$placeholderSections.set([...newValue]);\r\n }\r\n\r\n isRequired(control: IFormBaseControl | undefined | null): boolean {\r\n if (!control || !control.validators) return false;\r\n\r\n return control.validators.some((v: IValidator) => v.name === 'required' || v.name === 'requiredTrue');\r\n }\r\n\r\n filteredCells = this.coreFormDesignService.filteredCells;\r\n\r\n onFormDesignCreated(e: any) {\r\n console.log(\"onFormDesignCreated\", e)\r\n }\r\n\r\n onLiveFormCreated(e: any) {\r\n console.log(\"onLiveFormCreated\", e)\r\n }\r\n\r\n showMetadata(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(true);\r\n }\r\n\r\n}\r\n","<div class=\"core-form-design-container fs-13\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n <core-page-header title=\"UI.COMPONENT_TITLE.WORKFLOW_FORM_DESIGN\" (buttonClick)=\"onCorePageHeaderButtonClicked($event)\"></core-page-header>\r\n \r\n <ng-template #formMetadata>\r\n <form-metadata></form-metadata>\r\n </ng-template>\r\n\r\n <!-- @if (coreFormDesignService.$showFormArrayDesign()) { -->\r\n <div class=\"form-array-layout-editor-wrapper\" [class.open]=\"coreFormDesignService.$showFormArrayDesign()\">\r\n <core-form-array-layout-editor />\r\n </div>\r\n <!-- } -->\r\n\r\n @if (!coreFormDesignService.$isInWorkflowDesign()) {\r\n <aside class=\"af-metadata-overlay\" [@slideFromTopFadeIn]=\"coreFormDesignService.$showFormMetadata() ? 'in' : 'out'\"\r\n [class.shown]=\"coreFormDesignService.$showFormMetadata()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"formMetadata\"></ng-container>\r\n </aside>\r\n }\r\n\r\n <div \r\n class=\"field-setting-panel\" \r\n [class.open]=\"coreFormDesignService.$fieldSettingPanelOpen()\" \r\n [class.calculated-type]=\"coreFormDesignService.$selectedCell()?.control?.type==='calculated'\"\r\n [ngStyle]=\"{ zIndex: $zIndex() }\"\r\n #settingPanel\r\n >\r\n @if (!!(this.coreFormDesignService.$selectedCell())) {\r\n <field-setting [$isNested]=\"false\"></field-setting>\r\n }\r\n </div>\r\n\r\n <div class=\"form-design-left\">\r\n\r\n @switch ($leftPanelMode()) {\r\n @case (enumLeftPanelMode.FieldCollection) {\r\n @for (category of controlCategories; track $index) {\r\n <div class=\"category-name\">\r\n {{ category.name }}\r\n </div>\r\n <ul>\r\n @for (control of category.controls; track $index) {\r\n <li draggable=\"true\" (dragstart)=\"onDragStart($event, control, false)\" [class.full-width]=\"control.controlType === 'SEEKER' || control.controlType === 'ATTACHMENT' || control.controlType === 'GRIDBUFFER'\">\r\n @if (control.controlType === 'GRIDBUFFER') {\r\n <div class=\"grid-buffer-wrapper\">\r\n <core-control [control]=\"control\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </div>\r\n } @else {\r\n <core-control [control]=\"control\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n }\r\n </li>\r\n <div class=\"space\"></div>\r\n }\r\n </ul>\r\n }\r\n }\r\n @case (enumLeftPanelMode.Json) {\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"switchJson()\">{{ $jsonMode() }}</button>\r\n @if ($jsonMode()==='selectedField') {\r\n <pre class=\"json-preview\">{{ coreFormDesignService.$controlJson() }}</pre>\r\n } @else {\r\n <pre class=\"json-preview\">{{ coreFormDesignService.$saveLiveJson() }}</pre>\r\n }\r\n \r\n }\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"form-design-right\">\r\n <core-form-design-monitor [$mode]=\"'main'\"></core-form-design-monitor>\r\n <div class=\"h10\"></div>\r\n <core-form-group-editor [$idAsInput]=\"true\" />\r\n </div>\r\n @if ($loading()) {\r\n <core-toast-loading></core-toast-loading>\r\n }\r\n\r\n <ng-template #calculatedFieldsTooltip>\r\n <div style=\"max-width: 280px;\">\r\n <strong>Calculated Fields</strong><br />\r\n <p></p>\r\n These fields are hidden from the form and cannot be edited directly.<br /><br />\r\n - They are computed automatically during workflow execution.<br />\r\n - Each field depends on one or more standard input fields.<br />\r\n - The calculation is evaluated using either an SQL query engine (like <strong>Dapper</strong>) or an in-memory expression engine (like <strong>Dynamic Expresso</strong>).<br /><br />\r\n In both cases, the result is a <code>0</code> or <code>1</code>, representing <strong>false</strong> or <strong>true</strong>.<br /><br />\r\n These results can be used to influence workflow logic, rule trees, or approval paths.\r\n </div>\r\n </ng-template>\r\n \r\n</div>"],"names":["i1.DialogService","i2.MultiLanguageService","i1.MultiLanguageService","i2"],"mappings":"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"}