ngx-t-forms 2.0.30 → 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-SM5XM9uy.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 +1747 -746
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs +0 -313
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs +0 -191
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs +0 -207
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-data-source-picker.component-Badna1Rl.mjs +0 -204
- package/fesm2022/ngx-t-forms-data-source-picker.component-Badna1Rl.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs +0 -289
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs +0 -134
- package/fesm2022/ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-json-view.component-B8seYzMQ.mjs +0 -22
- package/fesm2022/ngx-t-forms-form-json-view.component-B8seYzMQ.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs +0 -281
- package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs +0 -345
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-B_kkOoEO.mjs +0 -147
- package/fesm2022/ngx-t-forms-input-editor.component-B_kkOoEO.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-map-mat-options-keys-SM5XM9uy.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs +0 -105
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs +0 -109
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs +0 -155
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs +0 -28
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs +0 -43
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs +0 -116
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs +0 -296
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs +0 -83
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-DP2koSL5.mjs +0 -17401
- package/fesm2022/ngx-t-forms-ngx-t-forms-DP2koSL5.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs +0 -613
- package/fesm2022/ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs +0 -269
- package/fesm2022/ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-required-inputs.component-CLyq9dIR.mjs +0 -190
- package/fesm2022/ngx-t-forms-required-inputs.component-CLyq9dIR.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs +0 -291
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-section-report.component-BtaF39WD.mjs +0 -156
- package/fesm2022/ngx-t-forms-section-report.component-BtaF39WD.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs +0 -186
- package/fesm2022/ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs +0 -187
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-Cq07Er-G.mjs +0 -215
- package/fesm2022/ngx-t-forms-validators-config.component-Cq07Er-G.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>;
|
|
237
|
+
|
|
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>;
|
|
34
253
|
|
|
35
|
-
|
|
254
|
+
/**
|
|
255
|
+
* Optional source of the form id to load into {@link FormBuilderComponent}.
|
|
256
|
+
*
|
|
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
|
|
263
|
+
*/
|
|
264
|
+
declare const FORM_ROUTE_SOURCE: InjectionToken<Observable<string | undefined>>;
|
|
36
265
|
|
|
37
266
|
/**
|
|
38
|
-
*
|
|
39
|
-
* Parent form listens to all descendant changes, with validation cascading upward.
|
|
267
|
+
* @public
|
|
40
268
|
*
|
|
41
|
-
*
|
|
42
|
-
* @
|
|
43
|
-
*
|
|
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.
|
|
44
276
|
*/
|
|
45
|
-
declare
|
|
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>;
|
|
286
|
+
}
|
|
46
287
|
|
|
47
|
-
|
|
48
|
-
|
|
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>;
|
|
49
346
|
}
|
|
50
347
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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>;
|
|
61
405
|
}
|
|
62
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,82 +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
|
-
|
|
98
|
-
private _busyState$;
|
|
99
|
-
private _syncBusyState;
|
|
100
|
-
protected _formValue: Record<string, any>;
|
|
540
|
+
/** The values record last passed to {@link FormTowerControllerService.initializeFormValues}. */
|
|
101
541
|
protected _initialFormValue: Record<string, any>;
|
|
102
|
-
|
|
103
|
-
protected _inputFunctionsCollection: Record<string, Partial<Record<FunctionTypes, Observable<void>>>>;
|
|
104
|
-
protected _inputChangeDependencyRecords: Partial<Record<string, Partial<Record<FunctionTypes, Record<string, boolean>>>>>;
|
|
105
|
-
protected _reverseDependencyMap: Record<string, DependentInput[]>;
|
|
106
|
-
protected _changeHistory: IFormChangeHistory[];
|
|
542
|
+
/** Last reported submission state — drives the toolbar/spinner UI. */
|
|
107
543
|
submittingStatus: FormSubmissionStatus | undefined;
|
|
108
|
-
|
|
544
|
+
/** True while a form submission is in flight. Counts toward {@link FormTowerControllerService.isBusy}. */
|
|
109
545
|
get submittingForm(): boolean;
|
|
110
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}). */
|
|
111
624
|
get form(): FormInterface | undefined;
|
|
112
625
|
set form(value: FormInterface | undefined);
|
|
113
|
-
|
|
626
|
+
/** System inputs loaded by `loadSystemInputs`, prepended to {@link FormTowerControllerService.allFormInputs}. */
|
|
114
627
|
get systemInputs(): FormColumnInputs[];
|
|
628
|
+
set systemInputs(value: FormColumnInputs[]);
|
|
629
|
+
/** Live root `FormGroup` — `undefined` before {@link FormTowerControllerService.initialize}. */
|
|
115
630
|
get mainForm(): FormGroup | undefined;
|
|
631
|
+
/** Append-only change history; used by {@link FormTowerControllerService.revertBackHistory}. */
|
|
116
632
|
get changeHistory(): IFormChangeHistory[];
|
|
117
633
|
set changeHistory(value: IFormChangeHistory[]);
|
|
118
|
-
|
|
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. */
|
|
119
644
|
get isBusy(): boolean;
|
|
120
645
|
/**
|
|
121
|
-
* Reactive stream of the tower's busy state.
|
|
122
|
-
*
|
|
123
|
-
*
|
|
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)`.
|
|
124
649
|
*/
|
|
125
650
|
get isBusy$(): Observable<boolean>;
|
|
126
651
|
/**
|
|
127
|
-
* Resolves once the tower has finished all in-flight
|
|
128
|
-
* API fetches,
|
|
652
|
+
* Resolves once the tower has finished all in-flight async work (calculations,
|
|
653
|
+
* API fetches, sourced values). Used by headless consumers (import).
|
|
129
654
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
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`).
|
|
137
662
|
*
|
|
138
|
-
* @param debounceMs
|
|
139
|
-
*
|
|
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`).
|
|
140
667
|
*/
|
|
141
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
|
+
*/
|
|
142
675
|
ngOnDestroy(): void;
|
|
143
|
-
|
|
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
|
+
*/
|
|
144
706
|
setFirstStepAsActive: () => void;
|
|
707
|
+
/**
|
|
708
|
+
* Returns the form's settled values keyed by **formControlName** (the
|
|
709
|
+
* canonical external shape). Reads {@link FormTowerControllerService.value}.
|
|
710
|
+
*/
|
|
145
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
|
+
*/
|
|
146
718
|
readonly allFormInputs: () => FormColumnInputs[];
|
|
719
|
+
/** @deprecated unused field, kept for backwards compatibility. */
|
|
147
720
|
prevValue: any;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
+
*/
|
|
152
726
|
setInputStatus: (inputId: string, statusId: string, status: string) => void;
|
|
727
|
+
/** Companion to {@link FormTowerControllerService.setInputStatus} — clears the DOM badge. */
|
|
153
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
|
+
*/
|
|
154
743
|
updateValue: (inputId: string, value: any) => void;
|
|
155
|
-
|
|
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
|
+
*/
|
|
156
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
|
+
*/
|
|
157
776
|
clearFormState: () => void;
|
|
158
|
-
executeInputFunctionsWithoutDependencies: () => void;
|
|
159
777
|
_hintTimeoutIds: Record<string, any>;
|
|
160
778
|
setTemporaryHint: (inputId: string, hint: string, type: HintType) => void;
|
|
161
779
|
_onFormInputConfigChange?: (inputId: string, config: FormColumnInputs) => void;
|
|
@@ -168,105 +786,486 @@ declare abstract class FormTowerControllerService implements OnDestroy {
|
|
|
168
786
|
updateFormInputConfig: (inputId: string, config: FormColumnInputs) => void;
|
|
169
787
|
handleStepChange: (event: StepperSelectionEvent) => void;
|
|
170
788
|
selectFormSteps: () => ngx_t_forms_types.ITowerFormSteps[];
|
|
171
|
-
selectAllFormTours: () => IFormTour[];
|
|
789
|
+
selectAllFormTours: () => ngx_t_forms_types.IFormTour[];
|
|
172
790
|
setSectionAsSeen: (sectionId: string) => void;
|
|
173
791
|
setSectionAsActive: (sectionId: string) => void;
|
|
174
792
|
setInputAsTouchedAndDirty: (inputId: string) => void;
|
|
175
793
|
formProgress: () => number;
|
|
176
794
|
formSubmissionMessage: () => string;
|
|
177
795
|
setSubmissionStatusValue: (status: FormSubmissionStatus) => FormSubmissionStatus;
|
|
178
|
-
initializeFormValues: (initialValues: Record<string, any>) => void;
|
|
179
|
-
reset(): void;
|
|
180
|
-
revertBackHistory: () => void;
|
|
181
796
|
/**
|
|
182
|
-
*
|
|
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).
|
|
183
807
|
*/
|
|
184
|
-
|
|
808
|
+
get inputFunctionsCollection(): Record<string, Partial<Record<FunctionTypes, Observable<void>>>>;
|
|
185
809
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
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.
|
|
188
814
|
*
|
|
189
|
-
* @param
|
|
190
|
-
* @returns boolean indicating success or failure
|
|
815
|
+
* @param passData - Extra context handed through to the submission pipeline.
|
|
191
816
|
*/
|
|
817
|
+
submitForm: (passData: Record<string, any>) => void;
|
|
818
|
+
/** Toggle a MultipleInput element + its associated form controls. */
|
|
192
819
|
toggleMultipleInput: (inputId: string, open: boolean, rowInEditId?: string) => boolean;
|
|
820
|
+
/** Persist the open MultipleInput sub-form back into the parent control's array value. */
|
|
193
821
|
saveMultipleInputForm: (inputId: string) => boolean;
|
|
822
|
+
/** Open the MultipleInput sub-form prepopulated with `rowId`'s values. */
|
|
194
823
|
multipleInputEditRow: (inputId: string, rowId: string) => boolean;
|
|
824
|
+
/** Duplicate `rowId` and open the sub-form on the new row. */
|
|
195
825
|
multipleInputDuplicateRow: (inputId: string, rowId: string) => boolean;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
+
*/
|
|
864
|
+
refreshActiveSection: () => void;
|
|
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. */
|
|
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
|
+
*/
|
|
879
|
+
canRefreshSection: (sectionId: string) => boolean;
|
|
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>;
|
|
899
|
+
}
|
|
900
|
+
|
|
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>;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
declare class TourManagerService {
|
|
935
|
+
private readonly tourService;
|
|
936
|
+
userProfile: this;
|
|
937
|
+
constructor();
|
|
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>;
|
|
946
|
+
};
|
|
947
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TourManagerService, never>;
|
|
948
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TourManagerService>;
|
|
949
|
+
}
|
|
950
|
+
|
|
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>;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
interface IConfigElementError {
|
|
1061
|
+
key: string;
|
|
1062
|
+
message: string;
|
|
1063
|
+
}
|
|
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;
|
|
1122
|
+
valueChanged(value: unknown): void;
|
|
1123
|
+
manualValueChange(event: {
|
|
1124
|
+
value: unknown;
|
|
1125
|
+
deepBind: Array<string>;
|
|
1126
|
+
}): void;
|
|
1127
|
+
blurOff: boolean;
|
|
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<{
|
|
1134
|
+
editorConfigValue: ElementEditorInnerSectionElementInterface | undefined;
|
|
1135
|
+
isFormFieldControl: boolean;
|
|
1136
|
+
value: {} | null;
|
|
1137
|
+
dataOptions: any;
|
|
1138
|
+
disabled: boolean | undefined;
|
|
1139
|
+
inputHasBlurFunction: BlurHandleTypes | undefined;
|
|
1140
|
+
dataValue: Record<string, unknown> | undefined;
|
|
1141
|
+
inputConfig: Partial<ITowerStepColumn>;
|
|
235
1142
|
}>;
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
format?: (value: any) => number;
|
|
240
|
-
multipleSelection?: boolean;
|
|
241
|
-
})[];
|
|
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>;
|
|
1145
|
+
}
|
|
242
1146
|
|
|
243
|
-
declare
|
|
244
|
-
|
|
1147
|
+
declare class TreeComponent {
|
|
1148
|
+
activePath: TreeNode[];
|
|
1149
|
+
pathInEdit: TreeNode | null;
|
|
1150
|
+
get activeLevel(): number;
|
|
1151
|
+
private _transformer;
|
|
1152
|
+
setupPath(node: TreeNode): void;
|
|
1153
|
+
updateStateFromPath(path: TreeNode[]): void;
|
|
1154
|
+
selectNode(node: FlatNode): TreeNode[] | undefined;
|
|
1155
|
+
saveNodeInEdit(): {
|
|
1156
|
+
children: undefined;
|
|
1157
|
+
value: undefined;
|
|
1158
|
+
key: string;
|
|
1159
|
+
name: string;
|
|
1160
|
+
inEdit?: boolean;
|
|
1161
|
+
path: string[];
|
|
1162
|
+
keyIsArrayIndex?: boolean;
|
|
1163
|
+
functions: IArrayFunction[];
|
|
1164
|
+
}[] | undefined;
|
|
1165
|
+
resetNode(): void;
|
|
1166
|
+
removeFunction(id: string): void;
|
|
1167
|
+
closeEdit(): void;
|
|
1168
|
+
nodeIsExpandable(node: TreeNode): boolean;
|
|
1169
|
+
showNode(node: FlatNode): boolean;
|
|
1170
|
+
hasANodeInEdit(): boolean;
|
|
1171
|
+
nodeIsChecked(node: FlatNode): boolean;
|
|
1172
|
+
treeControl: FlatTreeControl<FlatNode, FlatNode>;
|
|
1173
|
+
treeFlattener: MatTreeFlattener<TreeNode, FlatNode, FlatNode>;
|
|
1174
|
+
dataSource: MatTreeFlatDataSource<TreeNode, FlatNode, FlatNode>;
|
|
1175
|
+
private dynamicObject;
|
|
1176
|
+
constructor();
|
|
1177
|
+
computeTreeData(dynamicObject: unknown): void;
|
|
1178
|
+
assignDataSourceData(tree: TreeNode[]): void;
|
|
1179
|
+
hasChild: (_: number, node: FlatNode) => boolean;
|
|
1180
|
+
getValue(): unknown;
|
|
1181
|
+
addNewFunction(): void;
|
|
1182
|
+
functionChanged(value: string): void;
|
|
1183
|
+
}
|
|
245
1184
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
+
*/
|
|
1190
|
+
declare class TDynamicDataViewComponent {
|
|
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;
|
|
1194
|
+
constructor();
|
|
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>;
|
|
259
1201
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
1202
|
+
|
|
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>;
|
|
269
1222
|
}
|
|
1223
|
+
|
|
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>;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
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>;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
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
|
+
*/
|
|
270
1269
|
declare class TFormImportController {
|
|
271
1270
|
private readonly _injector;
|
|
272
1271
|
private readonly _rows$;
|
|
@@ -279,6 +1278,15 @@ declare class TFormImportController {
|
|
|
279
1278
|
*/
|
|
280
1279
|
private _getCache;
|
|
281
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;
|
|
282
1290
|
/**
|
|
283
1291
|
* Shared financial-cycles observable for the current import session.
|
|
284
1292
|
* loadSystemInputs calls getFinacialCycles() directly via NGX_T_FORMS_CONFIG
|
|
@@ -312,7 +1320,7 @@ declare class TFormImportController {
|
|
|
312
1320
|
* @param form The form definition every row is validated against.
|
|
313
1321
|
* @param rows Raw data objects — one per import row.
|
|
314
1322
|
*/
|
|
315
|
-
runImport(form: FormInterface, rows: Record<string,
|
|
1323
|
+
runImport(form: FormInterface, rows: Record<string, unknown>[]): Promise<ImportRowState[]>;
|
|
316
1324
|
/** Clears all row state. */
|
|
317
1325
|
reset(): void;
|
|
318
1326
|
/**
|
|
@@ -334,611 +1342,494 @@ declare class TFormImportController {
|
|
|
334
1342
|
* asks for the same URL+options receives the same response without an
|
|
335
1343
|
* additional HTTP call.
|
|
336
1344
|
*/
|
|
337
|
-
private _cachedGet;
|
|
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>;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
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;
|
|
1568
|
+
}
|
|
1569
|
+
|
|
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;
|
|
1611
|
+
/**
|
|
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()`.
|
|
1617
|
+
*/
|
|
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>;
|
|
1625
|
+
/**
|
|
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.
|
|
1632
|
+
*/
|
|
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>;
|
|
338
1641
|
/**
|
|
339
|
-
*
|
|
340
|
-
*
|
|
341
|
-
*
|
|
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.
|
|
342
1645
|
*/
|
|
343
|
-
|
|
344
|
-
private _processRow;
|
|
1646
|
+
protected readonly elementEntry: _angular_core.Signal<ElementEntry | undefined>;
|
|
345
1647
|
/**
|
|
346
|
-
*
|
|
347
|
-
*
|
|
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.
|
|
348
1652
|
*/
|
|
349
|
-
|
|
1653
|
+
protected readonly elementComponent: _angular_core.Signal<Promise<Type<unknown>> | null>;
|
|
350
1654
|
/**
|
|
351
|
-
*
|
|
352
|
-
*
|
|
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.
|
|
353
1659
|
*/
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
static
|
|
358
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<TFormImportController>;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
declare const FORM_ACTIONS_TOKEN: InjectionToken<IFormActions>;
|
|
362
|
-
declare const FORM_CONFIG_TOKEN: InjectionToken<FormInterface>;
|
|
363
|
-
declare const FORM_SLIDES_TOKEN: InjectionToken<FormSlideInterface>;
|
|
364
|
-
declare const UTILS_OBJECT_TOKEN: InjectionToken<InClassFormUtilsInterface>;
|
|
365
|
-
declare const FORM_INPUTS_TOKEN: InjectionToken<IWorkflowDocumentPicker & IBasicFormInput & IFileUploadInput & IDateRangePickerInput & ITextareaProperties & IToggleInput & IMatrixInput & IMultiple>;
|
|
366
|
-
declare const MULTIPLE_FORM_INPUT_TOKEN: InjectionToken<IMultiple>;
|
|
367
|
-
declare const MSCOA_TREE_PROVIDER: InjectionToken<() => Observable<IGetTreeResponse>>;
|
|
368
|
-
declare const NGX_T_FORMS_CONFIG_TOKEN: InjectionToken<NgxTFormsConfig>;
|
|
369
|
-
|
|
370
|
-
declare class DialogTemplateComponent {
|
|
371
|
-
readonly dialogRef: MatDialogRef<any, any>;
|
|
372
|
-
readonly data: DialogConfig;
|
|
373
|
-
proceed(): void;
|
|
374
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DialogTemplateComponent, never>;
|
|
375
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DialogTemplateComponent, "lib-dialog-template", never, {}, {}, never, never, true, never>;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
declare class FormBuilderComponent implements OnDestroy, OnInit {
|
|
379
|
-
subscription$: Subscription;
|
|
380
|
-
private store;
|
|
381
|
-
private route;
|
|
382
|
-
selectLoadingForm: i0.Signal<boolean>;
|
|
383
|
-
selectFormBuilderIsBusy: i0.Signal<boolean>;
|
|
384
|
-
selectFormUpdated: i0.Signal<string | Date | null>;
|
|
385
|
-
canSaveForm: i0.Signal<boolean>;
|
|
386
|
-
isNewForm: i0.Signal<boolean>;
|
|
387
|
-
set formId(value: string);
|
|
388
|
-
selectHasFormId: i0.Signal<boolean>;
|
|
389
|
-
hasMissingConfigs: i0.Signal<boolean>;
|
|
390
|
-
elementEditorOpen: i0.Signal<boolean | null>;
|
|
391
|
-
constructor();
|
|
392
|
-
readonly NGX_T_FORMS_CONFIG: ngx_t_forms_types.NgxTFormsConfig;
|
|
393
|
-
readonly closeButton: ngx_t_forms_types.ActionButton;
|
|
394
|
-
ngOnInit(): void;
|
|
395
|
-
ngOnDestroy(): void;
|
|
396
|
-
saveForm: () => void;
|
|
397
|
-
_title: string;
|
|
398
|
-
set titleValue(value: string);
|
|
399
|
-
initiatedTitle: boolean;
|
|
400
|
-
get titleValue(): string | undefined;
|
|
401
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FormBuilderComponent, never>;
|
|
402
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormBuilderComponent, "app-form-builder", never, { "formId": { "alias": "formId"; "required": false; }; }, {}, never, never, true, never>;
|
|
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>;
|
|
403
1664
|
}
|
|
404
1665
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
hint?: string;
|
|
439
|
-
deepBind: Array<string>;
|
|
440
|
-
defaultValue?: any;
|
|
441
|
-
limitTo?: number;
|
|
442
|
-
additionalTest?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
443
|
-
disabled?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
444
|
-
fetchOptions?: string[];
|
|
445
|
-
secondaryElementEditorConfig?: Array<ngx_t_forms_types.ElementEditorConfigSectionInterface>;
|
|
446
|
-
clearOnChange?: string[][];
|
|
447
|
-
blurHandle?: ngx_t_forms_types.BlurHandleTypes;
|
|
448
|
-
label: string;
|
|
449
|
-
required?: boolean;
|
|
450
|
-
readonly?: boolean;
|
|
451
|
-
templateOptions?: Array<any>;
|
|
452
|
-
placeholder?: string;
|
|
453
|
-
options?: Array<{
|
|
454
|
-
label: string;
|
|
455
|
-
value: any;
|
|
456
|
-
}>;
|
|
457
|
-
computedErrors?: ngx_t_forms_types.ValidationError[];
|
|
458
|
-
min?: number;
|
|
459
|
-
max?: number;
|
|
460
|
-
step?: number;
|
|
461
|
-
format?: (value: any) => number;
|
|
462
|
-
postmanCollectionConfig?: ngx_t_forms_types.IPostmanCollectionConfig;
|
|
463
|
-
httpGetDataFunction?: (url: string, options: any) => Observable<any>;
|
|
464
|
-
getWorkflowOptions?: Observable<ngx_t_forms_types.IWorkflowOption[]> | undefined;
|
|
465
|
-
getMscoaTree?: Observable<ngx_t_forms_types.IGetTreeResponse> | undefined;
|
|
466
|
-
multipleSelection?: boolean;
|
|
467
|
-
}[];
|
|
468
|
-
hasErrors: boolean;
|
|
469
|
-
label: string;
|
|
470
|
-
showItemValue?: keyof ngx_t_forms_types.FormColumnInputs;
|
|
471
|
-
id: string;
|
|
472
|
-
additionalTest?: ngx_t_forms_types.ConfigurationValidTestInterface[];
|
|
473
|
-
}[];
|
|
474
|
-
title?: string;
|
|
475
|
-
description?: string;
|
|
476
|
-
}>;
|
|
477
|
-
selectFormSlideSections$: Observable<{
|
|
478
|
-
inputConfigErrors: {
|
|
479
|
-
key: string;
|
|
480
|
-
message: string;
|
|
481
|
-
}[];
|
|
482
|
-
sectionId: string;
|
|
483
|
-
label: string;
|
|
484
|
-
columns: Array<ngx_t_forms_types.FormColumnInputs>;
|
|
485
|
-
inEdit?: boolean;
|
|
486
|
-
sectionIsSeen?: boolean;
|
|
487
|
-
isActive?: boolean;
|
|
488
|
-
}[]>;
|
|
489
|
-
};
|
|
490
|
-
readonly actions: {
|
|
491
|
-
loadFormListSuccess: (observableOrValue: {
|
|
492
|
-
forms: ngx_t_forms_types.DatabaseFormInterface[];
|
|
493
|
-
} | Observable<{
|
|
494
|
-
forms: ngx_t_forms_types.DatabaseFormInterface[];
|
|
495
|
-
}>) => rxjs.Subscription;
|
|
496
|
-
toggleFormBuilderBusy: () => void;
|
|
497
|
-
toggleLoadingForm: () => void;
|
|
498
|
-
toggleLoadingForms: (observableOrValue: {
|
|
499
|
-
loadingForms: boolean;
|
|
500
|
-
} | Observable<{
|
|
501
|
-
loadingForms: boolean;
|
|
502
|
-
}>) => rxjs.Subscription;
|
|
503
|
-
loadFormSuccess: (observableOrValue: {
|
|
504
|
-
form: ngx_t_forms_types.DatabaseFormInterface;
|
|
505
|
-
} | Observable<{
|
|
506
|
-
form: ngx_t_forms_types.DatabaseFormInterface;
|
|
507
|
-
}>) => rxjs.Subscription;
|
|
508
|
-
toggleFormBusy: (observableOrValue: {
|
|
509
|
-
formId: string;
|
|
510
|
-
} | Observable<{
|
|
511
|
-
formId: string;
|
|
512
|
-
}>) => rxjs.Subscription;
|
|
513
|
-
archivedSuccess: (observableOrValue: {
|
|
514
|
-
formId: string;
|
|
515
|
-
} | Observable<{
|
|
516
|
-
formId: string;
|
|
517
|
-
}>) => rxjs.Subscription;
|
|
518
|
-
setFormId: (observableOrValue: {
|
|
519
|
-
formId: string;
|
|
520
|
-
} | Observable<{
|
|
521
|
-
formId: string;
|
|
522
|
-
}>) => rxjs.Subscription;
|
|
523
|
-
setError: (observableOrValue: {
|
|
524
|
-
error: string | undefined;
|
|
525
|
-
type: ngx_t_forms_types.FormStateErrors;
|
|
526
|
-
} | Observable<{
|
|
527
|
-
error: string | undefined;
|
|
528
|
-
type: ngx_t_forms_types.FormStateErrors;
|
|
529
|
-
}>) => rxjs.Subscription;
|
|
530
|
-
handleListSectionChange: (observableOrValue: {
|
|
531
|
-
listSection: FormListSection;
|
|
532
|
-
} | Observable<{
|
|
533
|
-
listSection: FormListSection;
|
|
534
|
-
}>) => rxjs.Subscription;
|
|
535
|
-
handleRouterStateChange: (observableOrValue: {
|
|
536
|
-
routerState: _angular_router.ActivatedRouteSnapshot | null;
|
|
537
|
-
} | Observable<{
|
|
538
|
-
routerState: _angular_router.ActivatedRouteSnapshot | null;
|
|
539
|
-
}>) => rxjs.Subscription;
|
|
540
|
-
handleSetSubmittingForm: (observableOrValue: {
|
|
541
|
-
submittingForm: boolean;
|
|
542
|
-
} | Observable<{
|
|
543
|
-
submittingForm: boolean;
|
|
544
|
-
}>) => rxjs.Subscription;
|
|
545
|
-
setFormInitialValues: (observableOrValue: {
|
|
546
|
-
initialFormValues: Record<string, any>;
|
|
547
|
-
} | Observable<{
|
|
548
|
-
initialFormValues: Record<string, any>;
|
|
549
|
-
}>) => rxjs.Subscription;
|
|
550
|
-
handleEditorUpdateFormInEdit: (observableOrValue: {
|
|
551
|
-
form: FormInterface;
|
|
552
|
-
} | Observable<{
|
|
553
|
-
form: FormInterface;
|
|
554
|
-
}>) => rxjs.Subscription;
|
|
555
|
-
updateFormInputConfigFromTower: (observableOrValue: {
|
|
556
|
-
inputId: string;
|
|
557
|
-
config: ngx_t_forms_types.FormColumnInputs;
|
|
558
|
-
} | Observable<{
|
|
559
|
-
inputId: string;
|
|
560
|
-
config: ngx_t_forms_types.FormColumnInputs;
|
|
561
|
-
}>) => rxjs.Subscription;
|
|
562
|
-
setInputInEditId: (observableOrValue: {
|
|
563
|
-
inputInEdit: string | null;
|
|
564
|
-
} | Observable<{
|
|
565
|
-
inputInEdit: string | null;
|
|
566
|
-
}>) => rxjs.Subscription;
|
|
567
|
-
};
|
|
568
|
-
readonly actionsFormBuilder: {
|
|
569
|
-
handelSaveForm: () => void;
|
|
570
|
-
setFormTitle: (title: string) => void;
|
|
571
|
-
handleSectionDragDrop: (event: _angular_cdk_drag_drop.CdkDragDrop<any, any, any>) => void;
|
|
572
|
-
handleInputDragDrop: (event: _angular_cdk_drag_drop.CdkDragDrop<any, any, any>, sectionId: string) => void;
|
|
573
|
-
handleAddSection: () => void;
|
|
574
|
-
stepTitleChangeStep: (sectionId: string, title: string) => void;
|
|
575
|
-
formDeleteInput: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
576
|
-
multipleInputToggleLabel: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
577
|
-
editInput: (item: ngx_t_forms_types.FormColumnInputs) => void;
|
|
578
|
-
addMultipleInputValueCalculationFunction: (item: ngx_t_forms_types.IMultipleInputCal, multipleInputId: string | undefined) => void;
|
|
579
|
-
formDeleteSection: (sectionId: string) => void;
|
|
580
|
-
formDeleteSectionInputs: (sectionId: string) => void;
|
|
581
|
-
moveInputToSection: (inputId: string, targetSectionId: string) => void;
|
|
582
|
-
reorderMultipleInputItems: (event: _angular_cdk_drag_drop.CdkDragDrop<ngx_t_forms_types.FormColumnInputs[], any, any>, multipleInputId: string) => void;
|
|
583
|
-
cloneCopyFormInput: (inputId: string) => void;
|
|
584
|
-
saveInput: (sectionId: string) => void;
|
|
585
|
-
applyFormTemplate: (form: FormInterface) => void;
|
|
586
|
-
selectInputTemplate: (inputId: string, element: ngx_t_forms_types.ElementTypes) => void;
|
|
587
|
-
formInputChange: (ele: ngx_t_forms_types.ElementEditorInnerSectionElementInterface, value: any) => void;
|
|
588
|
-
saveSubmitApi: (dataPlaceholder: undefined | {
|
|
589
|
-
data: ngx_t_forms_types.APIDataFetchingConfigurationInterface;
|
|
590
|
-
}, keyInEdit: "submissionAPI" | "canSubmitAPI" | undefined) => void;
|
|
591
|
-
removeSubmissionApi: (api: ngx_t_forms_types.APIDataFetchingConfigurationInterface, keyInEdit: "submissionAPI" | "canSubmitAPI" | undefined) => void;
|
|
592
|
-
elementConfigurationChanged: (inputId: string, value: any, ele: ngx_t_forms_types.ElementEditorInnerSectionElementInterface) => void;
|
|
593
|
-
elementBlur: (inputId: string, event: any, element: ngx_t_forms_types.ElementEditorInnerSectionElementInterface) => void;
|
|
594
|
-
addMultipleFormInput: (sectionId: string, multipleInputInEditId: string) => void;
|
|
595
|
-
clearInputInEdit: (inputId: string) => void;
|
|
596
|
-
addInputToScoaSelection: (sectionId: string, scoaInputId: string) => void;
|
|
597
|
-
};
|
|
598
|
-
readonly effects: {
|
|
599
|
-
createForm$: (observableOrValue: FormInterface | Observable<FormInterface>) => rxjs.Subscription;
|
|
600
|
-
loadForms$: (observableOrValue?: void | Observable<void> | undefined) => rxjs.Subscription;
|
|
601
|
-
loadForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
602
|
-
updateForm$: (observableOrValue: {
|
|
603
|
-
form: FormInterface;
|
|
604
|
-
versionNumber: number;
|
|
605
|
-
} | Observable<{
|
|
606
|
-
form: FormInterface;
|
|
607
|
-
versionNumber: number;
|
|
608
|
-
}>) => rxjs.Subscription;
|
|
609
|
-
archiveForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
610
|
-
setListSection$: (observableOrValue: FormListSection | Observable<FormListSection>) => rxjs.Subscription;
|
|
611
|
-
unArchiveForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
612
|
-
deleteForm$: (observableOrValue: string | Observable<string>) => rxjs.Subscription;
|
|
613
|
-
};
|
|
614
|
-
refreshExternalFormStates?: (form: FormInterface) => void;
|
|
615
|
-
registerFormChangeFn(fn: (form: FormInterface) => void): void;
|
|
616
|
-
createFormPlaceHolderFormGroups(form: FormInterface): void;
|
|
617
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FormsStoreService, never>;
|
|
618
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<FormsStoreService>;
|
|
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>;
|
|
619
1699
|
}
|
|
620
1700
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
}
|
|
643
|
-
viewportWidth: number;
|
|
644
|
-
ngOnInit(): void;
|
|
645
|
-
labels: {
|
|
646
|
-
label: string;
|
|
647
|
-
formControlName: string;
|
|
648
|
-
}[];
|
|
649
|
-
activeForm: string | null;
|
|
650
|
-
getCols(): 1 | 2 | 3 | 4;
|
|
651
|
-
getFormAvatar(formTitle: string): string;
|
|
652
|
-
archive(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
653
|
-
unarchive(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
654
|
-
delete(form: LocalFormStateSelectorInterface, event: Event): Promise<void>;
|
|
655
|
-
loadForms(): void;
|
|
656
|
-
router: Router;
|
|
657
|
-
activatedRoute: ActivatedRoute;
|
|
658
|
-
setSection(value: FormListSection): void;
|
|
659
|
-
editForm(form: LocalFormStateSelectorInterface): void;
|
|
660
|
-
addNewForm(): void;
|
|
661
|
-
clearSearch(): void;
|
|
662
|
-
get searchQuery(): string;
|
|
663
|
-
set searchQuery(v: string);
|
|
664
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FormsComponent, never>;
|
|
665
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormsComponent, "app-forms", never, {}, {}, never, never, true, never>;
|
|
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>;
|
|
666
1723
|
}
|
|
667
1724
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
1725
|
+
/**
|
|
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.
|
|
1730
|
+
*
|
|
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.
|
|
1750
|
+
*/
|
|
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<{
|
|
682
1767
|
expression: string | null;
|
|
683
1768
|
valueAccessRules: Record<string, TreeNode[]>;
|
|
684
1769
|
}>;
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
onTextChange(expression: string): Promise<void>;
|
|
692
|
-
cleanValueAccessRules(): void;
|
|
693
|
-
selectSuggestionInput(suggestion: string): void;
|
|
694
|
-
get getAllInputs(): FormColumnInputs[];
|
|
695
|
-
onFocus(event: FocusEvent): void;
|
|
696
|
-
methods: {
|
|
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: {
|
|
697
1776
|
label: string;
|
|
698
1777
|
hint: string;
|
|
699
1778
|
value: string;
|
|
700
1779
|
}[];
|
|
701
|
-
|
|
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(): {
|
|
702
1788
|
label: string;
|
|
703
1789
|
hint: string;
|
|
704
1790
|
value: string;
|
|
705
1791
|
}[];
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
interface IConfigElementError {
|
|
717
|
-
key: string;
|
|
718
|
-
message: string;
|
|
719
|
-
}
|
|
720
|
-
declare class TDynamicDataEditComponent implements OnDestroy {
|
|
721
|
-
private ngZone;
|
|
722
|
-
private editorInitiated;
|
|
723
|
-
constructor(ngZone: NgZone);
|
|
724
|
-
ngOnDestroy(): void;
|
|
725
|
-
private valueChanges;
|
|
726
|
-
private subscription;
|
|
727
|
-
elementEditorTypes: typeof ElementEditorTypes;
|
|
728
|
-
private _editorConfig;
|
|
729
|
-
private _data;
|
|
730
|
-
set editorConfig(config: ElementEditorInnerSectionElementInterface | undefined);
|
|
731
|
-
_formInputs$: BehaviorSubject<FormColumnInputs[]>;
|
|
732
|
-
_formInputs: FormColumnInputs[];
|
|
733
|
-
set formInputs(inputs: Array<FormColumnInputs>);
|
|
734
|
-
get formInputs(): Array<FormColumnInputs>;
|
|
735
|
-
set data(data: any);
|
|
736
|
-
get data(): any;
|
|
737
|
-
validationErrors: IConfigElementError[] | null;
|
|
738
|
-
valueChange: EventEmitter<unknown>;
|
|
739
|
-
blur: EventEmitter<any>;
|
|
740
|
-
editorConfigValue$: Observable<ElementEditorInnerSectionElementInterface | undefined>;
|
|
741
|
-
dataValue$: Observable<any>;
|
|
742
|
-
get getMscoaTree$(): Observable<IGetTreeResponse | undefined>;
|
|
743
|
-
get getWorkflowOptions$(): Observable<IWorkflowOption[] | undefined>;
|
|
744
|
-
get value$(): Observable<any>;
|
|
745
|
-
get dataOptions$(): Observable<any>;
|
|
746
|
-
get disabled$(): Observable<boolean | undefined>;
|
|
747
|
-
private initializeValueChanges;
|
|
748
|
-
private computeValueChange;
|
|
749
|
-
inputChange(event: any): void;
|
|
750
|
-
valueChanged(value: unknown): void;
|
|
751
|
-
manualValueChange(event: {
|
|
752
|
-
value: unknown;
|
|
753
|
-
deepBind: Array<string>;
|
|
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;
|
|
754
1801
|
}): void;
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
get inputHasBlurFunction$(): Observable<BlurHandleTypes | undefined>;
|
|
758
|
-
blurFunctionTooltip(blurHandle: BlurHandleTypes | undefined): "Enable/disable pre-populating of the form control name from the label" | "Enable/disable auto conversion of control name to camel case" | "Toggle blur function";
|
|
759
|
-
formatLabel: (value: number) => any;
|
|
760
|
-
vm$: Observable<{
|
|
761
|
-
editorConfigValue: ElementEditorInnerSectionElementInterface | undefined;
|
|
762
|
-
value: any;
|
|
763
|
-
dataOptions: any;
|
|
764
|
-
disabled: boolean | undefined;
|
|
765
|
-
inputHasBlurFunction: BlurHandleTypes | undefined;
|
|
766
|
-
dataValue: any;
|
|
767
|
-
inputConfig: any;
|
|
768
|
-
}>;
|
|
769
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TDynamicDataEditComponent, never>;
|
|
770
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TDynamicDataEditComponent, "lib-t-dynamic-data-edit", never, { "editorConfig": { "alias": "editorConfig"; "required": false; }; "formInputs": { "alias": "formInputs"; "required": false; }; "data": { "alias": "data"; "required": false; }; "validationErrors": { "alias": "validationErrors"; "required": false; }; }, { "valueChange": "valueChange"; "blur": "blur"; }, never, never, true, never>;
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
declare class TreeComponent {
|
|
774
|
-
activePath: TreeNode[];
|
|
775
|
-
pathInEdit: TreeNode | null;
|
|
776
|
-
get activeLevel(): number;
|
|
777
|
-
private _transformer;
|
|
778
|
-
setupPath(node: TreeNode): void;
|
|
779
|
-
updateStateFromPath(path: TreeNode[]): void;
|
|
780
|
-
selectNode(node: FlatNode): TreeNode[] | undefined;
|
|
781
|
-
saveNodeInEdit(): {
|
|
782
|
-
children: undefined;
|
|
783
|
-
value: undefined;
|
|
784
|
-
key: string;
|
|
785
|
-
name: string;
|
|
786
|
-
inEdit?: boolean;
|
|
787
|
-
path: string[];
|
|
788
|
-
keyIsArrayIndex?: boolean;
|
|
789
|
-
functions: ngx_t_forms_types.IArrayFunction[];
|
|
790
|
-
}[] | undefined;
|
|
791
|
-
resetNode(): void;
|
|
792
|
-
removeFunction(id: string): void;
|
|
793
|
-
closeEdit(): void;
|
|
794
|
-
nodeIsExpandable(node: TreeNode): boolean;
|
|
795
|
-
showNode(node: FlatNode): boolean;
|
|
796
|
-
hasANodeInEdit(): boolean;
|
|
797
|
-
nodeIsChecked(node: FlatNode): boolean;
|
|
798
|
-
treeControl: FlatTreeControl<FlatNode, FlatNode>;
|
|
799
|
-
treeFlattener: MatTreeFlattener<TreeNode, FlatNode, FlatNode>;
|
|
800
|
-
dataSource: MatTreeFlatDataSource<TreeNode, FlatNode, FlatNode>;
|
|
801
|
-
private dynamicObject;
|
|
802
|
-
constructor();
|
|
803
|
-
computeTreeData(dynamicObject: any): void;
|
|
804
|
-
assignDataSourceData(tree: TreeNode[]): void;
|
|
805
|
-
hasChild: (_: number, node: FlatNode) => boolean;
|
|
806
|
-
getValue(): any;
|
|
807
|
-
addNewFunction(): void;
|
|
808
|
-
functionChanged(value: string): void;
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
declare class TDynamicDataViewComponent {
|
|
812
|
-
treeClass: TreeComponent;
|
|
813
|
-
data: any;
|
|
814
|
-
constructor();
|
|
815
|
-
_data: any;
|
|
816
|
-
ngOnInit(): void;
|
|
817
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
818
|
-
getNodeValueColor(value: any): "green" | "blue" | "purple" | "black";
|
|
819
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TDynamicDataViewComponent, never>;
|
|
820
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TDynamicDataViewComponent, "lib-t-dynamic-data-view", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
declare class MscoaFormInputComponent {
|
|
824
|
-
inputConfig: ITowerStepColumn;
|
|
825
|
-
editorMode: boolean;
|
|
826
|
-
formGroup: FormGroup;
|
|
827
|
-
formBuilderFunctions: FormBuilderFunctions | undefined;
|
|
828
|
-
reload: EventEmitter<void>;
|
|
829
|
-
get errorMessage(): string | string[] | undefined;
|
|
830
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<MscoaFormInputComponent, never>;
|
|
831
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MscoaFormInputComponent, "lib-mscoa-form-input", never, { "inputConfig": { "alias": "inputConfig"; "required": false; }; "editorMode": { "alias": "editorMode"; "required": false; }; "formGroup": { "alias": "formGroup"; "required": false; }; "formBuilderFunctions": { "alias": "formBuilderFunctions"; "required": false; }; }, { "reload": "reload"; }, never, never, true, never>;
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
interface EncryptedData {
|
|
835
|
-
ciphertext: string;
|
|
836
|
-
salt: string;
|
|
837
|
-
iv: string;
|
|
838
|
-
hmac: string;
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
declare const getSignatureImage: (inputConfig: FormColumnInputs, value: EncryptedData | undefined) => Promise<string | undefined>;
|
|
842
|
-
|
|
843
|
-
declare class SignatureInputElementComponent {
|
|
844
|
-
inputConfig: ITowerStepColumn;
|
|
845
|
-
formGroup: FormGroup;
|
|
846
|
-
reload: EventEmitter<void>;
|
|
847
|
-
get errorMessage(): string | string[] | undefined;
|
|
848
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SignatureInputElementComponent, never>;
|
|
849
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SignatureInputElementComponent, "lib-signature-input-element", never, { "inputConfig": { "alias": "inputConfig"; "required": false; }; "formGroup": { "alias": "formGroup"; "required": false; }; }, { "reload": "reload"; }, never, never, true, never>;
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
declare class TFormInputComponent {
|
|
853
|
-
private props;
|
|
854
|
-
inputConfig: ITowerStepColumn | undefined;
|
|
855
|
-
formGroup: FormGroup<{
|
|
856
|
-
[sectionId: string]: FormGroup<{
|
|
857
|
-
[inputId: string]: FormControl<string | null>;
|
|
858
|
-
}>;
|
|
859
|
-
}> | undefined | null;
|
|
860
|
-
editorMode: boolean;
|
|
861
|
-
formBuilderFunctions: FormBuilderFunctions | undefined;
|
|
862
|
-
optionsSearchWordKeyWord: string;
|
|
863
|
-
elementTypes: typeof ElementTypes;
|
|
864
|
-
constructor(props: any);
|
|
865
|
-
get hasFormControlInstance(): boolean;
|
|
866
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TFormInputComponent, [{ optional: true; }]>;
|
|
867
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TFormInputComponent, "lib-t-form-input", never, { "inputConfig": { "alias": "inputConfig"; "required": false; }; "formGroup": { "alias": "formGroup"; "required": false; }; "editorMode": { "alias": "editorMode"; "required": false; }; "formBuilderFunctions": { "alias": "formBuilderFunctions"; "required": false; }; }, {}, never, never, true, never>;
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
declare class TourManagerService {
|
|
871
|
-
private readonly tourService;
|
|
872
|
-
userProfile: this;
|
|
873
|
-
constructor();
|
|
874
|
-
startTourByOption(steps: IStepOption[]): {
|
|
875
|
-
stepShow$: rxjs.Subject<ngx_ui_tour_core.StepChangeParams<IStepOption>>;
|
|
876
|
-
stepHide$: rxjs.Subject<ngx_ui_tour_core.StepChangeParams<IStepOption>>;
|
|
877
|
-
initialize$: rxjs.Subject<IStepOption[]>;
|
|
878
|
-
start$: rxjs.Subject<void>;
|
|
879
|
-
end$: rxjs.Subject<void>;
|
|
880
|
-
pause$: rxjs.Subject<void>;
|
|
881
|
-
resume$: rxjs.Subject<void>;
|
|
882
|
-
};
|
|
883
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TourManagerService, never>;
|
|
884
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<TourManagerService>;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
declare class UserFormStepperComponent extends FormTowerControllerService {
|
|
888
|
-
/**
|
|
889
|
-
* Handles the key down event and opens the application log if the key combination is pressed.
|
|
890
|
-
* @param event The keyboard event object.
|
|
891
|
-
*/
|
|
892
|
-
onKeyDown(event: KeyboardEvent): void;
|
|
893
|
-
_formId: string | undefined;
|
|
894
|
-
set formId(value: string | undefined);
|
|
895
|
-
loading: boolean;
|
|
896
|
-
loadForm(formId: string | undefined): void;
|
|
897
|
-
_initialFormValuesLocal: any;
|
|
898
|
-
set initialValues(initialFormValues: any);
|
|
899
|
-
set globalSystemInputs(inputs: FormColumnInputs[]);
|
|
900
|
-
passParamsOnSubmit: any;
|
|
901
|
-
get formBuilderFunctions(): FormBuilderFunctions;
|
|
902
|
-
stepper: MatStepper | undefined;
|
|
903
|
-
isEditable: boolean;
|
|
904
|
-
getStepState(step: any, index: number): StepState;
|
|
905
|
-
getPreviousStepLabel(): string | undefined;
|
|
906
|
-
getNextStepLabel(): string | undefined;
|
|
907
|
-
canProceedToNextStep(step: any): boolean;
|
|
908
|
-
get getSubmissionStatus(): string;
|
|
909
|
-
handleSubmit(): void;
|
|
910
|
-
tourManagerService: TourManagerService;
|
|
911
|
-
get hasTour(): boolean;
|
|
912
|
-
/**
|
|
913
|
-
* Initiates and configures a dynamic, multi-step tutorial tour for the form.
|
|
914
|
-
* The tour guides the user through the form's title, sections, and individual fields.
|
|
915
|
-
*/
|
|
916
|
-
startTour(): void;
|
|
917
|
-
refreshASection(sectionId: string): void;
|
|
918
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<UserFormStepperComponent, never>;
|
|
919
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<UserFormStepperComponent, "lib-user-form-stepper", never, { "formId": { "alias": "formId"; "required": false; }; "initialValues": { "alias": "initialValues"; "required": false; }; "globalSystemInputs": { "alias": "globalSystemInputs"; "required": false; }; "passParamsOnSubmit": { "alias": "passParamsOnSubmit"; "required": false; }; }, {}, never, never, true, never>;
|
|
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>;
|
|
920
1804
|
}
|
|
921
1805
|
|
|
922
|
-
declare class FormatDataPipe implements PipeTransform {
|
|
923
|
-
transform(value: any, dataType: DocumentLitsLabelConfigInterfaceValueType | InputDataTypes | undefined | InputPipeTypes, pipeConfig?: FormColumnInputs['pipe'] | undefined): any;
|
|
924
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FormatDataPipe, never>;
|
|
925
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<FormatDataPipe, "formatData", true>;
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
declare function assignDeepPropertyToObject(item: any, path: Array<string>, value: any): any;
|
|
929
|
-
|
|
930
1806
|
/**
|
|
931
|
-
*
|
|
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.
|
|
932
1812
|
*
|
|
933
|
-
*
|
|
934
|
-
*
|
|
935
|
-
*
|
|
936
|
-
*
|
|
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.
|
|
937
1824
|
*/
|
|
938
|
-
declare
|
|
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
|
+
}
|
|
939
1832
|
|
|
940
|
-
type DeepPropertyValue = any;
|
|
941
|
-
type PropertyPath = (string | number | IArrayFunction[])[];
|
|
942
1833
|
/**
|
|
943
1834
|
* Custom error class for property access errors in deep object traversal.
|
|
944
1835
|
*
|
|
@@ -962,6 +1853,11 @@ type PropertyPath = (string | number | IArrayFunction[])[];
|
|
|
962
1853
|
* console.log(`Error message: ${error.message}`);
|
|
963
1854
|
* }
|
|
964
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.
|
|
965
1861
|
*/
|
|
966
1862
|
declare class PropertyAccessError extends Error {
|
|
967
1863
|
path: PropertyPath;
|
|
@@ -973,12 +1869,12 @@ declare class PropertyAccessError extends Error {
|
|
|
973
1869
|
*
|
|
974
1870
|
* @function returnDeepProperty
|
|
975
1871
|
*
|
|
976
|
-
* @param {
|
|
1872
|
+
* @param {unknown} item - The object to traverse.
|
|
977
1873
|
* @param {(string|number|symbol)[]} path - An array representing the path to the desired property.
|
|
978
1874
|
* Each element in the array can be a string (for object properties),
|
|
979
1875
|
* a number (for array indices), or a symbol.
|
|
980
1876
|
*
|
|
981
|
-
* @returns {
|
|
1877
|
+
* @returns {DeepPropertyValue} The value of the deep property if it exists, otherwise undefined.
|
|
982
1878
|
*
|
|
983
1879
|
* @throws {Error} If the input item is null or undefined, or if the path is not a non-empty array.
|
|
984
1880
|
*
|
|
@@ -1016,19 +1912,24 @@ declare class PropertyAccessError extends Error {
|
|
|
1016
1912
|
* - Throws an error if the input item is null/undefined or if the path is invalid
|
|
1017
1913
|
*
|
|
1018
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.
|
|
1019
1920
|
*/
|
|
1020
|
-
declare const returnDeepProperty: (item:
|
|
1921
|
+
declare const returnDeepProperty: (item: unknown, path: PropertyPath) => DeepPropertyValue;
|
|
1021
1922
|
/**
|
|
1022
1923
|
* Safely retrieves a deeply nested property from an object using a path array.
|
|
1023
1924
|
*
|
|
1024
1925
|
* @function safeReturnDeepProperty
|
|
1025
1926
|
*
|
|
1026
|
-
* @param {
|
|
1927
|
+
* @param {unknown} item - The object to traverse.
|
|
1027
1928
|
* @param {(string|number|symbol)[]} path - An array representing the path to the desired property.
|
|
1028
1929
|
* Each element in the array can be a string (for object properties),
|
|
1029
1930
|
* a number (for array indices), or a symbol.
|
|
1030
1931
|
*
|
|
1031
|
-
* @returns {{value:
|
|
1932
|
+
* @returns {{value: DeepPropertyValue, error: string|null}} An object containing:
|
|
1032
1933
|
* - value: The value of the deep property if found, otherwise undefined.
|
|
1033
1934
|
* - error: A string describing the error if one occurred, otherwise null.
|
|
1034
1935
|
*
|
|
@@ -1068,12 +1969,40 @@ declare const returnDeepProperty: (item: any, path: PropertyPath) => DeepPropert
|
|
|
1068
1969
|
* - Implement error handling in a functional programming style
|
|
1069
1970
|
*
|
|
1070
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.
|
|
1071
1977
|
*/
|
|
1072
|
-
declare const safeReturnDeepProperty: (item:
|
|
1978
|
+
declare const safeReturnDeepProperty: (item: unknown, path: PropertyPath) => {
|
|
1073
1979
|
value: DeepPropertyValue;
|
|
1074
1980
|
error: string | null;
|
|
1075
1981
|
};
|
|
1076
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
|
+
|
|
1077
2006
|
/**
|
|
1078
2007
|
* Creates a sample value for a given form input configuration.
|
|
1079
2008
|
* It determines the value based on the input's element type, specific input type (e.g., email, number),
|
|
@@ -1081,13 +2010,46 @@ declare const safeReturnDeepProperty: (item: any, path: PropertyPath) => {
|
|
|
1081
2010
|
*
|
|
1082
2011
|
* @param {FormColumnInputs} input - The configuration object for the form input.
|
|
1083
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.
|
|
1084
2018
|
*/
|
|
1085
2019
|
declare function getSampleValueForInput(input: FormColumnInputs): any;
|
|
1086
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
|
+
*/
|
|
1087
2027
|
declare function getPipedValueFromDataType(dataType: InputDataTypes | undefined | DocumentLitsLabelConfigInterfaceValueType, value: any, pipe: FormColumnInputs['pipe'] | undefined): any;
|
|
1088
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
|
+
*/
|
|
1089
2043
|
declare function getUrl(url: string, variables: NgxTFormsConfig): string;
|
|
1090
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
|
+
|
|
1091
2053
|
/**
|
|
1092
2054
|
* Validates an object against a validation expression.
|
|
1093
2055
|
*
|
|
@@ -1095,13 +2057,52 @@ declare function getUrl(url: string, variables: NgxTFormsConfig): string;
|
|
|
1095
2057
|
* @param {object} object - The object to validate.
|
|
1096
2058
|
* @returns {boolean} - A boolean indicating whether the object is valid according to the expression.
|
|
1097
2059
|
*
|
|
1098
|
-
*
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1102
|
-
*
|
|
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.
|
|
1103
2085
|
*/
|
|
1104
|
-
declare const validateObjectAgainstString: (expression: string, object: any) => boolean;
|
|
1105
2086
|
declare function validateExpressionSyntax(expression: string): string | null;
|
|
1106
2087
|
|
|
1107
|
-
|
|
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 };
|