ngx-t-forms 2.0.29 → 2.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs → ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs} +3 -3
  2. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs.map → ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs.map} +1 -1
  3. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs → ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs} +2 -2
  4. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs.map → ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs.map} +1 -1
  5. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs} +2 -2
  6. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs.map → ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs.map} +1 -1
  7. package/fesm2022/{ngx-t-forms-data-source-picker.component-DxORinAD.mjs → ngx-t-forms-data-source-picker.component-Badna1Rl.mjs} +5 -5
  8. package/fesm2022/{ngx-t-forms-data-source-picker.component-DxORinAD.mjs.map → ngx-t-forms-data-source-picker.component-Badna1Rl.mjs.map} +1 -1
  9. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs → ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs} +3 -3
  10. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs.map → ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs.map} +1 -1
  11. package/fesm2022/{ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs → ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs} +2 -2
  12. package/fesm2022/{ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs.map → ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs.map} +1 -1
  13. package/fesm2022/{ngx-t-forms-form-json-view.component-DePf44w6.mjs → ngx-t-forms-form-json-view.component-B8seYzMQ.mjs} +2 -2
  14. package/fesm2022/{ngx-t-forms-form-json-view.component-DePf44w6.mjs.map → ngx-t-forms-form-json-view.component-B8seYzMQ.mjs.map} +1 -1
  15. package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs +281 -0
  16. package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs.map +1 -0
  17. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs → ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs} +4 -4
  18. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs.map → ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs.map} +1 -1
  19. package/fesm2022/{ngx-t-forms-input-editor.component-D4xHO76K.mjs → ngx-t-forms-input-editor.component-B_kkOoEO.mjs} +2 -2
  20. package/fesm2022/{ngx-t-forms-input-editor.component-D4xHO76K.mjs.map → ngx-t-forms-input-editor.component-B_kkOoEO.mjs.map} +1 -1
  21. package/fesm2022/{ngx-t-forms-map-mat-options-keys-CbdW82su.mjs → ngx-t-forms-map-mat-options-keys-SM5XM9uy.mjs} +2 -2
  22. package/fesm2022/{ngx-t-forms-map-mat-options-keys-CbdW82su.mjs.map → ngx-t-forms-map-mat-options-keys-SM5XM9uy.mjs.map} +1 -1
  23. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs → ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs} +2 -2
  24. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs.map → ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs.map} +1 -1
  25. package/fesm2022/{ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs → ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs} +2 -2
  26. package/fesm2022/{ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs.map → ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs.map} +1 -1
  27. package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs → ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs} +2 -2
  28. package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs.map → ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs.map} +1 -1
  29. package/fesm2022/{ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs → ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs} +2 -2
  30. package/fesm2022/{ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs.map → ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs.map} +1 -1
  31. package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs → ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs} +2 -2
  32. package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs.map → ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs.map} +1 -1
  33. package/fesm2022/{ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs → ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs} +2 -2
  34. package/fesm2022/{ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs.map → ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs.map} +1 -1
  35. package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs → ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs} +2 -2
  36. package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs.map → ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs.map} +1 -1
  37. package/fesm2022/{ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs → ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs} +2 -2
  38. package/fesm2022/{ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs.map → ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs.map} +1 -1
  39. package/fesm2022/{ngx-t-forms-ngx-t-forms-D9qmig6g.mjs → ngx-t-forms-ngx-t-forms-DP2koSL5.mjs} +636 -79
  40. package/fesm2022/ngx-t-forms-ngx-t-forms-DP2koSL5.mjs.map +1 -0
  41. package/fesm2022/{ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs → ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs} +3 -3
  42. package/fesm2022/{ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs.map → ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs.map} +1 -1
  43. package/fesm2022/{ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs → ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs} +2 -2
  44. package/fesm2022/{ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs.map → ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs.map} +1 -1
  45. package/fesm2022/{ngx-t-forms-required-inputs.component-CSIJvSHq.mjs → ngx-t-forms-required-inputs.component-CLyq9dIR.mjs} +2 -2
  46. package/fesm2022/{ngx-t-forms-required-inputs.component-CSIJvSHq.mjs.map → ngx-t-forms-required-inputs.component-CLyq9dIR.mjs.map} +1 -1
  47. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs → ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs} +2 -2
  48. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs.map → ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs.map} +1 -1
  49. package/fesm2022/{ngx-t-forms-section-report.component-12-KdKT6.mjs → ngx-t-forms-section-report.component-BtaF39WD.mjs} +2 -2
  50. package/fesm2022/{ngx-t-forms-section-report.component-12-KdKT6.mjs.map → ngx-t-forms-section-report.component-BtaF39WD.mjs.map} +1 -1
  51. package/fesm2022/{ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs → ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs} +2 -2
  52. package/fesm2022/{ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs.map → ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs.map} +1 -1
  53. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs → ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs} +2 -2
  54. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs.map → ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs.map} +1 -1
  55. package/fesm2022/{ngx-t-forms-validators-config.component-B3j9Dmgu.mjs → ngx-t-forms-validators-config.component-Cq07Er-G.mjs} +3 -3
  56. package/fesm2022/{ngx-t-forms-validators-config.component-B3j9Dmgu.mjs.map → ngx-t-forms-validators-config.component-Cq07Er-G.mjs.map} +1 -1
  57. package/fesm2022/ngx-t-forms.mjs +1 -1
  58. package/package.json +2 -2
  59. package/types/ngx-t-forms.d.ts +148 -3
  60. package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs +0 -270
  61. package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs.map +0 -1
  62. package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs.map +0 -1
@@ -1,270 +0,0 @@
1
- import * as i2$2 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { inject, ChangeDetectorRef, ViewChild, Component } from '@angular/core';
5
- import { c as FormTowerControllerService, F as FormsStoreService, d as TourManagerService, e as getSubmissionStatusFn, M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-D9qmig6g.mjs';
6
- import { take, filter, tap, map, Subject, timer, takeUntil } from 'rxjs';
7
- import * as i1$1 from '@angular/forms';
8
- import { ReactiveFormsModule, FormsModule } from '@angular/forms';
9
- import { validateFormColumnInputs } from 'ngx-t-forms-types';
10
- import * as i7$1 from 'ngx-ui-tour-md-menu';
11
- import { TourMatMenu } from 'ngx-ui-tour-md-menu';
12
- import * as i1 from '@angular/cdk/drag-drop';
13
- import * as i2 from '@angular/material/button';
14
- import * as i3 from '@angular/material/card';
15
- import * as i2$1 from '@angular/material/stepper';
16
- import * as i3$1 from '@angular/material/icon';
17
- import * as i6 from '@angular/material/menu';
18
- import * as i7 from '@angular/material/progress-spinner';
19
- import * as i4 from '@angular/material/tooltip';
20
- import * as i13 from '@angular/material/input';
21
- import * as i5 from '@angular/material/toolbar';
22
-
23
- ;
24
- class FormSectionStepperComponent extends FormTowerControllerService {
25
- constructor() {
26
- super(...arguments);
27
- this.store = inject(FormsStoreService);
28
- this.loadingForm$ = this.store.selectors.selectLoadingForm$;
29
- this.selectInputInEditId$ = this.store.selectors.selectInputInEditId$;
30
- this.isEditable = true;
31
- this.dragging = false;
32
- this.drop = (event) => this.store.actionsFormBuilder.handleSectionDragDrop(event);
33
- this.dropItems = (event, sectionId) => this.store.actionsFormBuilder.handleInputDragDrop(event, sectionId);
34
- this.formDeleteSection = (sectionId) => this.store.actionsFormBuilder.formDeleteSection(sectionId);
35
- this.formDeleteSectionInputs = (sectionId) => this.store.actionsFormBuilder.formDeleteSectionInputs(sectionId);
36
- this.addMultipleFormInput = (sectionId, multipleInputId) => this.store.actionsFormBuilder.addMultipleFormInput(sectionId, multipleInputId);
37
- this.moveInputToSection = (inputId, targetSectionId) => this.store.actionsFormBuilder.moveInputToSection(inputId, targetSectionId);
38
- this.reorderMultipleInputItems = (event, multipleInputId) => this.store.actionsFormBuilder.reorderMultipleInputItems(event, multipleInputId);
39
- this.cloneCopyFormInput = (inputId) => this.store.actionsFormBuilder.cloneCopyFormInput(inputId);
40
- this.multipleInputToggleLabel = (item) => this.store.actionsFormBuilder.multipleInputToggleLabel(item);
41
- this.editInput = (item) => this.store.actionsFormBuilder.editInput(item);
42
- this.addMultipleInputValueCalculationFunction = (item, multipleInputId) => this.store.actionsFormBuilder.addMultipleInputValueCalculationFunction(item, multipleInputId);
43
- this.setActiveSection = ($event) => this.setMatActiveStepper($event.selectedIndex);
44
- this.addInputToScoaSelection = (sectionId, scoaInputId) => this.store.actionsFormBuilder.addInputToScoaSelection(sectionId, scoaInputId);
45
- this.addNewInput = (sectionId) => this.store.actionsFormBuilder.saveInput(sectionId);
46
- this.addSection = () => this.store.actionsFormBuilder.handleAddSection();
47
- this.setMatActiveStepper = (index) => setTimeout(() => {
48
- if (this.stepper === undefined)
49
- return;
50
- this.stepper.selectedIndex = index;
51
- }, 0);
52
- this.mouseOverSection = null;
53
- this.handleInput = (event, sectionId) => {
54
- const inputValue = event.target.value;
55
- this.store.actionsFormBuilder?.stepTitleChangeStep(sectionId, inputValue);
56
- event.stopPropagation();
57
- event.preventDefault();
58
- };
59
- this.overId = null;
60
- this.countdownSeconds = {};
61
- this.inputWillBeRemovedIn = (id) => this.countdownSeconds[id]?.count;
62
- this.getPlaceHolerForSection = (sectionId) => this.store.sectionPlaceholder[sectionId];
63
- this.formDeleteInput = (item) => this.store.actionsFormBuilder.formDeleteInput(item);
64
- this.openSectionReports = {};
65
- this.toggleSectionReports = (sectionId) => this.openSectionReports[sectionId] = !this.openSectionReports[sectionId];
66
- this.ref = inject(ChangeDetectorRef);
67
- this.tourManagerService = inject(TourManagerService);
68
- this.refreshASection = (sectionId) => {
69
- this.refreshSection(sectionId).pipe(take(1)).subscribe();
70
- };
71
- }
72
- /**
73
- * Handles the key down event and opens the application log if the key combination is pressed.
74
- * @param event The keyboard event object.
75
- */
76
- onKeyDown(event) {
77
- if (event.ctrlKey && event.key === 'z') {
78
- // Handle the key press combination here
79
- this.revertBackHistory();
80
- }
81
- }
82
- ngOnInit() {
83
- //initialize the form with the initial values
84
- this.store.registerFormChangeFn(this.initialize);
85
- this.registerFormInputConfigChangeFn((inputId, config) => {
86
- this.store.actions.updateFormInputConfigFromTower({
87
- inputId,
88
- config
89
- });
90
- });
91
- this.store.selectors.selectFormInEdit$.pipe(take(1), filter(form => form !== null && form !== undefined), tap(form => this.initialize(form.form))).subscribe();
92
- }
93
- get formBuilderFunctions() {
94
- return {
95
- getLatestAccountTree: () => this.NGX_T_FORMS_CONFIG.formBuilder.getScoaTree(),
96
- getSCOAAccount: (SCOAAccount) => this.NGX_T_FORMS_CONFIG.formBuilder.getSCOAAccount(SCOAAccount),
97
- multipleInputToggleForm: this.toggleMultipleInput.bind(this),
98
- multipleInputSaveForm: this.saveMultipleInputForm.bind(this),
99
- editInput: this.editInput.bind(this),
100
- deleteInput: this.formDeleteInput.bind(this),
101
- addFunction: this.addMultipleInputValueCalculationFunction.bind(this),
102
- reorderItems: this.reorderMultipleInputItems.bind(this),
103
- multipleInputToggleLabel: this.multipleInputToggleLabel.bind(this),
104
- multipleInputEditRow: this.multipleInputEditRow.bind(this),
105
- multipleInputDuplicateRow: this.multipleInputDuplicateRow.bind(this),
106
- };
107
- }
108
- getPreviousStepLabel() {
109
- if (this.stepper === undefined)
110
- return '';
111
- const currentIndex = this.stepper?.selectedIndex;
112
- if (currentIndex > 0) {
113
- return this.selectFormSteps()?.[currentIndex - 1]?.label;
114
- }
115
- return '';
116
- }
117
- getNextStepLabel() {
118
- if (this.stepper === undefined)
119
- return '';
120
- const currentIndex = this.stepper?.selectedIndex;
121
- const steps = this.selectFormSteps();
122
- if (!steps)
123
- return '';
124
- if (currentIndex < steps.length - 1) {
125
- return steps[currentIndex + 1]?.label;
126
- }
127
- return '';
128
- }
129
- getStepState(step, index) {
130
- const activeStep = this.stepper?.selectedIndex === index;
131
- if (activeStep)
132
- return 'edit';
133
- if (step.sectionForm?.touched && !step.sectionForm?.valid)
134
- return 'error'; // Show error state for invalid touched forms
135
- if (step.sectionForm?.valid)
136
- return 'done'; // Show done state for valid forms
137
- return 'number';
138
- }
139
- get getSubmissionStatus$() {
140
- const progress = this.formProgress() || 0;
141
- const steps = this.selectFormSteps();
142
- return this.loadingForm$.pipe(map(loading => getSubmissionStatusFn(this.stepper, this.mainForm, progress, steps, loading)));
143
- }
144
- get selectFormStepsComputed() {
145
- const steps = this.selectFormSteps().map((step) => ({
146
- ...step,
147
- columns: step.columns.map((col) => {
148
- return ({
149
- ...col,
150
- inputConfigErrors: validateFormColumnInputs(col)
151
- });
152
- })
153
- }));
154
- return steps;
155
- }
156
- stopDeletion(id) {
157
- if (this.countdownSeconds[id]) {
158
- this.countdownSeconds[id]?.stop$.next();
159
- delete this.countdownSeconds[id];
160
- }
161
- }
162
- removeInput(item) {
163
- if (this.countdownSeconds[item.id]) {
164
- this.stopDeletion(item.id);
165
- return;
166
- }
167
- this.countdownSeconds[item.id] = {
168
- count: 5,
169
- stop$: new Subject(),
170
- deleteInputs: false
171
- };
172
- const countdown$ = timer(0, 1000).pipe(tap((secondsElapsed) => {
173
- const data = this.countdownSeconds[item.id];
174
- if (!data) {
175
- return;
176
- }
177
- const remainingTime = 5 - secondsElapsed;
178
- if (remainingTime <= 0) {
179
- this.formDeleteInput(item);
180
- this.stopDeletion(item.id);
181
- // Stop and remove timer
182
- // Actual deletion logic here, e.g., remove the element by id
183
- // document.getElementById(id)?.remove();
184
- }
185
- else {
186
- data.count = remainingTime;
187
- }
188
- }), takeUntil(this.countdownSeconds[item.id]?.stop$));
189
- countdown$?.subscribe({
190
- complete: () => { }
191
- });
192
- }
193
- deleteSection(sectionId, deleteInputs = false) {
194
- if (!sectionId) {
195
- return;
196
- }
197
- if (this.countdownSeconds[sectionId]) {
198
- this.stopDeletion(sectionId);
199
- return;
200
- }
201
- this.countdownSeconds[sectionId] = {
202
- count: 5,
203
- stop$: new Subject(),
204
- deleteInputs: deleteInputs
205
- };
206
- const countdown$ = timer(0, 1000).pipe(tap((secondsElapsed) => {
207
- const data = this.countdownSeconds[sectionId];
208
- if (!data) {
209
- return;
210
- }
211
- const remainingTime = 5 - secondsElapsed;
212
- if (remainingTime <= 0) {
213
- if (data.deleteInputs) {
214
- this.formDeleteSectionInputs(sectionId);
215
- }
216
- else {
217
- this.formDeleteSection(sectionId);
218
- }
219
- this.stopDeletion(sectionId);
220
- // Stop and remove timer
221
- // Actual deletion logic here, e.g., remove the element by id
222
- // document.getElementById(id)?.remove();
223
- }
224
- else {
225
- data.count = remainingTime;
226
- }
227
- }), takeUntil(this.countdownSeconds[sectionId]?.stop$));
228
- countdown$?.subscribe({
229
- complete: () => { }
230
- });
231
- }
232
- refresh() {
233
- // trigger angular a change detection cycle manually
234
- this.ref.markForCheck();
235
- this.ref.detectChanges();
236
- }
237
- sectionIncludesDefault(columns) {
238
- return columns.some((col) => col.systemDefault);
239
- }
240
- startTour(sectionId) {
241
- const tourOptions = this.selectAllFormTours().filter((step) => step.sectionId === sectionId);
242
- this.tourManagerService.startTourByOption(tourOptions);
243
- }
244
- onSpaceKey(event, sectionId) {
245
- const inputValue = event.target.value;
246
- this.store.actionsFormBuilder?.stepTitleChangeStep(sectionId, inputValue + ' ');
247
- event.stopPropagation();
248
- event.preventDefault();
249
- }
250
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FormSectionStepperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
251
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: FormSectionStepperComponent, isStandalone: true, selector: "app-form-section-stepper", viewQueries: [{ propertyName: "stepper", first: true, predicate: ["stepper"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-card class=\"mainCard\" appearance=\"raised\">\r\n\r\n @if (loadingForm$ | async) {\r\n <div class=\"loading-container\" role=\"status\" aria-live=\"polite\">\r\n <mat-spinner diameter=\"48\" aria-label=\"Loading form\" />\r\n </div>\r\n }\r\n <mat-stepper [style.display]=\"(loadingForm$ | async) ? 'none' : 'block'\" #stepper class=\"form-stepper\"\r\n orientation=\"vertical\" [linear]=\"!isEditable\" aria-label=\"Form sections stepper\" [animationDuration]=\"'300'\"\r\n cdkDropList #formSections=\"cdkDropList\" [cdkDropListData]=\"selectFormStepsComputed\"\r\n (cdkDropListDropped)=\"drop($event)\" (selectionChange)=\"handleStepChange($event)\">\r\n\r\n @for (step of selectFormStepsComputed; track step.sectionId) {\r\n @if (step.sectionForm || getPlaceHolerForSection(step.sectionId)) {\r\n <mat-step [stepControl]=\"step.sectionForm || getPlaceHolerForSection(step.sectionId)\"\r\n [completed]=\"step.sectionIsSeen && !step.sectionIsInvalid\" [editable]=\"isEditable\"\r\n [errorMessage]=\"step.sectionFormErrorMessage||''\" [state]=\"getStepState(step,$index)\"\r\n [hasError]=\"!step.sectionForm?.valid && !!step.sectionForm?.touched\">\r\n <ng-template matStepLabel>\r\n <div cdkDrag class=\"step-label-container\" [attr.aria-label]=\"'Section ' + step.label\">\r\n <span class=\"step-label-text\">\r\n <input (input)=\"handleInput($event, step.sectionId)\" class=\"section-title-input\" matInput\r\n (keydown.space)=\"onSpaceKey($event, step.sectionId)\" placeholder=\"Enter section title\"\r\n [value]=\"step.label\" aria-label=\"Section title\">\r\n </span>\r\n @if (step.sectionIsSeen) {\r\n <mat-icon [class.error]=\"step.sectionIsInvalid\"\r\n [attr.aria-label]=\"step.sectionIsInvalid ? 'Section has errors' : 'Section completed'\">\r\n {{step.sectionIsSeen}}\r\n </mat-icon>\r\n }\r\n @if ((step)?.activeSectionHasTour && !!step.isActive) {\r\n <span class=\"tour-trigger\">\r\n <button tourAnchor=\"Form-Tour-trigger\" (click)=\"startTour(step.sectionId)\" matTooltip=\"Start section tour\"\r\n mat-flat-button>\r\n <mat-icon>tour</mat-icon>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"spacer\"></span>\r\n\r\n @if (!!inputWillBeRemovedIn(step.sectionId)) {\r\n <button \r\n (mouseover)=\"overId = step.sectionId\" (mouseout)=\"overId = null\"\r\n (click)=\"deleteSection(step.sectionId)\" color=\"warn\" mat-stroked-button\r\n [attr.aria-label]=\"overId === step.sectionId ? 'Cancel section deletion' : 'Section deleting in ' + inputWillBeRemovedIn(step.sectionId) + ' seconds'\">\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(step.sectionId)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n {{ overId === step.sectionId ? 'Click to cancel' : 'Deleting in' }}\r\n {{ inputWillBeRemovedIn(step.sectionId) }}\r\n </div>\r\n </button>\r\n }\r\n \r\n @if(canRefreshSection(step.sectionId)&& step.isActive){\r\n <button mat-icon-button\r\n style=\"margin-right: 8px;\"\r\n matTooltip=\"Click to refresh this section.\"\r\n class=\"input-sync-button\"\r\n (click)=\"refreshASection(step.sectionId)\" >\r\n <mat-icon style=\"color:var(--mat-sys-primary)\">sync</mat-icon>\r\n </button>\r\n }\r\n <button (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerData]=\"{ sectionId: step.sectionId, columns: step.columns }\" [matMenuTriggerFor]=\"sectionMenu\"\r\n color=\"primary\" mat-icon-button aria-label=\"Section options menu\">\r\n <mat-icon>more_horiz</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n\r\n @defer (on viewport; prefetch on idle) {\r\n <div class=\"step-content\">\r\n @if (!openSectionReports[step.sectionId]) {\r\n <div (cdkDropListDropped)=\"dropItems($event,step.sectionId)\" [cdkDropListData]=\"step.columns\" cdkDropList\r\n #InputList=\"cdkDropList\" class=\"row form-section\">\r\n @for (col of step.columns; track col.id) {\r\n <mat-card cdkDrag (cdkDragStarted)=\"dragging = true\" (cdkDragReleased)=\"dragging = false\"\r\n [class.inEditCol]=\"(selectInputInEditId$ | async) === col.id\"\r\n [class]=\"'box inputCard col-md-' + (dragging ? '12' : col.colSize)\" (mouseover)=\"activeInput = col.id\">\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n @if (step.sectionForm) {\r\n <lib-t-form-input [editorMode]=\"true\" [tourAnchor]=\"col.id\" (valueChange)=\"updateValue(col.id,$event)\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\" [inputConfig]=\"col\" [formGroup]=\"step.sectionForm\"\r\n [attr.aria-label]=\"col?.label || ''\">\r\n </lib-t-form-input>\r\n }\r\n\r\n\r\n\r\n @if (col.inputConfigErrors.length > 0) {\r\n <div class=\"error\">\r\n <ul class=\"error-list\">\r\n @for (error of col.inputConfigErrors; track error.key + error.message) {\r\n <li class=\"error-item\">{{ error.message }}</li>\r\n }\r\n </ul>\r\n\r\n </div>\r\n }\r\n @if (activeInput === col.id) {\r\n <mat-card-actions>\r\n\r\n <button color=\"primary\" [matTooltip]=\"'Edit ' + col.label + ' input'\" (click)=\"editInput(col)\"\r\n mat-icon-button aria-label=\"Edit input\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Move this input to another section'\" [matMenuTriggerFor]=\"moveInput\"\r\n [matMenuTriggerData]=\"col\" mat-icon-button aria-label=\"Move input to another section\">\r\n <mat-icon>drive_file_move</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Clone form input'\" (click)=\"cloneCopyFormInput(col.id)\" mat-icon-button\r\n aria-label=\"Clone input\">\r\n <mat-icon>file_copy</mat-icon>\r\n </button>\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n\r\n\r\n @if (!!inputWillBeRemovedIn(col.id)) {\r\n <button (mouseover)=\"overId = col.id\" (mouseout)=\"overId = null\" (click)=\"removeInput(col)\" color=\"warn\"\r\n mat-stroked-button>\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(col.id)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n\r\n {{ overId === col.id ? 'Click to cancel' : 'Deleting in' }} {{ inputWillBeRemovedIn(col.id) }}\r\n </div>\r\n\r\n </button>\r\n\r\n } @else if (col.systemDefault !== true) {\r\n <button color=\"warn\" [matTooltip]=\"'Delete ' + col.label + ' input'\" (click)=\"removeInput(col)\"\r\n mat-icon-button aria-label=\"Delete input\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n\r\n\r\n @if (activeInput === col.id && col.element ==='multipleInput') {\r\n\r\n <button matTooltip=\"Add input to list control form\" (click)=\"addMultipleFormInput(col.sectionId,col.id)\"\r\n color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n @if (activeInput === col.id && col.element === 'mscoaSelection') {\r\n <button matTooltip=\"Extend SCOA Segments with additional inputs\"\r\n (click)=\"addInputToScoaSelection(col.sectionId, col.id)\" color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n\r\n </mat-card-actions>\r\n }\r\n </mat-card>\r\n }\r\n </div>\r\n <section class=\"empty-state-section\">\r\n <p class=\"empty-state-text\">Add form fields to this section to collect information.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Input\"</strong> button below to create a new form field.</p>\r\n <div class=\"empty-state-actions\">\r\n <button matTooltip=\"Add an input to this section\" (click)=\"addNewInput(step.sectionId)\" color=\"accent\"\r\n mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Input\r\n </button>\r\n </div>\r\n </section>\r\n\r\n\r\n } @else {\r\n <app-section-report [sectionId]=\"step.sectionId\"></app-section-report>\r\n }\r\n <div class=\"step-actions\">\r\n @if (!$first) {\r\n <button mat-button matStepperPrevious type=\"button\" class=\"navigation-button\"\r\n [attr.aria-label]=\"'Go back to ' + getPreviousStepLabel()\">\r\n\r\n Back\r\n </button>\r\n }\r\n @if (!$last) {\r\n <button mat-flat-button matStepperNext color=\"primary\" type=\"button\" class=\"navigation-button\"\r\n matTooltip=\"Continue to next section\" [attr.aria-label]=\"'Continue to ' + getNextStepLabel()\">\r\n Next\r\n </button>\r\n }\r\n @if ($last) {\r\n <button mat-button (click)=\"stepper.reset()\" aria-label=\"Reset form\">Reset</button>\r\n }\r\n\r\n </div>\r\n </div>\r\n } @placeholder {\r\n <div class=\"step-placeholder\">\r\n <mat-spinner diameter=\"24\" aria-label=\"Loading step content\" />\r\n </div>\r\n }\r\n\r\n </mat-step>\r\n }\r\n }\r\n </mat-stepper>\r\n <section class=\"empty-state-section add-section-hint\">\r\n <p class=\"empty-state-text\">A form section helps organize related input fields together.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Section\"</strong> button below to create a new section.</p>\r\n </section>\r\n <mat-card-actions class=\"sticky-actions\">\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"addSection()\" color=\"accent\" mat-flat-button aria-label=\"Add new section\">\r\n <mat-icon>add</mat-icon>\r\n Add Section\r\n </button>\r\n <span class=\"spacer\"></span>\r\n </mat-card-actions>\r\n <!-- Defer the footer toolbar until after the main form is loaded -->\r\n @defer (on idle; prefetch on viewport) {\r\n <footer><mat-toolbar class=\"submission-toolbar\" role=\"toolbar\" aria-label=\"Form submission actions\">\r\n <span class=\"submission-status\" role=\"status\">\r\n {{ getSubmissionStatus$ | async }}\r\n </span>\r\n <button mat-raised-button color=\"primary\" [disabled]=\"true\" aria-label=\"Submit form\">\r\n <span>\r\n {{ formSubmissionMessage()}}\r\n </span>\r\n @if (submittingForm) {\r\n <mat-spinner diameter=\"10\"></mat-spinner>\r\n }\r\n\r\n </button>\r\n </mat-toolbar>\r\n </footer>\r\n } @placeholder {\r\n <!-- Simple placeholder for the footer that maintains layout -->\r\n <footer>\r\n <div class=\"submission-toolbar-placeholder\"></div>\r\n </footer>\r\n }\r\n\r\n</mat-card>\r\n<mat-menu #sectionMenu=\"matMenu\">\r\n <ng-template matMenuContent let-sectionId=\"sectionId\" let-columns=\"columns\">\r\n <!-- <button mat-menu-item [matMenuTriggerFor]=\"sectionType\">\r\n <mat-icon> disabled_visible</mat-icon>\r\n Set visibility type</button> -->\r\n @if (sectionIncludesDefault(columns) === false) {\r\n <button (click)=\"deleteSection(sectionId, false)\" matTooltip=\"Deletes this section and all its inputs\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section</span>\r\n </button>\r\n <button (click)=\"deleteSection(sectionId, true)\" matTooltip=\"Deletes all inputs in this section\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete_sweep</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section inputs</span>\r\n </button>\r\n }\r\n\r\n <button (click)=\"toggleSectionReports(sectionId)\" mat-menu-item>\r\n <mat-icon>leaderboard</mat-icon>\r\n {{ openSectionReports[sectionId] ? 'Close report' : 'Section report' }}</button>\r\n </ng-template>\r\n</mat-menu>\r\n<mat-menu #sectionType=\"matMenu\">\r\n <button mat-menu-item>\r\n <mat-icon>visibility</mat-icon>\r\n view only</button>\r\n <button mat-menu-item>\r\n <mat-icon>visibility_off</mat-icon>\r\n system</button>\r\n <button mat-menu-item>\r\n <mat-icon>edit</mat-icon>\r\n user edit</button>\r\n</mat-menu>\r\n<mat-menu #moveInput=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\" let-sectionId=\"sectionId\">\r\n @for (section of ( selectFormStepsComputed); track section.sectionId) {\r\n <button [disabled]=\"section.sectionId === sectionId\" (click)=\"moveInputToSection(id,section.sectionId)\"\r\n mat-menu-item>\r\n <mat-icon>folder</mat-icon>\r\n {{section.label || 'Untitled section'}}\r\n </button>\r\n }\r\n\r\n </ng-template>\r\n</mat-menu>\r\n\r\n", styles: [".mainCard{margin:0 auto;min-height:45vh;box-shadow:0 2px 8px #00000014;max-width:768px;padding:1rem;border-radius:12px;background:var(--mat-sys-surface-container, var(--mdc-elevated-card-container-color, #fef7ff))}@media(prefers-color-scheme:dark){.mainCard{box-shadow:0 1px 3px #0000004d}}.loading-container{display:flex;justify-content:center;align-items:center;padding:1.5rem;min-height:12rem}.inEditCol{box-shadow:var(--mdc-elevated-card-container-elevation);border:1px solid var(--mat-sys-primary, #6750a4)!important}.inputCard{box-shadow:none}.cancelProgress{height:24px!important;width:24px!important}.delete-countdown{display:flex;align-items:center;gap:.25rem;padding:.5rem}.numbers{position:absolute!important;right:0}mat-vertical-stepper{margin:.5rem}.list{min-height:60px;display:block}.box{padding:.5rem;cursor:move}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.box:last-child{border:none}.list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.custom-placeholder{background:var(--mat-sys-surface-container-highest, #e8e0ec);border:3px dotted var(--mat-sys-outline, #79747e);min-width:100%;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.section-title-input{border:none;background-color:transparent;font-size:.875rem;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f);padding:.75rem 0;outline:none;width:calc(100% - 64px);transition:border-color .15s,box-shadow .15s}.section-title-input:focus{border-bottom:1px solid var(--mat-sys-primary, #6750a4);box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary, #6750a4) 25%,transparent)}.inputElement:focus{box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary, #6750a4) 25%,transparent)}.headerToolbar{position:sticky;top:0;min-width:100%;background:var(--mdc-elevated-card-container-color)}::ng-deep mat-step-header .mat-step-label{width:100%}.error{color:var(--mat-sys-error, #b3261e);display:flex;align-items:center}.error-list{padding-left:1.75rem;margin:.25rem 0}.error-item{color:var(--mat-sys-error, #b3261e);font-size:.75rem}.empty-state-section{text-align:center;padding:1rem 1.5rem}.empty-state-text{font-size:.875rem;color:var(--mat-sys-on-surface-variant, #49454f);margin:0 0 .5rem}.empty-state-hint{font-size:.8125rem;color:var(--mat-sys-on-surface-variant, #49454f);margin:0 0 1rem}.empty-state-actions{margin-top:1rem}.add-section-hint{padding-top:1.5rem}.step-placeholder{padding:3.125rem;display:flex;justify-content:center;align-items:center;text-align:center}.step-actions{display:flex;gap:.75rem;margin-top:1rem;padding-top:1rem}.navigation-button{min-height:2.25rem}.sticky-actions{position:sticky;bottom:0;background:var(--mat-sys-surface-container, var(--mdc-elevated-card-container-color))}.submission-toolbar{z-index:1000;background:color-mix(in srgb,var(--mat-sys-surface, #fef7ff) 95%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:var(--mat-divider-width) solid var(--mat-divider-color);padding:1rem 1.5rem;display:flex;justify-content:flex-end;align-items:center;gap:1rem}@media(prefers-color-scheme:dark){.submission-toolbar{background:color-mix(in srgb,var(--mat-sys-surface) 95%,transparent)}}.submission-status{font-size:.75rem;opacity:.87;display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatModulesModule }, { kind: "directive", type: i1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: i2$1.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i2$1.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i2$1.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["disableRipple", "color", "labelPosition", "headerPosition", "headerPrefix", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7$1.TourAnchorMatMenuDirective, selector: "[tourAnchor]", inputs: ["tourAnchor"] }, { kind: "pipe", type: i2$2.AsyncPipe, name: "async" }], deferBlockDependencies: [() => [i1.CdkDropList, i1.CdkDrag, i1.CdkDragPlaceholder, i2.MatButton, i2.MatIconButton, i3.MatCard, i3.MatCardActions, i2$1.MatStepperNext, i2$1.MatStepperPrevious, i3$1.MatIcon, i6.MatMenuTrigger, i7.MatProgressSpinner, i4.MatTooltip, import('./ngx-t-forms-ngx-t-forms-D9qmig6g.mjs').then(function (n) { return n.a4; }).then(m => m.TFormInputComponent), i1$1.NgControlStatusGroup, i1$1.FormGroupDirective, import('./ngx-t-forms-section-report.component-12-KdKT6.mjs').then(m => m.SectionReportComponent), i7$1.TourAnchorMatMenuDirective, i2$2.AsyncPipe], () => [i2.MatButton, i7.MatProgressSpinner, i5.MatToolbar, i2$2.AsyncPipe]] }); }
252
- }
253
- i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.1.5", ngImport: i0, type: FormSectionStepperComponent, resolveDeferredDeps: () => [import('./ngx-t-forms-ngx-t-forms-D9qmig6g.mjs').then(function (n) { return n.a4; }).then(m => m.TFormInputComponent), import('./ngx-t-forms-section-report.component-12-KdKT6.mjs').then(m => m.SectionReportComponent)], resolveMetadata: (TFormInputComponent, SectionReportComponent) => ({ decorators: [{
254
- type: Component,
255
- args: [{ selector: 'app-form-section-stepper', standalone: true, imports: [
256
- CommonModule,
257
- MatModulesModule,
258
- TFormInputComponent,
259
- ReactiveFormsModule,
260
- FormsModule,
261
- SectionReportComponent,
262
- ...TourMatMenu
263
- ], template: "<mat-card class=\"mainCard\" appearance=\"raised\">\r\n\r\n @if (loadingForm$ | async) {\r\n <div class=\"loading-container\" role=\"status\" aria-live=\"polite\">\r\n <mat-spinner diameter=\"48\" aria-label=\"Loading form\" />\r\n </div>\r\n }\r\n <mat-stepper [style.display]=\"(loadingForm$ | async) ? 'none' : 'block'\" #stepper class=\"form-stepper\"\r\n orientation=\"vertical\" [linear]=\"!isEditable\" aria-label=\"Form sections stepper\" [animationDuration]=\"'300'\"\r\n cdkDropList #formSections=\"cdkDropList\" [cdkDropListData]=\"selectFormStepsComputed\"\r\n (cdkDropListDropped)=\"drop($event)\" (selectionChange)=\"handleStepChange($event)\">\r\n\r\n @for (step of selectFormStepsComputed; track step.sectionId) {\r\n @if (step.sectionForm || getPlaceHolerForSection(step.sectionId)) {\r\n <mat-step [stepControl]=\"step.sectionForm || getPlaceHolerForSection(step.sectionId)\"\r\n [completed]=\"step.sectionIsSeen && !step.sectionIsInvalid\" [editable]=\"isEditable\"\r\n [errorMessage]=\"step.sectionFormErrorMessage||''\" [state]=\"getStepState(step,$index)\"\r\n [hasError]=\"!step.sectionForm?.valid && !!step.sectionForm?.touched\">\r\n <ng-template matStepLabel>\r\n <div cdkDrag class=\"step-label-container\" [attr.aria-label]=\"'Section ' + step.label\">\r\n <span class=\"step-label-text\">\r\n <input (input)=\"handleInput($event, step.sectionId)\" class=\"section-title-input\" matInput\r\n (keydown.space)=\"onSpaceKey($event, step.sectionId)\" placeholder=\"Enter section title\"\r\n [value]=\"step.label\" aria-label=\"Section title\">\r\n </span>\r\n @if (step.sectionIsSeen) {\r\n <mat-icon [class.error]=\"step.sectionIsInvalid\"\r\n [attr.aria-label]=\"step.sectionIsInvalid ? 'Section has errors' : 'Section completed'\">\r\n {{step.sectionIsSeen}}\r\n </mat-icon>\r\n }\r\n @if ((step)?.activeSectionHasTour && !!step.isActive) {\r\n <span class=\"tour-trigger\">\r\n <button tourAnchor=\"Form-Tour-trigger\" (click)=\"startTour(step.sectionId)\" matTooltip=\"Start section tour\"\r\n mat-flat-button>\r\n <mat-icon>tour</mat-icon>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"spacer\"></span>\r\n\r\n @if (!!inputWillBeRemovedIn(step.sectionId)) {\r\n <button \r\n (mouseover)=\"overId = step.sectionId\" (mouseout)=\"overId = null\"\r\n (click)=\"deleteSection(step.sectionId)\" color=\"warn\" mat-stroked-button\r\n [attr.aria-label]=\"overId === step.sectionId ? 'Cancel section deletion' : 'Section deleting in ' + inputWillBeRemovedIn(step.sectionId) + ' seconds'\">\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(step.sectionId)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n {{ overId === step.sectionId ? 'Click to cancel' : 'Deleting in' }}\r\n {{ inputWillBeRemovedIn(step.sectionId) }}\r\n </div>\r\n </button>\r\n }\r\n \r\n @if(canRefreshSection(step.sectionId)&& step.isActive){\r\n <button mat-icon-button\r\n style=\"margin-right: 8px;\"\r\n matTooltip=\"Click to refresh this section.\"\r\n class=\"input-sync-button\"\r\n (click)=\"refreshASection(step.sectionId)\" >\r\n <mat-icon style=\"color:var(--mat-sys-primary)\">sync</mat-icon>\r\n </button>\r\n }\r\n <button (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerData]=\"{ sectionId: step.sectionId, columns: step.columns }\" [matMenuTriggerFor]=\"sectionMenu\"\r\n color=\"primary\" mat-icon-button aria-label=\"Section options menu\">\r\n <mat-icon>more_horiz</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n\r\n @defer (on viewport; prefetch on idle) {\r\n <div class=\"step-content\">\r\n @if (!openSectionReports[step.sectionId]) {\r\n <div (cdkDropListDropped)=\"dropItems($event,step.sectionId)\" [cdkDropListData]=\"step.columns\" cdkDropList\r\n #InputList=\"cdkDropList\" class=\"row form-section\">\r\n @for (col of step.columns; track col.id) {\r\n <mat-card cdkDrag (cdkDragStarted)=\"dragging = true\" (cdkDragReleased)=\"dragging = false\"\r\n [class.inEditCol]=\"(selectInputInEditId$ | async) === col.id\"\r\n [class]=\"'box inputCard col-md-' + (dragging ? '12' : col.colSize)\" (mouseover)=\"activeInput = col.id\">\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n @if (step.sectionForm) {\r\n <lib-t-form-input [editorMode]=\"true\" [tourAnchor]=\"col.id\" (valueChange)=\"updateValue(col.id,$event)\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\" [inputConfig]=\"col\" [formGroup]=\"step.sectionForm\"\r\n [attr.aria-label]=\"col?.label || ''\">\r\n </lib-t-form-input>\r\n }\r\n\r\n\r\n\r\n @if (col.inputConfigErrors.length > 0) {\r\n <div class=\"error\">\r\n <ul class=\"error-list\">\r\n @for (error of col.inputConfigErrors; track error.key + error.message) {\r\n <li class=\"error-item\">{{ error.message }}</li>\r\n }\r\n </ul>\r\n\r\n </div>\r\n }\r\n @if (activeInput === col.id) {\r\n <mat-card-actions>\r\n\r\n <button color=\"primary\" [matTooltip]=\"'Edit ' + col.label + ' input'\" (click)=\"editInput(col)\"\r\n mat-icon-button aria-label=\"Edit input\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Move this input to another section'\" [matMenuTriggerFor]=\"moveInput\"\r\n [matMenuTriggerData]=\"col\" mat-icon-button aria-label=\"Move input to another section\">\r\n <mat-icon>drive_file_move</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Clone form input'\" (click)=\"cloneCopyFormInput(col.id)\" mat-icon-button\r\n aria-label=\"Clone input\">\r\n <mat-icon>file_copy</mat-icon>\r\n </button>\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n\r\n\r\n @if (!!inputWillBeRemovedIn(col.id)) {\r\n <button (mouseover)=\"overId = col.id\" (mouseout)=\"overId = null\" (click)=\"removeInput(col)\" color=\"warn\"\r\n mat-stroked-button>\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(col.id)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n\r\n {{ overId === col.id ? 'Click to cancel' : 'Deleting in' }} {{ inputWillBeRemovedIn(col.id) }}\r\n </div>\r\n\r\n </button>\r\n\r\n } @else if (col.systemDefault !== true) {\r\n <button color=\"warn\" [matTooltip]=\"'Delete ' + col.label + ' input'\" (click)=\"removeInput(col)\"\r\n mat-icon-button aria-label=\"Delete input\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n\r\n\r\n @if (activeInput === col.id && col.element ==='multipleInput') {\r\n\r\n <button matTooltip=\"Add input to list control form\" (click)=\"addMultipleFormInput(col.sectionId,col.id)\"\r\n color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n @if (activeInput === col.id && col.element === 'mscoaSelection') {\r\n <button matTooltip=\"Extend SCOA Segments with additional inputs\"\r\n (click)=\"addInputToScoaSelection(col.sectionId, col.id)\" color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n\r\n </mat-card-actions>\r\n }\r\n </mat-card>\r\n }\r\n </div>\r\n <section class=\"empty-state-section\">\r\n <p class=\"empty-state-text\">Add form fields to this section to collect information.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Input\"</strong> button below to create a new form field.</p>\r\n <div class=\"empty-state-actions\">\r\n <button matTooltip=\"Add an input to this section\" (click)=\"addNewInput(step.sectionId)\" color=\"accent\"\r\n mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Input\r\n </button>\r\n </div>\r\n </section>\r\n\r\n\r\n } @else {\r\n <app-section-report [sectionId]=\"step.sectionId\"></app-section-report>\r\n }\r\n <div class=\"step-actions\">\r\n @if (!$first) {\r\n <button mat-button matStepperPrevious type=\"button\" class=\"navigation-button\"\r\n [attr.aria-label]=\"'Go back to ' + getPreviousStepLabel()\">\r\n\r\n Back\r\n </button>\r\n }\r\n @if (!$last) {\r\n <button mat-flat-button matStepperNext color=\"primary\" type=\"button\" class=\"navigation-button\"\r\n matTooltip=\"Continue to next section\" [attr.aria-label]=\"'Continue to ' + getNextStepLabel()\">\r\n Next\r\n </button>\r\n }\r\n @if ($last) {\r\n <button mat-button (click)=\"stepper.reset()\" aria-label=\"Reset form\">Reset</button>\r\n }\r\n\r\n </div>\r\n </div>\r\n } @placeholder {\r\n <div class=\"step-placeholder\">\r\n <mat-spinner diameter=\"24\" aria-label=\"Loading step content\" />\r\n </div>\r\n }\r\n\r\n </mat-step>\r\n }\r\n }\r\n </mat-stepper>\r\n <section class=\"empty-state-section add-section-hint\">\r\n <p class=\"empty-state-text\">A form section helps organize related input fields together.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Section\"</strong> button below to create a new section.</p>\r\n </section>\r\n <mat-card-actions class=\"sticky-actions\">\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"addSection()\" color=\"accent\" mat-flat-button aria-label=\"Add new section\">\r\n <mat-icon>add</mat-icon>\r\n Add Section\r\n </button>\r\n <span class=\"spacer\"></span>\r\n </mat-card-actions>\r\n <!-- Defer the footer toolbar until after the main form is loaded -->\r\n @defer (on idle; prefetch on viewport) {\r\n <footer><mat-toolbar class=\"submission-toolbar\" role=\"toolbar\" aria-label=\"Form submission actions\">\r\n <span class=\"submission-status\" role=\"status\">\r\n {{ getSubmissionStatus$ | async }}\r\n </span>\r\n <button mat-raised-button color=\"primary\" [disabled]=\"true\" aria-label=\"Submit form\">\r\n <span>\r\n {{ formSubmissionMessage()}}\r\n </span>\r\n @if (submittingForm) {\r\n <mat-spinner diameter=\"10\"></mat-spinner>\r\n }\r\n\r\n </button>\r\n </mat-toolbar>\r\n </footer>\r\n } @placeholder {\r\n <!-- Simple placeholder for the footer that maintains layout -->\r\n <footer>\r\n <div class=\"submission-toolbar-placeholder\"></div>\r\n </footer>\r\n }\r\n\r\n</mat-card>\r\n<mat-menu #sectionMenu=\"matMenu\">\r\n <ng-template matMenuContent let-sectionId=\"sectionId\" let-columns=\"columns\">\r\n <!-- <button mat-menu-item [matMenuTriggerFor]=\"sectionType\">\r\n <mat-icon> disabled_visible</mat-icon>\r\n Set visibility type</button> -->\r\n @if (sectionIncludesDefault(columns) === false) {\r\n <button (click)=\"deleteSection(sectionId, false)\" matTooltip=\"Deletes this section and all its inputs\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section</span>\r\n </button>\r\n <button (click)=\"deleteSection(sectionId, true)\" matTooltip=\"Deletes all inputs in this section\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete_sweep</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section inputs</span>\r\n </button>\r\n }\r\n\r\n <button (click)=\"toggleSectionReports(sectionId)\" mat-menu-item>\r\n <mat-icon>leaderboard</mat-icon>\r\n {{ openSectionReports[sectionId] ? 'Close report' : 'Section report' }}</button>\r\n </ng-template>\r\n</mat-menu>\r\n<mat-menu #sectionType=\"matMenu\">\r\n <button mat-menu-item>\r\n <mat-icon>visibility</mat-icon>\r\n view only</button>\r\n <button mat-menu-item>\r\n <mat-icon>visibility_off</mat-icon>\r\n system</button>\r\n <button mat-menu-item>\r\n <mat-icon>edit</mat-icon>\r\n user edit</button>\r\n</mat-menu>\r\n<mat-menu #moveInput=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\" let-sectionId=\"sectionId\">\r\n @for (section of ( selectFormStepsComputed); track section.sectionId) {\r\n <button [disabled]=\"section.sectionId === sectionId\" (click)=\"moveInputToSection(id,section.sectionId)\"\r\n mat-menu-item>\r\n <mat-icon>folder</mat-icon>\r\n {{section.label || 'Untitled section'}}\r\n </button>\r\n }\r\n\r\n </ng-template>\r\n</mat-menu>\r\n\r\n", styles: [".mainCard{margin:0 auto;min-height:45vh;box-shadow:0 2px 8px #00000014;max-width:768px;padding:1rem;border-radius:12px;background:var(--mat-sys-surface-container, var(--mdc-elevated-card-container-color, #fef7ff))}@media(prefers-color-scheme:dark){.mainCard{box-shadow:0 1px 3px #0000004d}}.loading-container{display:flex;justify-content:center;align-items:center;padding:1.5rem;min-height:12rem}.inEditCol{box-shadow:var(--mdc-elevated-card-container-elevation);border:1px solid var(--mat-sys-primary, #6750a4)!important}.inputCard{box-shadow:none}.cancelProgress{height:24px!important;width:24px!important}.delete-countdown{display:flex;align-items:center;gap:.25rem;padding:.5rem}.numbers{position:absolute!important;right:0}mat-vertical-stepper{margin:.5rem}.list{min-height:60px;display:block}.box{padding:.5rem;cursor:move}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.box:last-child{border:none}.list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.custom-placeholder{background:var(--mat-sys-surface-container-highest, #e8e0ec);border:3px dotted var(--mat-sys-outline, #79747e);min-width:100%;min-height:60px;transition:transform .25s cubic-bezier(0,0,.2,1)}.section-title-input{border:none;background-color:transparent;font-size:.875rem;font-weight:600;color:var(--mat-sys-on-surface, #1c1b1f);padding:.75rem 0;outline:none;width:calc(100% - 64px);transition:border-color .15s,box-shadow .15s}.section-title-input:focus{border-bottom:1px solid var(--mat-sys-primary, #6750a4);box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary, #6750a4) 25%,transparent)}.inputElement:focus{box-shadow:0 0 0 2px color-mix(in srgb,var(--mat-sys-primary, #6750a4) 25%,transparent)}.headerToolbar{position:sticky;top:0;min-width:100%;background:var(--mdc-elevated-card-container-color)}::ng-deep mat-step-header .mat-step-label{width:100%}.error{color:var(--mat-sys-error, #b3261e);display:flex;align-items:center}.error-list{padding-left:1.75rem;margin:.25rem 0}.error-item{color:var(--mat-sys-error, #b3261e);font-size:.75rem}.empty-state-section{text-align:center;padding:1rem 1.5rem}.empty-state-text{font-size:.875rem;color:var(--mat-sys-on-surface-variant, #49454f);margin:0 0 .5rem}.empty-state-hint{font-size:.8125rem;color:var(--mat-sys-on-surface-variant, #49454f);margin:0 0 1rem}.empty-state-actions{margin-top:1rem}.add-section-hint{padding-top:1.5rem}.step-placeholder{padding:3.125rem;display:flex;justify-content:center;align-items:center;text-align:center}.step-actions{display:flex;gap:.75rem;margin-top:1rem;padding-top:1rem}.navigation-button{min-height:2.25rem}.sticky-actions{position:sticky;bottom:0;background:var(--mat-sys-surface-container, var(--mdc-elevated-card-container-color))}.submission-toolbar{z-index:1000;background:color-mix(in srgb,var(--mat-sys-surface, #fef7ff) 95%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:var(--mat-divider-width) solid var(--mat-divider-color);padding:1rem 1.5rem;display:flex;justify-content:flex-end;align-items:center;gap:1rem}@media(prefers-color-scheme:dark){.submission-toolbar{background:color-mix(in srgb,var(--mat-sys-surface) 95%,transparent)}}.submission-status{font-size:.75rem;opacity:.87;display:flex;align-items:center}\n"] }]
264
- }], ctorParameters: null, propDecorators: { stepper: [{
265
- type: ViewChild,
266
- args: ['stepper']
267
- }] } }) });
268
-
269
- export { FormSectionStepperComponent };
270
- //# sourceMappingURL=ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/form-section-stepper/form-section-stepper.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/form-section-stepper/form-section-stepper.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { filter, map, Observable, Subject, take, takeUntil, tap, timer } from 'rxjs';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { StepperSelectionEvent, StepState } from '@angular/cdk/stepper';;\r\nimport { MatStepper } from '@angular/material/stepper';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\nimport { TFormInputComponent } from '../../..';\r\n\r\nimport { FormTowerControllerService } from '../../../../services/core/t-form-tower-controller/form-tower-controller.service';\r\nimport { FormBuilderFunctions, FormColumnInputs, IMultipleInputCal, ITowerFormSteps, validateFormColumnInputs } from 'ngx-t-forms-types';\r\nimport { _isEqual } from '../../../../shared/functions/isEqual';\r\nimport { TourMatMenu } from 'ngx-ui-tour-md-menu';\r\nimport { getSubmissionStatusFn } from '../../../../services/core/t-form-tower-controller/functions/getSubmissionStatus';\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { SectionReportComponent } from '../section-report/section-report.component';\r\nimport { TourManagerService } from '../../../../services/core/tour/tour-manager.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-form-section-stepper',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatModulesModule,\r\n TFormInputComponent,\r\n\r\n ReactiveFormsModule,\r\n FormsModule,\r\n SectionReportComponent,\r\n ...TourMatMenu\r\n ],\r\n templateUrl: './form-section-stepper.component.html',\r\n styleUrl: './form-section-stepper.component.scss',\r\n\r\n})\r\nexport class FormSectionStepperComponent extends FormTowerControllerService implements OnInit {\r\n\r\n\r\n /**\r\n * Handles the key down event and opens the application log if the key combination is pressed.\r\n * @param event The keyboard event object.\r\n */\r\n onKeyDown(event: KeyboardEvent) {\r\n if (event.ctrlKey && event.key === 'z') {\r\n // Handle the key press combination here\r\n this.revertBackHistory()\r\n }\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n //initialize the form with the initial values\r\n this.store.registerFormChangeFn(this.initialize)\r\n this.registerFormInputConfigChangeFn((inputId, config) => {\r\n this.store.actions.updateFormInputConfigFromTower(\r\n {\r\n inputId,\r\n config\r\n }\r\n )\r\n })\r\n this.store.selectors.selectFormInEdit$.pipe(\r\n take(1),\r\n filter(form => form !== null && form !== undefined),\r\n tap(form => this.initialize(form.form))\r\n ).subscribe()\r\n }\r\n\r\n private store: FormsStoreService = inject(FormsStoreService)\r\n loadingForm$ = this.store.selectors.selectLoadingForm$\r\n selectInputInEditId$ = this.store.selectors.selectInputInEditId$\r\n isEditable = true\r\n @ViewChild('stepper') stepper: MatStepper | undefined;\r\n\r\n\r\n\r\n get formBuilderFunctions() {\r\n return {\r\n getLatestAccountTree: () => this.NGX_T_FORMS_CONFIG.formBuilder.getScoaTree(),\r\n getSCOAAccount: (SCOAAccount: string) => this.NGX_T_FORMS_CONFIG.formBuilder.getSCOAAccount(SCOAAccount),\r\n multipleInputToggleForm: this.toggleMultipleInput.bind(this),\r\n multipleInputSaveForm: this.saveMultipleInputForm.bind(this),\r\n editInput: this.editInput.bind(this),\r\n deleteInput: this.formDeleteInput.bind(this),\r\n addFunction: this.addMultipleInputValueCalculationFunction.bind(this),\r\n reorderItems: this.reorderMultipleInputItems.bind(this),\r\n multipleInputToggleLabel: this.multipleInputToggleLabel.bind(this),\r\n multipleInputEditRow: this.multipleInputEditRow.bind(this),\r\n multipleInputDuplicateRow: this.multipleInputDuplicateRow.bind(this),\r\n\r\n } as unknown as FormBuilderFunctions\r\n }\r\n getPreviousStepLabel(): string | undefined {\r\n\r\n if (this.stepper === undefined) return ''\r\n const currentIndex = this.stepper?.selectedIndex;\r\n if (currentIndex > 0) {\r\n return this.selectFormSteps()?.[currentIndex - 1]?.label;\r\n }\r\n return '';\r\n }\r\n\r\n getNextStepLabel(): string | undefined {\r\n if (this.stepper === undefined) return ''\r\n const currentIndex = this.stepper?.selectedIndex;\r\n const steps = this.selectFormSteps();\r\n if (!steps) return ''\r\n if (currentIndex < steps.length - 1) {\r\n return steps[currentIndex + 1]?.label;\r\n }\r\n return '';\r\n }\r\n getStepState(step: any, index: number): StepState {\r\n const activeStep = this.stepper?.selectedIndex === index;\r\n if (activeStep) return 'edit';\r\n if (step.sectionForm?.touched && !step.sectionForm?.valid) return 'error'; // Show error state for invalid touched forms\r\n if (step.sectionForm?.valid) return 'done'; // Show done state for valid forms\r\n\r\n return 'number';\r\n }\r\n activeInput: string | undefined\r\n get getSubmissionStatus$(): Observable<string> {\r\n const progress = this.formProgress() || 0;\r\n const steps = this.selectFormSteps();\r\n return this.loadingForm$.pipe(\r\n map(loading =>\r\n getSubmissionStatusFn(this.stepper, this.mainForm, progress, steps, loading)\r\n )\r\n )\r\n }\r\n dragging: boolean = false\r\n\r\n drop = (event: any) => this.store.actionsFormBuilder.handleSectionDragDrop(event)\r\n dropItems = (event: any, sectionId: string) => this.store.actionsFormBuilder.handleInputDragDrop(event, sectionId)\r\n formDeleteSection = (sectionId: string) => this.store.actionsFormBuilder.formDeleteSection(sectionId)\r\n formDeleteSectionInputs = (sectionId: string) => this.store.actionsFormBuilder.formDeleteSectionInputs(sectionId)\r\n addMultipleFormInput = (sectionId: string, multipleInputId: string) => this.store.actionsFormBuilder.addMultipleFormInput(sectionId, multipleInputId)\r\n moveInputToSection = (inputId: string, targetSectionId: string) => this.store.actionsFormBuilder.moveInputToSection(inputId, targetSectionId)\r\n reorderMultipleInputItems = (event: CdkDragDrop<FormColumnInputs[], any, any>, multipleInputId: string) => this.store.actionsFormBuilder.reorderMultipleInputItems(event, multipleInputId)\r\n cloneCopyFormInput = (inputId: string) => this.store.actionsFormBuilder.cloneCopyFormInput(inputId)\r\n\r\n multipleInputToggleLabel = (item: FormColumnInputs) => this.store.actionsFormBuilder.multipleInputToggleLabel(item)\r\n editInput = (item: FormColumnInputs) => this.store.actionsFormBuilder.editInput(item)\r\n addMultipleInputValueCalculationFunction = (item: IMultipleInputCal, multipleInputId: string | undefined) => this.store.actionsFormBuilder.addMultipleInputValueCalculationFunction(item, multipleInputId)\r\n setActiveSection = ($event: StepperSelectionEvent) => this.setMatActiveStepper($event.selectedIndex)\r\n addInputToScoaSelection = (sectionId: string, scoaInputId: string) => this.store.actionsFormBuilder.addInputToScoaSelection(sectionId, scoaInputId)\r\n addNewInput = (sectionId: string) => this.store.actionsFormBuilder.saveInput(sectionId);\r\n\r\n addSection = (): void => this.store.actionsFormBuilder.handleAddSection()\r\n setMatActiveStepper = (index: number) => setTimeout(() => {\r\n if (this.stepper === undefined) return;\r\n this.stepper.selectedIndex = index\r\n }, 0);\r\n mouseOverSection: string | null = null\r\n handleInput = (event: Event, sectionId: string) => {\r\n const inputValue = (event.target as HTMLInputElement).value;\r\n this.store.actionsFormBuilder?.stepTitleChangeStep(sectionId, inputValue);\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n get selectFormStepsComputed(): ITowerFormSteps[] {\r\n const steps = this.selectFormSteps().map(\r\n (step) => (\r\n {\r\n ...step,\r\n columns: step.columns.map(\r\n (col) => {\r\n return ({\r\n ...col,\r\n\r\n inputConfigErrors: validateFormColumnInputs(col)\r\n\r\n })\r\n }\r\n )\r\n\r\n }\r\n )\r\n )\r\n\r\n return steps\r\n }\r\n overId: string | null = null\r\n\r\n countdownSeconds: {\r\n [key: string]:\r\n {\r\n count: number | null,\r\n stop$: Subject<void>,\r\n deleteInputs: boolean\r\n\r\n\r\n }\r\n } = {}\r\n stopDeletion(id: string) {\r\n if (this.countdownSeconds[id]) {\r\n this.countdownSeconds[id]?.stop$.next();\r\n delete this.countdownSeconds[id];\r\n }\r\n }\r\n inputWillBeRemovedIn = (id: string) => this.countdownSeconds[id]?.count\r\n removeInput(item: FormColumnInputs) {\r\n if (this.countdownSeconds[item.id]) {\r\n this.stopDeletion(item.id);\r\n return;\r\n }\r\n\r\n this.countdownSeconds[item.id] = {\r\n count: 5,\r\n stop$: new Subject<void>(),\r\n deleteInputs: false\r\n };\r\n\r\n const countdown$ = timer(0, 1000).pipe(\r\n tap((secondsElapsed) => {\r\n const data = this.countdownSeconds[item.id];\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const remainingTime = 5 - secondsElapsed;\r\n if (remainingTime <= 0) {\r\n this.formDeleteInput(item)\r\n this.stopDeletion(item.id);\r\n // Stop and remove timer\r\n // Actual deletion logic here, e.g., remove the element by id\r\n // document.getElementById(id)?.remove();\r\n } else {\r\n data.count = remainingTime;\r\n }\r\n }),\r\n takeUntil(this.countdownSeconds[item.id]?.stop$!)\r\n );\r\n\r\n countdown$?.subscribe({\r\n complete: () => {}\r\n });\r\n }\r\n deleteSection(sectionId: string | null, deleteInputs: boolean = false) {\r\n if (!sectionId) {\r\n return;\r\n }\r\n if (this.countdownSeconds[sectionId]) {\r\n this.stopDeletion(sectionId);\r\n return;\r\n }\r\n\r\n this.countdownSeconds[sectionId] = {\r\n count: 5,\r\n stop$: new Subject<void>(),\r\n deleteInputs: deleteInputs\r\n };\r\n\r\n const countdown$ = timer(0, 1000).pipe(\r\n tap((secondsElapsed) => {\r\n const data = this.countdownSeconds[sectionId];\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const remainingTime = 5 - secondsElapsed;\r\n if (remainingTime <= 0) {\r\n if (data.deleteInputs) {\r\n this.formDeleteSectionInputs(sectionId)\r\n } else {\r\n this.formDeleteSection(sectionId)\r\n }\r\n\r\n this.stopDeletion(sectionId);\r\n // Stop and remove timer\r\n // Actual deletion logic here, e.g., remove the element by id\r\n // document.getElementById(id)?.remove();\r\n } else {\r\n data.count = remainingTime;\r\n }\r\n }),\r\n takeUntil(this.countdownSeconds[sectionId]?.stop$!)\r\n );\r\n\r\n countdown$?.subscribe({\r\n complete: () => {}\r\n });\r\n }\r\n\r\n getPlaceHolerForSection = (sectionId: string): any => this.store.sectionPlaceholder[sectionId]\r\n formDeleteInput = (item: FormColumnInputs) => this.store.actionsFormBuilder.formDeleteInput(item)\r\n openSectionReports: Record<string, boolean> = {}\r\n toggleSectionReports = (sectionId: string) => this.openSectionReports[sectionId] = !this.openSectionReports[sectionId]\r\n ref = inject(ChangeDetectorRef)\r\n refresh() {\r\n // trigger angular a change detection cycle manually\r\n this.ref.markForCheck();\r\n this.ref.detectChanges();\r\n\r\n }\r\n sectionIncludesDefault(columns: FormColumnInputs[]): boolean {\r\n return columns.some((col) => col.systemDefault);\r\n }\r\n tourManagerService = inject(TourManagerService)\r\n startTour(sectionId: string): void {\r\n const tourOptions = this.selectAllFormTours().filter((step) => step.sectionId === sectionId)\r\n\r\n this.tourManagerService.startTourByOption(tourOptions)\r\n }\r\n\r\n onSpaceKey(event: Event, sectionId: string) {\r\n const inputValue = (event.target as HTMLInputElement).value;\r\n this.store.actionsFormBuilder?.stepTitleChangeStep(sectionId, inputValue + ' ');\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\nrefreshASection = (sectionId: string) => {\r\n this.refreshSection(sectionId).pipe(take(1)).subscribe()\r\n}\r\n}\r\n","<mat-card class=\"mainCard\" appearance=\"raised\">\r\n\r\n @if (loadingForm$ | async) {\r\n <div class=\"loading-container\" role=\"status\" aria-live=\"polite\">\r\n <mat-spinner diameter=\"48\" aria-label=\"Loading form\" />\r\n </div>\r\n }\r\n <mat-stepper [style.display]=\"(loadingForm$ | async) ? 'none' : 'block'\" #stepper class=\"form-stepper\"\r\n orientation=\"vertical\" [linear]=\"!isEditable\" aria-label=\"Form sections stepper\" [animationDuration]=\"'300'\"\r\n cdkDropList #formSections=\"cdkDropList\" [cdkDropListData]=\"selectFormStepsComputed\"\r\n (cdkDropListDropped)=\"drop($event)\" (selectionChange)=\"handleStepChange($event)\">\r\n\r\n @for (step of selectFormStepsComputed; track step.sectionId) {\r\n @if (step.sectionForm || getPlaceHolerForSection(step.sectionId)) {\r\n <mat-step [stepControl]=\"step.sectionForm || getPlaceHolerForSection(step.sectionId)\"\r\n [completed]=\"step.sectionIsSeen && !step.sectionIsInvalid\" [editable]=\"isEditable\"\r\n [errorMessage]=\"step.sectionFormErrorMessage||''\" [state]=\"getStepState(step,$index)\"\r\n [hasError]=\"!step.sectionForm?.valid && !!step.sectionForm?.touched\">\r\n <ng-template matStepLabel>\r\n <div cdkDrag class=\"step-label-container\" [attr.aria-label]=\"'Section ' + step.label\">\r\n <span class=\"step-label-text\">\r\n <input (input)=\"handleInput($event, step.sectionId)\" class=\"section-title-input\" matInput\r\n (keydown.space)=\"onSpaceKey($event, step.sectionId)\" placeholder=\"Enter section title\"\r\n [value]=\"step.label\" aria-label=\"Section title\">\r\n </span>\r\n @if (step.sectionIsSeen) {\r\n <mat-icon [class.error]=\"step.sectionIsInvalid\"\r\n [attr.aria-label]=\"step.sectionIsInvalid ? 'Section has errors' : 'Section completed'\">\r\n {{step.sectionIsSeen}}\r\n </mat-icon>\r\n }\r\n @if ((step)?.activeSectionHasTour && !!step.isActive) {\r\n <span class=\"tour-trigger\">\r\n <button tourAnchor=\"Form-Tour-trigger\" (click)=\"startTour(step.sectionId)\" matTooltip=\"Start section tour\"\r\n mat-flat-button>\r\n <mat-icon>tour</mat-icon>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"spacer\"></span>\r\n\r\n @if (!!inputWillBeRemovedIn(step.sectionId)) {\r\n <button \r\n (mouseover)=\"overId = step.sectionId\" (mouseout)=\"overId = null\"\r\n (click)=\"deleteSection(step.sectionId)\" color=\"warn\" mat-stroked-button\r\n [attr.aria-label]=\"overId === step.sectionId ? 'Cancel section deletion' : 'Section deleting in ' + inputWillBeRemovedIn(step.sectionId) + ' seconds'\">\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(step.sectionId)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n {{ overId === step.sectionId ? 'Click to cancel' : 'Deleting in' }}\r\n {{ inputWillBeRemovedIn(step.sectionId) }}\r\n </div>\r\n </button>\r\n }\r\n \r\n @if(canRefreshSection(step.sectionId)&& step.isActive){\r\n <button mat-icon-button\r\n style=\"margin-right: 8px;\"\r\n matTooltip=\"Click to refresh this section.\"\r\n class=\"input-sync-button\"\r\n (click)=\"refreshASection(step.sectionId)\" >\r\n <mat-icon style=\"color:var(--mat-sys-primary)\">sync</mat-icon>\r\n </button>\r\n }\r\n <button (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerData]=\"{ sectionId: step.sectionId, columns: step.columns }\" [matMenuTriggerFor]=\"sectionMenu\"\r\n color=\"primary\" mat-icon-button aria-label=\"Section options menu\">\r\n <mat-icon>more_horiz</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n\r\n @defer (on viewport; prefetch on idle) {\r\n <div class=\"step-content\">\r\n @if (!openSectionReports[step.sectionId]) {\r\n <div (cdkDropListDropped)=\"dropItems($event,step.sectionId)\" [cdkDropListData]=\"step.columns\" cdkDropList\r\n #InputList=\"cdkDropList\" class=\"row form-section\">\r\n @for (col of step.columns; track col.id) {\r\n <mat-card cdkDrag (cdkDragStarted)=\"dragging = true\" (cdkDragReleased)=\"dragging = false\"\r\n [class.inEditCol]=\"(selectInputInEditId$ | async) === col.id\"\r\n [class]=\"'box inputCard col-md-' + (dragging ? '12' : col.colSize)\" (mouseover)=\"activeInput = col.id\">\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n @if (step.sectionForm) {\r\n <lib-t-form-input [editorMode]=\"true\" [tourAnchor]=\"col.id\" (valueChange)=\"updateValue(col.id,$event)\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\" [inputConfig]=\"col\" [formGroup]=\"step.sectionForm\"\r\n [attr.aria-label]=\"col?.label || ''\">\r\n </lib-t-form-input>\r\n }\r\n\r\n\r\n\r\n @if (col.inputConfigErrors.length > 0) {\r\n <div class=\"error\">\r\n <ul class=\"error-list\">\r\n @for (error of col.inputConfigErrors; track error.key + error.message) {\r\n <li class=\"error-item\">{{ error.message }}</li>\r\n }\r\n </ul>\r\n\r\n </div>\r\n }\r\n @if (activeInput === col.id) {\r\n <mat-card-actions>\r\n\r\n <button color=\"primary\" [matTooltip]=\"'Edit ' + col.label + ' input'\" (click)=\"editInput(col)\"\r\n mat-icon-button aria-label=\"Edit input\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Move this input to another section'\" [matMenuTriggerFor]=\"moveInput\"\r\n [matMenuTriggerData]=\"col\" mat-icon-button aria-label=\"Move input to another section\">\r\n <mat-icon>drive_file_move</mat-icon>\r\n </button>\r\n\r\n <button [matTooltip]=\"'Clone form input'\" (click)=\"cloneCopyFormInput(col.id)\" mat-icon-button\r\n aria-label=\"Clone input\">\r\n <mat-icon>file_copy</mat-icon>\r\n </button>\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n\r\n\r\n @if (!!inputWillBeRemovedIn(col.id)) {\r\n <button (mouseover)=\"overId = col.id\" (mouseout)=\"overId = null\" (click)=\"removeInput(col)\" color=\"warn\"\r\n mat-stroked-button>\r\n <div class=\"delete-countdown\">\r\n <mat-progress-spinner color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(col.id)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n\r\n {{ overId === col.id ? 'Click to cancel' : 'Deleting in' }} {{ inputWillBeRemovedIn(col.id) }}\r\n </div>\r\n\r\n </button>\r\n\r\n } @else if (col.systemDefault !== true) {\r\n <button color=\"warn\" [matTooltip]=\"'Delete ' + col.label + ' input'\" (click)=\"removeInput(col)\"\r\n mat-icon-button aria-label=\"Delete input\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n\r\n\r\n @if (activeInput === col.id && col.element ==='multipleInput') {\r\n\r\n <button matTooltip=\"Add input to list control form\" (click)=\"addMultipleFormInput(col.sectionId,col.id)\"\r\n color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n @if (activeInput === col.id && col.element === 'mscoaSelection') {\r\n <button matTooltip=\"Extend SCOA Segments with additional inputs\"\r\n (click)=\"addInputToScoaSelection(col.sectionId, col.id)\" color=\"accent\" mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Form Input\r\n </button>\r\n }\r\n\r\n </mat-card-actions>\r\n }\r\n </mat-card>\r\n }\r\n </div>\r\n <section class=\"empty-state-section\">\r\n <p class=\"empty-state-text\">Add form fields to this section to collect information.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Input\"</strong> button below to create a new form field.</p>\r\n <div class=\"empty-state-actions\">\r\n <button matTooltip=\"Add an input to this section\" (click)=\"addNewInput(step.sectionId)\" color=\"accent\"\r\n mat-flat-button>\r\n <mat-icon>add</mat-icon>\r\n Add Input\r\n </button>\r\n </div>\r\n </section>\r\n\r\n\r\n } @else {\r\n <app-section-report [sectionId]=\"step.sectionId\"></app-section-report>\r\n }\r\n <div class=\"step-actions\">\r\n @if (!$first) {\r\n <button mat-button matStepperPrevious type=\"button\" class=\"navigation-button\"\r\n [attr.aria-label]=\"'Go back to ' + getPreviousStepLabel()\">\r\n\r\n Back\r\n </button>\r\n }\r\n @if (!$last) {\r\n <button mat-flat-button matStepperNext color=\"primary\" type=\"button\" class=\"navigation-button\"\r\n matTooltip=\"Continue to next section\" [attr.aria-label]=\"'Continue to ' + getNextStepLabel()\">\r\n Next\r\n </button>\r\n }\r\n @if ($last) {\r\n <button mat-button (click)=\"stepper.reset()\" aria-label=\"Reset form\">Reset</button>\r\n }\r\n\r\n </div>\r\n </div>\r\n } @placeholder {\r\n <div class=\"step-placeholder\">\r\n <mat-spinner diameter=\"24\" aria-label=\"Loading step content\" />\r\n </div>\r\n }\r\n\r\n </mat-step>\r\n }\r\n }\r\n </mat-stepper>\r\n <section class=\"empty-state-section add-section-hint\">\r\n <p class=\"empty-state-text\">A form section helps organize related input fields together.</p>\r\n <p class=\"empty-state-hint\">Click the <strong>\"Add Section\"</strong> button below to create a new section.</p>\r\n </section>\r\n <mat-card-actions class=\"sticky-actions\">\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"addSection()\" color=\"accent\" mat-flat-button aria-label=\"Add new section\">\r\n <mat-icon>add</mat-icon>\r\n Add Section\r\n </button>\r\n <span class=\"spacer\"></span>\r\n </mat-card-actions>\r\n <!-- Defer the footer toolbar until after the main form is loaded -->\r\n @defer (on idle; prefetch on viewport) {\r\n <footer><mat-toolbar class=\"submission-toolbar\" role=\"toolbar\" aria-label=\"Form submission actions\">\r\n <span class=\"submission-status\" role=\"status\">\r\n {{ getSubmissionStatus$ | async }}\r\n </span>\r\n <button mat-raised-button color=\"primary\" [disabled]=\"true\" aria-label=\"Submit form\">\r\n <span>\r\n {{ formSubmissionMessage()}}\r\n </span>\r\n @if (submittingForm) {\r\n <mat-spinner diameter=\"10\"></mat-spinner>\r\n }\r\n\r\n </button>\r\n </mat-toolbar>\r\n </footer>\r\n } @placeholder {\r\n <!-- Simple placeholder for the footer that maintains layout -->\r\n <footer>\r\n <div class=\"submission-toolbar-placeholder\"></div>\r\n </footer>\r\n }\r\n\r\n</mat-card>\r\n<mat-menu #sectionMenu=\"matMenu\">\r\n <ng-template matMenuContent let-sectionId=\"sectionId\" let-columns=\"columns\">\r\n <!-- <button mat-menu-item [matMenuTriggerFor]=\"sectionType\">\r\n <mat-icon> disabled_visible</mat-icon>\r\n Set visibility type</button> -->\r\n @if (sectionIncludesDefault(columns) === false) {\r\n <button (click)=\"deleteSection(sectionId, false)\" matTooltip=\"Deletes this section and all its inputs\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section</span>\r\n </button>\r\n <button (click)=\"deleteSection(sectionId, true)\" matTooltip=\"Deletes all inputs in this section\"\r\n matTooltipPosition=\"right\" mat-menu-item>\r\n <mat-icon style=\"color: var(--mat-sys-error, #b3261e)\">delete_sweep</mat-icon>\r\n <span style=\"color: var(--mat-sys-error, #b3261e)\">Delete section inputs</span>\r\n </button>\r\n }\r\n\r\n <button (click)=\"toggleSectionReports(sectionId)\" mat-menu-item>\r\n <mat-icon>leaderboard</mat-icon>\r\n {{ openSectionReports[sectionId] ? 'Close report' : 'Section report' }}</button>\r\n </ng-template>\r\n</mat-menu>\r\n<mat-menu #sectionType=\"matMenu\">\r\n <button mat-menu-item>\r\n <mat-icon>visibility</mat-icon>\r\n view only</button>\r\n <button mat-menu-item>\r\n <mat-icon>visibility_off</mat-icon>\r\n system</button>\r\n <button mat-menu-item>\r\n <mat-icon>edit</mat-icon>\r\n user edit</button>\r\n</mat-menu>\r\n<mat-menu #moveInput=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\" let-sectionId=\"sectionId\">\r\n @for (section of ( selectFormStepsComputed); track section.sectionId) {\r\n <button [disabled]=\"section.sectionId === sectionId\" (click)=\"moveInputToSection(id,section.sectionId)\"\r\n mat-menu-item>\r\n <mat-icon>folder</mat-icon>\r\n {{section.label || 'Untitled section'}}\r\n </button>\r\n }\r\n\r\n </ng-template>\r\n</mat-menu>\r\n\r\n"],"names":["i4","i5","i8","i9","i10","i11","i12","i13"],"mappings":"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"}