@ng-forge/dynamic-forms 1.3.0-next.2 → 1.3.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/fesm2022/ng-forge-dynamic-forms-active-page-initialized.event-bnrwNw7Y.mjs +156 -0
  2. package/fesm2022/ng-forge-dynamic-forms-active-page-initialized.event-bnrwNw7Y.mjs.map +1 -0
  3. package/fesm2022/ng-forge-dynamic-forms-array-field.component-Dv9mPnJ3.mjs +770 -0
  4. package/fesm2022/ng-forge-dynamic-forms-array-field.component-Dv9mPnJ3.mjs.map +1 -0
  5. package/fesm2022/ng-forge-dynamic-forms-array-item-registry.service-D-AxVLdk.mjs +83 -0
  6. package/fesm2022/ng-forge-dynamic-forms-array-item-registry.service-D-AxVLdk.mjs.map +1 -0
  7. package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-B6WH0Etk.mjs +1887 -0
  8. package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-B6WH0Etk.mjs.map +1 -0
  9. package/fesm2022/ng-forge-dynamic-forms-bootstrap-web-mcp-VjJn-JeD.mjs +954 -0
  10. package/fesm2022/ng-forge-dynamic-forms-bootstrap-web-mcp-VjJn-JeD.mjs.map +1 -0
  11. package/fesm2022/ng-forge-dynamic-forms-container-field-processors-C_JRvaVt.mjs +117 -0
  12. package/fesm2022/ng-forge-dynamic-forms-container-field-processors-C_JRvaVt.mjs.map +1 -0
  13. package/fesm2022/ng-forge-dynamic-forms-container-field.component-Bg7Win9n.mjs +228 -0
  14. package/fesm2022/ng-forge-dynamic-forms-container-field.component-Bg7Win9n.mjs.map +1 -0
  15. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-R2yc-H0T.mjs +102 -0
  16. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-R2yc-H0T.mjs.map +1 -0
  17. package/fesm2022/ng-forge-dynamic-forms-debounce-CG3uP5B-.mjs +4 -0
  18. package/fesm2022/{ng-forge-dynamic-forms-debounce-C9F4v1Ke.mjs.map → ng-forge-dynamic-forms-debounce-CG3uP5B-.mjs.map} +1 -1
  19. package/fesm2022/ng-forge-dynamic-forms-default-value-D5M4MNE-.mjs +77 -0
  20. package/fesm2022/ng-forge-dynamic-forms-default-value-D5M4MNE-.mjs.map +1 -0
  21. package/fesm2022/ng-forge-dynamic-forms-dev-mode-4rbYBBo_.mjs +4 -0
  22. package/fesm2022/ng-forge-dynamic-forms-dev-mode-4rbYBBo_.mjs.map +1 -0
  23. package/fesm2022/ng-forge-dynamic-forms-df-field-outlet.directive-CQsDMV-s.mjs +644 -0
  24. package/fesm2022/ng-forge-dynamic-forms-df-field-outlet.directive-CQsDMV-s.mjs.map +1 -0
  25. package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-DKgkpIpG.mjs +56 -0
  26. package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-DKgkpIpG.mjs.map +1 -0
  27. package/fesm2022/ng-forge-dynamic-forms-form-schema.service-Dd-gHJ_7.mjs +38 -0
  28. package/fesm2022/{ng-forge-dynamic-forms-form-schema.service-Dx5Dlb15.mjs.map → ng-forge-dynamic-forms-form-schema.service-Dd-gHJ_7.mjs.map} +1 -1
  29. package/fesm2022/ng-forge-dynamic-forms-form-state-manager-BJKBX4FL.mjs +1545 -0
  30. package/fesm2022/ng-forge-dynamic-forms-form-state-manager-BJKBX4FL.mjs.map +1 -0
  31. package/fesm2022/ng-forge-dynamic-forms-group-field.component-BjZi0bhq.mjs +292 -0
  32. package/fesm2022/ng-forge-dynamic-forms-group-field.component-BjZi0bhq.mjs.map +1 -0
  33. package/fesm2022/ng-forge-dynamic-forms-integration.mjs +1318 -843
  34. package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
  35. package/fesm2022/ng-forge-dynamic-forms-internal.mjs +3421 -3641
  36. package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
  37. package/fesm2022/ng-forge-dynamic-forms-page-field.component-Bsd8YpzL.mjs +327 -0
  38. package/fesm2022/ng-forge-dynamic-forms-page-field.component-Bsd8YpzL.mjs.map +1 -0
  39. package/fesm2022/ng-forge-dynamic-forms-resolve-field-ByGa5cpo.mjs +329 -0
  40. package/fesm2022/ng-forge-dynamic-forms-resolve-field-ByGa5cpo.mjs.map +1 -0
  41. package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-CuFycQb-.mjs +81 -0
  42. package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-CuFycQb-.mjs.map +1 -0
  43. package/fesm2022/ng-forge-dynamic-forms-schema-builder-C62afItJ.mjs +400 -0
  44. package/fesm2022/ng-forge-dynamic-forms-schema-builder-C62afItJ.mjs.map +1 -0
  45. package/fesm2022/ng-forge-dynamic-forms-schema-registry.service-axBV9FBH.mjs +45 -0
  46. package/fesm2022/ng-forge-dynamic-forms-schema-registry.service-axBV9FBH.mjs.map +1 -0
  47. package/fesm2022/ng-forge-dynamic-forms-schema.mjs +8 -14
  48. package/fesm2022/ng-forge-dynamic-forms-schema.mjs.map +1 -1
  49. package/fesm2022/ng-forge-dynamic-forms-testing.mjs +68 -73
  50. package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -1
  51. package/fesm2022/ng-forge-dynamic-forms-text-field.component--MAh_h4Q.mjs +257 -0
  52. package/fesm2022/ng-forge-dynamic-forms-text-field.component--MAh_h4Q.mjs.map +1 -0
  53. package/fesm2022/ng-forge-dynamic-forms-validation-execution.token-BFyySKtp.mjs +8 -0
  54. package/fesm2022/ng-forge-dynamic-forms-validation-execution.token-BFyySKtp.mjs.map +1 -0
  55. package/fesm2022/ng-forge-dynamic-forms-with-logger-config-BAATqYY0.mjs +94 -0
  56. package/fesm2022/ng-forge-dynamic-forms-with-logger-config-BAATqYY0.mjs.map +1 -0
  57. package/fesm2022/ng-forge-dynamic-forms-wrapper-chain-BnntfNU1.mjs +115 -0
  58. package/fesm2022/ng-forge-dynamic-forms-wrapper-chain-BnntfNU1.mjs.map +1 -0
  59. package/fesm2022/ng-forge-dynamic-forms.mjs +2195 -3
  60. package/fesm2022/ng-forge-dynamic-forms.mjs.map +1 -1
  61. package/package.json +1 -1
  62. package/types/ng-forge-dynamic-forms-integration.d.ts +543 -415
  63. package/types/ng-forge-dynamic-forms-internal.d.ts +2329 -2437
  64. package/types/ng-forge-dynamic-forms-schema.d.ts +13 -16
  65. package/types/ng-forge-dynamic-forms-testing.d.ts +34 -37
  66. package/types/ng-forge-dynamic-forms.d.ts +796 -722
  67. package/fesm2022/ng-forge-dynamic-forms-array-field.component-CSCKq_1K.mjs +0 -750
  68. package/fesm2022/ng-forge-dynamic-forms-array-field.component-CSCKq_1K.mjs.map +0 -1
  69. package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CTOTwzzw.mjs +0 -2394
  70. package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CTOTwzzw.mjs.map +0 -1
  71. package/fesm2022/ng-forge-dynamic-forms-bootstrap-web-mcp-BtjqeJOj.mjs +0 -1054
  72. package/fesm2022/ng-forge-dynamic-forms-bootstrap-web-mcp-BtjqeJOj.mjs.map +0 -1
  73. package/fesm2022/ng-forge-dynamic-forms-container-field.component-Dc3ROhHL.mjs +0 -86
  74. package/fesm2022/ng-forge-dynamic-forms-container-field.component-Dc3ROhHL.mjs.map +0 -1
  75. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-BzgX8lAD.mjs +0 -33
  76. package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-BzgX8lAD.mjs.map +0 -1
  77. package/fesm2022/ng-forge-dynamic-forms-debounce-C9F4v1Ke.mjs +0 -17
  78. package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-CIKbWqYA.mjs +0 -25
  79. package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-CIKbWqYA.mjs.map +0 -1
  80. package/fesm2022/ng-forge-dynamic-forms-form-schema.service-Dx5Dlb15.mjs +0 -24
  81. package/fesm2022/ng-forge-dynamic-forms-group-field.component-DAC3P9DC.mjs +0 -177
  82. package/fesm2022/ng-forge-dynamic-forms-group-field.component-DAC3P9DC.mjs.map +0 -1
  83. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CXQe_5td.mjs +0 -5133
  84. package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CXQe_5td.mjs.map +0 -1
  85. package/fesm2022/ng-forge-dynamic-forms-page-field.component-DPKJcwUO.mjs +0 -176
  86. package/fesm2022/ng-forge-dynamic-forms-page-field.component-DPKJcwUO.mjs.map +0 -1
  87. package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-DMEeKZny.mjs +0 -19
  88. package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-DMEeKZny.mjs.map +0 -1
  89. package/fesm2022/ng-forge-dynamic-forms-schema-builder-BvDTzfdM.mjs +0 -570
  90. package/fesm2022/ng-forge-dynamic-forms-schema-builder-BvDTzfdM.mjs.map +0 -1
  91. package/fesm2022/ng-forge-dynamic-forms-text-field.component-BB-jutBq.mjs +0 -126
  92. package/fesm2022/ng-forge-dynamic-forms-text-field.component-BB-jutBq.mjs.map +0 -1
@@ -1,13 +1,15 @@
1
- import * as rxjs from 'rxjs';
2
- import * as _angular_forms_signals from '@angular/forms/signals';
3
- import { FieldTree } from '@angular/forms/signals';
4
- import * as _ng_forge_dynamic_forms_internal from '@ng-forge/dynamic-forms/internal';
5
- import { FormEvent, FieldDef, RegisteredFieldTypes, InferFormModel, FormConfig, FormOptions, EventBus, LazyComponentLoader, WrapperTypeDefinition, FieldTypeDefinition, InferFormValue as InferFormValue$1, DerivationLogLevel, Logger, ValueExclusionConfig, ValidationExecutionConfig, TextAddon, WrapperFieldInputs, TemplateAddon, ComponentAddon, BaseAddon, AddonTypeDefinition, AddonActionHandler, ArrayItemDefinition } from '@ng-forge/dynamic-forms/internal';
6
- export { AddonActionContext, AddonActionPreset, AddonSlot, AddonTypeDefinition, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayField, ArrayItemTemplate, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseCheckedField, BaseValidatorConfig, BaseValueField, BuiltInValidatorConfig, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComponentAddon, ConditionalExpression, ContainerAllowedChildren, ContainerField, ContainerFieldTypes, CssWrapper, CustomFnConfig, CustomFunction, CustomValidator, CustomValidatorConfig, DF_FIELD_TEMPLATES, DeclarativeHttpValidatorConfig, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormError, DynamicFormFieldRegistry, DynamicFormLogger, DynamicText, DynamicValue, EvaluationContext, ExtractField, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldWithValidation, FieldWrapper, FormConfig, FormEvent, FormEventConstructor, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, GroupAllowedChildren, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpValidationResponseMapping, InferFormValue, InitialPageConfig, LeafFieldTypes, Logger, LogicConfig, NarrowField, NarrowFields, NextButtonOptions, NoopLogger, OrphanAddonActionContext, PageAllowedChildren, PageField, RegisteredActionRef, RegisteredFieldTypes, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowErrorSpec, RowField, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationExecutionConfig, ValidationMessage, ValidationMessageResolver, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueType, WebMcpToolOptions, WithInputSignals, WrapperConfig, WrapperTypeDefinition, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue, rowError } from '@ng-forge/dynamic-forms/internal';
7
- import * as _angular_core from '@angular/core';
8
- import { Type, Injector, Signal, EnvironmentInjector, WritableSignal, Provider, EnvironmentProviders, TemplateRef } from '@angular/core';
9
- import * as _ng_forge_dynamic_forms from '@ng-forge/dynamic-forms';
10
-
1
+ import { AddonActionContext, AddonActionHandler, AddonActionPreset, AddonSlot, AddonTypeDefinition, AddonTypeDefinition as AddonTypeDefinition$1, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayField, ArrayItemDefinition, ArrayItemTemplate, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseAddon as BaseAddon$1, BaseCheckedField, BaseValidatorConfig, BaseValueField, BuiltInValidatorConfig, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComponentAddon, ComponentAddon as ComponentAddon$1, ConditionalExpression, ContainerAllowedChildren, ContainerField, ContainerFieldTypes, CssWrapper, CustomFnConfig, CustomFunction, CustomValidator, CustomValidatorConfig, DF_FIELD_TEMPLATES, DeclarativeHttpValidatorConfig, DerivationLogLevel, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormError, DynamicFormFieldRegistry, DynamicFormLogger, DynamicText, DynamicValue, EvaluationContext, EventBus, ExtractField, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldDef as FieldDef$1, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldTypeDefinition, FieldWithValidation, FieldWrapper, FormConfig, FormConfig as FormConfig$1, FormEvent, FormEvent as FormEvent$1, FormEventConstructor, FormMode, FormModeDetectionResult, FormOptions, FormOptions as FormOptions$1, FormStateCondition, GroupAllowedChildren, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpValidationResponseMapping, InferFormModel, InferFormValue, InferFormValue as InferFormValue$1, InitialPageConfig, LazyComponentLoader, LeafFieldTypes, Logger, Logger as Logger$1, LogicConfig, NarrowField, NarrowFields, NextButtonOptions, NoopLogger, OrphanAddonActionContext, PageAllowedChildren, PageField, RegisteredActionRef, RegisteredFieldTypes, RegisteredFieldTypes as RegisteredFieldTypes$1, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowErrorSpec, RowField, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TemplateAddon as TemplateAddon$1, TextAddon, TextAddon as TextAddon$1, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationExecutionConfig, ValidationExecutionConfig as ValidationExecutionConfig$1, ValidationMessage, ValidationMessageResolver, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueExclusionConfig as ValueExclusionConfig$1, ValueFieldComponent, ValueType, WebMcpToolOptions, WithInputSignals, WrapperConfig, WrapperFieldInputs, WrapperTypeDefinition, WrapperTypeDefinition as WrapperTypeDefinition$1, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue, rowError } from "@ng-forge/dynamic-forms/internal";
2
+ import * as i0 from "@angular/core";
3
+ import { EnvironmentInjector, EnvironmentProviders, Injector, Provider, Signal, TemplateRef, Type, WritableSignal } from "@angular/core";
4
+ import { FieldTree } from "@angular/forms/signals";
5
+ import "rxjs";
6
+ import "@ng-forge/dynamic-forms/schema";
7
+ /** Error from async field component loading. */
8
+ interface FieldLoadingError {
9
+ readonly fieldType: string;
10
+ readonly fieldKey: string;
11
+ readonly error: Error;
12
+ }
11
13
  /**
12
14
  * Global default configuration for progressive field mounting ("field
13
15
  * windowing"): fields beyond `eager` render as `@defer (on viewport)`
@@ -17,14 +19,14 @@ import * as _ng_forge_dynamic_forms from '@ng-forge/dynamic-forms';
17
19
  * @internal
18
20
  */
19
21
  interface FieldWindowingConfig {
20
- /** Whether field windowing is active. */
21
- readonly enabled: boolean;
22
- /** Number of leading fields mounted eagerly (not windowed). */
23
- readonly eager: number;
24
- /** CSS `min-height` reserved for each unmounted field's placeholder. */
25
- readonly placeholderHeight: string;
26
- /** Parking: hold scrolled-away fields out of change detection, DOM intact. */
27
- readonly park: FieldParkingConfig;
22
+ /** Whether field windowing is active. */
23
+ readonly enabled: boolean;
24
+ /** Number of leading fields mounted eagerly (not windowed). */
25
+ readonly eager: number;
26
+ /** CSS `min-height` reserved for each unmounted field's placeholder. */
27
+ readonly placeholderHeight: string;
28
+ /** Parking: hold scrolled-away fields out of change detection, DOM intact. */
29
+ readonly park: FieldParkingConfig;
28
30
  }
29
31
  /**
30
32
  * Parking config. `@defer (on viewport)` only ever mounts — it never unmounts —
@@ -43,59 +45,47 @@ interface FieldWindowingConfig {
43
45
  * @internal
44
46
  */
45
47
  interface FieldParkingConfig {
46
- /** Whether scrolled-away fields are held out of change detection. */
47
- readonly enabled: boolean;
48
- /** `IntersectionObserver` rootMargin — how far outside the viewport stays live. */
49
- readonly margin: string;
48
+ /** Whether scrolled-away fields are held out of change detection. */
49
+ readonly enabled: boolean;
50
+ /** `IntersectionObserver` rootMargin — how far outside the viewport stays live. */
51
+ readonly margin: string;
50
52
  }
51
-
52
- /** Error from async field component loading. */
53
- interface FieldLoadingError {
54
- readonly fieldType: string;
55
- readonly fieldKey: string;
56
- readonly error: Error;
57
- }
58
-
59
53
  /** Event dispatched when the form should be cleared. */
60
- declare class FormClearEvent implements FormEvent {
61
- readonly type: "form-clear";
54
+ export declare class FormClearEvent implements FormEvent$1 {
55
+ readonly type: "form-clear";
62
56
  }
63
-
64
57
  /** Event dispatched when the form should be reset to its default values. */
65
- declare class FormResetEvent implements FormEvent {
66
- readonly type: "form-reset";
58
+ export declare class FormResetEvent implements FormEvent$1 {
59
+ readonly type: "form-reset";
67
60
  }
68
-
69
61
  /** Event emitted when the active page of a paged form changes. */
70
- declare class PageChangeEvent implements FormEvent {
71
- /** The current page index (0-based) */
72
- readonly currentPageIndex: number;
73
- /** Total number of pages */
74
- readonly totalPages: number;
75
- /** Previous page index (0-based), undefined if first navigation */
76
- readonly previousPageIndex?: number | undefined;
77
- readonly type: "page-change";
78
- constructor(
79
- /** The current page index (0-based) */
80
- currentPageIndex: number,
81
- /** Total number of pages */
82
- totalPages: number,
83
- /** Previous page index (0-based), undefined if first navigation */
84
- previousPageIndex?: number | undefined);
62
+ export declare class PageChangeEvent implements FormEvent$1 {
63
+ /** The current page index (0-based) */
64
+ readonly currentPageIndex: number;
65
+ /** Total number of pages */
66
+ readonly totalPages: number;
67
+ /** Previous page index (0-based), undefined if first navigation */
68
+ readonly previousPageIndex?: number | undefined;
69
+ readonly type: "page-change";
70
+ constructor(
71
+ /** The current page index (0-based) */
72
+ currentPageIndex: number,
73
+ /** Total number of pages */
74
+ totalPages: number,
75
+ /** Previous page index (0-based), undefined if first navigation */
76
+ previousPageIndex?: number | undefined);
85
77
  }
86
-
87
78
  /** Navigation state of a paged form, as emitted by `PagerStateEvent`. */
88
79
  interface PagerState {
89
- /** Current page index (0-based) */
90
- currentPageIndex: number;
91
- /** Total number of pages */
92
- totalPages: number;
93
- /** Whether the current page is the first visible page */
94
- isFirstPage: boolean;
95
- /** Whether the current page is the last visible page */
96
- isLastPage: boolean;
80
+ /** Current page index (0-based) */
81
+ currentPageIndex: number;
82
+ /** Total number of pages */
83
+ totalPages: number;
84
+ /** Whether the current page is the first visible page */
85
+ isFirstPage: boolean;
86
+ /** Whether the current page is the last visible page */
87
+ isLastPage: boolean;
97
88
  }
98
-
99
89
  /**
100
90
  * Event emitted whenever the pager state of a paged form changes.
101
91
  *
@@ -104,40 +94,89 @@ interface PagerState {
104
94
  * `isLastPage` flip because a page's `hidden` logic toggled and the set of
105
95
  * visible pages shifted, with the active page never moving.
106
96
  */
107
- declare class PagerStateEvent implements FormEvent {
108
- state: PagerState;
109
- readonly type: "pager-state";
110
- constructor(state: PagerState);
97
+ export declare class PagerStateEvent implements FormEvent$1 {
98
+ state: PagerState;
99
+ readonly type: "pager-state";
100
+ constructor(state: PagerState);
111
101
  }
112
-
113
102
  /** Emitted after the active page and all of its visible fields have rendered. */
114
- declare class ActivePageInitializedEvent implements FormEvent {
115
- readonly pageIndex: number;
116
- readonly pageKey: string;
117
- readonly type: "active-page-initialized";
118
- constructor(pageIndex: number, pageKey: string);
103
+ export declare class ActivePageInitializedEvent implements FormEvent$1 {
104
+ readonly pageIndex: number;
105
+ readonly pageKey: string;
106
+ readonly type: "active-page-initialized";
107
+ constructor(pageIndex: number, pageKey: string);
108
+ }
109
+ /**
110
+ * Field metadata handed to a projected placeholder template as its context —
111
+ * both `$implicit` (for `let-field`) and the named `field`. Deliberately narrow
112
+ * and stable: it is NOT the internal `ResolvedField`.
113
+ */
114
+ interface FieldPlaceholderInfo {
115
+ /** The field's key. */
116
+ readonly key: string;
117
+ /** The field's type (e.g. `input`, `textarea`, `select`). */
118
+ readonly type: string;
119
+ /** The field's label when it is a plain string; translated (Observable or Signal) labels are not resolved. */
120
+ readonly label?: string;
121
+ /** The field's grid column span, if any. */
122
+ readonly col?: number;
123
+ }
124
+ /** Template context for a projected `dfPlaceholder`. */
125
+ interface FieldPlaceholderContext {
126
+ readonly $implicit: FieldPlaceholderInfo;
127
+ readonly field: FieldPlaceholderInfo;
128
+ }
129
+ /**
130
+ * Marks an `<ng-template>` projected into `<form dynamic-form>` content as a
131
+ * field-windowing placeholder. Mirrors {@link DfTemplate}: the template is
132
+ * captured by `DynamicForm` via `contentChildren` and published through
133
+ * {@link DF_FIELD_PLACEHOLDERS} so dynamically-rendered pages can resolve it.
134
+ *
135
+ * - `<ng-template dfPlaceholder let-field>` — default, used for any field
136
+ * - `<ng-template dfPlaceholder="textarea">` — matched by field type
137
+ * - `<ng-template dfPlaceholderKey="username">` — matched by a specific field key
138
+ */
139
+ export declare class DfPlaceholder {
140
+ /** Field-type match, or empty for the default placeholder. */
141
+ readonly dfPlaceholder: import("@angular/core").InputSignal<string>;
142
+ /** Field-key match (escape hatch); wins over a type match. */
143
+ readonly dfPlaceholderKey: import("@angular/core").InputSignal<string>;
144
+ readonly templateRef: TemplateRef<FieldPlaceholderContext>;
145
+ /** Types `let-field` in `<ng-template dfPlaceholder let-field>`. */
146
+ static ngTemplateContextGuard(_dir: DfPlaceholder, ctx: unknown): ctx is FieldPlaceholderContext;
147
+ static ɵfac: i0.ɵɵFactoryDeclaration<DfPlaceholder, never>;
148
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DfPlaceholder, "ng-template[dfPlaceholder], ng-template[dfPlaceholderKey]", ["dfPlaceholder"], {
149
+ "dfPlaceholder": {
150
+ "alias": "dfPlaceholder";
151
+ "required": false;
152
+ "isSignal": true;
153
+ };
154
+ "dfPlaceholderKey": {
155
+ "alias": "dfPlaceholderKey";
156
+ "required": false;
157
+ "isSignal": true;
158
+ };
159
+ }, {}, never, never, true, never>;
119
160
  }
120
-
121
161
  /** Resolved field ready for rendering with ngComponentOutlet / DfFieldOutlet. */
122
162
  interface ResolvedField {
123
- key: string;
124
- /** The original field definition (used by DfFieldOutlet to resolve wrappers). */
125
- fieldDef: FieldDef<unknown>;
126
- component: Type<unknown>;
127
- injector: Injector;
128
- inputs: Signal<Record<string, unknown>>;
129
- renderReady: Signal<boolean>;
130
- /**
131
- * Whether the field is currently hidden. Sourced from the FieldTree's
132
- * `state.hidden()` for value-bearing fields (set by Angular Signal Forms in
133
- * response to `hidden(path, …)` calls), or from the mapper's explicit
134
- * `hidden` input for non-value fields (button, text, container, …). Consumers
135
- * must `@if (!field.hidden())` around `*dfFieldOutlet` so hidden fields are
136
- * removed from the DOM — Angular Signal Forms warns (NG01916) otherwise.
137
- */
138
- hidden: Signal<boolean>;
163
+ key: string;
164
+ /** The original field definition (used by DfFieldOutlet to resolve wrappers). */
165
+ fieldDef: FieldDef$1<unknown>;
166
+ component: Type<unknown>;
167
+ injector: Injector;
168
+ inputs: Signal<Record<string, unknown>>;
169
+ renderReady: Signal<boolean>;
170
+ /**
171
+ * Whether the field is currently hidden. Sourced from the FieldTree's
172
+ * `state.hidden()` for value-bearing fields (set by Angular Signal Forms in
173
+ * response to `hidden(path, …)` calls), or from the mapper's explicit
174
+ * `hidden` input for non-value fields (button, text, container, …). Consumers
175
+ * must `@if (!field.hidden())` around `*dfFieldOutlet` so hidden fields are
176
+ * removed from the DOM — Angular Signal Forms warns (NG01916) otherwise.
177
+ */
178
+ hidden: Signal<boolean>;
139
179
  }
140
-
141
180
  /**
142
181
  * Renders a form from a {@link FormConfig}. Attribute component on a native
143
182
  * `<form>` element (selector `form[dynamic-form]`); state management is
@@ -168,188 +207,229 @@ interface ResolvedField {
168
207
  * }
169
208
  * ```
170
209
  */
171
- declare class DynamicForm<TFields extends RegisteredFieldTypes[] = RegisteredFieldTypes[], TModel extends Record<string, unknown> = InferFormModel<TFields>> {
172
- /** Form configuration defining the structure, validation, and behavior. */
173
- config: _angular_core.InputSignal<FormConfig<TFields, _ng_forge_dynamic_forms.InferFormValue<TFields extends readonly RegisteredFieldTypes[] ? TFields : RegisteredFieldTypes[]>, Record<string, unknown>, unknown>>;
174
- /** Runtime form options that override config options when provided. */
175
- formOptions: _angular_core.InputSignal<FormOptions | undefined>;
176
- /** Form values for two-way data binding. */
177
- value: _angular_core.ModelSignal<Partial<TModel> | undefined>;
178
- /**
179
- * How lenient the addon validator is on `config.fields[...].addons`.
180
- * `'inline'` (default) keeps everything; `'json'` drops code-only types
181
- * with a warning. Read at form init and on every config swap — change
182
- * `source` AND the config to force re-validation mid-flight.
183
- */
184
- source: _angular_core.InputSignal<"json" | "inline">;
185
- private destroyRef;
186
- private injector;
187
- protected environmentInjector: EnvironmentInjector;
188
- private eventBus;
189
- private logger;
190
- private dispatcher;
191
- private templateRegistry;
192
- private globalFieldWindowing;
193
- /** All `<ng-template dfTemplate="...">` instances projected into this form. */
194
- private readonly _projectedTemplates;
195
- private readonly stateManager;
196
- /**
197
- * Owns this form's DOM-id prefix and registers the instance with the root
198
- * registry for multi-form collision detection. Injected eagerly (not lazily
199
- * via first field map) so the live-form count is accurate from construction.
200
- */
201
- private readonly formIdPrefix;
202
- /** Active DOM-id prefix — empty unless explicitly set or multiple forms are mounted. */
203
- protected readonly idPrefix: Signal<string>;
204
- private componentId;
205
- /** The currently active config used for form rendering */
206
- activeConfig: Signal<FormConfig<TFields, _ng_forge_dynamic_forms.InferFormValue<TFields extends readonly RegisteredFieldTypes[] ? TFields : RegisteredFieldTypes[]>, Record<string, unknown>, unknown> | undefined>;
207
- /** Current render phase: 'render' = showing form, 'teardown' = hiding old components */
208
- renderPhase: Signal<"teardown" | "render">;
209
- /** Computed form mode detection with validation */
210
- formModeDetection: Signal<_ng_forge_dynamic_forms.FormModeDetectionResult>;
211
- /** Page field definitions for paged forms */
212
- pageFieldDefinitions: Signal<_ng_forge_dynamic_forms.PageField<_ng_forge_dynamic_forms.PageAllowedChildren[]>[]>;
213
- /** Effective form options (merged from config and input) */
214
- effectiveFormOptions: Signal<{
215
- disabled?: boolean;
216
- idPrefix?: string;
217
- maxDerivationIterations?: number;
218
- submitButton?: _ng_forge_dynamic_forms.SubmitButtonOptions;
219
- nextButton?: _ng_forge_dynamic_forms.NextButtonOptions;
220
- initialPage?: number | _ng_forge_dynamic_forms.InitialPageConfig;
221
- pagePreloadWindow?: number;
222
- fieldWindowing?: boolean | {
223
- eager?: number;
224
- placeholderHeight?: string;
225
- park?: boolean | {
226
- margin?: string;
227
- };
228
- };
229
- excludeValueIfHidden?: boolean;
230
- excludeValueIfDisabled?: boolean;
231
- excludeValueIfReadonly?: boolean;
232
- validateWhenHidden?: boolean;
233
- emitFormValueOnEvents?: boolean;
234
- webMcp?: _ng_forge_dynamic_forms.WebMcpToolOptions;
235
- }>;
236
- /** Field signal context for injection into child components */
237
- fieldSignalContext: Signal<_ng_forge_dynamic_forms_internal.FieldSignalContext<TModel>>;
238
- /** Default values computed from field definitions */
239
- defaultValues: WritableSignal<TModel>;
240
- /** The Angular Signal Form instance */
241
- form: Signal<FieldTree<TModel, string | number, "writable">>;
242
- /** Current form values (reactive) */
243
- formValue: Signal<TModel>;
244
- /** Whether the form is currently valid */
245
- valid: Signal<boolean>;
246
- /** Whether the form is currently invalid */
247
- invalid: Signal<boolean>;
248
- /** Whether any form field has been modified */
249
- dirty: Signal<boolean>;
250
- /** Whether any form field has been touched (blurred) */
251
- touched: Signal<boolean>;
252
- /** Current validation errors from all fields */
253
- errors: Signal<_angular_forms_signals.ValidationError.WithFieldTree[]>;
254
- /** Whether the form is disabled (from options or form state) */
255
- disabled: Signal<boolean>;
256
- /** Whether the form is currently submitting */
257
- submitting: Signal<boolean>;
258
- /** Collects errors from async field component loading for error boundary patterns */
259
- fieldLoadingErrors: WritableSignal<FieldLoadingError[]>;
260
- /** Whether to render the form template */
261
- private derivationReady;
262
- shouldRender: Signal<boolean>;
263
- /**
264
- * What the experimental WebMCP layer is doing for this form.
265
- *
266
- * Injecting it is also what instantiates the gate (component providers are
267
- * lazy), which is what keeps the registrar lazily loaded. Intentionally absent
268
- * from `shouldRender`: agent visibility must never gate render.
269
- *
270
- * `'disabled'` unless `withExperimentalWebMcp()` is provided; `'idle'` until a
271
- * config declares `options.webMcp`; `'active'` once its tools are registered.
272
- * `'failed'` and `'unsupported'` are the two ways registration does not
273
- * happen, and are worth surfacing rather than guessing at.
274
- *
275
- * @experimental
276
- */
277
- readonly webMcpStatus: Signal<_ng_forge_dynamic_forms.WebMcpStatus>;
278
- /** Resolved fields ready for rendering */
279
- protected resolvedFields: Signal<ResolvedField[]>;
280
- /**
281
- * Effective field-windowing config for non-paged forms. Per-form
282
- * `FormOptions.fieldWindowing` wins over the global `withFieldWindowing()`
283
- * default; both fall back to disabled (fully eager).
284
- */
285
- protected readonly fieldWindowing: Signal<FieldWindowingConfig>;
286
- private readonly initializedComponents;
287
- private readonly initialPageReady;
288
- private readonly initializationReady;
289
- /** Replayable readiness so late subscribers cannot miss hot EventBus announcements. */
290
- initialized$: rxjs.Observable<boolean>;
291
- /** Emits when form validity changes. */
292
- validityChange: _angular_core.OutputRef<boolean>;
293
- /** Emits when form dirty state changes. */
294
- dirtyChange: _angular_core.OutputRef<boolean>;
295
- /** Emits form values when submitted (via FormSubmitEvent) and form is valid. */
296
- submitted: _angular_core.OutputRef<TModel>;
297
- /** Emits when form is reset to default values. */
298
- reset: _angular_core.OutputRef<FormResetEvent>;
299
- /** Emits when form is cleared to empty state. */
300
- cleared: _angular_core.OutputRef<FormClearEvent>;
301
- /** Emits all form events for custom event handling. */
302
- events: _angular_core.OutputRef<_ng_forge_dynamic_forms.FormEvent>;
303
- /**
304
- * Emits when a non-paged form is fully initialized, or when the initially active page of a
305
- * paged form is ready for interaction. Virtualized inactive pages are not part of initial
306
- * readiness because they intentionally remain unmounted.
307
- */
308
- initialized: _angular_core.OutputRef<boolean>;
309
- /**
310
- * EXPERIMENTAL. Added alongside page preloading; the emission contract may change.
311
- *
312
- * Emits after the currently visible page and all of its visible fields render. Announced
313
- * once per visit to a page, and again when that page is returned to. Use this when work must
314
- * run after every page transition; `initialized` emits only for the initial page.
315
- */
316
- activePageInitialized: _angular_core.OutputRef<ActivePageInitializedEvent>;
317
- /** Emits when the current page changes in paged forms. */
318
- onPageChange: _angular_core.OutputRef<PageChangeEvent>;
319
- /** Emits when pager state changes (currentPageIndex, totalPages, isFirstPage, isLastPage). */
320
- onPageNavigationStateChange: _angular_core.OutputRef<PagerStateEvent>;
321
- constructor();
322
- /**
323
- * Handles native form submission triggered by:
324
- * - Pressing Enter in an input field
325
- * - Clicking a button with type="submit"
326
- * - Programmatic form.submit() calls
327
- *
328
- * @param event - The native submit event from the form element
329
- */
330
- protected onNativeSubmit(event: Event): void;
331
- /**
332
- * Whether a field should be deferred by field windowing. Containers are never
333
- * windowed: they emit `ComponentInitializedEvent`, which the form's init
334
- * tracker counts, so deferring one would stall `initialized` until it scrolls
335
- * into view. Leaf fields carry no such count, so they defer freely.
336
- */
337
- protected windowsField(field: ResolvedField, index: number): boolean;
338
- /** Class string for a windowed field's placeholder — matches the real field's grid column. */
339
- protected placeholderGridClass(field: ResolvedField): string;
340
- private setupEffects;
341
- /**
342
- * Populates FORM_STATE_DEPS with this component's input signals, then injects
343
- * FormStateManager. Must be called as a field initializer (after the input signals
344
- * are declared) so that FormStateManager reads populated deps when it is constructed.
345
- * inject() is valid here because field initializers run inside the injection context.
346
- */
347
- private connectDeps;
348
- private setupEventHandlers;
349
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicForm<any, any>, never>;
350
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicForm<any, any>, "form[dynamic-form]", never, { "config": { "alias": "dynamic-form"; "required": true; "isSignal": true; }; "formOptions": { "alias": "formOptions"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "source": { "alias": "source"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "validityChange": "validityChange"; "dirtyChange": "dirtyChange"; "submitted": "submitted"; "reset": "reset"; "cleared": "cleared"; "events": "events"; "initialized": "initialized"; "activePageInitialized": "activePageInitialized"; "onPageChange": "onPageChange"; "onPageNavigationStateChange": "onPageNavigationStateChange"; }, ["_projectedTemplates"], never, true, never>;
210
+ export declare class DynamicForm<TFields extends RegisteredFieldTypes$1[] = RegisteredFieldTypes$1[], TModel extends Record<string, unknown> = InferFormModel<TFields>> {
211
+ /** Form configuration defining the structure, validation, and behavior. */
212
+ config: import("@angular/core").InputSignal<FormConfig$1<TFields, import("@ng-forge/dynamic-forms").InferFormValue<TFields extends readonly RegisteredFieldTypes$1[] ? TFields : RegisteredFieldTypes$1[]>, Record<string, unknown>, unknown>>;
213
+ /** Runtime form options that override config options when provided. */
214
+ formOptions: import("@angular/core").InputSignal<FormOptions$1 | undefined>;
215
+ /** Form values for two-way data binding. */
216
+ value: import("@angular/core").ModelSignal<Partial<TModel> | undefined>;
217
+ /**
218
+ * How lenient the addon validator is on `config.fields[...].addons`.
219
+ * `'inline'` (default) keeps everything; `'json'` drops code-only types
220
+ * with a warning. Read at form init and on every config swap — change
221
+ * `source` AND the config to force re-validation mid-flight.
222
+ */
223
+ source: import("@angular/core").InputSignal<"json" | "inline">;
224
+ private destroyRef;
225
+ private injector;
226
+ protected environmentInjector: EnvironmentInjector;
227
+ private eventBus;
228
+ private logger;
229
+ private dispatcher;
230
+ private templateRegistry;
231
+ private placeholderRegistry;
232
+ private fieldPlaceholders;
233
+ private globalFieldWindowing;
234
+ /** All `<ng-template dfTemplate="...">` instances projected into this form. */
235
+ private readonly _projectedTemplates;
236
+ /** All `<ng-template dfPlaceholder>` instances projected into this form. */
237
+ private readonly _projectedPlaceholders;
238
+ private readonly placeholderContextFor;
239
+ private readonly stateManager;
240
+ /**
241
+ * Owns this form's DOM-id prefix and registers the instance with the root
242
+ * registry for multi-form collision detection. Injected eagerly (not lazily
243
+ * via first field map) so the live-form count is accurate from construction.
244
+ */
245
+ private readonly formIdPrefix;
246
+ /** Active DOM-id prefix — empty unless explicitly set or multiple forms are mounted. */
247
+ protected readonly idPrefix: Signal<string>;
248
+ private componentId;
249
+ /** The currently active config used for form rendering */
250
+ activeConfig: Signal<FormConfig$1<TFields, import("@ng-forge/dynamic-forms").InferFormValue<TFields extends readonly RegisteredFieldTypes$1[] ? TFields : RegisteredFieldTypes$1[]>, Record<string, unknown>, unknown> | undefined>;
251
+ /** Current render phase: 'render' = showing form, 'teardown' = hiding old components */
252
+ renderPhase: Signal<"teardown" | "render">;
253
+ /** Computed form mode detection with validation */
254
+ formModeDetection: Signal<import("@ng-forge/dynamic-forms").FormModeDetectionResult>;
255
+ /** Page field definitions for paged forms */
256
+ pageFieldDefinitions: Signal<import("@ng-forge/dynamic-forms").PageField<import("@ng-forge/dynamic-forms").PageAllowedChildren[]>[]>;
257
+ /** Effective form options (merged from config and input) */
258
+ effectiveFormOptions: Signal<{
259
+ disabled?: boolean;
260
+ idPrefix?: string;
261
+ maxDerivationIterations?: number;
262
+ submitButton?: import("@ng-forge/dynamic-forms").SubmitButtonOptions;
263
+ nextButton?: import("@ng-forge/dynamic-forms").NextButtonOptions;
264
+ initialPage?: number | import("@ng-forge/dynamic-forms").InitialPageConfig;
265
+ pagePreloadWindow?: number;
266
+ fieldWindowing?: boolean | {
267
+ eager?: number;
268
+ placeholderHeight?: string;
269
+ park?: boolean | {
270
+ margin?: string;
271
+ };
272
+ };
273
+ excludeValueIfHidden?: boolean;
274
+ excludeValueIfDisabled?: boolean;
275
+ excludeValueIfReadonly?: boolean;
276
+ validateWhenHidden?: boolean;
277
+ emitFormValueOnEvents?: boolean;
278
+ webMcp?: import("@ng-forge/dynamic-forms").WebMcpToolOptions;
279
+ }>;
280
+ /** Field signal context for injection into child components */
281
+ fieldSignalContext: Signal<import("@ng-forge/dynamic-forms/internal").FieldSignalContext<TModel>>;
282
+ /** Default values computed from field definitions */
283
+ defaultValues: WritableSignal<TModel>;
284
+ /** The Angular Signal Form instance */
285
+ form: Signal<FieldTree<TModel, string | number, "writable">>;
286
+ /** Current form values (reactive) */
287
+ formValue: Signal<TModel>;
288
+ /** Whether the form is currently valid */
289
+ valid: Signal<boolean>;
290
+ /** Whether the form is currently invalid */
291
+ invalid: Signal<boolean>;
292
+ /** Whether any form field has been modified */
293
+ dirty: Signal<boolean>;
294
+ /** Whether any form field has been touched (blurred) */
295
+ touched: Signal<boolean>;
296
+ /** Current validation errors from all fields */
297
+ errors: Signal<import("@angular/forms/signals").ValidationError.WithFieldTree[]>;
298
+ /** Whether the form is disabled (from options or form state) */
299
+ disabled: Signal<boolean>;
300
+ /** Whether the form is currently submitting */
301
+ submitting: Signal<boolean>;
302
+ /** Collects errors from async field component loading for error boundary patterns */
303
+ fieldLoadingErrors: WritableSignal<FieldLoadingError[]>;
304
+ /** Whether to render the form template */
305
+ private derivationReady;
306
+ shouldRender: Signal<boolean>;
307
+ /**
308
+ * What the experimental WebMCP layer is doing for this form.
309
+ *
310
+ * Injecting it is also what instantiates the gate (component providers are
311
+ * lazy), which is what keeps the registrar lazily loaded. Intentionally absent
312
+ * from `shouldRender`: agent visibility must never gate render.
313
+ *
314
+ * `'disabled'` unless `withExperimentalWebMcp()` is provided; `'idle'` until a
315
+ * config declares `options.webMcp`; `'active'` once its tools are registered.
316
+ * `'failed'` and `'unsupported'` are the two ways registration does not
317
+ * happen, and are worth surfacing rather than guessing at.
318
+ *
319
+ * @experimental
320
+ */
321
+ readonly webMcpStatus: Signal<import("@ng-forge/dynamic-forms").WebMcpStatus>;
322
+ /** Resolved fields ready for rendering */
323
+ protected resolvedFields: Signal<ResolvedField[]>;
324
+ /**
325
+ * Effective field-windowing config for non-paged forms. Per-form
326
+ * `FormOptions.fieldWindowing` wins over the global `withFieldWindowing()`
327
+ * default; both fall back to disabled (fully eager).
328
+ */
329
+ protected readonly fieldWindowing: Signal<FieldWindowingConfig>;
330
+ private readonly initializedComponents;
331
+ private readonly initialPageReady;
332
+ private readonly initializationReady;
333
+ /** Replayable readiness so late subscribers cannot miss hot EventBus announcements. */
334
+ initialized$: import("rxjs").Observable<boolean>;
335
+ /** Emits when form validity changes. */
336
+ validityChange: import("@angular/core").OutputRef<boolean>;
337
+ /** Emits when form dirty state changes. */
338
+ dirtyChange: import("@angular/core").OutputRef<boolean>;
339
+ /** Emits form values when submitted (via FormSubmitEvent) and form is valid. */
340
+ submitted: import("@angular/core").OutputRef<TModel>;
341
+ /** Emits when form is reset to default values. */
342
+ reset: import("@angular/core").OutputRef<FormResetEvent>;
343
+ /** Emits when form is cleared to empty state. */
344
+ cleared: import("@angular/core").OutputRef<FormClearEvent>;
345
+ /** Emits all form events for custom event handling. */
346
+ events: import("@angular/core").OutputRef<import("@ng-forge/dynamic-forms").FormEvent>;
347
+ /**
348
+ * Emits when a non-paged form is fully initialized, or when the initially active page of a
349
+ * paged form is ready for interaction. Virtualized inactive pages are not part of initial
350
+ * readiness because they intentionally remain unmounted.
351
+ */
352
+ initialized: import("@angular/core").OutputRef<boolean>;
353
+ /**
354
+ * EXPERIMENTAL. Added alongside page preloading; the emission contract may change.
355
+ *
356
+ * Emits after the currently visible page and all of its visible fields render. Announced
357
+ * once per visit to a page, and again when that page is returned to. Use this when work must
358
+ * run after every page transition; `initialized` emits only for the initial page.
359
+ */
360
+ activePageInitialized: import("@angular/core").OutputRef<ActivePageInitializedEvent>;
361
+ /** Emits when the current page changes in paged forms. */
362
+ onPageChange: import("@angular/core").OutputRef<PageChangeEvent>;
363
+ /** Emits when pager state changes (currentPageIndex, totalPages, isFirstPage, isLastPage). */
364
+ onPageNavigationStateChange: import("@angular/core").OutputRef<PagerStateEvent>;
365
+ constructor();
366
+ /**
367
+ * Handles native form submission triggered by:
368
+ * - Pressing Enter in an input field
369
+ * - Clicking a button with type="submit"
370
+ * - Programmatic form.submit() calls
371
+ *
372
+ * @param event - The native submit event from the form element
373
+ */
374
+ protected onNativeSubmit(event: Event): void;
375
+ /**
376
+ * Whether a field should be deferred by field windowing. Containers are never
377
+ * windowed: they emit `ComponentInitializedEvent`, which the form's init
378
+ * tracker counts, so deferring one would stall `initialized` until it scrolls
379
+ * into view. Leaf fields carry no such count, so they defer freely.
380
+ */
381
+ protected windowsField(field: ResolvedField, index: number): boolean;
382
+ /** Class string for a windowed field's placeholder — matches the real field's grid column. */
383
+ protected placeholderGridClass(field: ResolvedField): string;
384
+ /** Projected placeholder template for a windowed field, or null for the built-in bare div. */
385
+ protected placeholderTemplate(field: ResolvedField): TemplateRef<FieldPlaceholderContext> | null;
386
+ /** Memoised template context for a windowed field's projected placeholder. */
387
+ protected placeholderContext(field: ResolvedField): FieldPlaceholderContext;
388
+ private setupEffects;
389
+ /**
390
+ * Populates FORM_STATE_DEPS with this component's input signals, then injects
391
+ * FormStateManager. Must be called as a field initializer (after the input signals
392
+ * are declared) so that FormStateManager reads populated deps when it is constructed.
393
+ * inject() is valid here because field initializers run inside the injection context.
394
+ */
395
+ private connectDeps;
396
+ private setupEventHandlers;
397
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicForm<any, any>, never>;
398
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicForm<any, any>, "form[dynamic-form]", never, {
399
+ "config": {
400
+ "alias": "dynamic-form";
401
+ "required": true;
402
+ "isSignal": true;
403
+ };
404
+ "formOptions": {
405
+ "alias": "formOptions";
406
+ "required": false;
407
+ "isSignal": true;
408
+ };
409
+ "value": {
410
+ "alias": "value";
411
+ "required": false;
412
+ "isSignal": true;
413
+ };
414
+ "source": {
415
+ "alias": "source";
416
+ "required": false;
417
+ "isSignal": true;
418
+ };
419
+ }, {
420
+ "value": "valueChange";
421
+ "validityChange": "validityChange";
422
+ "dirtyChange": "dirtyChange";
423
+ "submitted": "submitted";
424
+ "reset": "reset";
425
+ "cleared": "cleared";
426
+ "events": "events";
427
+ "initialized": "initialized";
428
+ "activePageInitialized": "activePageInitialized";
429
+ "onPageChange": "onPageChange";
430
+ "onPageNavigationStateChange": "onPageNavigationStateChange";
431
+ }, ["_projectedTemplates", "_projectedPlaceholders"], never, true, never>;
351
432
  }
352
-
353
433
  /**
354
434
  * Injectable service for dispatching events into a DynamicForm from outside the form.
355
435
  *
@@ -391,88 +471,81 @@ declare class DynamicForm<TFields extends RegisteredFieldTypes[] = RegisteredFie
391
471
  * dispatcher.dispatch(new FormResetEvent());
392
472
  * ```
393
473
  */
394
- declare class EventDispatcher {
395
- private bus;
396
- /**
397
- * Dispatches a form event into the connected DynamicForm's event bus.
398
- * No-op if no form is currently connected.
399
- *
400
- * @param event - A FormEvent instance. Use the `arrayEvent()` builder for array operations.
401
- */
402
- dispatch(event: FormEvent): void;
403
- /** @internal - Called by DynamicForm on init */
404
- connect(bus: EventBus): void;
405
- /** @internal - Called by DynamicForm on destroy */
406
- disconnect(): void;
407
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<EventDispatcher, never>;
408
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<EventDispatcher>;
474
+ export declare class EventDispatcher {
475
+ private bus;
476
+ /**
477
+ * Dispatches a form event into the connected DynamicForm's event bus.
478
+ * No-op if no form is currently connected.
479
+ *
480
+ * @param event - A FormEvent instance. Use the `arrayEvent()` builder for array operations.
481
+ */
482
+ dispatch(event: FormEvent$1): void;
483
+ /** @internal - Called by DynamicForm on init */
484
+ connect(bus: EventBus): void;
485
+ /** @internal - Called by DynamicForm on destroy */
486
+ disconnect(): void;
487
+ static ɵfac: i0.ɵɵFactoryDeclaration<EventDispatcher, never>;
488
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
409
489
  }
410
-
411
490
  /**
412
491
  * Base interface for dynamic form features.
413
492
  * Features are configuration options that can be passed to provideDynamicForm
414
493
  * alongside field type definitions.
415
494
  */
416
495
  interface DynamicFormFeature<TKind extends string = string> {
417
- /** Internal marker to identify this as a feature, not a field type */
418
- ɵkind: TKind;
419
- /** Providers to register for this feature */
420
- ɵproviders: Provider[];
496
+ /** Internal marker to identify this as a feature, not a field type */
497
+ ɵkind: TKind;
498
+ /** Providers to register for this feature */
499
+ ɵproviders: Provider[];
421
500
  }
422
-
423
501
  /** User-facing wrapper registration shape used with `createWrappers(...)`. */
424
502
  interface WrapperRegistration<TName extends string = string, TConfig = unknown> {
425
- /** Unique identifier for the wrapper type */
426
- readonly wrapperName: TName;
427
- /** Lazy-loader for the wrapper component */
428
- readonly loadComponent: LazyComponentLoader;
429
- /** Field types this wrapper auto-applies to (merged lowest-priority during wrapper resolution) */
430
- readonly types?: readonly string[];
431
- /**
432
- * Type carrier only — runtime value is always `undefined`.
433
- * Use `wrapperProps<YourConfig>()` to thread the config type.
434
- */
435
- readonly props?: TConfig;
503
+ /** Unique identifier for the wrapper type */
504
+ readonly wrapperName: TName;
505
+ /** Lazy-loader for the wrapper component */
506
+ readonly loadComponent: LazyComponentLoader;
507
+ /** Field types this wrapper auto-applies to (merged lowest-priority during wrapper resolution) */
508
+ readonly types?: readonly string[];
509
+ /**
510
+ * Type carrier only — runtime value is always `undefined`.
511
+ * Use `wrapperProps<YourConfig>()` to thread the config type.
512
+ */
513
+ readonly props?: TConfig;
436
514
  }
437
515
  /** Branded bundle returned by `createWrappers(...)`. */
438
516
  interface WrappersBundle<T extends readonly WrapperRegistration[] = readonly WrapperRegistration[]> {
439
- readonly ɵkind: 'wrappers';
440
- readonly ɵregistrations: T;
441
- readonly ɵdefinitions: readonly WrapperTypeDefinition[];
517
+ readonly ɵkind: 'wrappers';
518
+ readonly ɵregistrations: T;
519
+ readonly ɵdefinitions: readonly WrapperTypeDefinition$1[];
442
520
  }
443
521
  /**
444
522
  * Bundle wrapper registrations into a single object that can be passed to
445
523
  * `provideDynamicForm(...)`.
446
524
  */
447
- declare function createWrappers<const T extends readonly WrapperRegistration[]>(...registrations: T): WrappersBundle<T>;
525
+ export declare function createWrappers<const T extends readonly WrapperRegistration[]>(...registrations: T): WrappersBundle<T>;
448
526
  /** Type guard for a `WrappersBundle`. */
449
- declare function isWrappersBundle(value: unknown): value is WrappersBundle;
527
+ export declare function isWrappersBundle(value: unknown): value is WrappersBundle;
450
528
  /** Derive the `FieldRegistryWrappers` augmentation shape from a wrapper bundle. */
451
- type InferWrapperRegistry<T> = T extends WrappersBundle<infer R> ? {
452
- [Reg in R[number] as Reg['wrapperName']]: Reg extends {
453
- props: infer P;
454
- } ? Exclude<P, undefined> : {
455
- readonly type: Reg['wrapperName'];
456
- };
457
- } : never;
458
-
529
+ type InferWrapperRegistry<T> = T extends WrappersBundle<infer R> ? { [Reg in R[number] as Reg['wrapperName']]: Reg extends {
530
+ props: infer P;
531
+ } ? Exclude<P, undefined> : {
532
+ readonly type: Reg['wrapperName'];
533
+ }; } : never;
459
534
  /** Extract FieldDef type from FieldTypeDefinition */
460
535
  type ExtractFieldDef<T> = T extends FieldTypeDefinition<infer F> ? F : never;
461
536
  /** Union of all FieldDef types from provided field types */
462
537
  type FieldDefUnion<T extends FieldTypeDefinition[]> = ExtractFieldDef<T[number]>;
463
538
  /** Infer form value type from field definitions using the real inference type. */
464
- type InferFormValue<TFieldDefs extends FieldDef<unknown>[]> = InferFormValue$1<TFieldDefs>;
539
+ type InferFormValue$2<TFieldDefs extends FieldDef$1<unknown>[]> = InferFormValue$1<TFieldDefs>;
465
540
  /** Provider result with type inference */
466
541
  type ProvideDynamicFormResult<T extends FieldTypeDefinition[]> = EnvironmentProviders & {
467
- __fieldDefs?: FieldDefUnion<T>;
468
- __formValue?: InferFormValue<FieldDefUnion<T>[]>;
542
+ __fieldDefs?: FieldDefUnion<T>;
543
+ __formValue?: InferFormValue$2<FieldDefUnion<T>[]>;
469
544
  };
470
545
  /** Union type for items that can be passed to provideDynamicForm */
471
- type FieldTypeOrFeature = FieldTypeDefinition | WrapperTypeDefinition | WrappersBundle | DynamicFormFeature;
546
+ type FieldTypeOrFeature = FieldTypeDefinition | WrapperTypeDefinition$1 | WrappersBundle | DynamicFormFeature;
472
547
  /** Extract only FieldTypeDefinition items from a tuple type */
473
- type ExtractFieldTypes<T extends FieldTypeOrFeature[]> = {
474
- [K in keyof T]: T[K] extends FieldTypeDefinition ? T[K] : never;
475
- }[number] extends infer U ? U extends FieldTypeDefinition ? U[] : never : never;
548
+ type ExtractFieldTypes<T extends FieldTypeOrFeature[]> = { [K in keyof T]: T[K] extends FieldTypeDefinition ? T[K] : never; }[number] extends (infer U) ? U extends FieldTypeDefinition ? U[] : never : never;
476
549
  /**
477
550
  * Provider function to configure the dynamic form system with field types and options.
478
551
  *
@@ -480,33 +553,31 @@ type ExtractFieldTypes<T extends FieldTypeOrFeature[]> = {
480
553
  * @returns Environment providers for dependency injection with type inference
481
554
  * @typeParam T - Array of field type definitions for type inference
482
555
  */
483
- declare function provideDynamicForm<const T extends FieldTypeOrFeature[]>(...items: T): ProvideDynamicFormResult<ExtractFieldTypes<T> extends FieldTypeDefinition[] ? ExtractFieldTypes<T> : FieldTypeDefinition[]>;
556
+ export declare function provideDynamicForm<const T extends FieldTypeOrFeature[]>(...items: T): ProvideDynamicFormResult<ExtractFieldTypes<T> extends FieldTypeDefinition[] ? ExtractFieldTypes<T> : FieldTypeDefinition[]>;
484
557
  /** Extract FieldDef types from provider result */
485
558
  type ExtractFieldDefs<T> = T extends {
486
- __fieldDefs?: infer F;
559
+ __fieldDefs?: infer F;
487
560
  } ? F : never;
488
561
  /** Extract form value type from provider result */
489
562
  type ExtractFormValue<T> = T extends {
490
- __formValue?: infer V;
563
+ __formValue?: infer V;
491
564
  } ? V : never;
492
-
493
565
  /** Built-in field types provided by the dynamic form library. */
494
- declare const BUILT_IN_FIELDS: FieldTypeDefinition[];
495
-
566
+ export declare const BUILT_IN_FIELDS: FieldTypeDefinition[];
496
567
  /** Configuration options for the logger feature. */
497
568
  interface LoggerConfigOptions {
498
- /**
499
- * Whether general logging is enabled.
500
- *
501
- * @default true
502
- */
503
- enabled?: boolean;
504
- /**
505
- * Derivation logging level.
506
- *
507
- * @default 'none'
508
- */
509
- derivations?: DerivationLogLevel;
569
+ /**
570
+ * Whether general logging is enabled.
571
+ *
572
+ * @default true
573
+ */
574
+ enabled?: boolean;
575
+ /**
576
+ * Derivation logging level.
577
+ *
578
+ * @default 'none'
579
+ */
580
+ derivations?: DerivationLogLevel;
510
581
  }
511
582
  /**
512
583
  * Configure logging for dynamic forms.
@@ -514,17 +585,15 @@ interface LoggerConfigOptions {
514
585
  * @param config - Boolean to enable/disable logging, a function returning boolean, or a config object
515
586
  * @returns A DynamicFormFeature that configures logging
516
587
  */
517
- declare function withLoggerConfig(config?: boolean | (() => boolean) | LoggerConfigOptions): DynamicFormFeature<'logger'>;
518
-
588
+ export declare function withLoggerConfig(config?: boolean | (() => boolean) | LoggerConfigOptions): DynamicFormFeature<'logger'>;
519
589
  /** Console-based logger implementation. */
520
- declare class ConsoleLogger implements Logger {
521
- private readonly prefix;
522
- debug(message: string, ...args: unknown[]): void;
523
- info(message: string, ...args: unknown[]): void;
524
- warn(message: string, ...args: unknown[]): void;
525
- error(message: string, ...args: unknown[]): void;
590
+ export declare class ConsoleLogger implements Logger$1 {
591
+ private readonly prefix;
592
+ debug(message: string, ...args: unknown[]): void;
593
+ info(message: string, ...args: unknown[]): void;
594
+ warn(message: string, ...args: unknown[]): void;
595
+ error(message: string, ...args: unknown[]): void;
526
596
  }
527
-
528
597
  /**
529
598
  * Enables automatic form value attachment to all events dispatched through the EventBus.
530
599
  *
@@ -537,8 +606,7 @@ declare class ConsoleLogger implements Logger {
537
606
  * 5. No global feature - Disabled globally (default)
538
607
  * @returns A DynamicFormFeature that enables form value attachment to events
539
608
  */
540
- declare function withEventFormValue(): DynamicFormFeature<'event-form-value'>;
541
-
609
+ export declare function withEventFormValue(): DynamicFormFeature<'event-form-value'>;
542
610
  /**
543
611
  * Configures global value exclusion defaults for form submission output.
544
612
  *
@@ -551,8 +619,7 @@ declare function withEventFormValue(): DynamicFormFeature<'event-form-value'>;
551
619
  * @param config - Partial override of exclusion rules. Unspecified properties default to `true`.
552
620
  * @returns A DynamicFormFeature that configures value exclusion defaults
553
621
  */
554
- declare function withValueExclusionDefaults(config?: Partial<ValueExclusionConfig>): DynamicFormFeature<'value-exclusion'>;
555
-
622
+ export declare function withValueExclusionDefaults(config?: Partial<ValueExclusionConfig$1>): DynamicFormFeature<'value-exclusion'>;
556
623
  /**
557
624
  * Configures the global page preload window for paged forms — how many pages on
558
625
  * each side of the current page are mounted during browser idle time.
@@ -582,14 +649,12 @@ declare function withValueExclusionDefaults(config?: Partial<ValueExclusionConfi
582
649
  * provideDynamicForm(...withMaterialFields(), withPagePreload(2));
583
650
  * ```
584
651
  */
585
- declare function withPagePreload(window: number): DynamicFormFeature<'page-preload'>;
586
-
652
+ export declare function withPagePreload(window: number): DynamicFormFeature<'page-preload'>;
587
653
  /** Per-form override shape for parking. `false` opts out; an object tunes the margin. */
588
654
  type FieldParkingOption = boolean | {
589
- /** IntersectionObserver root margin. Supports one to four `px` or `%` values. */
590
- margin?: string;
655
+ /** IntersectionObserver root margin. Supports one to four `px` or `%` values. */
656
+ margin?: string;
591
657
  };
592
-
593
658
  /**
594
659
  * Configures global progressive field mounting ("field windowing") for large
595
660
  * flat (single-page) forms.
@@ -628,12 +693,11 @@ type FieldParkingOption = boolean | {
628
693
  * provideDynamicForm(...withMaterialFields(), withFieldWindowing({ eager: 20 }));
629
694
  * ```
630
695
  */
631
- declare function withFieldWindowing(config?: {
632
- eager?: number;
633
- placeholderHeight?: string;
634
- park?: FieldParkingOption;
696
+ export declare function withFieldWindowing(config?: {
697
+ eager?: number;
698
+ placeholderHeight?: string;
699
+ park?: FieldParkingOption;
635
700
  }): DynamicFormFeature<'field-windowing'>;
636
-
637
701
  /**
638
702
  * Enables WebMCP tool registration for forms that declare `options.webMcp`.
639
703
  *
@@ -676,8 +740,7 @@ declare function withFieldWindowing(config?: {
676
740
  * } as const satisfies FormConfig;
677
741
  * ```
678
742
  */
679
- declare function withExperimentalWebMcp(): DynamicFormFeature<'web-mcp'>;
680
-
743
+ export declare function withExperimentalWebMcp(): DynamicFormFeature<'web-mcp'>;
681
744
  /**
682
745
  * What the WebMCP layer is currently doing for this form. Reported by
683
746
  * `DynamicForm.webMcpStatus()`; `'active'` is the only state in which an agent
@@ -685,20 +748,19 @@ declare function withExperimentalWebMcp(): DynamicFormFeature<'web-mcp'>;
685
748
  *
686
749
  * @experimental
687
750
  */
688
- type WebMcpStatus =
751
+ type WebMcpStatus =
689
752
  /** `withExperimentalWebMcp()` is not provided, or this is the server. */
690
- 'disabled'
753
+ 'disabled' |
691
754
  /** Enabled, but the current config does not declare `options.webMcp`. */
692
- | 'idle'
755
+ 'idle' |
693
756
  /** Loading the registrar or awaiting `registerTool()`. */
694
- | 'registering'
757
+ 'registering' |
695
758
  /** Tools are registered against the browser's model context. */
696
- | 'active'
759
+ 'active' |
697
760
  /** The browser exposes no model context, so there is nothing to register against. */
698
- | 'unsupported'
761
+ 'unsupported' |
699
762
  /** Registration was attempted and rejected. See the console for the reason. */
700
- | 'failed';
701
-
763
+ 'failed';
702
764
  /**
703
765
  * How a submission ended.
704
766
  *
@@ -713,36 +775,36 @@ type WebMcpStatus =
713
775
  * @experimental
714
776
  */
715
777
  type SubmissionOutcome = {
716
- readonly status: 'success';
717
- }
778
+ readonly status: 'success';
779
+ } |
718
780
  /** No `submission.action` is configured; the `(submitted)` output received the value. */
719
- | {
720
- readonly status: 'dispatched';
721
- }
781
+ {
782
+ readonly status: 'dispatched';
783
+ } |
722
784
  /** The form was invalid, so nothing was submitted. */
723
- | {
724
- readonly status: 'validation-failed';
725
- }
785
+ {
786
+ readonly status: 'validation-failed';
787
+ } |
726
788
  /** Async validators had not resolved, so submission was skipped. */
727
- | {
728
- readonly status: 'pending-validation';
729
- }
789
+ {
790
+ readonly status: 'pending-validation';
791
+ } |
730
792
  /** The action ran and came back with server-side validation errors. */
731
- | {
732
- readonly status: 'server-errors';
733
- }
793
+ {
794
+ readonly status: 'server-errors';
795
+ } |
734
796
  /** The action threw or rejected. */
735
- | {
736
- readonly status: 'action-failed';
737
- readonly error: unknown;
738
- }
797
+ {
798
+ readonly status: 'action-failed';
799
+ readonly error: unknown;
800
+ } |
739
801
  /** Another submission was already in flight and this one was dropped. */
740
- | {
741
- readonly status: 'busy';
742
- }
802
+ {
803
+ readonly status: 'busy';
804
+ } |
743
805
  /** The form went away before the submission settled. */
744
- | {
745
- readonly status: 'cancelled';
806
+ {
807
+ readonly status: 'cancelled';
746
808
  };
747
809
  /**
748
810
  * The reply channel a caller attaches to `FormSubmitEvent` when it needs to know
@@ -757,12 +819,11 @@ type SubmissionOutcome = {
757
819
  * @experimental
758
820
  */
759
821
  interface SubmissionReply {
760
- /** Marks the submission as taken by the pipeline. */
761
- accept(): void;
762
- /** Reports the final outcome. The first call wins; later calls are ignored. */
763
- settle(outcome: SubmissionOutcome): void;
822
+ /** Marks the submission as taken by the pipeline. */
823
+ accept(): void;
824
+ /** Reports the final outcome. The first call wins; later calls are ignored. */
825
+ settle(outcome: SubmissionOutcome): void;
764
826
  }
765
-
766
827
  /**
767
828
  * Configures global validation execution defaults — when validators should run
768
829
  * relative to a field's reactive state.
@@ -777,8 +838,7 @@ interface SubmissionReply {
777
838
  * @param config - Partial override. Unspecified properties keep their defaults.
778
839
  * @returns A `DynamicFormFeature` that configures validation execution defaults.
779
840
  */
780
- declare function withValidationExecutionDefaults(config?: Partial<ValidationExecutionConfig>): DynamicFormFeature<'validation-execution'>;
781
-
841
+ export declare function withValidationExecutionDefaults(config?: Partial<ValidationExecutionConfig$1>): DynamicFormFeature<'validation-execution'>;
782
842
  /**
783
843
  * Opt into Angular Signal Forms' legacy `.ng-touched` / `.ng-invalid` /
784
844
  * `.ng-dirty` / `.ng-pristine` / `.ng-untouched` / `.ng-pending` /
@@ -786,80 +846,112 @@ declare function withValidationExecutionDefaults(config?: Partial<ValidationExec
786
846
  *
787
847
  * @returns A DynamicFormFeature that enables the legacy `ng-*` class strategy
788
848
  */
789
- declare function withLegacyStatusClasses(): DynamicFormFeature<'legacy-status-classes'>;
790
-
849
+ export declare function withLegacyStatusClasses(): DynamicFormFeature<'legacy-status-classes'>;
791
850
  /** Zero-cost type carrier used in wrapper registrations. */
792
- declare function wrapperProps<T>(): T;
793
-
851
+ export declare function wrapperProps<T>(): T;
794
852
  /**
795
853
  * Marks an `<ng-template>` projected into `<df-dynamic-form>` content as
796
854
  * available to template addons by name.
797
855
  */
798
- declare class DfTemplate {
799
- /** Name this template registers under — referenced from `TemplateAddon.templateKey`. */
800
- readonly dfTemplate: _angular_core.InputSignal<string>;
801
- /** The wrapped template, captured for registration and `NgTemplateOutlet` rendering. */
802
- readonly templateRef: TemplateRef<unknown>;
803
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DfTemplate, never>;
804
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DfTemplate, "ng-template[dfTemplate]", ["dfTemplate"], { "dfTemplate": { "alias": "dfTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
856
+ export declare class DfTemplate {
857
+ /** Name this template registers under — referenced from `TemplateAddon.templateKey`. */
858
+ readonly dfTemplate: import("@angular/core").InputSignal<string>;
859
+ /** The wrapped template, captured for registration and `NgTemplateOutlet` rendering. */
860
+ readonly templateRef: TemplateRef<unknown>;
861
+ static ɵfac: i0.ɵɵFactoryDeclaration<DfTemplate, never>;
862
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DfTemplate, "ng-template[dfTemplate]", ["dfTemplate"], {
863
+ "dfTemplate": {
864
+ "alias": "dfTemplate";
865
+ "required": true;
866
+ "isSignal": true;
867
+ };
868
+ }, {}, never, never, true, never>;
805
869
  }
806
-
807
870
  /** Renderer for the universal `text` addon type. */
808
- declare class TextAddonComponent {
809
- readonly addon: _angular_core.InputSignal<TextAddon>;
810
- /** Accepted for contract uniformity — `NgComponentOutlet` setInput is strict; every kind must declare it. */
811
- readonly fieldInputs: _angular_core.InputSignal<WrapperFieldInputs | undefined>;
812
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextAddonComponent, never>;
813
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextAddonComponent, "df-text-addon", never, { "addon": { "alias": "addon"; "required": true; "isSignal": true; }; "fieldInputs": { "alias": "fieldInputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
871
+ export declare class TextAddonComponent {
872
+ readonly addon: import("@angular/core").InputSignal<TextAddon$1>;
873
+ /** Accepted for contract uniformity — `NgComponentOutlet` setInput is strict; every kind must declare it. */
874
+ readonly fieldInputs: import("@angular/core").InputSignal<WrapperFieldInputs | undefined>;
875
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextAddonComponent, never>;
876
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextAddonComponent, "df-text-addon", never, {
877
+ "addon": {
878
+ "alias": "addon";
879
+ "required": true;
880
+ "isSignal": true;
881
+ };
882
+ "fieldInputs": {
883
+ "alias": "fieldInputs";
884
+ "required": false;
885
+ "isSignal": true;
886
+ };
887
+ }, {}, never, never, true, never>;
814
888
  }
815
-
816
889
  /** Renderer for the universal `template` addon type. */
817
- declare class TemplateAddonComponent {
818
- private readonly templates;
819
- private readonly logger;
820
- readonly addon: _angular_core.InputSignal<TemplateAddon>;
821
- /** Forwarded by `df-addon-slot`; surfaced to the template as its implicit `$implicit` context. */
822
- readonly fieldInputs: _angular_core.InputSignal<WrapperFieldInputs | undefined>;
823
- protected readonly template: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
824
- /** Implicit context payload — template authors bind via `let-fi`. */
825
- protected readonly outletContext: _angular_core.Signal<{
826
- $implicit: WrapperFieldInputs | undefined;
827
- }>;
828
- constructor();
829
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TemplateAddonComponent, never>;
830
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TemplateAddonComponent, "df-template-addon", never, { "addon": { "alias": "addon"; "required": true; "isSignal": true; }; "fieldInputs": { "alias": "fieldInputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
890
+ export declare class TemplateAddonComponent {
891
+ private readonly templates;
892
+ private readonly logger;
893
+ readonly addon: import("@angular/core").InputSignal<TemplateAddon$1>;
894
+ /** Forwarded by `df-addon-slot`; surfaced to the template as its implicit `$implicit` context. */
895
+ readonly fieldInputs: import("@angular/core").InputSignal<WrapperFieldInputs | undefined>;
896
+ protected readonly template: import("@angular/core").Signal<import("@angular/core").TemplateRef<unknown> | null>;
897
+ /** Implicit context payload — template authors bind via `let-fi`. */
898
+ protected readonly outletContext: import("@angular/core").Signal<{
899
+ $implicit: WrapperFieldInputs | undefined;
900
+ }>;
901
+ constructor();
902
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplateAddonComponent, never>;
903
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateAddonComponent, "df-template-addon", never, {
904
+ "addon": {
905
+ "alias": "addon";
906
+ "required": true;
907
+ "isSignal": true;
908
+ };
909
+ "fieldInputs": {
910
+ "alias": "fieldInputs";
911
+ "required": false;
912
+ "isSignal": true;
913
+ };
914
+ }, {}, never, never, true, never>;
831
915
  }
832
-
833
916
  /**
834
917
  * Renderer for the universal `component` addon type.
835
918
  *
836
919
  * @codeOnly The `component` loader is a function; this kind is dropped in
837
920
  * lenient validation when the config originated from JSON.
838
921
  */
839
- declare class ComponentAddonComponent {
840
- private readonly logger;
841
- readonly addon: _angular_core.InputSignal<ComponentAddon>;
842
- /** Accepted for contract uniformity — `NgComponentOutlet` setInput is strict; every kind must declare it. */
843
- readonly fieldInputs: _angular_core.InputSignal<WrapperFieldInputs | undefined>;
844
- protected readonly inputs: _angular_core.Signal<Record<string, unknown>>;
845
- /**
846
- * Latest async-loaded `{ addon, component }` pair. Tagging the result with
847
- * its source addon lets `resolvedComponent` filter stale loads structurally
848
- * — same kind-tagging pattern `DfAddonSlot` uses. When `addon` swaps
849
- * mid-load, the prior loader still completes and writes here, but the
850
- * computed ignores it because the recorded addon no longer matches the
851
- * current one.
852
- */
853
- private readonly asyncLoaded;
854
- protected readonly resolvedComponent: _angular_core.Signal<Type<unknown> | undefined>;
855
- constructor();
856
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComponentAddonComponent, never>;
857
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ComponentAddonComponent, "df-component-addon", never, { "addon": { "alias": "addon"; "required": true; "isSignal": true; }; "fieldInputs": { "alias": "fieldInputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
922
+ export declare class ComponentAddonComponent {
923
+ private readonly logger;
924
+ readonly addon: import("@angular/core").InputSignal<ComponentAddon$1>;
925
+ /** Accepted for contract uniformity — `NgComponentOutlet` setInput is strict; every kind must declare it. */
926
+ readonly fieldInputs: import("@angular/core").InputSignal<WrapperFieldInputs | undefined>;
927
+ protected readonly inputs: import("@angular/core").Signal<Record<string, unknown>>;
928
+ /**
929
+ * Latest async-loaded `{ addon, component }` pair. Tagging the result with
930
+ * its source addon lets `resolvedComponent` filter stale loads structurally
931
+ * — same kind-tagging pattern `DfAddonSlot` uses. When `addon` swaps
932
+ * mid-load, the prior loader still completes and writes here, but the
933
+ * computed ignores it because the recorded addon no longer matches the
934
+ * current one.
935
+ */
936
+ private readonly asyncLoaded;
937
+ protected readonly resolvedComponent: import("@angular/core").Signal<Type<unknown> | undefined>;
938
+ constructor();
939
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComponentAddonComponent, never>;
940
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentAddonComponent, "df-component-addon", never, {
941
+ "addon": {
942
+ "alias": "addon";
943
+ "required": true;
944
+ "isSignal": true;
945
+ };
946
+ "fieldInputs": {
947
+ "alias": "fieldInputs";
948
+ "required": false;
949
+ "isSignal": true;
950
+ };
951
+ }, {}, never, never, true, never>;
858
952
  }
859
-
860
953
  /** Register a custom addon type with the form. */
861
- declare function withCustomAddon<T extends BaseAddon>(definition: AddonTypeDefinition<T>): DynamicFormFeature<'addons'>;
862
-
954
+ export declare function withCustomAddon<T extends BaseAddon$1>(definition: AddonTypeDefinition$1<T>): DynamicFormFeature<'addons'>;
863
955
  /**
864
956
  * Typed feature returned by {@link withAddonActions}. Carries the
865
957
  * registered handler keys as a phantom type so consumers can derive the
@@ -867,67 +959,65 @@ declare function withCustomAddon<T extends BaseAddon>(definition: AddonTypeDefin
867
959
  * every key.
868
960
  */
869
961
  type AddonActionsFeature<K extends string = string> = DynamicFormFeature<'addon-actions'> & {
870
- /** @internal Phantom field carrying the registered keys; never read at runtime. */
871
- readonly __handlerKeys?: K;
962
+ /** @internal Phantom field carrying the registered keys; never read at runtime. */
963
+ readonly __handlerKeys?: K;
872
964
  };
873
965
  /** Register named action handlers reachable via JSON-driven addon configs. */
874
- declare function withAddonActions<const H extends Record<string, AddonActionHandler>>(handlers: H): AddonActionsFeature<keyof H & string>;
875
-
966
+ export declare function withAddonActions<const H extends Record<string, AddonActionHandler>>(handlers: H): AddonActionsFeature<keyof H & string>;
876
967
  /** Reason an addon was dropped during validation. */
877
968
  type AddonWarning = {
878
- type: 'unknown-field-type';
879
- fieldKey: string;
880
- fieldType: string;
969
+ type: 'unknown-field-type';
970
+ fieldKey: string;
971
+ fieldType: string;
881
972
  } | {
882
- type: 'field-type-no-addon-support';
883
- fieldKey: string;
884
- fieldType: string;
973
+ type: 'field-type-no-addon-support';
974
+ fieldKey: string;
975
+ fieldType: string;
885
976
  } | {
886
- type: 'unknown-slot';
887
- fieldKey: string;
888
- fieldType: string;
889
- slot: string;
890
- allowedSlots: readonly string[];
977
+ type: 'unknown-slot';
978
+ fieldKey: string;
979
+ fieldType: string;
980
+ slot: string;
981
+ allowedSlots: readonly string[];
891
982
  } | {
892
- type: 'unknown-type';
893
- fieldKey: string;
894
- addonType: string;
895
- registeredTypes: readonly string[];
983
+ type: 'unknown-type';
984
+ fieldKey: string;
985
+ addonType: string;
986
+ registeredTypes: readonly string[];
896
987
  } | {
897
- type: 'type-not-allowed';
898
- fieldKey: string;
899
- fieldType: string;
900
- addonType: string;
901
- allowedTypes: readonly string[];
988
+ type: 'type-not-allowed';
989
+ fieldKey: string;
990
+ fieldType: string;
991
+ addonType: string;
992
+ allowedTypes: readonly string[];
902
993
  } | {
903
- type: 'shape-violation';
904
- fieldKey: string;
905
- addonType: string;
906
- reason: string;
994
+ type: 'shape-violation';
995
+ fieldKey: string;
996
+ addonType: string;
997
+ reason: string;
907
998
  } | {
908
- type: 'code-only-type-in-json';
909
- fieldKey: string;
910
- addonType: string;
999
+ type: 'code-only-type-in-json';
1000
+ fieldKey: string;
1001
+ addonType: string;
911
1002
  } | {
912
- type: 'code-only-action-in-json';
913
- fieldKey: string;
914
- reason: string;
1003
+ type: 'code-only-action-in-json';
1004
+ fieldKey: string;
1005
+ reason: string;
915
1006
  };
916
-
917
1007
  /** Options accepted by {@link sanitizeFormConfig}. */
918
1008
  interface SanitizeFormConfigOptions {
919
- /**
920
- * Whether the config originated from JSON (server-driven) or inline
921
- * TypeScript code.
922
- */
923
- source?: 'json' | 'inline';
1009
+ /**
1010
+ * Whether the config originated from JSON (server-driven) or inline
1011
+ * TypeScript code.
1012
+ */
1013
+ source?: 'json' | 'inline';
924
1014
  }
925
1015
  /** Result of a `sanitizeFormConfig` call. */
926
1016
  interface SanitizedFormConfig {
927
- /** Sanitized config — invalid addons stripped from the field tree. */
928
- sanitized: FormConfig;
929
- /** Structured list of every addon that was dropped, and why. */
930
- warnings: readonly AddonWarning[];
1017
+ /** Sanitized config — invalid addons stripped from the field tree. */
1018
+ sanitized: FormConfig$1;
1019
+ /** Structured list of every addon that was dropped, and why. */
1020
+ warnings: readonly AddonWarning[];
931
1021
  }
932
1022
  /**
933
1023
  * Walk a `FormConfig`, validate every field's addons against the active
@@ -946,19 +1036,18 @@ interface SanitizedFormConfig {
946
1036
  * }
947
1037
  * ```
948
1038
  */
949
- declare function sanitizeFormConfig(config: FormConfig, options?: SanitizeFormConfigOptions): SanitizedFormConfig;
950
-
1039
+ export declare function sanitizeFormConfig(config: FormConfig$1, options?: SanitizeFormConfigOptions): SanitizedFormConfig;
951
1040
  /** Per-dispatch overrides for a page jump. */
952
1041
  interface PageNavigationOptions {
953
- /**
954
- * Whether to apply the forward-jump validity gate.
955
- *
956
- * Set `false` to land on the target regardless of earlier pages, which is what
957
- * restoring a saved session wants. Bounds and hidden-page checks still apply.
958
- *
959
- * @default true
960
- */
961
- validate?: boolean;
1042
+ /**
1043
+ * Whether to apply the forward-jump validity gate.
1044
+ *
1045
+ * Set `false` to land on the target regardless of earlier pages, which is what
1046
+ * restoring a saved session wants. Bounds and hidden-page checks still apply.
1047
+ *
1048
+ * @default true
1049
+ */
1050
+ validate?: boolean;
962
1051
  }
963
1052
  /**
964
1053
  * Event dispatched to move a paged form to a specific page.
@@ -968,19 +1057,18 @@ interface PageNavigationOptions {
968
1057
  * if one is invalid, navigation stops on the first invalid page. Pass
969
1058
  * `{ validate: false }` to skip that gate and land on the target.
970
1059
  */
971
- declare class GoToPageEvent implements FormEvent {
972
- /** The target page index (0-based) */
973
- readonly pageIndex: number;
974
- /** Per-dispatch overrides; omit for the default gated behavior. */
975
- readonly options?: PageNavigationOptions | undefined;
976
- readonly type: "go-to-page";
977
- constructor(
978
- /** The target page index (0-based) */
979
- pageIndex: number,
980
- /** Per-dispatch overrides; omit for the default gated behavior. */
981
- options?: PageNavigationOptions | undefined);
1060
+ export declare class GoToPageEvent implements FormEvent$1 {
1061
+ /** The target page index (0-based) */
1062
+ readonly pageIndex: number;
1063
+ /** Per-dispatch overrides; omit for the default gated behavior. */
1064
+ readonly options?: PageNavigationOptions | undefined;
1065
+ readonly type: "go-to-page";
1066
+ constructor(
1067
+ /** The target page index (0-based) */
1068
+ pageIndex: number,
1069
+ /** Per-dispatch overrides; omit for the default gated behavior. */
1070
+ options?: PageNavigationOptions | undefined);
982
1071
  }
983
-
984
1072
  /**
985
1073
  * Event dispatched to submit the form (the action behind a `submit` button).
986
1074
  *
@@ -988,249 +1076,235 @@ declare class GoToPageEvent implements FormEvent {
988
1076
  * {@link SubmissionReply}; the submission handler reports back through it. A
989
1077
  * button click passes nothing and stays fire-and-forget, as before.
990
1078
  */
991
- declare class FormSubmitEvent implements FormEvent {
992
- readonly reply?: SubmissionReply | undefined;
993
- readonly type: "submit";
994
- constructor(reply?: SubmissionReply | undefined);
1079
+ export declare class FormSubmitEvent implements FormEvent$1 {
1080
+ readonly reply?: SubmissionReply | undefined;
1081
+ readonly type: "submit";
1082
+ constructor(reply?: SubmissionReply | undefined);
995
1083
  }
996
-
997
1084
  /** Event dispatched to advance a paged form to the next page. */
998
- declare class NextPageEvent implements FormEvent {
999
- readonly type: "next-page";
1085
+ export declare class NextPageEvent implements FormEvent$1 {
1086
+ readonly type: "next-page";
1000
1087
  }
1001
-
1002
1088
  /** Event dispatched to return a paged form to the previous page. */
1003
- declare class PreviousPageEvent implements FormEvent {
1004
- readonly type: "previous-page";
1089
+ export declare class PreviousPageEvent implements FormEvent$1 {
1090
+ readonly type: "previous-page";
1005
1091
  }
1006
-
1007
1092
  /**
1008
1093
  * Template type for array items used in events.
1009
1094
  * Canonical definition lives in {@link ArrayItemDefinition} — this alias
1010
1095
  * preserves the events-specific naming convention.
1011
1096
  */
1012
1097
  type ArrayItemDefinitionTemplate = ArrayItemDefinition;
1013
-
1014
1098
  /**
1015
1099
  * Event dispatched to append a new item at the END of an array field.
1016
1100
  *
1017
1101
  * @typeParam TTemplate - The type of the template (single field or array of fields)
1018
1102
  */
1019
- declare class AppendArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent {
1020
- /** The key of the array field to append an item to */
1021
- readonly arrayKey: string;
1022
- /**
1023
- * Template for the new array item. REQUIRED.
1024
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1025
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1026
- */
1027
- readonly template: TTemplate;
1028
- readonly type: "append-array-item";
1029
- constructor(
1030
- /** The key of the array field to append an item to */
1031
- arrayKey: string,
1032
- /**
1033
- * Template for the new array item. REQUIRED.
1034
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1035
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1036
- */
1037
- template: TTemplate);
1103
+ export declare class AppendArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent$1 {
1104
+ /** The key of the array field to append an item to */
1105
+ readonly arrayKey: string;
1106
+ /**
1107
+ * Template for the new array item. REQUIRED.
1108
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1109
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1110
+ */
1111
+ readonly template: TTemplate;
1112
+ readonly type: "append-array-item";
1113
+ constructor(
1114
+ /** The key of the array field to append an item to */
1115
+ arrayKey: string,
1116
+ /**
1117
+ * Template for the new array item. REQUIRED.
1118
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1119
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1120
+ */
1121
+ template: TTemplate);
1038
1122
  }
1039
-
1040
1123
  /**
1041
1124
  * Event dispatched to prepend a new item at the BEGINNING of an array field.
1042
1125
  *
1043
1126
  * @typeParam TTemplate - The type of the template (single field or array of fields)
1044
1127
  */
1045
- declare class PrependArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent {
1046
- /** The key of the array field to prepend an item to */
1047
- readonly arrayKey: string;
1048
- /**
1049
- * Template for the new array item. REQUIRED.
1050
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1051
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1052
- */
1053
- readonly template: TTemplate;
1054
- readonly type: "prepend-array-item";
1055
- constructor(
1056
- /** The key of the array field to prepend an item to */
1057
- arrayKey: string,
1058
- /**
1059
- * Template for the new array item. REQUIRED.
1060
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1061
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1062
- */
1063
- template: TTemplate);
1128
+ export declare class PrependArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent$1 {
1129
+ /** The key of the array field to prepend an item to */
1130
+ readonly arrayKey: string;
1131
+ /**
1132
+ * Template for the new array item. REQUIRED.
1133
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1134
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1135
+ */
1136
+ readonly template: TTemplate;
1137
+ readonly type: "prepend-array-item";
1138
+ constructor(
1139
+ /** The key of the array field to prepend an item to */
1140
+ arrayKey: string,
1141
+ /**
1142
+ * Template for the new array item. REQUIRED.
1143
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1144
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1145
+ */
1146
+ template: TTemplate);
1064
1147
  }
1065
-
1066
1148
  /**
1067
1149
  * Event dispatched to insert a new item at a SPECIFIC INDEX in an array field.
1068
1150
  *
1069
1151
  * @typeParam TTemplate - The type of the template (single field or array of fields)
1070
1152
  */
1071
- declare class InsertArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent {
1072
- /** The key of the array field to insert an item into */
1073
- readonly arrayKey: string;
1074
- /** The index at which to insert the new item */
1075
- readonly index: number;
1076
- /**
1077
- * Template for the new array item. REQUIRED.
1078
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1079
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1080
- */
1081
- readonly template: TTemplate;
1082
- readonly type: "insert-array-item";
1083
- constructor(
1084
- /** The key of the array field to insert an item into */
1085
- arrayKey: string,
1086
- /** The index at which to insert the new item */
1087
- index: number,
1088
- /**
1089
- * Template for the new array item. REQUIRED.
1090
- * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1091
- * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1092
- */
1093
- template: TTemplate);
1153
+ export declare class InsertArrayItemEvent<TTemplate extends ArrayItemDefinitionTemplate = ArrayItemDefinitionTemplate> implements FormEvent$1 {
1154
+ /** The key of the array field to insert an item into */
1155
+ readonly arrayKey: string;
1156
+ /** The index at which to insert the new item */
1157
+ readonly index: number;
1158
+ /**
1159
+ * Template for the new array item. REQUIRED.
1160
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1161
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1162
+ */
1163
+ readonly template: TTemplate;
1164
+ readonly type: "insert-array-item";
1165
+ constructor(
1166
+ /** The key of the array field to insert an item into */
1167
+ arrayKey: string,
1168
+ /** The index at which to insert the new item */
1169
+ index: number,
1170
+ /**
1171
+ * Template for the new array item. REQUIRED.
1172
+ * - Single field (FieldDef): Creates a primitive item (field's value is extracted directly)
1173
+ * - Array of fields (FieldDef[]): Creates an object item (fields merged into object)
1174
+ */
1175
+ template: TTemplate);
1094
1176
  }
1095
-
1096
1177
  /** Event dispatched to remove the LAST item from an array field. */
1097
- declare class PopArrayItemEvent implements FormEvent {
1098
- /** The key of the array field to remove the last item from */
1099
- readonly arrayKey: string;
1100
- readonly type: "pop-array-item";
1101
- constructor(
1102
- /** The key of the array field to remove the last item from */
1103
- arrayKey: string);
1178
+ export declare class PopArrayItemEvent implements FormEvent$1 {
1179
+ /** The key of the array field to remove the last item from */
1180
+ readonly arrayKey: string;
1181
+ readonly type: "pop-array-item";
1182
+ constructor(
1183
+ /** The key of the array field to remove the last item from */
1184
+ arrayKey: string);
1104
1185
  }
1105
-
1106
1186
  /** Event dispatched to remove the FIRST item from an array field. */
1107
- declare class ShiftArrayItemEvent implements FormEvent {
1108
- /** The key of the array field to remove the first item from */
1109
- readonly arrayKey: string;
1110
- readonly type: "shift-array-item";
1111
- constructor(
1112
- /** The key of the array field to remove the first item from */
1113
- arrayKey: string);
1187
+ export declare class ShiftArrayItemEvent implements FormEvent$1 {
1188
+ /** The key of the array field to remove the first item from */
1189
+ readonly arrayKey: string;
1190
+ readonly type: "shift-array-item";
1191
+ constructor(
1192
+ /** The key of the array field to remove the first item from */
1193
+ arrayKey: string);
1114
1194
  }
1115
-
1116
1195
  /** Event dispatched to move an existing item from one index to another within an array field. */
1117
- declare class MoveArrayItemEvent implements FormEvent {
1118
- /** The key of the array field containing the item to move */
1119
- readonly arrayKey: string;
1120
- /** The current index of the item to move */
1121
- readonly fromIndex: number;
1122
- /** The target index to move the item to */
1123
- readonly toIndex: number;
1124
- readonly type: "move-array-item";
1125
- constructor(
1126
- /** The key of the array field containing the item to move */
1127
- arrayKey: string,
1128
- /** The current index of the item to move */
1129
- fromIndex: number,
1130
- /** The target index to move the item to */
1131
- toIndex: number);
1196
+ export declare class MoveArrayItemEvent implements FormEvent$1 {
1197
+ /** The key of the array field containing the item to move */
1198
+ readonly arrayKey: string;
1199
+ /** The current index of the item to move */
1200
+ readonly fromIndex: number;
1201
+ /** The target index to move the item to */
1202
+ readonly toIndex: number;
1203
+ readonly type: "move-array-item";
1204
+ constructor(
1205
+ /** The key of the array field containing the item to move */
1206
+ arrayKey: string,
1207
+ /** The current index of the item to move */
1208
+ fromIndex: number,
1209
+ /** The target index to move the item to */
1210
+ toIndex: number);
1132
1211
  }
1133
-
1134
1212
  /** Event dispatched to remove an item at a SPECIFIC INDEX from an array field. */
1135
- declare class RemoveAtIndexEvent implements FormEvent {
1136
- /** The key of the array field to remove an item from */
1137
- readonly arrayKey: string;
1138
- /** The index of the item to remove */
1139
- readonly index: number;
1140
- readonly type: "remove-at-index";
1141
- constructor(
1142
- /** The key of the array field to remove an item from */
1143
- arrayKey: string,
1144
- /** The index of the item to remove */
1145
- index: number);
1213
+ export declare class RemoveAtIndexEvent implements FormEvent$1 {
1214
+ /** The key of the array field to remove an item from */
1215
+ readonly arrayKey: string;
1216
+ /** The index of the item to remove */
1217
+ readonly index: number;
1218
+ readonly type: "remove-at-index";
1219
+ constructor(
1220
+ /** The key of the array field to remove an item from */
1221
+ arrayKey: string,
1222
+ /** The index of the item to remove */
1223
+ index: number);
1146
1224
  }
1147
-
1148
1225
  /**
1149
1226
  * Builder for array manipulation events.
1150
1227
  *
1151
1228
  * @param arrayKey - The key of the array field to operate on
1152
1229
  * @returns An object with methods for all 7 array operations
1153
1230
  */
1154
- declare function arrayEvent(arrayKey: string): {
1155
- /**
1156
- * Append a new item at the END of the array.
1157
- * This is the most common operation for adding items.
1158
- *
1159
- * @param template - Template for the new item (REQUIRED)
1160
- * - Single field: Creates a primitive item (field's value is extracted directly)
1161
- * - Array of fields: Creates an object item (fields merged into object)
1162
- * @returns An AppendArrayItemEvent to dispatch
1163
- */
1164
- append: <T extends ArrayItemDefinitionTemplate>(template: T) => AppendArrayItemEvent<T>;
1165
- /**
1166
- * Prepend a new item at the BEGINNING of the array.
1167
- * Use when new items should appear at the start.
1168
- *
1169
- * @param template - Template for the new item (REQUIRED)
1170
- * - Single field: Creates a primitive item (field's value is extracted directly)
1171
- * - Array of fields: Creates an object item (fields merged into object)
1172
- * @returns A PrependArrayItemEvent to dispatch
1173
- */
1174
- prepend: <T extends ArrayItemDefinitionTemplate>(template: T) => PrependArrayItemEvent<T>;
1175
- /**
1176
- * Insert a new item at a SPECIFIC INDEX in the array.
1177
- * Use when you need precise control over item placement.
1178
- *
1179
- * @param index - The position at which to insert the new item
1180
- * @param template - Template for the new item (REQUIRED)
1181
- * - Single field: Creates a primitive item (field's value is extracted directly)
1182
- * - Array of fields: Creates an object item (fields merged into object)
1183
- * @returns An InsertArrayItemEvent to dispatch
1184
- */
1185
- insertAt: <T extends ArrayItemDefinitionTemplate>(index: number, template: T) => InsertArrayItemEvent<T>;
1186
- /**
1187
- * Remove the LAST item from the array.
1188
- * Equivalent to JavaScript's `Array.pop()`.
1189
- *
1190
- * @returns A PopArrayItemEvent to dispatch
1191
- */
1192
- pop: () => PopArrayItemEvent;
1193
- /**
1194
- * Remove the FIRST item from the array.
1195
- * Equivalent to JavaScript's `Array.shift()`.
1196
- *
1197
- * @returns A ShiftArrayItemEvent to dispatch
1198
- */
1199
- shift: () => ShiftArrayItemEvent;
1200
- /**
1201
- * Remove an item at a SPECIFIC INDEX from the array.
1202
- * Use when you need to remove a specific item by position.
1203
- *
1204
- * @param index - The position of the item to remove
1205
- * @returns A RemoveAtIndexEvent to dispatch
1206
- */
1207
- removeAt: (index: number) => RemoveAtIndexEvent;
1208
- /**
1209
- * Move an existing item from one position to another within the array.
1210
- * This is an atomic reorder — the item is NOT destroyed and recreated.
1211
- * The resolved component, form value, and stored template are preserved.
1212
- *
1213
- * @param from - The current index of the item to move
1214
- * @param to - The target index to move the item to
1215
- * @returns A MoveArrayItemEvent to dispatch
1216
- */
1217
- move: (from: number, to: number) => MoveArrayItemEvent;
1231
+ export declare function arrayEvent(arrayKey: string): {
1232
+ /**
1233
+ * Append a new item at the END of the array.
1234
+ * This is the most common operation for adding items.
1235
+ *
1236
+ * @param template - Template for the new item (REQUIRED)
1237
+ * - Single field: Creates a primitive item (field's value is extracted directly)
1238
+ * - Array of fields: Creates an object item (fields merged into object)
1239
+ * @returns An AppendArrayItemEvent to dispatch
1240
+ */
1241
+ append: <T extends ArrayItemDefinitionTemplate>(template: T) => AppendArrayItemEvent<T>;
1242
+ /**
1243
+ * Prepend a new item at the BEGINNING of the array.
1244
+ * Use when new items should appear at the start.
1245
+ *
1246
+ * @param template - Template for the new item (REQUIRED)
1247
+ * - Single field: Creates a primitive item (field's value is extracted directly)
1248
+ * - Array of fields: Creates an object item (fields merged into object)
1249
+ * @returns A PrependArrayItemEvent to dispatch
1250
+ */
1251
+ prepend: <T extends ArrayItemDefinitionTemplate>(template: T) => PrependArrayItemEvent<T>;
1252
+ /**
1253
+ * Insert a new item at a SPECIFIC INDEX in the array.
1254
+ * Use when you need precise control over item placement.
1255
+ *
1256
+ * @param index - The position at which to insert the new item
1257
+ * @param template - Template for the new item (REQUIRED)
1258
+ * - Single field: Creates a primitive item (field's value is extracted directly)
1259
+ * - Array of fields: Creates an object item (fields merged into object)
1260
+ * @returns An InsertArrayItemEvent to dispatch
1261
+ */
1262
+ insertAt: <T extends ArrayItemDefinitionTemplate>(index: number, template: T) => InsertArrayItemEvent<T>;
1263
+ /**
1264
+ * Remove the LAST item from the array.
1265
+ * Equivalent to JavaScript's `Array.pop()`.
1266
+ *
1267
+ * @returns A PopArrayItemEvent to dispatch
1268
+ */
1269
+ pop: () => PopArrayItemEvent;
1270
+ /**
1271
+ * Remove the FIRST item from the array.
1272
+ * Equivalent to JavaScript's `Array.shift()`.
1273
+ *
1274
+ * @returns A ShiftArrayItemEvent to dispatch
1275
+ */
1276
+ shift: () => ShiftArrayItemEvent;
1277
+ /**
1278
+ * Remove an item at a SPECIFIC INDEX from the array.
1279
+ * Use when you need to remove a specific item by position.
1280
+ *
1281
+ * @param index - The position of the item to remove
1282
+ * @returns A RemoveAtIndexEvent to dispatch
1283
+ */
1284
+ removeAt: (index: number) => RemoveAtIndexEvent;
1285
+ /**
1286
+ * Move an existing item from one position to another within the array.
1287
+ * This is an atomic reorder — the item is NOT destroyed and recreated.
1288
+ * The resolved component, form value, and stored template are preserved.
1289
+ *
1290
+ * @param from - The current index of the item to move
1291
+ * @param to - The target index to move the item to
1292
+ * @returns A MoveArrayItemEvent to dispatch
1293
+ */
1294
+ move: (from: number, to: number) => MoveArrayItemEvent;
1218
1295
  };
1219
-
1220
1296
  /**
1221
1297
  * Context object for array item operations (add/remove)
1222
1298
  * Provides the necessary information to resolve tokens in array item event arguments
1223
1299
  */
1224
1300
  interface ArrayItemContext {
1225
- /** The key of the field */
1226
- key: string;
1227
- /** Array index for the item */
1228
- index?: number;
1229
- /** Parent array field key */
1230
- arrayKey?: string;
1231
- /** Form value for token resolution */
1232
- formValue?: unknown;
1301
+ /** The key of the field */
1302
+ key: string;
1303
+ /** Array index for the item */
1304
+ index?: number;
1305
+ /** Parent array field key */
1306
+ arrayKey?: string;
1307
+ /** Form value for token resolution */
1308
+ formValue?: unknown;
1233
1309
  }
1234
-
1235
- export { ActivePageInitializedEvent, AppendArrayItemEvent, BUILT_IN_FIELDS, ComponentAddonComponent, ConsoleLogger, DfTemplate, DynamicForm, EventDispatcher, FormClearEvent, FormResetEvent, FormSubmitEvent, GoToPageEvent, InsertArrayItemEvent, MoveArrayItemEvent, NextPageEvent, PageChangeEvent, PagerStateEvent, PopArrayItemEvent, PrependArrayItemEvent, PreviousPageEvent, RemoveAtIndexEvent, ShiftArrayItemEvent, TemplateAddonComponent, TextAddonComponent, arrayEvent, createWrappers, isWrappersBundle, provideDynamicForm, sanitizeFormConfig, withAddonActions, withCustomAddon, withEventFormValue, withExperimentalWebMcp, withFieldWindowing, withLegacyStatusClasses, withLoggerConfig, withPagePreload, withValidationExecutionDefaults, withValueExclusionDefaults, wrapperProps };
1236
- export type { AddonActionsFeature, AddonWarning, ArrayItemContext, ArrayItemDefinitionTemplate, ExtractFieldDefs, ExtractFormValue, FieldParkingOption, InferWrapperRegistry, PageNavigationOptions, PagerState, SanitizeFormConfigOptions, SanitizedFormConfig, SubmissionOutcome, SubmissionReply, WebMcpStatus, WrapperRegistration, WrappersBundle };
1310
+ export { type AddonActionContext, type AddonActionPreset, type AddonActionsFeature, type AddonSlot, type AddonTypeDefinition, type AddonWarning, type AnyAddon, type ArrayAllowedChildren, type ArrayButtonConfig, type ArrayField, type ArrayItemContext, type ArrayItemDefinitionTemplate, type ArrayItemTemplate, type AsyncCondition, type AsyncConditionFunction, type AsyncCustomValidator, type AsyncDerivationFunction, type AsyncValidatorConfig, type AvailableFieldTypes, type BaseAddon, type BaseCheckedField, type BaseValidatorConfig, type BaseValueField, type BuiltInValidatorConfig, type CheckedFieldComponent, type CommonAddonActionPreset, type CommonAddonSlot, type ComponentAddon, type ConditionalExpression, type ContainerAllowedChildren, type ContainerField, type ContainerFieldTypes, type CssWrapper, type CustomFnConfig, type CustomFunction, type CustomValidator, type CustomValidatorConfig, DF_FIELD_TEMPLATES, type DeclarativeHttpValidatorConfig, type DynamicFormActionRegistry, type DynamicFormAddonActionPresetRegistry, type DynamicFormAddonRegistry, type DynamicFormAddonSlotRegistry, DynamicFormError, type DynamicFormFieldRegistry, DynamicFormLogger, type DynamicText, type DynamicValue, type EvaluationContext, type ExtractField, type ExtractFieldDefs, type ExtractFormValue, type FieldBoundAddonActionContext, type FieldComponent, type FieldDef, type FieldMeta, type FieldOption, type FieldParkingOption, type FieldPathAccess, type FieldPlaceholderContext, type FieldPlaceholderInfo, type FieldRegistryContainers, type FieldRegistryLeaves, type FieldRegistryWrappers, type FieldWithValidation, type FieldWrapper, type FormConfig, type FormEvent, type FormEventConstructor, type FormMode, type FormModeDetectionResult, type FormOptions, type FormStateCondition, type GroupAllowedChildren, type GroupField, type HiddenField, type HiddenScalar, type HiddenValue, type HttpCondition, type HttpCustomValidator, type HttpRequestConfig, type HttpValidationResponseMapping, type InferFormValue, type InferWrapperRegistry, type InitialPageConfig, type LeafFieldTypes, type Logger, type LogicConfig, type NarrowField, type NarrowFields, type NextButtonOptions, NoopLogger, type OrphanAddonActionContext, type PageAllowedChildren, type PageField, type PageNavigationOptions, type PagerState, type RegisteredActionRef, type RegisteredFieldTypes, type ResolvedValidationExecutionConfig, type ResolvedValueExclusionConfig, type RowAllowedChildren, type RowErrorSpec, type RowField, type SanitizeFormConfigOptions, type SanitizedFormConfig, type SchemaApplicationConfig, type SchemaDefinition, type SimplifiedArrayField, type StateLogicConfig, type SubmissionActionResult, type SubmissionConfig, type SubmissionOutcome, type SubmissionReply, type SubmitButtonOptions, type TemplateAddon, type TextAddon, type TextElementType, type TextField, type TextProps, type TokenContext, type ValidationError, type ValidationExecutionConfig, type ValidationMessage, type ValidationMessageResolver, type ValidationMessages, type ValidatorConfig, type ValueExclusionConfig, type ValueFieldComponent, type ValueType, type WebMcpStatus, type WebMcpToolOptions, type WithInputSignals, type WrapperConfig, type WrapperRegistration, type WrapperTypeDefinition, type WrappersBundle, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue, rowError };