@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.
Files changed (26) hide show
  1. package/README.md +4 -1
  2. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs} +2 -2
  3. 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
  4. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs} +2 -2
  5. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs.map} +1 -1
  6. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs} +2 -2
  7. 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
  8. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs} +2 -2
  9. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs.map → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs.map} +1 -1
  10. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +17 -67
  11. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  12. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +65 -45
  13. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  14. 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
  15. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map +1 -0
  16. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs} +2 -2
  17. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs.map → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map} +1 -1
  18. package/fesm2022/ng-forge-dynamic-forms-testing.mjs +84 -0
  19. package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -0
  20. package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
  21. package/package.json +5 -1
  22. package/types/ng-forge-dynamic-forms-integration.d.ts +6 -54
  23. package/types/ng-forge-dynamic-forms-internal.d.ts +53 -13
  24. package/types/ng-forge-dynamic-forms-testing.d.ts +58 -0
  25. package/types/ng-forge-dynamic-forms.d.ts +1 -1
  26. 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, isCrossFieldValidator, extractStringDependencies, isCrossFieldBuiltInValidator, hasCrossFieldWhenCondition, extractExpressionDependencies, isCrossFieldStateLogic, 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';
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-C9bQkVjQ.mjs').then(m => m.default)], () => [/* @ts-ignore */
826
- import('./ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs').then(m => m.default)]] });
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-C9bQkVjQ.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
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 (validators.length === 0) {
1790
+ if (customValidators.length === 0) {
1770
1791
  return null; }
1771
1792
  const formValue = ctx.value();
1772
1793
  const errors = [];
1773
- for (const entry of validators) {
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
- if (config.type === 'custom') {
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
- validatorType: config.type,
2041
- dependsOn: extractExpressionDependencies(whenCondition),
1948
+ dependsOn: extractStringDependencies(customConfig.expression || ''),
2042
1949
  category: 'validator',
2043
1950
  };
2044
1951
  }
2045
- return null;
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-CFSJLZPZ.mjs')
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-B_bQ-f2g.mjs'),
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-Bl9WRPvF.mjs'),
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-CftX-bCB.mjs'),
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-C9bQkVjQ.mjs'),
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-B_bQ-f2g.mjs'),
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-fMB33l2f.mjs.map
5039
+ //# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map