@ng-forge/dynamic-forms 0.1.0 → 0.1.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.
@@ -710,9 +710,9 @@ function injectFieldRegistry() {
710
710
  */
711
711
  class RootFormRegistryService {
712
712
  // Use a signal containing a Map to make registration reactive
713
- _rootForms = signal(new Map(), { ...(ngDevMode ? { debugName: "_rootForms" } : {}) });
713
+ _rootForms = signal(new Map(), ...(ngDevMode ? [{ debugName: "_rootForms" }] : []));
714
714
  // Store form value signals separately - these can be registered before form creation
715
- _formValueSignals = signal(new Map(), { ...(ngDevMode ? { debugName: "_formValueSignals" } : {}) });
715
+ _formValueSignals = signal(new Map(), ...(ngDevMode ? [{ debugName: "_formValueSignals" }] : []));
716
716
  formContexts = new Map();
717
717
  /**
718
718
  * Registers the form value signal BEFORE form creation.
@@ -848,10 +848,10 @@ class RootFormRegistryService {
848
848
  this._formValueSignals.set(new Map());
849
849
  this.formContexts.clear();
850
850
  }
851
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RootFormRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
852
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RootFormRegistryService });
851
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: RootFormRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
852
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: RootFormRegistryService });
853
853
  }
854
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RootFormRegistryService, decorators: [{
854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: RootFormRegistryService, decorators: [{
855
855
  type: Injectable
856
856
  }] });
857
857
 
@@ -972,10 +972,10 @@ class FieldContextRegistryService {
972
972
  customFunctions: customFunctions || {},
973
973
  };
974
974
  }
975
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FieldContextRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
976
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FieldContextRegistryService });
975
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FieldContextRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
976
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FieldContextRegistryService });
977
977
  }
978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FieldContextRegistryService, decorators: [{
978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FieldContextRegistryService, decorators: [{
979
979
  type: Injectable
980
980
  }] });
981
981
 
@@ -1315,10 +1315,10 @@ class FunctionRegistryService {
1315
1315
  this.clearAsyncValidators();
1316
1316
  this.clearHttpValidators();
1317
1317
  }
1318
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FunctionRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1319
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FunctionRegistryService });
1318
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FunctionRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1319
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FunctionRegistryService });
1320
1320
  }
1321
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: FunctionRegistryService, decorators: [{
1321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: FunctionRegistryService, decorators: [{
1322
1322
  type: Injectable
1323
1323
  }] });
1324
1324
 
@@ -3041,10 +3041,10 @@ class SchemaRegistryService {
3041
3041
  }
3042
3042
  return schema;
3043
3043
  }
3044
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SchemaRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3045
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SchemaRegistryService });
3044
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: SchemaRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3045
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: SchemaRegistryService });
3046
3046
  }
3047
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SchemaRegistryService, decorators: [{
3047
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: SchemaRegistryService, decorators: [{
3048
3048
  type: Injectable
3049
3049
  }] });
3050
3050
 
@@ -4005,10 +4005,10 @@ class EventBus {
4005
4005
  }
4006
4006
  return this.pipeline$.pipe(filter((event) => event.type === eventType));
4007
4007
  }
4008
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: EventBus, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4009
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: EventBus });
4008
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: EventBus, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4009
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: EventBus });
4010
4010
  }
4011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: EventBus, decorators: [{
4011
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: EventBus, decorators: [{
4012
4012
  type: Injectable
4013
4013
  }] });
4014
4014
 
@@ -4817,15 +4817,15 @@ class PageOrchestratorComponent {
4817
4817
  /**
4818
4818
  * Array of page field definitions to render
4819
4819
  */
4820
- pageFields = input.required({ ...(ngDevMode ? { debugName: "pageFields" } : {}) });
4820
+ pageFields = input.required(...(ngDevMode ? [{ debugName: "pageFields" }] : []));
4821
4821
  /**
4822
4822
  * Root form instance from parent DynamicForm
4823
4823
  */
4824
- form = input.required({ ...(ngDevMode ? { debugName: "form" } : {}) });
4824
+ form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
4825
4825
  /**
4826
4826
  * Field signal context for child fields
4827
4827
  */
4828
- fieldSignalContext = input.required({ ...(ngDevMode ? { debugName: "fieldSignalContext" } : {}) });
4828
+ fieldSignalContext = input.required(...(ngDevMode ? [{ debugName: "fieldSignalContext" }] : []));
4829
4829
  /**
4830
4830
  * Computed signal that tracks which pages are hidden.
4831
4831
  * Returns an array of booleans where true means the page is hidden.
@@ -4835,7 +4835,7 @@ class PageOrchestratorComponent {
4835
4835
  const pages = this.pageFields();
4836
4836
  const formValue = this.rootFormRegistry.getFormValue();
4837
4837
  return pages.map((page) => this.evaluatePageHidden(page, formValue));
4838
- }, { ...(ngDevMode ? { debugName: "pageHiddenStates" } : {}) });
4838
+ }, ...(ngDevMode ? [{ debugName: "pageHiddenStates" }] : []));
4839
4839
  /**
4840
4840
  * Computed signal that returns indices of visible (non-hidden) pages.
4841
4841
  * This is used for navigation to skip hidden pages.
@@ -4846,7 +4846,7 @@ class PageOrchestratorComponent {
4846
4846
  .map((hidden, index) => ({ index, hidden }))
4847
4847
  .filter((item) => !item.hidden)
4848
4848
  .map((item) => item.index);
4849
- }, { ...(ngDevMode ? { debugName: "visiblePageIndices" } : {}) });
4849
+ }, ...(ngDevMode ? [{ debugName: "visiblePageIndices" }] : []));
4850
4850
  /**
4851
4851
  * Internal signal for current page index that tracks with page fields.
4852
4852
  * This tracks the actual page index, not the visible page index.
@@ -4861,7 +4861,7 @@ class PageOrchestratorComponent {
4861
4861
  return 0;
4862
4862
  // Start on page 0 (will be adjusted if page 0 is hidden by initial navigation)
4863
4863
  return 0;
4864
- }, { ...(ngDevMode ? { debugName: "currentPageIndex" } : {}) });
4864
+ }, ...(ngDevMode ? [{ debugName: "currentPageIndex" }] : []));
4865
4865
  /**
4866
4866
  * Computed state for the orchestrator
4867
4867
  */
@@ -4880,7 +4880,7 @@ class PageOrchestratorComponent {
4880
4880
  isLastPage: isLastVisiblePage,
4881
4881
  navigationDisabled: false,
4882
4882
  };
4883
- }, { ...(ngDevMode ? { debugName: "state" } : {}) });
4883
+ }, ...(ngDevMode ? [{ debugName: "state" }] : []));
4884
4884
  /**
4885
4885
  * Signal indicating whether all fields on the current page are valid.
4886
4886
  *
@@ -4916,7 +4916,7 @@ class PageOrchestratorComponent {
4916
4916
  }
4917
4917
  }
4918
4918
  return true;
4919
- }, { ...(ngDevMode ? { debugName: "currentPageValid" } : {}) });
4919
+ }, ...(ngDevMode ? [{ debugName: "currentPageValid" }] : []));
4920
4920
  /**
4921
4921
  * Extended field signal context that includes currentPageValid.
4922
4922
  *
@@ -4927,7 +4927,7 @@ class PageOrchestratorComponent {
4927
4927
  extendedFieldSignalContext = computed(() => ({
4928
4928
  ...this.fieldSignalContext(),
4929
4929
  currentPageValid: this.currentPageValid,
4930
- }), { ...(ngDevMode ? { debugName: "extendedFieldSignalContext" } : {}) });
4930
+ }), ...(ngDevMode ? [{ debugName: "extendedFieldSignalContext" }] : []));
4931
4931
  constructor() {
4932
4932
  // Setup event listeners for navigation
4933
4933
  this.setupEventListeners();
@@ -5093,8 +5093,8 @@ class PageOrchestratorComponent {
5093
5093
  }
5094
5094
  return false;
5095
5095
  }
5096
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: PageOrchestratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5097
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: PageOrchestratorComponent, isStandalone: true, selector: "div[page-orchestrator]", inputs: { pageFields: { classPropertyName: "pageFields", publicName: "pageFields", isSignal: true, isRequired: true, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, fieldSignalContext: { classPropertyName: "fieldSignalContext", publicName: "fieldSignalContext", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-current-page": "state().currentPageIndex", "attr.data-total-pages": "state().totalPages" }, classAttribute: "df-page-orchestrator" }, providers: [
5096
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: PageOrchestratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5097
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: PageOrchestratorComponent, isStandalone: true, selector: "div[page-orchestrator]", inputs: { pageFields: { classPropertyName: "pageFields", publicName: "pageFields", isSignal: true, isRequired: true, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, fieldSignalContext: { classPropertyName: "fieldSignalContext", publicName: "fieldSignalContext", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "attr.data-current-page": "state().currentPageIndex", "attr.data-total-pages": "state().totalPages" }, classAttribute: "df-page-orchestrator" }, providers: [
5098
5098
  {
5099
5099
  provide: FIELD_SIGNAL_CONTEXT,
5100
5100
  useFactory: (orchestrator) => orchestrator.extendedFieldSignalContext(),
@@ -5124,9 +5124,9 @@ class PageOrchestratorComponent {
5124
5124
  }
5125
5125
  }
5126
5126
  }
5127
- `, isInline: true, styles: [":host{display:block;position:relative;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./ng-forge-dynamic-forms-page-field.component-DcZh9mv6.mjs').then(m => m.default)], () => [import('./ng-forge-dynamic-forms-page-field.component-DcZh9mv6.mjs').then(m => m.default)]] });
5127
+ `, isInline: true, styles: [":host{display:block;position:relative;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [import('./ng-forge-dynamic-forms-page-field.component-ZVrJUMNb.mjs').then(m => m.default)], () => [import('./ng-forge-dynamic-forms-page-field.component-ZVrJUMNb.mjs').then(m => m.default)]] });
5128
5128
  }
5129
- i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.0.1", ngImport: i0, type: PageOrchestratorComponent, resolveDeferredDeps: () => [import('./ng-forge-dynamic-forms-page-field.component-DcZh9mv6.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
5129
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "21.0.5", ngImport: i0, type: PageOrchestratorComponent, resolveDeferredDeps: () => [import('./ng-forge-dynamic-forms-page-field.component-ZVrJUMNb.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
5130
5130
  type: Component,
5131
5131
  args: [{ selector: 'div[page-orchestrator]', imports: [PageFieldComponent], template: `
5132
5132
  @for (pageField of pageFields(); track pageField.key; let i = $index) {
@@ -5201,9 +5201,9 @@ class DynamicForm {
5201
5201
  /** Form configuration defining the structure, validation, and behavior. */
5202
5202
  config = input.required({ ...(ngDevMode ? { debugName: "config" } : {}), alias: 'dynamic-form' });
5203
5203
  /** Runtime form options that override config options when provided. */
5204
- formOptions = input(undefined, { ...(ngDevMode ? { debugName: "formOptions" } : {}) });
5204
+ formOptions = input(undefined, ...(ngDevMode ? [{ debugName: "formOptions" }] : []));
5205
5205
  /** Form values for two-way data binding. */
5206
- value = model(undefined, { ...(ngDevMode ? { debugName: "value" } : {}) });
5206
+ value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : []));
5207
5207
  // ─────────────────────────────────────────────────────────────────────────────
5208
5208
  // Memoized Functions
5209
5209
  // ─────────────────────────────────────────────────────────────────────────────
@@ -5235,7 +5235,7 @@ class DynamicForm {
5235
5235
  // ─────────────────────────────────────────────────────────────────────────────
5236
5236
  // Computed Signals
5237
5237
  // ─────────────────────────────────────────────────────────────────────────────
5238
- rawFieldRegistry = computed(() => this.fieldRegistry.raw, { ...(ngDevMode ? { debugName: "rawFieldRegistry" } : {}) });
5238
+ rawFieldRegistry = computed(() => this.fieldRegistry.raw, ...(ngDevMode ? [{ debugName: "rawFieldRegistry" }] : []));
5239
5239
  formModeDetection = computed(() => {
5240
5240
  const config = this.config();
5241
5241
  const fields = config.fields || [];
@@ -5248,7 +5248,7 @@ class DynamicForm {
5248
5248
  console.warn('[Dynamic Forms] Form configuration warnings:', validation.warnings);
5249
5249
  }
5250
5250
  return detection;
5251
- }, { ...(ngDevMode ? { debugName: "formModeDetection" } : {}) });
5251
+ }, ...(ngDevMode ? [{ debugName: "formModeDetection" }] : []));
5252
5252
  formSetup = computed(() => {
5253
5253
  const config = this.config();
5254
5254
  const modeDetection = this.formModeDetection();
@@ -5258,7 +5258,7 @@ class DynamicForm {
5258
5258
  return this.createFormSetupFromConfig(config.fields, modeDetection.mode, registry);
5259
5259
  }
5260
5260
  return this.createEmptyFormSetup(registry);
5261
- }, { ...(ngDevMode ? { debugName: "formSetup" } : {}) });
5261
+ }, ...(ngDevMode ? [{ debugName: "formSetup" }] : []));
5262
5262
  pageFieldDefinitions = computed(() => {
5263
5263
  const config = this.config();
5264
5264
  const mode = this.formModeDetection().mode;
@@ -5266,13 +5266,13 @@ class DynamicForm {
5266
5266
  return config.fields.filter(isPageField);
5267
5267
  }
5268
5268
  return [];
5269
- }, { ...(ngDevMode ? { debugName: "pageFieldDefinitions" } : {}) });
5269
+ }, ...(ngDevMode ? [{ debugName: "pageFieldDefinitions" }] : []));
5270
5270
  effectiveFormOptions = computed(() => {
5271
5271
  const config = this.config();
5272
5272
  const configOptions = config.options || {};
5273
5273
  const inputOptions = this.formOptions();
5274
5274
  return { ...configOptions, ...inputOptions };
5275
- }, { ...(ngDevMode ? { debugName: "effectiveFormOptions" } : {}) });
5275
+ }, ...(ngDevMode ? [{ debugName: "effectiveFormOptions" }] : []));
5276
5276
  fieldSignalContext = computed(() => ({
5277
5277
  injector: this.injector,
5278
5278
  value: this.value,
@@ -5280,7 +5280,7 @@ class DynamicForm {
5280
5280
  form: this.form(),
5281
5281
  defaultValidationMessages: this.config().defaultValidationMessages,
5282
5282
  formOptions: this.effectiveFormOptions(),
5283
- }), { ...(ngDevMode ? { debugName: "fieldSignalContext" } : {}) });
5283
+ }), ...(ngDevMode ? [{ debugName: "fieldSignalContext" }] : []));
5284
5284
  fieldInjector = computed(() => Injector.create({
5285
5285
  parent: this.injector,
5286
5286
  providers: [
@@ -5289,8 +5289,8 @@ class DynamicForm {
5289
5289
  useValue: this.fieldSignalContext(),
5290
5290
  },
5291
5291
  ],
5292
- }), { ...(ngDevMode ? { debugName: "fieldInjector" } : {}) });
5293
- defaultValues = linkedSignal(() => this.formSetup().defaultValues, { ...(ngDevMode ? { debugName: "defaultValues" } : {}) });
5292
+ }), ...(ngDevMode ? [{ debugName: "fieldInjector" }] : []));
5293
+ defaultValues = linkedSignal(() => this.formSetup().defaultValues, ...(ngDevMode ? [{ debugName: "defaultValues" }] : []));
5294
5294
  entity = linkedSignal(() => {
5295
5295
  const inputValue = this.value();
5296
5296
  const defaults = this.defaultValues();
@@ -5307,7 +5307,7 @@ class DynamicForm {
5307
5307
  return filtered;
5308
5308
  }
5309
5309
  return combined;
5310
- }, { ...(ngDevMode ? { debugName: "entity" } : {}) });
5310
+ }, ...(ngDevMode ? [{ debugName: "entity" }] : []));
5311
5311
  form = computed(() => {
5312
5312
  return runInInjectionContext(this.injector, () => {
5313
5313
  const setup = this.formSetup();
@@ -5324,7 +5324,7 @@ class DynamicForm {
5324
5324
  untracked(() => this.rootFormRegistry.registerRootForm(formInstance));
5325
5325
  return formInstance;
5326
5326
  });
5327
- }, { ...(ngDevMode ? { debugName: "form" } : {}) });
5327
+ }, ...(ngDevMode ? [{ debugName: "form" }] : []));
5328
5328
  componentId = 'dynamic-form';
5329
5329
  totalComponentsCount = computed(() => {
5330
5330
  const fields = this.formSetup().fields;
@@ -5335,38 +5335,33 @@ class DynamicForm {
5335
5335
  const flatFields = flattenFields(fields, registry);
5336
5336
  const componentCount = flatFields.filter(isContainerField).length;
5337
5337
  return componentCount + 1;
5338
- }, { ...(ngDevMode ? { debugName: "totalComponentsCount" } : {}) });
5339
- fieldsSource = computed(() => this.formSetup().fields, { ...(ngDevMode ? { debugName: "fieldsSource" } : {}) });
5338
+ }, ...(ngDevMode ? [{ debugName: "totalComponentsCount" }] : []));
5339
+ fieldsSource = computed(() => this.formSetup().fields, ...(ngDevMode ? [{ debugName: "fieldsSource" }] : []));
5340
5340
  // ─────────────────────────────────────────────────────────────────────────────
5341
5341
  // Public State Signals
5342
5342
  // ─────────────────────────────────────────────────────────────────────────────
5343
5343
  /** Collects errors from async field component loading for error boundary patterns. */
5344
- fieldLoadingErrors = signal([], { ...(ngDevMode ? { debugName: "fieldLoadingErrors" } : {}) });
5344
+ fieldLoadingErrors = signal([], ...(ngDevMode ? [{ debugName: "fieldLoadingErrors" }] : []));
5345
5345
  /** Current form values (reactive). */
5346
- formValue = computed(() => this.form()().value(), { ...(ngDevMode ? { debugName: "formValue" } : {}) });
5346
+ formValue = computed(() => this.form()().value(), ...(ngDevMode ? [{ debugName: "formValue" }] : []));
5347
5347
  /** Whether the form is currently valid. */
5348
- valid = computed(() => this.form()().valid(), { ...(ngDevMode ? { debugName: "valid" } : {}) });
5348
+ valid = computed(() => this.form()().valid(), ...(ngDevMode ? [{ debugName: "valid" }] : []));
5349
5349
  /** Whether the form is currently invalid. */
5350
- invalid = computed(() => this.form()().invalid(), { ...(ngDevMode ? { debugName: "invalid" } : {}) });
5350
+ invalid = computed(() => this.form()().invalid(), ...(ngDevMode ? [{ debugName: "invalid" }] : []));
5351
5351
  /** Whether any form field has been modified. */
5352
- dirty = computed(() => this.form()().dirty(), { ...(ngDevMode ? { debugName: "dirty" } : {}) });
5352
+ dirty = computed(() => this.form()().dirty(), ...(ngDevMode ? [{ debugName: "dirty" }] : []));
5353
5353
  /** Whether any form field has been touched (blurred). */
5354
- touched = computed(() => this.form()().touched(), { ...(ngDevMode ? { debugName: "touched" } : {}) });
5354
+ touched = computed(() => this.form()().touched(), ...(ngDevMode ? [{ debugName: "touched" }] : []));
5355
5355
  /** Current validation errors from all fields. */
5356
- errors = computed(() => this.form()().errors(), { ...(ngDevMode ? { debugName: "errors" } : {}) });
5356
+ errors = computed(() => this.form()().errors(), ...(ngDevMode ? [{ debugName: "errors" }] : []));
5357
5357
  /** Whether the form is disabled (from options or form state). */
5358
5358
  disabled = computed(() => {
5359
5359
  const optionsDisabled = this.effectiveFormOptions().disabled;
5360
5360
  const formDisabled = this.form()().disabled();
5361
5361
  return optionsDisabled ?? formDisabled;
5362
- }, { ...(ngDevMode ? { debugName: "disabled" } : {}) });
5362
+ }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
5363
5363
  /** Whether the form is currently submitting. */
5364
- submitting = computed(() => this.form()().submitting(), { ...(ngDevMode ? { debugName: "submitting" } : {}) });
5365
- /**
5366
- * Announcement message for screen readers.
5367
- * Updates when form submission fails due to validation errors.
5368
- */
5369
- errorAnnouncement = signal('', { ...(ngDevMode ? { debugName: "errorAnnouncement" } : {}) });
5364
+ submitting = computed(() => this.form()().submitting(), ...(ngDevMode ? [{ debugName: "submitting" }] : []));
5370
5365
  // ─────────────────────────────────────────────────────────────────────────────
5371
5366
  // Initialization
5372
5367
  // ─────────────────────────────────────────────────────────────────────────────
@@ -5441,67 +5436,12 @@ class DynamicForm {
5441
5436
  return forkJoin(fields.map((f) => resolveField(f, context)));
5442
5437
  }), map((fields) => fields.filter((f) => f !== undefined)), scan$1(reconcileFields, [])), { initialValue: [], injector: this.injector });
5443
5438
  // ─────────────────────────────────────────────────────────────────────────────
5444
- // Effects
5445
- // ─────────────────────────────────────────────────────────────────────────────
5446
- syncEntityToValue = explicitEffect([this.entity], ([currentEntity]) => {
5447
- const currentValue = this.value();
5448
- if (!isEqual(currentEntity, currentValue)) {
5449
- this.value.set(currentEntity);
5450
- }
5451
- });
5452
- clearErrorsOnConfigChange = explicitEffect([this.config], () => {
5453
- this.fieldLoadingErrors.set([]);
5454
- });
5455
- emitPagedFormInitialized = explicitEffect([this.formModeDetection, this.pageFieldDefinitions], ([{ mode }, pages]) => {
5456
- if (mode === 'paged' && pages.length > 0) {
5457
- this.eventBus.dispatch(ComponentInitializedEvent, 'dynamic-form', this.componentId);
5458
- }
5459
- });
5460
- emitNonPagedFormInitialized = explicitEffect([this.resolvedFields, this.formModeDetection], ([fields, { mode }]) => {
5461
- if (mode === 'non-paged' && fields.length > 0) {
5462
- afterNextRender(() => {
5463
- this.eventBus.dispatch(ComponentInitializedEvent, 'dynamic-form', this.componentId);
5464
- }, { injector: this.injector });
5465
- }
5466
- });
5439
+ // Constructor
5467
5440
  // ─────────────────────────────────────────────────────────────────────────────
5468
- // Event Handlers
5469
- // ─────────────────────────────────────────────────────────────────────────────
5470
- handleFormReset = this.eventBus
5471
- .on('form-reset')
5472
- .pipe(takeUntilDestroyed())
5473
- .subscribe(() => this.onFormReset());
5474
- handleFormClear = this.eventBus
5475
- .on('form-clear')
5476
- .pipe(takeUntilDestroyed())
5477
- .subscribe(() => this.onFormClear());
5478
- /**
5479
- * Announces form validation errors to screen readers when submission is attempted
5480
- * on an invalid form.
5481
- */
5482
- handleErrorAnnouncement = this.eventBus
5483
- .on('submit')
5484
- .pipe(takeUntilDestroyed())
5485
- .subscribe(() => {
5486
- const formState = this.form()();
5487
- if (formState.invalid()) {
5488
- const errorCount = this.countErrors(formState.errors());
5489
- const message = errorCount === 1
5490
- ? 'Form submission failed. Please fix 1 validation error before submitting.'
5491
- : `Form submission failed. Please fix ${errorCount} validation errors before submitting.`;
5492
- // Clear first to ensure screen readers announce even if message is the same
5493
- this.errorAnnouncement.set('');
5494
- // Use setTimeout to ensure the clear is processed before the new message
5495
- setTimeout(() => this.errorAnnouncement.set(message), 50);
5496
- }
5497
- });
5498
- handleSubmission = createSubmissionHandler({
5499
- eventBus: this.eventBus,
5500
- configSignal: this.config,
5501
- formSignal: this.form,
5502
- })
5503
- .pipe(takeUntilDestroyed())
5504
- .subscribe();
5441
+ constructor() {
5442
+ this.setupEffects();
5443
+ this.setupEventHandlers();
5444
+ }
5505
5445
  /**
5506
5446
  * Handles native form submission triggered by:
5507
5447
  * - Pressing Enter in an input field
@@ -5520,6 +5460,53 @@ class DynamicForm {
5520
5460
  // ─────────────────────────────────────────────────────────────────────────────
5521
5461
  // Private Methods
5522
5462
  // ─────────────────────────────────────────────────────────────────────────────
5463
+ setupEffects() {
5464
+ // Sync entity changes to the value signal
5465
+ explicitEffect([this.entity], ([currentEntity]) => {
5466
+ const currentValue = this.value();
5467
+ if (!isEqual(currentEntity, currentValue)) {
5468
+ this.value.set(currentEntity);
5469
+ }
5470
+ });
5471
+ // Clear loading errors when config changes
5472
+ explicitEffect([this.config], () => {
5473
+ this.fieldLoadingErrors.set([]);
5474
+ });
5475
+ // Emit initialization event for paged forms
5476
+ explicitEffect([this.formModeDetection, this.pageFieldDefinitions], ([{ mode }, pages]) => {
5477
+ if (mode === 'paged' && pages.length > 0) {
5478
+ this.eventBus.dispatch(ComponentInitializedEvent, 'dynamic-form', this.componentId);
5479
+ }
5480
+ });
5481
+ // Emit initialization event for non-paged forms
5482
+ explicitEffect([this.resolvedFields, this.formModeDetection], ([fields, { mode }]) => {
5483
+ if (mode === 'non-paged' && fields.length > 0) {
5484
+ afterNextRender(() => {
5485
+ this.eventBus.dispatch(ComponentInitializedEvent, 'dynamic-form', this.componentId);
5486
+ }, { injector: this.injector });
5487
+ }
5488
+ });
5489
+ }
5490
+ setupEventHandlers() {
5491
+ // Handle form reset events
5492
+ this.eventBus
5493
+ .on('form-reset')
5494
+ .pipe(takeUntilDestroyed())
5495
+ .subscribe(() => this.onFormReset());
5496
+ // Handle form clear events
5497
+ this.eventBus
5498
+ .on('form-clear')
5499
+ .pipe(takeUntilDestroyed())
5500
+ .subscribe(() => this.onFormClear());
5501
+ // Handle form submission
5502
+ createSubmissionHandler({
5503
+ eventBus: this.eventBus,
5504
+ configSignal: this.config,
5505
+ formSignal: this.form,
5506
+ })
5507
+ .pipe(takeUntilDestroyed())
5508
+ .subscribe();
5509
+ }
5523
5510
  registerValidatorsFromConfig({ customFnConfig, schemas }) {
5524
5511
  if (schemas) {
5525
5512
  schemas.forEach((schema) => {
@@ -5576,23 +5563,14 @@ class DynamicForm {
5576
5563
  this.form()().value.set(emptyValue);
5577
5564
  this.value.set(emptyValue);
5578
5565
  }
5579
- /**
5580
- * Counts the total number of validation errors across all fields.
5581
- * Used for screen reader announcements.
5582
- */
5583
- countErrors(errors) {
5584
- if (!errors)
5585
- return 0;
5586
- return errors.length;
5587
- }
5588
5566
  // ─────────────────────────────────────────────────────────────────────────────
5589
5567
  // Lifecycle
5590
5568
  // ─────────────────────────────────────────────────────────────────────────────
5591
5569
  ngOnDestroy() {
5592
5570
  this.rootFormRegistry.unregisterForm();
5593
5571
  }
5594
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DynamicForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
5595
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: DynamicForm, isStandalone: true, selector: "form[dynamic-form]", inputs: { config: { classPropertyName: "config", publicName: "dynamic-form", isSignal: true, isRequired: true, transformFunction: null }, formOptions: { classPropertyName: "formOptions", publicName: "formOptions", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", validityChange: "validityChange", dirtyChange: "dirtyChange", submitted: "submitted", reset: "reset", cleared: "cleared", events: "events", initialized: "initialized", onPageChange: "onPageChange", onPageNavigationStateChange: "onPageNavigationStateChange" }, host: { listeners: { "submit": "onNativeSubmit($event)" }, properties: { "class.disabled": "disabled()", "class.df-form-paged": "formModeDetection().mode === \"paged\"", "class.df-form-non-paged": "formModeDetection().mode === \"non-paged\"", "attr.data-form-mode": "formModeDetection().mode" }, classAttribute: "df-dynamic-form df-form" }, providers: [EventBus, SchemaRegistryService, FunctionRegistryService, RootFormRegistryService, FieldContextRegistryService], ngImport: i0, template: `
5572
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: DynamicForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
5573
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: DynamicForm, isStandalone: true, selector: "form[dynamic-form]", inputs: { config: { classPropertyName: "config", publicName: "dynamic-form", isSignal: true, isRequired: true, transformFunction: null }, formOptions: { classPropertyName: "formOptions", publicName: "formOptions", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", validityChange: "validityChange", dirtyChange: "dirtyChange", submitted: "submitted", reset: "reset", cleared: "cleared", events: "events", initialized: "initialized", onPageChange: "onPageChange", onPageNavigationStateChange: "onPageNavigationStateChange" }, host: { listeners: { "submit": "onNativeSubmit($event)" }, properties: { "class.disabled": "disabled()", "class.df-form-paged": "formModeDetection().mode === \"paged\"", "class.df-form-non-paged": "formModeDetection().mode === \"non-paged\"", "attr.data-form-mode": "formModeDetection().mode" }, classAttribute: "df-dynamic-form df-form" }, providers: [EventBus, SchemaRegistryService, FunctionRegistryService, RootFormRegistryService, FieldContextRegistryService], ngImport: i0, template: `
5596
5574
  @if (formModeDetection().mode === 'paged') {
5597
5575
  <div page-orchestrator [pageFields]="pageFieldDefinitions()" [form]="$any(form())" [fieldSignalContext]="fieldSignalContext()"></div>
5598
5576
  } @else {
@@ -5600,11 +5578,9 @@ class DynamicForm {
5600
5578
  <ng-container *ngComponentOutlet="field.component; injector: field.injector; inputs: field.inputs()" />
5601
5579
  }
5602
5580
  }
5603
- <!-- Live region for screen reader announcements -->
5604
- <div class="df-live-region" role="status" aria-live="polite" aria-atomic="true">{{ errorAnnouncement() }}</div>
5605
5581
  `, isInline: true, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}:host>*{grid-column:1/-1}:host.df-form-spacing-custom{--df-grid-row-gap: var(--form-custom-spacing, 1.5rem)}:host.df-form-gap-none{--df-grid-row-gap: 0}:host.df-form-gap-xs{--df-grid-row-gap: .25rem}:host.df-form-gap-sm{--df-grid-row-gap: .5rem}:host.df-form-gap-md{--df-grid-row-gap: 1rem}:host.df-form-gap-lg{--df-grid-row-gap: 1.5rem}:host.df-form-gap-xl{--df-grid-row-gap: 2rem}:host.df-form-paged{--df-grid-row-gap: 0}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: PageOrchestratorComponent, selector: "div[page-orchestrator]", inputs: ["pageFields", "form", "fieldSignalContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5606
5582
  }
5607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DynamicForm, decorators: [{
5583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: DynamicForm, decorators: [{
5608
5584
  type: Component,
5609
5585
  args: [{ selector: 'form[dynamic-form]', imports: [NgComponentOutlet, PageOrchestratorComponent], template: `
5610
5586
  @if (formModeDetection().mode === 'paged') {
@@ -5614,8 +5590,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
5614
5590
  <ng-container *ngComponentOutlet="field.component; injector: field.injector; inputs: field.inputs()" />
5615
5591
  }
5616
5592
  }
5617
- <!-- Live region for screen reader announcements -->
5618
- <div class="df-live-region" role="status" aria-live="polite" aria-atomic="true">{{ errorAnnouncement() }}</div>
5619
5593
  `, providers: [EventBus, SchemaRegistryService, FunctionRegistryService, RootFormRegistryService, FieldContextRegistryService], host: {
5620
5594
  class: 'df-dynamic-form df-form',
5621
5595
  '[class.disabled]': 'disabled()',
@@ -5624,7 +5598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
5624
5598
  '[attr.data-form-mode]': 'formModeDetection().mode',
5625
5599
  '(submit)': 'onNativeSubmit($event)',
5626
5600
  }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}:host>*{grid-column:1/-1}:host.df-form-spacing-custom{--df-grid-row-gap: var(--form-custom-spacing, 1.5rem)}:host.df-form-gap-none{--df-grid-row-gap: 0}:host.df-form-gap-xs{--df-grid-row-gap: .25rem}:host.df-form-gap-sm{--df-grid-row-gap: .5rem}:host.df-form-gap-md{--df-grid-row-gap: 1rem}:host.df-form-gap-lg{--df-grid-row-gap: 1.5rem}:host.df-form-gap-xl{--df-grid-row-gap: 2rem}:host.df-form-paged{--df-grid-row-gap: 0}\n"] }]
5627
- }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "dynamic-form", required: true }] }], formOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "formOptions", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], validityChange: [{ type: i0.Output, args: ["validityChange"] }], dirtyChange: [{ type: i0.Output, args: ["dirtyChange"] }], submitted: [{ type: i0.Output, args: ["submitted"] }], reset: [{ type: i0.Output, args: ["reset"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], events: [{ type: i0.Output, args: ["events"] }], initialized: [{ type: i0.Output, args: ["initialized"] }], onPageChange: [{ type: i0.Output, args: ["onPageChange"] }], onPageNavigationStateChange: [{ type: i0.Output, args: ["onPageNavigationStateChange"] }] } });
5601
+ }], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "dynamic-form", required: true }] }], formOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "formOptions", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], validityChange: [{ type: i0.Output, args: ["validityChange"] }], dirtyChange: [{ type: i0.Output, args: ["dirtyChange"] }], submitted: [{ type: i0.Output, args: ["submitted"] }], reset: [{ type: i0.Output, args: ["reset"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], events: [{ type: i0.Output, args: ["events"] }], initialized: [{ type: i0.Output, args: ["initialized"] }], onPageChange: [{ type: i0.Output, args: ["onPageChange"] }], onPageNavigationStateChange: [{ type: i0.Output, args: ["onPageNavigationStateChange"] }] } });
5628
5602
 
5629
5603
  /**
5630
5604
  * Maps an array field definition to component inputs.
@@ -5792,13 +5766,13 @@ const BUILT_IN_FIELDS = [
5792
5766
  },
5793
5767
  {
5794
5768
  name: 'page',
5795
- loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-DcZh9mv6.mjs'),
5769
+ loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-ZVrJUMNb.mjs'),
5796
5770
  mapper: pageFieldMapper,
5797
5771
  valueHandling: 'flatten',
5798
5772
  },
5799
5773
  {
5800
5774
  name: 'text',
5801
- loadComponent: () => import('./ng-forge-dynamic-forms-text-field.component-CnLc464X.mjs'),
5775
+ loadComponent: () => import('./ng-forge-dynamic-forms-text-field.component-BKTbxAKn.mjs'),
5802
5776
  mapper: textFieldMapper,
5803
5777
  valueHandling: 'exclude',
5804
5778
  },
@@ -6121,46 +6095,47 @@ function resolveTokens(args, context) {
6121
6095
  }
6122
6096
 
6123
6097
  /**
6124
- * Type guard for checking if a form-like object has the internal structure property.
6125
- *
6126
- * @param form - The form object to check
6127
- * @returns True if the form has a structure property with childrenMap
6098
+ * Type guard to check if a value has the FormInternals structure.
6099
+ */
6100
+ function isFormInternals(value) {
6101
+ return (typeof value === 'object' &&
6102
+ value !== null &&
6103
+ 'structure' in value &&
6104
+ typeof value.structure?.childrenMap === 'function');
6105
+ }
6106
+ /**
6107
+ * Type guard that unwraps signals and checks for FormInternals structure.
6108
+ * Use this when the input might be a signal wrapping FormInternals.
6128
6109
  */
6129
6110
  function hasFormStructure(form) {
6130
- return (typeof form === 'object' && form !== null && 'structure' in form && typeof form.structure?.childrenMap === 'function');
6111
+ const unwrapped = isSignal(form) ? form() : form;
6112
+ return isFormInternals(unwrapped);
6131
6113
  }
6132
6114
  /**
6133
- * Safely retrieves the childrenMap from a form's internal structure.
6134
- *
6135
- * @param form - The form object (from `form()` function or FieldTree)
6136
- * @returns The childrenMap or null if not available
6115
+ * Unwraps a signal if needed and returns the FormInternals or null.
6137
6116
  */
6117
+ function unwrapFormInput(form) {
6118
+ const unwrapped = isSignal(form) ? form() : form;
6119
+ return isFormInternals(unwrapped) ? unwrapped : null;
6120
+ }
6138
6121
  function getChildrenMap(form) {
6139
- if (!hasFormStructure(form)) {
6122
+ const target = unwrapFormInput(form);
6123
+ if (!target) {
6140
6124
  return null;
6141
6125
  }
6142
- return form.structure?.childrenMap?.() ?? null;
6126
+ const result = target.structure.childrenMap();
6127
+ const normalizedMap = new Map();
6128
+ for (const [key, childData] of result.byPropertyKey) {
6129
+ normalizedMap.set(key, childData.reader);
6130
+ }
6131
+ return normalizedMap;
6143
6132
  }
6144
- /**
6145
- * Safely retrieves the fieldProxy from a form node.
6146
- *
6147
- * @param node - The form node (FieldNode or similar)
6148
- * @returns The fieldProxy FieldTree or null if not available
6149
- */
6150
6133
  function getFieldProxy(node) {
6151
- if (typeof node !== 'object' || node === null) {
6134
+ if (!isFormInternals(node)) {
6152
6135
  return null;
6153
6136
  }
6154
- const proxy = node.fieldProxy;
6155
- return proxy ?? null;
6137
+ return node.fieldProxy ?? null;
6156
6138
  }
6157
- /**
6158
- * Retrieves a child FieldTree from a form by key.
6159
- *
6160
- * @param form - The parent form
6161
- * @param key - The child field key
6162
- * @returns The child FieldTree or null if not found
6163
- */
6164
6139
  function getChildFieldTree(form, key) {
6165
6140
  const childrenMap = getChildrenMap(form);
6166
6141
  return childrenMap?.get(key) ?? null;
@@ -6207,9 +6182,8 @@ function resolveValueFieldContext(fieldKey) {
6207
6182
  else {
6208
6183
  // Standard field access for non-array keys via childrenMap lookup
6209
6184
  const formField = childrenMap.get(fieldKey);
6210
- const resolvedProxy = getFieldProxy(formField);
6211
- if (resolvedProxy) {
6212
- fieldProxy = resolvedProxy;
6185
+ if (formField) {
6186
+ fieldProxy = formField;
6213
6187
  }
6214
6188
  }
6215
6189
  return { fieldProxy, defaultValidationMessages };
@@ -6285,9 +6259,8 @@ function checkboxFieldMapper(fieldDef) {
6285
6259
  let fieldProxy = undefined;
6286
6260
  if (childrenMap) {
6287
6261
  const formField = childrenMap.get(fieldDef.key);
6288
- const resolvedProxy = getFieldProxy(formField);
6289
- if (resolvedProxy) {
6290
- fieldProxy = resolvedProxy;
6262
+ if (formField) {
6263
+ fieldProxy = formField;
6291
6264
  }
6292
6265
  }
6293
6266
  // Return computed signal for reactive updates
@@ -6505,14 +6478,14 @@ function extractErrorParams(error) {
6505
6478
  */
6506
6479
  function createResolvedErrorsSignal(field, validationMessages, defaultValidationMessages = signal(undefined), injector = inject(Injector)) {
6507
6480
  // Ensure validationMessages is never undefined (mappers pass {} if not defined)
6508
- const messages = computed(() => validationMessages() ?? {}, { ...(ngDevMode ? { debugName: "messages" } : {}) });
6509
- const defaultMessages = computed(() => defaultValidationMessages() ?? {}, { ...(ngDevMode ? { debugName: "defaultMessages" } : {}) });
6481
+ const messages = computed(() => validationMessages() ?? {}, ...(ngDevMode ? [{ debugName: "messages" }] : []));
6482
+ const defaultMessages = computed(() => defaultValidationMessages() ?? {}, ...(ngDevMode ? [{ debugName: "defaultMessages" }] : []));
6510
6483
  // Create a computed signal that reads the actual errors from the field
6511
6484
  // This ensures the signal tracks changes to field().errors(), not just the field reference
6512
6485
  const errors = computed(() => {
6513
6486
  const control = field()();
6514
6487
  return control.errors();
6515
- }, { ...(ngDevMode ? { debugName: "errors" } : {}) });
6488
+ }, ...(ngDevMode ? [{ debugName: "errors" }] : []));
6516
6489
  // Convert signals to observables using toObservable with injector
6517
6490
  const errors$ = toObservable(errors, { injector });
6518
6491
  const messages$ = toObservable(messages, { injector });
@@ -6601,10 +6574,10 @@ class DynamicTextPipe {
6601
6574
  }
6602
6575
  return of(value || '');
6603
6576
  }
6604
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DynamicTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6605
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.1", ngImport: i0, type: DynamicTextPipe, isStandalone: true, name: "dynamicText" });
6577
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: DynamicTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
6578
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.5", ngImport: i0, type: DynamicTextPipe, isStandalone: true, name: "dynamicText" });
6606
6579
  }
6607
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: DynamicTextPipe, decorators: [{
6580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: DynamicTextPipe, decorators: [{
6608
6581
  type: Pipe,
6609
6582
  args: [{
6610
6583
  name: 'dynamicText',
@@ -6653,8 +6626,8 @@ class RowFieldComponent {
6653
6626
  // ─────────────────────────────────────────────────────────────────────────────
6654
6627
  // Inputs
6655
6628
  // ─────────────────────────────────────────────────────────────────────────────
6656
- field = input.required({ ...(ngDevMode ? { debugName: "field" } : {}) });
6657
- key = input.required({ ...(ngDevMode ? { debugName: "key" } : {}) });
6629
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
6630
+ key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
6658
6631
  // ─────────────────────────────────────────────────────────────────────────────
6659
6632
  // Computed Signals
6660
6633
  // ─────────────────────────────────────────────────────────────────────────────
@@ -6665,12 +6638,12 @@ class RowFieldComponent {
6665
6638
  catch {
6666
6639
  return false;
6667
6640
  }
6668
- }, { ...(ngDevMode ? { debugName: "disabled" } : {}) });
6669
- rawFieldRegistry = computed(() => this.fieldRegistry.raw, { ...(ngDevMode ? { debugName: "rawFieldRegistry" } : {}) });
6641
+ }, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6642
+ rawFieldRegistry = computed(() => this.fieldRegistry.raw, ...(ngDevMode ? [{ debugName: "rawFieldRegistry" }] : []));
6670
6643
  // ─────────────────────────────────────────────────────────────────────────────
6671
6644
  // Field Resolution
6672
6645
  // ─────────────────────────────────────────────────────────────────────────────
6673
- fieldsSource = computed(() => this.field().fields || [], { ...(ngDevMode ? { debugName: "fieldsSource" } : {}) });
6646
+ fieldsSource = computed(() => this.field().fields || [], ...(ngDevMode ? [{ debugName: "fieldsSource" }] : []));
6674
6647
  resolvedFields = derivedFromDeferred(this.fieldsSource, pipe(switchMap((fields) => {
6675
6648
  if (!fields || fields.length === 0) {
6676
6649
  return of([]);
@@ -6690,21 +6663,30 @@ class RowFieldComponent {
6690
6663
  return forkJoin(fields.map((f) => resolveField(f, context)));
6691
6664
  }), map((fields) => fields.filter((f) => f !== undefined)), scan$1(reconcileFields, [])), { initialValue: [], injector: this.injector });
6692
6665
  // ─────────────────────────────────────────────────────────────────────────────
6693
- // Effects
6666
+ // Constructor
6694
6667
  // ─────────────────────────────────────────────────────────────────────────────
6695
- emitInitializedOnFieldsResolved = explicitEffect([this.resolvedFields], ([fields]) => {
6696
- if (fields.length > 0) {
6697
- emitComponentInitialized(this.eventBus, 'row', this.field().key, this.injector);
6698
- }
6699
- });
6700
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RowFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6701
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: RowFieldComponent, isStandalone: true, selector: "div[row-field]", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.disabled": "disabled()", "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-row" }, ngImport: i0, template: `
6668
+ constructor() {
6669
+ this.setupEffects();
6670
+ }
6671
+ // ─────────────────────────────────────────────────────────────────────────────
6672
+ // Private Methods
6673
+ // ─────────────────────────────────────────────────────────────────────────────
6674
+ setupEffects() {
6675
+ // Emit initialization event when fields are resolved
6676
+ explicitEffect([this.resolvedFields], ([fields]) => {
6677
+ if (fields.length > 0) {
6678
+ emitComponentInitialized(this.eventBus, 'row', this.field().key, this.injector);
6679
+ }
6680
+ });
6681
+ }
6682
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: RowFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6683
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: RowFieldComponent, isStandalone: true, selector: "div[row-field]", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.disabled": "disabled()", "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-row" }, ngImport: i0, template: `
6702
6684
  @for (field of resolvedFields(); track field.key) {
6703
6685
  <ng-container *ngComponentOutlet="field.component; injector: field.injector; inputs: field.inputs()" />
6704
6686
  }
6705
6687
  `, isInline: true, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:flex;flex-wrap:wrap;gap:var(--df-grid-gap);align-items:flex-start;width:100%}:host ::ng-deep>*:not([class*=df-col-]){flex:0 0 auto}:host ::ng-deep>.df-col-1{flex:0 0 calc(8.3333333333% - var(--df-grid-gap) * .9166666667);max-width:calc(8.3333333333% - var(--df-grid-gap) * .9166666667)}:host ::ng-deep>.df-col-2{flex:0 0 calc(16.6666666667% - var(--df-grid-gap) * .8333333333);max-width:calc(16.6666666667% - var(--df-grid-gap) * .8333333333)}:host ::ng-deep>.df-col-3{flex:0 0 calc(25% - var(--df-grid-gap) * .75);max-width:calc(25% - var(--df-grid-gap) * .75)}:host ::ng-deep>.df-col-4{flex:0 0 calc(33.3333333333% - var(--df-grid-gap) * .6666666667);max-width:calc(33.3333333333% - var(--df-grid-gap) * .6666666667)}:host ::ng-deep>.df-col-5{flex:0 0 calc(41.6666666667% - var(--df-grid-gap) * .5833333333);max-width:calc(41.6666666667% - var(--df-grid-gap) * .5833333333)}:host ::ng-deep>.df-col-6{flex:0 0 calc(50% - var(--df-grid-gap) * .5);max-width:calc(50% - var(--df-grid-gap) * .5)}:host ::ng-deep>.df-col-7{flex:0 0 calc(58.3333333333% - var(--df-grid-gap) * .4166666667);max-width:calc(58.3333333333% - var(--df-grid-gap) * .4166666667)}:host ::ng-deep>.df-col-8{flex:0 0 calc(66.6666666667% - var(--df-grid-gap) * .3333333333);max-width:calc(66.6666666667% - var(--df-grid-gap) * .3333333333)}:host ::ng-deep>.df-col-9{flex:0 0 calc(75% - var(--df-grid-gap) * .25);max-width:calc(75% - var(--df-grid-gap) * .25)}:host ::ng-deep>.df-col-10{flex:0 0 calc(83.3333333333% - var(--df-grid-gap) * .1666666667);max-width:calc(83.3333333333% - var(--df-grid-gap) * .1666666667)}:host ::ng-deep>.df-col-11{flex:0 0 calc(91.6666666667% - var(--df-grid-gap) * .0833333333);max-width:calc(91.6666666667% - var(--df-grid-gap) * .0833333333)}:host ::ng-deep>.df-col-12{flex:0 0 calc(100% - var(--df-grid-gap) * 0);max-width:calc(100% - var(--df-grid-gap) * 0)}:host.df-gap-custom{--df-grid-gap: var(--row-custom-gap, 1rem)}@media(max-width:576px){:host.df-row-mobile-stack{flex-direction:column}:host.df-row-mobile-stack ::ng-deep>*{flex:0 0 100%!important;max-width:100%!important}}@media(min-width:577px)and (max-width:768px){:host.df-row-tablet-2col ::ng-deep>*{flex:0 0 calc(50% - var(--df-grid-gap) / 2);max-width:calc(50% - var(--df-grid-gap) / 2)}}@media(max-width:576px){:host{flex-direction:column}:host ::ng-deep>*{flex:0 0 100%!important;max-width:100%!important}:host.df-row-mobile-keep-cols{flex-direction:row}:host.df-row-mobile-keep-cols ::ng-deep>*:not([class*=df-col-]){flex:0 0 auto!important;max-width:none!important}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6706
6688
  }
6707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RowFieldComponent, decorators: [{
6689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: RowFieldComponent, decorators: [{
6708
6690
  type: Component,
6709
6691
  args: [{ selector: 'div[row-field]', imports: [NgComponentOutlet], template: `
6710
6692
  @for (field of resolvedFields(); track field.key) {
@@ -6716,7 +6698,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
6716
6698
  '[id]': '`${key()}`',
6717
6699
  '[attr.data-testid]': 'key()',
6718
6700
  }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:flex;flex-wrap:wrap;gap:var(--df-grid-gap);align-items:flex-start;width:100%}:host ::ng-deep>*:not([class*=df-col-]){flex:0 0 auto}:host ::ng-deep>.df-col-1{flex:0 0 calc(8.3333333333% - var(--df-grid-gap) * .9166666667);max-width:calc(8.3333333333% - var(--df-grid-gap) * .9166666667)}:host ::ng-deep>.df-col-2{flex:0 0 calc(16.6666666667% - var(--df-grid-gap) * .8333333333);max-width:calc(16.6666666667% - var(--df-grid-gap) * .8333333333)}:host ::ng-deep>.df-col-3{flex:0 0 calc(25% - var(--df-grid-gap) * .75);max-width:calc(25% - var(--df-grid-gap) * .75)}:host ::ng-deep>.df-col-4{flex:0 0 calc(33.3333333333% - var(--df-grid-gap) * .6666666667);max-width:calc(33.3333333333% - var(--df-grid-gap) * .6666666667)}:host ::ng-deep>.df-col-5{flex:0 0 calc(41.6666666667% - var(--df-grid-gap) * .5833333333);max-width:calc(41.6666666667% - var(--df-grid-gap) * .5833333333)}:host ::ng-deep>.df-col-6{flex:0 0 calc(50% - var(--df-grid-gap) * .5);max-width:calc(50% - var(--df-grid-gap) * .5)}:host ::ng-deep>.df-col-7{flex:0 0 calc(58.3333333333% - var(--df-grid-gap) * .4166666667);max-width:calc(58.3333333333% - var(--df-grid-gap) * .4166666667)}:host ::ng-deep>.df-col-8{flex:0 0 calc(66.6666666667% - var(--df-grid-gap) * .3333333333);max-width:calc(66.6666666667% - var(--df-grid-gap) * .3333333333)}:host ::ng-deep>.df-col-9{flex:0 0 calc(75% - var(--df-grid-gap) * .25);max-width:calc(75% - var(--df-grid-gap) * .25)}:host ::ng-deep>.df-col-10{flex:0 0 calc(83.3333333333% - var(--df-grid-gap) * .1666666667);max-width:calc(83.3333333333% - var(--df-grid-gap) * .1666666667)}:host ::ng-deep>.df-col-11{flex:0 0 calc(91.6666666667% - var(--df-grid-gap) * .0833333333);max-width:calc(91.6666666667% - var(--df-grid-gap) * .0833333333)}:host ::ng-deep>.df-col-12{flex:0 0 calc(100% - var(--df-grid-gap) * 0);max-width:calc(100% - var(--df-grid-gap) * 0)}:host.df-gap-custom{--df-grid-gap: var(--row-custom-gap, 1rem)}@media(max-width:576px){:host.df-row-mobile-stack{flex-direction:column}:host.df-row-mobile-stack ::ng-deep>*{flex:0 0 100%!important;max-width:100%!important}}@media(min-width:577px)and (max-width:768px){:host.df-row-tablet-2col ::ng-deep>*{flex:0 0 calc(50% - var(--df-grid-gap) / 2);max-width:calc(50% - var(--df-grid-gap) / 2)}}@media(max-width:576px){:host{flex-direction:column}:host ::ng-deep>*{flex:0 0 100%!important;max-width:100%!important}:host.df-row-mobile-keep-cols{flex-direction:row}:host.df-row-mobile-keep-cols ::ng-deep>*:not([class*=df-col-]){flex:0 0 auto!important;max-width:none!important}}\n"] }]
6719
- }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }] } });
6701
+ }], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }] } });
6720
6702
 
6721
6703
  var rowField_component = /*#__PURE__*/Object.freeze({
6722
6704
  __proto__: null,
@@ -6749,12 +6731,12 @@ class GroupFieldComponent {
6749
6731
  // ─────────────────────────────────────────────────────────────────────────────
6750
6732
  // Inputs
6751
6733
  // ─────────────────────────────────────────────────────────────────────────────
6752
- field = input.required({ ...(ngDevMode ? { debugName: "field" } : {}) });
6753
- key = input.required({ ...(ngDevMode ? { debugName: "key" } : {}) });
6734
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
6735
+ key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
6754
6736
  // ─────────────────────────────────────────────────────────────────────────────
6755
6737
  // Computed Signals
6756
6738
  // ─────────────────────────────────────────────────────────────────────────────
6757
- rawFieldRegistry = computed(() => this.fieldRegistry.raw, { ...(ngDevMode ? { debugName: "rawFieldRegistry" } : {}) });
6739
+ rawFieldRegistry = computed(() => this.fieldRegistry.raw, ...(ngDevMode ? [{ debugName: "rawFieldRegistry" }] : []));
6758
6740
  formSetup = computed(() => {
6759
6741
  try {
6760
6742
  const groupField = this.field();
@@ -6785,15 +6767,15 @@ class GroupFieldComponent {
6785
6767
  registry: this.rawFieldRegistry(),
6786
6768
  };
6787
6769
  }
6788
- }, { ...(ngDevMode ? { debugName: "formSetup" } : {}) });
6789
- defaultValues = linkedSignal(() => this.formSetup().defaultValues, { ...(ngDevMode ? { debugName: "defaultValues" } : {}) });
6770
+ }, ...(ngDevMode ? [{ debugName: "formSetup" }] : []));
6771
+ defaultValues = linkedSignal(() => this.formSetup().defaultValues, ...(ngDevMode ? [{ debugName: "defaultValues" }] : []));
6790
6772
  entity = linkedSignal(() => {
6791
6773
  const parentValue = this.parentFieldSignalContext.value();
6792
6774
  const groupKey = this.field().key;
6793
6775
  const defaults = this.defaultValues();
6794
6776
  const groupValue = parentValue?.[groupKey] || {};
6795
6777
  return { ...defaults, ...groupValue };
6796
- }, { ...(ngDevMode ? { debugName: "entity" } : {}) });
6778
+ }, ...(ngDevMode ? [{ debugName: "entity" }] : []));
6797
6779
  form = computed(() => {
6798
6780
  return runInInjectionContext(this.injector, () => {
6799
6781
  const setup = this.formSetup();
@@ -6803,17 +6785,17 @@ class GroupFieldComponent {
6803
6785
  }
6804
6786
  return untracked(() => form(this.entity));
6805
6787
  });
6806
- }, { ...(ngDevMode ? { debugName: "form" } : {}) });
6788
+ }, ...(ngDevMode ? [{ debugName: "form" }] : []));
6807
6789
  // ─────────────────────────────────────────────────────────────────────────────
6808
6790
  // Public State Signals
6809
6791
  // ─────────────────────────────────────────────────────────────────────────────
6810
- formValue = computed(() => this.entity(), { ...(ngDevMode ? { debugName: "formValue" } : {}) });
6811
- valid = computed(() => this.form()().valid(), { ...(ngDevMode ? { debugName: "valid" } : {}) });
6812
- invalid = computed(() => this.form()().invalid(), { ...(ngDevMode ? { debugName: "invalid" } : {}) });
6813
- dirty = computed(() => this.form()().dirty(), { ...(ngDevMode ? { debugName: "dirty" } : {}) });
6814
- touched = computed(() => this.form()().touched(), { ...(ngDevMode ? { debugName: "touched" } : {}) });
6815
- errors = computed(() => this.form()().errors(), { ...(ngDevMode ? { debugName: "errors" } : {}) });
6816
- disabled = computed(() => this.form()().disabled(), { ...(ngDevMode ? { debugName: "disabled" } : {}) });
6792
+ formValue = computed(() => this.entity(), ...(ngDevMode ? [{ debugName: "formValue" }] : []));
6793
+ valid = computed(() => this.form()().valid(), ...(ngDevMode ? [{ debugName: "valid" }] : []));
6794
+ invalid = computed(() => this.form()().invalid(), ...(ngDevMode ? [{ debugName: "invalid" }] : []));
6795
+ dirty = computed(() => this.form()().dirty(), ...(ngDevMode ? [{ debugName: "dirty" }] : []));
6796
+ touched = computed(() => this.form()().touched(), ...(ngDevMode ? [{ debugName: "touched" }] : []));
6797
+ errors = computed(() => this.form()().errors(), ...(ngDevMode ? [{ debugName: "errors" }] : []));
6798
+ disabled = computed(() => this.form()().disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6817
6799
  /**
6818
6800
  * Get the nested FieldTree from the parent form for this group.
6819
6801
  * This allows child fields to update the parent form directly,
@@ -6823,7 +6805,7 @@ class GroupFieldComponent {
6823
6805
  const parentForm = this.parentFieldSignalContext.form();
6824
6806
  const groupKey = this.field().key;
6825
6807
  return getChildFieldTree(parentForm, groupKey);
6826
- }, { ...(ngDevMode ? { debugName: "nestedFieldTree" } : {}) });
6808
+ }, ...(ngDevMode ? [{ debugName: "nestedFieldTree" }] : []));
6827
6809
  groupInjector = computed(() => {
6828
6810
  const nestedTree = this.nestedFieldTree();
6829
6811
  // Use the nested FieldTree from parent if available, otherwise fall back to our own form
@@ -6845,7 +6827,7 @@ class GroupFieldComponent {
6845
6827
  },
6846
6828
  ],
6847
6829
  });
6848
- }, { ...(ngDevMode ? { debugName: "groupInjector" } : {}) });
6830
+ }, ...(ngDevMode ? [{ debugName: "groupInjector" }] : []));
6849
6831
  // ─────────────────────────────────────────────────────────────────────────────
6850
6832
  // Outputs
6851
6833
  // ─────────────────────────────────────────────────────────────────────────────
@@ -6855,7 +6837,7 @@ class GroupFieldComponent {
6855
6837
  // ─────────────────────────────────────────────────────────────────────────────
6856
6838
  // Field Resolution
6857
6839
  // ─────────────────────────────────────────────────────────────────────────────
6858
- fieldsSource = computed(() => this.formSetup().fields, { ...(ngDevMode ? { debugName: "fieldsSource" } : {}) });
6840
+ fieldsSource = computed(() => this.formSetup().fields, ...(ngDevMode ? [{ debugName: "fieldsSource" }] : []));
6859
6841
  resolvedFields = derivedFromDeferred(this.fieldsSource, pipe(switchMap((fields) => {
6860
6842
  if (!fields || fields.length === 0) {
6861
6843
  return of([]);
@@ -6875,21 +6857,30 @@ class GroupFieldComponent {
6875
6857
  return forkJoin(fields.map((f) => resolveField(f, context)));
6876
6858
  }), map((fields) => fields.filter((f) => f !== undefined)), scan$1(reconcileFields, [])), { initialValue: [], injector: this.injector });
6877
6859
  // ─────────────────────────────────────────────────────────────────────────────
6878
- // Effects
6860
+ // Constructor
6879
6861
  // ─────────────────────────────────────────────────────────────────────────────
6880
- emitInitializedOnFieldsResolved = explicitEffect([this.resolvedFields], ([fields]) => {
6881
- if (fields.length > 0) {
6882
- emitComponentInitialized(this.eventBus, 'group', this.field().key, this.injector);
6883
- }
6884
- });
6885
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: GroupFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6886
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: GroupFieldComponent, isStandalone: true, selector: "fieldset[group-field]", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { validityChange: "validityChange", dirtyChange: "dirtyChange", submitted: "submitted" }, host: { attributes: { "role": "group" }, properties: { "class.disabled": "disabled()", "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-group" }, ngImport: i0, template: `
6862
+ constructor() {
6863
+ this.setupEffects();
6864
+ }
6865
+ // ─────────────────────────────────────────────────────────────────────────────
6866
+ // Private Methods
6867
+ // ─────────────────────────────────────────────────────────────────────────────
6868
+ setupEffects() {
6869
+ // Emit initialization event when fields are resolved
6870
+ explicitEffect([this.resolvedFields], ([fields]) => {
6871
+ if (fields.length > 0) {
6872
+ emitComponentInitialized(this.eventBus, 'group', this.field().key, this.injector);
6873
+ }
6874
+ });
6875
+ }
6876
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: GroupFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6877
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: GroupFieldComponent, isStandalone: true, selector: "fieldset[group-field]", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { validityChange: "validityChange", dirtyChange: "dirtyChange", submitted: "submitted" }, host: { attributes: { "role": "group" }, properties: { "class.disabled": "disabled()", "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-group" }, ngImport: i0, template: `
6887
6878
  @for (field of resolvedFields(); track field.key) {
6888
6879
  <ng-container *ngComponentOutlet="field.component; injector: field.injector; inputs: field.inputs()" />
6889
6880
  }
6890
6881
  `, isInline: true, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{border:none;margin:0;padding:0;min-width:0;display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap, .5rem);width:100%}:host>*{grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6891
6882
  }
6892
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: GroupFieldComponent, decorators: [{
6883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: GroupFieldComponent, decorators: [{
6893
6884
  type: Component,
6894
6885
  args: [{ selector: 'fieldset[group-field]', imports: [NgComponentOutlet], template: `
6895
6886
  @for (field of resolvedFields(); track field.key) {
@@ -6902,7 +6893,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
6902
6893
  '[id]': '`${key()}`',
6903
6894
  '[attr.data-testid]': 'key()',
6904
6895
  }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{border:none;margin:0;padding:0;min-width:0;display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap, .5rem);width:100%}:host>*{grid-column:1/-1}\n"] }]
6905
- }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], validityChange: [{ type: i0.Output, args: ["validityChange"] }], dirtyChange: [{ type: i0.Output, args: ["dirtyChange"] }], submitted: [{ type: i0.Output, args: ["submitted"] }] } });
6896
+ }], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], validityChange: [{ type: i0.Output, args: ["validityChange"] }], dirtyChange: [{ type: i0.Output, args: ["dirtyChange"] }], submitted: [{ type: i0.Output, args: ["submitted"] }] } });
6906
6897
 
6907
6898
  var groupField_component = /*#__PURE__*/Object.freeze({
6908
6899
  __proto__: null,
@@ -7035,7 +7026,7 @@ function createObjectItemForm(options) {
7035
7026
  const parentValue = parentFieldSignalContext.value();
7036
7027
  const arrayValue = getArrayValue(parentValue, arrayKey);
7037
7028
  return arrayValue[indexSignal()] ?? {};
7038
- }, { ...(ngDevMode ? { debugName: "itemEntity" } : {}) });
7029
+ }, ...(ngDevMode ? [{ debugName: "itemEntity" }] : []));
7039
7030
  const nestedFields = 'fields' in template && Array.isArray(template.fields) ? template.fields : [];
7040
7031
  return runInInjectionContext(parentInjector, () => {
7041
7032
  // Determine which fields to include in the schema
@@ -7095,7 +7086,7 @@ function resolveArrayItem(options) {
7095
7086
  const order = itemOrderSignal();
7096
7087
  const idx = order.indexOf(itemId);
7097
7088
  return idx >= 0 ? idx : index;
7098
- }, { ...(ngDevMode ? { debugName: "indexSignal" } : {}) });
7089
+ }, ...(ngDevMode ? [{ debugName: "indexSignal" }] : []));
7099
7090
  const { injector, inputs } = createArrayItemInjectorAndInputs({
7100
7091
  fieldTree,
7101
7092
  template,
@@ -7140,16 +7131,16 @@ class ArrayFieldComponent {
7140
7131
  // ─────────────────────────────────────────────────────────────────────────────
7141
7132
  // Inputs
7142
7133
  // ─────────────────────────────────────────────────────────────────────────────
7143
- field = input.required({ ...(ngDevMode ? { debugName: "field" } : {}) });
7144
- key = input.required({ ...(ngDevMode ? { debugName: "key" } : {}) });
7134
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
7135
+ key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
7145
7136
  // ─────────────────────────────────────────────────────────────────────────────
7146
7137
  // Computed Signals
7147
7138
  // ─────────────────────────────────────────────────────────────────────────────
7148
- rawFieldRegistry = computed(() => this.fieldRegistry.raw, { ...(ngDevMode ? { debugName: "rawFieldRegistry" } : {}) });
7139
+ rawFieldRegistry = computed(() => this.fieldRegistry.raw, ...(ngDevMode ? [{ debugName: "rawFieldRegistry" }] : []));
7149
7140
  fieldTemplate = computed(() => {
7150
7141
  const arrayField = this.field();
7151
7142
  return arrayField.fields && arrayField.fields.length > 0 ? arrayField.fields[0] : null;
7152
- }, { ...(ngDevMode ? { debugName: "fieldTemplate" } : {}) });
7143
+ }, ...(ngDevMode ? [{ debugName: "fieldTemplate" }] : []));
7153
7144
  arrayFieldTrees = computed(() => {
7154
7145
  const arrayKey = this.field().key;
7155
7146
  const parentForm = this.parentFieldSignalContext.form();
@@ -7170,36 +7161,44 @@ class ArrayFieldComponent {
7170
7161
  items.push(itemFieldTree ?? null);
7171
7162
  }
7172
7163
  return items;
7173
- }, { ...(ngDevMode ? { debugName: "arrayFieldTrees" } : {}) });
7164
+ }, ...(ngDevMode ? [{ debugName: "arrayFieldTrees" }] : []));
7174
7165
  // ─────────────────────────────────────────────────────────────────────────────
7175
7166
  // State Signals
7176
7167
  // ─────────────────────────────────────────────────────────────────────────────
7177
- resolvedItemsSignal = signal([], { ...(ngDevMode ? { debugName: "resolvedItemsSignal" } : {}) });
7178
- updateVersion = signal(0, { ...(ngDevMode ? { debugName: "updateVersion" } : {}) });
7179
- itemOrderSignal = linkedSignal(() => this.resolvedItemsSignal().map((item) => item.id), { ...(ngDevMode ? { debugName: "itemOrderSignal" } : {}) });
7180
- resolvedItems = linkedSignal(() => this.resolvedItemsSignal(), { ...(ngDevMode ? { debugName: "resolvedItems" } : {}) });
7168
+ resolvedItemsSignal = signal([], ...(ngDevMode ? [{ debugName: "resolvedItemsSignal" }] : []));
7169
+ updateVersion = signal(0, ...(ngDevMode ? [{ debugName: "updateVersion" }] : []));
7170
+ itemOrderSignal = linkedSignal(() => this.resolvedItemsSignal().map((item) => item.id), ...(ngDevMode ? [{ debugName: "itemOrderSignal" }] : []));
7171
+ resolvedItems = linkedSignal(() => this.resolvedItemsSignal(), ...(ngDevMode ? [{ debugName: "resolvedItems" }] : []));
7181
7172
  // ─────────────────────────────────────────────────────────────────────────────
7182
- // Effects
7173
+ // Constructor
7183
7174
  // ─────────────────────────────────────────────────────────────────────────────
7184
- syncFieldsOnArrayChange = explicitEffect([this.arrayFieldTrees], ([fieldTrees]) => {
7185
- this.updateVersion.update((v) => v + 1);
7186
- const currentVersion = this.updateVersion();
7187
- this.performDifferentialUpdate(fieldTrees, currentVersion);
7188
- });
7189
- // ─────────────────────────────────────────────────────────────────────────────
7190
- // Event Handlers
7191
- // ─────────────────────────────────────────────────────────────────────────────
7192
- handleAddItem = this.eventBus
7193
- .on('add-array-item')
7194
- .pipe(takeUntilDestroyed(), filter((event) => event.arrayKey === this.key()))
7195
- .subscribe((event) => this.addItem(event.field ?? this.fieldTemplate(), event.index));
7196
- handleRemoveItem = this.eventBus
7197
- .on('remove-array-item')
7198
- .pipe(takeUntilDestroyed(), filter((event) => event.arrayKey === this.key()))
7199
- .subscribe((event) => this.removeItem(event.index));
7175
+ constructor() {
7176
+ this.setupEffects();
7177
+ this.setupEventHandlers();
7178
+ }
7200
7179
  // ─────────────────────────────────────────────────────────────────────────────
7201
7180
  // Private Methods
7202
7181
  // ─────────────────────────────────────────────────────────────────────────────
7182
+ setupEffects() {
7183
+ // Sync field components when array data changes
7184
+ explicitEffect([this.arrayFieldTrees], ([fieldTrees]) => {
7185
+ this.updateVersion.update((v) => v + 1);
7186
+ const currentVersion = this.updateVersion();
7187
+ this.performDifferentialUpdate(fieldTrees, currentVersion);
7188
+ });
7189
+ }
7190
+ setupEventHandlers() {
7191
+ // Handle add item events
7192
+ this.eventBus
7193
+ .on('add-array-item')
7194
+ .pipe(takeUntilDestroyed(), filter((event) => event.arrayKey === this.key()))
7195
+ .subscribe((event) => this.addItem(event.field ?? this.fieldTemplate(), event.index));
7196
+ // Handle remove item events
7197
+ this.eventBus
7198
+ .on('remove-array-item')
7199
+ .pipe(takeUntilDestroyed(), filter((event) => event.arrayKey === this.key()))
7200
+ .subscribe((event) => this.removeItem(event.index));
7201
+ }
7203
7202
  performDifferentialUpdate(fieldTrees, updateId) {
7204
7203
  const resolvedItems = this.resolvedItemsSignal();
7205
7204
  const operation = determineDifferentialOperation(resolvedItems, fieldTrees.length);
@@ -7303,14 +7302,14 @@ class ArrayFieldComponent {
7303
7302
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
7304
7303
  formObject.value.set({ ...currentValue, [arrayKey]: newArray });
7305
7304
  }
7306
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArrayFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7307
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: ArrayFieldComponent, isStandalone: true, selector: "array-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-array" }, ngImport: i0, template: `
7305
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: ArrayFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: ArrayFieldComponent, isStandalone: true, selector: "array-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()" }, classAttribute: "df-field df-array" }, ngImport: i0, template: `
7308
7307
  @for (item of resolvedItems(); track item.id) {
7309
7308
  <ng-container *ngComponentOutlet="item.component; injector: item.injector; inputs: item.inputs()" />
7310
7309
  }
7311
7310
  `, isInline: true, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap, .5rem);width:100%}:host>*{grid-column:1/-1}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7312
7311
  }
7313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArrayFieldComponent, decorators: [{
7312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: ArrayFieldComponent, decorators: [{
7314
7313
  type: Component,
7315
7314
  args: [{ selector: 'array-field', imports: [NgComponentOutlet], template: `
7316
7315
  @for (item of resolvedItems(); track item.id) {
@@ -7321,7 +7320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
7321
7320
  '[id]': '`${key()}`',
7322
7321
  '[attr.data-testid]': 'key()',
7323
7322
  }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host,.df-form{--df-grid-columns: 12;--df-grid-gap: .5rem;--df-grid-row-gap: .5rem;--df-breakpoint-sm: 576px;--df-breakpoint-md: 768px;--df-breakpoint-lg: 992px;--df-breakpoint-xl: 1200px;--df-grid-gap-sm: .5rem;--df-grid-gap-md: .5rem;--df-grid-gap-lg: .5rem;--df-grid-gap-xl: .5rem;--df-grid-row-gap-sm: .5rem;--df-grid-row-gap-md: .5rem;--df-grid-row-gap-lg: .5rem;--df-grid-row-gap-xl: .5rem;--df-group-gap: var(--df-grid-gap);--df-group-padding: var(--df-grid-gap)}.df-form{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap);width:100%}.df-form>*{grid-column:1/-1}.df-row{display:grid;grid-template-columns:repeat(var(--df-grid-columns, 12),1fr);gap:var(--df-grid-gap);align-items:start;width:100%}.df-row>*:not([class*=df-col-]){grid-column:1/-1}.df-col-1{grid-column:span 1}.df-col-2{grid-column:span 2}.df-col-3{grid-column:span 3}.df-col-4{grid-column:span 4}.df-col-5{grid-column:span 5}.df-col-6{grid-column:span 6}.df-col-7{grid-column:span 7}.df-col-8{grid-column:span 8}.df-col-9{grid-column:span 9}.df-col-10{grid-column:span 10}.df-col-11{grid-column:span 11}.df-col-12{grid-column:span 12}.df-col-auto{grid-column:span auto;width:auto}.df-col-full{grid-column:1/-1}.df-col-start-1{grid-column-start:1}.df-col-start-2{grid-column-start:2}.df-col-start-3{grid-column-start:3}.df-col-start-4{grid-column-start:4}.df-col-start-5{grid-column-start:5}.df-col-start-6{grid-column-start:6}.df-col-start-7{grid-column-start:7}.df-col-start-8{grid-column-start:8}.df-col-start-9{grid-column-start:9}.df-col-start-10{grid-column-start:10}.df-col-start-11{grid-column-start:11}.df-col-start-12{grid-column-start:12}.df-col-end-1{grid-column-end:1}.df-col-end-2{grid-column-end:2}.df-col-end-3{grid-column-end:3}.df-col-end-4{grid-column-end:4}.df-col-end-5{grid-column-end:5}.df-col-end-6{grid-column-end:6}.df-col-end-7{grid-column-end:7}.df-col-end-8{grid-column-end:8}.df-col-end-9{grid-column-end:9}.df-col-end-10{grid-column-end:10}.df-col-end-11{grid-column-end:11}.df-col-end-12{grid-column-end:12}.df-col-end-13{grid-column-end:13}@media(max-width:576px){.df-form{--df-grid-gap: var(--df-grid-gap-sm);--df-grid-row-gap: var(--df-grid-row-gap-sm)}.df-row{grid-template-columns:1fr}.df-row>*{grid-column:1/-1!important}.df-row.df-row-mobile-keep-cols{grid-template-columns:repeat(var(--df-grid-columns),1fr)}.df-row.df-row-mobile-keep-cols>*{grid-column:revert!important}}@media(min-width:577px)and (max-width:768px){.df-form{--df-grid-gap: var(--df-grid-gap-md);--df-grid-row-gap: var(--df-grid-row-gap-md)}.df-row{--df-grid-columns: 6}.df-col-sm-1{grid-column:span 1}.df-col-sm-2{grid-column:span 2}.df-col-sm-3{grid-column:span 3}.df-col-sm-4{grid-column:span 4}.df-col-sm-5{grid-column:span 5}.df-col-sm-6{grid-column:span 6}.df-col-sm-full{grid-column:1/-1}}@media(min-width:769px)and (max-width:992px){.df-form{--df-grid-gap: var(--df-grid-gap-lg);--df-grid-row-gap: var(--df-grid-row-gap-lg)}.df-col-md-1{grid-column:span 1}.df-col-md-2{grid-column:span 2}.df-col-md-3{grid-column:span 3}.df-col-md-4{grid-column:span 4}.df-col-md-5{grid-column:span 5}.df-col-md-6{grid-column:span 6}.df-col-md-7{grid-column:span 7}.df-col-md-8{grid-column:span 8}.df-col-md-9{grid-column:span 9}.df-col-md-10{grid-column:span 10}.df-col-md-11{grid-column:span 11}.df-col-md-12{grid-column:span 12}.df-col-md-full{grid-column:1/-1}}@media(min-width:993px){.df-form{--df-grid-gap: var(--df-grid-gap-xl);--df-grid-row-gap: var(--df-grid-row-gap-xl)}.df-col-lg-1{grid-column:span 1}.df-col-lg-2{grid-column:span 2}.df-col-lg-3{grid-column:span 3}.df-col-lg-4{grid-column:span 4}.df-col-lg-5{grid-column:span 5}.df-col-lg-6{grid-column:span 6}.df-col-lg-7{grid-column:span 7}.df-col-lg-8{grid-column:span 8}.df-col-lg-9{grid-column:span 9}.df-col-lg-10{grid-column:span 10}.df-col-lg-11{grid-column:span 11}.df-col-lg-12{grid-column:span 12}.df-col-lg-full{grid-column:1/-1}}.df-gap-none{--df-grid-gap: 0}.df-gap-xs{--df-grid-gap: .25rem}.df-gap-sm{--df-grid-gap: .5rem}.df-gap-md{--df-grid-gap: 1rem}.df-gap-lg{--df-grid-gap: 1.5rem}.df-gap-xl{--df-grid-gap: 2rem}.df-row-gap-none{--df-grid-row-gap: 0}.df-row-gap-xs{--df-grid-row-gap: .25rem}.df-row-gap-sm{--df-grid-row-gap: .5rem}.df-row-gap-md{--df-grid-row-gap: 1rem}.df-row-gap-lg{--df-grid-row-gap: 1.5rem}.df-row-gap-xl{--df-grid-row-gap: 2rem}.df-field{display:block;width:100%;min-width:0;overflow:hidden;margin:0}.df-group,.df-page{display:block;width:100%}.df-form.disabled,.df-row.disabled,.df-field.disabled{opacity:.6;pointer-events:none}.df-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-sr-only-focusable:focus,.df-sr-only-focusable:active{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.df-live-region{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.df-form :focus-visible{outline:2px solid var(--df-focus-color, #005fcc);outline-offset:2px}.df-group:focus-within{outline:1px dashed var(--df-focus-color, #005fcc);outline-offset:4px}:host{display:grid;grid-template-columns:1fr;gap:var(--df-grid-row-gap, .5rem);width:100%}:host>*{grid-column:1/-1}\n"] }]
7324
- }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }] } });
7323
+ }], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }] } });
7325
7324
 
7326
7325
  var arrayField_component = /*#__PURE__*/Object.freeze({
7327
7326
  __proto__: null,
@@ -7356,4 +7355,4 @@ var arrayField_component = /*#__PURE__*/Object.freeze({
7356
7355
  */
7357
7356
 
7358
7357
  export { resolveTokens as $, AddArrayItemEvent as A, checkboxFieldMapper as B, datepickerFieldMapper as C, DynamicTextPipe as D, EventBus as E, FormClearEvent as F, groupFieldMapper as G, pageFieldMapper as H, optionsFieldMapper as I, rowFieldMapper as J, valueFieldMapper as K, FIELD_REGISTRY as L, getFieldValueHandling as M, NextPageEvent as N, ARRAY_CONTEXT as O, PageChangeEvent as P, FIELD_SIGNAL_CONTEXT as Q, RemoveArrayItemEvent as R, SubmitEvent as S, createResolvedErrorsSignal as T, shouldShowErrors as U, dynamicTextToObservable as V, ArrayFieldComponent as W, GroupFieldComponent as X, RowFieldComponent as Y, applyValidator as Z, applyValidators as _, reconcileFields as a, BUILT_IN_FIELDS as a0, getChildFieldTree as a1, getChildrenMap as a2, getFieldProxy as a3, hasFormStructure as a4, DynamicForm as b, isFormStateCondition as c, derivedFromDeferred as d, emitComponentInitialized as e, resolveSubmitButtonDisabled as f, resolveNextButtonDisabled as g, isCheckedField as h, injectFieldRegistry as i, isValueField as j, isArrayField as k, isContainerField as l, isDisplayOnlyField as m, isGroupField as n, isLeafField as o, provideDynamicForm as p, isPageField as q, resolveField as r, isRowField as s, isValueBearingField as t, FormResetEvent as u, validatePageNesting as v, PreviousPageEvent as w, arrayFieldMapper as x, baseFieldMapper as y, buildBaseInputs as z };
7359
- //# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms--Qgd-rJE.mjs.map
7358
+ //# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-BWj75LVN.mjs.map