@masterteam/forms 0.0.44 → 0.0.46
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/masterteam-forms-client-form.mjs +189 -14
- package/fesm2022/masterteam-forms-client-form.mjs.map +1 -1
- package/fesm2022/masterteam-forms-dynamic-field.mjs +2 -2
- package/fesm2022/masterteam-forms-dynamic-field.mjs.map +1 -1
- package/fesm2022/masterteam-forms-dynamic-form.mjs +21 -13
- package/fesm2022/masterteam-forms-dynamic-form.mjs.map +1 -1
- package/package.json +2 -2
- package/types/masterteam-forms-client-form.d.ts +11 -2
- package/types/masterteam-forms-dynamic-form.d.ts +4 -3
|
@@ -6,6 +6,7 @@ import { CommonModule } from '@angular/common';
|
|
|
6
6
|
import { Skeleton } from 'primeng/skeleton';
|
|
7
7
|
import * as i2 from 'primeng/stepper';
|
|
8
8
|
import { StepperModule } from 'primeng/stepper';
|
|
9
|
+
import { EntitiesPreview } from '@masterteam/components/entities';
|
|
9
10
|
import { Tabs } from '@masterteam/components/tabs';
|
|
10
11
|
import { DynamicForm } from '@masterteam/forms/dynamic-form';
|
|
11
12
|
import { HttpClient, HttpContext } from '@angular/common/http';
|
|
@@ -136,6 +137,11 @@ const WIDTH_TO_COLSPAN = {
|
|
|
136
137
|
'50': 6,
|
|
137
138
|
'100': 12,
|
|
138
139
|
};
|
|
140
|
+
const WIDTH_TO_ENTITY_SIZE = {
|
|
141
|
+
'25': 6,
|
|
142
|
+
'50': 12,
|
|
143
|
+
'100': 24,
|
|
144
|
+
};
|
|
139
145
|
// ============================================================================
|
|
140
146
|
// Public Mapper Functions
|
|
141
147
|
// ============================================================================
|
|
@@ -185,15 +191,16 @@ function mapToDynamicFormConfig(config, lang = 'en', mode = 'create', lookups =
|
|
|
185
191
|
*
|
|
186
192
|
* Only includes non-virtual (editable) values.
|
|
187
193
|
*/
|
|
188
|
-
function mapValuesToFormValue(values) {
|
|
194
|
+
function mapValuesToFormValue(values, config) {
|
|
189
195
|
const result = {};
|
|
196
|
+
const fieldMap = config ? buildFieldValueMap(config) : null;
|
|
190
197
|
for (const v of values) {
|
|
191
198
|
if (v.metadata?.source === 'ProcessVirtual')
|
|
192
199
|
continue;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
200
|
+
const targetFieldKey = resolveValueTargetKey(v, fieldMap) ?? v.propertyKey ?? null;
|
|
201
|
+
if (!targetFieldKey)
|
|
202
|
+
continue;
|
|
203
|
+
result[targetFieldKey] = v.value;
|
|
197
204
|
}
|
|
198
205
|
return result;
|
|
199
206
|
}
|
|
@@ -233,6 +240,38 @@ function mapFormValueToSubmitValues(formValue, loadResponse) {
|
|
|
233
240
|
})
|
|
234
241
|
.filter((value) => !!value);
|
|
235
242
|
}
|
|
243
|
+
function getPreviewOnlyFieldKeys(config, mode = 'create') {
|
|
244
|
+
return config.sections.flatMap((section) => (section.fields ?? [])
|
|
245
|
+
.filter((field) => isFieldVisible(field, mode) && isPreviewOnlyField(field))
|
|
246
|
+
.map((field) => field.propertyKey));
|
|
247
|
+
}
|
|
248
|
+
function mapPreviewFieldsToEntities(config, values, mode = 'create') {
|
|
249
|
+
const resolvedValues = mapValuesToFormValue(values, config);
|
|
250
|
+
return config.sections
|
|
251
|
+
.slice()
|
|
252
|
+
.sort((a, b) => a.order - b.order)
|
|
253
|
+
.flatMap((section) => (section.fields ?? [])
|
|
254
|
+
.filter((field) => isFieldVisible(field, mode) && isPreviewOnlyField(field))
|
|
255
|
+
.sort((a, b) => a.order - b.order)
|
|
256
|
+
.flatMap((field) => {
|
|
257
|
+
const property = resolveProperty(field);
|
|
258
|
+
if (!property)
|
|
259
|
+
return [];
|
|
260
|
+
return [
|
|
261
|
+
{
|
|
262
|
+
...property,
|
|
263
|
+
name: property.name?.display,
|
|
264
|
+
key: property.key ?? field.propertyKey,
|
|
265
|
+
value: resolvedValues[field.propertyKey],
|
|
266
|
+
order: section.order * 1000 + field.order,
|
|
267
|
+
configuration: {
|
|
268
|
+
...property.configuration,
|
|
269
|
+
size: WIDTH_TO_ENTITY_SIZE[field.width] ?? 24,
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
];
|
|
273
|
+
}));
|
|
274
|
+
}
|
|
236
275
|
// ============================================================================
|
|
237
276
|
// Internal Helpers
|
|
238
277
|
// ============================================================================
|
|
@@ -243,6 +282,16 @@ function mapFormValueToSubmitValues(formValue, loadResponse) {
|
|
|
243
282
|
function resolveProperty(field) {
|
|
244
283
|
return field.property ?? field.propertyMetadata;
|
|
245
284
|
}
|
|
285
|
+
function isFieldVisible(field, mode) {
|
|
286
|
+
if (field.isRead === false)
|
|
287
|
+
return false;
|
|
288
|
+
if (mode === 'create')
|
|
289
|
+
return !field.hiddenInCreation;
|
|
290
|
+
return !field.hiddenInEditForm;
|
|
291
|
+
}
|
|
292
|
+
function isPreviewOnlyField(field) {
|
|
293
|
+
return field.isRead === true && field.isWrite === false;
|
|
294
|
+
}
|
|
246
295
|
function resolveFieldMeta(field) {
|
|
247
296
|
const property = resolveProperty(field);
|
|
248
297
|
return {
|
|
@@ -442,6 +491,91 @@ function normalizeSubmitValue(value, viewType) {
|
|
|
442
491
|
return value;
|
|
443
492
|
}
|
|
444
493
|
}
|
|
494
|
+
function buildFieldValueMap(config) {
|
|
495
|
+
const fieldsByKey = new Map();
|
|
496
|
+
const propertyIdCandidates = new Map();
|
|
497
|
+
const aliasCandidates = new Map();
|
|
498
|
+
for (const section of config.sections ?? []) {
|
|
499
|
+
for (const field of section.fields ?? []) {
|
|
500
|
+
const { propertyId } = resolveFieldMeta(field);
|
|
501
|
+
const fieldMeta = {
|
|
502
|
+
key: field.propertyKey,
|
|
503
|
+
propertyId,
|
|
504
|
+
};
|
|
505
|
+
fieldsByKey.set(field.propertyKey, fieldMeta);
|
|
506
|
+
if (propertyId != null) {
|
|
507
|
+
if (!propertyIdCandidates.has(propertyId)) {
|
|
508
|
+
propertyIdCandidates.set(propertyId, new Set());
|
|
509
|
+
}
|
|
510
|
+
propertyIdCandidates.get(propertyId).add(field.propertyKey);
|
|
511
|
+
}
|
|
512
|
+
const aliases = new Set([
|
|
513
|
+
field.propertyKey,
|
|
514
|
+
stripTemplatePrefix(field.propertyKey),
|
|
515
|
+
]);
|
|
516
|
+
const property = resolveProperty(field);
|
|
517
|
+
if (property?.key) {
|
|
518
|
+
aliases.add(property.key);
|
|
519
|
+
aliases.add(stripTemplatePrefix(property.key));
|
|
520
|
+
}
|
|
521
|
+
aliases.forEach((alias) => {
|
|
522
|
+
if (!alias)
|
|
523
|
+
return;
|
|
524
|
+
if (!aliasCandidates.has(alias)) {
|
|
525
|
+
aliasCandidates.set(alias, new Set());
|
|
526
|
+
}
|
|
527
|
+
aliasCandidates.get(alias).add(field.propertyKey);
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const propertyIdToKey = new Map();
|
|
532
|
+
propertyIdCandidates.forEach((keys, propertyId) => {
|
|
533
|
+
if (keys.size !== 1)
|
|
534
|
+
return;
|
|
535
|
+
propertyIdToKey.set(propertyId, [...keys][0]);
|
|
536
|
+
});
|
|
537
|
+
const aliasToKey = new Map();
|
|
538
|
+
aliasCandidates.forEach((keys, alias) => {
|
|
539
|
+
if (keys.size !== 1)
|
|
540
|
+
return;
|
|
541
|
+
aliasToKey.set(alias, [...keys][0]);
|
|
542
|
+
});
|
|
543
|
+
return {
|
|
544
|
+
fieldsByKey,
|
|
545
|
+
propertyIdToKey,
|
|
546
|
+
aliasToKey,
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
function resolveValueTargetKey(value, fieldMap) {
|
|
550
|
+
if (!fieldMap) {
|
|
551
|
+
return value.propertyKey ?? null;
|
|
552
|
+
}
|
|
553
|
+
const exactCandidates = [value.propertyKey, value.metadata?.key].filter((candidate) => !!candidate);
|
|
554
|
+
for (const candidate of exactCandidates) {
|
|
555
|
+
if (fieldMap.fieldsByKey.has(candidate)) {
|
|
556
|
+
return candidate;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
const propertyId = value.metadata?.propertyId;
|
|
560
|
+
if (propertyId != null && fieldMap.propertyIdToKey.has(propertyId)) {
|
|
561
|
+
return fieldMap.propertyIdToKey.get(propertyId);
|
|
562
|
+
}
|
|
563
|
+
const aliasCandidates = exactCandidates.flatMap((candidate) => [
|
|
564
|
+
candidate,
|
|
565
|
+
stripTemplatePrefix(candidate),
|
|
566
|
+
]);
|
|
567
|
+
for (const candidate of aliasCandidates) {
|
|
568
|
+
if (!candidate)
|
|
569
|
+
continue;
|
|
570
|
+
if (fieldMap.aliasToKey.has(candidate)) {
|
|
571
|
+
return fieldMap.aliasToKey.get(candidate);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return null;
|
|
575
|
+
}
|
|
576
|
+
function stripTemplatePrefix(value) {
|
|
577
|
+
return value.replace(/^template_\d+_/, '');
|
|
578
|
+
}
|
|
445
579
|
|
|
446
580
|
/**
|
|
447
581
|
* Client Form — Runtime process form component.
|
|
@@ -531,11 +665,39 @@ class ClientForm {
|
|
|
531
665
|
return mapToDynamicFormConfig(config, this.lang(), this.formMode(), this.lookups());
|
|
532
666
|
}, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
533
667
|
initialValues = computed(() => {
|
|
534
|
-
return mapValuesToFormValue(this.state.formValues());
|
|
668
|
+
return mapValuesToFormValue(this.state.formValues(), this.state.formConfiguration());
|
|
535
669
|
}, ...(ngDevMode ? [{ debugName: "initialValues" }] : []));
|
|
536
670
|
virtualFields = computed(() => this.state.virtualFields(), ...(ngDevMode ? [{ debugName: "virtualFields" }] : []));
|
|
537
671
|
hasVirtualFields = computed(() => this.virtualFields().length > 0, ...(ngDevMode ? [{ debugName: "hasVirtualFields" }] : []));
|
|
538
|
-
|
|
672
|
+
previewFieldKeys = computed(() => {
|
|
673
|
+
const config = this.state.formConfiguration();
|
|
674
|
+
if (!config)
|
|
675
|
+
return [];
|
|
676
|
+
return getPreviewOnlyFieldKeys(config, this.formMode());
|
|
677
|
+
}, ...(ngDevMode ? [{ debugName: "previewFieldKeys" }] : []));
|
|
678
|
+
previewEntities = computed(() => {
|
|
679
|
+
const config = this.state.formConfiguration();
|
|
680
|
+
if (!config)
|
|
681
|
+
return [];
|
|
682
|
+
return mapPreviewFieldsToEntities(config, this.state.formValues(), this.formMode());
|
|
683
|
+
}, ...(ngDevMode ? [{ debugName: "previewEntities" }] : []));
|
|
684
|
+
editableFormConfig = computed(() => {
|
|
685
|
+
const config = this.formConfig();
|
|
686
|
+
if (!config)
|
|
687
|
+
return null;
|
|
688
|
+
const previewFieldKeys = new Set(this.previewFieldKeys());
|
|
689
|
+
return {
|
|
690
|
+
...config,
|
|
691
|
+
sections: config.sections
|
|
692
|
+
.map((section) => ({
|
|
693
|
+
...section,
|
|
694
|
+
fields: section.fields.filter((field) => !field.key || !previewFieldKeys.has(field.key)),
|
|
695
|
+
}))
|
|
696
|
+
.filter((section) => section.fields.some((field) => field.type !== 'spacer')),
|
|
697
|
+
};
|
|
698
|
+
}, ...(ngDevMode ? [{ debugName: "editableFormConfig" }] : []));
|
|
699
|
+
stepSections = computed(() => this.editableFormConfig()?.sections ?? [], ...(ngDevMode ? [{ debugName: "stepSections" }] : []));
|
|
700
|
+
hasEditableFormSections = computed(() => this.stepSections().length > 0, ...(ngDevMode ? [{ debugName: "hasEditableFormSections" }] : []));
|
|
539
701
|
stepsEnabled = computed(() => this.renderMode() === 'steps' && this.stepSections().length > 1, ...(ngDevMode ? [{ debugName: "stepsEnabled" }] : []));
|
|
540
702
|
tabsEnabled = computed(() => this.renderMode() === 'tabs' && this.stepSections().length > 1, ...(ngDevMode ? [{ debugName: "tabsEnabled" }] : []));
|
|
541
703
|
sectionNavigationEnabled = computed(() => this.stepsEnabled() || this.tabsEnabled(), ...(ngDevMode ? [{ debugName: "sectionNavigationEnabled" }] : []));
|
|
@@ -543,18 +705,30 @@ class ClientForm {
|
|
|
543
705
|
label: section.label || `Tab ${index + 1}`,
|
|
544
706
|
value: index + 1,
|
|
545
707
|
})), ...(ngDevMode ? [{ debugName: "tabOptions" }] : []));
|
|
708
|
+
visibleSectionKeys = computed(() => {
|
|
709
|
+
if (!this.sectionNavigationEnabled())
|
|
710
|
+
return null;
|
|
711
|
+
const currentIndex = this.currentStep() - 1;
|
|
712
|
+
const activeSection = this.stepSections()[currentIndex];
|
|
713
|
+
if (!activeSection)
|
|
714
|
+
return null;
|
|
715
|
+
return [activeSection.key || `section-${currentIndex}`];
|
|
716
|
+
}, ...(ngDevMode ? [{ debugName: "visibleSectionKeys" }] : []));
|
|
546
717
|
forcedHiddenFieldKeys = computed(() => {
|
|
547
718
|
if (!this.sectionNavigationEnabled())
|
|
548
719
|
return [];
|
|
549
720
|
const sections = this.stepSections();
|
|
550
721
|
const currentIndex = this.currentStep() - 1;
|
|
551
|
-
|
|
722
|
+
const hiddenFieldKeys = new Set();
|
|
723
|
+
sections.forEach((section, index) => {
|
|
552
724
|
if (index === currentIndex)
|
|
553
|
-
return
|
|
554
|
-
|
|
725
|
+
return;
|
|
726
|
+
section.fields
|
|
555
727
|
.map((field) => field.key)
|
|
556
|
-
.filter((key) => !!key)
|
|
728
|
+
.filter((key) => !!key)
|
|
729
|
+
.forEach((key) => hiddenFieldKeys.add(key));
|
|
557
730
|
});
|
|
731
|
+
return [...hiddenFieldKeys];
|
|
558
732
|
}, ...(ngDevMode ? [{ debugName: "forcedHiddenFieldKeys" }] : []));
|
|
559
733
|
// ============================================================================
|
|
560
734
|
// Effects
|
|
@@ -804,18 +978,19 @@ class ClientForm {
|
|
|
804
978
|
return req;
|
|
805
979
|
}
|
|
806
980
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
807
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientForm, isStandalone: true, selector: "mt-client-form", inputs: { moduleKey: { classPropertyName: "moduleKey", publicName: "moduleKey", isSignal: true, isRequired: true, transformFunction: null }, operationKey: { classPropertyName: "operationKey", publicName: "operationKey", isSignal: true, isRequired: true, transformFunction: null }, moduleId: { classPropertyName: "moduleId", publicName: "moduleId", isSignal: true, isRequired: false, transformFunction: null }, levelId: { classPropertyName: "levelId", publicName: "levelId", isSignal: true, isRequired: false, transformFunction: null }, levelDataId: { classPropertyName: "levelDataId", publicName: "levelDataId", isSignal: true, isRequired: false, transformFunction: null }, moduleDataId: { classPropertyName: "moduleDataId", publicName: "moduleDataId", isSignal: true, isRequired: false, transformFunction: null }, requestSchemaId: { classPropertyName: "requestSchemaId", publicName: "requestSchemaId", isSignal: true, isRequired: false, transformFunction: null }, draftProcessId: { classPropertyName: "draftProcessId", publicName: "draftProcessId", isSignal: true, isRequired: false, transformFunction: null }, preview: { classPropertyName: "preview", publicName: "preview", isSignal: true, isRequired: false, transformFunction: null }, returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, autoLoad: { classPropertyName: "autoLoad", publicName: "autoLoad", isSignal: true, isRequired: false, transformFunction: null }, formMode: { classPropertyName: "formMode", publicName: "formMode", isSignal: true, isRequired: false, transformFunction: null }, renderMode: { classPropertyName: "renderMode", publicName: "renderMode", isSignal: true, isRequired: false, transformFunction: null }, showInternalStepActions: { classPropertyName: "showInternalStepActions", publicName: "showInternalStepActions", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, lookups: { classPropertyName: "lookups", publicName: "lookups", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loaded: "loaded", submitted: "submitted", errored: "errored", modeDetected: "modeDetected", formSourceDetected: "formSourceDetected" }, providers: [ClientFormStateService], ngImport: i0, template: "<!-- Client Form Template \u2014 Render only, NO action buttons -->\n\n<!-- Loading State -->\n@if (state.loading()) {\n <div class=\"flex flex-col gap-6\">\n <!-- Section header skeleton -->\n <div class=\"flex flex-col gap-4\">\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-12 flex flex-col gap-2\">\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n </div>\n </div>\n\n <!-- Second section skeleton -->\n <div class=\"flex flex-col gap-4\">\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-12 flex flex-col gap-2\">\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"5rem\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<!-- Loaded State -->\n@if (state.isLoaded() && !state.loading()) {\n <!-- Dynamic Form -->\n @if (state.requiresForm() && formConfig(); as config) {\n <div class=\"flex flex-col gap-4\">\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\n <div class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\">\n @if (runtimeErrors().length > 0) {\n <div class=\"mb-3\">\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\n Validation Errors\n </h4>\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\n @for (\n msg of runtimeErrors();\n track msg.ruleId || msg.fieldKey || msg.message\n ) {\n <li>{{ msg.message }}</li>\n }\n </ul>\n </div>\n }\n\n @if (runtimeWarnings().length > 0) {\n <div>\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\n Validation Warnings\n </h4>\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\n @for (\n msg of runtimeWarnings();\n track msg.ruleId || msg.fieldKey || msg.message\n ) {\n <li>{{ msg.message }}</li>\n }\n </ul>\n </div>\n }\n </div>\n }\n @if (stepsEnabled()) {\n <div class=\"flex flex-col gap-4\">\n <p-stepper\n [value]=\"currentStep()\"\n (valueChange)=\"onStepChange($event)\"\n >\n <p-step-list>\n @for (section of stepSections(); track section.key || $index) {\n <p-step [value]=\"$index + 1\">\n {{ section.label || \"Step \" + ($index + 1) }}\n </p-step>\n }\n </p-step-list>\n </p-stepper>\n\n @if (showInternalStepActions()) {\n <div class=\"flex justify-between gap-2\">\n <button\n type=\"button\"\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\n [disabled]=\"currentStep() === 1\"\n (click)=\"goToPreviousStep()\"\n >\n Previous\n </button>\n <button\n type=\"button\"\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\n [disabled]=\"currentStep() === stepSections().length\"\n (click)=\"goToNextStep()\"\n >\n Next\n </button>\n </div>\n }\n </div>\n }\n\n @if (tabsEnabled()) {\n <mt-tabs\n [active]=\"currentStep()\"\n (activeChange)=\"onStepChange($event)\"\n [options]=\"tabOptions()\"\n size=\"small\"\n fluid\n />\n }\n\n <mt-dynamic-form\n [formConfig]=\"config\"\n [formControl]=\"formControl\"\n [forcedHiddenFieldKeys]=\"forcedHiddenFieldKeys()\"\n [preserveForcedHiddenValues]=\"true\"\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\n />\n </div>\n } @else if (!state.requiresForm()) {\n <div\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\n >\n <p class=\"text-sm text-muted-color\">\n No form required for this operation.\n </p>\n </div>\n }\n}\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: StepperModule }, { kind: "component", type: i2.Stepper, selector: "p-stepper", inputs: ["value", "linear", "transitionOptions", "motionOptions"], outputs: ["valueChange"] }, { kind: "component", type: i2.StepList, selector: "p-step-list" }, { kind: "component", type: i2.Step, selector: "p-step", inputs: ["value", "disabled"], outputs: ["valueChange"] }] });
|
|
981
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientForm, isStandalone: true, selector: "mt-client-form", inputs: { moduleKey: { classPropertyName: "moduleKey", publicName: "moduleKey", isSignal: true, isRequired: true, transformFunction: null }, operationKey: { classPropertyName: "operationKey", publicName: "operationKey", isSignal: true, isRequired: true, transformFunction: null }, moduleId: { classPropertyName: "moduleId", publicName: "moduleId", isSignal: true, isRequired: false, transformFunction: null }, levelId: { classPropertyName: "levelId", publicName: "levelId", isSignal: true, isRequired: false, transformFunction: null }, levelDataId: { classPropertyName: "levelDataId", publicName: "levelDataId", isSignal: true, isRequired: false, transformFunction: null }, moduleDataId: { classPropertyName: "moduleDataId", publicName: "moduleDataId", isSignal: true, isRequired: false, transformFunction: null }, requestSchemaId: { classPropertyName: "requestSchemaId", publicName: "requestSchemaId", isSignal: true, isRequired: false, transformFunction: null }, draftProcessId: { classPropertyName: "draftProcessId", publicName: "draftProcessId", isSignal: true, isRequired: false, transformFunction: null }, preview: { classPropertyName: "preview", publicName: "preview", isSignal: true, isRequired: false, transformFunction: null }, returnUrl: { classPropertyName: "returnUrl", publicName: "returnUrl", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, autoLoad: { classPropertyName: "autoLoad", publicName: "autoLoad", isSignal: true, isRequired: false, transformFunction: null }, formMode: { classPropertyName: "formMode", publicName: "formMode", isSignal: true, isRequired: false, transformFunction: null }, renderMode: { classPropertyName: "renderMode", publicName: "renderMode", isSignal: true, isRequired: false, transformFunction: null }, showInternalStepActions: { classPropertyName: "showInternalStepActions", publicName: "showInternalStepActions", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, lookups: { classPropertyName: "lookups", publicName: "lookups", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loaded: "loaded", submitted: "submitted", errored: "errored", modeDetected: "modeDetected", formSourceDetected: "formSourceDetected" }, providers: [ClientFormStateService], ngImport: i0, template: "<!-- Client Form Template \u2014 Render only, NO action buttons -->\r\n\r\n<!-- Loading State -->\r\n@if (state.loading()) {\r\n <div class=\"flex flex-col gap-6\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Second section skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n\r\n<!-- Loaded State -->\r\n@if (state.isLoaded() && !state.loading()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (previewEntities().length > 0) {\r\n <mt-entities-preview [entities]=\"previewEntities()\" />\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\">\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n Validation Errors\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n Validation Warnings\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <p-stepper\r\n [value]=\"currentStep()\"\r\n (valueChange)=\"onStepChange($event)\"\r\n >\r\n <p-step-list>\r\n @for (section of stepSections(); track section.key || $index) {\r\n <p-step [value]=\"$index + 1\">\r\n {{ section.label || \"Step \" + ($index + 1) }}\r\n </p-step>\r\n }\r\n </p-step-list>\r\n </p-stepper>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === 1\"\r\n (click)=\"goToPreviousStep()\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (click)=\"goToNextStep()\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (tabsEnabled()) {\r\n <mt-tabs\r\n [active]=\"currentStep()\"\r\n (activeChange)=\"onStepChange($event)\"\r\n [options]=\"tabOptions()\"\r\n size=\"small\"\r\n fluid\r\n />\r\n }\r\n\r\n <mt-dynamic-form\r\n [formConfig]=\"config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"forcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n </div>\r\n }\r\n } @else if (previewEntities().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: EntitiesPreview, selector: "mt-entities-preview", inputs: ["entities"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues", "visibleSectionKeys"], outputs: ["runtimeMessagesChange"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: StepperModule }, { kind: "component", type: i2.Stepper, selector: "p-stepper", inputs: ["value", "linear", "transitionOptions", "motionOptions"], outputs: ["valueChange"] }, { kind: "component", type: i2.StepList, selector: "p-step-list" }, { kind: "component", type: i2.Step, selector: "p-step", inputs: ["value", "disabled"], outputs: ["valueChange"] }] });
|
|
808
982
|
}
|
|
809
983
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientForm, decorators: [{
|
|
810
984
|
type: Component,
|
|
811
985
|
args: [{ selector: 'mt-client-form', standalone: true, imports: [
|
|
812
986
|
CommonModule,
|
|
813
987
|
ReactiveFormsModule,
|
|
988
|
+
EntitiesPreview,
|
|
814
989
|
DynamicForm,
|
|
815
990
|
Tabs,
|
|
816
991
|
Skeleton,
|
|
817
992
|
StepperModule,
|
|
818
|
-
], providers: [ClientFormStateService], template: "<!-- Client Form Template \u2014 Render only, NO action buttons -->\n\n<!-- Loading State -->\n@if (state.loading()) {\n <div class=\"flex flex-col gap-6\">\n <!-- Section header skeleton -->\n <div class=\"flex flex-col gap-4\">\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-12 flex flex-col gap-2\">\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n </div>\n </div>\n\n <!-- Second section skeleton -->\n <div class=\"flex flex-col gap-4\">\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-6 flex flex-col gap-2\">\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\n </div>\n <div class=\"col-span-12 flex flex-col gap-2\">\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\n <p-skeleton width=\"100%\" height=\"5rem\" />\n </div>\n </div>\n </div>\n </div>\n}\n\n<!-- Loaded State -->\n@if (state.isLoaded() && !state.loading()) {\n <!-- Dynamic Form -->\n
|
|
993
|
+
], providers: [ClientFormStateService], template: "<!-- Client Form Template \u2014 Render only, NO action buttons -->\r\n\r\n<!-- Loading State -->\r\n@if (state.loading()) {\r\n <div class=\"flex flex-col gap-6\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Second section skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n\r\n<!-- Loaded State -->\r\n@if (state.isLoaded() && !state.loading()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (previewEntities().length > 0) {\r\n <mt-entities-preview [entities]=\"previewEntities()\" />\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\">\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n Validation Errors\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n Validation Warnings\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <p-stepper\r\n [value]=\"currentStep()\"\r\n (valueChange)=\"onStepChange($event)\"\r\n >\r\n <p-step-list>\r\n @for (section of stepSections(); track section.key || $index) {\r\n <p-step [value]=\"$index + 1\">\r\n {{ section.label || \"Step \" + ($index + 1) }}\r\n </p-step>\r\n }\r\n </p-step-list>\r\n </p-stepper>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === 1\"\r\n (click)=\"goToPreviousStep()\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (click)=\"goToNextStep()\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (tabsEnabled()) {\r\n <mt-tabs\r\n [active]=\"currentStep()\"\r\n (activeChange)=\"onStepChange($event)\"\r\n [options]=\"tabOptions()\"\r\n size=\"small\"\r\n fluid\r\n />\r\n }\r\n\r\n <mt-dynamic-form\r\n [formConfig]=\"config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"forcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n </div>\r\n }\r\n } @else if (previewEntities().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}\n"] }]
|
|
819
994
|
}], ctorParameters: () => [], propDecorators: { moduleKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "moduleKey", required: true }] }], operationKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "operationKey", required: true }] }], moduleId: [{ type: i0.Input, args: [{ isSignal: true, alias: "moduleId", required: false }] }], levelId: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelId", required: false }] }], levelDataId: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelDataId", required: false }] }], moduleDataId: [{ type: i0.Input, args: [{ isSignal: true, alias: "moduleDataId", required: false }] }], requestSchemaId: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestSchemaId", required: false }] }], draftProcessId: [{ type: i0.Input, args: [{ isSignal: true, alias: "draftProcessId", required: false }] }], preview: [{ type: i0.Input, args: [{ isSignal: true, alias: "preview", required: false }] }], returnUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "returnUrl", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], autoLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoLoad", required: false }] }], formMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "formMode", required: false }] }], renderMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "renderMode", required: false }] }], showInternalStepActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showInternalStepActions", required: false }] }], lang: [{ type: i0.Input, args: [{ isSignal: true, alias: "lang", required: false }] }], lookups: [{ type: i0.Input, args: [{ isSignal: true, alias: "lookups", required: false }] }], loaded: [{ type: i0.Output, args: ["loaded"] }], submitted: [{ type: i0.Output, args: ["submitted"] }], errored: [{ type: i0.Output, args: ["errored"] }], modeDetected: [{ type: i0.Output, args: ["modeDetected"] }], formSourceDetected: [{ type: i0.Output, args: ["formSourceDetected"] }] } });
|
|
820
995
|
|
|
821
996
|
// ============================================================================
|
|
@@ -836,5 +1011,5 @@ function isFormRequiredInterception(response) {
|
|
|
836
1011
|
* Generated bundle index. Do not edit.
|
|
837
1012
|
*/
|
|
838
1013
|
|
|
839
|
-
export { ClientForm, ClientFormApiService, ClientFormStateService, isFormRequiredInterception, mapFormValueToSubmitValues, mapToDynamicFormConfig, mapValuesToFormValue };
|
|
1014
|
+
export { ClientForm, ClientFormApiService, ClientFormStateService, getPreviewOnlyFieldKeys, isFormRequiredInterception, mapFormValueToSubmitValues, mapPreviewFieldsToEntities, mapToDynamicFormConfig, mapValuesToFormValue };
|
|
840
1015
|
//# sourceMappingURL=masterteam-forms-client-form.mjs.map
|