ngx-t-forms 2.0.29 → 2.0.31
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 +104 -0
- package/fesm2022/ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs +85 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs +643 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs +97 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs +195 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs +261 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs +85 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs +156 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs +368 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs +704 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs +294 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs +240 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs +205 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs +86 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs +22 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs +179 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs +319 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs +379 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs +124 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs +31 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs +180 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs +2 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs +105 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs +181 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-map-mat-options-keys-CbdW82su.mjs → ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs} +12 -14
- package/fesm2022/ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs +66 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs +211 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs +165 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs +38 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs +38 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs +126 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs +336 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs +74 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs +905 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs +19461 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs +555 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs +748 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs +358 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs +272 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs +398 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs +38 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs +98 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs +150 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs +169 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs +204 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs +95 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs +82 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs +733 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs +1303 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs.map +1 -0
- package/fesm2022/ngx-t-forms.mjs +2 -1
- package/fesm2022/ngx-t-forms.mjs.map +1 -1
- package/package.json +20 -18
- package/styles/_editor-mixins.scss +62 -0
- package/styles/_json-editor-syntax.scss +26 -0
- package/styles/_signature-pad.scss +26 -0
- package/styles/_tokens.scss +148 -0
- package/types/ngx-t-forms.d.ts +1767 -621
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs +0 -313
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs +0 -191
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs +0 -207
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs +0 -204
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs +0 -289
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs +0 -134
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs +0 -22
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs +0 -270
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs +0 -345
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs +0 -147
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-map-mat-options-keys-CbdW82su.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs +0 -105
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs +0 -109
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs +0 -155
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs +0 -28
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs +0 -43
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs +0 -116
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs +0 -296
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs +0 -83
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs +0 -16844
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs +0 -613
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs +0 -269
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs +0 -190
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs +0 -291
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs +0 -156
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs +0 -186
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs +0 -187
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs +0 -215
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs.map +0 -1
package/types/ngx-t-forms.d.ts
CHANGED
|
@@ -1,65 +1,420 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import {
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
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 {
|
|
5
|
-
|
|
6
|
-
import { IStepOption } from 'ngx-ui-tour-md-menu';
|
|
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';
|
|
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';
|
|
7
6
|
import * as rxjs from 'rxjs';
|
|
8
|
-
import { Observable, Subject
|
|
9
|
-
import {
|
|
7
|
+
import { Observable, Subject } from 'rxjs';
|
|
8
|
+
import { PipelineStage } from 'mongoose';
|
|
9
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
10
|
+
import { MatStepper } from '@angular/material/stepper';
|
|
10
11
|
import { StepperSelectionEvent, StepState } from '@angular/cdk/stepper';
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import * as
|
|
14
|
-
import {
|
|
15
|
-
import { ComponentStore } from '@ngrx/component-store';
|
|
16
|
-
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
12
|
+
import { HttpClient } from '@angular/common/http';
|
|
13
|
+
import { FormGroup, FormControl } from '@angular/forms';
|
|
14
|
+
import * as ngx_ui_tour_md_menu from 'ngx-ui-tour-md-menu';
|
|
15
|
+
import { IStepOption } from 'ngx-ui-tour-md-menu';
|
|
17
16
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
18
17
|
import { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree';
|
|
19
|
-
import {
|
|
20
|
-
import * as ngx_ui_tour_core from 'ngx-ui-tour-core';
|
|
18
|
+
import { MatDialogRef } from '@angular/material/dialog';
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
/** @internal */
|
|
21
|
+
declare const enum NgxTFormsFeatureKind {
|
|
22
|
+
SilencedConsole = 0,
|
|
23
|
+
FormBuilder = 1,
|
|
24
|
+
ImportTower = 2,
|
|
25
|
+
HttpPipeline = 3,
|
|
26
|
+
InputSecret = 4,
|
|
27
|
+
RouterFormId = 5
|
|
26
28
|
}
|
|
29
|
+
interface NgxTFormsFeature {
|
|
30
|
+
readonly kind: NgxTFormsFeatureKind;
|
|
31
|
+
readonly providers: Provider[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Registers ngx-t-forms with the application injector.
|
|
35
|
+
*
|
|
36
|
+
* @param config Runtime configuration (form actions, builder, etc.).
|
|
37
|
+
* @param features Optional with*() extension features.
|
|
38
|
+
* @returns EnvironmentProviders ready to drop into `bootstrapApplication`.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* bootstrapApplication(AppComponent, {
|
|
42
|
+
* providers: [
|
|
43
|
+
* provideNgxTForms(myConfig, withSilencedConsole(), withFormBuilder()),
|
|
44
|
+
* ],
|
|
45
|
+
* });
|
|
46
|
+
*/
|
|
47
|
+
declare function provideNgxTForms(config: NgxTFormsConfig, ...features: NgxTFormsFeature[]): EnvironmentProviders;
|
|
27
48
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
49
|
+
/**
|
|
50
|
+
* @public
|
|
51
|
+
*
|
|
52
|
+
* Binds the default HTTP-backed {@link HttpPipelineRepository} to
|
|
53
|
+
* {@link PIPELINE_REPOSITORY}. Required when the consumer uses any
|
|
54
|
+
* pipeline-running feature (e.g. the pipeline-generator UI) and wants the
|
|
55
|
+
* built-in HTTP transport.
|
|
56
|
+
*
|
|
57
|
+
* Consumers that supply their own {@link PipelineRepository} implementation
|
|
58
|
+
* should bind it directly to {@link PIPELINE_REPOSITORY} instead of (or after)
|
|
59
|
+
* calling this — provider order resolution applies.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* bootstrapApplication(AppComponent, {
|
|
63
|
+
* providers: [
|
|
64
|
+
* provideHttpClient(),
|
|
65
|
+
* provideNgxTForms(config, withHttpPipeline()),
|
|
66
|
+
* ],
|
|
67
|
+
* });
|
|
68
|
+
*/
|
|
69
|
+
declare function withHttpPipeline(): NgxTFormsFeature;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Registers the HMAC secret used to derive per-input encryption keys for the
|
|
73
|
+
* signature input. Required only when the signature input is in use — if the
|
|
74
|
+
* token is unbound at the point of encryption/decryption the library throws a
|
|
75
|
+
* clear error rather than silently falling back to a baked-in default.
|
|
76
|
+
*
|
|
77
|
+
* @param secret High-entropy string supplied by the consumer (e.g. read from
|
|
78
|
+
* their own `environment.ts` or a runtime config endpoint).
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* provideNgxTForms(
|
|
82
|
+
* myConfig,
|
|
83
|
+
* withInputSecret(environment.ngxTFormsInputSecret),
|
|
84
|
+
* )
|
|
85
|
+
*/
|
|
86
|
+
declare function withInputSecret(secret: string): NgxTFormsFeature;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Feeds {@link FormBuilderComponent} its `formId` from the activated route,
|
|
90
|
+
* preserving the historical route-driven form loading. Shipped by default in
|
|
91
|
+
* `provideNgxTForms`, so existing consumers see identical behaviour (D-B2 / §5.5);
|
|
92
|
+
* a router-free build resolves {@link FORM_ROUTE_SOURCE} to `EMPTY` and the
|
|
93
|
+
* builder loads from its `formId` input only.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* provideNgxTForms(config, withRouterFormId())
|
|
97
|
+
*
|
|
98
|
+
* @public
|
|
99
|
+
*/
|
|
100
|
+
declare function withRouterFormId(): NgxTFormsFeature;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Provides the action handlers (submit, save, cancel, etc.) that the forms
|
|
104
|
+
* runtime invokes when the user interacts with form controls. Bound from the
|
|
105
|
+
* `formActions` field of `NgxTFormsConfig` when the consumer calls
|
|
106
|
+
* `provideNgxTForms`.
|
|
107
|
+
*
|
|
108
|
+
* @see provideNgxTForms
|
|
109
|
+
*/
|
|
110
|
+
declare const FORM_ACTIONS_TOKEN: InjectionToken<IFormActions>;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Provides the active `FormInterface` definition rendered by the forms
|
|
114
|
+
* runtime. Components downstream of the form host inject this token to read
|
|
115
|
+
* the form configuration without coupling to the store.
|
|
116
|
+
*
|
|
117
|
+
* @see provideNgxTForms
|
|
118
|
+
*/
|
|
119
|
+
declare const FORM_CONFIG_TOKEN: InjectionToken<FormInterface>;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Provides the active `FormSlideInterface` (the slide/step currently being
|
|
123
|
+
* rendered). Scoped per slide by the form host so individual inputs can read
|
|
124
|
+
* their slide context.
|
|
125
|
+
*
|
|
126
|
+
* @see provideNgxTForms
|
|
127
|
+
*/
|
|
128
|
+
declare const FORM_SLIDES_TOKEN: InjectionToken<FormSlideInterface>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Provides the in-class utility object (`InClassFormUtilsInterface`) that
|
|
132
|
+
* exposes shared helper functions to form input components — formatting,
|
|
133
|
+
* validation helpers, and cross-input lookups.
|
|
134
|
+
*
|
|
135
|
+
* @see provideNgxTForms
|
|
136
|
+
*/
|
|
137
|
+
declare const UTILS_OBJECT_TOKEN: InjectionToken<InClassFormUtilsInterface>;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Provides the merged form-input descriptor injected into each individual
|
|
141
|
+
* input element. The descriptor is an intersection of every supported input
|
|
142
|
+
* shape (`IWorkflowDocumentPicker & IBasicFormInput & IFileUploadInput &
|
|
143
|
+
* IDateRangePickerInput & ITextareaProperties & IToggleInput & IMatrixInput
|
|
144
|
+
* & IMultiple`) so a single token can describe any rendered input.
|
|
145
|
+
*
|
|
146
|
+
* @see provideNgxTForms
|
|
147
|
+
*/
|
|
148
|
+
declare const FORM_INPUTS_TOKEN: InjectionToken<IWorkflowDocumentPicker & IBasicFormInput & IFileUploadInput & IDateRangePickerInput & ITextareaProperties & IToggleInput & IMatrixInput & IMultiple>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Provides the `IMultiple` configuration to "multiple"-type inputs (inputs
|
|
152
|
+
* that produce an array of values). Scoped per input instance.
|
|
153
|
+
*
|
|
154
|
+
* @see provideNgxTForms
|
|
155
|
+
*/
|
|
156
|
+
declare const MULTIPLE_FORM_INPUT_TOKEN: InjectionToken<IMultiple>;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Provides a factory function that returns an `Observable<IGetTreeResponse>`
|
|
160
|
+
* representing the MSCOA chart-of-accounts tree. Consumers bind this token
|
|
161
|
+
* to their backend lookup so MSCOA-aware inputs can lazily fetch the tree
|
|
162
|
+
* without depending on a concrete HTTP client.
|
|
163
|
+
*
|
|
164
|
+
* @see provideNgxTForms
|
|
165
|
+
*/
|
|
166
|
+
declare const MSCOA_TREE_PROVIDER: InjectionToken<() => Observable<IGetTreeResponse>>;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Provides the top-level `NgxTFormsConfig` supplied by the consumer when
|
|
170
|
+
* calling `provideNgxTForms`. This is the root configuration token from
|
|
171
|
+
* which `formActions`, `formBuilder`, and other runtime concerns are read.
|
|
172
|
+
*
|
|
173
|
+
* @see provideNgxTForms
|
|
174
|
+
*/
|
|
175
|
+
declare const NGX_T_FORMS_CONFIG_TOKEN: InjectionToken<NgxTFormsConfig>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @public
|
|
179
|
+
*
|
|
180
|
+
* Abstract repository for MongoDB-aggregation-pipeline operations used by the
|
|
181
|
+
* library's pipeline-generator UI. The default HTTP-backed implementation is
|
|
182
|
+
* {@link HttpPipelineRepository}, bound by {@link withHttpPipeline}.
|
|
183
|
+
*
|
|
184
|
+
* Consumers may bind a custom implementation against
|
|
185
|
+
* {@link PIPELINE_REPOSITORY} (e.g. for offline / mocked environments) by
|
|
186
|
+
* providing an alternative `useClass` against the same token instead of (or
|
|
187
|
+
* after) `withHttpPipeline()`.
|
|
188
|
+
*
|
|
189
|
+
* Only the methods that cross the HTTP boundary are abstracted here; pipeline
|
|
190
|
+
* orchestration state (`pipeline$`, `chatHistory$`, etc.) remains inside the
|
|
191
|
+
* adapter / generator UI per LP §9 (the repository owns I/O, not UI state).
|
|
192
|
+
*/
|
|
193
|
+
declare abstract class PipelineRepository {
|
|
194
|
+
/**
|
|
195
|
+
* Execute the given aggregation pipeline against the configured backend for
|
|
196
|
+
* the supplied workflow.
|
|
197
|
+
*
|
|
198
|
+
* @param pipeline - Validated MongoDB aggregation stages to run.
|
|
199
|
+
* @param workflowId - Identifier of the workflow whose schema the pipeline
|
|
200
|
+
* targets.
|
|
201
|
+
* @returns An observable that emits exactly one {@link IRunPipelineResponse}
|
|
202
|
+
* then completes. Errors surface as a typed Error.
|
|
203
|
+
*/
|
|
204
|
+
abstract runPipeline(pipeline: PipelineStage[], workflowId: string): Observable<IRunPipelineResponse>;
|
|
205
|
+
/**
|
|
206
|
+
* Ask the configured backend to generate (or refine) an aggregation pipeline
|
|
207
|
+
* from a natural-language query plus the workflow's document schema.
|
|
208
|
+
*
|
|
209
|
+
* @param query - The user's prompt.
|
|
210
|
+
* @param schema - Document schema the generator should target.
|
|
211
|
+
* @param threadId - Optional generator-session id (continues an in-flight
|
|
212
|
+
* chat).
|
|
213
|
+
* @param existingPipeline - The pipeline-so-far, for incremental refinement.
|
|
214
|
+
* @param previousError - The last execution error to feed back into the
|
|
215
|
+
* model, when applicable.
|
|
216
|
+
*/
|
|
217
|
+
abstract generatePipeline(query: string, schema: object, threadId: string | undefined, existingPipeline: PipelineStage[], previousError: string): Observable<IPipelineGenerationResponse>;
|
|
218
|
+
/**
|
|
219
|
+
* Fetch the document schema for the supplied workflow.
|
|
220
|
+
*
|
|
221
|
+
* @param workflowId - Identifier of the workflow whose schema to load.
|
|
222
|
+
*/
|
|
223
|
+
abstract getSchema(workflowId: string): Observable<{
|
|
224
|
+
schema: object;
|
|
225
|
+
}>;
|
|
31
226
|
}
|
|
32
227
|
|
|
33
|
-
|
|
228
|
+
/**
|
|
229
|
+
* @public
|
|
230
|
+
*
|
|
231
|
+
* Token binding the {@link PipelineRepository} abstraction. The default
|
|
232
|
+
* HTTP-backed implementation is {@link HttpPipelineRepository}, registered by
|
|
233
|
+
* {@link withHttpPipeline}. Consumers may substitute their own implementation
|
|
234
|
+
* by binding `useClass` (or `useValue` for a mock) against this token.
|
|
235
|
+
*/
|
|
236
|
+
declare const PIPELINE_REPOSITORY: InjectionToken<PipelineRepository>;
|
|
34
237
|
|
|
35
|
-
|
|
238
|
+
/**
|
|
239
|
+
* Secret used to derive per-input HMAC keys for client-side encryption of
|
|
240
|
+
* sensitive form values (currently: signature input payloads).
|
|
241
|
+
*
|
|
242
|
+
* Consumers MUST configure this via {@link withInputSecret} when the
|
|
243
|
+
* signature input is in use. The library does not ship a default — hardcoding
|
|
244
|
+
* a secret inside a published library would render it public.
|
|
245
|
+
*
|
|
246
|
+
* Treat the value as opaque, high-entropy, and never derived from anything
|
|
247
|
+
* the browser can read (e.g. `environment.ts` baked into the bundle is
|
|
248
|
+
* acceptable for low-sensitivity rotation; HSM-backed values are better).
|
|
249
|
+
*
|
|
250
|
+
* @see withInputSecret
|
|
251
|
+
*/
|
|
252
|
+
declare const INPUT_SECRET_TOKEN: InjectionToken<string>;
|
|
36
253
|
|
|
37
254
|
/**
|
|
38
|
-
*
|
|
39
|
-
* Parent form listens to all descendant changes, with validation cascading upward.
|
|
255
|
+
* Optional source of the form id to load into {@link FormBuilderComponent}.
|
|
40
256
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
257
|
+
* Bound by `withRouterFormId()` (shipped by default in `provideNgxTForms`) to the
|
|
258
|
+
* activated route's `formId` param. When unbound — e.g. a router-free build — the
|
|
259
|
+
* builder loads from its `formId` input only. This decouples the builder from a
|
|
260
|
+
* direct `ActivatedRoute` dependency (plan D-B2 / §5.5).
|
|
261
|
+
*
|
|
262
|
+
* @public
|
|
44
263
|
*/
|
|
45
|
-
declare
|
|
264
|
+
declare const FORM_ROUTE_SOURCE: InjectionToken<Observable<string | undefined>>;
|
|
46
265
|
|
|
47
|
-
|
|
48
|
-
|
|
266
|
+
/**
|
|
267
|
+
* @public
|
|
268
|
+
*
|
|
269
|
+
* Default HTTP-backed implementation of {@link PipelineRepository}. Bound by
|
|
270
|
+
* {@link withHttpPipeline}; consumers needing a different transport should
|
|
271
|
+
* provide their own implementation against {@link PIPELINE_REPOSITORY}.
|
|
272
|
+
*
|
|
273
|
+
* The endpoint host (`http://localhost:5000`) is preserved from the pre-Phase-2
|
|
274
|
+
* `PipelineService` for I-1 parity. Configurable endpoints are tracked for a
|
|
275
|
+
* later phase — do not widen this surface ad-hoc.
|
|
276
|
+
*/
|
|
277
|
+
declare class HttpPipelineRepository implements PipelineRepository {
|
|
278
|
+
#private;
|
|
279
|
+
runPipeline(pipeline: PipelineStage[], workflowId: string): Observable<IRunPipelineResponse>;
|
|
280
|
+
generatePipeline(query: string, schema: object, threadId: string | undefined, existingPipeline: PipelineStage[], previousError: string): Observable<IPipelineGenerationResponse>;
|
|
281
|
+
getSchema(workflowId: string): Observable<{
|
|
282
|
+
schema: object;
|
|
283
|
+
}>;
|
|
284
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HttpPipelineRepository, never>;
|
|
285
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<HttpPipelineRepository>;
|
|
49
286
|
}
|
|
50
287
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
288
|
+
/**
|
|
289
|
+
* Renders the list of forms a user can open, edit, or build, with search,
|
|
290
|
+
* grouping (system vs custom), and section switching (active / archived /
|
|
291
|
+
* deleted) wired through the consumer-supplied `formBuilder` config.
|
|
292
|
+
*
|
|
293
|
+
* @remarks
|
|
294
|
+
* The component reads its data from `FormsStoreService` (provided locally)
|
|
295
|
+
* and reads the consumer's `NgxTFormsConfig` from {@link NGX_T_FORMS_CONFIG_TOKEN}
|
|
296
|
+
* to discover the close-button template and form CRUD callbacks
|
|
297
|
+
* (`editForm`, `addNewForm`).
|
|
298
|
+
*
|
|
299
|
+
* Inputs:
|
|
300
|
+
* - _None._ The component is driven entirely by the activated route and
|
|
301
|
+
* the injected forms store.
|
|
302
|
+
*
|
|
303
|
+
* Outputs:
|
|
304
|
+
* - _None._ User intents (archive / unarchive / delete / edit / add) are
|
|
305
|
+
* delegated to the store and to the consumer's `formBuilder` config.
|
|
306
|
+
*/
|
|
307
|
+
declare class FormsComponent implements OnInit {
|
|
308
|
+
#private;
|
|
309
|
+
selectFormsList$: Observable<LocalFormStateSelectorInterface[]>;
|
|
310
|
+
selectGroupedForms$: Observable<Record<string, LocalFormStateSelectorInterface[]>>;
|
|
311
|
+
searchQuery$: Observable<string>;
|
|
312
|
+
selectHasActiveSearch$: Observable<boolean>;
|
|
313
|
+
selectFilteredGroupedForms$: Observable<Record<string, LocalFormStateSelectorInterface[]>>;
|
|
314
|
+
selectLoadingForms$: Observable<boolean>;
|
|
315
|
+
selectErrors$: FormsStoreSelectorsInterface['selectErrors$'];
|
|
316
|
+
selectFormListSection$: Observable<FormListSection>;
|
|
317
|
+
NGX_T_FORMS_CONFIG: ngx_t_forms_types.NgxTFormsConfig;
|
|
318
|
+
closeButton: ngx_t_forms_types.ActionButton;
|
|
319
|
+
get formListSections(): Array<{
|
|
320
|
+
value: FormListSection;
|
|
321
|
+
label: string;
|
|
322
|
+
}>;
|
|
323
|
+
viewportWidth: number;
|
|
324
|
+
ngOnInit(): void;
|
|
325
|
+
labels: {
|
|
326
|
+
label: string;
|
|
327
|
+
formControlName: string;
|
|
328
|
+
}[];
|
|
329
|
+
activeForm: string | null;
|
|
330
|
+
getCols(): number;
|
|
331
|
+
getFormAvatar(formTitle: string): string;
|
|
332
|
+
archive(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
333
|
+
unarchive(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
334
|
+
delete(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
335
|
+
loadForms(): void;
|
|
336
|
+
router: Router;
|
|
337
|
+
activatedRoute: ActivatedRoute;
|
|
338
|
+
setSection(value: FormListSection): void;
|
|
339
|
+
editForm(form: LocalFormStateSelectorInterface): void;
|
|
340
|
+
addNewForm(): void;
|
|
341
|
+
clearSearch(): void;
|
|
342
|
+
get searchQuery(): string;
|
|
343
|
+
set searchQuery(v: string);
|
|
344
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormsComponent, never>;
|
|
345
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormsComponent, "lib-forms, app-forms", never, {}, {}, never, never, true, never>;
|
|
61
346
|
}
|
|
62
347
|
|
|
348
|
+
/**
|
|
349
|
+
* Editor surface for authoring a form definition — sections, steps, and
|
|
350
|
+
* the individual inputs in each step. Hosts the section stepper, input
|
|
351
|
+
* editor, builder menu, and missing-config diagnostics.
|
|
352
|
+
*
|
|
353
|
+
* @remarks
|
|
354
|
+
* The component reads its state and effects from a locally provided
|
|
355
|
+
* `FormsStoreService` and pulls the consumer-supplied close-button template
|
|
356
|
+
* from {@link NGX_T_FORMS_CONFIG_TOKEN}. Form loading is driven either by
|
|
357
|
+
* the `formId` input or by the activated route's `formId` param.
|
|
358
|
+
*
|
|
359
|
+
* Inputs:
|
|
360
|
+
* - `formId: string` (optional) — when set, triggers `loadForm$` on the store.
|
|
361
|
+
*
|
|
362
|
+
* Outputs:
|
|
363
|
+
* - _None._ All save/refresh intents are dispatched through the local store.
|
|
364
|
+
*
|
|
365
|
+
* @public
|
|
366
|
+
* @deprecated Migrating to the strict library mandates. Public surface is
|
|
367
|
+
* preserved verbatim; internal authoring is being refactored.
|
|
368
|
+
*/
|
|
369
|
+
declare class FormBuilderComponent {
|
|
370
|
+
#private;
|
|
371
|
+
/** Form-load spinner. */
|
|
372
|
+
readonly selectLoadingForm: _angular_core.Signal<boolean>;
|
|
373
|
+
/** Builder busy (saving / mutating). */
|
|
374
|
+
readonly selectFormBuilderIsBusy: _angular_core.Signal<boolean>;
|
|
375
|
+
/** "Updated N days ago" label, or null. */
|
|
376
|
+
readonly selectFormUpdated: _angular_core.Signal<string | Date | null>;
|
|
377
|
+
/** Whether the current form passes validation and can be saved. */
|
|
378
|
+
readonly canSaveForm: _angular_core.Signal<boolean>;
|
|
379
|
+
/** Whether the form in edit is unsaved (no formId yet). */
|
|
380
|
+
readonly isNewForm: _angular_core.Signal<boolean>;
|
|
381
|
+
/** Optional form identifier. When set, triggers `loadForm$` on the local store. */
|
|
382
|
+
readonly formId: _angular_core.InputSignal<string | undefined>;
|
|
383
|
+
/** Whether a form id is present in the store. */
|
|
384
|
+
readonly selectHasFormId: _angular_core.Signal<boolean>;
|
|
385
|
+
/** Whether the form has missing/invalid configuration. */
|
|
386
|
+
readonly hasMissingConfigs: _angular_core.Signal<boolean>;
|
|
387
|
+
/** Whether an input editor panel is currently open. */
|
|
388
|
+
readonly elementEditorOpen: _angular_core.Signal<boolean>;
|
|
389
|
+
pendingExternalRefresh: _angular_core.Signal<{
|
|
390
|
+
form: ngx_t_forms_types.FormInterface;
|
|
391
|
+
timestamp: Date;
|
|
392
|
+
} | null>;
|
|
393
|
+
refreshCountdown: _angular_core.WritableSignal<number>;
|
|
394
|
+
constructor();
|
|
395
|
+
triggerRefreshNow(): void;
|
|
396
|
+
readonly NGX_T_FORMS_CONFIG: ngx_t_forms_types.NgxTFormsConfig;
|
|
397
|
+
readonly closeButton: ngx_t_forms_types.ActionButton;
|
|
398
|
+
saveForm: () => void;
|
|
399
|
+
/** Editable form title — seeded from the store, overridable by local edits. */
|
|
400
|
+
protected readonly titleValue: _angular_core.WritableSignal<string>;
|
|
401
|
+
/** Pushes a title edit to the store (schedule-only refresh, matching `setFormTitle`). */
|
|
402
|
+
protected setTitleValue(value: string): void;
|
|
403
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormBuilderComponent, never>;
|
|
404
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormBuilderComponent, "lib-form-builder, app-form-builder", never, { "formId": { "alias": "formId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Workflow function-type enum, upstreamed to `ngx-t-forms-types` as
|
|
409
|
+
* {@link WorkflowFunctionTypes} per DECISIONS.md D-016. Re-exported here under
|
|
410
|
+
* its historical name `FunctionTypes` to preserve every existing local import
|
|
411
|
+
* path (including the immutable `form-tower-controller.service.ts` per D-007).
|
|
412
|
+
*
|
|
413
|
+
* @public
|
|
414
|
+
*/
|
|
415
|
+
declare const FunctionTypes: typeof WorkflowFunctionTypes;
|
|
416
|
+
type FunctionTypes = WorkflowFunctionTypes;
|
|
417
|
+
|
|
63
418
|
declare enum HintType {
|
|
64
419
|
WARNING = "warning",
|
|
65
420
|
ERROR = "error",
|
|
@@ -80,54 +435,345 @@ declare enum HintType {
|
|
|
80
435
|
DOCUMENT = "document",
|
|
81
436
|
HISTORY = "history"
|
|
82
437
|
}
|
|
438
|
+
/**
|
|
439
|
+
* @public
|
|
440
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
441
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
442
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
443
|
+
*/
|
|
83
444
|
declare function textIconsForUserHints(hint: string, type: HintType): string;
|
|
84
445
|
|
|
85
|
-
|
|
446
|
+
/**
|
|
447
|
+
* @file Pure helpers for the **overridable validation** submission gate.
|
|
448
|
+
*
|
|
449
|
+
* A custom validator declared with `canOverride === true` does not block
|
|
450
|
+
* submission outright. The gate distinguishes two error classes across the
|
|
451
|
+
* settled form:
|
|
452
|
+
*
|
|
453
|
+
* - **Blocking** — every error that is NOT an overridable custom-validator
|
|
454
|
+
* error: standard validators (`required`, `email`, `minlength`, …), MSCOA
|
|
455
|
+
* business-rule errors, and custom validators with `canOverride === false`.
|
|
456
|
+
* These MUST be resolved before the form can be submitted.
|
|
457
|
+
* - **Overridable** — a custom-validator error whose value object carries
|
|
458
|
+
* `canOverride === true`. The form may be submitted with these still failing
|
|
459
|
+
* **provided each one is motivated** with a non-empty comment.
|
|
460
|
+
*
|
|
461
|
+
* The error-record shape these helpers read is produced verbatim by the
|
|
462
|
+
* {@link FunctionTypes.ManualValueValidation} builder
|
|
463
|
+
* (`build-manual-validation.ts`): `{ [validatorId]: { message, canOverride } }`,
|
|
464
|
+
* merged onto `control.errors` by the W11 projection adapter. A validator id is
|
|
465
|
+
* a uuid unique per `(input, validator)`, so it uniquely keys an override
|
|
466
|
+
* reason.
|
|
467
|
+
*
|
|
468
|
+
* All functions here are pure reads over the projected `FormGroup` tree and the
|
|
469
|
+
* tower's `allFormInputs()` index — no signal writes, no Angular runtime
|
|
470
|
+
* primitives created. They are safe to call from template getters during change
|
|
471
|
+
* detection (mirrors `getSubmissionStatus.ts`).
|
|
472
|
+
*/
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* A still-failing overridable custom validation surfaced to the override UI.
|
|
476
|
+
*/
|
|
477
|
+
interface OverridableError {
|
|
478
|
+
/** The custom validator's id — the `control.errors` key and the reason key. */
|
|
479
|
+
validatorId: string;
|
|
480
|
+
/** The owning input's id (its control name within the section group). */
|
|
86
481
|
inputId: string;
|
|
87
|
-
|
|
482
|
+
/** The owning input's `formControlName`, used to build the submission entry. */
|
|
483
|
+
formControlName: string;
|
|
484
|
+
/** The input's display label, for the override-reason prompt. */
|
|
485
|
+
label: string;
|
|
486
|
+
/** The validator's human-readable message. */
|
|
487
|
+
message: string;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* A single captured override motivation, keyed in the engine by `validatorId`.
|
|
491
|
+
*/
|
|
492
|
+
interface OverrideReason {
|
|
493
|
+
/** User-supplied motivation. Must be non-empty (trimmed) to unlock submission. */
|
|
494
|
+
comment: string;
|
|
495
|
+
/** Optional supporting file, carried as base64 {@link FileData}. */
|
|
496
|
+
attachment?: FileData;
|
|
88
497
|
}
|
|
498
|
+
/** Map of `validatorId → captured reason`. The engine's override-reason state. */
|
|
499
|
+
type OverrideReasons = Record<string, OverrideReason>;
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Core orchestrator for a runtime form (the "tower") — abstract because every
|
|
503
|
+
* concrete consumer (`TFormEngine`, the import row instance) extends it and
|
|
504
|
+
* Angular's DI provides {@link HttpClient} + {@link NGX_T_FORMS_CONFIG_TOKEN}.
|
|
505
|
+
*
|
|
506
|
+
* ### Lifecycle (Phase 1)
|
|
507
|
+
* 1. **{@link FormTowerControllerService.initialize}** — prepPopulate +
|
|
508
|
+
* loadSystemInputs + formGenerator + setFirstStepAsActive, then builds the
|
|
509
|
+
* per-input `#derived` signal graph (in injection context) and wires the
|
|
510
|
+
* FormGroup-projection + persist effects. There is NO `valueChanges`
|
|
511
|
+
* subscription and NO dependency-graph build.
|
|
512
|
+
* 2. **{@link FormTowerControllerService.initializeFormValues}** — writes
|
|
513
|
+
* user/import values into `#model` (tower-owned derived inputs are skipped
|
|
514
|
+
* structurally) and forces a liveness lead-read so lazy resources start.
|
|
515
|
+
* 3. User interaction / `updateValue` → writes `#model` (or a sourced
|
|
516
|
+
* `linkedSignal.set`) → derived signals + resources recompute automatically.
|
|
517
|
+
* 4. **{@link FormTowerControllerService.waitUntilSettled}** — used by headless
|
|
518
|
+
* consumers (import) to wait for all in-flight async work to drain.
|
|
519
|
+
* 5. **{@link FormTowerControllerService.ngOnDestroy}** — explicitly destroys
|
|
520
|
+
* every resource, the projection/persist effects, the `isBusy$`
|
|
521
|
+
* subscription, and clears hint/error timers.
|
|
522
|
+
*
|
|
523
|
+
* ### Why an abstract `@Directive()`?
|
|
524
|
+
* Angular requires the `@Directive()` decorator on classes that participate in
|
|
525
|
+
* DI inheritance + `OnDestroy`. Subclasses can be plain `@Injectable()` (see
|
|
526
|
+
* {@link TFormEngine}).
|
|
527
|
+
*/
|
|
89
528
|
declare abstract class FormTowerControllerService implements OnDestroy {
|
|
529
|
+
#private;
|
|
90
530
|
private _http;
|
|
531
|
+
/** Resolved tower config (HTTP functions, file upload, getFinacialCycles, …). */
|
|
91
532
|
readonly NGX_T_FORMS_CONFIG: ngx_t_forms_types.NgxTFormsConfig;
|
|
533
|
+
/** Convenience pass-through to the financial-cycles fetcher from config. */
|
|
92
534
|
readonly getFinacialCycles: () => Observable<ngx_t_forms_types.IFinancialCycles>;
|
|
93
535
|
constructor(_http: HttpClient);
|
|
536
|
+
/** Emits exactly once on tower destruction. `takeUntil` anchor for long-lived subscriptions. */
|
|
94
537
|
protected _destroyed$: Subject<void>;
|
|
95
|
-
|
|
538
|
+
/** Live root `FormGroup` — the Material carrier (Blueprint §2.7). Built by `formGenerator`. */
|
|
96
539
|
protected _mainForm: FormGroup | undefined;
|
|
97
|
-
|
|
540
|
+
/** The values record last passed to {@link FormTowerControllerService.initializeFormValues}. */
|
|
98
541
|
protected _initialFormValue: Record<string, any>;
|
|
99
|
-
|
|
100
|
-
protected _inputFunctionsCollection: Record<string, Partial<Record<FunctionTypes, Observable<void>>>>;
|
|
101
|
-
protected _inputChangeDependencyRecords: Partial<Record<string, Partial<Record<FunctionTypes, Record<string, boolean>>>>>;
|
|
102
|
-
protected _reverseDependencyMap: Record<string, DependentInput[]>;
|
|
103
|
-
protected _changeHistory: IFormChangeHistory[];
|
|
542
|
+
/** Last reported submission state — drives the toolbar/spinner UI. */
|
|
104
543
|
submittingStatus: FormSubmissionStatus | undefined;
|
|
105
|
-
|
|
544
|
+
/** True while a form submission is in flight. Counts toward {@link FormTowerControllerService.isBusy}. */
|
|
545
|
+
get submittingForm(): boolean;
|
|
546
|
+
set submittingForm(value: boolean);
|
|
547
|
+
/**
|
|
548
|
+
* The still-failing overridable (`canOverride === true`) validations on the
|
|
549
|
+
* settled form, one per failing validator, each carrying the input's
|
|
550
|
+
* `formControlName` / `label` and the validator message — the data the
|
|
551
|
+
* override-reason UI renders a motivation prompt from.
|
|
552
|
+
*
|
|
553
|
+
* Reads the projected control tree, so it reflects the latest validity. When
|
|
554
|
+
* there are blocking errors as well, those still prevent submission — see
|
|
555
|
+
* {@link FormTowerControllerService.canSubmit}.
|
|
556
|
+
*/
|
|
557
|
+
overridableErrors: () => OverridableError[];
|
|
558
|
+
/**
|
|
559
|
+
* `true` when at least one blocking (non-overridable) error remains on the
|
|
560
|
+
* form. While this holds, submission is impossible regardless of motivations.
|
|
561
|
+
*/
|
|
562
|
+
hasBlockingErrors: () => boolean;
|
|
563
|
+
/**
|
|
564
|
+
* Whether the form may be submitted: no blocking errors AND every overridable
|
|
565
|
+
* error has a non-empty motivation. Replaces the blunt `mainForm.invalid`
|
|
566
|
+
* submit gate — an overridable error with a reason no longer blocks.
|
|
567
|
+
*/
|
|
568
|
+
canSubmit: () => boolean;
|
|
569
|
+
/** The currently captured override motivations, keyed by validator id. */
|
|
570
|
+
get overrideReasons(): OverrideReasons;
|
|
571
|
+
/**
|
|
572
|
+
* Records (or updates) the motivation comment for one overridable validation.
|
|
573
|
+
*
|
|
574
|
+
* @param validatorId - The validator's id (the `control.errors` key).
|
|
575
|
+
* @param comment - The user's motivation; an empty/whitespace value
|
|
576
|
+
* re-locks submission for that error.
|
|
577
|
+
*/
|
|
578
|
+
setOverrideComment: (validatorId: string, comment: string) => void;
|
|
579
|
+
/**
|
|
580
|
+
* Attaches (or clears) a supporting file for one overridable validation.
|
|
581
|
+
*
|
|
582
|
+
* @param validatorId - The validator's id (the `control.errors` key).
|
|
583
|
+
* @param attachment - The base64 {@link FileData}, or `undefined` to clear.
|
|
584
|
+
*/
|
|
585
|
+
setOverrideAttachment: (validatorId: string, attachment: FileData | undefined) => void;
|
|
586
|
+
/**
|
|
587
|
+
* Drops the captured reasons for the given validator ids. Called once a
|
|
588
|
+
* MultipleInput sub-row is saved — its motivations move from the live
|
|
589
|
+
* reason map into {@link FormTowerControllerService.#rowOverrides}, and the
|
|
590
|
+
* transient controls (and thus the live overridable errors) are removed.
|
|
591
|
+
*
|
|
592
|
+
* @param validatorIds - The validator ids whose live reasons to drop.
|
|
593
|
+
*/
|
|
594
|
+
clearOverrideReasons: (validatorIds: readonly string[]) => void;
|
|
595
|
+
/**
|
|
596
|
+
* Records (or clears) the captured override entries for one MultipleInput
|
|
597
|
+
* sub-row. Replacing on every save keeps a re-edited row's motivations
|
|
598
|
+
* current; passing an empty list removes the row's entry.
|
|
599
|
+
*
|
|
600
|
+
* @param inputId - The MultipleInput's id.
|
|
601
|
+
* @param rowId - The sub-row's id (`${inputId}.id` value).
|
|
602
|
+
* @param entries - The override entries captured for the row.
|
|
603
|
+
*/
|
|
604
|
+
setRowOverrides: (inputId: string, rowId: string, entries: IFormValidationOverride[]) => void;
|
|
605
|
+
/**
|
|
606
|
+
* Builds the override entries for the currently-open inner inputs of a
|
|
607
|
+
* MultipleInput sub-row, pairing each overridable error with its captured
|
|
608
|
+
* motivation. Returns the entries plus the validator ids consumed (so the
|
|
609
|
+
* caller can move them out of the live reason map after the row is saved).
|
|
610
|
+
*
|
|
611
|
+
* @param inputId - The MultipleInput's id.
|
|
612
|
+
* @param innerInputs - The sub-row's inner inputs (composite-id form inputs).
|
|
613
|
+
* @returns The sub-row's override state: motivated `entries` ready to persist,
|
|
614
|
+
* the `validatorIds` consumed, and the inner input ids that are blocking or
|
|
615
|
+
* still unmotivated (for save-gate messaging).
|
|
616
|
+
*/
|
|
617
|
+
collectRowOverrideState: (inputId: string, innerInputs: FormColumnInputs[]) => {
|
|
618
|
+
entries: IFormValidationOverride[];
|
|
619
|
+
validatorIds: string[];
|
|
620
|
+
blockingInputIds: string[];
|
|
621
|
+
unmotivatedInputIds: string[];
|
|
622
|
+
};
|
|
623
|
+
/** The current form definition (post-{@link prepPopulateForm}). */
|
|
106
624
|
get form(): FormInterface | undefined;
|
|
107
625
|
set form(value: FormInterface | undefined);
|
|
108
|
-
|
|
626
|
+
/** System inputs loaded by `loadSystemInputs`, prepended to {@link FormTowerControllerService.allFormInputs}. */
|
|
109
627
|
get systemInputs(): FormColumnInputs[];
|
|
628
|
+
set systemInputs(value: FormColumnInputs[]);
|
|
629
|
+
/** Live root `FormGroup` — `undefined` before {@link FormTowerControllerService.initialize}. */
|
|
110
630
|
get mainForm(): FormGroup | undefined;
|
|
631
|
+
/** Append-only change history; used by {@link FormTowerControllerService.revertBackHistory}. */
|
|
111
632
|
get changeHistory(): IFormChangeHistory[];
|
|
112
633
|
set changeHistory(value: IFormChangeHistory[]);
|
|
113
|
-
|
|
634
|
+
/**
|
|
635
|
+
* Busy iff a submission is in flight OR any value/options resource is
|
|
636
|
+
* `'loading'`. Reading every resource's `status()` here is what ACTIVATES the
|
|
637
|
+
* lazy resources — workers MUST NOT short-circuit before iterating
|
|
638
|
+
* (resource-activation contract, Blueprint §2.4 / HAZARD 2).
|
|
639
|
+
*/
|
|
640
|
+
protected readonly isBusyComputed: Signal<boolean>;
|
|
641
|
+
/** Strict complement of {@link FormTowerControllerService.isBusyComputed}. */
|
|
642
|
+
protected readonly settled: Signal<boolean>;
|
|
643
|
+
/** Synchronous snapshot of the busy state. */
|
|
644
|
+
get isBusy(): boolean;
|
|
645
|
+
/**
|
|
646
|
+
* Reactive stream of the tower's busy state. Emits `true` while any
|
|
647
|
+
* calculation/API/validation is in flight or the form is submitting, `false`
|
|
648
|
+
* once everything settles. Backed by `toObservable(isBusy)`.
|
|
649
|
+
*/
|
|
650
|
+
get isBusy$(): Observable<boolean>;
|
|
651
|
+
/**
|
|
652
|
+
* Resolves once the tower has finished all in-flight async work (calculations,
|
|
653
|
+
* API fetches, sourced values). Used by headless consumers (import).
|
|
654
|
+
*
|
|
655
|
+
* **Contract (Blueprint §5 / §6, never changes):**
|
|
656
|
+
* - Performs a one-tick liveness lead-read FIRST (reads `value()` + every
|
|
657
|
+
* resource `status()` + flushes effects) so lazy resources start even when
|
|
658
|
+
* no template reads them (HAZARD 2).
|
|
659
|
+
* - Waits for the first `settled() === true` emission.
|
|
660
|
+
* - On `timeoutMs` it resolves with `undefined` — it NEVER rejects and NEVER
|
|
661
|
+
* hangs (`timeout` + `defaultIfEmpty`-equivalent via `catchError`).
|
|
662
|
+
*
|
|
663
|
+
* @param debounceMs - Accepted for signature parity; the signal graph needs no
|
|
664
|
+
* debounce, so it is treated as a no-op lead time.
|
|
665
|
+
* @param timeoutMs - Hard timeout before resolving with `undefined` (default 30s).
|
|
666
|
+
* @returns A promise that always resolves (with `void`).
|
|
667
|
+
*/
|
|
668
|
+
waitUntilSettled(debounceMs?: number, timeoutMs?: number): Promise<void>;
|
|
669
|
+
/**
|
|
670
|
+
* Tears the tower down. Fires `_destroyed$`, runs
|
|
671
|
+
* {@link FormTowerControllerService.clearFormState} (which destroys resources
|
|
672
|
+
* + effects), completes the `isBusy$` subscription, and clears pending
|
|
673
|
+
* hint/error timers (HAZARD 7 / Blueprint §2.8).
|
|
674
|
+
*/
|
|
114
675
|
ngOnDestroy(): void;
|
|
115
|
-
|
|
676
|
+
/**
|
|
677
|
+
* Boots the tower against a form definition.
|
|
678
|
+
*
|
|
679
|
+
* Performs, in order:
|
|
680
|
+
* 1. {@link FormTowerControllerService.clearFormState} — wipe prior state +
|
|
681
|
+
* destroy any prior resources/effects.
|
|
682
|
+
* 2. {@link prepPopulateForm} — merge `_initialFormValue` into the columns.
|
|
683
|
+
* 3. {@link loadSystemInputs} — load financial cycle, current user, etc.
|
|
684
|
+
* 4. {@link formGenerator} — build the nested `FormGroup` carrier.
|
|
685
|
+
* 5. Re-open any `MultipleInput` that was open before re-init.
|
|
686
|
+
* 6. Build the `#derived` signal graph + wire the projection/persist effects
|
|
687
|
+
* — ALL inside `runInInjectionContext(this.#injector, …)` (HAZARD 1).
|
|
688
|
+
*
|
|
689
|
+
* @param form - The form definition to drive.
|
|
690
|
+
* @param options - Optional behaviour flags.
|
|
691
|
+
* @param options.skipInitialFunctions - **Documented no-op (parity).** The
|
|
692
|
+
* old engine used this to suppress a premature change-monitor cycle in the
|
|
693
|
+
* headless import path. The signal graph has no such race (resources fire
|
|
694
|
+
* lazily once read; the liveness lead-read in
|
|
695
|
+
* {@link FormTowerControllerService.initializeFormValues} +
|
|
696
|
+
* {@link FormTowerControllerService.waitUntilSettled} activates them), so
|
|
697
|
+
* the flag is accepted for signature parity and otherwise ignored.
|
|
698
|
+
*/
|
|
699
|
+
initialize: (form: FormInterface, options?: {
|
|
700
|
+
skipInitialFunctions?: boolean;
|
|
701
|
+
}) => Promise<void>;
|
|
702
|
+
/**
|
|
703
|
+
* Marks the form's first slide as active. Called during
|
|
704
|
+
* {@link FormTowerControllerService.initialize}.
|
|
705
|
+
*/
|
|
116
706
|
setFirstStepAsActive: () => void;
|
|
707
|
+
/**
|
|
708
|
+
* Returns the form's settled values keyed by **formControlName** (the
|
|
709
|
+
* canonical external shape). Reads {@link FormTowerControllerService.value}.
|
|
710
|
+
*/
|
|
117
711
|
getFormValueNames: () => Record<string, any>;
|
|
712
|
+
/**
|
|
713
|
+
* All form inputs that participate in the form, including system inputs.
|
|
714
|
+
* Returns a fresh outer array each call (preserves the prior contract that
|
|
715
|
+
* callers may mutate the returned array), but the expensive flatten beneath it
|
|
716
|
+
* is memoized by {@link FormTowerControllerService.#allInputsMemo}.
|
|
717
|
+
*/
|
|
118
718
|
readonly allFormInputs: () => FormColumnInputs[];
|
|
719
|
+
/** @deprecated unused field, kept for backwards compatibility. */
|
|
119
720
|
prevValue: any;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
721
|
+
/**
|
|
722
|
+
* Mark a logical operation in flight for DOM badge rendering. Phase 1: no
|
|
723
|
+
* longer affects {@link FormTowerControllerService.isBusy} (busy is
|
|
724
|
+
* resource-derived) — forwards to the DOM-status helper only.
|
|
725
|
+
*/
|
|
124
726
|
setInputStatus: (inputId: string, statusId: string, status: string) => void;
|
|
727
|
+
/** Companion to {@link FormTowerControllerService.setInputStatus} — clears the DOM badge. */
|
|
125
728
|
removeInputStatus: (inputId: string, statusId: string) => void;
|
|
729
|
+
/**
|
|
730
|
+
* Programmatic write to a form input.
|
|
731
|
+
*
|
|
732
|
+
* - **Sourced inputs** (InputSourcedValue) → routes to the entry's writable
|
|
733
|
+
* `linkedSignal.set(value)` (transient override; reset on next source change).
|
|
734
|
+
* - **All other inputs** → writes `#model[inputId]`.
|
|
735
|
+
*
|
|
736
|
+
* Appends the change to history IMPERATIVELY (HAZARD 4). The projection effect
|
|
737
|
+
* patches the FormControl from the signal graph — this does NOT touch the
|
|
738
|
+
* FormGroup directly (no `valueChanges` feedback loop).
|
|
739
|
+
*
|
|
740
|
+
* @param inputId - The input to write.
|
|
741
|
+
* @param value - The new value.
|
|
742
|
+
*/
|
|
126
743
|
updateValue: (inputId: string, value: any) => void;
|
|
127
|
-
|
|
744
|
+
/**
|
|
745
|
+
* Apply an external values record onto the form (user prefill / import row).
|
|
746
|
+
*
|
|
747
|
+
* Per input:
|
|
748
|
+
* - **Tower-owned non-MultipleInput** (calc/API/sourced) → SKIP structurally
|
|
749
|
+
* (it never enters `#model`; the derived signal/resource owns the value).
|
|
750
|
+
* - **MultipleInput** → ALWAYS apply the row array (its rows are user-authored
|
|
751
|
+
* source data). The array-remap branch is UNCHANGED (Phase 2 fence).
|
|
752
|
+
* - **Everything else** → write `#model` from the dotted-path or top-level value.
|
|
753
|
+
*
|
|
754
|
+
* Ends with a liveness lead-read so lazy resources start even in the headless
|
|
755
|
+
* import path (no template reader) — HAZARD 2 / Blueprint §2.7.
|
|
756
|
+
*
|
|
757
|
+
* @param initialValues - The external values record (formControlName-keyed).
|
|
758
|
+
*/
|
|
759
|
+
initializeFormValues: (initialValues: Record<string, any>) => void;
|
|
760
|
+
/**
|
|
761
|
+
* Snapshot of the inputId-keyed flat form value. Re-points to the merged
|
|
762
|
+
* {@link FormTowerControllerService.value} computed (was the old `_formValue`).
|
|
763
|
+
* Passed to legacy helpers (refresh) that expect a `() => Record` accessor.
|
|
764
|
+
*/
|
|
128
765
|
getFormValue: () => Record<string, any>;
|
|
766
|
+
/**
|
|
767
|
+
* Resets all internal state — definition, FormGroup, signal graph (resources +
|
|
768
|
+
* effects destroyed), busy/model/history — so the tower can be re-initialized.
|
|
769
|
+
* Called at the start of {@link FormTowerControllerService.initialize} and from
|
|
770
|
+
* {@link FormTowerControllerService.ngOnDestroy}.
|
|
771
|
+
*
|
|
772
|
+
* Explicitly `.destroy()`s every `ResourceRef` and the projection/persist
|
|
773
|
+
* effects (HAZARD 7 / Blueprint §2.8 — per-row import towers are torn down by
|
|
774
|
+
* manual `ngOnDestroy`, not injector destruction).
|
|
775
|
+
*/
|
|
129
776
|
clearFormState: () => void;
|
|
130
|
-
executeInputFunctionsWithoutDependencies: () => void;
|
|
131
777
|
_hintTimeoutIds: Record<string, any>;
|
|
132
778
|
setTemporaryHint: (inputId: string, hint: string, type: HintType) => void;
|
|
133
779
|
_onFormInputConfigChange?: (inputId: string, config: FormColumnInputs) => void;
|
|
@@ -140,489 +786,362 @@ declare abstract class FormTowerControllerService implements OnDestroy {
|
|
|
140
786
|
updateFormInputConfig: (inputId: string, config: FormColumnInputs) => void;
|
|
141
787
|
handleStepChange: (event: StepperSelectionEvent) => void;
|
|
142
788
|
selectFormSteps: () => ngx_t_forms_types.ITowerFormSteps[];
|
|
143
|
-
selectAllFormTours: () => IFormTour[];
|
|
789
|
+
selectAllFormTours: () => ngx_t_forms_types.IFormTour[];
|
|
144
790
|
setSectionAsSeen: (sectionId: string) => void;
|
|
145
791
|
setSectionAsActive: (sectionId: string) => void;
|
|
146
792
|
setInputAsTouchedAndDirty: (inputId: string) => void;
|
|
147
793
|
formProgress: () => number;
|
|
148
794
|
formSubmissionMessage: () => string;
|
|
149
795
|
setSubmissionStatusValue: (status: FormSubmissionStatus) => FormSubmissionStatus;
|
|
150
|
-
initializeFormValues: (initialValues: Record<string, any>) => void;
|
|
151
|
-
reset(): void;
|
|
152
|
-
revertBackHistory: () => void;
|
|
153
796
|
/**
|
|
154
|
-
*
|
|
797
|
+
* Legacy-shaped per-input function registry, reconstructed from `#derived`
|
|
798
|
+
* (Decision D3). Each present `(inputId, functionType)` maps to an
|
|
799
|
+
* `Observable<void>` that, on subscription, drives the underlying primitive:
|
|
800
|
+
* - resource/options entries → `.reload()` then complete when status leaves
|
|
801
|
+
* `'loading'`;
|
|
802
|
+
* - value/sourced/validation entries → a synchronous read then complete.
|
|
803
|
+
*
|
|
804
|
+
* Kept so `refreshInputWithDependencies` / `refreshInput` /
|
|
805
|
+
* `runMultipleInputPrepopulationFunctions` / `getTopologicalExecutionOrder`
|
|
806
|
+
* compile + behave unchanged. The return TYPE is unchanged (api:check parity).
|
|
155
807
|
*/
|
|
156
|
-
|
|
808
|
+
get inputFunctionsCollection(): Record<string, Partial<Record<FunctionTypes, Observable<void>>>>;
|
|
157
809
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
810
|
+
* Submits the form to the configured backend pipeline. Builds a payload by
|
|
811
|
+
* un-flattening the settled values, delegates to {@link formHttpSubmissions},
|
|
812
|
+
* and reports status. Errors surface as `FormSubmissionStatus.FAILED` — they
|
|
813
|
+
* do not throw to the caller.
|
|
160
814
|
*
|
|
161
|
-
* @param
|
|
162
|
-
* @returns boolean indicating success or failure
|
|
815
|
+
* @param passData - Extra context handed through to the submission pipeline.
|
|
163
816
|
*/
|
|
817
|
+
submitForm: (passData: Record<string, any>) => void;
|
|
818
|
+
/** Toggle a MultipleInput element + its associated form controls. */
|
|
164
819
|
toggleMultipleInput: (inputId: string, open: boolean, rowInEditId?: string) => boolean;
|
|
820
|
+
/** Persist the open MultipleInput sub-form back into the parent control's array value. */
|
|
165
821
|
saveMultipleInputForm: (inputId: string) => boolean;
|
|
822
|
+
/** Open the MultipleInput sub-form prepopulated with `rowId`'s values. */
|
|
166
823
|
multipleInputEditRow: (inputId: string, rowId: string) => boolean;
|
|
824
|
+
/** Duplicate `rowId` and open the sub-form on the new row. */
|
|
167
825
|
multipleInputDuplicateRow: (inputId: string, rowId: string) => boolean;
|
|
168
|
-
|
|
826
|
+
/**
|
|
827
|
+
* Bridges live edits of an OPEN MultipleInput sub-row into the signal graph.
|
|
828
|
+
*
|
|
829
|
+
* Subscribes every sub-row control (`${inputId}.${childId}`) — except the
|
|
830
|
+
* `${inputId}.id` row-bookkeeping control — to `updateValue(controlName, …)`,
|
|
831
|
+
* so a sub-row field behaves exactly like a primary-form input: dependent
|
|
832
|
+
* calculations / value-fetches / validators (whether they live in the same
|
|
833
|
+
* row or in the primary form) re-fire the moment a dependency changes.
|
|
834
|
+
*
|
|
835
|
+
* Idempotent per `inputId` (re-binding tears down the prior subscription
|
|
836
|
+
* first). Each inner subscription is `takeUntil(this._destroyed$)`-anchored so
|
|
837
|
+
* a re-init also drops it. Called by `toggleMultipleInput` on open; mirrored
|
|
838
|
+
* by {@link FormTowerControllerService.unbindMultipleInputRowControls} on close.
|
|
839
|
+
*
|
|
840
|
+
* @param inputId - The MultipleInput whose open sub-row controls to bridge.
|
|
841
|
+
*/
|
|
842
|
+
bindMultipleInputRowControls: (inputId: string) => void;
|
|
843
|
+
/**
|
|
844
|
+
* Tears down the live sub-row `valueChanges` bridge wired by
|
|
845
|
+
* {@link FormTowerControllerService.bindMultipleInputRowControls}. Called by
|
|
846
|
+
* `toggleMultipleInput` on close (and implicitly on re-open / re-init).
|
|
847
|
+
*
|
|
848
|
+
* @param inputId - The MultipleInput whose sub-row bridge to drop.
|
|
849
|
+
*/
|
|
850
|
+
unbindMultipleInputRowControls: (inputId: string) => void;
|
|
851
|
+
/**
|
|
852
|
+
* Re-runs every refreshable function for inputs in `sectionId` (resource
|
|
853
|
+
* `.reload()` + dependency order). Returns an Observable that completes when
|
|
854
|
+
* the section's refresh chain drains.
|
|
855
|
+
*
|
|
856
|
+
* @param sectionId - The section to refresh.
|
|
857
|
+
* @returns An Observable completing when the section is refreshed.
|
|
858
|
+
*/
|
|
859
|
+
refreshSection: (sectionId: string) => Observable<any>;
|
|
860
|
+
/**
|
|
861
|
+
* Fire-and-forget refresh of whichever slide is currently active. Returns
|
|
862
|
+
* `void` (parity — the consumer-map row claiming `Observable<any>` is wrong).
|
|
863
|
+
*/
|
|
169
864
|
refreshActiveSection: () => void;
|
|
170
|
-
|
|
865
|
+
/**
|
|
866
|
+
* Refresh a single input plus everything it transitively depends on.
|
|
867
|
+
*
|
|
868
|
+
* @param inputId - The input to refresh.
|
|
869
|
+
* @returns An Observable completing when the refresh drains.
|
|
870
|
+
*/
|
|
871
|
+
refreshInput: (inputId: string) => Observable<void>;
|
|
872
|
+
/** True iff the input has at least one refreshable `#derived` entry. */
|
|
171
873
|
canRefreshFn: (inputId: string) => boolean;
|
|
874
|
+
/**
|
|
875
|
+
* True iff any input in the section is refreshable. The HTML refresh-button
|
|
876
|
+
* gate (`user-form-stepper.component.html`) depends on this exact truth value
|
|
877
|
+
* (Blueprint §4 / W13).
|
|
878
|
+
*/
|
|
172
879
|
canRefreshSection: (sectionId: string) => boolean;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
defaultValue?: any;
|
|
193
|
-
limitTo?: number;
|
|
194
|
-
additionalTest?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
195
|
-
disabled?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
196
|
-
fetchOptions?: string[];
|
|
197
|
-
secondaryElementEditorConfig?: Array<ngx_t_forms_types.ElementEditorConfigSectionInterface>;
|
|
198
|
-
clearOnChange?: string[][];
|
|
199
|
-
blurHandle?: ngx_t_forms_types.BlurHandleTypes;
|
|
200
|
-
label: string;
|
|
201
|
-
readonly?: boolean;
|
|
202
|
-
templateOptions?: Array<any>;
|
|
203
|
-
placeholder?: string;
|
|
204
|
-
options?: Array<{
|
|
205
|
-
label: string;
|
|
206
|
-
value: any;
|
|
207
|
-
}>;
|
|
208
|
-
min?: number;
|
|
209
|
-
max?: number;
|
|
210
|
-
step?: number;
|
|
211
|
-
format?: (value: any) => number;
|
|
212
|
-
})[];
|
|
213
|
-
|
|
214
|
-
declare const returnMappedPathValue: (pathMap: TreeNode[], obj: any) => any;
|
|
215
|
-
declare const getValueFromValueAccessor: (valueAccessRules: FormInputBasicOptionInterface | TreeNode[] | Record<string, TreeNode[]>, data: any) => any;
|
|
216
|
-
|
|
217
|
-
declare const FORM_ACTIONS_TOKEN: InjectionToken<IFormActions>;
|
|
218
|
-
declare const FORM_CONFIG_TOKEN: InjectionToken<FormInterface>;
|
|
219
|
-
declare const FORM_SLIDES_TOKEN: InjectionToken<FormSlideInterface>;
|
|
220
|
-
declare const UTILS_OBJECT_TOKEN: InjectionToken<InClassFormUtilsInterface>;
|
|
221
|
-
declare const FORM_INPUTS_TOKEN: InjectionToken<IWorkflowDocumentPicker & IBasicFormInput & IFileUploadInput & IDateRangePickerInput & ITextareaProperties & IToggleInput & IMatrixInput & IMultiple>;
|
|
222
|
-
declare const MULTIPLE_FORM_INPUT_TOKEN: InjectionToken<IMultiple>;
|
|
223
|
-
declare const MSCOA_TREE_PROVIDER: InjectionToken<() => Observable<IGetTreeResponse>>;
|
|
224
|
-
declare const NGX_T_FORMS_CONFIG_TOKEN: InjectionToken<NgxTFormsConfig>;
|
|
225
|
-
|
|
226
|
-
declare class DialogTemplateComponent {
|
|
227
|
-
readonly dialogRef: MatDialogRef<any, any>;
|
|
228
|
-
readonly data: DialogConfig;
|
|
229
|
-
proceed(): void;
|
|
230
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DialogTemplateComponent, never>;
|
|
231
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DialogTemplateComponent, "lib-dialog-template", never, {}, {}, never, never, true, never>;
|
|
880
|
+
/**
|
|
881
|
+
* Pop the last change-history entry and re-apply the PRIOR snapshot via
|
|
882
|
+
* {@link FormTowerControllerService.updateValue} (restores to second-to-last,
|
|
883
|
+
* matching the old semantics exactly). Decorates each restored input with a
|
|
884
|
+
* transient hint. History append stays imperative (HAZARD 4).
|
|
885
|
+
*/
|
|
886
|
+
revertBackHistory: () => void;
|
|
887
|
+
/**
|
|
888
|
+
* Hard reset: tear down current state and re-initialize from the same form
|
|
889
|
+
* definition + originally supplied values.
|
|
890
|
+
*
|
|
891
|
+
* **D4 (deliberate, signed-off):** AWAITS `initialize(form)` BEFORE calling
|
|
892
|
+
* `initializeFormValues(...)`, fixing the old unawaited mis-ordering where
|
|
893
|
+
* `initializeFormValues` could run before `_mainForm` was rebuilt. The public
|
|
894
|
+
* signature is unchanged.
|
|
895
|
+
*/
|
|
896
|
+
reset(): void;
|
|
897
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormTowerControllerService, never>;
|
|
898
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FormTowerControllerService, never, never, {}, {}, never, never, true, never>;
|
|
232
899
|
}
|
|
233
900
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
901
|
+
/**
|
|
902
|
+
* Per-component runtime form engine.
|
|
903
|
+
*
|
|
904
|
+
* `TFormEngine` is the **composition seam** introduced by SIGNAL_FORMS migration
|
|
905
|
+
* Phase 0 (see `docs/migration/SIGNAL_FORMS_MIGRATION_PLAN.md` §5.1/§6.0 and
|
|
906
|
+
* DECISIONS.md D-023/D-025). Consumers previously **extended**
|
|
907
|
+
* {@link FormTowerControllerService} directly; they now **hold** a `TFormEngine`
|
|
908
|
+
* instance via `inject(TFormEngine)` (provided per-component, not
|
|
909
|
+
* `providedIn: 'root'`) and reach the tower's surface through it.
|
|
910
|
+
*
|
|
911
|
+
* Phase 0 moves **no logic**: this façade is a thin subclass of the existing
|
|
912
|
+
* tower so the full member surface is preserved verbatim and consumer behaviour
|
|
913
|
+
* stays under the I-1 Parity invariant. Phase 1 will rewrite the tower internals
|
|
914
|
+
* behind this same façade without touching the three consumers again.
|
|
915
|
+
*
|
|
916
|
+
* Internal to the library — not part of the public API. Provide it on the
|
|
917
|
+
* component that needs it:
|
|
918
|
+
*
|
|
919
|
+
* @example
|
|
920
|
+
* @Component({
|
|
921
|
+
* // …
|
|
922
|
+
* providers: [TFormEngine],
|
|
923
|
+
* })
|
|
924
|
+
* export class UserFormStepperComponent {
|
|
925
|
+
* protected readonly engine = inject(TFormEngine);
|
|
926
|
+
* }
|
|
927
|
+
*/
|
|
928
|
+
declare class TFormEngine extends FormTowerControllerService {
|
|
929
|
+
constructor(http: HttpClient);
|
|
930
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TFormEngine, never>;
|
|
931
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TFormEngine>;
|
|
259
932
|
}
|
|
260
933
|
|
|
261
|
-
declare class
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
sectionPlaceholder: Record<string, AbstractControl>;
|
|
265
|
-
readonly NGX_T_FORMS_CONFIG: NgxTFormsConfig;
|
|
934
|
+
declare class TourManagerService {
|
|
935
|
+
private readonly tourService;
|
|
936
|
+
userProfile: this;
|
|
266
937
|
constructor();
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
canSaveForm$: Observable<boolean>;
|
|
276
|
-
isNewForm$: Observable<boolean>;
|
|
277
|
-
hasMissingConfigs$: Observable<boolean>;
|
|
278
|
-
formErrors$: Observable<{
|
|
279
|
-
key: string;
|
|
280
|
-
message: string;
|
|
281
|
-
}[]>;
|
|
282
|
-
formValidationErrorsMessages$: Observable<string[]>;
|
|
283
|
-
inputInEdit$: Observable<ngx_t_forms_types.FormColumnInputs | undefined>;
|
|
284
|
-
defaultInputInEdit$: Observable<any>;
|
|
285
|
-
inputInEditValidationErrors$: Observable<ngx_t_forms_types.ValidationError[]>;
|
|
286
|
-
selectFormTitle$: Observable<string | undefined>;
|
|
287
|
-
getAllFormInputs$: Observable<never[] | ngx_t_forms_types.FormColumnInputs[]>;
|
|
288
|
-
inputElementEditorConfigs$: Observable<{
|
|
289
|
-
editorSections: {
|
|
290
|
-
elements: {
|
|
291
|
-
editType: ngx_t_forms_types.ElementEditorTypes;
|
|
292
|
-
id: string;
|
|
293
|
-
name: ngx_t_forms_types.FormInputKeys | ngx_t_forms_types.SpecialElementKeys | ngx_t_forms_types.AllFormInputPrimaryKeys;
|
|
294
|
-
hint?: string;
|
|
295
|
-
deepBind: Array<string>;
|
|
296
|
-
defaultValue?: any;
|
|
297
|
-
limitTo?: number;
|
|
298
|
-
additionalTest?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
299
|
-
disabled?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
300
|
-
fetchOptions?: string[];
|
|
301
|
-
secondaryElementEditorConfig?: Array<ngx_t_forms_types.ElementEditorConfigSectionInterface>;
|
|
302
|
-
clearOnChange?: string[][];
|
|
303
|
-
blurHandle?: ngx_t_forms_types.BlurHandleTypes;
|
|
304
|
-
label: string;
|
|
305
|
-
required?: boolean;
|
|
306
|
-
readonly?: boolean;
|
|
307
|
-
templateOptions?: Array<any>;
|
|
308
|
-
placeholder?: string;
|
|
309
|
-
options?: Array<{
|
|
310
|
-
label: string;
|
|
311
|
-
value: any;
|
|
312
|
-
}>;
|
|
313
|
-
computedErrors?: ngx_t_forms_types.ValidationError[];
|
|
314
|
-
min?: number;
|
|
315
|
-
max?: number;
|
|
316
|
-
step?: number;
|
|
317
|
-
format?: (value: any) => number;
|
|
318
|
-
postmanCollectionConfig?: ngx_t_forms_types.IPostmanCollectionConfig;
|
|
319
|
-
httpGetDataFunction?: (url: string, options: any) => Observable<any>;
|
|
320
|
-
getWorkflowOptions?: Observable<ngx_t_forms_types.IWorkflowOption[]> | undefined;
|
|
321
|
-
getMscoaTree?: Observable<ngx_t_forms_types.IGetTreeResponse> | undefined;
|
|
322
|
-
}[];
|
|
323
|
-
hasErrors: boolean;
|
|
324
|
-
label: string;
|
|
325
|
-
showItemValue?: keyof ngx_t_forms_types.FormColumnInputs;
|
|
326
|
-
id: string;
|
|
327
|
-
additionalTest?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
328
|
-
}[];
|
|
329
|
-
title?: string;
|
|
330
|
-
description?: string;
|
|
331
|
-
}>;
|
|
332
|
-
selectFormSlideSections$: Observable<{
|
|
333
|
-
inputConfigErrors: {
|
|
334
|
-
key: string;
|
|
335
|
-
message: string;
|
|
336
|
-
}[];
|
|
337
|
-
sectionId: string;
|
|
338
|
-
label: string;
|
|
339
|
-
columns: Array<ngx_t_forms_types.FormColumnInputs>;
|
|
340
|
-
inEdit?: boolean;
|
|
341
|
-
sectionIsSeen?: boolean;
|
|
342
|
-
isActive?: boolean;
|
|
343
|
-
}[]>;
|
|
344
|
-
};
|
|
345
|
-
readonly actions: {
|
|
346
|
-
loadFormListSuccess: (observableOrValue: {
|
|
347
|
-
forms: ngx_t_forms_types.DatabaseFormInterface[];
|
|
348
|
-
} | Observable<{
|
|
349
|
-
forms: ngx_t_forms_types.DatabaseFormInterface[];
|
|
350
|
-
}>) => rxjs.Subscription;
|
|
351
|
-
toggleFormBuilderBusy: () => void;
|
|
352
|
-
toggleLoadingForm: () => void;
|
|
353
|
-
toggleLoadingForms: (observableOrValue: {
|
|
354
|
-
loadingForms: boolean;
|
|
355
|
-
} | Observable<{
|
|
356
|
-
loadingForms: boolean;
|
|
357
|
-
}>) => rxjs.Subscription;
|
|
358
|
-
loadFormSuccess: (observableOrValue: {
|
|
359
|
-
form: ngx_t_forms_types.DatabaseFormInterface;
|
|
360
|
-
} | Observable<{
|
|
361
|
-
form: ngx_t_forms_types.DatabaseFormInterface;
|
|
362
|
-
}>) => rxjs.Subscription;
|
|
363
|
-
toggleFormBusy: (observableOrValue: {
|
|
364
|
-
formId: string;
|
|
365
|
-
} | Observable<{
|
|
366
|
-
formId: string;
|
|
367
|
-
}>) => rxjs.Subscription;
|
|
368
|
-
archivedSuccess: (observableOrValue: {
|
|
369
|
-
formId: string;
|
|
370
|
-
} | Observable<{
|
|
371
|
-
formId: string;
|
|
372
|
-
}>) => rxjs.Subscription;
|
|
373
|
-
setFormId: (observableOrValue: {
|
|
374
|
-
formId: string;
|
|
375
|
-
} | Observable<{
|
|
376
|
-
formId: string;
|
|
377
|
-
}>) => rxjs.Subscription;
|
|
378
|
-
setError: (observableOrValue: {
|
|
379
|
-
error: string | undefined;
|
|
380
|
-
type: ngx_t_forms_types.FormStateErrors;
|
|
381
|
-
} | Observable<{
|
|
382
|
-
error: string | undefined;
|
|
383
|
-
type: ngx_t_forms_types.FormStateErrors;
|
|
384
|
-
}>) => rxjs.Subscription;
|
|
385
|
-
handleListSectionChange: (observableOrValue: {
|
|
386
|
-
listSection: FormListSection;
|
|
387
|
-
} | Observable<{
|
|
388
|
-
listSection: FormListSection;
|
|
389
|
-
}>) => rxjs.Subscription;
|
|
390
|
-
handleRouterStateChange: (observableOrValue: {
|
|
391
|
-
routerState: _angular_router.ActivatedRouteSnapshot | null;
|
|
392
|
-
} | Observable<{
|
|
393
|
-
routerState: _angular_router.ActivatedRouteSnapshot | null;
|
|
394
|
-
}>) => rxjs.Subscription;
|
|
395
|
-
handleSetSubmittingForm: (observableOrValue: {
|
|
396
|
-
submittingForm: boolean;
|
|
397
|
-
} | Observable<{
|
|
398
|
-
submittingForm: boolean;
|
|
399
|
-
}>) => rxjs.Subscription;
|
|
400
|
-
setFormInitialValues: (observableOrValue: {
|
|
401
|
-
initialFormValues: Record<string, any>;
|
|
402
|
-
} | Observable<{
|
|
403
|
-
initialFormValues: Record<string, any>;
|
|
404
|
-
}>) => rxjs.Subscription;
|
|
405
|
-
handleEditorUpdateFormInEdit: (observableOrValue: {
|
|
406
|
-
form: FormInterface;
|
|
407
|
-
} | Observable<{
|
|
408
|
-
form: FormInterface;
|
|
409
|
-
}>) => rxjs.Subscription;
|
|
410
|
-
updateFormInputConfigFromTower: (observableOrValue: {
|
|
411
|
-
inputId: string;
|
|
412
|
-
config: ngx_t_forms_types.FormColumnInputs;
|
|
413
|
-
} | Observable<{
|
|
414
|
-
inputId: string;
|
|
415
|
-
config: ngx_t_forms_types.FormColumnInputs;
|
|
416
|
-
}>) => rxjs.Subscription;
|
|
417
|
-
setInputInEditId: (observableOrValue: {
|
|
418
|
-
inputInEdit: string | null;
|
|
419
|
-
} | Observable<{
|
|
420
|
-
inputInEdit: string | null;
|
|
421
|
-
}>) => rxjs.Subscription;
|
|
422
|
-
};
|
|
423
|
-
readonly actionsFormBuilder: {
|
|
424
|
-
handelSaveForm: () => void;
|
|
425
|
-
setFormTitle: (title: string) => void;
|
|
426
|
-
handleSectionDragDrop: (event: _angular_cdk_drag_drop.CdkDragDrop<any, any, any>) => void;
|
|
427
|
-
handleInputDragDrop: (event: _angular_cdk_drag_drop.CdkDragDrop<any, any, any>, sectionId: string) => void;
|
|
428
|
-
handleAddSection: () => void;
|
|
429
|
-
stepTitleChangeStep: (sectionId: string, title: string) => void;
|
|
430
|
-
formDeleteInput: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
431
|
-
multipleInputToggleLabel: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
432
|
-
editInput: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
433
|
-
addMultipleInputValueCalculationFunction: (item: ngx_t_forms_types.IMultipleInputCal, multipleInputId: string | undefined) => void;
|
|
434
|
-
formDeleteSection: (sectionId: string) => void;
|
|
435
|
-
formDeleteSectionInputs: (sectionId: string) => void;
|
|
436
|
-
moveInputToSection: (inputId: string, targetSectionId: string) => void;
|
|
437
|
-
reorderMultipleInputItems: (event: _angular_cdk_drag_drop.CdkDragDrop<ngx_t_forms_types.FormColumnInputs[], any, any>, multipleInputId: string) => void;
|
|
438
|
-
cloneCopyFormInput: (inputId: string) => void;
|
|
439
|
-
saveInput: (sectionId: string) => void;
|
|
440
|
-
applyFormTemplate: (form: FormInterface) => void;
|
|
441
|
-
selectInputTemplate: (inputId: string, element: ngx_t_forms_types.ElementTypes) => void;
|
|
442
|
-
formInputChange: (ele: ngx_t_forms_types.ElementEditorInnerSectionElementInterface, value: any) => void;
|
|
443
|
-
saveSubmitApi: (dataPlaceholder: undefined | {
|
|
444
|
-
data: ngx_t_forms_types.APIDataFetchingConfigurationInterface;
|
|
445
|
-
}, keyInEdit: "submissionAPI" | "canSubmitAPI" | undefined) => void;
|
|
446
|
-
removeSubmissionApi: (api: ngx_t_forms_types.APIDataFetchingConfigurationInterface, keyInEdit: "submissionAPI" | "canSubmitAPI" | undefined) => void;
|
|
447
|
-
elementConfigurationChanged: (inputId: string, value: any, ele: ngx_t_forms_types.ElementEditorInnerSectionElementInterface) => void;
|
|
448
|
-
elementBlur: (inputId: string, event: any, element: ngx_t_forms_types.ElementEditorInnerSectionElementInterface) => void;
|
|
449
|
-
addMultipleFormInput: (sectionId: string, multipleInputInEditId: string) => void;
|
|
450
|
-
clearInputInEdit: (inputId: string) => void;
|
|
451
|
-
addInputToScoaSelection: (sectionId: string, scoaInputId: string) => void;
|
|
452
|
-
};
|
|
453
|
-
readonly effects: {
|
|
454
|
-
createForm$: (observableOrValue: FormInterface | Observable<FormInterface>) => rxjs.Subscription;
|
|
455
|
-
loadForms$: (observableOrValue?: void | Observable<void> | undefined) => rxjs.Subscription;
|
|
456
|
-
loadForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
457
|
-
updateForm$: (observableOrValue: {
|
|
458
|
-
form: FormInterface;
|
|
459
|
-
versionNumber: number;
|
|
460
|
-
} | Observable<{
|
|
461
|
-
form: FormInterface;
|
|
462
|
-
versionNumber: number;
|
|
463
|
-
}>) => rxjs.Subscription;
|
|
464
|
-
archiveForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
465
|
-
setListSection$: (observableOrValue: FormListSection | Observable<FormListSection>) => rxjs.Subscription;
|
|
466
|
-
unArchiveForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
467
|
-
deleteForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
938
|
+
startTourByOption(steps: IStepOption[]): {
|
|
939
|
+
stepShow$: rxjs.Subject<ngx_ui_tour_md_menu.StepChangeParams<IStepOption>>;
|
|
940
|
+
stepHide$: rxjs.Subject<ngx_ui_tour_md_menu.StepChangeParams<IStepOption>>;
|
|
941
|
+
initialize$: rxjs.Subject<IStepOption[]>;
|
|
942
|
+
start$: rxjs.Subject<void>;
|
|
943
|
+
end$: rxjs.Subject<void>;
|
|
944
|
+
pause$: rxjs.Subject<void>;
|
|
945
|
+
resume$: rxjs.Subject<void>;
|
|
468
946
|
};
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
createFormPlaceHolderFormGroups(form: FormInterface): void;
|
|
472
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FormsStoreService, never>;
|
|
473
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<FormsStoreService>;
|
|
947
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourManagerService, never>;
|
|
948
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TourManagerService>;
|
|
474
949
|
}
|
|
475
950
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
get
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
951
|
+
/**
|
|
952
|
+
* End-user surface for filling out a form. Extends `FormTowerControllerService`
|
|
953
|
+
* to drive a `MatStepper` of form sections and renders each section's inputs
|
|
954
|
+
* via `TFormInputComponent`. Loads the form definition through the consumer's
|
|
955
|
+
* `formBuilder.getForm` hook on `NgxTFormsConfig`, supports undo (Ctrl+Z),
|
|
956
|
+
* initial values, and per-instance global system inputs.
|
|
957
|
+
*
|
|
958
|
+
* Inputs:
|
|
959
|
+
* - `formId: string | undefined` — when set, fetches the form
|
|
960
|
+
* definition and initialises the tower controller.
|
|
961
|
+
* - `initialValues: Record<string, unknown> | undefined` — seed the form
|
|
962
|
+
* with previously captured values; only re-initialises when the value
|
|
963
|
+
* actually changes.
|
|
964
|
+
* - `globalSystemInputs: FormColumnInputs[]` — system-level inputs
|
|
965
|
+
* merged into every step of the form; re-initialises the form when set.
|
|
966
|
+
* - `passParamsOnSubmit: Record<string, unknown> | undefined` — extra params
|
|
967
|
+
* passed through to the consumer's submit handler.
|
|
968
|
+
*
|
|
969
|
+
* Outputs:
|
|
970
|
+
* - _None._ Submission and lifecycle events are dispatched through the
|
|
971
|
+
* inherited `FormTowerControllerService` and the consumer's
|
|
972
|
+
* `formActions` / `formBuilder` callbacks.
|
|
973
|
+
*/
|
|
974
|
+
declare class UserFormStepperComponent {
|
|
975
|
+
#private;
|
|
976
|
+
/**
|
|
977
|
+
* Runtime form engine, held by composition (SIGNAL_FORMS Phase 0, D-025).
|
|
978
|
+
* Provided per-component instance; the component reaches the former
|
|
979
|
+
* inherited tower surface through this façade.
|
|
980
|
+
*/
|
|
981
|
+
protected readonly engine: TFormEngine;
|
|
982
|
+
/** Form definition id; when set, the component fetches and initialises the form. */
|
|
983
|
+
readonly formId: _angular_core.InputSignal<string | undefined>;
|
|
984
|
+
/**
|
|
985
|
+
* Seed values applied to the form once it is initialised.
|
|
986
|
+
*
|
|
987
|
+
* A keyed record of previously captured values (raw API payloads, partial
|
|
988
|
+
* form values, nested objects). The downstream `initializeFormValues`
|
|
989
|
+
* consumes the entries defensively; callers narrow specific value shapes.
|
|
990
|
+
*/
|
|
991
|
+
readonly initialValues: _angular_core.InputSignal<Record<string, unknown> | undefined>;
|
|
992
|
+
/** System-level inputs merged into every step of the form. */
|
|
993
|
+
readonly globalSystemInputs: _angular_core.InputSignal<FormColumnInputs[]>;
|
|
994
|
+
/**
|
|
995
|
+
* Extra params forwarded to the consumer's submit handler.
|
|
996
|
+
*
|
|
997
|
+
* A keyed record merged into the submission payload; only meaningful to the
|
|
998
|
+
* consumer's own submit handler, which narrows the individual values.
|
|
999
|
+
*/
|
|
1000
|
+
readonly passParamsOnSubmit: _angular_core.InputSignal<Record<string, unknown> | undefined>;
|
|
1001
|
+
/** Underlying Material stepper instance (may be undefined before first CD pass). */
|
|
1002
|
+
readonly stepper: _angular_core.Signal<MatStepper | undefined>;
|
|
1003
|
+
/** Whether the form is editable / can be navigated freely. */
|
|
1004
|
+
isEditable: boolean;
|
|
1005
|
+
/** True while the form definition is being fetched. */
|
|
1006
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
1007
|
+
protected readonly tourManagerService: TourManagerService;
|
|
1008
|
+
protected readonly formIdBridge: _angular_core.EffectRef;
|
|
1009
|
+
protected readonly initialValuesBridge: _angular_core.EffectRef;
|
|
1010
|
+
protected readonly globalSystemInputsBridge: _angular_core.EffectRef;
|
|
1011
|
+
/**
|
|
1012
|
+
* Handles the key down event and reverts the form's last history entry on Ctrl+Z.
|
|
1013
|
+
* @param event The keyboard event object.
|
|
1014
|
+
*/
|
|
1015
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
1016
|
+
loadForm(formId: string | undefined): void;
|
|
1017
|
+
/**
|
|
1018
|
+
* Builder-function shim passed to inputs that need callbacks (e.g.
|
|
1019
|
+
* MultipleInput, MSCOA). The user form surface only implements the subset
|
|
1020
|
+
* relevant to runtime input editing; builder-only members (`editInput`,
|
|
1021
|
+
* `deleteInput`, `addFunction`, `reorderItems`, `multipleInputToggleLabel`)
|
|
1022
|
+
* are stubbed because they have no meaning outside the form builder.
|
|
1023
|
+
*/
|
|
1024
|
+
get formBuilderFunctions(): FormBuilderFunctions;
|
|
1025
|
+
getStepState(step: ITowerFormSteps, index: number): StepState;
|
|
1026
|
+
getPreviousStepLabel(): string | undefined;
|
|
1027
|
+
getNextStepLabel(): string | undefined;
|
|
1028
|
+
canProceedToNextStep(step: ITowerFormSteps): boolean;
|
|
1029
|
+
get getSubmissionStatus(): string;
|
|
1030
|
+
handleSubmit(): void;
|
|
1031
|
+
/** Still-failing overridable validations the user may motivate to submit. */
|
|
1032
|
+
get overridableErrors(): OverridableError[];
|
|
1033
|
+
/** True while a blocking (non-overridable) error keeps submission impossible. */
|
|
1034
|
+
get hasBlockingErrors(): boolean;
|
|
1035
|
+
/** True once every blocking error is resolved and every override is motivated. */
|
|
1036
|
+
get canSubmit(): boolean;
|
|
1037
|
+
/** Current motivation text for one overridable validation (for two-way display). */
|
|
1038
|
+
overrideComment(validatorId: string): string;
|
|
1039
|
+
/** File name of the attachment captured for one overridable validation, if any. */
|
|
1040
|
+
overrideAttachmentName(validatorId: string): string | undefined;
|
|
1041
|
+
/** Records the motivation comment as the user types. */
|
|
1042
|
+
onOverrideComment(validatorId: string, event: Event): void;
|
|
1043
|
+
/**
|
|
1044
|
+
* Reads the chosen supporting file into a base64 {@link FileData} and attaches
|
|
1045
|
+
* it to the override; clearing the picker removes the attachment. Browser-only
|
|
1046
|
+
* (FileReader) — a no-op under SSR.
|
|
1047
|
+
*/
|
|
1048
|
+
onOverrideAttachment(validatorId: string, event: Event): Promise<void>;
|
|
1049
|
+
get hasTour(): boolean;
|
|
1050
|
+
/**
|
|
1051
|
+
* Initiates and configures a dynamic, multi-step tutorial tour for the form.
|
|
1052
|
+
* The tour guides the user through the form's title, sections, and individual fields.
|
|
1053
|
+
*/
|
|
1054
|
+
startTour(): void;
|
|
1055
|
+
refreshASection(sectionId: string): void;
|
|
1056
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserFormStepperComponent, never>;
|
|
1057
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserFormStepperComponent, "lib-user-form-stepper", never, { "formId": { "alias": "formId"; "required": false; "isSignal": true; }; "initialValues": { "alias": "initialValues"; "required": false; "isSignal": true; }; "globalSystemInputs": { "alias": "globalSystemInputs"; "required": false; "isSignal": true; }; "passParamsOnSubmit": { "alias": "passParamsOnSubmit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
567
1058
|
}
|
|
568
1059
|
|
|
569
|
-
declare function testAgainstItem(test: ConfigurationValidTestInterface, item: any): boolean;
|
|
570
|
-
|
|
571
1060
|
interface IConfigElementError {
|
|
572
1061
|
key: string;
|
|
573
1062
|
message: string;
|
|
574
1063
|
}
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
1064
|
+
/**
|
|
1065
|
+
* Builder-side editor for a single configurable property on a form input —
|
|
1066
|
+
* dispatches to the correct editor (selection options, REST API setup,
|
|
1067
|
+
* value-access rules, pipeline, validators, MSCOA segment config, slider,
|
|
1068
|
+
* chip list, data source picker, document list label config, workflow
|
|
1069
|
+
* picker, EditorJS, record list manager, etc.) based on the supplied
|
|
1070
|
+
* `ElementEditorInnerSectionElementInterface`.
|
|
1071
|
+
*
|
|
1072
|
+
* @remarks
|
|
1073
|
+
* Emits debounced value changes (and a separate `blur` event when the
|
|
1074
|
+
* editor is a free-text expression) so the form builder can persist edits
|
|
1075
|
+
* without re-reading the underlying form on every keystroke.
|
|
1076
|
+
*
|
|
1077
|
+
* Inputs:
|
|
1078
|
+
* - `editorConfig: ElementEditorInnerSectionElementInterface | undefined`
|
|
1079
|
+
* — descriptor of the editor to render.
|
|
1080
|
+
* - `formInputs: FormColumnInputs[]` — the set of inputs the
|
|
1081
|
+
* editor can reference (used by expression / value-access editors).
|
|
1082
|
+
* - `data: unknown` — current value being edited; resets the value
|
|
1083
|
+
* pipeline when changed by reference.
|
|
1084
|
+
* - `validationErrors: IConfigElementError[] | null` — validation errors
|
|
1085
|
+
* surfaced by the parent for display.
|
|
1086
|
+
*
|
|
1087
|
+
* Outputs:
|
|
1088
|
+
* - `valueChange` — fires when the edited value changes (debounced).
|
|
1089
|
+
* - `blur` — fires when an inner editor loses focus
|
|
1090
|
+
* (used for expression-style editors).
|
|
1091
|
+
*/
|
|
1092
|
+
declare class TDynamicDataEditComponent {
|
|
1093
|
+
#private;
|
|
1094
|
+
protected readonly elementEditorTypes: typeof ElementEditorTypes;
|
|
1095
|
+
/** Descriptor of the editor to render. */
|
|
1096
|
+
readonly editorConfig: _angular_core.InputSignal<ElementEditorInnerSectionElementInterface | undefined>;
|
|
1097
|
+
/** The set of inputs the editor can reference (used by expression / value-access editors). */
|
|
1098
|
+
readonly formInputs: _angular_core.InputSignal<FormColumnInputs[]>;
|
|
1099
|
+
/**
|
|
1100
|
+
* Current value being edited; resets the value pipeline when changed by reference.
|
|
1101
|
+
* @remarks Heterogeneous across consumers (ITowerStepColumn, plain records, etc.),
|
|
1102
|
+
* so it is typed as a keyed record; the editor pipeline reads individual fields
|
|
1103
|
+
* via `deepBind` paths and callers narrow specific value shapes.
|
|
1104
|
+
*/
|
|
1105
|
+
readonly data: _angular_core.InputSignal<unknown>;
|
|
1106
|
+
/** Validation errors surfaced by the parent for display. */
|
|
1107
|
+
readonly validationErrors: _angular_core.InputSignal<IConfigElementError[] | null>;
|
|
1108
|
+
/** Fires when the edited value changes (debounced). */
|
|
1109
|
+
readonly valueChange: _angular_core.OutputEmitterRef<unknown>;
|
|
1110
|
+
/** Fires when an inner editor loses focus (used for expression-style editors). */
|
|
1111
|
+
readonly blur: _angular_core.OutputEmitterRef<unknown>;
|
|
1112
|
+
protected readonly editorConfigBridge: _angular_core.EffectRef;
|
|
1113
|
+
protected readonly dataBridge: _angular_core.EffectRef;
|
|
1114
|
+
protected readonly editorConfigValue$: Observable<ElementEditorInnerSectionElementInterface | undefined>;
|
|
1115
|
+
protected readonly dataValue$: Observable<Record<string, unknown> | undefined>;
|
|
1116
|
+
protected get getMscoaTree$(): Observable<IGetTreeResponse | undefined>;
|
|
1117
|
+
protected get getWorkflowOptions$(): Observable<IWorkflowOption[] | undefined>;
|
|
1118
|
+
protected get value$(): Observable<{} | null>;
|
|
1119
|
+
protected get dataOptions$(): Observable<unknown>;
|
|
1120
|
+
protected get disabled$(): Observable<boolean | undefined>;
|
|
1121
|
+
inputChange(event: unknown): void;
|
|
605
1122
|
valueChanged(value: unknown): void;
|
|
606
1123
|
manualValueChange(event: {
|
|
607
1124
|
value: unknown;
|
|
608
1125
|
deepBind: Array<string>;
|
|
609
1126
|
}): void;
|
|
610
1127
|
blurOff: boolean;
|
|
611
|
-
elementBlur(event:
|
|
612
|
-
get inputHasBlurFunction$(): Observable<BlurHandleTypes | undefined>;
|
|
613
|
-
blurFunctionTooltip(blurHandle: BlurHandleTypes | undefined):
|
|
614
|
-
|
|
615
|
-
|
|
1128
|
+
elementBlur(event: unknown): void;
|
|
1129
|
+
protected get inputHasBlurFunction$(): Observable<BlurHandleTypes | undefined>;
|
|
1130
|
+
blurFunctionTooltip(blurHandle: BlurHandleTypes | undefined): string;
|
|
1131
|
+
/** Slider label formatter — Mat slider's `displayWith` accepts `string | number`. */
|
|
1132
|
+
formatLabel: (value: number) => string | number;
|
|
1133
|
+
protected vm$: Observable<{
|
|
616
1134
|
editorConfigValue: ElementEditorInnerSectionElementInterface | undefined;
|
|
617
|
-
|
|
1135
|
+
isFormFieldControl: boolean;
|
|
1136
|
+
value: {} | null;
|
|
618
1137
|
dataOptions: any;
|
|
619
1138
|
disabled: boolean | undefined;
|
|
620
1139
|
inputHasBlurFunction: BlurHandleTypes | undefined;
|
|
621
|
-
dataValue:
|
|
622
|
-
inputConfig:
|
|
1140
|
+
dataValue: Record<string, unknown> | undefined;
|
|
1141
|
+
inputConfig: Partial<ITowerStepColumn>;
|
|
623
1142
|
}>;
|
|
624
|
-
static ɵfac:
|
|
625
|
-
static ɵcmp:
|
|
1143
|
+
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>;
|
|
626
1145
|
}
|
|
627
1146
|
|
|
628
1147
|
declare class TreeComponent {
|
|
@@ -641,7 +1160,7 @@ declare class TreeComponent {
|
|
|
641
1160
|
inEdit?: boolean;
|
|
642
1161
|
path: string[];
|
|
643
1162
|
keyIsArrayIndex?: boolean;
|
|
644
|
-
functions:
|
|
1163
|
+
functions: IArrayFunction[];
|
|
645
1164
|
}[] | undefined;
|
|
646
1165
|
resetNode(): void;
|
|
647
1166
|
removeFunction(id: string): void;
|
|
@@ -655,145 +1174,662 @@ declare class TreeComponent {
|
|
|
655
1174
|
dataSource: MatTreeFlatDataSource<TreeNode, FlatNode, FlatNode>;
|
|
656
1175
|
private dynamicObject;
|
|
657
1176
|
constructor();
|
|
658
|
-
computeTreeData(dynamicObject:
|
|
1177
|
+
computeTreeData(dynamicObject: unknown): void;
|
|
659
1178
|
assignDataSourceData(tree: TreeNode[]): void;
|
|
660
1179
|
hasChild: (_: number, node: FlatNode) => boolean;
|
|
661
|
-
getValue():
|
|
1180
|
+
getValue(): unknown;
|
|
662
1181
|
addNewFunction(): void;
|
|
663
1182
|
functionChanged(value: string): void;
|
|
664
1183
|
}
|
|
665
1184
|
|
|
1185
|
+
/**
|
|
1186
|
+
* Read-only tree view for an arbitrary JSON-shaped value. Converts the input
|
|
1187
|
+
* into a flat tree (via `TreeComponent`) and renders each leaf with a typed
|
|
1188
|
+
* style class (`value-string`, `value-number`, `value-boolean`, `value-null`).
|
|
1189
|
+
*/
|
|
666
1190
|
declare class TDynamicDataViewComponent {
|
|
667
|
-
|
|
668
|
-
data:
|
|
1191
|
+
/** Arbitrary JSON-shaped value to render. Recomputes the tree on structural change. */
|
|
1192
|
+
readonly data: _angular_core.InputSignal<unknown>;
|
|
1193
|
+
protected readonly treeClass: TreeComponent;
|
|
669
1194
|
constructor();
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
static ɵfac:
|
|
675
|
-
static ɵcmp:
|
|
1195
|
+
protected formatKey(key: string): string;
|
|
1196
|
+
protected getDisplayValue(value: unknown): string;
|
|
1197
|
+
protected getValueClass(value: unknown): string;
|
|
1198
|
+
protected getLevelArray(node: unknown): readonly number[];
|
|
1199
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TDynamicDataViewComponent, never>;
|
|
1200
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TDynamicDataViewComponent, "lib-t-dynamic-data-view", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
676
1201
|
}
|
|
677
1202
|
|
|
678
|
-
declare class
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
1203
|
+
declare class FormatDataPipe implements PipeTransform {
|
|
1204
|
+
/**
|
|
1205
|
+
* Formats an arbitrary input value for display according to `dataType`.
|
|
1206
|
+
*
|
|
1207
|
+
* `value` is typed `unknown` (a pipe can be handed any binding) and each
|
|
1208
|
+
* branch narrows it to the shape it needs. The return is the set of
|
|
1209
|
+
* display-primitive types (`string | number | null | undefined`) so it
|
|
1210
|
+
* binds cleanly to interpolation and `matTooltip`; "passthrough" branches
|
|
1211
|
+
* return the original value (asserted to the display-primitive union — its
|
|
1212
|
+
* runtime value is unchanged and Angular string-coerces it for display).
|
|
1213
|
+
*
|
|
1214
|
+
* @param value - The raw value to format.
|
|
1215
|
+
* @param dataType - Which formatting branch to apply.
|
|
1216
|
+
* @param pipeConfig - Optional pipe configuration (currency code, nested pipe type).
|
|
1217
|
+
* @returns The formatted representation, or the original value when no formatting applies.
|
|
1218
|
+
*/
|
|
1219
|
+
transform(value: unknown, dataType: DocumentLitsLabelConfigInterfaceValueType | InputDataTypes | undefined | InputPipeTypes, pipeConfig?: FormColumnInputs['pipe'] | undefined): string | number | null | undefined;
|
|
1220
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormatDataPipe, never>;
|
|
1221
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<FormatDataPipe, "formatData", true>;
|
|
687
1222
|
}
|
|
688
1223
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
1224
|
+
/**
|
|
1225
|
+
* @public
|
|
1226
|
+
* @deprecated Reachable for one minor cycle only as part of the Phase 1 public-surface
|
|
1227
|
+
* lockdown. Target removal: v3.0.0. No replacement — this is the empty
|
|
1228
|
+
* `ng generate library` stub and will be deleted in Phase 2.
|
|
1229
|
+
*/
|
|
1230
|
+
declare class NgxTFormsService {
|
|
1231
|
+
constructor();
|
|
1232
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTFormsService, never>;
|
|
1233
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NgxTFormsService>;
|
|
694
1234
|
}
|
|
695
1235
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
static ɵfac:
|
|
704
|
-
static ɵcmp:
|
|
1236
|
+
/**
|
|
1237
|
+
* @public
|
|
1238
|
+
* @deprecated Reachable for one minor cycle only as part of the Phase 1 public-surface
|
|
1239
|
+
* lockdown. Target removal: v3.0.0. No replacement — this is the empty
|
|
1240
|
+
* `ng generate library` stub and will be deleted in Phase 2.
|
|
1241
|
+
*/
|
|
1242
|
+
declare class NgxTFormsComponent {
|
|
1243
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTFormsComponent, never>;
|
|
1244
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxTFormsComponent, "lib-ngx-t-forms", never, {}, {}, never, never, true, never>;
|
|
705
1245
|
}
|
|
706
1246
|
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
1247
|
+
/**
|
|
1248
|
+
* Public entry-point for bulk imports.
|
|
1249
|
+
*
|
|
1250
|
+
* Typical usage:
|
|
1251
|
+
* ```ts
|
|
1252
|
+
* const importController = inject(TFormImportController);
|
|
1253
|
+
* importController.progress$.subscribe(p => render(p)); // optional reactive UI
|
|
1254
|
+
* const results = await importController.runImport(form, rows);
|
|
1255
|
+
* const validRows = results.filter(r => r.isValid);
|
|
1256
|
+
* ```
|
|
1257
|
+
*
|
|
1258
|
+
* Singleton (`providedIn: 'root'`) because all import sessions share the same
|
|
1259
|
+
* caches/injector wiring. Call {@link TFormImportController.reset} between
|
|
1260
|
+
* runs only if you want to force consumers of `progress$` to see an empty
|
|
1261
|
+
* baseline; `runImport` already clears caches on entry and exit.
|
|
1262
|
+
*
|
|
1263
|
+
* @public
|
|
1264
|
+
* @deprecated Reachable for one minor cycle only as part of the Phase 1 public-surface
|
|
1265
|
+
* lockdown. Target removal: v3.0.0. Consumers should switch to wiring an import flow
|
|
1266
|
+
* through the `withImportTower()` feature; the controller will move under that
|
|
1267
|
+
* feature tree in Phase 2.
|
|
1268
|
+
*/
|
|
1269
|
+
declare class TFormImportController {
|
|
1270
|
+
private readonly _injector;
|
|
1271
|
+
private readonly _rows$;
|
|
1272
|
+
/**
|
|
1273
|
+
* Per-session HTTP caches.
|
|
1274
|
+
* Key: serialized request identity → shared Observable (shareReplay).
|
|
1275
|
+
* Populated at the start of runImport and cleared when it finishes,
|
|
1276
|
+
* so every import session starts cold but identical in-flight requests
|
|
1277
|
+
* across concurrent rows reuse a single HTTP call.
|
|
1278
|
+
*/
|
|
1279
|
+
private _getCache;
|
|
1280
|
+
private _postCache;
|
|
1281
|
+
/**
|
|
1282
|
+
* Registry of pre-processors keyed by ElementType.
|
|
1283
|
+
* Add an entry here to handle a new input type in _preProcessRow — no other
|
|
1284
|
+
* changes needed. Each processor receives the column definition and the raw
|
|
1285
|
+
* row and must return `{ value?, errors[] }`.
|
|
1286
|
+
* `value` is written to processedRow[formControlName] when defined;
|
|
1287
|
+
* `errors` accumulates in colErrors[formControlName].
|
|
1288
|
+
*/
|
|
1289
|
+
private readonly _inputPreProcessors;
|
|
1290
|
+
/**
|
|
1291
|
+
* Shared financial-cycles observable for the current import session.
|
|
1292
|
+
* loadSystemInputs calls getFinacialCycles() directly via NGX_T_FORMS_CONFIG
|
|
1293
|
+
* (not through utils), so HTTP-function patching alone cannot deduplicate it.
|
|
1294
|
+
* We intercept it at the config level by providing a wrapped token in each
|
|
1295
|
+
* tower's child injector that returns this shared observable instead.
|
|
1296
|
+
*/
|
|
1297
|
+
private _financialCycles$;
|
|
1298
|
+
/**
|
|
1299
|
+
* Reactive progress stream — subscribe to track each row in real time.
|
|
1300
|
+
*/
|
|
1301
|
+
readonly progress$: Observable<ImportProgress>;
|
|
1302
|
+
/**
|
|
1303
|
+
* Snapshot of the current progress (non-reactive).
|
|
1304
|
+
*/
|
|
1305
|
+
get currentProgress(): ImportProgress;
|
|
1306
|
+
/**
|
|
1307
|
+
* Runs an import session.
|
|
1308
|
+
*
|
|
1309
|
+
* For each row a fresh tower instance is spun up via a child injector,
|
|
1310
|
+
* prepopulated, and left to settle (calculations + API fetches) before
|
|
1311
|
+
* recording the final value and validation status.
|
|
1312
|
+
* All rows are processed concurrently.
|
|
1313
|
+
*
|
|
1314
|
+
* Usage:
|
|
1315
|
+
* ```ts
|
|
1316
|
+
* const results = await importController.runImport(form, rows);
|
|
1317
|
+
* const valid = results.filter(r => r.isValid);
|
|
1318
|
+
* ```
|
|
1319
|
+
*
|
|
1320
|
+
* @param form The form definition every row is validated against.
|
|
1321
|
+
* @param rows Raw data objects — one per import row.
|
|
1322
|
+
*/
|
|
1323
|
+
runImport(form: FormInterface, rows: Record<string, unknown>[]): Promise<ImportRowState[]>;
|
|
1324
|
+
/** Clears all row state. */
|
|
1325
|
+
reset(): void;
|
|
1326
|
+
/**
|
|
1327
|
+
* Creates an isolated tower instance through a short-lived child injector.
|
|
1328
|
+
*
|
|
1329
|
+
* The child injector delegates all token resolution to the parent, so
|
|
1330
|
+
* HttpClient, NGX_T_FORMS_CONFIG_TOKEN, and any other deps the tower needs
|
|
1331
|
+
* are found automatically — no manual wiring required here.
|
|
1332
|
+
*
|
|
1333
|
+
* After creation the tower's HTTP functions are replaced with cache-aware
|
|
1334
|
+
* wrappers so that identical requests fired by different rows share one
|
|
1335
|
+
* in-flight Observable instead of each issuing their own HTTP call.
|
|
1336
|
+
*/
|
|
1337
|
+
private _createTower;
|
|
1338
|
+
/**
|
|
1339
|
+
* Returns a shared Observable for a GET request.
|
|
1340
|
+
* On cache miss the original function is called once and its result is
|
|
1341
|
+
* multicasted via shareReplay(1) so every concurrent subscriber (row) that
|
|
1342
|
+
* asks for the same URL+options receives the same response without an
|
|
1343
|
+
* additional HTTP call.
|
|
1344
|
+
*/
|
|
1345
|
+
private _cachedGet;
|
|
1346
|
+
/**
|
|
1347
|
+
* Returns a shared Observable for a POST request.
|
|
1348
|
+
* Keyed by URL + serialised body + serialised options so only truly
|
|
1349
|
+
* identical requests are deduplicated.
|
|
1350
|
+
*/
|
|
1351
|
+
private _cachedPost;
|
|
1352
|
+
/**
|
|
1353
|
+
* End-to-end pipeline for a single import row. Runs concurrently with every
|
|
1354
|
+
* other row in the session.
|
|
1355
|
+
*
|
|
1356
|
+
* Steps (any thrown error short-circuits to `status: 'error'`):
|
|
1357
|
+
* 1. Mark the row `processing`.
|
|
1358
|
+
* 2. Spin up an isolated tower via {@link TFormImportController._createTower}.
|
|
1359
|
+
* 3. `initialize(form, { skipInitialFunctions: true })` — see the flag's
|
|
1360
|
+
* docs; this avoids the timing race between the tower's initial async
|
|
1361
|
+
* work and our synchronous `initializeFormValues`.
|
|
1362
|
+
* 4. `_preProcessRow` resolves nested formats (SCOA codes, multi-select
|
|
1363
|
+
* strings, MultipleInput sub-rows) into the shape `initializeFormValues`
|
|
1364
|
+
* expects.
|
|
1365
|
+
* 5. Apply the resolved row → tower's changeMonitor cycle fires dependent
|
|
1366
|
+
* functions → busy=true.
|
|
1367
|
+
* 6. `waitUntilSettled()` blocks until every async op drains.
|
|
1368
|
+
* 7. `markAllAsTouched()` so required-field validators surface even on
|
|
1369
|
+
* untouched controls.
|
|
1370
|
+
* 8. {@link TFormImportController._recomputeAllValidationErrors} re-runs
|
|
1371
|
+
* sync validators across the whole tree (matches what
|
|
1372
|
+
* `getInputErrorMessage` reports in the interactive UI).
|
|
1373
|
+
* 9. Collect settled values + per-input + per-column errors and update the
|
|
1374
|
+
* row's state.
|
|
1375
|
+
*
|
|
1376
|
+
* `finally` always destroys the tower so child injectors / valueChanges
|
|
1377
|
+
* subscriptions don't leak across rows.
|
|
1378
|
+
*/
|
|
1379
|
+
private _processRow;
|
|
1380
|
+
/**
|
|
1381
|
+
* Dispatches each column that has a registered pre-processor, collects
|
|
1382
|
+
* resolved values and errors, then returns the enriched row.
|
|
1383
|
+
*
|
|
1384
|
+
* To support a new input type add an entry to `_inputPreProcessors` —
|
|
1385
|
+
* nothing else needs to change here.
|
|
1386
|
+
*/
|
|
1387
|
+
private _preProcessRow;
|
|
1388
|
+
/**
|
|
1389
|
+
* Pre-processor for MscoaSelection inputs.
|
|
1390
|
+
*
|
|
1391
|
+
* Resolves flat account codes into full IScoaAccount objects.
|
|
1392
|
+
* Column naming convention expected in the raw row:
|
|
1393
|
+
* {formControlName}.{basisKey}.{SEGMENT}.debit e.g. "glAccount.accrual.FUND.debit"
|
|
1394
|
+
* {formControlName}.{basisKey}.{SEGMENT}.credit e.g. "glAccount.cash.COSTING.credit"
|
|
1395
|
+
*
|
|
1396
|
+
* Returns the nested structure that `initializeFormValues` / the mscoa
|
|
1397
|
+
* component store expect:
|
|
1398
|
+
* { accrual: { FUND: { debit: IScoaAccount, credit: IScoaAccount } }, cash: { ... } }
|
|
1399
|
+
*/
|
|
1400
|
+
private _processMscoaInput;
|
|
1401
|
+
/**
|
|
1402
|
+
* Pre-processor for MultipleInput inputs.
|
|
1403
|
+
*
|
|
1404
|
+
* Expects `row[input.formControlName]` to be an array of objects where each
|
|
1405
|
+
* object's keys are the formControlNames declared in `input.formInputs`.
|
|
1406
|
+
*
|
|
1407
|
+
* For each item the full tower lifecycle is run against a one-slide mock form
|
|
1408
|
+
* (the same sequence as _processRow on the main form), so Angular validators,
|
|
1409
|
+
* async validators, API calls, and calculated fields all fire and settle before
|
|
1410
|
+
* errors are collected. Pre-processors (e.g. MscoaSelection) are applied first
|
|
1411
|
+
* so resolved objects are in place when the tower initializes.
|
|
1412
|
+
*
|
|
1413
|
+
* Errors are prefixed with the item index: "[0].subField.errorCode".
|
|
1414
|
+
*/
|
|
1415
|
+
private _processMultipleFormInput;
|
|
1416
|
+
/**
|
|
1417
|
+
* Resolves a single account code to an IScoaAccount.
|
|
1418
|
+
* Routed through `_cachedGet` so identical codes across concurrent rows share
|
|
1419
|
+
* one in-flight Observable (shareReplay) — the same mechanism used for all
|
|
1420
|
+
* other HTTP calls in this class.
|
|
1421
|
+
*/
|
|
1422
|
+
private _lookupScoaAccount;
|
|
1423
|
+
/**
|
|
1424
|
+
* Pre-processor for `Select` and `PaginatedSelectionTable` inputs.
|
|
1425
|
+
*
|
|
1426
|
+
* Single-select inputs pass through unchanged.
|
|
1427
|
+
*
|
|
1428
|
+
* Multi-select inputs accept the value in any of:
|
|
1429
|
+
* - `string[]` — taken as-is, each entry trimmed.
|
|
1430
|
+
* - `'["a","b"]'` — JSON-stringified array.
|
|
1431
|
+
* - `'a, b, c'` — comma-separated string.
|
|
1432
|
+
* - `'[a, b]'` (malformed JSON) — fallback: strip brackets, split, strip quotes.
|
|
1433
|
+
*
|
|
1434
|
+
* If the input declares custom (in-config) options, every parsed value is
|
|
1435
|
+
* checked against the option set. Any mismatches are returned as errors of
|
|
1436
|
+
* the form `'invalidOption:<value>'` and `value` is omitted (so the parent
|
|
1437
|
+
* form control keeps its original/empty state and the row is flagged
|
|
1438
|
+
* invalid). API-fetched options are NOT validated here — see the comments
|
|
1439
|
+
* in {@link FormTowerControllerService.initialize} on why deferring those
|
|
1440
|
+
* lookups is safe in import mode.
|
|
1441
|
+
*/
|
|
1442
|
+
private _processSelectInput;
|
|
1443
|
+
/**
|
|
1444
|
+
* Re-runs sync validation across the WHOLE form tree against the settled values.
|
|
1445
|
+
*
|
|
1446
|
+
* **Why this is still required after the signal-forms migration (Phase 1.5 finding;
|
|
1447
|
+
* kept until Phase 3):** it is NOT a settle-timing workaround — Phase 1 already made
|
|
1448
|
+
* `waitUntilSettled` deterministic. It compensates for two reactive-forms semantics
|
|
1449
|
+
* the signal-graph engine does not change:
|
|
1450
|
+
*
|
|
1451
|
+
* 1. **Cross-field validators.** Custom validators (commonFormOperations
|
|
1452
|
+
* `createCustomValidator`) read OTHER fields via `getFormValue()`. Angular only
|
|
1453
|
+
* re-runs a control's validators when ITS OWN value changes, and the engine's
|
|
1454
|
+
* projection effect likewise only `setValue`s controls whose value actually
|
|
1455
|
+
* changed — so a control whose value is unchanged keeps STALE cross-field errors
|
|
1456
|
+
* until a whole-tree `updateValueAndValidity` forces re-evaluation.
|
|
1457
|
+
* 2. **Disabled controls.** Angular never validates disabled controls (formGenerator
|
|
1458
|
+
* disables them from `input.disabled`); import temporarily enables the tree,
|
|
1459
|
+
* validates, then restores the disabled flags.
|
|
1460
|
+
*
|
|
1461
|
+
* Phase 3 (`@angular/forms/signals` `validate()`/`validateAsync()`) makes validation
|
|
1462
|
+
* reactive over observed fields and disabled-aware — at which point this method, its
|
|
1463
|
+
* enable/disable dance, and this call site can be deleted.
|
|
1464
|
+
*/
|
|
1465
|
+
private _recomputeAllValidationErrors;
|
|
1466
|
+
/**
|
|
1467
|
+
* Walks `{ [sectionId]: FormGroup { [inputId]: FormControl } }` and
|
|
1468
|
+
* collects every control that has validation errors (from `control.errors`).
|
|
1469
|
+
*/
|
|
1470
|
+
private _collectValidationErrors;
|
|
1471
|
+
/**
|
|
1472
|
+
* Groups the flat overridable-error list from {@link partitionFormErrors} into
|
|
1473
|
+
* an `inputId → messages[]` map for {@link ImportRowState.overridableErrors}.
|
|
1474
|
+
*/
|
|
1475
|
+
private _groupOverridableByInput;
|
|
1476
|
+
/**
|
|
1477
|
+
* Builds a formControlName-keyed error map from the settled form.
|
|
1478
|
+
* Multiple error keys on one control are joined with '.'.
|
|
1479
|
+
*/
|
|
1480
|
+
private _collectColErrors;
|
|
1481
|
+
/**
|
|
1482
|
+
* Immutable row update — clones the rows array and the targeted row before
|
|
1483
|
+
* pushing through `_rows$` so subscribers downstream of `progress$` always
|
|
1484
|
+
* receive a fresh reference (cheap change detection in components).
|
|
1485
|
+
*/
|
|
1486
|
+
private _patchRow;
|
|
1487
|
+
/**
|
|
1488
|
+
* Compute the {@link ImportProgress} aggregate from the row array. Pure —
|
|
1489
|
+
* driven by `progress$` and `currentProgress`.
|
|
1490
|
+
*/
|
|
1491
|
+
private _toProgress;
|
|
1492
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TFormImportController, never>;
|
|
1493
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TFormImportController>;
|
|
723
1494
|
}
|
|
724
1495
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
1496
|
+
/**
|
|
1497
|
+
* Provides a unique identifier for each tower instance created during an
|
|
1498
|
+
* import run — one id per imported row. The form import controller uses this
|
|
1499
|
+
* to disambiguate concurrent tower contexts when materialising rows into
|
|
1500
|
+
* form submissions.
|
|
1501
|
+
*
|
|
1502
|
+
* @see provideNgxTForms
|
|
1503
|
+
*
|
|
1504
|
+
* @public
|
|
1505
|
+
* @deprecated Internal token used by `TFormImportController`. Will be relocated
|
|
1506
|
+
* under the `withImportTower()` feature tree in Phase 2; the token (or its
|
|
1507
|
+
* renamed/improved successor) will remain callable. See DECISIONS.md D-014.
|
|
1508
|
+
*/
|
|
1509
|
+
declare const IMPORT_TOWER_INSTANCE_ID: InjectionToken<string>;
|
|
1510
|
+
|
|
1511
|
+
/**
|
|
1512
|
+
* Generates a hierarchical form with nested FormGroups based on section IDs.
|
|
1513
|
+
* Parent form listens to all descendant changes, with validation cascading upward.
|
|
1514
|
+
*
|
|
1515
|
+
* @param inputs Array of form inputs with their configurations
|
|
1516
|
+
* @param getFormValue Record of form values used for custom validation
|
|
1517
|
+
* @returns A FormGroup with nested FormGroups for each section
|
|
1518
|
+
*
|
|
1519
|
+
* @public
|
|
1520
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1521
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1522
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
1523
|
+
*/
|
|
1524
|
+
declare function formGenerator(inputs: Array<FormColumnInputs>, getFormValue: () => Record<string, any>): FormGroup;
|
|
1525
|
+
|
|
1526
|
+
/**
|
|
1527
|
+
* @public
|
|
1528
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1529
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1530
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
1531
|
+
*/
|
|
1532
|
+
declare function getSectionElements(elements: ElementEditorInnerSectionElementInterface[], inputInEdit: (FormColumnInputs) | undefined, NGX_T_FORMS_CONFIG: NgxTFormsConfig, utils: InClassFormUtilsInterface, errors?: ValidationError[]): ElementEditorInnerSectionElementInterface[];
|
|
1533
|
+
|
|
1534
|
+
/**
|
|
1535
|
+
* @public
|
|
1536
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1537
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1538
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
1539
|
+
*/
|
|
1540
|
+
declare const returnMappedPathValue: (pathMap: TreeNode[], obj: unknown) => unknown;
|
|
1541
|
+
/**
|
|
1542
|
+
* @public
|
|
1543
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1544
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1545
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
1546
|
+
*/
|
|
1547
|
+
declare const getValueFromValueAccessor: (valueAccessRules: FormInputBasicOptionInterface | TreeNode[] | Record<string, TreeNode[]>, data: unknown) => unknown;
|
|
1548
|
+
|
|
1549
|
+
/**
|
|
1550
|
+
* One entry in the polymorphic-input registry. Maps an `ElementTypes` value to
|
|
1551
|
+
* a lazily-loaded renderer plus the metadata the host needs to wire it.
|
|
1552
|
+
*
|
|
1553
|
+
* Each `load()` is a dynamic `import()`, so every renderer is code-split out of
|
|
1554
|
+
* the host bundle — a form with only text fields never downloads the editor,
|
|
1555
|
+
* camera, signature pad, MSCOA charts, etc. The dynamic boundary also breaks
|
|
1556
|
+
* the otherwise-circular import between the host and `ImageCapture`.
|
|
1557
|
+
*/
|
|
1558
|
+
interface ElementEntry {
|
|
1559
|
+
/** Lazy loader for the concrete renderer component. */
|
|
1560
|
+
readonly load: () => Promise<Type<unknown>>;
|
|
1561
|
+
/**
|
|
1562
|
+
* `true` when the renderer also accepts `editorMode` and
|
|
1563
|
+
* `formBuilderFunctions` inputs. The host only forwards those two inputs to
|
|
1564
|
+
* builder-aware entries, so `NgComponentOutlet` never tries to set an input
|
|
1565
|
+
* the target component does not declare.
|
|
1566
|
+
*/
|
|
1567
|
+
readonly builderAware?: boolean;
|
|
740
1568
|
}
|
|
741
1569
|
|
|
742
|
-
|
|
1570
|
+
type TFormInputFormGroup = FormGroup<{
|
|
1571
|
+
[sectionId: string]: FormGroup<{
|
|
1572
|
+
[inputId: string]: FormControl<string | null>;
|
|
1573
|
+
}>;
|
|
1574
|
+
}> | undefined | null;
|
|
1575
|
+
/**
|
|
1576
|
+
* Polymorphic input host — given an `ITowerStepColumn` descriptor, selects
|
|
1577
|
+
* and renders the correct concrete input component (text, select, date,
|
|
1578
|
+
* file upload, signature, geo-location, MSCOA, document picker, workflow
|
|
1579
|
+
* adjudication, etc.) and wires it to the parent reactive `FormGroup`.
|
|
1580
|
+
*
|
|
1581
|
+
* @remarks
|
|
1582
|
+
* Accepts portal-style prop injection via the optional `'COMPONENT_PROPS'`
|
|
1583
|
+
* token so it can be rendered through `ComponentPortal` with inputs supplied
|
|
1584
|
+
* dynamically.
|
|
1585
|
+
*
|
|
1586
|
+
* Inputs:
|
|
1587
|
+
* - `inputConfig: ITowerStepColumn | undefined` — descriptor of the input
|
|
1588
|
+
* to render; the `element` field selects the concrete renderer.
|
|
1589
|
+
* - `formGroup: FormGroup<{...}> | undefined | null` — the parent reactive
|
|
1590
|
+
* form group keyed by section id then input id.
|
|
1591
|
+
* - `editorMode: boolean` — default `false`; when `true`, renders the
|
|
1592
|
+
* builder-side variant.
|
|
1593
|
+
* - `formBuilderFunctions: FormBuilderFunctions | undefined` — builder
|
|
1594
|
+
* hooks passed through to inputs that need them (e.g., MSCOA).
|
|
1595
|
+
*
|
|
1596
|
+
* Outputs:
|
|
1597
|
+
* - `valueChange: unknown` — emits the input's new value whenever the user
|
|
1598
|
+
* edits the bound `FormControl`. Concrete child inputs are rendered through
|
|
1599
|
+
* `NgComponentOutlet` (which forwards inputs only, never outputs) and write
|
|
1600
|
+
* their value through the shared `FormGroup` via `ControlValueAccessor`, so
|
|
1601
|
+
* this host bridges those control edits into a single output the tower wires
|
|
1602
|
+
* to `engine.updateValue(col.id, $event)`. Without this bridge user edits
|
|
1603
|
+
* reach the projected `FormGroup` (so submission works) but never reach the
|
|
1604
|
+
* engine's `#model`, leaving the signal graph blind to user input — no
|
|
1605
|
+
* dependent calculation, value-fetch, or options-fetch ever re-fires.
|
|
1606
|
+
*
|
|
1607
|
+
* @public
|
|
1608
|
+
*/
|
|
1609
|
+
declare class TFormInputComponent {
|
|
1610
|
+
#private;
|
|
743
1611
|
/**
|
|
744
|
-
*
|
|
745
|
-
*
|
|
1612
|
+
* Descriptor of the input to render. `element` selects the concrete renderer.
|
|
1613
|
+
*
|
|
1614
|
+
* Modeled as a `model()` (not `input()`) so that portal-style injection via
|
|
1615
|
+
* `'COMPONENT_PROPS'` can write into the signal at construction time — signal
|
|
1616
|
+
* inputs are read-only at runtime, but model signals are writable via `.set()`.
|
|
746
1617
|
*/
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
set globalSystemInputs(inputs: FormColumnInputs[]);
|
|
755
|
-
passParamsOnSubmit: any;
|
|
756
|
-
get formBuilderFunctions(): FormBuilderFunctions;
|
|
757
|
-
stepper: MatStepper | undefined;
|
|
758
|
-
isEditable: boolean;
|
|
759
|
-
getStepState(step: any, index: number): StepState;
|
|
760
|
-
getPreviousStepLabel(): string | undefined;
|
|
761
|
-
getNextStepLabel(): string | undefined;
|
|
762
|
-
canProceedToNextStep(step: any): boolean;
|
|
763
|
-
get getSubmissionStatus(): string;
|
|
764
|
-
handleSubmit(): void;
|
|
765
|
-
tourManagerService: TourManagerService;
|
|
766
|
-
get hasTour(): boolean;
|
|
1618
|
+
readonly inputConfig: _angular_core.ModelSignal<ITowerStepColumn | undefined>;
|
|
1619
|
+
/** Parent reactive `FormGroup` keyed by section id then input id. */
|
|
1620
|
+
readonly formGroup: _angular_core.ModelSignal<TFormInputFormGroup>;
|
|
1621
|
+
/** When `true`, renders the builder-side variant. */
|
|
1622
|
+
readonly editorMode: _angular_core.ModelSignal<boolean>;
|
|
1623
|
+
/** Builder hooks passed through to inputs that need them (e.g., MSCOA). */
|
|
1624
|
+
readonly formBuilderFunctions: _angular_core.ModelSignal<FormBuilderFunctions | undefined>;
|
|
767
1625
|
/**
|
|
768
|
-
*
|
|
769
|
-
* The
|
|
1626
|
+
* Emits the input's new value on every user-originated edit of the bound
|
|
1627
|
+
* control. The tower binds this to `engine.updateValue(col.id, $event)`,
|
|
1628
|
+
* which is the ONLY path user input takes into the engine's `#model` (and
|
|
1629
|
+
* therefore the signal-graph dependency reactivity). The projection effect
|
|
1630
|
+
* patches controls with `{ emitEvent: false }`, so signal→control writes do
|
|
1631
|
+
* NOT echo back here — only genuine user edits emit.
|
|
770
1632
|
*/
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
1633
|
+
readonly valueChange: _angular_core.OutputEmitterRef<unknown>;
|
|
1634
|
+
protected readonly elementTypes: typeof ElementTypes;
|
|
1635
|
+
/**
|
|
1636
|
+
* Polymorphic-host control flag — true when the bound `FormGroup` already
|
|
1637
|
+
* has a `FormControl` (or, for `DateRangePicker`, both start/end controls)
|
|
1638
|
+
* matching the descriptor's `id`.
|
|
1639
|
+
*/
|
|
1640
|
+
protected readonly hasFormControlInstance: _angular_core.Signal<boolean>;
|
|
1641
|
+
/**
|
|
1642
|
+
* Registry entry for the current descriptor's element type. Resolves to the
|
|
1643
|
+
* basic-input fallback for unknown types, mirroring the former `@default`
|
|
1644
|
+
* switch branch. `undefined` only while no descriptor is bound.
|
|
1645
|
+
*/
|
|
1646
|
+
protected readonly elementEntry: _angular_core.Signal<ElementEntry | undefined>;
|
|
1647
|
+
/**
|
|
1648
|
+
* Lazily-loaded renderer component for the current element type, unwrapped in
|
|
1649
|
+
* the template via the `async` pipe. The promise is re-created only when the
|
|
1650
|
+
* resolved entry changes, so editing other descriptor fields does not reload
|
|
1651
|
+
* the component.
|
|
1652
|
+
*/
|
|
1653
|
+
protected readonly elementComponent: _angular_core.Signal<Promise<Type<unknown>> | null>;
|
|
1654
|
+
/**
|
|
1655
|
+
* Inputs forwarded to the resolved renderer. Builder-aware renderers also
|
|
1656
|
+
* receive `editorMode` and `formBuilderFunctions`; every other renderer gets
|
|
1657
|
+
* only `inputConfig` and `formGroup`, so `NgComponentOutlet` never sets an
|
|
1658
|
+
* input the target component does not declare.
|
|
1659
|
+
*/
|
|
1660
|
+
protected readonly elementInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
1661
|
+
constructor(props: Record<string, unknown> | null);
|
|
1662
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TFormInputComponent, [{ optional: true; }]>;
|
|
1663
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TFormInputComponent, "lib-t-form-input", never, { "inputConfig": { "alias": "inputConfig"; "required": false; "isSignal": true; }; "formGroup": { "alias": "formGroup"; "required": false; "isSignal": true; }; "editorMode": { "alias": "editorMode"; "required": false; "isSignal": true; }; "formBuilderFunctions": { "alias": "formBuilderFunctions"; "required": false; "isSignal": true; }; }, { "inputConfig": "inputConfigChange"; "formGroup": "formGroupChange"; "editorMode": "editorModeChange"; "formBuilderFunctions": "formBuilderFunctionsChange"; "valueChange": "valueChange"; }, never, never, true, never>;
|
|
775
1664
|
}
|
|
776
1665
|
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
1666
|
+
/**
|
|
1667
|
+
* Renders an MSCOA (Municipal Standard Chart of Accounts) form input — a
|
|
1668
|
+
* segmented reactive form field that lets the user pick an account by
|
|
1669
|
+
* walking the MSCOA tree. Surfaces validation status via
|
|
1670
|
+
* `TFormInputStatusComponent`.
|
|
1671
|
+
*
|
|
1672
|
+
* Inputs:
|
|
1673
|
+
* - `inputConfig: ITowerStepColumn` — required, descriptor for this MSCOA input.
|
|
1674
|
+
* - `editorMode: boolean` — default `false`; when `true`, renders in
|
|
1675
|
+
* builder-editor mode rather than user-facing mode.
|
|
1676
|
+
* - `formGroup: FormGroup` — required, the parent reactive form group that
|
|
1677
|
+
* owns this input's controls.
|
|
1678
|
+
* - `formBuilderFunctions: FormBuilderFunctions | undefined` — optional
|
|
1679
|
+
* builder hooks supplied when used inside the form builder.
|
|
1680
|
+
*
|
|
1681
|
+
* Outputs:
|
|
1682
|
+
* - `reload: void` — fires when the input requests its
|
|
1683
|
+
* container reload the underlying data (e.g., after a tree refresh).
|
|
1684
|
+
*/
|
|
1685
|
+
declare class MscoaFormInputComponent {
|
|
1686
|
+
/** Descriptor for this MSCOA input. */
|
|
1687
|
+
readonly inputConfig: _angular_core.InputSignal<ITowerStepColumn>;
|
|
1688
|
+
/** When `true`, renders in builder-editor mode rather than user-facing mode. */
|
|
1689
|
+
readonly editorMode: _angular_core.InputSignal<boolean>;
|
|
1690
|
+
/** Parent reactive form group that owns this input's controls. */
|
|
1691
|
+
readonly formGroup: _angular_core.InputSignal<FormGroup<any>>;
|
|
1692
|
+
/** Optional builder hooks supplied when used inside the form builder. */
|
|
1693
|
+
readonly formBuilderFunctions: _angular_core.InputSignal<FormBuilderFunctions | undefined>;
|
|
1694
|
+
/** Fires when the input requests its container reload the underlying data. */
|
|
1695
|
+
readonly reload: _angular_core.OutputEmitterRef<void>;
|
|
1696
|
+
protected get errorMessage(): string | string[] | undefined;
|
|
1697
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MscoaFormInputComponent, never>;
|
|
1698
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MscoaFormInputComponent, "lib-mscoa-form-input", never, { "inputConfig": { "alias": "inputConfig"; "required": true; "isSignal": true; }; "editorMode": { "alias": "editorMode"; "required": false; "isSignal": true; }; "formGroup": { "alias": "formGroup"; "required": true; "isSignal": true; }; "formBuilderFunctions": { "alias": "formBuilderFunctions"; "required": false; "isSignal": true; }; }, { "reload": "reload"; }, never, never, true, never>;
|
|
781
1699
|
}
|
|
782
1700
|
|
|
783
|
-
|
|
1701
|
+
/**
|
|
1702
|
+
* Form input that captures a hand-drawn signature via `SignaturePadInputComponent`
|
|
1703
|
+
* and writes the resulting image to the bound `FormGroup` control. Surfaces
|
|
1704
|
+
* validation state through `TFormInputStatusComponent`.
|
|
1705
|
+
*
|
|
1706
|
+
* Inputs:
|
|
1707
|
+
* - `inputConfig: ITowerStepColumn` — required, descriptor for this input.
|
|
1708
|
+
* - `formGroup: FormGroup` — required, the parent reactive form group.
|
|
1709
|
+
*
|
|
1710
|
+
* Outputs:
|
|
1711
|
+
* - `reload: void` — fires when the input requests its container reload
|
|
1712
|
+
* (e.g., after clearing the pad).
|
|
1713
|
+
*
|
|
1714
|
+
* @public
|
|
1715
|
+
*/
|
|
1716
|
+
declare class SignatureInputElementComponent {
|
|
1717
|
+
readonly inputConfig: _angular_core.InputSignal<ITowerStepColumn>;
|
|
1718
|
+
readonly formGroup: _angular_core.InputSignal<FormGroup<any>>;
|
|
1719
|
+
readonly reload: _angular_core.OutputEmitterRef<void>;
|
|
1720
|
+
protected readonly errorMessage: _angular_core.Signal<string | string[] | undefined>;
|
|
1721
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SignatureInputElementComponent, never>;
|
|
1722
|
+
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
|
+
}
|
|
784
1724
|
|
|
785
1725
|
/**
|
|
786
|
-
*
|
|
1726
|
+
* Builder-side editor for authoring a boolean expression (used for guarded
|
|
1727
|
+
* navigation, conditional validation, and API path-selection rules). Validates
|
|
1728
|
+
* the expression's syntax in real time and exposes the typed tree of value-
|
|
1729
|
+
* access references the expression depends on.
|
|
787
1730
|
*
|
|
788
|
-
*
|
|
789
|
-
*
|
|
790
|
-
*
|
|
791
|
-
*
|
|
1731
|
+
* Inputs:
|
|
1732
|
+
* - `hint: string` — helper text shown beneath the expression field.
|
|
1733
|
+
* - `label: string` — label for the expression field (default
|
|
1734
|
+
* `'Validation Expression'`).
|
|
1735
|
+
* - `formInputs: FormColumnInputs[]` — inputs the expression may reference.
|
|
1736
|
+
* - `data: unknown` — sample data used to test the expression.
|
|
1737
|
+
* - `expression: string` — initial expression string written into the editor
|
|
1738
|
+
* control.
|
|
1739
|
+
* - `valueAccessRules: Record<string, TreeNode[]>` — current value-access
|
|
1740
|
+
* tree for variables referenced by the expression.
|
|
1741
|
+
*
|
|
1742
|
+
* Outputs:
|
|
1743
|
+
* - `expressionChange` — fires when either the expression text or its derived
|
|
1744
|
+
* value-access tree changes.
|
|
1745
|
+
*
|
|
1746
|
+
* @public
|
|
1747
|
+
* @deprecated Internal builder UI re-exported via the `_deprecated/` compatibility
|
|
1748
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1749
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
792
1750
|
*/
|
|
793
|
-
declare
|
|
1751
|
+
declare class ValidationExpressioCreatorComponent {
|
|
1752
|
+
#private;
|
|
1753
|
+
/** Helper text shown beneath the expression field. */
|
|
1754
|
+
readonly hint: _angular_core.InputSignal<string>;
|
|
1755
|
+
/** Label for the expression field. */
|
|
1756
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1757
|
+
/** Inputs the expression may reference. */
|
|
1758
|
+
readonly formInputs: _angular_core.InputSignal<FormColumnInputs[]>;
|
|
1759
|
+
/** Sample data used to test the expression. Heterogeneous shape from parent template binding. */
|
|
1760
|
+
readonly data: _angular_core.InputSignal<any>;
|
|
1761
|
+
/** Initial expression string written into the editor control. */
|
|
1762
|
+
readonly expression: _angular_core.InputSignal<string>;
|
|
1763
|
+
/** Current value-access tree for variables referenced by the expression. */
|
|
1764
|
+
readonly valueAccessRules: _angular_core.InputSignal<Record<string, TreeNode[]>>;
|
|
1765
|
+
/** Fires when either the expression text or its derived value-access tree changes. */
|
|
1766
|
+
readonly expressionChange: _angular_core.OutputEmitterRef<{
|
|
1767
|
+
expression: string | null;
|
|
1768
|
+
valueAccessRules: Record<string, TreeNode[]>;
|
|
1769
|
+
}>;
|
|
1770
|
+
protected readonly textareaElementRef: _angular_core.Signal<ElementRef<HTMLTextAreaElement>>;
|
|
1771
|
+
protected readonly expressionControl: FormControl<string | null>;
|
|
1772
|
+
protected readonly showSuggestions: _angular_core.WritableSignal<boolean>;
|
|
1773
|
+
protected readonly optionsSearch: _angular_core.WritableSignal<string | undefined>;
|
|
1774
|
+
protected readonly variableInEdit: _angular_core.WritableSignal<string | null>;
|
|
1775
|
+
protected readonly methods: {
|
|
1776
|
+
label: string;
|
|
1777
|
+
hint: string;
|
|
1778
|
+
value: string;
|
|
1779
|
+
}[];
|
|
1780
|
+
/** Bridge the `expression` input into the FormControl. */
|
|
1781
|
+
protected readonly expressionBridge: _angular_core.EffectRef;
|
|
1782
|
+
/** Mirror the `valueAccessRules` input into the local mutable copy. */
|
|
1783
|
+
protected readonly valueAccessRulesBridge: _angular_core.EffectRef;
|
|
1784
|
+
protected readonly valueAccessOptions: _angular_core.Signal<string[]>;
|
|
1785
|
+
protected readonly allInputs: _angular_core.Signal<FormColumnInputs[]>;
|
|
1786
|
+
constructor();
|
|
1787
|
+
protected getMethods(): {
|
|
1788
|
+
label: string;
|
|
1789
|
+
hint: string;
|
|
1790
|
+
value: string;
|
|
1791
|
+
}[];
|
|
1792
|
+
protected get errorMessage(): string | null;
|
|
1793
|
+
protected getValueAccessRule(key: string): TreeNode[];
|
|
1794
|
+
protected onTextChange(expression: string): Promise<void>;
|
|
1795
|
+
protected cleanValueAccessRules(): void;
|
|
1796
|
+
protected selectSuggestionInput(suggestion: string): void;
|
|
1797
|
+
protected onFocus(): void;
|
|
1798
|
+
protected toggleVariableInEdit(variable: string): void;
|
|
1799
|
+
protected activeVariableChanged(value: TreeNode[] | string | {
|
|
1800
|
+
[key: string]: TreeNode[] | string;
|
|
1801
|
+
}): void;
|
|
1802
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ValidationExpressioCreatorComponent, never>;
|
|
1803
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ValidationExpressioCreatorComponent, "lib-validation-expressio-creator", never, { "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "formInputs": { "alias": "formInputs"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "expression": { "alias": "expression"; "required": false; "isSignal": true; }; "valueAccessRules": { "alias": "valueAccessRules"; "required": false; "isSignal": true; }; }, { "expressionChange": "expressionChange"; }, never, never, true, never>;
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
/**
|
|
1807
|
+
* Generic Material dialog shell used by the forms runtime to surface
|
|
1808
|
+
* confirmation prompts and short-lived informational dialogs. Reads its
|
|
1809
|
+
* configuration (title, body, button labels) from `MAT_DIALOG_DATA` as a
|
|
1810
|
+
* `DialogConfig` and resolves its `MatDialogRef` with `true` when the user
|
|
1811
|
+
* proceeds.
|
|
1812
|
+
*
|
|
1813
|
+
* Inputs:
|
|
1814
|
+
* - _None._ Configuration arrives through `MAT_DIALOG_DATA` (`DialogConfig`).
|
|
1815
|
+
*
|
|
1816
|
+
* Outputs:
|
|
1817
|
+
* - _None._ Result is delivered via `MatDialogRef.close(true)`.
|
|
1818
|
+
*
|
|
1819
|
+
* @public
|
|
1820
|
+
* @deprecated Internal Material dialog template re-exported via the `_deprecated/`
|
|
1821
|
+
* compatibility barrel; remains functional. A renamed/improved replacement may be
|
|
1822
|
+
* introduced in a future minor; the original symbol stays callable. See
|
|
1823
|
+
* DECISIONS.md D-014.
|
|
1824
|
+
*/
|
|
1825
|
+
declare class DialogTemplateComponent {
|
|
1826
|
+
readonly dialogRef: MatDialogRef<any, any>;
|
|
1827
|
+
readonly data: DialogConfig;
|
|
1828
|
+
proceed(): void;
|
|
1829
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogTemplateComponent, never>;
|
|
1830
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogTemplateComponent, "lib-dialog-template", never, {}, {}, never, never, true, never>;
|
|
1831
|
+
}
|
|
794
1832
|
|
|
795
|
-
type DeepPropertyValue = any;
|
|
796
|
-
type PropertyPath = (string | number | IArrayFunction[])[];
|
|
797
1833
|
/**
|
|
798
1834
|
* Custom error class for property access errors in deep object traversal.
|
|
799
1835
|
*
|
|
@@ -817,6 +1853,11 @@ type PropertyPath = (string | number | IArrayFunction[])[];
|
|
|
817
1853
|
* console.log(`Error message: ${error.message}`);
|
|
818
1854
|
* }
|
|
819
1855
|
* }
|
|
1856
|
+
*
|
|
1857
|
+
* @public
|
|
1858
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1859
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1860
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
820
1861
|
*/
|
|
821
1862
|
declare class PropertyAccessError extends Error {
|
|
822
1863
|
path: PropertyPath;
|
|
@@ -828,12 +1869,12 @@ declare class PropertyAccessError extends Error {
|
|
|
828
1869
|
*
|
|
829
1870
|
* @function returnDeepProperty
|
|
830
1871
|
*
|
|
831
|
-
* @param {
|
|
1872
|
+
* @param {unknown} item - The object to traverse.
|
|
832
1873
|
* @param {(string|number|symbol)[]} path - An array representing the path to the desired property.
|
|
833
1874
|
* Each element in the array can be a string (for object properties),
|
|
834
1875
|
* a number (for array indices), or a symbol.
|
|
835
1876
|
*
|
|
836
|
-
* @returns {
|
|
1877
|
+
* @returns {DeepPropertyValue} The value of the deep property if it exists, otherwise undefined.
|
|
837
1878
|
*
|
|
838
1879
|
* @throws {Error} If the input item is null or undefined, or if the path is not a non-empty array.
|
|
839
1880
|
*
|
|
@@ -871,19 +1912,24 @@ declare class PropertyAccessError extends Error {
|
|
|
871
1912
|
* - Throws an error if the input item is null/undefined or if the path is invalid
|
|
872
1913
|
*
|
|
873
1914
|
* @see safeReturnDeepProperty for a version that never throws and returns an object with value and error properties
|
|
1915
|
+
*
|
|
1916
|
+
* @public
|
|
1917
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1918
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1919
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
874
1920
|
*/
|
|
875
|
-
declare const returnDeepProperty: (item:
|
|
1921
|
+
declare const returnDeepProperty: (item: unknown, path: PropertyPath) => DeepPropertyValue;
|
|
876
1922
|
/**
|
|
877
1923
|
* Safely retrieves a deeply nested property from an object using a path array.
|
|
878
1924
|
*
|
|
879
1925
|
* @function safeReturnDeepProperty
|
|
880
1926
|
*
|
|
881
|
-
* @param {
|
|
1927
|
+
* @param {unknown} item - The object to traverse.
|
|
882
1928
|
* @param {(string|number|symbol)[]} path - An array representing the path to the desired property.
|
|
883
1929
|
* Each element in the array can be a string (for object properties),
|
|
884
1930
|
* a number (for array indices), or a symbol.
|
|
885
1931
|
*
|
|
886
|
-
* @returns {{value:
|
|
1932
|
+
* @returns {{value: DeepPropertyValue, error: string|null}} An object containing:
|
|
887
1933
|
* - value: The value of the deep property if found, otherwise undefined.
|
|
888
1934
|
* - error: A string describing the error if one occurred, otherwise null.
|
|
889
1935
|
*
|
|
@@ -923,12 +1969,40 @@ declare const returnDeepProperty: (item: any, path: PropertyPath) => DeepPropert
|
|
|
923
1969
|
* - Implement error handling in a functional programming style
|
|
924
1970
|
*
|
|
925
1971
|
* @see returnDeepProperty for the core implementation that this function wraps
|
|
1972
|
+
*
|
|
1973
|
+
* @public
|
|
1974
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1975
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1976
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
926
1977
|
*/
|
|
927
|
-
declare const safeReturnDeepProperty: (item:
|
|
1978
|
+
declare const safeReturnDeepProperty: (item: unknown, path: PropertyPath) => {
|
|
928
1979
|
value: DeepPropertyValue;
|
|
929
1980
|
error: string | null;
|
|
930
1981
|
};
|
|
931
1982
|
|
|
1983
|
+
/**
|
|
1984
|
+
* @public
|
|
1985
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
1986
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
1987
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
1988
|
+
*/
|
|
1989
|
+
declare function assignDeepPropertyToObject(item: any, path: Array<string>, value: any): any;
|
|
1990
|
+
|
|
1991
|
+
/**
|
|
1992
|
+
* Creates a file upload data object from a Base64 string.
|
|
1993
|
+
*
|
|
1994
|
+
* @param fileName The desired name for the file (e.g., 'my-image.png').
|
|
1995
|
+
* @param contentType The MIME type of the file (e.g., 'image/png').
|
|
1996
|
+
* @param base64Content The raw Base64 encoded content of the file.
|
|
1997
|
+
* @returns A populated FileUploadInputValueInterface object.
|
|
1998
|
+
*
|
|
1999
|
+
* @public
|
|
2000
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2001
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2002
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2003
|
+
*/
|
|
2004
|
+
declare const createFileFromBase64: (fileName: string, contentType: string, base64Content: string) => FileUploadInputValueInterface;
|
|
2005
|
+
|
|
932
2006
|
/**
|
|
933
2007
|
* Creates a sample value for a given form input configuration.
|
|
934
2008
|
* It determines the value based on the input's element type, specific input type (e.g., email, number),
|
|
@@ -936,13 +2010,46 @@ declare const safeReturnDeepProperty: (item: any, path: PropertyPath) => {
|
|
|
936
2010
|
*
|
|
937
2011
|
* @param {FormColumnInputs} input - The configuration object for the form input.
|
|
938
2012
|
* @returns {any} A sample value appropriate for the input type.
|
|
2013
|
+
*
|
|
2014
|
+
* @public
|
|
2015
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2016
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2017
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
939
2018
|
*/
|
|
940
2019
|
declare function getSampleValueForInput(input: FormColumnInputs): any;
|
|
941
2020
|
|
|
2021
|
+
/**
|
|
2022
|
+
* @public
|
|
2023
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2024
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2025
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2026
|
+
*/
|
|
942
2027
|
declare function getPipedValueFromDataType(dataType: InputDataTypes | undefined | DocumentLitsLabelConfigInterfaceValueType, value: any, pipe: FormColumnInputs['pipe'] | undefined): any;
|
|
943
2028
|
|
|
2029
|
+
/**
|
|
2030
|
+
* @public
|
|
2031
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2032
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2033
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2034
|
+
*/
|
|
2035
|
+
declare const initFormConfigToV2: (formConfig: FormInterfaceMigration) => FormInterface;
|
|
2036
|
+
|
|
2037
|
+
/**
|
|
2038
|
+
* @public
|
|
2039
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2040
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2041
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2042
|
+
*/
|
|
944
2043
|
declare function getUrl(url: string, variables: NgxTFormsConfig): string;
|
|
945
2044
|
|
|
2045
|
+
/**
|
|
2046
|
+
* @public
|
|
2047
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2048
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2049
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2050
|
+
*/
|
|
2051
|
+
declare const sheetConsolodation: (allSheets: Record<string, Record<string, any>[]>) => Record<string, any>[];
|
|
2052
|
+
|
|
946
2053
|
/**
|
|
947
2054
|
* Validates an object against a validation expression.
|
|
948
2055
|
*
|
|
@@ -950,13 +2057,52 @@ declare function getUrl(url: string, variables: NgxTFormsConfig): string;
|
|
|
950
2057
|
* @param {object} object - The object to validate.
|
|
951
2058
|
* @returns {boolean} - A boolean indicating whether the object is valid according to the expression.
|
|
952
2059
|
*
|
|
953
|
-
*
|
|
954
|
-
*
|
|
955
|
-
*
|
|
956
|
-
*
|
|
957
|
-
*
|
|
2060
|
+
* Backed by the shared predicate evaluator ({@link evaluatePredicate}), a
|
|
2061
|
+
* paren-aware, backward-compatible superset of the original space-split DSL. It
|
|
2062
|
+
* supports `===`/`==`/`!==`/`!=`/`>`/`<`/`>=`/`<=`, `&&`/`||` with correct
|
|
2063
|
+
* precedence and grouping, unary `!`, deep-path operands, multi-word quoted
|
|
2064
|
+
* strings, the keyword operators `includes`/`in`/`startsWith`/`endsWith`/`matches`,
|
|
2065
|
+
* and bare-operand truthiness.
|
|
2066
|
+
*/
|
|
2067
|
+
/**
|
|
2068
|
+
* Public callers pass either a plain object (e.g. `{ age: 1 }`) or an array
|
|
2069
|
+
* value (`item as T[]` from {@link evaluateArrayAccessRules}). Both are valid
|
|
2070
|
+
* index containers for the DSL (arrays support `length`, numeric indices, and
|
|
2071
|
+
* the `in` operator on string keys), so accept `object` and narrow internally.
|
|
2072
|
+
*/
|
|
2073
|
+
type ValidationTarget = object;
|
|
2074
|
+
/**
|
|
2075
|
+
* Validates an object against a predicate expression. Delegates to the shared,
|
|
2076
|
+
* paren-aware predicate evaluator (a backward-compatible superset of the
|
|
2077
|
+
* original space-split DSL). Throws on a structurally invalid expression.
|
|
2078
|
+
*/
|
|
2079
|
+
declare const validateObjectAgainstString: (expression: string, object: ValidationTarget) => boolean;
|
|
2080
|
+
/**
|
|
2081
|
+
* @public
|
|
2082
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2083
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2084
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
958
2085
|
*/
|
|
959
|
-
declare const validateObjectAgainstString: (expression: string, object: any) => boolean;
|
|
960
2086
|
declare function validateExpressionSyntax(expression: string): string | null;
|
|
961
2087
|
|
|
962
|
-
|
|
2088
|
+
/**
|
|
2089
|
+
* @public
|
|
2090
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2091
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2092
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2093
|
+
*/
|
|
2094
|
+
declare function testAgainstItem(test: ConfigurationValidTestInterface, item: unknown): boolean;
|
|
2095
|
+
|
|
2096
|
+
/**
|
|
2097
|
+
* @public
|
|
2098
|
+
* @deprecated Internal helper re-exported via the `_deprecated/` compatibility
|
|
2099
|
+
* barrel; remains functional. A renamed/improved replacement may be introduced
|
|
2100
|
+
* in a future minor; the original symbol stays callable. See DECISIONS.md D-014.
|
|
2101
|
+
*
|
|
2102
|
+
* **Breaking (v2.x):** now requires `secret` as a third argument — the
|
|
2103
|
+
* hardcoded library secret was removed (LIB-05). Read it from
|
|
2104
|
+
* `INPUT_SECRET_TOKEN` in your component / service before calling.
|
|
2105
|
+
*/
|
|
2106
|
+
declare const getSignatureImage: (inputConfig: FormColumnInputs, value: EncryptedData | undefined, secret: string) => Promise<string | undefined>;
|
|
2107
|
+
|
|
2108
|
+
export { DialogTemplateComponent, FORM_ACTIONS_TOKEN, FORM_CONFIG_TOKEN, FORM_INPUTS_TOKEN, FORM_ROUTE_SOURCE, FORM_SLIDES_TOKEN, FormBuilderComponent, FormTowerControllerService, FormatDataPipe, FormsComponent, HttpPipelineRepository, IMPORT_TOWER_INSTANCE_ID, INPUT_SECRET_TOKEN, MSCOA_TREE_PROVIDER, MULTIPLE_FORM_INPUT_TOKEN, MscoaFormInputComponent, NGX_T_FORMS_CONFIG_TOKEN, NgxTFormsComponent, NgxTFormsService, PIPELINE_REPOSITORY, PipelineRepository, PropertyAccessError, SignatureInputElementComponent, TDynamicDataEditComponent, TDynamicDataViewComponent, TFormImportController, TFormInputComponent, UTILS_OBJECT_TOKEN, UserFormStepperComponent, ValidationExpressioCreatorComponent, assignDeepPropertyToObject, createFileFromBase64, formGenerator, getPipedValueFromDataType, getSampleValueForInput, getSectionElements, getSignatureImage, getUrl, getValueFromValueAccessor, initFormConfigToV2, provideNgxTForms, returnDeepProperty, returnMappedPathValue, safeReturnDeepProperty, sheetConsolodation, testAgainstItem, textIconsForUserHints, validateExpressionSyntax, validateObjectAgainstString, withHttpPipeline, withInputSecret, withRouterFormId };
|