ngx-t-forms 2.0.31 → 2.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs → ngx-t-forms-auto-complete-input-element.component-CaXs4561.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs.map → ngx-t-forms-auto-complete-input-element.component-CaXs4561.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs → ngx-t-forms-basic-input-input-element.component-Dotyd-Qs.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs.map → ngx-t-forms-basic-input-input-element.component-Dotyd-Qs.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs → ngx-t-forms-calculated-field-rules.component-BhxT6tRq.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs.map → ngx-t-forms-calculated-field-rules.component-BhxT6tRq.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs → ngx-t-forms-chip-options-creator-editor.component-d4QeVhsp.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs.map → ngx-t-forms-chip-options-creator-editor.component-d4QeVhsp.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-Gn8exJ9a.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs.map → ngx-t-forms-config-mscoa-additional-inputs.component-Gn8exJ9a.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs → ngx-t-forms-data-source-picker.component-Ebf_if9j.mjs} +6 -6
- package/fesm2022/{ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs.map → ngx-t-forms-data-source-picker.component-Ebf_if9j.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs → ngx-t-forms-date-picker-input-element.component-kdinBGRA.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs.map → ngx-t-forms-date-picker-input-element.component-kdinBGRA.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs → ngx-t-forms-date-range-picker-input-element.component-4W6uvrDU.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs.map → ngx-t-forms-date-range-picker-input-element.component-4W6uvrDU.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs → ngx-t-forms-document-list-label-config-editor.component-CR6EvgJO.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs.map → ngx-t-forms-document-list-label-config-editor.component-CR6EvgJO.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-document-picker.component-qObjcqhE.mjs → ngx-t-forms-document-picker.component-BThdRFec.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-document-picker.component-qObjcqhE.mjs.map → ngx-t-forms-document-picker.component-BThdRFec.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs → ngx-t-forms-editor-input-element.component-1X6uAPeZ.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs.map → ngx-t-forms-editor-input-element.component-1X6uAPeZ.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs → ngx-t-forms-editor-js-input.component-5MD8wRj0.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs.map → ngx-t-forms-editor-js-input.component-5MD8wRj0.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs → ngx-t-forms-file-upload-input-element.component-BAtuymMY.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs.map → ngx-t-forms-file-upload-input-element.component-BAtuymMY.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs → ngx-t-forms-form-input-selector.component-B42xP3jh.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs.map → ngx-t-forms-form-input-selector.component-B42xP3jh.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-json-view.component-856Hx1Bg.mjs → ngx-t-forms-form-json-view.component-DnnLXqR0.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-form-json-view.component-856Hx1Bg.mjs.map → ngx-t-forms-form-json-view.component-DnnLXqR0.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs → ngx-t-forms-form-payload-projection.component-Ip9ewB18.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs.map → ngx-t-forms-form-payload-projection.component-Ip9ewB18.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs → ngx-t-forms-form-section-stepper.component-BPgPfZSy.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs.map → ngx-t-forms-form-section-stepper.component-BPgPfZSy.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs → ngx-t-forms-forms-builder-menu.component-Dv0Dfw79.mjs} +5 -5
- package/fesm2022/{ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs.map → ngx-t-forms-forms-builder-menu.component-Dv0Dfw79.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-geo-location.component-Bosp1UzR.mjs → ngx-t-forms-geo-location.component-Bmd84Gcb.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-geo-location.component-Bosp1UzR.mjs.map → ngx-t-forms-geo-location.component-Bmd84Gcb.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs → ngx-t-forms-image-capture-input-element.component-CUd04Ghl.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs.map → ngx-t-forms-image-capture-input-element.component-CUd04Ghl.mjs.map} +1 -1
- package/fesm2022/ngx-t-forms-index-BcrQ01DQ.mjs +2 -0
- package/fesm2022/ngx-t-forms-index-BcrQ01DQ.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-input-custom.component-BkbHFAyR.mjs → ngx-t-forms-input-custom.component-Cn-KH0Lb.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-input-custom.component-BkbHFAyR.mjs.map → ngx-t-forms-input-custom.component-Cn-KH0Lb.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-input-editor.component-BPUOM9kQ.mjs → ngx-t-forms-input-editor.component-DLru1Ezu.mjs} +17 -5
- package/fesm2022/ngx-t-forms-input-editor.component-DLru1Ezu.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs → ngx-t-forms-map-mat-options-keys-CVlPdrCO.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs.map → ngx-t-forms-map-mat-options-keys-CVlPdrCO.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs → ngx-t-forms-mat-chip-list-editor.component-BWisS3Em.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs.map → ngx-t-forms-mat-chip-list-editor.component-BWisS3Em.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs → ngx-t-forms-missing-form-configs.component-DxdynZY6.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs.map → ngx-t-forms-missing-form-configs.component-DxdynZY6.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs → ngx-t-forms-mscoa-chart-toolbar.component-D4Xa_Yi0.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs.map → ngx-t-forms-mscoa-chart-toolbar.component-D4Xa_Yi0.mjs.map} +1 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Bo0aDEMy.mjs +447 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Bo0aDEMy.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs → ngx-t-forms-multiple-input-input-element.component-C8JP3D6r.mjs} +16 -16
- package/fesm2022/{ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs.map → ngx-t-forms-multiple-input-input-element.component-C8JP3D6r.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-ngx-t-forms-u_kigDid.mjs → ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs} +931 -82
- package/fesm2022/ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs → ngx-t-forms-paginated-selection-table-0OI1ikWW.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs.map → ngx-t-forms-paginated-selection-table-0OI1ikWW.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs → ngx-t-forms-pipeline-generator.component-CZ21sd77.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs.map → ngx-t-forms-pipeline-generator.component-CZ21sd77.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-record-list-manager.component-CUMMvMch.mjs → ngx-t-forms-record-list-manager.component-CykBq_nW.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-record-list-manager.component-CUMMvMch.mjs.map → ngx-t-forms-record-list-manager.component-CykBq_nW.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs → ngx-t-forms-required-inputs.component-ONbhxVSH.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs.map → ngx-t-forms-required-inputs.component-ONbhxVSH.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs → ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map → ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-section-report.component-BxOhR6C0.mjs → ngx-t-forms-section-report.component-C1w16LYm.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-section-report.component-BxOhR6C0.mjs.map → ngx-t-forms-section-report.component-C1w16LYm.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-select-input-element.component-DbgZdNoe.mjs → ngx-t-forms-select-input-element.component-CWcywuS6.mjs} +8 -8
- package/fesm2022/{ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map → ngx-t-forms-select-input-element.component-CWcywuS6.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs → ngx-t-forms-selection-options-editor.component-KjbZhc2u.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs.map → ngx-t-forms-selection-options-editor.component-KjbZhc2u.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs → ngx-t-forms-t-workflow-picker.component-CtavFAUq.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs.map → ngx-t-forms-t-workflow-picker.component-CtavFAUq.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs → ngx-t-forms-textarea-input-element.component-DkJkBQif.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs.map → ngx-t-forms-textarea-input-element.component-DkJkBQif.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs → ngx-t-forms-toggle-input-element.component-Dr7MNli8.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs.map → ngx-t-forms-toggle-input-element.component-Dr7MNli8.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-validators-config.component-oGjQVGE2.mjs → ngx-t-forms-validators-config.component-BknyAmV_.mjs} +8 -167
- package/fesm2022/ngx-t-forms-validators-config.component-BknyAmV_.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs → ngx-t-forms-workflow-adjudication.component-CPvwm7f4.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs.map → ngx-t-forms-workflow-adjudication.component-CPvwm7f4.mjs.map} +1 -1
- package/fesm2022/ngx-t-forms.mjs +1 -1
- package/package.json +2 -2
- package/types/ngx-t-forms.d.ts +191 -4
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs +0 -2
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs +0 -336
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs.map +0 -1
package/fesm2022/ngx-t-forms.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { v as DialogTemplateComponent, Q as FORM_ACTIONS_TOKEN, R as FORM_CONFIG_TOKEN, W as FORM_INPUTS_TOKEN, X as FORM_ROUTE_SOURCE, Y as FORM_SLIDES_TOKEN, w as FormBuilderComponent, Z as FormTowerControllerService, G as FormatDataPipe, x as FormsComponent, $ as HttpPipelineRepository, a0 as IMPORT_TOWER_INSTANCE_ID, a1 as INPUT_SECRET_TOKEN, a2 as MSCOA_TREE_PROVIDER, a3 as MULTIPLE_FORM_INPUT_TOKEN, M as MscoaFormInputComponent, N as NGX_T_FORMS_CONFIG_TOKEN, a4 as NgxTFormsComponent, a5 as NgxTFormsService, a6 as PIPELINE_REPOSITORY, a7 as PipelineRepository, a8 as PropertyAccessError, S as SignatureInputElementComponent, T as TDynamicDataEditComponent, b as TDynamicDataViewComponent, a9 as TFormImportController, y as TFormInputComponent, aa as UTILS_OBJECT_TOKEN, U as UserFormStepperComponent, V as ValidationExpressioCreatorComponent, a as assignDeepPropertyToObject, ab as createFileFromBase64, ac as formGenerator, ad as getPipedValueFromDataType, ae as getSampleValueForInput, af as getSectionElements, z as getSignatureImage, ag as getUrl, ah as getValueFromValueAccessor, ai as initFormConfigToV2, aj as provideNgxTForms, ak as returnDeepProperty, C as returnMappedPathValue, n as safeReturnDeepProperty, al as sheetConsolodation, t as testAgainstItem, am as textIconsForUserHints, an as validateExpressionSyntax, ao as validateObjectAgainstString, ap as withHttpPipeline, aq as withInputSecret, ar as withRouterFormId } from './ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs';
|
|
2
2
|
export { WorkflowFunctionTypes } from 'ngx-t-forms-types';
|
|
3
3
|
//# sourceMappingURL=ngx-t-forms.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-t-forms",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.32",
|
|
4
4
|
"description": "Angular forms module for creating dynamic forms through configuration. Supports form validation, custom controls, and complex form structures.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"html5-qrcode": "^2.3.8",
|
|
42
42
|
"katex": "^0.16.11",
|
|
43
43
|
"mathjs": "^15.2.0",
|
|
44
|
-
"ngx-t-forms-types": "^0.0.
|
|
44
|
+
"ngx-t-forms-types": "^0.0.22",
|
|
45
45
|
"ngx-ui-tour-md-menu": "^16.0.0",
|
|
46
46
|
"qrcode": "^1.5.4",
|
|
47
47
|
"quill": "^2.0.3",
|
package/types/ngx-t-forms.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Provider, EnvironmentProviders, InjectionToken, OnInit, OnDestroy, Signal, PipeTransform, Type, ElementRef } from '@angular/core';
|
|
3
3
|
import * as ngx_t_forms_types from 'ngx-t-forms-types';
|
|
4
|
-
import { NgxTFormsConfig, IFormActions, FormInterface, FormSlideInterface, InClassFormUtilsInterface, IWorkflowDocumentPicker, IBasicFormInput, IFileUploadInput, IDateRangePickerInput, ITextareaProperties, IToggleInput, IMatrixInput, IMultiple, IGetTreeResponse, IRunPipelineResponse, IPipelineGenerationResponse, LocalFormStateSelectorInterface, FormsStoreSelectorsInterface, FormListSection, WorkflowFunctionTypes, FileData, FormSubmissionStatus, IFormValidationOverride, FormColumnInputs, IFormChangeHistory, FormBuilderFunctions, ITowerFormSteps, ElementEditorTypes, ElementEditorInnerSectionElementInterface, IWorkflowOption, BlurHandleTypes, ITowerStepColumn, TreeNode, FlatNode, IArrayFunction, DocumentLitsLabelConfigInterfaceValueType, InputDataTypes, InputPipeTypes, ImportProgress, ImportRowState, ValidationError, FormInputBasicOptionInterface, ElementTypes, DialogConfig, PropertyPath, DeepPropertyValue, FileUploadInputValueInterface, FormInterfaceMigration, ConfigurationValidTestInterface, EncryptedData } from 'ngx-t-forms-types';
|
|
4
|
+
import { NgxTFormsConfig, IFormActions, FormInterface, FormSlideInterface, InClassFormUtilsInterface, IWorkflowDocumentPicker, IBasicFormInput, IFileUploadInput, IDateRangePickerInput, ITextareaProperties, IToggleInput, IMatrixInput, IMultiple, IGetTreeResponse, IRunPipelineResponse, IPipelineGenerationResponse, LocalFormStateSelectorInterface, FormsStoreSelectorsInterface, FormListSection, WorkflowFunctionTypes, FileData, FormSubmissionStatus, IFormValidationOverride, FormColumnInputs, IFormChangeHistory, FormBuilderFunctions, ITowerFormSteps, ElementEditorTypes, ElementEditorInnerSectionElementInterface, ScoaInnerInput, IWorkflowOption, BlurHandleTypes, ITowerStepColumn, TreeNode, FlatNode, IArrayFunction, DocumentLitsLabelConfigInterfaceValueType, InputDataTypes, InputPipeTypes, ImportProgress, ImportRowState, ValidationError, FormInputBasicOptionInterface, ElementTypes, DialogConfig, PropertyPath, DeepPropertyValue, FileUploadInputValueInterface, FormInterfaceMigration, ConfigurationValidTestInterface, EncryptedData } from 'ngx-t-forms-types';
|
|
5
5
|
export { BlurHandleTypes, ConfigurationValidTestInterface, DeepPropertyValue, DialogConfig, DocumentLitsLabelConfigInterfaceValueType, ElementEditorInnerSectionElementInterface, ElementEditorTypes, EncryptedData, FileUploadInputValueInterface, FormBuilderFunctions, FormColumnInputs, FormInterface, FormInterfaceMigration, FormListSection, FormSubmissionStatus, IArrayFunction, IFormActions, IFormChangeHistory, IFormTour, IFormValidationOverride, IGetTreeResponse, IScoaAccount, ITowerStepColumn, IWorkflowOption, ImportProgress, ImportRowState, ImportRowStatus, InClassFormUtilsInterface, InputDataTypes, InputPipeTypes, LocalFormStateSelectorInterface, NgxTFormsConfig, OLD_FormInterface, PropertyPath, TreeNode, ValidationError, WorkflowFunctionTypes } from 'ngx-t-forms-types';
|
|
6
6
|
import * as rxjs from 'rxjs';
|
|
7
7
|
import { Observable, Subject } from 'rxjs';
|
|
@@ -848,6 +848,27 @@ declare abstract class FormTowerControllerService implements OnDestroy {
|
|
|
848
848
|
* @param inputId - The MultipleInput whose sub-row bridge to drop.
|
|
849
849
|
*/
|
|
850
850
|
unbindMultipleInputRowControls: (inputId: string) => void;
|
|
851
|
+
/**
|
|
852
|
+
* Bridges live edits of mSCOA inner inputs — the custom form inputs configured
|
|
853
|
+
* inside an `MscoaSelection` column (e.g. `budgetValue`, `department`) and
|
|
854
|
+
* rendered inline by the MSCOA chart via a `ComponentPortal` — into the signal
|
|
855
|
+
* graph.
|
|
856
|
+
*
|
|
857
|
+
* Each inner input is a `${mscoaColId}.${innerId}` control sitting in the mSCOA
|
|
858
|
+
* column's section group. The engine already lists it in `allFormInputs`, so
|
|
859
|
+
* its derived calc / value-API / options graph is built at init (the OUTPUT
|
|
860
|
+
* half). But a `ComponentPortal` forwards inputs only and never subscribes the
|
|
861
|
+
* host's `valueChange` output, so the user's typed value never reached `#model`
|
|
862
|
+
* — leaving dependent calculations / value-fetches / options blind to it. This
|
|
863
|
+
* subscribes each such control's `valueChanges` → `updateValue(controlName, …)`,
|
|
864
|
+
* restoring the INPUT half so an mSCOA custom input behaves exactly like a
|
|
865
|
+
* primary-form input. Direct mirror of
|
|
866
|
+
* {@link FormTowerControllerService.bindMultipleInputRowControls}.
|
|
867
|
+
*
|
|
868
|
+
* Idempotent (tears down the prior bridge first) and anchored to `_destroyed$`,
|
|
869
|
+
* so the re-init `clearFormState` drops every inner subscription.
|
|
870
|
+
*/
|
|
871
|
+
bindScoaInnerInputControls: () => void;
|
|
851
872
|
/**
|
|
852
873
|
* Re-runs every refreshable function for inputs in `sectionId` (resource
|
|
853
874
|
* `.reload()` + dependency order). Returns an Observable that completes when
|
|
@@ -1105,6 +1126,18 @@ declare class TDynamicDataEditComponent {
|
|
|
1105
1126
|
readonly data: _angular_core.InputSignal<unknown>;
|
|
1106
1127
|
/** Validation errors surfaced by the parent for display. */
|
|
1107
1128
|
readonly validationErrors: _angular_core.InputSignal<IConfigElementError[] | null>;
|
|
1129
|
+
/**
|
|
1130
|
+
* Builder-only: creates or updates an account-level MSCOA custom input (a peer
|
|
1131
|
+
* of the segments) from the segment-config quick editor. Forwarded to that
|
|
1132
|
+
* editor; absent outside the form builder, which hides the related affordance.
|
|
1133
|
+
*/
|
|
1134
|
+
readonly mscoaSaveCustomInput: _angular_core.InputSignal<((sectionId: string, scoaInputId: string, config: Pick<ScoaInnerInput, "element" | "label" | "formControlName" | "singleSelect" | "readonly"> & {
|
|
1135
|
+
id?: string;
|
|
1136
|
+
}) => void) | undefined>;
|
|
1137
|
+
/** Builder-only: opens an MSCOA custom input in the input editor for advanced configuration. */
|
|
1138
|
+
readonly mscoaEditInput: _angular_core.InputSignal<((input: FormColumnInputs) => void) | undefined>;
|
|
1139
|
+
/** Builder-only: removes an MSCOA custom input from the config. */
|
|
1140
|
+
readonly mscoaDeleteInput: _angular_core.InputSignal<((input: FormColumnInputs) => void) | undefined>;
|
|
1108
1141
|
/** Fires when the edited value changes (debounced). */
|
|
1109
1142
|
readonly valueChange: _angular_core.OutputEmitterRef<unknown>;
|
|
1110
1143
|
/** Fires when an inner editor loses focus (used for expression-style editors). */
|
|
@@ -1141,7 +1174,7 @@ declare class TDynamicDataEditComponent {
|
|
|
1141
1174
|
inputConfig: Partial<ITowerStepColumn>;
|
|
1142
1175
|
}>;
|
|
1143
1176
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TDynamicDataEditComponent, never>;
|
|
1144
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TDynamicDataEditComponent, "lib-t-dynamic-data-edit", never, { "editorConfig": { "alias": "editorConfig"; "required": false; "isSignal": true; }; "formInputs": { "alias": "formInputs"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "validationErrors": { "alias": "validationErrors"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; }, never, never, true, never>;
|
|
1177
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TDynamicDataEditComponent, "lib-t-dynamic-data-edit", never, { "editorConfig": { "alias": "editorConfig"; "required": false; "isSignal": true; }; "formInputs": { "alias": "formInputs"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "validationErrors": { "alias": "validationErrors"; "required": false; "isSignal": true; }; "mscoaSaveCustomInput": { "alias": "mscoaSaveCustomInput"; "required": false; "isSignal": true; }; "mscoaEditInput": { "alias": "mscoaEditInput"; "required": false; "isSignal": true; }; "mscoaDeleteInput": { "alias": "mscoaDeleteInput"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "blur": "blur"; }, never, never, true, never>;
|
|
1145
1178
|
}
|
|
1146
1179
|
|
|
1147
1180
|
declare class TreeComponent {
|
|
@@ -1413,6 +1446,41 @@ declare class TFormImportController {
|
|
|
1413
1446
|
* Errors are prefixed with the item index: "[0].subField.errorCode".
|
|
1414
1447
|
*/
|
|
1415
1448
|
private _processMultipleFormInput;
|
|
1449
|
+
/**
|
|
1450
|
+
* Rewrites a MultipleInput sub-input's cross-field dependency references from
|
|
1451
|
+
* the live form's COMPOUND id scheme back to the SIMPLE id the per-row mock
|
|
1452
|
+
* form uses.
|
|
1453
|
+
*
|
|
1454
|
+
* In the real form, {@link allFormInputs} flattens a MultipleInput's children
|
|
1455
|
+
* and rewrites each child's id to `${multipleInputId}.${childId}`. Every
|
|
1456
|
+
* dependent field's `mapTo.inputId` (value/options-API `minimumInputRequired`)
|
|
1457
|
+
* is authored against that compound id — so `readDep(compoundId)` resolves and
|
|
1458
|
+
* the dependent fetch fires. The mock form built in
|
|
1459
|
+
* {@link TFormImportController._processMultipleFormInput} hoists those children
|
|
1460
|
+
* to top-level columns, so they keep their SIMPLE ids; the baked-in compound
|
|
1461
|
+
* `mapTo.inputId` references then resolve to nothing, `validateMinInput` fails,
|
|
1462
|
+
* the value-API `params` stay `undefined`, and the resource never fetches —
|
|
1463
|
+
* leaving every derived sub-field null (and dropped by `getFormValueNames`).
|
|
1464
|
+
*
|
|
1465
|
+
* Deep-clones `node` (never mutates the shared form definition) and strips the
|
|
1466
|
+
* `${parentId}.` prefix from any `inputId` that targets a sibling in THIS
|
|
1467
|
+
* MultipleInput, so the sub-tower's signal graph resolves dependencies exactly
|
|
1468
|
+
* as the live form does.
|
|
1469
|
+
*
|
|
1470
|
+
* @param node - The sub-input config (or any nested fragment) to rewrite.
|
|
1471
|
+
* @param parentId - The owning MultipleInput's id (the compound prefix).
|
|
1472
|
+
*/
|
|
1473
|
+
private _localizeSubInputDeps;
|
|
1474
|
+
/**
|
|
1475
|
+
* Parses a string MultipleInput cell into an array of row objects.
|
|
1476
|
+
*
|
|
1477
|
+
* Spreadsheet cells are primitives, so a MultipleInput column arrives as a
|
|
1478
|
+
* JSON-stringified array. Returns the parsed array on success; returns the
|
|
1479
|
+
* raw value unchanged on failure (empty string, plain text, malformed JSON,
|
|
1480
|
+
* or a non-array JSON value) so the caller's `Array.isArray` check treats it
|
|
1481
|
+
* as "no rows" rather than throwing.
|
|
1482
|
+
*/
|
|
1483
|
+
private _tryParseJsonArray;
|
|
1416
1484
|
/**
|
|
1417
1485
|
* Resolves a single account code to an IScoaAccount.
|
|
1418
1486
|
* Routed through `_cachedGet` so identical codes across concurrent rows share
|
|
@@ -1478,6 +1546,29 @@ declare class TFormImportController {
|
|
|
1478
1546
|
* Multiple error keys on one control are joined with '.'.
|
|
1479
1547
|
*/
|
|
1480
1548
|
private _collectColErrors;
|
|
1549
|
+
/**
|
|
1550
|
+
* Collects the MultipleInput columns whose value is tower-derived — i.e. they
|
|
1551
|
+
* carry a value-API fetch (`matOptions.fetch.value.source === 'api'`) or a
|
|
1552
|
+
* value-producing calculation. These are the columns whose import rows are
|
|
1553
|
+
* overridden by the tower's own value graph and therefore need the
|
|
1554
|
+
* tower-favored deep merge applied in {@link TFormImportController._processRow}.
|
|
1555
|
+
*/
|
|
1556
|
+
private _valueDerivedMultipleInputs;
|
|
1557
|
+
/** True iff the column derives its value from a value-API fetch or a calculation. */
|
|
1558
|
+
private _isValueDerivedColumn;
|
|
1559
|
+
/**
|
|
1560
|
+
* Deep-merges two values with the **override** (tower-derived) value favored
|
|
1561
|
+
* and the **base** (import) value filling every gap it leaves.
|
|
1562
|
+
*
|
|
1563
|
+
* Rules (mirrors the import-merge contract):
|
|
1564
|
+
* - `override` wins for scalars and for any key it defines.
|
|
1565
|
+
* - Keys present only on `base` are preserved (import fills gaps).
|
|
1566
|
+
* - Arrays merge **element-wise by index** (each element deep-merged), so a
|
|
1567
|
+
* tower row that omits an import-only field keeps that field.
|
|
1568
|
+
* - An **empty** `override` array (or `null`/`undefined`) falls back entirely
|
|
1569
|
+
* to `base` — a tower value that resolves empty never erases the import rows.
|
|
1570
|
+
*/
|
|
1571
|
+
private _deepMergePreferTower;
|
|
1481
1572
|
/**
|
|
1482
1573
|
* Immutable row update — clones the rows array and the targeted row before
|
|
1483
1574
|
* pushing through `_rows$` so subscribers downstream of `progress$` always
|
|
@@ -1722,6 +1813,63 @@ declare class SignatureInputElementComponent {
|
|
|
1722
1813
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SignatureInputElementComponent, "lib-signature-input-element", never, { "inputConfig": { "alias": "inputConfig"; "required": true; "isSignal": true; }; "formGroup": { "alias": "formGroup"; "required": true; "isSignal": true; }; }, { "reload": "reload"; }, never, never, true, never>;
|
|
1723
1814
|
}
|
|
1724
1815
|
|
|
1816
|
+
/**
|
|
1817
|
+
* @file Round-trip bridge between the guided condition builder in
|
|
1818
|
+
* `lib-validators-config` and a custom validator's `expression` **string** plus
|
|
1819
|
+
* its `inputsObservedForChanges` dependency list — both part of the frozen
|
|
1820
|
+
* {@link FormControlCustomValidatorsInterface} contract.
|
|
1821
|
+
*
|
|
1822
|
+
* The validator engine evaluates `expression` with the shared predicate DSL
|
|
1823
|
+
* ({@link evaluatePredicate}) where **`true` means the field is INVALID**. The
|
|
1824
|
+
* scope it evaluates against is `{ [variable]: <whole value of inputId> }` for
|
|
1825
|
+
* every entry in `inputsObservedForChanges` (see `build-manual-validation.ts`).
|
|
1826
|
+
*
|
|
1827
|
+
* Because the grammar is identical to the array-access predicate builder, this
|
|
1828
|
+
* module reuses {@link PREDICATE_OPERATORS} so the operator labels stay in lock
|
|
1829
|
+
* step with `lib-data-tree`. The model differs in one validator-specific way:
|
|
1830
|
+
* the right-hand side of a comparison may be **another field** (e.g. an
|
|
1831
|
+
* "end date is before start date" rule), not only a typed literal — so the
|
|
1832
|
+
* serializer must emit a bare variable token rather than a quoted string in
|
|
1833
|
+
* that case.
|
|
1834
|
+
*
|
|
1835
|
+
* {@link parseConditions} best-effort parses an expression into the structured
|
|
1836
|
+
* model; when it cannot (parentheses, mixed `&&`/`||`, unary `!`, an unknown
|
|
1837
|
+
* operator), it returns `null` and the UI falls back to the raw editor — power
|
|
1838
|
+
* users and legacy expressions are never locked out.
|
|
1839
|
+
*
|
|
1840
|
+
* @internal
|
|
1841
|
+
*/
|
|
1842
|
+
|
|
1843
|
+
/** A single guided comparison: `field operator (value | field)`. */
|
|
1844
|
+
interface ValidatorCondition {
|
|
1845
|
+
/** Left operand — always a referenced field's variable name. */
|
|
1846
|
+
field: string;
|
|
1847
|
+
/** One of the {@link PREDICATE_OPERATORS} values (`===`, `>`, `includes`, …). */
|
|
1848
|
+
operator: string;
|
|
1849
|
+
/** Whether the right operand is a typed literal or another field. */
|
|
1850
|
+
compareTo: 'value' | 'field';
|
|
1851
|
+
/** Literal text, or the variable name of the compared field. */
|
|
1852
|
+
value: string;
|
|
1853
|
+
}
|
|
1854
|
+
/** A flat list of conditions joined by a single connector. */
|
|
1855
|
+
interface ValidatorConditionGroup {
|
|
1856
|
+
connector: '&&' | '||';
|
|
1857
|
+
conditions: ValidatorCondition[];
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
/** A field the guided builder can reference, with a friendly label. */
|
|
1861
|
+
interface ExpressionFieldOption {
|
|
1862
|
+
readonly variable: string;
|
|
1863
|
+
readonly label: string;
|
|
1864
|
+
/** The step the field belongs to, used to group the dropdown (`null` = ungrouped). */
|
|
1865
|
+
readonly stepName: string | null;
|
|
1866
|
+
}
|
|
1867
|
+
/** A set of field options sharing a step, rendered as one `<optgroup>`. */
|
|
1868
|
+
interface ExpressionFieldGroup {
|
|
1869
|
+
/** The `<optgroup>` label, or `null` to render the options without a group. */
|
|
1870
|
+
readonly label: string | null;
|
|
1871
|
+
readonly options: readonly ExpressionFieldOption[];
|
|
1872
|
+
}
|
|
1725
1873
|
/**
|
|
1726
1874
|
* Builder-side editor for authoring a boolean expression (used for guarded
|
|
1727
1875
|
* navigation, conditional validation, and API path-selection rules). Validates
|
|
@@ -1767,17 +1915,40 @@ declare class ValidationExpressioCreatorComponent {
|
|
|
1767
1915
|
expression: string | null;
|
|
1768
1916
|
valueAccessRules: Record<string, TreeNode[]>;
|
|
1769
1917
|
}>;
|
|
1770
|
-
protected readonly textareaElementRef: _angular_core.Signal<ElementRef<HTMLTextAreaElement
|
|
1918
|
+
protected readonly textareaElementRef: _angular_core.Signal<ElementRef<HTMLTextAreaElement> | undefined>;
|
|
1771
1919
|
protected readonly expressionControl: FormControl<string | null>;
|
|
1772
1920
|
protected readonly showSuggestions: _angular_core.WritableSignal<boolean>;
|
|
1773
1921
|
protected readonly optionsSearch: _angular_core.WritableSignal<string | undefined>;
|
|
1774
1922
|
protected readonly variableInEdit: _angular_core.WritableSignal<string | null>;
|
|
1923
|
+
/** Operator choices, shared with the validators builder for label parity. */
|
|
1924
|
+
protected readonly operators: readonly {
|
|
1925
|
+
value: string;
|
|
1926
|
+
label: string;
|
|
1927
|
+
}[];
|
|
1928
|
+
protected readonly mode: _angular_core.Signal<"guided" | "advanced">;
|
|
1929
|
+
protected readonly group: _angular_core.Signal<ValidatorConditionGroup>;
|
|
1930
|
+
protected readonly expressionText: _angular_core.Signal<string>;
|
|
1931
|
+
/** Fields the guided builder can reference, as friendly options. */
|
|
1932
|
+
protected readonly fieldOptions: _angular_core.Signal<readonly ExpressionFieldOption[]>;
|
|
1933
|
+
/**
|
|
1934
|
+
* Field options grouped by their `stepName` for the dropdowns, preserving
|
|
1935
|
+
* first-seen order. Fields without a step collapse into a single ungrouped
|
|
1936
|
+
* bucket (rendered without an `<optgroup>`), so forms that don't carry step
|
|
1937
|
+
* names degrade to a plain flat list.
|
|
1938
|
+
*/
|
|
1939
|
+
protected readonly fieldOptionGroups: _angular_core.Signal<readonly ExpressionFieldGroup[]>;
|
|
1940
|
+
/** Whether the current expression can be represented by the guided builder. */
|
|
1941
|
+
protected readonly canUseGuided: _angular_core.Signal<boolean>;
|
|
1775
1942
|
protected readonly methods: {
|
|
1776
1943
|
label: string;
|
|
1777
1944
|
hint: string;
|
|
1778
1945
|
value: string;
|
|
1779
1946
|
}[];
|
|
1780
|
-
/**
|
|
1947
|
+
/**
|
|
1948
|
+
* Bridge the `expression` input into the FormControl and seed the guided
|
|
1949
|
+
* builder. Reparsing is `untracked` so this only re-runs when the `expression`
|
|
1950
|
+
* input changes — never when the user edits inside either mode.
|
|
1951
|
+
*/
|
|
1781
1952
|
protected readonly expressionBridge: _angular_core.EffectRef;
|
|
1782
1953
|
/** Mirror the `valueAccessRules` input into the local mutable copy. */
|
|
1783
1954
|
protected readonly valueAccessRulesBridge: _angular_core.EffectRef;
|
|
@@ -1795,6 +1966,22 @@ declare class ValidationExpressioCreatorComponent {
|
|
|
1795
1966
|
protected cleanValueAccessRules(): void;
|
|
1796
1967
|
protected selectSuggestionInput(suggestion: string): void;
|
|
1797
1968
|
protected onFocus(): void;
|
|
1969
|
+
/** Read the value-event target as a string. */
|
|
1970
|
+
protected inputValue(event: Event): string;
|
|
1971
|
+
/** Switch the All/Any connector joining the conditions. */
|
|
1972
|
+
protected setConnector(connector: '&&' | '||'): void;
|
|
1973
|
+
/** Append a fresh condition defaulting its field to the first available one. */
|
|
1974
|
+
protected addCondition(): void;
|
|
1975
|
+
/** Apply a partial change to the condition at `index`. */
|
|
1976
|
+
protected updateCondition(index: number, patch: Partial<ValidatorCondition>): void;
|
|
1977
|
+
/** Flip a condition between comparing to a typed value and another field. */
|
|
1978
|
+
protected toggleCompareTo(index: number): void;
|
|
1979
|
+
/** Remove the condition at `index`. */
|
|
1980
|
+
protected removeCondition(index: number): void;
|
|
1981
|
+
/** Switch to the raw expression editor (the escape hatch for power users). */
|
|
1982
|
+
protected useAdvanced(): void;
|
|
1983
|
+
/** Switch back to the guided builder, reparsing the current expression. */
|
|
1984
|
+
protected useGuided(): void;
|
|
1798
1985
|
protected toggleVariableInEdit(variable: string): void;
|
|
1799
1986
|
protected activeVariableChanged(value: TreeNode[] | string | {
|
|
1800
1987
|
[key: string]: TreeNode[] | string;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export { o as DialogTemplateComponent, p as FormBuilderComponent, q as FormsComponent, M as MscoaFormInputComponent, S as SignatureInputElementComponent, T as TDynamicDataEditComponent, b as TDynamicDataViewComponent, r as TFormInputComponent, U as UserFormStepperComponent, V as ValidationExpressioCreatorComponent, u as getSignatureImage, t as testAgainstItem } from './ngx-t-forms-ngx-t-forms-u_kigDid.mjs';
|
|
2
|
-
//# sourceMappingURL=ngx-t-forms-index-dDSobs6A.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-t-forms-index-dDSobs6A.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-t-forms-input-editor.component-BPUOM9kQ.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/default-element/default-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/default-element/default-element.component.html","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.html","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-editor/input-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/input-editor/input-editor.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, DestroyRef, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\nimport { DefaultInputConfig, ElementTypes } from 'ngx-t-forms-types';\r\nimport { take } from 'rxjs';\r\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\r\n\r\n@Component({\r\n selector: 'lib-default-element',\r\n imports: [MatListModule, MatIconModule, MatDividerModule],\r\n templateUrl: './default-element.component.html',\r\n styleUrl: './default-element.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DefaultElementComponent {\r\n protected readonly inputs = DefaultInputConfig;\r\n readonly #store = inject(FormsStoreService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n protected getDefaultInputs(): ElementTypes[] {\r\n const i = JSON.parse(JSON.stringify(DefaultInputConfig)) as Record<string, unknown>;\r\n return Object.keys(i) as ElementTypes[];\r\n }\r\n\r\n protected getInputIcon(element: ElementTypes): string {\r\n return getInputIcon(element);\r\n }\r\n\r\n protected selectInputTemplate(input: ElementTypes): void {\r\n this.#store.selectors.selectInputInEditId$\r\n .pipe(take(1), takeUntilDestroyed(this.#destroyRef))\r\n .subscribe((id) => {\r\n if (!id) return;\r\n this.#store.actionsFormBuilder.selectInputTemplate(id, input);\r\n });\r\n }\r\n}\r\n","<br>\r\n<mat-nav-list style=\"margin: 5px;\">\r\n\r\n\r\n @defer () {\r\n @for (input of getDefaultInputs(); track input) {\r\n @if (inputs[input]?.disabled === false) {\r\n <mat-list-item style=\"background: var(--mdc-elevated-card-container-color, var(--mat-app-surface-container-low));\"\r\n (click)=\"selectInputTemplate(input)\">\r\n <mat-icon matListItemAvatar>{{ getInputIcon(input) }}</mat-icon>\r\n <span matListItemTitle href=\"...\">{{ inputs[input]?.label}}</span>\r\n </mat-list-item>\r\n <mat-divider></mat-divider>\r\n }\r\n }\r\n \r\n }\r\n\r\n\r\n</mat-nav-list>","import { ChangeDetectionStrategy, Component, DOCUMENT, PLATFORM_ID, computed, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\n\nimport { TDynamicDataEditComponent, TDynamicDataViewComponent } from '../../..';\n\nimport type { ElementEditorInnerSectionElementInterface, ElementTypes } from 'ngx-t-forms-types';\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\n\n@Component({\n selector: 'lib-input-element-editor',\n imports: [\n MatToolbarModule,\n MatDividerModule,\n MatExpansionModule,\n MatIconModule,\n MatListModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatCardModule,\n MatFormFieldModule,\n TDynamicDataEditComponent,\n TDynamicDataViewComponent,\n ],\n templateUrl: './input-element-editor.component.html',\n styleUrl: './input-element-editor.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputElementEditorComponent {\n readonly #store = inject(FormsStoreService);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #document = inject(DOCUMENT);\n\n readonly #signals = this.#store.formBuilderSignalSelectors;\n\n protected readonly vm = computed(() => ({\n defaultInputInEdit: this.#signals.defaultInputInEdit(),\n inputInEdit: this.#signals.inputInEdit(),\n inputElementEditorConfigs: this.#signals.inputElementEditorConfigs(),\n inputInEditValidationErrors: this.#signals.inputInEditValidationErrors(),\n formInputs: this.#signals.getAllFormInputs(),\n }));\n\n protected readonly elementConfigurationChanged = (\n value: unknown,\n ele: ElementEditorInnerSectionElementInterface,\n ): void => {\n const inputVal = this.#signals.inputInEdit();\n if (!inputVal) return;\n this.#store.actionsFormBuilder.elementConfigurationChanged(inputVal.id, value, ele);\n };\n\n protected readonly clearInputInEdit = (): void => {\n const inputVal = this.#signals.inputInEdit();\n if (!inputVal) return;\n this.#store.actionsFormBuilder.clearInputInEdit(inputVal.id);\n };\n\n protected readonly elementBlur = (\n event: unknown,\n element: ElementEditorInnerSectionElementInterface,\n ): void => {\n const inputVal = this.#signals.inputInEdit();\n if (!inputVal) return;\n this.#store.actionsFormBuilder.elementBlur(inputVal.id, event, element);\n };\n\n protected getInputIcon(element: ElementTypes | undefined | null): string {\n return getInputIcon(element);\n }\n\n protected showDebugData(): void {\n if (!isPlatformBrowser(this.#platformId)) return;\n const win = this.#document.defaultView;\n if (!win) return;\n const jsonData = JSON.stringify(this.vm(), null, 2);\n const blob = new Blob([jsonData], { type: 'application/json' });\n const url = win.URL.createObjectURL(blob);\n const link = this.#document.createElement('a');\n link.href = url;\n link.download = 'debug-data.json';\n link.click();\n win.URL.revokeObjectURL(url);\n }\n}\n","<mat-toolbar class=\"section-header\">\r\n <span class=\"header\">Element configuration</span>\r\n <span class=\"spacer\"></span>\r\n</mat-toolbar>\r\n<mat-divider></mat-divider>\r\n@if (vm(); as vm) {\r\n @defer (on viewport) {\r\n\r\n <mat-accordion togglePosition=\"before\">\r\n @for(section of (vm.inputElementEditorConfigs.editorSections||[]); track section.id; let i = $index) {\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{section.label}}\r\n <span class=\"spacer\"></span>\r\n @if (section.hasErrors) {\r\n <mat-icon color=\"warn\">error</mat-icon>\r\n }\r\n @if (section.showItemValue && !!(vm.inputInEdit)) {\r\n <span class=\"showItemValue\">\r\n {{ vm.inputInEdit[section.showItemValue]}}\r\n </span>\r\n }\r\n <mat-divider style=\"position: absolute; left:0px; width:100%; bottom:0px;\"></mat-divider>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <div style=\"margin-top: 16px;\"></div>\r\n\r\n <!-- Element type selector (only in first section) -->\r\n @if(i === 0) {\r\n <mat-nav-list>\r\n <mat-list-item [disabled]=\"vm.inputInEdit?.systemDefault\" matTooltip=\"Change input element\"\r\n (click)=\"vm.inputInEdit?.systemDefault? '':clearInputInEdit()\">\r\n <mat-icon matListItemAvatar [attr.aria-label]=\"(vm.defaultInputInEdit)?.label\">\r\n {{ getInputIcon(vm.inputInEdit?.element) }}\r\n </mat-icon>\r\n <span matListItemTitle>{{ (vm.defaultInputInEdit)?.label}}</span>\r\n <span matListItemMeta>\r\n <mat-icon>arrow_forward_ios</mat-icon>\r\n </span>\r\n </mat-list-item>\r\n <mat-divider></mat-divider>\r\n </mat-nav-list>\r\n }\r\n\r\n <!-- Section elements -->\r\n @for(element of section.elements; track element.id) {\r\n <p style=\"margin-bottom: 16px; margin-top: 8px;\">\r\n @defer (on viewport) {\r\n <lib-t-dynamic-data-edit\r\n [editorConfig]=\"element\"\r\n [data]=\"(vm.inputInEdit)\"\r\n [validationErrors]=\"element.computedErrors||[]\"\r\n (valueChange)=\"elementConfigurationChanged($event, element)\" [formInputs]=\"(vm.formInputs)||[]\"\r\n (blur)=\"elementBlur($event, element)\">\r\n </lib-t-dynamic-data-edit>\r\n } @placeholder {\r\n <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"18\"></mat-spinner>\r\n </div>\r\n }\r\n </p>\r\n }\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n } @placeholder {\r\n <div style=\"padding: 50px; display:flex; justify-content:center; align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"50\" />\r\n </div>\r\n } @error {\r\n <div style=\"padding: 16px;\">\r\n <mat-error>\r\n <h3>Error loading element editor</h3>\r\n <p>An error occurred while loading the element editor. Please try again later.</p>\r\n </mat-error>\r\n </div>\r\n\r\n }\r\n\r\n\r\n\r\n\r\n <!-- Diagnostic section -->\r\n <mat-toolbar class=\"section-header\">\r\n <span class=\"header\">Diagnostic data</span>\r\n <span class=\"spacer\"></span>\r\n </mat-toolbar>\r\n <mat-divider></mat-divider>\r\n\r\n <mat-accordion togglePosition=\"before\">\r\n\r\n @if(((vm.inputInEditValidationErrors)||[]).length > 0) {\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n Validation Errors\r\n <span class=\"spacer\"></span>\r\n <mat-error>\r\n {{(vm.inputInEditValidationErrors).length||''}}\r\n </mat-error>\r\n <mat-divider style=\"position: absolute; left:0px; width:100%; bottom:0px;\"></mat-divider>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div style=\"margin-top: 16px;\"></div>\r\n <mat-error style=\"border: solid 1px; border-radius: 8px; padding: 16px;\">\r\n <h1>All configuration errors:</h1>\r\n <p>\r\n {{(vm.inputInEditValidationErrors).length||''}} errors found. When an error is found, the input will\r\n not\r\n be saved.\r\n </p>\r\n <ul>\r\n @for(error of (vm.inputInEditValidationErrors); track error.key) {\r\n <li>\r\n <strong>{{error.key}}</strong> {{error.message}}\r\n </li>\r\n }\r\n </ul>\r\n </mat-error>\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header style=\" padding-right: 0px;\">\r\n <mat-panel-title>\r\n Complete Virtual Model\r\n <span class=\"spacer\"></span>\r\n <button mat-icon-button (click)=\"showDebugData()\">\r\n <mat-icon>\r\n troubleshoot\r\n </mat-icon>\r\n </button>\r\n <mat-divider style=\"position: absolute; left:0px; width:100%; bottom:0px;\"></mat-divider>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div style=\"margin-top: 16px;\"></div>\r\n <mat-card style=\"padding: 16px;\">\r\n\r\n <lib-t-dynamic-data-view [data]=\"({\r\n 'Default Input Template InEdit': vm.defaultInputInEdit,\r\n 'Input In Edit': vm.inputInEdit,\r\n 'Input Editor Sections': vm.inputElementEditorConfigs?.editorSections,\r\n })\"></lib-t-dynamic-data-view>\r\n\r\n </mat-card>\r\n </mat-expansion-panel>\r\n\r\n </mat-accordion>\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { DefaultElementComponent } from '../default-element/default-element.component';\r\nimport { InputElementEditorComponent } from '../input-element-editor/input-element-editor.component';\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { Observable, take, tap } from 'rxjs';\r\nimport { DefaultInputConfig } from 'ngx-t-forms-types';\r\n\r\n@Component({\r\n selector: 'lib-input-editor',\r\n imports: [\r\n AsyncPipe,\r\n MatCardModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatToolbarModule,\r\n DragDropModule,\r\n DefaultElementComponent,\r\n InputElementEditorComponent,\r\n ],\r\n templateUrl: './input-editor.component.html',\r\n styleUrl: './input-editor.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class InputEditorComponent {\r\n readonly #store = inject(FormsStoreService);\r\n\r\n protected readonly defaultInputs = DefaultInputConfig;\r\n protected readonly inputInEdit$ = this.#store.formBuilderSelectors.inputInEdit$;\r\n protected readonly defaultInputInEdit$ = this.#store.formBuilderSelectors.defaultInputInEdit$;\r\n\r\n protected readonly saveInput = (): void => {\r\n this.inputInEdit$\r\n .pipe(\r\n take(1),\r\n tap((inputVal) => {\r\n if (!inputVal) return;\r\n this.#store.actionsFormBuilder.saveInput(inputVal.id);\r\n }),\r\n )\r\n .subscribe();\r\n };\r\n\r\n protected readonly closeEditor = (): void => {\r\n this.#store.actions.setInputInEditId({ inputInEdit: null });\r\n };\r\n\r\n protected get validationErrors$(): Observable<{ key: string; message: string }[] | null> {\r\n return this.#store.formBuilderSelectors.inputInEditValidationErrors$;\r\n }\r\n}\r\n","<mat-card\r\n\r\nstyle=\"\r\n\r\nbackground: var(--mat-sys-surface-container, var(--mat-app-surface));\r\nmargin:0px;\r\nborder:solid 1px var(--mat-divider-color, var(--mat-app-outline))\">\r\n\r\n <mat-card-header >\r\n <mat-card-title>\r\n {{\r\n !!(inputInEdit$|async)?.element\r\n ? \"Edit \" + (inputInEdit$|async)?.label + \" element\"\r\n : \"Setup Form Element\"\r\n }}\r\n </mat-card-title>\r\n <mat-card-subtitle> {{\r\n !!(inputInEdit$|async)?.element? \"Configure the element below\": \"Form element are components making up a form section. Types of form elements are defined by their behaviour and use case, for example a date range picker is well suited to determine duration.\"\r\n }}</mat-card-subtitle>\r\n <button style=\"position: absolute;right:4px\" mat-icon-button cdkDragHandle >\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>\r\n </mat-card-header>\r\n\r\n\r\n\r\n @if(!!((inputInEdit$|async))?.element){\r\n <lib-input-element-editor\r\n style=\"background: var(--mat-sys-surface-container, var(--mat-app-surface))\">\r\n </lib-input-element-editor>\r\n }@else{\r\n <lib-default-element style=\"background: var(--mat-sys-surface-container, var(--mat-app-surface))\"></lib-default-element>\r\n }\r\n <br>\r\n\r\n <br>\r\n <mat-divider style=\"position: sticky;bottom: 53px;\"></mat-divider>\r\n <mat-toolbar style=\"position: sticky;bottom: 0;\">\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"closeEditor()\" class=\"\" mat-button>close</button>\r\n\r\n @if (!((inputInEdit$|async))?.id) {\r\n <button mat-flat-button\r\n (click)=\"saveInput()\"\r\n [disabled]=\"((validationErrors$|async)||[]).length>0\"\r\n color=\"primary\">save new input</button>\r\n }\r\n </mat-toolbar>\r\n\r\n\r\n</mat-card>\r\n"],"names":["i1","i2","i3","i4","i5","i6","i7","i8","i9"],"mappings":"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"}
|