@ng-forge/dynamic-forms 1.2.0-next.5 → 1.2.0-next.6
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/fesm2022/{ng-forge-dynamic-forms-array-field.component-D-VWBM-t.mjs → ng-forge-dynamic-forms-array-field.component-NTHLPjau.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-array-field.component-D-VWBM-t.mjs.map → ng-forge-dynamic-forms-array-field.component-NTHLPjau.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-OBDy6qd9.mjs → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CNCeWAeJ.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-OBDy6qd9.mjs.map → ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CNCeWAeJ.mjs.map} +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-BpeFyhAt.mjs → ng-forge-dynamic-forms-container-field.component-ByGdzAsk.mjs} +5 -4
- package/fesm2022/ng-forge-dynamic-forms-container-field.component-ByGdzAsk.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-ZdaC4Bit.mjs +25 -0
- package/fesm2022/ng-forge-dynamic-forms-field-errors-wrapper.component-ZdaC4Bit.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-BNjYMTqT.mjs → ng-forge-dynamic-forms-group-field.component-DnLZdj8v.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-BNjYMTqT.mjs.map → ng-forge-dynamic-forms-group-field.component-DnLZdj8v.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +10 -72
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs +221 -91
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-DSXZJHcu.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-B2C_WAMP.mjs} +91 -34
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-B2C_WAMP.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-B92kLZkH.mjs → ng-forge-dynamic-forms-page-field.component-CwH22lRl.mjs} +2 -2
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-B92kLZkH.mjs.map → ng-forge-dynamic-forms-page-field.component-CwH22lRl.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms.mjs +2 -2
- package/package.json +2 -2
- package/types/ng-forge-dynamic-forms-integration.d.ts +7 -31
- package/types/ng-forge-dynamic-forms-internal.d.ts +420 -218
- package/types/ng-forge-dynamic-forms.d.ts +1 -1
- package/fesm2022/ng-forge-dynamic-forms-container-field.component-BpeFyhAt.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-DSXZJHcu.mjs.map +0 -1
|
@@ -10,6 +10,8 @@ import { isPlatformBrowser, AsyncPipe, NgTemplateOutlet, NgComponentOutlet } fro
|
|
|
10
10
|
import { NG_STATUS_CLASSES } from '@angular/forms/signals/compat';
|
|
11
11
|
|
|
12
12
|
const EMPTY_WRAPPERS = Object.freeze([]);
|
|
13
|
+
const FIELD_ERRORS_WRAPPER = 'field-errors';
|
|
14
|
+
const FIELD_ERRORS_CONFIG = Object.freeze({ type: FIELD_ERRORS_WRAPPER });
|
|
13
15
|
function isSameWrapperChain(a, b) {
|
|
14
16
|
if (a === b)
|
|
15
17
|
return true;
|
|
@@ -21,17 +23,26 @@ function isSameWrapperChain(a, b) {
|
|
|
21
23
|
}
|
|
22
24
|
return true;
|
|
23
25
|
}
|
|
24
|
-
function resolveWrappers(field, defaultWrappers, autoAssociations) {
|
|
25
|
-
|
|
26
|
+
function resolveWrappers(field, defaultWrappers, autoAssociations, wrapperRegistry) {
|
|
27
|
+
if (field.wrappers === null) {
|
|
26
28
|
return EMPTY_WRAPPERS;
|
|
27
29
|
}
|
|
28
30
|
const autoWrappers = field.skipAutoWrappers ? EMPTY_WRAPPERS : (autoAssociations.get(field.type) ?? EMPTY_WRAPPERS);
|
|
29
31
|
const defaults = field.skipDefaultWrappers ? EMPTY_WRAPPERS : (defaultWrappers ?? EMPTY_WRAPPERS);
|
|
30
32
|
const fieldLevel = field.wrappers ?? EMPTY_WRAPPERS;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const composed = [...autoWrappers, ...defaults, ...fieldLevel];
|
|
34
|
+
if (needsErrorWrapper(field, composed, wrapperRegistry)) {
|
|
35
|
+
composed.push(FIELD_ERRORS_CONFIG);
|
|
33
36
|
}
|
|
34
|
-
return
|
|
37
|
+
return composed.length === 0 ? EMPTY_WRAPPERS : composed;
|
|
38
|
+
}
|
|
39
|
+
const VALIDATABLE_CONTAINERS = new Set(['group', 'array']);
|
|
40
|
+
function needsErrorWrapper(field, composed, wrapperRegistry) {
|
|
41
|
+
if (!VALIDATABLE_CONTAINERS.has(field.type))
|
|
42
|
+
return false;
|
|
43
|
+
if (!field.validators || field.validators.length === 0)
|
|
44
|
+
return false;
|
|
45
|
+
return !composed.some((w) => w.type === FIELD_ERRORS_WRAPPER || wrapperRegistry.get(w.type)?.rendersFieldErrors);
|
|
35
46
|
}
|
|
36
47
|
|
|
37
48
|
const inputNamesCache = new WeakMap();
|
|
@@ -246,7 +257,7 @@ function pushFieldInputsOnChange(opts, getRefs) {
|
|
|
246
257
|
});
|
|
247
258
|
}
|
|
248
259
|
|
|
249
|
-
function buildFieldInputs(rawInputs, cache, fieldType) {
|
|
260
|
+
function buildFieldInputs(rawInputs, cache, fieldType, validationMessages) {
|
|
250
261
|
const fieldTreeCandidate = rawInputs['field'];
|
|
251
262
|
const hasFieldTree = fieldTreeCandidate !== undefined && typeof fieldTreeCandidate === 'function';
|
|
252
263
|
const readonlyField = hasFieldTree ? toReadonlyFieldTreeCached(cache, fieldTreeCandidate) : undefined;
|
|
@@ -258,6 +269,7 @@ function buildFieldInputs(rawInputs, cache, fieldType) {
|
|
|
258
269
|
type: fieldType,
|
|
259
270
|
field: readonlyField,
|
|
260
271
|
setValue,
|
|
272
|
+
...(validationMessages !== undefined && { validationMessages }),
|
|
261
273
|
};
|
|
262
274
|
}
|
|
263
275
|
|
|
@@ -356,6 +368,7 @@ class DfFieldOutlet {
|
|
|
356
368
|
vcr = signal(this.vcrRef).asReadonly();
|
|
357
369
|
destroyRef = inject(DestroyRef);
|
|
358
370
|
wrapperAutoAssociations = inject(WRAPPER_AUTO_ASSOCIATIONS);
|
|
371
|
+
wrapperRegistry = inject(WRAPPER_REGISTRY);
|
|
359
372
|
defaultWrappersSignal = inject(DEFAULT_WRAPPERS, { optional: true });
|
|
360
373
|
readonlyFieldCache = inject(READONLY_FIELD_TREE_CACHE);
|
|
361
374
|
fieldComponent = new FieldComponentSlot();
|
|
@@ -365,8 +378,8 @@ class DfFieldOutlet {
|
|
|
365
378
|
...(ngDevMode ? [{ debugName: "renderReady" }] : /* istanbul ignore next */ []));
|
|
366
379
|
rawInputs = computed(() => this.dfFieldOutlet().inputs(), /* @ts-ignore */
|
|
367
380
|
...(ngDevMode ? [{ debugName: "rawInputs" }] : /* istanbul ignore next */ []));
|
|
368
|
-
wrappers = computed(() => resolveWrappers(this.dfFieldOutlet().fieldDef, this.defaultWrappersSignal?.(), this.wrapperAutoAssociations), { ...(ngDevMode ? { debugName: "wrappers" } : /* istanbul ignore next */ {}), equal: isSameWrapperChain });
|
|
369
|
-
fieldInputs = computed(() => buildFieldInputs(this.rawInputs(), this.readonlyFieldCache, this.dfFieldOutlet().fieldDef.type), /* @ts-ignore */
|
|
381
|
+
wrappers = computed(() => resolveWrappers(this.dfFieldOutlet().fieldDef, this.defaultWrappersSignal?.(), this.wrapperAutoAssociations, this.wrapperRegistry), { ...(ngDevMode ? { debugName: "wrappers" } : /* istanbul ignore next */ {}), equal: isSameWrapperChain });
|
|
382
|
+
fieldInputs = computed(() => buildFieldInputs(this.rawInputs(), this.readonlyFieldCache, this.dfFieldOutlet().fieldDef.type, this.dfFieldOutlet().fieldDef.validationMessages), /* @ts-ignore */
|
|
370
383
|
...(ngDevMode ? [{ debugName: "fieldInputs" }] : /* istanbul ignore next */ []));
|
|
371
384
|
defaultEnvInjector = inject(EnvironmentInjector);
|
|
372
385
|
fieldEnvInjector = computed(() => this.dfFieldOutletEnvironmentInjector() ?? this.defaultEnvInjector, /* @ts-ignore */
|
|
@@ -801,10 +814,10 @@ class PageOrchestratorComponent {
|
|
|
801
814
|
}
|
|
802
815
|
}
|
|
803
816
|
`, isInline: true, styles: [":host{display:block;position:relative;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [/* @ts-ignore */
|
|
804
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
817
|
+
import('./ng-forge-dynamic-forms-page-field.component-CwH22lRl.mjs').then(m => m.default)]] });
|
|
805
818
|
}
|
|
806
819
|
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.1", ngImport: i0, type: PageOrchestratorComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
807
|
-
import('./ng-forge-dynamic-forms-page-field.component-
|
|
820
|
+
import('./ng-forge-dynamic-forms-page-field.component-CwH22lRl.mjs').then(m => m.default)], resolveMetadata: PageFieldComponent => ({ decorators: [{
|
|
808
821
|
type: Component,
|
|
809
822
|
args: [{ selector: 'div[page-orchestrator]', imports: [PageFieldComponent], template: `
|
|
810
823
|
@for (pageField of pageFields(); track pageField.key; let i = $index) {
|
|
@@ -920,7 +933,7 @@ function validateSimplifiedTemplate(field) {
|
|
|
920
933
|
}
|
|
921
934
|
}
|
|
922
935
|
function expandSimplifiedArray(field) {
|
|
923
|
-
const { template, value = [], addButton, removeButton, key, logic, minLength, maxLength, wrappers, skipAutoWrappers, skipDefaultWrappers, } = field;
|
|
936
|
+
const { template, value = [], addButton, removeButton, key, logic, minLength, maxLength, wrappers, skipAutoWrappers, skipDefaultWrappers, validators, validationMessages, required, validateWhenHidden, } = field;
|
|
924
937
|
const isObjectTemplate = Array.isArray(template);
|
|
925
938
|
const values = value;
|
|
926
939
|
validateSimplifiedTemplate(field);
|
|
@@ -956,6 +969,18 @@ function expandSimplifiedArray(field) {
|
|
|
956
969
|
}
|
|
957
970
|
if (skipDefaultWrappers !== undefined) {
|
|
958
971
|
arrayFieldObj['skipDefaultWrappers'] = skipDefaultWrappers;
|
|
972
|
+
}
|
|
973
|
+
if (validators !== undefined) {
|
|
974
|
+
arrayFieldObj['validators'] = validators;
|
|
975
|
+
}
|
|
976
|
+
if (validationMessages !== undefined) {
|
|
977
|
+
arrayFieldObj['validationMessages'] = validationMessages;
|
|
978
|
+
}
|
|
979
|
+
if (required !== undefined) {
|
|
980
|
+
arrayFieldObj['required'] = required;
|
|
981
|
+
}
|
|
982
|
+
if (validateWhenHidden !== undefined) {
|
|
983
|
+
arrayFieldObj['validateWhenHidden'] = validateWhenHidden;
|
|
959
984
|
}
|
|
960
985
|
const arrayField = arrayFieldObj;
|
|
961
986
|
const primitiveFieldKey = !isObjectTemplate ? template.key : undefined;
|
|
@@ -1272,6 +1297,11 @@ function resolveDescendantContext(fieldDef, ownContext) {
|
|
|
1272
1297
|
let ancestorAlwaysHidden = ownContext.ancestorAlwaysHidden;
|
|
1273
1298
|
let ancestorHiddenLogics = ownContext.ancestorHiddenLogics;
|
|
1274
1299
|
let mutated = false;
|
|
1300
|
+
let ancestorRequired = ownContext.ancestorRequired;
|
|
1301
|
+
if (fieldDef.required !== undefined && fieldDef.required !== ancestorRequired) {
|
|
1302
|
+
ancestorRequired = fieldDef.required;
|
|
1303
|
+
mutated = true;
|
|
1304
|
+
}
|
|
1275
1305
|
if (fieldDef.hidden === true && !ancestorAlwaysHidden) {
|
|
1276
1306
|
ancestorAlwaysHidden = true;
|
|
1277
1307
|
mutated = true;
|
|
@@ -1303,6 +1333,7 @@ function resolveDescendantContext(fieldDef, ownContext) {
|
|
|
1303
1333
|
validateWhenHidden: ownContext.validateWhenHidden,
|
|
1304
1334
|
ancestorAlwaysHidden,
|
|
1305
1335
|
ancestorHiddenLogics,
|
|
1336
|
+
ancestorRequired,
|
|
1306
1337
|
};
|
|
1307
1338
|
}
|
|
1308
1339
|
|
|
@@ -1373,6 +1404,7 @@ function mapFieldToForm(fieldDef, fieldPath, inheritedContext = DEFAULT_FIELD_TR
|
|
|
1373
1404
|
}
|
|
1374
1405
|
if (isGroupField(fieldDef)) {
|
|
1375
1406
|
const descendantContext = resolveDescendantContext(fieldDef, ownContext);
|
|
1407
|
+
applyContainerValidators(fieldDef, fieldPath, descendantContext);
|
|
1376
1408
|
mapContainerChildren(fieldDef.fields, fieldPath, descendantContext);
|
|
1377
1409
|
return;
|
|
1378
1410
|
}
|
|
@@ -1422,7 +1454,7 @@ function mapLeafField(fieldDef, fieldPath, context) {
|
|
|
1422
1454
|
}
|
|
1423
1455
|
}
|
|
1424
1456
|
const applyValidation = (validationPath) => {
|
|
1425
|
-
applySimpleValidationRules(validationField, validationPath);
|
|
1457
|
+
applySimpleValidationRules(validationField, validationPath, context);
|
|
1426
1458
|
if (validationField.validators) {
|
|
1427
1459
|
for (const config of validationField.validators) {
|
|
1428
1460
|
applyValidator(config, validationPath);
|
|
@@ -1436,8 +1468,11 @@ function mapLeafField(fieldDef, fieldPath, context) {
|
|
|
1436
1468
|
}
|
|
1437
1469
|
}
|
|
1438
1470
|
};
|
|
1471
|
+
applyHiddenGatedValidation(path, context, applyValidation);
|
|
1472
|
+
}
|
|
1473
|
+
function applyHiddenGatedValidation(path, context, apply) {
|
|
1439
1474
|
if (context.validateWhenHidden) {
|
|
1440
|
-
|
|
1475
|
+
apply(path);
|
|
1441
1476
|
return;
|
|
1442
1477
|
}
|
|
1443
1478
|
if (context.ancestorAlwaysHidden) {
|
|
@@ -1450,10 +1485,21 @@ function mapLeafField(fieldDef, fieldPath, context) {
|
|
|
1450
1485
|
if (ancestorHiddenLogic && ancestorHiddenLogic(ctx))
|
|
1451
1486
|
return false;
|
|
1452
1487
|
return true;
|
|
1453
|
-
}, schema((subPath) =>
|
|
1488
|
+
}, schema((subPath) => apply(subPath)));
|
|
1489
|
+
}
|
|
1490
|
+
function applyContainerValidators(fieldDef, fieldPath, context) {
|
|
1491
|
+
const validators = fieldDef.validators;
|
|
1492
|
+
if (!validators || validators.length === 0)
|
|
1493
|
+
return;
|
|
1494
|
+
applyHiddenGatedValidation(fieldPath, context, (validationPath) => {
|
|
1495
|
+
for (const config of validators) {
|
|
1496
|
+
applyValidator(config, validationPath, 'tree');
|
|
1497
|
+
}
|
|
1498
|
+
});
|
|
1454
1499
|
}
|
|
1455
|
-
function applySimpleValidationRules(fieldDef, path) {
|
|
1456
|
-
|
|
1500
|
+
function applySimpleValidationRules(fieldDef, path, context) {
|
|
1501
|
+
const declaresRequiredLogic = fieldDef.logic?.some(isValidationStateLogic) ?? false;
|
|
1502
|
+
if (fieldDef.required ?? (declaresRequiredLogic ? false : context.ancestorRequired)) {
|
|
1457
1503
|
required(path);
|
|
1458
1504
|
}
|
|
1459
1505
|
const stringConfig = getStringValidationConfig(fieldDef);
|
|
@@ -1486,6 +1532,7 @@ function mapArrayFieldToForm(arrayField, fieldPath, context) {
|
|
|
1486
1532
|
if (arrayField.maxLength !== undefined) {
|
|
1487
1533
|
maxLength(fieldPath, arrayField.maxLength);
|
|
1488
1534
|
}
|
|
1535
|
+
applyContainerValidators(arrayField, fieldPath, context);
|
|
1489
1536
|
let itemDefinitions = arrayField.fields;
|
|
1490
1537
|
if (!itemDefinitions || itemDefinitions.length === 0) {
|
|
1491
1538
|
const metadataTemplate = getNormalizedArrayMetadata(arrayField)?.template;
|
|
@@ -1531,17 +1578,16 @@ function mapArrayFieldToForm(arrayField, fieldPath, context) {
|
|
|
1531
1578
|
mapContainerChildren(templateField.fields, itemPath, layoutDescendant);
|
|
1532
1579
|
}
|
|
1533
1580
|
else if (isGroupField(templateField)) {
|
|
1534
|
-
|
|
1535
|
-
const groupOwn = resolveFieldOwnContext(templateField, context);
|
|
1536
|
-
const groupDescendant = resolveDescendantContext(templateField, groupOwn);
|
|
1581
|
+
const groupKey = templateField.key;
|
|
1537
1582
|
if (groupKey) {
|
|
1538
|
-
|
|
1583
|
+
const groupPath = pathRecord[groupKey];
|
|
1539
1584
|
if (groupPath) {
|
|
1540
|
-
|
|
1585
|
+
mapFieldToForm(templateField, groupPath, context);
|
|
1541
1586
|
}
|
|
1542
1587
|
}
|
|
1543
1588
|
else {
|
|
1544
|
-
|
|
1589
|
+
const groupOwn = resolveFieldOwnContext(templateField, context);
|
|
1590
|
+
mapContainerChildren(templateField.fields, itemPath, resolveDescendantContext(templateField, groupOwn));
|
|
1545
1591
|
}
|
|
1546
1592
|
}
|
|
1547
1593
|
else {
|
|
@@ -3818,7 +3864,7 @@ function createDerivationRenderGate() {
|
|
|
3818
3864
|
if (!has || engine() !== 'idle')
|
|
3819
3865
|
return;
|
|
3820
3866
|
engine.set('loading');
|
|
3821
|
-
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-
|
|
3867
|
+
pendingTasks.run(() => import('./ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-CNCeWAeJ.mjs')
|
|
3822
3868
|
.then(({ bootstrapDerivationOrchestrator }) => {
|
|
3823
3869
|
runInInjectionContext(injector, () => bootstrapDerivationOrchestrator());
|
|
3824
3870
|
engine.set('wired');
|
|
@@ -4373,28 +4419,28 @@ const DISPLAY_FIELD_TYPES_BASE = {
|
|
|
4373
4419
|
const BUILT_IN_FIELDS = [
|
|
4374
4420
|
{
|
|
4375
4421
|
name: 'row',
|
|
4376
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4422
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-ByGdzAsk.mjs'),
|
|
4377
4423
|
mapper: rowFieldMapper,
|
|
4378
4424
|
valueHandling: 'flatten',
|
|
4379
4425
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4380
4426
|
},
|
|
4381
4427
|
{
|
|
4382
4428
|
name: 'group',
|
|
4383
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-
|
|
4429
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-group-field.component-DnLZdj8v.mjs'),
|
|
4384
4430
|
mapper: groupFieldMapper,
|
|
4385
4431
|
valueHandling: 'include',
|
|
4386
4432
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4387
4433
|
},
|
|
4388
4434
|
{
|
|
4389
4435
|
name: 'array',
|
|
4390
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-
|
|
4436
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-array-field.component-NTHLPjau.mjs'),
|
|
4391
4437
|
mapper: arrayFieldMapper,
|
|
4392
4438
|
valueHandling: 'include',
|
|
4393
4439
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
4394
4440
|
},
|
|
4395
4441
|
{
|
|
4396
4442
|
name: 'page',
|
|
4397
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-
|
|
4443
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-page-field.component-CwH22lRl.mjs'),
|
|
4398
4444
|
mapper: pageFieldMapper,
|
|
4399
4445
|
valueHandling: 'flatten',
|
|
4400
4446
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -4412,7 +4458,7 @@ const BUILT_IN_FIELDS = [
|
|
|
4412
4458
|
},
|
|
4413
4459
|
{
|
|
4414
4460
|
name: 'container',
|
|
4415
|
-
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-
|
|
4461
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-container-field.component-ByGdzAsk.mjs'),
|
|
4416
4462
|
mapper: containerFieldMapper,
|
|
4417
4463
|
valueHandling: 'flatten',
|
|
4418
4464
|
...CONTAINER_FIELD_TYPES_BASE,
|
|
@@ -4427,6 +4473,11 @@ const BUILT_IN_WRAPPERS = [
|
|
|
4427
4473
|
wrapperName: 'row',
|
|
4428
4474
|
loadComponent: () => import('./ng-forge-dynamic-forms-row-wrapper.component-BBWmqQA_.mjs'),
|
|
4429
4475
|
},
|
|
4476
|
+
{
|
|
4477
|
+
wrapperName: 'field-errors',
|
|
4478
|
+
loadComponent: () => import('./ng-forge-dynamic-forms-field-errors-wrapper.component-ZdaC4Bit.mjs'),
|
|
4479
|
+
rendersFieldErrors: true,
|
|
4480
|
+
},
|
|
4430
4481
|
];
|
|
4431
4482
|
|
|
4432
4483
|
function isDynamicFormFeature(value) {
|
|
@@ -4486,7 +4537,8 @@ function provideDynamicForm(...items) {
|
|
|
4486
4537
|
const wrapperBundles = items.filter(isWrappersBundle);
|
|
4487
4538
|
const features = items.filter(isDynamicFormFeature);
|
|
4488
4539
|
const fields = [...BUILT_IN_FIELDS, ...fieldTypes];
|
|
4489
|
-
const
|
|
4540
|
+
const customWrappers = [...wrapperTypes, ...wrapperBundles.flatMap((bundle) => bundle.ɵdefinitions)];
|
|
4541
|
+
const wrappers = [...BUILT_IN_WRAPPERS, ...customWrappers];
|
|
4490
4542
|
const featureProviders = [];
|
|
4491
4543
|
const hasLoggerFeature = features.some((feature) => feature.ɵkind === 'logger');
|
|
4492
4544
|
features.forEach((feature) => {
|
|
@@ -4527,11 +4579,16 @@ function provideDynamicForm(...items) {
|
|
|
4527
4579
|
useFactory: () => {
|
|
4528
4580
|
const logger = inject(DynamicFormLogger);
|
|
4529
4581
|
const registry = new Map();
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4582
|
+
const builtInNames = new Set(BUILT_IN_WRAPPERS.map((w) => w.wrapperName));
|
|
4583
|
+
BUILT_IN_WRAPPERS.forEach((wrapperType) => registry.set(wrapperType.wrapperName, wrapperType));
|
|
4584
|
+
const seenCustom = new Set();
|
|
4585
|
+
customWrappers.forEach((wrapperType) => {
|
|
4586
|
+
const name = wrapperType.wrapperName;
|
|
4587
|
+
if (seenCustom.has(name) && !builtInNames.has(name)) {
|
|
4588
|
+
logger.warn(`Wrapper type "${name}" is already registered. Overwriting.`);
|
|
4533
4589
|
}
|
|
4534
|
-
|
|
4590
|
+
seenCustom.add(name);
|
|
4591
|
+
registry.set(name, wrapperType);
|
|
4535
4592
|
});
|
|
4536
4593
|
return registry;
|
|
4537
4594
|
},
|
|
@@ -4942,4 +4999,4 @@ function arrayEvent(arrayKey) {
|
|
|
4942
4999
|
|
|
4943
5000
|
|
|
4944
5001
|
export { withEventFormValue as $, ArrayItemRegistryService as A, BUILT_IN_FIELDS as B, CONTAINER_FIELD_PROCESSORS as C, DfFieldOutlet as D, EventDispatcher as E, FIELD_WINDOWING as F, GoToPageEvent as G, PageChangeEvent as H, InsertArrayItemEvent as I, PagerStateEvent as J, PopArrayItemEvent as K, PrependArrayItemEvent as L, MoveArrayItemEvent as M, NextPageEvent as N, PreviousPageEvent as O, PROPERTY_OVERRIDE_STORE as P, TextAddonComponent as Q, RemoveAtIndexEvent as R, ShiftArrayItemEvent as S, TemplateAddonComponent as T, arrayEvent as U, createWrappers as V, isWrappersBundle as W, provideDynamicForm as X, sanitizeFormConfig as Y, withAddonActions as Z, withCustomAddon as _, isSameWrapperChain as a, withFieldWindowing as a0, withLegacyStatusClasses as a1, withLoggerConfig as a2, withPagePreload as a3, withValidationExecutionDefaults as a4, withValueExclusionDefaults as a5, wrapperProps as a6, createWrapperChainController as b, createFieldResolutionPipe as c, createSchemaFromFields as d, createHiddenSignal as e, createRenderReadySignal as f, getNormalizedArrayMetadata as g, getFieldDefaultValue as h, injectFieldRegistry as i, resolveFieldWindowing as j, DEV_MODE as k, DEFAULT_DEBOUNCE_MS as l, mapFieldToInputs as m, DERIVATION_WARNING_TRACKER as n, FormStateManager as o, DERIVATION_LOG_CONFIG as p, AppendArrayItemEvent as q, resolveWrappers as r, ComponentAddonComponent as s, traverseFieldsWithContext as t, ConsoleLogger as u, DfTemplate as v, DynamicForm as w, FormClearEvent as x, FormResetEvent as y, FormSubmitEvent as z };
|
|
4945
|
-
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-
|
|
5002
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-ng-forge-dynamic-forms-B2C_WAMP.mjs.map
|