@ng-forge/dynamic-forms 1.1.0-next.2 → 1.1.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-CftX-bCB.mjs.map → ng-forge-dynamic-forms-array-field.component-DCHrAcfd.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CFSJLZPZ.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-DWIWQjjZ.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-B_bQ-f2g.mjs.map → ng-forge-dynamic-forms-container-field.component-CSYhRBe6.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-Bl9WRPvF.mjs.map → ng-forge-dynamic-forms-group-field.component-DqhHzVsN.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +17 -67
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs +41 -35
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs} +49 -135
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-C9bQkVjQ.mjs.map → ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs +84 -0
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
- package/package.json +5 -1
- package/types/ng-forge-dynamic-forms-integration.d.ts +6 -54
- package/types/ng-forge-dynamic-forms-internal.d.ts +41 -10
- package/types/ng-forge-dynamic-forms-testing.d.ts +58 -0
- package/types/ng-forge-dynamic-forms.d.ts +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-fMB33l2f.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, DestroyRef, Injector, EnvironmentInjector, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
import { i as injectFieldRegistry, c as createFieldResolutionPipe, D as DfFieldOutlet } from './ng-forge-dynamic-forms-ng-forge-dynamic-forms-
|
|
3
|
+
import { i as injectFieldRegistry, c as createFieldResolutionPipe, D as DfFieldOutlet } from './ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs';
|
|
4
4
|
import { outputFromObservable } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { explicitEffect } from 'ngxtension/explicit-effect';
|
|
6
6
|
import { EventBus, DynamicFormLogger, validatePageNesting, derivedFromDeferred } from '@ng-forge/dynamic-forms/internal';
|
|
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
94
94
|
}], ctorParameters: () => [], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], pageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageIndex", required: true }] }], isVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "isVisible", required: true }] }], nextPage: [{ type: i0.Output, args: ["nextPage"] }], previousPage: [{ type: i0.Output, args: ["previousPage"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }] } });
|
|
95
95
|
|
|
96
96
|
export { PageFieldComponent as default };
|
|
97
|
-
//# sourceMappingURL=ng-forge-dynamic-forms-page-field.component-
|
|
97
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-forge-dynamic-forms-page-field.component-
|
|
1
|
+
{"version":3,"file":"ng-forge-dynamic-forms-page-field.component-Vvk3fYZp.mjs","mappings":";;;;;;;;AAsCc;YAKK;;AAEA;AACE;AACF;AACA;;;;;AAQjB;;;;;;YAQS;;AAEA;;AAEA;;;;YAQA;AACA;AACA;YAMQ;AACf;AACE;;;;;AAKe;AAGf;AACA;;;AAGA;AACE;;;;AAOH;YAQH;;;;;AAWE;;;;;AAQA;;;AA/FiB;;;;;;AAdlB;;;;AARS;;;;;;;AAWR;AACA;AACA;AACA;AACA;AACA;AACA;AACA","names":[],"ignoreList":[],"sources":["../../../../packages/dynamic-forms/src/lib/fields/page/page-field.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DestroyRef, EnvironmentInjector, inject, Injector, input } from '@angular/core';\nimport { DfFieldOutlet } from '../../directives/df-field-outlet/df-field-outlet.directive';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { derivedFromDeferred } from '@ng-forge/dynamic-forms/internal';\nimport { createFieldResolutionPipe, ResolvedField } from '../../utils/resolve-field/resolve-field';\nimport { computeContainerHostClasses, setupContainerInitEffect } from '../../utils/container-utils/container-utils';\nimport { PageField, validatePageNesting } from '@ng-forge/dynamic-forms/internal';\nimport { injectFieldRegistry } from '../../utils/inject-field-registry/inject-field-registry';\nimport { EventBus } from '@ng-forge/dynamic-forms/internal';\nimport { NextPageEvent, PageChangeEvent, PreviousPageEvent } from '../../events/constants';\nimport { FieldDef } from '@ng-forge/dynamic-forms/internal';\nimport { DynamicFormLogger } from '@ng-forge/dynamic-forms/internal';\n\n/** Renders a single page in multi-page (wizard) forms. */\n@Component({\n selector: 'section[page-field]',\n imports: [DfFieldOutlet],\n template: `\n @for (field of resolvedFields(); track field.key) {\n @if (!field.hidden()) {\n <ng-container *dfFieldOutlet=\"field; environmentInjector: environmentInjector\" />\n }\n }\n `,\n styleUrl: './page-field.component.scss',\n host: {\n '[class]': 'hostClasses()',\n '[class.disabled]': 'disabled()',\n '[class.df-page-visible]': 'isVisible()',\n '[class.df-page-hidden]': '!isVisible()',\n '[attr.aria-hidden]': '!isVisible()',\n '[attr.data-page-index]': 'pageIndex()',\n '[id]': '`${key()}`',\n '[attr.data-testid]': 'key()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class PageFieldComponent {\n // ─────────────────────────────────────────────────────────────────────────────\n // Dependencies\n // ─────────────────────────────────────────────────────────────────────────────\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly fieldRegistry = injectFieldRegistry();\n private readonly injector = inject(Injector);\n protected readonly environmentInjector = inject(EnvironmentInjector);\n private readonly eventBus = inject(EventBus);\n private readonly logger = inject(DynamicFormLogger);\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Inputs\n // ─────────────────────────────────────────────────────────────────────────────\n\n field = input.required<PageField>();\n key = input.required<string>();\n className = input<string>();\n pageIndex = input.required<number>();\n isVisible = input.required<boolean>();\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Computed Signals\n // ─────────────────────────────────────────────────────────────────────────────\n\n readonly hostClasses = computed(() => computeContainerHostClasses('page-field', this.className()));\n\n readonly disabled = computed(() => this.field().disabled || false);\n\n readonly isValid = computed(() => validatePageNesting(this.field()));\n\n private readonly rawFieldRegistry = computed(() => this.fieldRegistry.raw);\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Outputs\n // ─────────────────────────────────────────────────────────────────────────────\n\n readonly nextPage = outputFromObservable(this.eventBus.on<NextPageEvent>('next-page'));\n readonly previousPage = outputFromObservable(this.eventBus.on<PreviousPageEvent>('previous-page'));\n readonly pageChange = outputFromObservable(this.eventBus.on<PageChangeEvent>('page-change'));\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Field Resolution\n // ─────────────────────────────────────────────────────────────────────────────\n\n private readonly fieldsSource = computed(() => {\n if (!this.isValid()) {\n return [];\n }\n return this.field().fields || [];\n });\n\n protected readonly resolvedFields = derivedFromDeferred(\n this.fieldsSource,\n createFieldResolutionPipe(() => ({\n loadTypeComponent: (type: string) => this.fieldRegistry.loadTypeComponent(type),\n registry: this.rawFieldRegistry(),\n injector: this.injector,\n destroyRef: this.destroyRef,\n onError: (fieldDef: FieldDef<unknown>, error: unknown) => {\n const fieldKey = fieldDef.key || '<no key>';\n this.logger.error(\n `Failed to load component for field type '${fieldDef.type}' (key: ${fieldKey}) ` +\n `within page '${this.field().key}'. Ensure the field type is registered in your field registry.`,\n error,\n );\n },\n })),\n { initialValue: [] as ResolvedField[], injector: this.injector },\n );\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Constructor\n // ─────────────────────────────────────────────────────────────────────────────\n\n constructor() {\n this.setupEffects();\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Private Methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n private setupEffects(): void {\n setupContainerInitEffect(this.resolvedFields, this.eventBus, 'page', () => this.field().key, this.injector);\n\n explicitEffect([this.isValid, this.field], ([valid, pageField]) => {\n if (!valid) {\n this.logger.error(\n `Invalid configuration: Page '${pageField.key}' contains nested page fields. ` +\n `Pages cannot contain other pages. Consider using groups or rows for nested structure.`,\n pageField,\n );\n }\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { signal, EnvironmentInjector, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import { getTestBed, TestBed } from '@angular/core/testing';
|
|
3
|
+
import { form, schema } from '@angular/forms/signals';
|
|
4
|
+
import { DynamicFormError, DynamicFormLogger, EventBus, DEFAULT_VALIDATION_MESSAGES } from '@ng-forge/dynamic-forms/internal';
|
|
5
|
+
|
|
6
|
+
const fixtureLogger = {
|
|
7
|
+
debug: (message, ...args) => console.debug('[Dynamic Forms]', message, ...args),
|
|
8
|
+
info: (message, ...args) => console.info('[Dynamic Forms]', message, ...args),
|
|
9
|
+
warn: (message, ...args) => console.warn('[Dynamic Forms]', message, ...args),
|
|
10
|
+
error: (message, ...args) => console.error('[Dynamic Forms]', message, ...args),
|
|
11
|
+
};
|
|
12
|
+
function assertTestEnvironmentInitialized() {
|
|
13
|
+
if (getTestBed().platform)
|
|
14
|
+
return;
|
|
15
|
+
throw new DynamicFormError('The Angular test environment was never initialized for the @angular/core/testing instance this fixture resolved. ' +
|
|
16
|
+
'Under Vitest this means your specs use a Vite-transformed copy of @angular/core/testing while the fixtures load the native one. ' +
|
|
17
|
+
'Fix: either remove @angular/* from server.deps.inline so everything resolves natively, or inline the whole Angular graph:\n' +
|
|
18
|
+
"test: { server: { deps: { inline: [/@angular\\//, /@ng-forge/, 'ngxtension'] } } }\n" +
|
|
19
|
+
"and keep import '@angular/compiler' in your test setup so the inlined bundles JIT-link.\n" +
|
|
20
|
+
'On Jest or Karma this instead means initTestEnvironment was never called; add it to your test setup file (e.g. getTestBed().initTestEnvironment(...)).');
|
|
21
|
+
}
|
|
22
|
+
function createNgForgeFieldFixture(component, options) {
|
|
23
|
+
assertTestEnvironmentInitialized();
|
|
24
|
+
TestBed.configureTestingModule({
|
|
25
|
+
imports: [component],
|
|
26
|
+
providers: [{ provide: DynamicFormLogger, useValue: fixtureLogger }, ...(options.providers ?? [])],
|
|
27
|
+
});
|
|
28
|
+
const key = options.key;
|
|
29
|
+
const rootValue = signal({ [key]: options.value }, /* @ts-ignore */
|
|
30
|
+
...(ngDevMode ? [{ debugName: "rootValue" }] : /* istanbul ignore next */ []));
|
|
31
|
+
const injector = TestBed.inject(EnvironmentInjector);
|
|
32
|
+
const schemaCallback = options.schema;
|
|
33
|
+
const root = runInInjectionContext(injector, () => {
|
|
34
|
+
if (!schemaCallback)
|
|
35
|
+
return form(rootValue);
|
|
36
|
+
return form(rootValue, schema((path) => {
|
|
37
|
+
schemaCallback(path[key]);
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
const field = root[key];
|
|
41
|
+
if (options.touched)
|
|
42
|
+
field().markAsTouched();
|
|
43
|
+
const fixture = TestBed.createComponent(component);
|
|
44
|
+
fixture.componentRef.setInput('field', field);
|
|
45
|
+
fixture.componentRef.setInput('key', key);
|
|
46
|
+
if (options.inputs) {
|
|
47
|
+
for (const [name, value] of Object.entries(options.inputs)) {
|
|
48
|
+
fixture.componentRef.setInput(name, value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { fixture, field, rootValue };
|
|
52
|
+
}
|
|
53
|
+
function createNgForgeActionFixture(component, options) {
|
|
54
|
+
assertTestEnvironmentInitialized();
|
|
55
|
+
TestBed.configureTestingModule({
|
|
56
|
+
imports: [component],
|
|
57
|
+
providers: [EventBus, { provide: DynamicFormLogger, useValue: fixtureLogger }, ...(options.providers ?? [])],
|
|
58
|
+
});
|
|
59
|
+
const fixture = TestBed.createComponent(component);
|
|
60
|
+
fixture.componentRef.setInput('key', options.key);
|
|
61
|
+
fixture.componentRef.setInput('label', options.label);
|
|
62
|
+
if (options.event)
|
|
63
|
+
fixture.componentRef.setInput('event', options.event);
|
|
64
|
+
if (options.eventArgs)
|
|
65
|
+
fixture.componentRef.setInput('eventArgs', options.eventArgs);
|
|
66
|
+
if (options.disabled !== undefined)
|
|
67
|
+
fixture.componentRef.setInput('disabled', options.disabled);
|
|
68
|
+
if (options.hidden !== undefined)
|
|
69
|
+
fixture.componentRef.setInput('hidden', options.hidden);
|
|
70
|
+
if (options.inputs) {
|
|
71
|
+
for (const [name, value] of Object.entries(options.inputs)) {
|
|
72
|
+
fixture.componentRef.setInput(name, value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { fixture, eventBus: TestBed.inject(EventBus) };
|
|
76
|
+
}
|
|
77
|
+
function provideTestValidationMessages(messages) {
|
|
78
|
+
return { provide: DEFAULT_VALIDATION_MESSAGES, useValue: signal(messages) };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
export { createNgForgeActionFixture, createNgForgeFieldFixture, provideTestValidationMessages };
|
|
84
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-testing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-forge-dynamic-forms-testing.mjs","mappings":";;;;;AAWA;AACE;AACA;AACA;AACA;;AAyBF;;;;;;;;AAQM;AAEN;AAOM;AAIJ;;;;AAIC;AAED;AACA;;;AAGA;AACA;AACE;AAAqB;;AAIjB;;AAGN;AAEA;;AAEqB;;;;AAKrB;AACE;;;;AAKF;AACF;AAuBM;AAIJ;;;;AAIC;;;;;;;;AAOD;;AACA;;AACA;AACE;;;;AAKF;AACF;AAGM;AACJ;AACF","names":[],"ignoreList":[],"sources":["../../../../packages/dynamic-forms/testing/src/create-field-fixture.ts"],"sourcesContent":["import { EnvironmentInjector, Provider, runInInjectionContext, signal, type Type, type WritableSignal } from '@angular/core';\nimport { ComponentFixture, getTestBed, TestBed } from '@angular/core/testing';\nimport { type FieldTree, form, schema, type SchemaPath } from '@angular/forms/signals';\nimport { type FormEvent, type FormEventConstructor } from '@ng-forge/dynamic-forms';\nimport { EventBus, DynamicFormError, DynamicFormLogger, type Logger } from '@ng-forge/dynamic-forms/internal';\nimport { DEFAULT_VALIDATION_MESSAGES, type DynamicText, type ValidationMessages } from '@ng-forge/dynamic-forms/internal';\n\n/** Structural copy of integration's EventArgs; importing it would cycle the entrypoints. */\ntype EventArgs = readonly (string | number | boolean | null | undefined)[];\n\n/** Default logger so fixtures work without provideDynamicForm(); override via options.providers. */\nconst fixtureLogger: Logger = {\n debug: (message, ...args) => console.debug('[Dynamic Forms]', message, ...args),\n info: (message, ...args) => console.info('[Dynamic Forms]', message, ...args),\n warn: (message, ...args) => console.warn('[Dynamic Forms]', message, ...args),\n error: (message, ...args) => console.error('[Dynamic Forms]', message, ...args),\n};\n\nexport interface CreateNgForgeFieldFixtureOptions<TValue = unknown> {\n /** Field key. Becomes the only property on the wrapping form. */\n readonly key: string;\n /** Initial value for the field. */\n readonly value?: TValue;\n /** Optional schema callback that receives the field's `SchemaPath`. Use it to attach validators (`required`, `minLength`, etc.). */\n readonly schema?: (fieldPath: SchemaPath<TValue>) => void;\n /** Mark the field as touched after creation (useful for invalid-state assertions). */\n readonly touched?: boolean;\n /** Extra inputs to set on the component before `detectChanges()`. */\n readonly inputs?: Record<string, unknown>;\n /** Extra TestBed providers. */\n readonly providers?: readonly Provider[];\n}\n\nexport interface NgForgeFieldFixture<C, TValue = unknown> {\n readonly fixture: ComponentFixture<C>;\n readonly field: FieldTree<TValue>;\n readonly rootValue: WritableSignal<Record<string, TValue>>;\n}\n\n/** Guards against a second, uninitialized @angular/core/testing instance (Vitest externalization). */\nfunction assertTestEnvironmentInitialized(): void {\n if (getTestBed().platform) return;\n throw new DynamicFormError(\n 'The Angular test environment was never initialized for the @angular/core/testing instance this fixture resolved. ' +\n 'Under Vitest this means your specs use a Vite-transformed copy of @angular/core/testing while the fixtures load the native one. ' +\n 'Fix: either remove @angular/* from server.deps.inline so everything resolves natively, or inline the whole Angular graph:\\n' +\n \"test: { server: { deps: { inline: [/@angular\\\\//, /@ng-forge/, 'ngxtension'] } } }\\n\" +\n \"and keep import '@angular/compiler' in your test setup so the inlined bundles JIT-link.\\n\" +\n 'On Jest or Karma this instead means initTestEnvironment was never called; add it to your test setup file (e.g. getTestBed().initTestEnvironment(...)).',\n );\n}\n\n/**\n * Builds a `ComponentFixture` for an `NgForgeField`-composing component with\n * `field` + `key` bound BEFORE `detectChanges()` — sidesteps the NG0950 that\n * Shell's required `key` and Field's required `field` would otherwise throw.\n */\nexport function createNgForgeFieldFixture<C, TValue = unknown>(\n component: Type<C>,\n options: CreateNgForgeFieldFixtureOptions<TValue>,\n): NgForgeFieldFixture<C, TValue> {\n assertTestEnvironmentInitialized();\n TestBed.configureTestingModule({\n imports: [component],\n providers: [{ provide: DynamicFormLogger, useValue: fixtureLogger }, ...(options.providers ?? [])],\n });\n\n const key = options.key;\n const rootValue = signal<Record<string, TValue>>({ [key]: options.value as TValue });\n\n const injector = TestBed.inject(EnvironmentInjector);\n const schemaCallback = options.schema;\n const root = runInInjectionContext(injector, () => {\n if (!schemaCallback) return form(rootValue);\n return form(\n rootValue,\n schema<Record<string, TValue>>((path) => {\n schemaCallback(path[key] as SchemaPath<TValue>);\n }),\n );\n });\n\n const field = (root as unknown as Record<string, FieldTree<TValue>>)[key];\n\n if (options.touched) field().markAsTouched();\n\n const fixture = TestBed.createComponent(component);\n fixture.componentRef.setInput('field', field);\n fixture.componentRef.setInput('key', key);\n if (options.inputs) {\n for (const [name, value] of Object.entries(options.inputs)) {\n fixture.componentRef.setInput(name, value);\n }\n }\n\n return { fixture, field, rootValue };\n}\n\nexport interface CreateNgForgeActionFixtureOptions<TEvent extends FormEvent = FormEvent> {\n readonly key: string;\n readonly label: DynamicText;\n readonly event?: FormEventConstructor<TEvent>;\n readonly eventArgs?: EventArgs;\n readonly disabled?: boolean;\n readonly hidden?: boolean;\n readonly inputs?: Record<string, unknown>;\n readonly providers?: readonly Provider[];\n}\n\nexport interface NgForgeActionFixture<C> {\n readonly fixture: ComponentFixture<C>;\n readonly eventBus: EventBus;\n}\n\n/**\n * Builds a `ComponentFixture` for an `NgForgeAction`-composing component with\n * `key` + `label` bound and `EventBus` provided. The caller calls\n * `detectChanges()`; the harness handles the NG0950-avoidance bindings.\n */\nexport function createNgForgeActionFixture<C, TEvent extends FormEvent = FormEvent>(\n component: Type<C>,\n options: CreateNgForgeActionFixtureOptions<TEvent>,\n): NgForgeActionFixture<C> {\n assertTestEnvironmentInitialized();\n TestBed.configureTestingModule({\n imports: [component],\n providers: [EventBus, { provide: DynamicFormLogger, useValue: fixtureLogger }, ...(options.providers ?? [])],\n });\n\n const fixture = TestBed.createComponent(component);\n fixture.componentRef.setInput('key', options.key);\n fixture.componentRef.setInput('label', options.label);\n if (options.event) fixture.componentRef.setInput('event', options.event);\n if (options.eventArgs) fixture.componentRef.setInput('eventArgs', options.eventArgs);\n if (options.disabled !== undefined) fixture.componentRef.setInput('disabled', options.disabled);\n if (options.hidden !== undefined) fixture.componentRef.setInput('hidden', options.hidden);\n if (options.inputs) {\n for (const [name, value] of Object.entries(options.inputs)) {\n fixture.componentRef.setInput(name, value);\n }\n }\n\n return { fixture, eventBus: TestBed.inject(EventBus) };\n}\n\n/** Provider for `DEFAULT_VALIDATION_MESSAGES` in field tests — supply the default-messages map and the directive resolves it from DI. */\nexport function provideTestValidationMessages(messages: ValidationMessages): Provider {\n return { provide: DEFAULT_VALIDATION_MESSAGES, useValue: signal(messages) };\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { o as AppendArrayItemEvent, B as BUILT_IN_FIELDS, p as ComponentAddonComponent, q as ConsoleLogger, s as DfTemplate, u as DynamicForm, E as EventDispatcher, v as FormClearEvent, w as FormResetEvent, x as FormSubmitEvent, I as InsertArrayItemEvent, M as MoveArrayItemEvent, N as NextPageEvent, y as PageChangeEvent, z as PopArrayItemEvent, G as PrependArrayItemEvent, H as PreviousPageEvent, R as RemoveAtIndexEvent, S as ShiftArrayItemEvent, T as TemplateAddonComponent, J as TextAddonComponent, K as arrayEvent, L as createWrappers, O as isWrappersBundle, Q as provideDynamicForm, U as sanitizeFormConfig, V as withAddonActions, W as withCustomAddon, X as withEventFormValue, Y as withLegacyStatusClasses, Z as withLoggerConfig, _ as withValidationExecutionDefaults, $ as withValueExclusionDefaults, a0 as wrapperProps } from './ng-forge-dynamic-forms-ng-forge-dynamic-forms-
|
|
1
|
+
export { o as AppendArrayItemEvent, B as BUILT_IN_FIELDS, p as ComponentAddonComponent, q as ConsoleLogger, s as DfTemplate, u as DynamicForm, E as EventDispatcher, v as FormClearEvent, w as FormResetEvent, x as FormSubmitEvent, I as InsertArrayItemEvent, M as MoveArrayItemEvent, N as NextPageEvent, y as PageChangeEvent, z as PopArrayItemEvent, G as PrependArrayItemEvent, H as PreviousPageEvent, R as RemoveAtIndexEvent, S as ShiftArrayItemEvent, T as TemplateAddonComponent, J as TextAddonComponent, K as arrayEvent, L as createWrappers, O as isWrappersBundle, Q as provideDynamicForm, U as sanitizeFormConfig, V as withAddonActions, W as withCustomAddon, X as withEventFormValue, Y as withLegacyStatusClasses, Z as withLoggerConfig, _ as withValidationExecutionDefaults, $ as withValueExclusionDefaults, a0 as wrapperProps } from './ng-forge-dynamic-forms-ng-forge-dynamic-forms-BYyZ_cuA.mjs';
|
|
2
2
|
export { DF_FIELD_TEMPLATES, DynamicFormError, DynamicFormLogger, NoopLogger, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue } from '@ng-forge/dynamic-forms/internal';
|
|
3
3
|
//# sourceMappingURL=ng-forge-dynamic-forms.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-forge/dynamic-forms",
|
|
3
|
-
"version": "1.1.0-next.
|
|
3
|
+
"version": "1.1.0-next.3",
|
|
4
4
|
"description": "Type-safe, signal-powered dynamic forms for Angular. Build complex forms from configuration with full TypeScript inference.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -67,6 +67,10 @@
|
|
|
67
67
|
"./schema": {
|
|
68
68
|
"types": "./types/ng-forge-dynamic-forms-schema.d.ts",
|
|
69
69
|
"default": "./fesm2022/ng-forge-dynamic-forms-schema.mjs"
|
|
70
|
+
},
|
|
71
|
+
"./testing": {
|
|
72
|
+
"types": "./types/ng-forge-dynamic-forms-testing.d.ts",
|
|
73
|
+
"default": "./fesm2022/ng-forge-dynamic-forms-testing.mjs"
|
|
70
74
|
}
|
|
71
75
|
},
|
|
72
76
|
"ngForgeSchematicDeps": {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FormEvent, FormEventConstructor, FormSubmitEvent, NextPageEvent, PreviousPageEvent, FieldWithValidation, ArrayItemContext, BaseAddon, DynamicValue } from '@ng-forge/dynamic-forms';
|
|
2
2
|
export { BUILT_IN_FIELDS, FieldWrapper, InferWrapperRegistry, WrapperRegistration, WrapperTypeDefinition, WrappersBundle, createWrappers, isWrappersBundle, wrapperProps } from '@ng-forge/dynamic-forms';
|
|
3
|
-
import { FieldDef, StateLogicConfig, BaseCheckedField, FieldMeta, BaseValueField, FieldOption, ArrayAllowedChildren, NonFieldLogicConfig, LogicConfig, ValidationMessages, DynamicText, AnyAddon, AddonActionHandler, WrapperFieldInputs, AddonActionContext
|
|
3
|
+
import { FieldDef, StateLogicConfig, BaseCheckedField, FieldMeta, BaseValueField, FieldOption, ArrayAllowedChildren, NonFieldLogicConfig, LogicConfig, ValidationMessages, DynamicText, AnyAddon, AddonActionHandler, WrapperFieldInputs, AddonActionContext } from '@ng-forge/dynamic-forms/internal';
|
|
4
4
|
export { ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AddonActionHandler, AddonShapeValidator, AddonTypeDefinition, AddonTypeSchema, ArrayContext, ArrayFieldTree, CheckedFieldComponent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DfAddonSlot, DynamicTextPipe, EventBus, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_OPTIONS, FieldAddonSupport, FieldAddonSupportEntry, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTypeDefinition, FormFieldStateMap, GROUP_CONTEXT, HttpResourceRequest, INITIALIZATION_TIMEOUT_MS, MapperFn, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, PresetCollaborators, ReadonlyFieldTree, RootFormRegistryService, ValueFieldComponent, ValueHandlingMode, WrapperFieldInputs, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, baseFieldMapper, buildBaseInputs, containerFieldMapper, dynamicTextToObservable, getArrayLength, groupFieldMapper, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, interpolateParams, isCheckedField, isEqual, isValueField, pageFieldMapper, resolveDynamicValue, resolveNonFieldDisabled, resolveNonFieldHidden, resolveTokens, rowFieldMapper, runPresetAction, textFieldMapper, toReadonlyFieldTree, withPreviousValue, writeToFieldValue } from '@ng-forge/dynamic-forms/internal';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
|
-
import { Signal, Injector, ElementRef, InjectionToken
|
|
7
|
-
import { FieldTree
|
|
8
|
-
|
|
6
|
+
import { Signal, Injector, ElementRef, InjectionToken } from '@angular/core';
|
|
7
|
+
import { FieldTree } from '@angular/forms/signals';
|
|
8
|
+
export { CreateNgForgeActionFixtureOptions, CreateNgForgeFieldFixtureOptions, NgForgeActionFixture, NgForgeFieldFixture, createNgForgeActionFixture, createNgForgeFieldFixture, provideTestValidationMessages } from '@ng-forge/dynamic-forms/testing';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Event arguments that can contain static values or tokens to be resolved at runtime.
|
|
@@ -906,53 +906,5 @@ declare class NgForgeActionHost {
|
|
|
906
906
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NgForgeActionHost, never, never, {}, {}, never, never, true, [{ directive: typeof NgForgeFieldShell; inputs: { "key": "key"; "className": "className"; }; outputs: {}; }, { directive: typeof NgForgeAction; inputs: { "label": "label"; "disabled": "disabled"; "hidden": "hidden"; "tabIndex": "tabIndex"; "event": "event"; "eventArgs": "eventArgs"; "eventContext": "eventContext"; "props": "props"; }; outputs: {}; }]>;
|
|
907
907
|
}
|
|
908
908
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
readonly key: string;
|
|
912
|
-
/** Initial value for the field. */
|
|
913
|
-
readonly value?: TValue;
|
|
914
|
-
/** Optional schema callback that receives the field's `SchemaPath`. Use it to attach validators (`required`, `minLength`, etc.). */
|
|
915
|
-
readonly schema?: (fieldPath: SchemaPath<TValue>) => void;
|
|
916
|
-
/** Mark the field as touched after creation (useful for invalid-state assertions). */
|
|
917
|
-
readonly touched?: boolean;
|
|
918
|
-
/** Extra inputs to set on the component before `detectChanges()`. */
|
|
919
|
-
readonly inputs?: Record<string, unknown>;
|
|
920
|
-
/** Extra TestBed providers. */
|
|
921
|
-
readonly providers?: readonly Provider[];
|
|
922
|
-
}
|
|
923
|
-
interface NgForgeFieldFixture<C, TValue = unknown> {
|
|
924
|
-
readonly fixture: ComponentFixture<C>;
|
|
925
|
-
readonly field: FieldTree<TValue>;
|
|
926
|
-
readonly rootValue: WritableSignal<Record<string, TValue>>;
|
|
927
|
-
}
|
|
928
|
-
/**
|
|
929
|
-
* Builds a `ComponentFixture` for an `NgForgeField`-composing component with
|
|
930
|
-
* `field` + `key` bound BEFORE `detectChanges()` — sidesteps the NG0950 that
|
|
931
|
-
* Shell's required `key` and Field's required `field` would otherwise throw.
|
|
932
|
-
*/
|
|
933
|
-
declare function createNgForgeFieldFixture<C, TValue = unknown>(component: Type<C>, options: CreateNgForgeFieldFixtureOptions<TValue>): NgForgeFieldFixture<C, TValue>;
|
|
934
|
-
interface CreateNgForgeActionFixtureOptions<TEvent extends FormEvent = FormEvent> {
|
|
935
|
-
readonly key: string;
|
|
936
|
-
readonly label: DynamicText;
|
|
937
|
-
readonly event?: FormEventConstructor<TEvent>;
|
|
938
|
-
readonly eventArgs?: EventArgs;
|
|
939
|
-
readonly disabled?: boolean;
|
|
940
|
-
readonly hidden?: boolean;
|
|
941
|
-
readonly inputs?: Record<string, unknown>;
|
|
942
|
-
readonly providers?: readonly Provider[];
|
|
943
|
-
}
|
|
944
|
-
interface NgForgeActionFixture<C> {
|
|
945
|
-
readonly fixture: ComponentFixture<C>;
|
|
946
|
-
readonly eventBus: EventBus;
|
|
947
|
-
}
|
|
948
|
-
/**
|
|
949
|
-
* Builds a `ComponentFixture` for an `NgForgeAction`-composing component with
|
|
950
|
-
* `key` + `label` bound and `EventBus` provided. The caller calls
|
|
951
|
-
* `detectChanges()`; the harness handles the NG0950-avoidance bindings.
|
|
952
|
-
*/
|
|
953
|
-
declare function createNgForgeActionFixture<C, TEvent extends FormEvent = FormEvent>(component: Type<C>, options: CreateNgForgeActionFixtureOptions<TEvent>): NgForgeActionFixture<C>;
|
|
954
|
-
/** Provider for `DEFAULT_VALIDATION_MESSAGES` in field tests — supply the default-messages map and the directive resolves it from DI. */
|
|
955
|
-
declare function provideTestValidationMessages(messages: ValidationMessages): Provider;
|
|
956
|
-
|
|
957
|
-
export { ADDON_PRESET_HANDLER, NG_FORGE_ACTION_INPUTS, NG_FORGE_ADDONS_INPUTS, NG_FORGE_ADDON_ACTION_INPUTS, NG_FORGE_FIELD_SHELL_INPUTS, NG_FORGE_VALUE_FIELD_INPUTS, NgForgeAction, NgForgeActionHost, NgForgeAddonAction, NgForgeAddonActionBase, NgForgeAddons, NgForgeAddonsBase, NgForgeControl, NgForgeField, NgForgeFieldHost, NgForgeFieldShell, NgForgeHostControl, addArrayItemButtonMapper, buildArrayButtonEventContext, buildValueFieldInputs, buttonFieldMapper, checkboxFieldMapper, createAriaDescribedBySignal, createNgForgeActionFixture, createNgForgeFieldFixture, createResolvedErrorsSignal, datepickerFieldMapper, injectNgForgeAction, injectNgForgeAddonAction, injectNgForgeAddons, injectNgForgeField, injectNonFieldLogicResolver, insertArrayItemButtonMapper, nextButtonFieldMapper, optionsFieldMapper, popArrayItemButtonMapper, prependArrayItemButtonMapper, previousButtonFieldMapper, provideTestValidationMessages, removeArrayItemButtonMapper, resolveArrayButtonContext, resolveArrayButtonEventArgs, resolveValueFieldContext, setupMetaTracking, shiftArrayItemButtonMapper, shouldShowErrors, submitButtonFieldMapper, valueFieldMapper };
|
|
958
|
-
export type { AddonPresetHandler, ArrayButtonContext, ArrayButtonEventContext, Autocapitalize, AutocompleteValue, BaseArrayAddButtonField, BaseArrayRemoveButtonField, BaseInsertArrayItemButtonField, BaseNavigationButtonField, ButtonField, CheckboxField, CreateNgForgeActionFixtureOptions, CreateNgForgeFieldFixtureOptions, DatepickerField, DatepickerProps, EnterKeyHint, EventArg, EventArgs, FieldWithOptions, HtmlInputType, InferInputValue, InputField, InputMeta, InputMode, InputProps, InputType, MetaTrackingOptions, MultiCheckboxField, NgForgeActionFixture, NgForgeFieldFixture, NumericInputType, RadioField, ResolvedError, SelectField, SelectProps, SliderField, StringInputType, TextareaField, TextareaMeta, TextareaProps, TextareaWrap, ToggleField, TypedNgForgeAddonAction, TypedNgForgeAddons, TypedNgForgeField, ValueFieldContext };
|
|
909
|
+
export { ADDON_PRESET_HANDLER, NG_FORGE_ACTION_INPUTS, NG_FORGE_ADDONS_INPUTS, NG_FORGE_ADDON_ACTION_INPUTS, NG_FORGE_FIELD_SHELL_INPUTS, NG_FORGE_VALUE_FIELD_INPUTS, NgForgeAction, NgForgeActionHost, NgForgeAddonAction, NgForgeAddonActionBase, NgForgeAddons, NgForgeAddonsBase, NgForgeControl, NgForgeField, NgForgeFieldHost, NgForgeFieldShell, NgForgeHostControl, addArrayItemButtonMapper, buildArrayButtonEventContext, buildValueFieldInputs, buttonFieldMapper, checkboxFieldMapper, createAriaDescribedBySignal, createResolvedErrorsSignal, datepickerFieldMapper, injectNgForgeAction, injectNgForgeAddonAction, injectNgForgeAddons, injectNgForgeField, injectNonFieldLogicResolver, insertArrayItemButtonMapper, nextButtonFieldMapper, optionsFieldMapper, popArrayItemButtonMapper, prependArrayItemButtonMapper, previousButtonFieldMapper, removeArrayItemButtonMapper, resolveArrayButtonContext, resolveArrayButtonEventArgs, resolveValueFieldContext, setupMetaTracking, shiftArrayItemButtonMapper, shouldShowErrors, submitButtonFieldMapper, valueFieldMapper };
|
|
910
|
+
export type { AddonPresetHandler, ArrayButtonContext, ArrayButtonEventContext, Autocapitalize, AutocompleteValue, BaseArrayAddButtonField, BaseArrayRemoveButtonField, BaseInsertArrayItemButtonField, BaseNavigationButtonField, ButtonField, CheckboxField, DatepickerField, DatepickerProps, EnterKeyHint, EventArg, EventArgs, FieldWithOptions, HtmlInputType, InferInputValue, InputField, InputMeta, InputMode, InputProps, InputType, MetaTrackingOptions, MultiCheckboxField, NumericInputType, RadioField, ResolvedError, SelectField, SelectProps, SliderField, StringInputType, TextareaField, TextareaMeta, TextareaProps, TextareaWrap, ToggleField, TypedNgForgeAddonAction, TypedNgForgeAddons, TypedNgForgeField, ValueFieldContext };
|
|
@@ -1459,15 +1459,22 @@ interface SchemaDefinition {
|
|
|
1459
1459
|
* This replaces our custom ValidationError interface
|
|
1460
1460
|
*/
|
|
1461
1461
|
type ValidationError = ValidationError$1;
|
|
1462
|
+
/**
|
|
1463
|
+
* Resolves a validation message from the validation error, so error params
|
|
1464
|
+
* (e.g. maxLength, min) can be passed to an i18n layer natively.
|
|
1465
|
+
*/
|
|
1466
|
+
type ValidationMessageResolver = (error: ValidationError) => DynamicText;
|
|
1467
|
+
/** A validation message: static or reactive text, or a function of the validation error. */
|
|
1468
|
+
type ValidationMessage = DynamicText | ValidationMessageResolver;
|
|
1462
1469
|
interface ValidationMessages {
|
|
1463
|
-
required?:
|
|
1464
|
-
email?:
|
|
1465
|
-
min?:
|
|
1466
|
-
max?:
|
|
1467
|
-
minLength?:
|
|
1468
|
-
maxLength?:
|
|
1469
|
-
pattern?:
|
|
1470
|
-
[key: string]:
|
|
1470
|
+
required?: ValidationMessage;
|
|
1471
|
+
email?: ValidationMessage;
|
|
1472
|
+
min?: ValidationMessage;
|
|
1473
|
+
max?: ValidationMessage;
|
|
1474
|
+
minLength?: ValidationMessage;
|
|
1475
|
+
maxLength?: ValidationMessage;
|
|
1476
|
+
pattern?: ValidationMessage;
|
|
1477
|
+
[key: string]: ValidationMessage | undefined;
|
|
1471
1478
|
}
|
|
1472
1479
|
|
|
1473
1480
|
/**
|
|
@@ -2344,8 +2351,17 @@ declare function isResourceBasedValidator(config: ValidatorConfig): boolean;
|
|
|
2344
2351
|
* @param config The validator configuration to check
|
|
2345
2352
|
* @param context Optional context providing function scope lookup
|
|
2346
2353
|
* @returns true if the when condition references other fields
|
|
2354
|
+
* @deprecated No longer used for validator routing; `when` conditions are applied natively
|
|
2355
|
+
* via Angular's validator `when` config. Use {@link requiresTreeValidation} for routing.
|
|
2347
2356
|
*/
|
|
2348
2357
|
declare function hasCrossFieldWhenCondition(config: ValidatorConfig, context?: CrossFieldDetectionContext): boolean;
|
|
2358
|
+
/**
|
|
2359
|
+
* True only when the validator must be evaluated by the root validateTree:
|
|
2360
|
+
* a cross-field dynamic-value/validation EXPRESSION. A `when` condition alone
|
|
2361
|
+
* never requires tree validation; it is applied natively via Angular's
|
|
2362
|
+
* validator `when` config (built-ins) or whenLogic gating (custom/async/http).
|
|
2363
|
+
*/
|
|
2364
|
+
declare function requiresTreeValidation(config: ValidatorConfig): boolean;
|
|
2349
2365
|
/**
|
|
2350
2366
|
* Detects if a StateLogicConfig has a cross-field condition.
|
|
2351
2367
|
*
|
|
@@ -3440,6 +3456,21 @@ declare function dynamicTextToObservable(value: DynamicText | undefined, injecto
|
|
|
3440
3456
|
/** Normalises a {@link DynamicValue} into a `Signal<T>`. */
|
|
3441
3457
|
declare function resolveDynamicValue<T>(value: DynamicValue<T> | undefined, fallback: T, injector?: Injector): Signal<T>;
|
|
3442
3458
|
|
|
3459
|
+
/**
|
|
3460
|
+
* Generates CSS class string for responsive grid layout based on field column configuration.
|
|
3461
|
+
*
|
|
3462
|
+
* @param fieldDef - Field definition containing column configuration
|
|
3463
|
+
* @returns CSS class string for grid layout, empty if no valid column configuration
|
|
3464
|
+
*/
|
|
3465
|
+
declare function getGridClassString(fieldDef: FieldDef<unknown>): string;
|
|
3466
|
+
/**
|
|
3467
|
+
* Builds a combined className string from a field definition.
|
|
3468
|
+
*
|
|
3469
|
+
* @param fieldDef - Field definition containing className and col properties
|
|
3470
|
+
* @returns Combined class string, or undefined if no classes
|
|
3471
|
+
*/
|
|
3472
|
+
declare function buildClassName(fieldDef: FieldDef<unknown>): string | undefined;
|
|
3473
|
+
|
|
3443
3474
|
/**
|
|
3444
3475
|
* Injection token for configuring the initialization timeout in milliseconds.
|
|
3445
3476
|
* Defaults to 10 seconds. When the timeout is reached, a warning is logged
|
|
@@ -3558,5 +3589,5 @@ declare function assertNever(value: never): never;
|
|
|
3558
3589
|
*/
|
|
3559
3590
|
declare function withPreviousValue<T>(input: Resource<T>): Resource<T>;
|
|
3560
3591
|
|
|
3561
|
-
export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, injectNonFieldEvaluationContext, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
|
|
3562
|
-
export type { ASTNode, AddonActionContext, AddonActionHandler, AddonActionPreset, AddonShapeValidator, AddonSlot, AddonTypeDefinition, AddonTypeRegistryRef, AddonTypeSchema, AndCondition, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayComponent, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemDefinition, ArrayItemTemplate, ArrayLiteralNode, ArrowFunctionNode, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseCheckedField, BaseValidatorConfig, BaseValueField, BinaryOpNode, BuiltInValidatorConfig, ButtonLogicContext, CallExpressionNode, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComparisonOperator, ComponentAddon, ComputedMemberAccessNode, ConditionalExpression, ConditionalNode, ContainerAllowedChildren, ContainerComponent, ContainerField, ContainerFieldTypes, ContainerLogicConfig, CrossFieldDetectionContext, CssWrapper, CustomCondition, CustomFnConfig, CustomFunction, CustomFunctionOptions, CustomFunctionScope, CustomValidator, CustomValidatorConfig, DeclarativeHttpValidatorConfig, DerivationLogConfig, DerivationLogLevel, DerivationLogicConfig, DerivedFromDeferredOptions, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormFieldRegistry, DynamicText, DynamicValue, EvaluationContext, ExtractField, FieldAddonSupport, FieldAddonSupportEntry, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTreeRecord, FieldTypeDefinition, FieldValueCondition, FieldWithValidation, FieldWrapper, FormConfig, FormEvent, FormEventConstructor, FormFieldStateMap, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, FunctionHttpValidatorConfig, GroupAllowedChildren, GroupComponent, GroupContext, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpResourceRequest, HttpValidationResponseMapping, IdentifierNode, InferFormModel, InferFormValue, InitializationTrackingOptions, JavascriptCondition, LazyComponentLoader, LeafFieldTypes, LiteralNode, Logger, LogicConfig, LogicTrigger, MapperFn, MemberAccessNode, MemoizeOptions, NarrowField, NarrowFields, NextButtonOptions, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, ObjectLiteralNode, OrCondition, OrphanAddonActionContext, PageAllowedChildren, PageField, PresetCollaborators, Prettify, ReadonlyFieldTree, RegisteredActionRef, RegisteredFieldTypes, RegisteredWrapperTypes, RenderReadyInput, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowComponent, RowField, RowWrapper, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, StateLogicType, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, Token, TokenContext, UnaryOpNode, ValidationError, ValidationExecutionConfig, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WarningTracker, WithInputSignals, WrapperAutoAssociations, WrapperConfig, WrapperFieldInputs, WrapperTypeDefinition };
|
|
3592
|
+
export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_TYPE_COMPONENT_CACHE, ADDON_TYPE_DEFINITIONS, ADDON_TYPE_REGISTRY, ARRAY_CONTEXT, AsyncConditionFunctionCacheService, ComponentInitializedEvent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DEPRECATION_WARNING_TRACKER, DF_FIELD_TEMPLATES, DfAddonSlot, DynamicFormError, DynamicFormLogger, DynamicTextPipe, DynamicValueFunctionCacheService, EMIT_FORM_VALUE_ON_EVENTS, EXTERNAL_DATA, EventBus, ExpressionParser, ExpressionParserError, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_ID_PREFIX, FORM_OPTIONS, FieldContextRegistryService, FunctionRegistryService, GROUP_CONTEXT, HTTP_CONDITION_CACHE, HttpConditionCache, HttpConditionFunctionCacheService, INITIALIZATION_TIMEOUT_MS, LogicFunctionCacheService, NoopLogger, READONLY_FIELD_TREE_CACHE, RootFormRegistryService, TokenType, WRAPPER_AUTO_ASSOCIATIONS, WRAPPER_COMPONENT_CACHE, WRAPPER_REGISTRY, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, assertNever, baseFieldMapper, buildBaseInputs, buildClassName, compareValues, containerFieldMapper, createAddonActionRegistry, createDebouncedLogicFunction, createDefaultDerivationLogConfig, createDynamicValueFunction, createFormFieldStateMap, createInitializationTracker, createLogicFunction, createWarningTracker, deepMergeDefaults, derivedFromDeferred, detectFormMode, dynamicTextToObservable, evaluateCondition, evaluateNonFieldDisabled, evaluateNonFieldHidden, extractExpressionDependencies, extractStringDependencies, getArrayLength, getChangedKeys, getFieldValueHandling, getGridClassString, getNestedValue, groupFieldMapper, hasChildFields, hasCrossFieldWhenCondition, hasFormValue, hasNestedProperty, hasTargetProperty, injectAddonTypeRegistry, injectFieldSignalContext, injectFieldsSupportingAddons, injectNonFieldEvaluationContext, interpolateParams, isArrayField, isCheckedField, isContainerField, isCrossFieldBuiltInValidator, isCrossFieldExpression, isCrossFieldSchema, isCrossFieldStateLogic, isCrossFieldValidator, isDerivationLogicConfig, isDisplayOnlyField, isEqual, isFieldBoundContext, isFormStateCondition, isFunctionHttpValidator, isGenericContainerField, isGroupField, isHiddenField, isLeafField, isNonPagedForm, isPageField, isPagedForm, isResourceBasedValidator, isRowField, isSimplifiedArrayField, isStateLogicConfig, isValidNonPagedForm, isValidPagedForm, isValueBearingField, isValueField, isWrapperTypeDefinition, keyBy, mapValues, memoize, normalizeFieldsArray, omit, pageFieldMapper, readFieldStateInfo, requiresTreeValidation, resolveDynamicValue, resolveHttpRequest, resolveNextButtonDisabled, resolveNonFieldDisabled, resolveNonFieldHidden, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, runPresetAction, setupInitializationTracking, shouldLog, textFieldMapper, toReadonlyFieldTree, toReadonlyFieldTreeCached, validatePageNesting, withPreviousValue, writeToFieldValue };
|
|
3593
|
+
export type { ASTNode, AddonActionContext, AddonActionHandler, AddonActionPreset, AddonShapeValidator, AddonSlot, AddonTypeDefinition, AddonTypeRegistryRef, AddonTypeSchema, AndCondition, AnyAddon, ArrayAllowedChildren, ArrayButtonConfig, ArrayComponent, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemDefinition, ArrayItemTemplate, ArrayLiteralNode, ArrowFunctionNode, AsyncCondition, AsyncConditionFunction, AsyncCustomValidator, AsyncDerivationFunction, AsyncValidatorConfig, AvailableFieldTypes, BaseAddon, BaseCheckedField, BaseValidatorConfig, BaseValueField, BinaryOpNode, BuiltInValidatorConfig, ButtonLogicContext, CallExpressionNode, CheckedFieldComponent, CommonAddonActionPreset, CommonAddonSlot, ComparisonOperator, ComponentAddon, ComputedMemberAccessNode, ConditionalExpression, ConditionalNode, ContainerAllowedChildren, ContainerComponent, ContainerField, ContainerFieldTypes, ContainerLogicConfig, CrossFieldDetectionContext, CssWrapper, CustomCondition, CustomFnConfig, CustomFunction, CustomFunctionOptions, CustomFunctionScope, CustomValidator, CustomValidatorConfig, DeclarativeHttpValidatorConfig, DerivationLogConfig, DerivationLogLevel, DerivationLogicConfig, DerivedFromDeferredOptions, DynamicFormActionRegistry, DynamicFormAddonActionPresetRegistry, DynamicFormAddonRegistry, DynamicFormAddonSlotRegistry, DynamicFormFieldRegistry, DynamicText, DynamicValue, EvaluationContext, ExtractField, FieldAddonSupport, FieldAddonSupportEntry, FieldBoundAddonActionContext, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldRegistryWrappers, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTreeRecord, FieldTypeDefinition, FieldValueCondition, FieldWithValidation, FieldWrapper, FormConfig, FormEvent, FormEventConstructor, FormFieldStateMap, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, FunctionHttpValidatorConfig, GroupAllowedChildren, GroupComponent, GroupContext, GroupField, HiddenField, HiddenScalar, HiddenValue, HttpCondition, HttpCustomValidator, HttpRequestConfig, HttpResourceRequest, HttpValidationResponseMapping, IdentifierNode, InferFormModel, InferFormValue, InitializationTrackingOptions, JavascriptCondition, LazyComponentLoader, LeafFieldTypes, LiteralNode, Logger, LogicConfig, LogicTrigger, MapperFn, MemberAccessNode, MemoizeOptions, NarrowField, NarrowFields, NextButtonOptions, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, ObjectLiteralNode, OrCondition, OrphanAddonActionContext, PageAllowedChildren, PageField, PresetCollaborators, Prettify, ReadonlyFieldTree, RegisteredActionRef, RegisteredFieldTypes, RegisteredWrapperTypes, RenderReadyInput, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowComponent, RowField, RowWrapper, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, StateLogicType, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, Token, TokenContext, UnaryOpNode, ValidationError, ValidationExecutionConfig, ValidationMessage, ValidationMessageResolver, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WarningTracker, WithInputSignals, WrapperAutoAssociations, WrapperConfig, WrapperFieldInputs, WrapperTypeDefinition };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Provider, WritableSignal, Type } from '@angular/core';
|
|
2
|
+
import { ComponentFixture } from '@angular/core/testing';
|
|
3
|
+
import { SchemaPath, FieldTree } from '@angular/forms/signals';
|
|
4
|
+
import { FormEvent, FormEventConstructor } from '@ng-forge/dynamic-forms';
|
|
5
|
+
import { DynamicText, EventBus, ValidationMessages } from '@ng-forge/dynamic-forms/internal';
|
|
6
|
+
|
|
7
|
+
/** Structural copy of integration's EventArgs; importing it would cycle the entrypoints. */
|
|
8
|
+
type EventArgs = readonly (string | number | boolean | null | undefined)[];
|
|
9
|
+
interface CreateNgForgeFieldFixtureOptions<TValue = unknown> {
|
|
10
|
+
/** Field key. Becomes the only property on the wrapping form. */
|
|
11
|
+
readonly key: string;
|
|
12
|
+
/** Initial value for the field. */
|
|
13
|
+
readonly value?: TValue;
|
|
14
|
+
/** Optional schema callback that receives the field's `SchemaPath`. Use it to attach validators (`required`, `minLength`, etc.). */
|
|
15
|
+
readonly schema?: (fieldPath: SchemaPath<TValue>) => void;
|
|
16
|
+
/** Mark the field as touched after creation (useful for invalid-state assertions). */
|
|
17
|
+
readonly touched?: boolean;
|
|
18
|
+
/** Extra inputs to set on the component before `detectChanges()`. */
|
|
19
|
+
readonly inputs?: Record<string, unknown>;
|
|
20
|
+
/** Extra TestBed providers. */
|
|
21
|
+
readonly providers?: readonly Provider[];
|
|
22
|
+
}
|
|
23
|
+
interface NgForgeFieldFixture<C, TValue = unknown> {
|
|
24
|
+
readonly fixture: ComponentFixture<C>;
|
|
25
|
+
readonly field: FieldTree<TValue>;
|
|
26
|
+
readonly rootValue: WritableSignal<Record<string, TValue>>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Builds a `ComponentFixture` for an `NgForgeField`-composing component with
|
|
30
|
+
* `field` + `key` bound BEFORE `detectChanges()` — sidesteps the NG0950 that
|
|
31
|
+
* Shell's required `key` and Field's required `field` would otherwise throw.
|
|
32
|
+
*/
|
|
33
|
+
declare function createNgForgeFieldFixture<C, TValue = unknown>(component: Type<C>, options: CreateNgForgeFieldFixtureOptions<TValue>): NgForgeFieldFixture<C, TValue>;
|
|
34
|
+
interface CreateNgForgeActionFixtureOptions<TEvent extends FormEvent = FormEvent> {
|
|
35
|
+
readonly key: string;
|
|
36
|
+
readonly label: DynamicText;
|
|
37
|
+
readonly event?: FormEventConstructor<TEvent>;
|
|
38
|
+
readonly eventArgs?: EventArgs;
|
|
39
|
+
readonly disabled?: boolean;
|
|
40
|
+
readonly hidden?: boolean;
|
|
41
|
+
readonly inputs?: Record<string, unknown>;
|
|
42
|
+
readonly providers?: readonly Provider[];
|
|
43
|
+
}
|
|
44
|
+
interface NgForgeActionFixture<C> {
|
|
45
|
+
readonly fixture: ComponentFixture<C>;
|
|
46
|
+
readonly eventBus: EventBus;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Builds a `ComponentFixture` for an `NgForgeAction`-composing component with
|
|
50
|
+
* `key` + `label` bound and `EventBus` provided. The caller calls
|
|
51
|
+
* `detectChanges()`; the harness handles the NG0950-avoidance bindings.
|
|
52
|
+
*/
|
|
53
|
+
declare function createNgForgeActionFixture<C, TEvent extends FormEvent = FormEvent>(component: Type<C>, options: CreateNgForgeActionFixtureOptions<TEvent>): NgForgeActionFixture<C>;
|
|
54
|
+
/** Provider for `DEFAULT_VALIDATION_MESSAGES` in field tests — supply the default-messages map and the directive resolves it from DI. */
|
|
55
|
+
declare function provideTestValidationMessages(messages: ValidationMessages): Provider;
|
|
56
|
+
|
|
57
|
+
export { createNgForgeActionFixture, createNgForgeFieldFixture, provideTestValidationMessages };
|
|
58
|
+
export type { CreateNgForgeActionFixtureOptions, CreateNgForgeFieldFixtureOptions, NgForgeActionFixture, NgForgeFieldFixture };
|
|
@@ -3,7 +3,7 @@ import * as _angular_core from '@angular/core';
|
|
|
3
3
|
import { Type, Injector, Signal, EnvironmentInjector, WritableSignal, Provider, EnvironmentProviders, TemplateRef } from '@angular/core';
|
|
4
4
|
import * as _ng_forge_dynamic_forms_internal from '@ng-forge/dynamic-forms/internal';
|
|
5
5
|
import { FieldDef, FormEvent, 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, LeafFieldTypes, Logger, LogicConfig, NarrowField, NarrowFields, NextButtonOptions, NoopLogger, OrphanAddonActionContext, PageAllowedChildren, PageField, RegisteredActionRef, RegisteredFieldTypes, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowField, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationExecutionConfig, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueType, WithInputSignals, WrapperConfig, WrapperTypeDefinition, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue } 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, LeafFieldTypes, Logger, LogicConfig, NarrowField, NarrowFields, NextButtonOptions, NoopLogger, OrphanAddonActionContext, PageAllowedChildren, PageField, RegisteredActionRef, RegisteredFieldTypes, ResolvedValidationExecutionConfig, ResolvedValueExclusionConfig, RowAllowedChildren, RowField, SchemaApplicationConfig, SchemaDefinition, SimplifiedArrayField, StateLogicConfig, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TemplateAddon, TextAddon, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationExecutionConfig, ValidationMessage, ValidationMessageResolver, ValidationMessages, ValidatorConfig, ValueExclusionConfig, ValueFieldComponent, ValueType, WithInputSignals, WrapperConfig, WrapperTypeDefinition, hasFormValue, isArrayField, isContainerField, isDisplayOnlyField, isFieldBoundContext, isFormStateCondition, isGroupField, isHiddenField, isLeafField, isPageField, isRowField, isSimplifiedArrayField, isValueBearingField, isWrapperTypeDefinition, resolveDynamicValue } from '@ng-forge/dynamic-forms/internal';
|
|
7
7
|
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
8
8
|
import { FieldTree } from '@angular/forms/signals';
|
|
9
9
|
import * as _angular_forms from '@angular/forms';
|