@ng-forge/dynamic-forms 1.1.0 → 1.2.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 (23) hide show
  1. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CvjDqYyq.mjs → ng-forge-dynamic-forms-array-field.component-B5t7W5fo.mjs} +2 -2
  2. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CvjDqYyq.mjs.map → ng-forge-dynamic-forms-array-field.component-B5t7W5fo.mjs.map} +1 -1
  3. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CcoUnroD.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-D_DGkAXj.mjs} +2 -2
  4. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CcoUnroD.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-D_DGkAXj.mjs.map} +1 -1
  5. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DZfVWjiM.mjs → ng-forge-dynamic-forms-container-field.component-CrWGMLMJ.mjs} +2 -2
  6. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DZfVWjiM.mjs.map → ng-forge-dynamic-forms-container-field.component-CrWGMLMJ.mjs.map} +1 -1
  7. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CPFgu3pM.mjs → ng-forge-dynamic-forms-group-field.component-Ds_k0Tkn.mjs} +2 -2
  8. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CPFgu3pM.mjs.map → ng-forge-dynamic-forms-group-field.component-Ds_k0Tkn.mjs.map} +1 -1
  9. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +6 -2
  10. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  11. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +168 -33
  12. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  13. package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-Du3V5AOb.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-DtnrCyH2.mjs} +150 -306
  14. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-DtnrCyH2.mjs.map +1 -0
  15. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-amWhCdHL.mjs → ng-forge-dynamic-forms-page-field.component-PWJ-9bnw.mjs} +47 -9
  16. package/fesm2022/ng-forge-dynamic-forms-page-field.component-PWJ-9bnw.mjs.map +1 -0
  17. package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
  18. package/package.json +2 -2
  19. package/types/ng-forge-dynamic-forms-integration.d.ts +8 -2
  20. package/types/ng-forge-dynamic-forms-internal.d.ts +63 -11
  21. package/types/ng-forge-dynamic-forms.d.ts +124 -24
  22. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-Du3V5AOb.mjs.map +0 -1
  23. package/fesm2022/ng-forge-dynamic-forms-page-field.component-amWhCdHL.mjs.map +0 -1
@@ -295,7 +295,11 @@ function hasTargetProperty(config) {
295
295
  }
296
296
 
297
297
  const FORM_VALUE_ACCESS_PATTERN = /\bformValue\s*(?:\.|\[)/;
298
- const FORM_VALUE_PATTERN = /\bformValue\s*(?:\.([\w.]+)|\[\s*'([\w.-]+)'\s*\]|\[\s*"([\w.-]+)"\s*\])/g;
298
+ const ID_START = String.raw `[\p{ID_Start}$_]`;
299
+ const ID_PART = String.raw `[\p{ID_Continue}$]`;
300
+ const DOTTED_PATH = String.raw `${ID_START}${ID_PART}*(?:\.${ID_START}${ID_PART}*)*`;
301
+ const BRACKET_KEY = String.raw `[\p{ID_Continue}$.\-]+`;
302
+ const FORM_VALUE_PATTERN = new RegExp(String.raw `\bformValue\s*(?:\.(${DOTTED_PATH})|\[\s*'(${BRACKET_KEY})'\s*\]|\[\s*"(${BRACKET_KEY})"\s*\])`, 'gu');
299
303
  function isCrossFieldExpression(expr, context) {
300
304
  if (expr === undefined || typeof expr === 'boolean' || isFormStateCondition(expr)) {
301
305
  return false;
@@ -392,15 +396,6 @@ function hasCrossFieldWhenCondition(config, context) {
392
396
  }
393
397
  return isCrossFieldExpression(config.when, context);
394
398
  }
395
- function requiresTreeValidation(config) {
396
- if (isResourceBasedValidator(config)) {
397
- return false;
398
- }
399
- if (config.type === 'custom') {
400
- return isCrossFieldValidator(config);
401
- }
402
- return isCrossFieldBuiltInValidator(config);
403
- }
404
399
  function isCrossFieldStateLogic(config, context) {
405
400
  return isCrossFieldExpression(config.condition, context);
406
401
  }
@@ -585,6 +580,8 @@ class ExpressionParserError extends DynamicFormError {
585
580
  }
586
581
  }
587
582
 
583
+ const IDENTIFIER_START = /[\p{ID_Start}$_]/u;
584
+ const IDENTIFIER_PART = /[\p{ID_Continue}$]/u;
588
585
  class Tokenizer {
589
586
  position = 0;
590
587
  expression;
@@ -617,7 +614,7 @@ class Tokenizer {
617
614
  if (/[0-9]/.test(char)) {
618
615
  return this.readNumber();
619
616
  }
620
- if (/[a-zA-Z_$]/.test(char)) {
617
+ if (IDENTIFIER_START.test(this.codePointAt(this.position))) {
621
618
  return this.readIdentifierOrKeyword();
622
619
  }
623
620
  return this.readOperatorOrPunctuation();
@@ -676,12 +673,20 @@ class Tokenizer {
676
673
  readIdentifierOrKeyword() {
677
674
  const start = this.position;
678
675
  let value = '';
679
- while (this.position < this.expression.length && /[a-zA-Z0-9_$]/.test(this.expression[this.position])) {
680
- value += this.expression[this.position];
681
- this.position++;
676
+ while (this.position < this.expression.length) {
677
+ const char = this.codePointAt(this.position);
678
+ if (!IDENTIFIER_PART.test(char)) {
679
+ break;
680
+ }
681
+ value += char;
682
+ this.position += char.length;
682
683
  }
683
684
  const type = this.getKeywordType(value);
684
685
  return { type, value, position: start };
686
+ }
687
+ codePointAt(position) {
688
+ const codePoint = this.expression.codePointAt(position);
689
+ return codePoint === undefined ? '' : String.fromCodePoint(codePoint);
685
690
  }
686
691
  getKeywordType(value) {
687
692
  switch (value) {
@@ -1570,6 +1575,51 @@ function safeReadPathKeys(fieldContext) {
1570
1575
  return untracked(() => fieldContext.pathKeys());
1571
1576
  }
1572
1577
 
1578
+ function createFieldValueProxy(getRootForm, getRootFormValue) {
1579
+ const readField = (key) => {
1580
+ const root = getRootForm();
1581
+ const accessor = root?.[key];
1582
+ if (typeof accessor === 'function') {
1583
+ const state = untracked(() => accessor());
1584
+ const valueSig = state && state.value;
1585
+ if (typeof valueSig === 'function') {
1586
+ return { hit: true, value: valueSig() };
1587
+ }
1588
+ }
1589
+ return { hit: false, value: undefined };
1590
+ };
1591
+ return new Proxy({}, {
1592
+ get(_target, prop) {
1593
+ if (typeof prop === 'symbol')
1594
+ return undefined;
1595
+ const { hit, value } = readField(prop);
1596
+ return hit ? value : getRootFormValue()[prop];
1597
+ },
1598
+ has(_target, prop) {
1599
+ if (typeof prop === 'symbol')
1600
+ return false;
1601
+ const root = getRootForm();
1602
+ if (root && prop in root)
1603
+ return true;
1604
+ return prop in getRootFormValue();
1605
+ },
1606
+ ownKeys() {
1607
+ return Reflect.ownKeys(getRootFormValue());
1608
+ },
1609
+ getOwnPropertyDescriptor(_target, prop) {
1610
+ if (typeof prop === 'symbol')
1611
+ return undefined;
1612
+ const whole = getRootFormValue();
1613
+ if (!(prop in whole))
1614
+ return undefined;
1615
+ const { hit, value } = readField(prop);
1616
+ return { value: hit ? value : whole[prop], enumerable: true, configurable: true, writable: false };
1617
+ },
1618
+ set() {
1619
+ return false; },
1620
+ });
1621
+ }
1622
+
1573
1623
  function isChildFieldContext(context) {
1574
1624
  return 'key' in context && isSignal(context.key);
1575
1625
  }
@@ -1580,6 +1630,17 @@ function extractFieldState(fieldContext) {
1580
1630
  return fieldContext.state;
1581
1631
  });
1582
1632
  }
1633
+ function navigateArrayItemTree(root, arrayKey, index) {
1634
+ let node = root;
1635
+ for (const segment of arrayKey.split('.')) {
1636
+ if (node == null)
1637
+ return undefined;
1638
+ node = node[segment];
1639
+ }
1640
+ if (node == null)
1641
+ return undefined;
1642
+ return node[index];
1643
+ }
1583
1644
  function detectArrayScope(pathKeys) {
1584
1645
  if (pathKeys.length < 3)
1585
1646
  return undefined;
@@ -1693,6 +1754,65 @@ class FieldContextRegistryService {
1693
1754
  return formFieldStateGetter();
1694
1755
  },
1695
1756
  };
1757
+ }
1758
+ buildReactiveArrayScopedContext(arrayScope, fieldValue, customFunctions, fieldContext) {
1759
+ const { arrayKey, index, localKey } = arrayScope;
1760
+ const rootFormSignal = this.rootFormRegistry.rootForm;
1761
+ const resolveExternalData = () => this.resolveExternalData();
1762
+ const fieldStateGetter = fieldContext ? () => readFieldStateInfo(extractFieldState(fieldContext), true) : () => undefined;
1763
+ const formFieldStateGetter = () => createFormFieldStateMap(rootFormSignal(), true);
1764
+ const hasValidItem = untracked(() => {
1765
+ const arrayData = getNestedValue(this.rootFormRegistry.formValue(), arrayKey);
1766
+ if (!Array.isArray(arrayData) || index < 0 || index >= arrayData.length)
1767
+ return false;
1768
+ const item = arrayData[index];
1769
+ return item != null && typeof item === 'object';
1770
+ });
1771
+ const rootFormValueProxy = createFieldValueProxy(() => rootFormSignal(), () => this.rootFormRegistry.formValue());
1772
+ if (!hasValidItem) {
1773
+ return {
1774
+ fieldValue,
1775
+ formValue: rootFormValueProxy,
1776
+ fieldPath: localKey,
1777
+ customFunctions: customFunctions || {},
1778
+ logger: this.logger,
1779
+ deprecationTracker: this.deprecationTracker ?? undefined,
1780
+ get externalData() {
1781
+ return resolveExternalData();
1782
+ },
1783
+ get fieldState() {
1784
+ return fieldStateGetter();
1785
+ },
1786
+ get formFieldState() {
1787
+ return formFieldStateGetter();
1788
+ },
1789
+ };
1790
+ }
1791
+ const itemFormValueProxy = createFieldValueProxy(() => navigateArrayItemTree(rootFormSignal(), arrayKey, index), () => {
1792
+ const arrayData = getNestedValue(this.rootFormRegistry.formValue(), arrayKey);
1793
+ const item = Array.isArray(arrayData) ? arrayData[index] : undefined;
1794
+ return item != null && typeof item === 'object' ? item : {};
1795
+ });
1796
+ return {
1797
+ fieldValue,
1798
+ formValue: itemFormValueProxy,
1799
+ rootFormValue: rootFormValueProxy,
1800
+ arrayIndex: index,
1801
+ arrayPath: arrayKey,
1802
+ fieldPath: `${arrayKey}.${index}.${localKey}`,
1803
+ customFunctions: customFunctions || {},
1804
+ logger: this.logger,
1805
+ deprecationTracker: this.deprecationTracker ?? undefined,
1806
+ get externalData() {
1807
+ return resolveExternalData();
1808
+ },
1809
+ get fieldState() {
1810
+ return fieldStateGetter();
1811
+ },
1812
+ get formFieldState() {
1813
+ return formFieldStateGetter();
1814
+ },
1815
+ };
1696
1816
  }
1697
1817
  resolveExternalData() {
1698
1818
  const externalDataSignal = this.externalDataSignal;
@@ -1702,29 +1822,48 @@ class FieldContextRegistryService {
1702
1822
  if (!externalDataRecord) {
1703
1823
  return undefined;
1704
1824
  }
1705
- const resolved = {};
1706
- for (const [key, value] of Object.entries(externalDataRecord)) {
1825
+ const readKey = (key) => {
1826
+ const value = externalDataRecord[key];
1707
1827
  if (!isSignal(value)) {
1708
1828
  throw new DynamicFormError(`externalData["${key}"] must be a Signal. Got: ${typeof value}. Wrap it with signal(yourValue).`);
1709
1829
  }
1710
- resolved[key] = value();
1711
- }
1712
- return resolved;
1830
+ return value();
1831
+ };
1832
+ return new Proxy({}, {
1833
+ get(_target, prop) {
1834
+ if (typeof prop === 'symbol' || !(prop in externalDataRecord))
1835
+ return undefined;
1836
+ return readKey(prop);
1837
+ },
1838
+ has(_target, prop) {
1839
+ return typeof prop === 'string' && prop in externalDataRecord;
1840
+ },
1841
+ ownKeys() {
1842
+ return Reflect.ownKeys(externalDataRecord);
1843
+ },
1844
+ getOwnPropertyDescriptor(_target, prop) {
1845
+ if (typeof prop !== 'string' || !(prop in externalDataRecord))
1846
+ return undefined;
1847
+ return { value: readKey(prop), enumerable: true, configurable: true, writable: false };
1848
+ },
1849
+ set() {
1850
+ return false; },
1851
+ });
1713
1852
  }
1714
1853
  createReactiveEvaluationContext(fieldContext, customFunctions) {
1715
1854
  const fieldValue = fieldContext.value();
1716
- const rootFormValue = this.rootFormRegistry.formValue();
1717
1855
  const pathKeys = safeReadPathKeys(fieldContext);
1718
1856
  const arrayScope = detectArrayScope(pathKeys);
1719
1857
  if (arrayScope) {
1720
- return this.buildArrayScopedContext(rootFormValue, arrayScope, fieldValue, customFunctions, true, fieldContext);
1858
+ return this.buildReactiveArrayScopedContext(arrayScope, fieldValue, customFunctions, fieldContext);
1721
1859
  }
1722
1860
  const localKey = this.extractFieldPath(fieldContext);
1723
1861
  const rootFormSignal = this.rootFormRegistry.rootForm;
1724
1862
  const resolveExternalData = () => this.resolveExternalData();
1863
+ const formValueProxy = createFieldValueProxy(() => rootFormSignal(), () => this.rootFormRegistry.formValue());
1725
1864
  return {
1726
1865
  fieldValue,
1727
- formValue: rootFormValue,
1866
+ formValue: formValueProxy,
1728
1867
  fieldPath: localKey,
1729
1868
  customFunctions: customFunctions || {},
1730
1869
  logger: this.logger,
@@ -1741,15 +1880,15 @@ class FieldContextRegistryService {
1741
1880
  };
1742
1881
  }
1743
1882
  createDisplayOnlyContext(fieldPath, customFunctions, arrayScope) {
1744
- const rootFormValue = this.rootFormRegistry.formValue();
1745
1883
  if (arrayScope) {
1746
- return this.buildArrayScopedContext(rootFormValue, arrayScope, undefined, customFunctions, true);
1884
+ return this.buildReactiveArrayScopedContext(arrayScope, undefined, customFunctions);
1747
1885
  }
1748
1886
  const rootFormSignal = this.rootFormRegistry.rootForm;
1749
1887
  const resolveExternalData = () => this.resolveExternalData();
1888
+ const formValueProxy = createFieldValueProxy(() => rootFormSignal(), () => this.rootFormRegistry.formValue());
1750
1889
  return {
1751
1890
  fieldValue: undefined,
1752
- formValue: rootFormValue,
1891
+ formValue: formValueProxy,
1753
1892
  fieldPath,
1754
1893
  customFunctions: customFunctions || {},
1755
1894
  logger: this.logger,
@@ -2570,9 +2709,9 @@ function createDynamicValueFunction(expression) {
2570
2709
  return cached;
2571
2710
  }
2572
2711
  const fn = (ctx) => {
2573
- const evaluationContext = fieldContextRegistry.createEvaluationContext(ctx);
2712
+ const evaluationContext = fieldContextRegistry.createReactiveEvaluationContext(ctx);
2574
2713
  try {
2575
- return ExpressionParser.evaluate(expression, evaluationContext);
2714
+ return (ExpressionParser.evaluate(expression, evaluationContext) ?? undefined);
2576
2715
  }
2577
2716
  catch (error) {
2578
2717
  logger.error('Error evaluating dynamic expression:', expression, error);
@@ -2636,9 +2775,6 @@ function createConditionalLogic(when) {
2636
2775
  }
2637
2776
  function applyValidator(config, fieldPath) {
2638
2777
  const path = fieldPath;
2639
- if (requiresTreeValidation(config)) {
2640
- return;
2641
- }
2642
2778
  switch (config.type) {
2643
2779
  case 'required':
2644
2780
  required(path, config.when ? { when: createConditionalLogic(config.when) } : undefined);
@@ -2742,7 +2878,7 @@ function createExpressionValidator(config) {
2742
2878
  const functionRegistry = inject(FunctionRegistryService);
2743
2879
  return (ctx) => {
2744
2880
  try {
2745
- const evaluationContext = fieldContextRegistry.createEvaluationContext(ctx, functionRegistry.getCustomFunctions());
2881
+ const evaluationContext = fieldContextRegistry.createReactiveEvaluationContext(ctx, functionRegistry.getCustomFunctions());
2746
2882
  const result = ExpressionParser.evaluate(expression, evaluationContext);
2747
2883
  if (result) {
2748
2884
  return null;
@@ -3079,7 +3215,6 @@ function applyHiddenLogic(inputs, fieldDef, rootFormRegistry, evaluationContext)
3079
3215
  form: rootForm,
3080
3216
  fieldLogic: fieldDef.logic,
3081
3217
  explicitValue: fieldDef.hidden,
3082
- formValue: rootFormRegistry.formValue(),
3083
3218
  evaluationContext,
3084
3219
  });
3085
3220
  }
@@ -3688,5 +3823,5 @@ function createWarningTracker() {
3688
3823
 
3689
3824
 
3690
3825
 
3691
- 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, buildClassName, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createFormStateLogicFunction, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getGridClassString, 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, requiresTreeValidation, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
3826
+ 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, buildClassName, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFieldValueProxy, createFormFieldStateMap, createFormStateLogicFunction, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getGridClassString, 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 };
3692
3827
  //# sourceMappingURL=ng-forge-dynamic-forms-internal.mjs.map