@ng-forge/dynamic-forms 1.0.0 → 1.1.0-next.2

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 (24) hide show
  1. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs → ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs} +2 -2
  2. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs.map → ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs.map} +1 -1
  3. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs} +2 -2
  4. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs.map} +1 -1
  5. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs → ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs} +2 -2
  6. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs.map → ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs.map} +1 -1
  7. package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs → ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs} +4 -3
  8. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs.map +1 -0
  9. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs → ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs} +2 -2
  10. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs.map → ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs.map} +1 -1
  11. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +48 -18
  12. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  13. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +77 -35
  14. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  15. package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs} +22 -14
  16. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs.map +1 -0
  17. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs → ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs} +2 -2
  18. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs.map → ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs.map} +1 -1
  19. package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
  20. package/package.json +1 -1
  21. package/types/ng-forge-dynamic-forms-integration.d.ts +28 -2
  22. package/types/ng-forge-dynamic-forms-internal.d.ts +35 -3
  23. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs.map +0 -1
  24. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs.map +0 -1
@@ -1720,12 +1720,15 @@ class FieldContextRegistryService {
1720
1720
  },
1721
1721
  };
1722
1722
  }
1723
- createDisplayOnlyContext(fieldPath, customFunctions) {
1724
- const formValue = this.rootFormRegistry.formValue();
1723
+ createDisplayOnlyContext(fieldPath, customFunctions, arrayScope) {
1724
+ const rootFormValue = this.rootFormRegistry.formValue();
1725
+ if (arrayScope) {
1726
+ return this.buildArrayScopedContext(rootFormValue, arrayScope, undefined, customFunctions, true);
1727
+ }
1725
1728
  const rootFormSignal = this.rootFormRegistry.rootForm;
1726
1729
  return {
1727
1730
  fieldValue: undefined,
1728
- formValue,
1731
+ formValue: rootFormValue,
1729
1732
  fieldPath,
1730
1733
  customFunctions: customFunctions || {},
1731
1734
  externalData: this.resolveExternalData(true),
@@ -2182,6 +2185,18 @@ function validateNoNestedHttpConditions(expression) {
2182
2185
  }
2183
2186
  }
2184
2187
  }
2188
+ function containsInlineFunction(expression) {
2189
+ if (expression.type === 'and' || expression.type === 'or') {
2190
+ return expression.conditions.some(containsInlineFunction);
2191
+ }
2192
+ if (expression.type === 'custom') {
2193
+ return typeof expression.fn === 'function';
2194
+ }
2195
+ if (expression.type === 'async') {
2196
+ return typeof expression.asyncFn === 'function';
2197
+ }
2198
+ return false;
2199
+ }
2185
2200
  function createLogicFunction(expression) {
2186
2201
  if (expression?.type === 'async') {
2187
2202
  return createAsyncConditionLogicFunction(expression);
@@ -2195,16 +2210,21 @@ function createLogicFunction(expression) {
2195
2210
  const functionRegistry = inject(FunctionRegistryService);
2196
2211
  const fieldContextRegistry = inject(FieldContextRegistryService);
2197
2212
  const cacheService = inject(LogicFunctionCacheService);
2213
+ const cacheable = !expression || !containsInlineFunction(expression);
2198
2214
  const cacheKey = stableStringify(expression);
2215
+ if (cacheable) {
2199
2216
  const cached = cacheService.logicFunctionCache.get(cacheKey);
2200
- if (cached) {
2201
- return cached;
2217
+ if (cached) {
2218
+ return cached;
2219
+ }
2202
2220
  }
2203
2221
  const fn = (ctx) => {
2204
2222
  const evaluationContext = fieldContextRegistry.createReactiveEvaluationContext(ctx, functionRegistry.getCustomFunctions());
2205
2223
  return evaluateCondition(expression, evaluationContext);
2206
2224
  };
2225
+ if (cacheable) {
2207
2226
  cacheService.logicFunctionCache.set(cacheKey, fn);
2227
+ }
2208
2228
  return fn;
2209
2229
  }
2210
2230
  function createDebouncedLogicFunction(expression, debounceMs) {
@@ -2221,10 +2241,13 @@ function createDebouncedLogicFunction(expression, debounceMs) {
2221
2241
  const fieldContextRegistry = inject(FieldContextRegistryService);
2222
2242
  const injector = inject(Injector);
2223
2243
  const cacheService = inject(LogicFunctionCacheService);
2244
+ const cacheable = !expression || !containsInlineFunction(expression);
2224
2245
  const cacheKey = `${stableStringify(expression)}:${debounceMs}`;
2246
+ if (cacheable) {
2225
2247
  const cached = cacheService.debouncedLogicFunctionCache.get(cacheKey);
2226
- if (cached) {
2227
- return cached;
2248
+ if (cached) {
2249
+ return cached;
2250
+ }
2228
2251
  }
2229
2252
  const fn = (ctx) => {
2230
2253
  const contextKey = safeReadPathKeys(ctx).join('.');
@@ -2249,7 +2272,9 @@ function createDebouncedLogicFunction(expression, debounceMs) {
2249
2272
  });
2250
2273
  return debouncedValue() ?? false;
2251
2274
  };
2275
+ if (cacheable) {
2252
2276
  cacheService.debouncedLogicFunctionCache.set(cacheKey, fn);
2277
+ }
2253
2278
  return fn;
2254
2279
  }
2255
2280
 
@@ -2328,7 +2353,10 @@ function evaluateLogicCondition(condition, ctx) {
2328
2353
  if (isFormStateCondition(condition)) {
2329
2354
  return evaluateFormStateCondition(condition, ctx);
2330
2355
  }
2331
- const formValue = (ctx.formValue ?? ctx.form().value());
2356
+ if (ctx.evaluationContext) {
2357
+ return evaluateCondition(condition, ctx.evaluationContext());
2358
+ }
2359
+ const formValue = (ctx.formValue ?? ctx.form().value());
2332
2360
  const evaluationContext = {
2333
2361
  fieldValue: undefined,
2334
2362
  formValue,
@@ -2356,6 +2384,7 @@ function evaluateLogicOfType(fieldLogic, logicType, ctx) {
2356
2384
  const buttonCtx = {
2357
2385
  form: ctx.form,
2358
2386
  formValue: ctx.formValue,
2387
+ evaluationContext: ctx.evaluationContext,
2359
2388
  logger: ctx.logger,
2360
2389
  };
2361
2390
  return fieldLogic.filter((logic) => logic.type === logicType).some((logic) => evaluateLogicCondition(logic.condition, buttonCtx));
@@ -2412,6 +2441,7 @@ function evaluateNonFieldHidden(ctx) {
2412
2441
  return evaluateLogicOfType(ctx.fieldLogic, 'hidden', {
2413
2442
  form: ctx.form,
2414
2443
  formValue: ctx.formValue,
2444
+ evaluationContext: ctx.evaluationContext,
2415
2445
  logger: ctx.logger,
2416
2446
  });
2417
2447
  }
@@ -2428,6 +2458,7 @@ function evaluateNonFieldDisabled(ctx) {
2428
2458
  return evaluateLogicOfType(ctx.fieldLogic, 'disabled', {
2429
2459
  form: ctx.form,
2430
2460
  formValue: ctx.formValue,
2461
+ evaluationContext: ctx.evaluationContext,
2431
2462
  logger: ctx.logger,
2432
2463
  });
2433
2464
  }
@@ -2436,6 +2467,17 @@ function evaluateNonFieldDisabled(ctx) {
2436
2467
  function resolveNonFieldDisabled(ctx) {
2437
2468
  return computed(() => evaluateNonFieldDisabled(ctx));
2438
2469
  }
2470
+ function injectNonFieldEvaluationContext(fieldDef, options = {}) {
2471
+ const fieldContextRegistry = inject(FieldContextRegistryService);
2472
+ const functionRegistry = inject(FunctionRegistryService);
2473
+ const arrayContext = options.scopeToArrayItem ? inject(ARRAY_CONTEXT, { optional: true }) : null;
2474
+ return () => {
2475
+ const arrayScope = arrayContext
2476
+ ? { arrayKey: arrayContext.arrayKey, index: arrayContext.index(), localKey: fieldDef.key ?? '' }
2477
+ : undefined;
2478
+ return fieldContextRegistry.createDisplayOnlyContext(fieldDef.key ?? '', functionRegistry.getCustomFunctions(), arrayScope);
2479
+ };
2480
+ }
2439
2481
 
2440
2482
  function isFunctionHttpValidator(config) {
2441
2483
  const c = config;
@@ -2989,7 +3031,7 @@ function buildClassName(fieldDef) {
2989
3031
  return classes.length > 0 ? classes.join(' ') : undefined;
2990
3032
  }
2991
3033
 
2992
- function applyHiddenLogic(inputs, fieldDef, rootFormRegistry) {
3034
+ function applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext) {
2993
3035
  const rootForm = rootFormRegistry.rootForm();
2994
3036
  if (rootForm && (fieldDef.hidden === true || fieldDef.logic?.some((l) => l.type === 'hidden'))) {
2995
3037
  inputs['hidden'] = evaluateNonFieldHidden({
@@ -2997,12 +3039,14 @@ function applyHiddenLogic(inputs, fieldDef, rootFormRegistry) {
2997
3039
  fieldLogic: fieldDef.logic,
2998
3040
  explicitValue: fieldDef.hidden,
2999
3041
  formValue: rootFormRegistry.formValue(),
3042
+ evaluationContext,
3000
3043
  });
3001
3044
  }
3002
3045
  }
3003
3046
 
3004
3047
  function arrayFieldMapper(fieldDef) {
3005
3048
  const rootFormRegistry = inject(RootFormRegistryService);
3049
+ const evaluationContext = injectNonFieldEvaluationContext(fieldDef, { scopeToArrayItem: true });
3006
3050
  const className = buildClassName(fieldDef);
3007
3051
  return computed(() => {
3008
3052
  const inputs = {
@@ -3010,7 +3054,7 @@ function arrayFieldMapper(fieldDef) {
3010
3054
  field: fieldDef,
3011
3055
  ...(className !== undefined && { className }),
3012
3056
  };
3013
- applyHiddenLogic(inputs, fieldDef, rootFormRegistry);
3057
+ applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext);
3014
3058
  return inputs;
3015
3059
  });
3016
3060
  }
@@ -3055,6 +3099,7 @@ function baseFieldMapper(fieldDef) {
3055
3099
 
3056
3100
  function containerFieldMapper(fieldDef) {
3057
3101
  const rootFormRegistry = inject(RootFormRegistryService);
3102
+ const evaluationContext = injectNonFieldEvaluationContext(fieldDef, { scopeToArrayItem: true });
3058
3103
  const className = buildClassName(fieldDef);
3059
3104
  return computed(() => {
3060
3105
  const containerField = { ...fieldDef, wrappers: undefined, skipAutoWrappers: undefined, skipDefaultWrappers: undefined };
@@ -3063,13 +3108,14 @@ function containerFieldMapper(fieldDef) {
3063
3108
  field: containerField,
3064
3109
  ...(className !== undefined && { className }),
3065
3110
  };
3066
- applyHiddenLogic(inputs, fieldDef, rootFormRegistry);
3111
+ applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext);
3067
3112
  return inputs;
3068
3113
  });
3069
3114
  }
3070
3115
 
3071
3116
  function groupFieldMapper(fieldDef) {
3072
3117
  const rootFormRegistry = inject(RootFormRegistryService);
3118
+ const evaluationContext = injectNonFieldEvaluationContext(fieldDef, { scopeToArrayItem: true });
3073
3119
  const className = buildClassName(fieldDef);
3074
3120
  return computed(() => {
3075
3121
  const inputs = {
@@ -3077,7 +3123,7 @@ function groupFieldMapper(fieldDef) {
3077
3123
  field: fieldDef,
3078
3124
  ...(className !== undefined && { className }),
3079
3125
  };
3080
- applyHiddenLogic(inputs, fieldDef, rootFormRegistry);
3126
+ applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext);
3081
3127
  return inputs;
3082
3128
  });
3083
3129
  }
@@ -3085,6 +3131,7 @@ function groupFieldMapper(fieldDef) {
3085
3131
  const ROW_WRAPPERS = [{ type: 'row' }];
3086
3132
  function rowFieldMapper(fieldDef) {
3087
3133
  const rootFormRegistry = inject(RootFormRegistryService);
3134
+ const evaluationContext = injectNonFieldEvaluationContext(fieldDef, { scopeToArrayItem: true });
3088
3135
  const className = buildClassName(fieldDef);
3089
3136
  return computed(() => {
3090
3137
  const containerField = { ...fieldDef, type: 'container', wrappers: ROW_WRAPPERS };
@@ -3093,7 +3140,7 @@ function rowFieldMapper(fieldDef) {
3093
3140
  field: containerField,
3094
3141
  ...(className !== undefined && { className }),
3095
3142
  };
3096
- applyHiddenLogic(inputs, fieldDef, rootFormRegistry);
3143
+ applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext);
3097
3144
  return inputs;
3098
3145
  });
3099
3146
  }
@@ -3109,11 +3156,12 @@ function pageFieldMapper(fieldDef) {
3109
3156
 
3110
3157
  function textFieldMapper(fieldDef) {
3111
3158
  const rootFormRegistry = inject(RootFormRegistryService);
3159
+ const evaluationContext = injectNonFieldEvaluationContext(fieldDef, { scopeToArrayItem: true });
3112
3160
  const defaultProps = inject(DEFAULT_PROPS);
3113
3161
  return computed(() => {
3114
3162
  const baseInputs = buildBaseInputs(fieldDef, defaultProps());
3115
3163
  const inputs = { ...baseInputs };
3116
- applyHiddenLogic(inputs, fieldDef, rootFormRegistry);
3164
+ applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext);
3117
3165
  return inputs;
3118
3166
  });
3119
3167
  }
@@ -3261,16 +3309,23 @@ function isDisplayOnlyField(field) {
3261
3309
  }
3262
3310
 
3263
3311
 
3312
+ function dynamicTextToObservable(value, injector) {
3313
+ if (value === undefined) {
3314
+ return of('');
3315
+ }
3316
+ if (isObservable(value)) {
3317
+ return value;
3318
+ }
3319
+ if (isSignal(value)) {
3320
+ return untracked(() => toObservable(value, { injector }));
3321
+ }
3322
+ return of(String(value));
3323
+ }
3324
+
3264
3325
  class DynamicTextPipe {
3265
3326
  injector = inject(Injector);
3266
3327
  transform(value) {
3267
- if (isObservable(value)) {
3268
- return value;
3269
- }
3270
- if (isSignal(value)) {
3271
- return toObservable(value, { injector: this.injector });
3272
- }
3273
- return of(value || '');
3328
+ return dynamicTextToObservable(value ?? undefined, this.injector);
3274
3329
  }
3275
3330
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DynamicTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
3276
3331
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.1", ngImport: i0, type: DynamicTextPipe, isStandalone: true, name: "dynamicText" });
@@ -3300,19 +3355,6 @@ function applyMetaToElement(element, meta, previouslyApplied) {
3300
3355
  return newApplied;
3301
3356
  }
3302
3357
 
3303
- function dynamicTextToObservable(value, injector) {
3304
- if (value === undefined) {
3305
- return of('');
3306
- }
3307
- if (isObservable(value)) {
3308
- return value;
3309
- }
3310
- if (isSignal(value)) {
3311
- return toObservable(value, { injector });
3312
- }
3313
- return of(String(value));
3314
- }
3315
-
3316
3358
  const INITIALIZATION_TIMEOUT_MS = new InjectionToken('INITIALIZATION_TIMEOUT_MS', {
3317
3359
  providedIn: 'root',
3318
3360
  factory: () => 10_000,
@@ -3605,5 +3647,5 @@ function createWarningTracker() {
3605
3647
 
3606
3648
 
3607
3649
 
3608
- export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
3650
+ export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, injectNonFieldEvaluationContext, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
3609
3651
  //# sourceMappingURL=ng-forge-dynamic-forms-internal.mjs.map