@ng-forge/dynamic-forms 1.1.0-next.1 → 1.1.0-next.3

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 (29) hide show
  1. package/README.md +4 -1
  2. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs} +2 -2
  3. package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs.map → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs.map} +1 -1
  4. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs} +2 -2
  5. package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs.map} +1 -1
  6. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs} +2 -2
  7. package/fesm2022/{ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs.map → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs.map} +1 -1
  8. package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs → ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs} +4 -3
  9. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs.map +1 -0
  10. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs} +2 -2
  11. package/fesm2022/{ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs.map → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs.map} +1 -1
  12. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +17 -56
  13. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  14. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +81 -59
  15. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  16. package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs} +56 -134
  17. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map +1 -0
  18. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs} +2 -2
  19. package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs.map → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map} +1 -1
  20. package/fesm2022/ng-forge-dynamic-forms-testing.mjs +84 -0
  21. package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -0
  22. package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
  23. package/package.json +5 -1
  24. package/types/ng-forge-dynamic-forms-integration.d.ts +6 -54
  25. package/types/ng-forge-dynamic-forms-internal.d.ts +41 -10
  26. package/types/ng-forge-dynamic-forms-testing.d.ts +58 -0
  27. package/types/ng-forge-dynamic-forms.d.ts +1 -1
  28. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs.map +0 -1
  29. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.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-BRixkgyS.mjs').then(m => m.default)], () => [/* @ts-ignore */
826
- import('./ng-forge-dynamic-forms-page-field.component-BRixkgyS.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-BRixkgyS.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,91 +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
- return {
1876
- kind: config.type,
1877
- fieldTree: targetField,
1878
- };
1879
- }
1880
- function applyBuiltInValidationLogic(config, fieldValue) {
1881
- switch (config.type) {
1882
- case 'required':
1883
- if (fieldValue === null || fieldValue === undefined) {
1884
- return false;
1885
- }
1886
- if (typeof fieldValue === 'string' && fieldValue.trim() === '') {
1887
- return false;
1888
- }
1889
- return true;
1890
- case 'min':
1891
- if (fieldValue === null || fieldValue === undefined) {
1892
- return true; }
1893
- if ('value' in config && typeof config.value === 'number') {
1894
- return fieldValue >= config.value;
1895
- }
1896
- return true;
1897
- case 'max':
1898
- if (fieldValue === null || fieldValue === undefined) {
1899
- return true;
1900
- }
1901
- if ('value' in config && typeof config.value === 'number') {
1902
- return fieldValue <= config.value;
1903
- }
1904
- return true;
1905
- case 'minLength':
1906
- if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
1907
- return true;
1908
- }
1909
- if ('value' in config && typeof config.value === 'number') {
1910
- return String(fieldValue).length >= config.value;
1911
- }
1912
- return true;
1913
- case 'maxLength':
1914
- if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
1915
- return true;
1916
- }
1917
- if ('value' in config && typeof config.value === 'number') {
1918
- return String(fieldValue).length <= config.value;
1919
- }
1920
- return true;
1921
- case 'email':
1922
- if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
1923
- return true;
1924
- }
1925
- return emailPattern.test(String(fieldValue));
1926
- case 'pattern':
1927
- if (fieldValue === null || fieldValue === undefined || fieldValue === '') {
1928
- return true;
1929
- }
1930
- if ('value' in config && config.value) {
1931
- const regex = config.value instanceof RegExp ? config.value : new RegExp(String(config.value));
1932
- return regex.test(String(fieldValue));
1933
- }
1934
- return true;
1935
- default:
1936
- return true;
1937
- }
1938
- }
1939
1870
  function fieldsToDefaultValues(fields, registry) {
1940
1871
  const defaultValues = {};
1941
1872
  for (const field of fields) {
@@ -2007,38 +1938,25 @@ function collectFromField(field, collection, pathPrefix) {
2007
1938
  }
2008
1939
  }
2009
1940
  function tryCreateValidatorEntry(fieldKey, config) {
2010
- if (config.type === 'custom') {
1941
+ if (!requiresTreeValidation(config)) {
1942
+ return null; }
1943
+ if (config.type === 'custom') {
2011
1944
  const customConfig = config;
2012
- if (isCrossFieldValidator(customConfig)) {
2013
- return {
2014
- sourceFieldKey: fieldKey,
2015
- config,
2016
- dependsOn: extractStringDependencies(customConfig.expression || ''),
2017
- category: 'validator',
2018
- };
2019
- }
2020
- }
2021
- if (isCrossFieldBuiltInValidator(config)) {
2022
- const builtInConfig = config;
2023
- return {
2024
- sourceFieldKey: fieldKey,
2025
- config: convertBuiltInToCustomValidator(builtInConfig),
2026
- validatorType: config.type,
2027
- dependsOn: extractStringDependencies(builtInConfig.expression || ''),
2028
- category: 'validator',
2029
- };
2030
- }
2031
- if (hasCrossFieldWhenCondition(config)) {
2032
- const whenCondition = config.when;
2033
1945
  return {
2034
1946
  sourceFieldKey: fieldKey,
2035
1947
  config,
2036
- validatorType: config.type,
2037
- dependsOn: extractExpressionDependencies(whenCondition),
1948
+ dependsOn: extractStringDependencies(customConfig.expression || ''),
2038
1949
  category: 'validator',
2039
1950
  };
2040
1951
  }
2041
- 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
+ };
2042
1960
  }
2043
1961
  function tryCreateLogicEntry(fieldKey, config) {
2044
1962
  if (!isStateLogicConfig(config)) {
@@ -3932,16 +3850,20 @@ class FormStateManager {
3932
3850
  this.deps.value.set(value);
3933
3851
  }
3934
3852
  reset() {
3853
+ const rootField = this.form()();
3935
3854
  this.excludedValueStore.set({});
3936
3855
  const defaults = this.defaultValues();
3937
- this.form()().value.set(defaults);
3856
+ rootField.value.set(defaults);
3938
3857
  this.deps.value.set(defaults);
3858
+ rootField.reset();
3939
3859
  }
3940
3860
  clear() {
3861
+ const rootField = this.form()();
3941
3862
  this.excludedValueStore.set({});
3942
3863
  const emptyValue = {};
3943
- this.form()().value.set(emptyValue);
3864
+ rootField.value.set(emptyValue);
3944
3865
  this.deps.value.set(emptyValue);
3866
+ rootField.reset();
3945
3867
  }
3946
3868
  submit() {
3947
3869
  this.eventBus.dispatch(FormSubmitEvent);
@@ -4172,7 +4094,7 @@ function createDerivationRenderGate() {
4172
4094
  if (!has || engine() !== 'idle')
4173
4095
  return;
4174
4096
  engine.set('loading');
4175
- pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-C9aVachF.mjs')
4097
+ pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs')
4176
4098
  .then(({ bootstrapDerivationOrchestrator }) => {
4177
4099
  runInInjectionContext(injector, () => bootstrapDerivationOrchestrator());
4178
4100
  engine.set('wired');
@@ -4671,28 +4593,28 @@ const DISPLAY_FIELD_TYPES_BASE = {
4671
4593
  const BUILT_IN_FIELDS = [
4672
4594
  {
4673
4595
  name: 'row',
4674
- loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs'),
4596
+ loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
4675
4597
  mapper: rowFieldMapper,
4676
4598
  valueHandling: 'flatten',
4677
4599
  ...CONTAINER_FIELD_TYPES_BASE,
4678
4600
  },
4679
4601
  {
4680
4602
  name: 'group',
4681
- loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-CKVIw2K5.mjs'),
4603
+ loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs'),
4682
4604
  mapper: groupFieldMapper,
4683
4605
  valueHandling: 'include',
4684
4606
  ...CONTAINER_FIELD_TYPES_BASE,
4685
4607
  },
4686
4608
  {
4687
4609
  name: 'array',
4688
- loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-CIheZh11.mjs'),
4610
+ loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs'),
4689
4611
  mapper: arrayFieldMapper,
4690
4612
  valueHandling: 'include',
4691
4613
  ...CONTAINER_FIELD_TYPES_BASE,
4692
4614
  },
4693
4615
  {
4694
4616
  name: 'page',
4695
- loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-BRixkgyS.mjs'),
4617
+ loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs'),
4696
4618
  mapper: pageFieldMapper,
4697
4619
  valueHandling: 'flatten',
4698
4620
  ...CONTAINER_FIELD_TYPES_BASE,
@@ -4710,7 +4632,7 @@ const BUILT_IN_FIELDS = [
4710
4632
  },
4711
4633
  {
4712
4634
  name: 'container',
4713
- loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-DNafCSO8.mjs'),
4635
+ loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs'),
4714
4636
  mapper: containerFieldMapper,
4715
4637
  valueHandling: 'flatten',
4716
4638
  ...CONTAINER_FIELD_TYPES_BASE,
@@ -4719,7 +4641,7 @@ const BUILT_IN_FIELDS = [
4719
4641
  const BUILT_IN_WRAPPERS = [
4720
4642
  {
4721
4643
  wrapperName: 'css',
4722
- loadComponent: () => import('./ng-forge-dynamic-forms-css-wrapper.component-BmHGlmES.mjs'),
4644
+ loadComponent: () => import('./ng-forge-dynamic-forms-css-wrapper.component-D_yRuLpu.mjs'),
4723
4645
  },
4724
4646
  {
4725
4647
  wrapperName: 'row',
@@ -5114,4 +5036,4 @@ function arrayEvent(arrayKey) {
5114
5036
 
5115
5037
 
5116
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 };
5117
- //# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-CBawLbtp.mjs.map
5039
+ //# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map