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