@ng-forge/dynamic-forms 1.1.0-next.2 → 1.1.0-next.4
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/README.md +4 -1
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs.map → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs.map → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs.map → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +17 -67
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs +65 -45
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs} +49 -135
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs.map → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs +84 -0
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
- package/package.json +5 -1
- package/types/ng-forge-dynamic-forms-integration.d.ts +6 -54
- package/types/ng-forge-dynamic-forms-internal.d.ts +53 -13
- package/types/ng-forge-dynamic-forms-testing.d.ts +58 -0
- package/types/ng-forge-dynamic-forms.d.ts +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { reflectComponentType, Injector, inject, EnvironmentInjector, DestroyRef, computed, signal, input, ViewContainerRef, Directive, linkedSignal, ChangeDetectionStrategy, Component, Injectable, InjectionToken, isSignal, runInInjectionContext, afterNextRender, untracked, PendingTasks, ElementRef, PLATFORM_ID, isDevMode, TemplateRef, model, contentChildren, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { explicitEffect } from 'ngxtension/explicit-effect';
|
|
4
|
-
import { DynamicFormLogger, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, toReadonlyFieldTreeCached, writeToFieldValue, WRAPPER_AUTO_ASSOCIATIONS, DEFAULT_WRAPPERS, READONLY_FIELD_TREE_CACHE, EventBus, FieldContextRegistryService, FunctionRegistryService, FORM_OPTIONS, evaluateCondition, FIELD_SIGNAL_CONTEXT, isRowField, isContainerField, isArrayField, hasChildFields, isSimplifiedArrayField, DynamicFormError, isStateLogicConfig, isDerivationLogicConfig, createDebouncedLogicFunction, createLogicFunction, ExpressionParser, applyValidator, isPageField, isGenericContainerField, isGroupField, getFieldValueHandling, normalizeFieldsArray, getNestedValue,
|
|
4
|
+
import { DynamicFormLogger, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, toReadonlyFieldTreeCached, writeToFieldValue, WRAPPER_AUTO_ASSOCIATIONS, DEFAULT_WRAPPERS, READONLY_FIELD_TREE_CACHE, getGridClassString, EventBus, FieldContextRegistryService, FunctionRegistryService, FORM_OPTIONS, evaluateCondition, FIELD_SIGNAL_CONTEXT, isRowField, isContainerField, isArrayField, hasChildFields, isSimplifiedArrayField, DynamicFormError, isStateLogicConfig, isDerivationLogicConfig, createDebouncedLogicFunction, createLogicFunction, ExpressionParser, requiresTreeValidation, applyValidator, isPageField, isGenericContainerField, isGroupField, getFieldValueHandling, normalizeFieldsArray, getNestedValue, extractStringDependencies, isCrossFieldStateLogic, extractExpressionDependencies, isCrossFieldSchema, keyBy, mapValues, isEqual, hasTargetProperty, ARRAY_CONTEXT, GROUP_CONTEXT, FORM_ID_PREFIX, baseFieldMapper, detectFormMode, validatePageNesting, FIELD_REGISTRY, assertNever, ADDON_TYPE_REGISTRY, deepMergeDefaults, derivedFromDeferred, createWarningTracker, RootFormRegistryService, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, EXTERNAL_DATA, DEPRECATION_WARNING_TRACKER, createAddonActionRegistry, ADDON_ACTION_REGISTRY, HttpConditionCache, HTTP_CONDITION_CACHE, HttpConditionFunctionCacheService, AsyncConditionFunctionCacheService, DynamicValueFunctionCacheService, LogicFunctionCacheService, setupInitializationTracking, ComponentInitializedEvent, DF_FIELD_TEMPLATES, rowFieldMapper, groupFieldMapper, arrayFieldMapper, pageFieldMapper, textFieldMapper, containerFieldMapper, isWrapperTypeDefinition, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, createDefaultDerivationLogConfig, NoopLogger, EMIT_FORM_VALUE_ON_EVENTS, DynamicTextPipe, ADDON_ACTION_HANDLERS } from '@ng-forge/dynamic-forms/internal';
|
|
5
5
|
import { takeUntilDestroyed, toObservable, toSignal, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { of, forkJoin, from, catchError, map, switchMap, isObservable, firstValueFrom, exhaustMap, EMPTY, debounceTime, distinctUntilChanged, tap, pipe, scan, Observable, Subject, concatMap, filter, take } from 'rxjs';
|
|
7
7
|
import { submit, required, disabled, readonly, hidden, applyEach, applyWhenValue, applyWhen, apply, email, minLength, maxLength, pattern, min, max, schema, validateStandardSchema, validateTree, form, provideSignalFormsConfig } from '@angular/forms/signals';
|
|
@@ -81,6 +81,12 @@ function loadWrapperComponents(configs, registry, cache, logger) {
|
|
|
81
81
|
function renderWrapperChain(options) {
|
|
82
82
|
const refs = [];
|
|
83
83
|
renderStep(options.outerContainer, options.loadedWrappers, options, refs);
|
|
84
|
+
if (options.outermostHostClasses && refs.length > 0) {
|
|
85
|
+
const tokens = options.outermostHostClasses.split(/\s+/).filter(Boolean);
|
|
86
|
+
if (tokens.length > 0) {
|
|
87
|
+
refs[0].location.nativeElement.classList.add(...tokens);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
84
90
|
return refs;
|
|
85
91
|
}
|
|
86
92
|
function renderStep(slot, remaining, options, refs) {
|
|
@@ -218,6 +224,7 @@ function applyEmission({ state, loaded }, ctx) {
|
|
|
218
224
|
logger: deps.logger,
|
|
219
225
|
fieldInputs: opts.fieldInputs?.(),
|
|
220
226
|
fieldInjector: opts.fieldInjector?.(),
|
|
227
|
+
outermostHostClasses: opts.outermostHostClasses?.(),
|
|
221
228
|
renderInnermost: opts.renderInnermost,
|
|
222
229
|
});
|
|
223
230
|
mounted.value = { wrappers: state.wrappers, rebuildKey: state.rebuildKey };
|
|
@@ -366,6 +373,8 @@ class DfFieldOutlet {
|
|
|
366
373
|
...(ngDevMode ? [{ debugName: "fieldEnvInjector" }] : /* istanbul ignore next */ []));
|
|
367
374
|
fieldInjector = computed(() => this.dfFieldOutlet().injector, /* @ts-ignore */
|
|
368
375
|
...(ngDevMode ? [{ debugName: "fieldInjector" }] : /* istanbul ignore next */ []));
|
|
376
|
+
outermostHostClasses = computed(() => getGridClassString(this.dfFieldOutlet().fieldDef) || undefined, /* @ts-ignore */
|
|
377
|
+
...(ngDevMode ? [{ debugName: "outermostHostClasses" }] : /* istanbul ignore next */ []));
|
|
369
378
|
constructor() {
|
|
370
379
|
createWrapperChainController({
|
|
371
380
|
vcr: this.vcr,
|
|
@@ -374,6 +383,7 @@ class DfFieldOutlet {
|
|
|
374
383
|
rebuildKey: this.componentIdentity,
|
|
375
384
|
fieldInputs: this.fieldInputs,
|
|
376
385
|
fieldInjector: this.fieldInjector,
|
|
386
|
+
outermostHostClasses: this.outermostHostClasses,
|
|
377
387
|
beforeRebuild: () => this.fieldComponent.detach(),
|
|
378
388
|
renderInnermost: (slot) => {
|
|
379
389
|
const resolved = this.dfFieldOutlet();
|
|
@@ -822,11 +832,11 @@ class PageOrchestratorComponent {
|
|
|
822
832
|
}
|
|
823
833
|
}
|
|
824
834
|
`, isInline: true, styles: [":host{display:block;position:relative;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [/* @ts-ignore */
|
|
825
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
826
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
835
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)], () => [/* @ts-ignore */
|
|
836
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)]] });
|
|
827
837
|
}
|
|
828
838
|
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.1", ngImport: i0, type: PageOrchestratorComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
829
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
839
|
+
import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
|
|
830
840
|
type: Component,
|
|
831
841
|
args: [{ selector: 'div[page-orchestrator]', imports: [PageFieldComponent], template: `
|
|
832
842
|
@for (pageField of pageFields(); track pageField.key; let i = $index) {
|
|
@@ -1215,7 +1225,7 @@ function applySchema(config, fieldPath) {
|
|
|
1215
1225
|
`Ensure the schema is registered in your schema registry.`);
|
|
1216
1226
|
return;
|
|
1217
1227
|
}
|
|
1218
|
-
const schemaFn = createSchemaFunction(schema);
|
|
1228
|
+
const schemaFn = createSchemaFunction(schema, logger);
|
|
1219
1229
|
const path = fieldPath;
|
|
1220
1230
|
switch (config.type) {
|
|
1221
1231
|
case 'apply':
|
|
@@ -1238,9 +1248,14 @@ function applySchema(config, fieldPath) {
|
|
|
1238
1248
|
break;
|
|
1239
1249
|
}
|
|
1240
1250
|
}
|
|
1241
|
-
function createSchemaFunction(schema) {
|
|
1251
|
+
function createSchemaFunction(schema, logger) {
|
|
1242
1252
|
return (path) => {
|
|
1243
1253
|
schema.validators?.forEach((validatorConfig) => {
|
|
1254
|
+
if (requiresTreeValidation(validatorConfig)) {
|
|
1255
|
+
logger?.warn(`Validator "${validatorConfig.type}" in schema definition "${schema.name}" uses a cross-field expression, ` +
|
|
1256
|
+
`which is not supported on schema definition validators; it was skipped.`);
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1244
1259
|
applyValidator(validatorConfig, path);
|
|
1245
1260
|
});
|
|
1246
1261
|
schema.logic?.forEach((logicConfig) => {
|
|
@@ -1702,7 +1717,6 @@ const VALIDATION_EXECUTION_DEFAULTS = new InjectionToken('VALIDATION_EXECUTION_D
|
|
|
1702
1717
|
}),
|
|
1703
1718
|
});
|
|
1704
1719
|
|
|
1705
|
-
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1706
1720
|
function getFieldTreeByKey(ctx, key) {
|
|
1707
1721
|
if (!key.includes('.')) {
|
|
1708
1722
|
return ctx.fieldTree[key];
|
|
@@ -1765,12 +1779,19 @@ function createSchemaFromFields(fields, registry, optionsOrValidators) {
|
|
|
1765
1779
|
}
|
|
1766
1780
|
function applyCrossFieldTreeValidator(rootPath, validators, functionRegistry, logger) {
|
|
1767
1781
|
const customFunctions = functionRegistry.getCustomFunctions();
|
|
1782
|
+
const customValidators = validators.filter((entry) => {
|
|
1783
|
+
if (entry.config.type !== 'custom') {
|
|
1784
|
+
logger.warn(`Unexpected non-custom validator in cross-field tree for "${entry.sourceFieldKey}"; ignoring.`);
|
|
1785
|
+
return false;
|
|
1786
|
+
}
|
|
1787
|
+
return true;
|
|
1788
|
+
});
|
|
1768
1789
|
validateTree(rootPath, (ctx) => {
|
|
1769
|
-
if (
|
|
1790
|
+
if (customValidators.length === 0) {
|
|
1770
1791
|
return null; }
|
|
1771
1792
|
const formValue = ctx.value();
|
|
1772
1793
|
const errors = [];
|
|
1773
|
-
for (const entry of
|
|
1794
|
+
for (const entry of customValidators) {
|
|
1774
1795
|
const { sourceFieldKey, config } = entry;
|
|
1775
1796
|
try {
|
|
1776
1797
|
const error = evaluateCrossFieldValidator(entry, formValue, sourceFieldKey, ctx, customFunctions, logger);
|
|
@@ -1803,12 +1824,7 @@ function evaluateCrossFieldValidator(entry, formValue, sourceFieldKey, ctx, cust
|
|
|
1803
1824
|
customFunctions,
|
|
1804
1825
|
logger,
|
|
1805
1826
|
};
|
|
1806
|
-
if (config.type === 'custom') {
|
|
1807
1827
|
return evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx);
|
|
1808
|
-
}
|
|
1809
|
-
else {
|
|
1810
|
-
return evaluateBuiltInCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx);
|
|
1811
|
-
}
|
|
1812
1828
|
}
|
|
1813
1829
|
function evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx) {
|
|
1814
1830
|
if (!config.expression) {
|
|
@@ -1851,95 +1867,6 @@ function evaluateCustomCrossFieldValidator(config, evaluationContext, sourceFiel
|
|
|
1851
1867
|
}
|
|
1852
1868
|
return errorObj;
|
|
1853
1869
|
}
|
|
1854
|
-
function evaluateBuiltInCrossFieldValidator(config, evaluationContext, sourceFieldKey, ctx) {
|
|
1855
|
-
const { fieldValue, formValue, logger, customFunctions } = evaluationContext;
|
|
1856
|
-
if (config.when) {
|
|
1857
|
-
const conditionMet = evaluateCondition(config.when, {
|
|
1858
|
-
fieldValue,
|
|
1859
|
-
formValue,
|
|
1860
|
-
fieldPath: sourceFieldKey,
|
|
1861
|
-
customFunctions: customFunctions || {},
|
|
1862
|
-
logger,
|
|
1863
|
-
});
|
|
1864
|
-
if (!conditionMet) {
|
|
1865
|
-
return null; }
|
|
1866
|
-
}
|
|
1867
|
-
const isValid = applyBuiltInValidationLogic(config, fieldValue);
|
|
1868
|
-
if (isValid) {
|
|
1869
|
-
return null; }
|
|
1870
|
-
const targetField = getFieldTreeByKey(ctx, sourceFieldKey);
|
|
1871
|
-
if (!targetField) {
|
|
1872
|
-
logger.warn(`Cross-field validator references non-existent field "${sourceFieldKey}"`);
|
|
1873
|
-
return null;
|
|
1874
|
-
}
|
|
1875
|
-
const errorObj = {
|
|
1876
|
-
kind: config.type,
|
|
1877
|
-
fieldTree: targetField,
|
|
1878
|
-
};
|
|
1879
|
-
if ('value' in config && config.value !== undefined) {
|
|
1880
|
-
errorObj[config.type] = config.value;
|
|
1881
|
-
}
|
|
1882
|
-
return errorObj;
|
|
1883
|
-
}
|
|
1884
|
-
function applyBuiltInValidationLogic(config, fieldValue) {
|
|
1885
|
-
switch (config.type) {
|
|
1886
|
-
case 'required':
|
|
1887
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1888
|
-
return false;
|
|
1889
|
-
}
|
|
1890
|
-
if (typeof fieldValue === 'string' && fieldValue.trim() === '') {
|
|
1891
|
-
return false;
|
|
1892
|
-
}
|
|
1893
|
-
return true;
|
|
1894
|
-
case 'min':
|
|
1895
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1896
|
-
return true; }
|
|
1897
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1898
|
-
return fieldValue >= config.value;
|
|
1899
|
-
}
|
|
1900
|
-
return true;
|
|
1901
|
-
case 'max':
|
|
1902
|
-
if (fieldValue === null || fieldValue === undefined) {
|
|
1903
|
-
return true;
|
|
1904
|
-
}
|
|
1905
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1906
|
-
return fieldValue <= config.value;
|
|
1907
|
-
}
|
|
1908
|
-
return true;
|
|
1909
|
-
case 'minLength':
|
|
1910
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1911
|
-
return true;
|
|
1912
|
-
}
|
|
1913
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1914
|
-
return String(fieldValue).length >= config.value;
|
|
1915
|
-
}
|
|
1916
|
-
return true;
|
|
1917
|
-
case 'maxLength':
|
|
1918
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1919
|
-
return true;
|
|
1920
|
-
}
|
|
1921
|
-
if ('value' in config && typeof config.value === 'number') {
|
|
1922
|
-
return String(fieldValue).length <= config.value;
|
|
1923
|
-
}
|
|
1924
|
-
return true;
|
|
1925
|
-
case 'email':
|
|
1926
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1927
|
-
return true;
|
|
1928
|
-
}
|
|
1929
|
-
return emailPattern.test(String(fieldValue));
|
|
1930
|
-
case 'pattern':
|
|
1931
|
-
if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
|
|
1932
|
-
return true;
|
|
1933
|
-
}
|
|
1934
|
-
if ('value' in config && config.value) {
|
|
1935
|
-
const regex = config.value instanceof RegExp ? config.value : new RegExp(String(config.value));
|
|
1936
|
-
return regex.test(String(fieldValue));
|
|
1937
|
-
}
|
|
1938
|
-
return true;
|
|
1939
|
-
default:
|
|
1940
|
-
return true;
|
|
1941
|
-
}
|
|
1942
|
-
}
|
|
1943
1870
|
function fieldsToDefaultValues(fields, registry) {
|
|
1944
1871
|
const defaultValues = {};
|
|
1945
1872
|
for (const field of fields) {
|
|
@@ -2011,38 +1938,25 @@ function collectFromField(field, collection, pathPrefix) {
|
|
|
2011
1938
|
}
|
|
2012
1939
|
}
|
|
2013
1940
|
function tryCreateValidatorEntry(fieldKey, config) {
|
|
2014
|
-
|
|
1941
|
+
if (!requiresTreeValidation(config)) {
|
|
1942
|
+
return null; }
|
|
1943
|
+
if (config.type === 'custom') {
|
|
2015
1944
|
const customConfig = config;
|
|
2016
|
-
if (isCrossFieldValidator(customConfig)) {
|
|
2017
|
-
return {
|
|
2018
|
-
sourceFieldKey: fieldKey,
|
|
2019
|
-
config,
|
|
2020
|
-
dependsOn: extractStringDependencies(customConfig.expression || ''),
|
|
2021
|
-
category: 'validator',
|
|
2022
|
-
};
|
|
2023
|
-
}
|
|
2024
|
-
}
|
|
2025
|
-
if (isCrossFieldBuiltInValidator(config)) {
|
|
2026
|
-
const builtInConfig = config;
|
|
2027
|
-
return {
|
|
2028
|
-
sourceFieldKey: fieldKey,
|
|
2029
|
-
config: convertBuiltInToCustomValidator(builtInConfig),
|
|
2030
|
-
validatorType: config.type,
|
|
2031
|
-
dependsOn: extractStringDependencies(builtInConfig.expression || ''),
|
|
2032
|
-
category: 'validator',
|
|
2033
|
-
};
|
|
2034
|
-
}
|
|
2035
|
-
if (hasCrossFieldWhenCondition(config)) {
|
|
2036
|
-
const whenCondition = config.when;
|
|
2037
1945
|
return {
|
|
2038
1946
|
sourceFieldKey: fieldKey,
|
|
2039
1947
|
config,
|
|
2040
|
-
|
|
2041
|
-
dependsOn: extractExpressionDependencies(whenCondition),
|
|
1948
|
+
dependsOn: extractStringDependencies(customConfig.expression || ''),
|
|
2042
1949
|
category: 'validator',
|
|
2043
1950
|
};
|
|
2044
1951
|
}
|
|
2045
|
-
|
|
1952
|
+
const builtInConfig = config;
|
|
1953
|
+
return {
|
|
1954
|
+
sourceFieldKey: fieldKey,
|
|
1955
|
+
config: convertBuiltInToCustomValidator(builtInConfig),
|
|
1956
|
+
validatorType: config.type,
|
|
1957
|
+
dependsOn: extractStringDependencies(builtInConfig.expression || ''),
|
|
1958
|
+
category: 'validator',
|
|
1959
|
+
};
|
|
2046
1960
|
}
|
|
2047
1961
|
function tryCreateLogicEntry(fieldKey, config) {
|
|
2048
1962
|
if (!isStateLogicConfig(config)) {
|
|
@@ -4180,7 +4094,7 @@ function createDerivationRenderGate() {
|
|
|
4180
4094
|
if (!has || engine() !== 'idle')
|
|
4181
4095
|
return;
|
|
4182
4096
|
engine.set('loading');
|
|
4183
|
-
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-
|
|
4097
|
+
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs')
|
|
4184
4098
|
.then(({ bootstrapDerivationOrchestrator }) => {
|
|
4185
4099
|
runInInjectionContext(injector, () => bootstrapDerivationOrchestrator());
|
|
4186
4100
|
engine.set('wired');
|
|
@@ -4679,28 +4593,28 @@ const DISPLAY_FIELD_TYPES_BASE = {
|
|
|
4679
4593
|
const BUILT_IN_FIELDS = [
|
|
4680
4594
|
{
|
|
4681
4595
|
name: 'row',
|
|
4682
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4596
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
|
|
4683
4597
|
mapper: rowFieldMapper,
|
|
4684
4598
|
valueHandling: 'flatten',
|
|
4685
4599
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4686
4600
|
},
|
|
4687
4601
|
{
|
|
4688
4602
|
name: 'group',
|
|
4689
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-
|
|
4603
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs'),
|
|
4690
4604
|
mapper: groupFieldMapper,
|
|
4691
4605
|
valueHandling: 'include',
|
|
4692
4606
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4693
4607
|
},
|
|
4694
4608
|
{
|
|
4695
4609
|
name: 'array',
|
|
4696
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-
|
|
4610
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs'),
|
|
4697
4611
|
mapper: arrayFieldMapper,
|
|
4698
4612
|
valueHandling: 'include',
|
|
4699
4613
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4700
4614
|
},
|
|
4701
4615
|
{
|
|
4702
4616
|
name: 'page',
|
|
4703
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-
|
|
4617
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs'),
|
|
4704
4618
|
mapper: pageFieldMapper,
|
|
4705
4619
|
valueHandling: 'flatten',
|
|
4706
4620
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -4718,7 +4632,7 @@ const BUILT_IN_FIELDS = [
|
|
|
4718
4632
|
},
|
|
4719
4633
|
{
|
|
4720
4634
|
name: 'container',
|
|
4721
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4635
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
|
|
4722
4636
|
mapper: containerFieldMapper,
|
|
4723
4637
|
valueHandling: 'flatten',
|
|
4724
4638
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -5122,4 +5036,4 @@ function arrayEvent(arrayKey) {
|
|
|
5122
5036
|
|
|
5123
5037
|
|
|
5124
5038
|
export { withValueExclusionDefaults as $, ArrayItemRegistryService as A, BUILT_IN_FIELDS as B, CONTAINER_FIELD_PROCESSORS as C, DfFieldOutlet as D, EventDispatcher as E, FormStateManager as F, PrependArrayItemEvent as G, PreviousPageEvent as H, InsertArrayItemEvent as I, TextAddonComponent as J, arrayEvent as K, createWrappers as L, MoveArrayItemEvent as M, NextPageEvent as N, isWrappersBundle as O, PROPERTY_OVERRIDE_STORE as P, provideDynamicForm as Q, RemoveAtIndexEvent as R, ShiftArrayItemEvent as S, TemplateAddonComponent as T, sanitizeFormConfig as U, withAddonActions as V, withCustomAddon as W, withEventFormValue as X, withLegacyStatusClasses as Y, withLoggerConfig as Z, withValidationExecutionDefaults as _, isSameWrapperChain as a, wrapperProps as a0, createWrapperChainController as b, createFieldResolutionPipe as c, createSchemaFromFields as d, createHiddenSignal as e, createRenderReadySignal as f, getNormalizedArrayMetadata as g, getFieldDefaultValue as h, injectFieldRegistry as i, DEV_MODE as j, DEFAULT_DEBOUNCE_MS as k, DERIVATION_WARNING_TRACKER as l, mapFieldToInputs as m, DERIVATION_LOG_CONFIG as n, AppendArrayItemEvent as o, ComponentAddonComponent as p, ConsoleLogger as q, resolveWrappers as r, DfTemplate as s, traverseFieldsWithContext as t, DynamicForm as u, FormClearEvent as v, FormResetEvent as w, FormSubmitEvent as x, PageChangeEvent as y, PopArrayItemEvent as z };
|
|
5125
|
-
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-
|
|
5039
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map
|