@ng-forge/dynamic-forms 0.2.0 → 0.3.1
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 +7 -5
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +79 -6
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-ng-forge-dynamic-forms-CZBdtTAU.mjs → ng-forge-dynamic-forms-ng-forge-dynamic-forms-D58rojQc.mjs} +375 -78
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-D58rojQc.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-BM32StxL.mjs → ng-forge-dynamic-forms-page-field.component-m35XgkkL.mjs} +13 -7
- package/fesm2022/ng-forge-dynamic-forms-page-field.component-m35XgkkL.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-testing-test-button.harness-CbctXjtc.mjs → ng-forge-dynamic-forms-testing-test-button.harness-0iXHLraC.mjs} +7 -7
- package/fesm2022/ng-forge-dynamic-forms-testing-test-button.harness-0iXHLraC.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs +25 -25
- package/fesm2022/ng-forge-dynamic-forms-testing.mjs.map +1 -1
- package/fesm2022/{ng-forge-dynamic-forms-text-field.component-C0I8jf9T.mjs → ng-forge-dynamic-forms-text-field.component-CfDZFTyf.mjs} +5 -5
- package/fesm2022/{ng-forge-dynamic-forms-text-field.component-C0I8jf9T.mjs.map → ng-forge-dynamic-forms-text-field.component-CfDZFTyf.mjs.map} +1 -1
- package/fesm2022/ng-forge-dynamic-forms.mjs +1 -1
- package/package.json +4 -4
- package/types/ng-forge-dynamic-forms-integration.d.ts +225 -9
- package/types/ng-forge-dynamic-forms-testing.d.ts +32 -1
- package/types/ng-forge-dynamic-forms.d.ts +211 -18
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CZBdtTAU.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-page-field.component-BM32StxL.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-testing-test-button.harness-CbctXjtc.mjs.map +0 -1
|
@@ -17,6 +17,39 @@ type Prettify<T> = {
|
|
|
17
17
|
|
|
18
18
|
type DynamicText = string | Observable<string> | Signal<string>;
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Base interface for native HTML attributes that can be passed to form field elements.
|
|
22
|
+
*
|
|
23
|
+
* This interface serves as the base type for all meta attributes. Specific field types
|
|
24
|
+
* (like input, textarea) extend this with their own specialized meta types.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Using FieldMeta for custom attributes
|
|
29
|
+
* meta: {
|
|
30
|
+
* 'data-testid': 'email-input',
|
|
31
|
+
* 'aria-describedby': 'email-help',
|
|
32
|
+
* 'x-custom': 'value'
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
interface FieldMeta {
|
|
39
|
+
/**
|
|
40
|
+
* Allows any data-* attribute
|
|
41
|
+
*/
|
|
42
|
+
[key: `data-${string}`]: string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Allows any aria-* attribute
|
|
45
|
+
*/
|
|
46
|
+
[key: `aria-${string}`]: string | boolean | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Allows additional custom attributes as escape hatch
|
|
49
|
+
*/
|
|
50
|
+
[key: string]: string | number | boolean | undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
20
53
|
/**
|
|
21
54
|
* Base interface for all dynamic form field definitions.
|
|
22
55
|
*
|
|
@@ -56,10 +89,11 @@ type DynamicText = string | Observable<string> | Signal<string>;
|
|
|
56
89
|
* ```
|
|
57
90
|
*
|
|
58
91
|
* @typeParam TProps - Field-specific properties interface
|
|
92
|
+
* @typeParam TMeta - Native HTML attributes interface (extends FieldMeta)
|
|
59
93
|
*
|
|
60
94
|
* @public
|
|
61
95
|
*/
|
|
62
|
-
interface FieldDef<TProps> {
|
|
96
|
+
interface FieldDef<TProps, TMeta extends FieldMeta = FieldMeta> {
|
|
63
97
|
/**
|
|
64
98
|
* Unique field identifier used for form binding and value tracking.
|
|
65
99
|
*
|
|
@@ -136,6 +170,32 @@ interface FieldDef<TProps> {
|
|
|
136
170
|
* ```
|
|
137
171
|
*/
|
|
138
172
|
props?: TProps;
|
|
173
|
+
/**
|
|
174
|
+
* Native HTML attributes to pass through to the underlying element.
|
|
175
|
+
*
|
|
176
|
+
* Contains attributes that are applied directly to the native input/element.
|
|
177
|
+
* Useful for accessibility, autocomplete hints, and custom attributes.
|
|
178
|
+
* The shape is defined by the TMeta generic parameter, which extends FieldMeta.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* // Input field meta
|
|
183
|
+
* meta: {
|
|
184
|
+
* autocomplete: 'email',
|
|
185
|
+
* inputmode: 'email',
|
|
186
|
+
* 'aria-describedby': 'email-help',
|
|
187
|
+
* 'data-testid': 'email-input'
|
|
188
|
+
* }
|
|
189
|
+
*
|
|
190
|
+
* // Textarea meta
|
|
191
|
+
* meta: {
|
|
192
|
+
* wrap: 'soft',
|
|
193
|
+
* spellcheck: true,
|
|
194
|
+
* 'aria-label': 'Description field'
|
|
195
|
+
* }
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
meta?: TMeta;
|
|
139
199
|
/**
|
|
140
200
|
* Additional CSS classes for custom styling.
|
|
141
201
|
*
|
|
@@ -236,7 +296,7 @@ type IncludedKeys = 'label' | 'className' | 'hidden' | 'tabIndex';
|
|
|
236
296
|
*
|
|
237
297
|
* @public
|
|
238
298
|
*/
|
|
239
|
-
type FieldComponent<T extends FieldDef<
|
|
299
|
+
type FieldComponent<T extends FieldDef<unknown, FieldMeta>> = Prettify<WithInputSignals<Pick<T, IncludedKeys>>>;
|
|
240
300
|
|
|
241
301
|
/**
|
|
242
302
|
* Re-export Angular's ValidationError for consistency
|
|
@@ -261,8 +321,10 @@ interface ValidationMessages {
|
|
|
261
321
|
* This is a programmatic field type only - users cannot customize this field type
|
|
262
322
|
*
|
|
263
323
|
* TypeScript cannot enforce field nesting rules due to circular dependency limitations.
|
|
264
|
-
* For documentation: Rows should contain groups and leaf fields, but NOT pages or
|
|
324
|
+
* For documentation: Rows should contain groups and leaf fields, but NOT pages, other rows, or hidden fields.
|
|
265
325
|
* Runtime validation enforces these rules.
|
|
326
|
+
*
|
|
327
|
+
* Note: Rows are container fields and do not support `meta` since they have no native form element.
|
|
266
328
|
*/
|
|
267
329
|
interface RowField<TFields extends readonly RowAllowedChildren[] = readonly RowAllowedChildren[]> extends FieldDef<never> {
|
|
268
330
|
type: 'row';
|
|
@@ -270,6 +332,8 @@ interface RowField<TFields extends readonly RowAllowedChildren[] = readonly RowA
|
|
|
270
332
|
readonly fields: TFields;
|
|
271
333
|
/** Row fields do not have a label property **/
|
|
272
334
|
readonly label?: never;
|
|
335
|
+
/** Rows do not support meta - they have no native form element **/
|
|
336
|
+
readonly meta?: never;
|
|
273
337
|
}
|
|
274
338
|
/**
|
|
275
339
|
* Type guard for RowField with proper type narrowing
|
|
@@ -284,18 +348,74 @@ declare function isRowField(field: FieldDef<any>): field is RowField;
|
|
|
284
348
|
* TypeScript cannot enforce field nesting rules due to circular dependency limitations.
|
|
285
349
|
* For documentation: Groups should contain rows and leaf fields, but NOT pages or other groups.
|
|
286
350
|
* Runtime validation enforces these rules.
|
|
351
|
+
*
|
|
352
|
+
* Note: Groups are container fields and do not support `meta` since they have no native form element.
|
|
287
353
|
*/
|
|
288
354
|
interface GroupField<TFields extends readonly GroupAllowedChildren[] = readonly GroupAllowedChildren[]> extends FieldDef<never> {
|
|
289
355
|
type: 'group';
|
|
290
356
|
readonly fields: TFields;
|
|
291
357
|
/** Groups do not have a label property - they are logical containers only **/
|
|
292
358
|
readonly label?: never;
|
|
359
|
+
/** Groups do not support meta - they have no native form element **/
|
|
360
|
+
readonly meta?: never;
|
|
293
361
|
}
|
|
294
362
|
/**
|
|
295
363
|
* Type guard for GroupField with proper type narrowing
|
|
296
364
|
*/
|
|
297
365
|
declare function isGroupField(field: FieldDef<any>): field is GroupField;
|
|
298
366
|
|
|
367
|
+
/**
|
|
368
|
+
* Scalar types supported by hidden fields.
|
|
369
|
+
* These are the primitive value types that can be stored.
|
|
370
|
+
*/
|
|
371
|
+
type HiddenScalar = string | number | boolean;
|
|
372
|
+
/**
|
|
373
|
+
* All value types supported by hidden fields.
|
|
374
|
+
* Supports both scalar values and arrays of scalars for storing
|
|
375
|
+
* multiple IDs or similar data.
|
|
376
|
+
*/
|
|
377
|
+
type HiddenValue = HiddenScalar | HiddenScalar[];
|
|
378
|
+
/**
|
|
379
|
+
* Hidden field definition for storing values without rendering UI.
|
|
380
|
+
*
|
|
381
|
+
* Hidden fields participate in the form schema and contribute to form values,
|
|
382
|
+
* but do not render any visible component. They are useful for:
|
|
383
|
+
* - Storing IDs when updating existing records
|
|
384
|
+
* - Persisting metadata that shouldn't be user-editable
|
|
385
|
+
* - Tracking computed values that need to be submitted
|
|
386
|
+
*
|
|
387
|
+
* Unlike the `hidden` property on other fields (which hides a rendered field),
|
|
388
|
+
* this field type renders nothing at all - it's a componentless field.
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* ```typescript
|
|
392
|
+
* // Store a record ID for updates
|
|
393
|
+
* const idField: HiddenField<string> = {
|
|
394
|
+
* type: 'hidden',
|
|
395
|
+
* key: 'id',
|
|
396
|
+
* value: '550e8400-e29b-41d4-a716-446655440000',
|
|
397
|
+
* };
|
|
398
|
+
*
|
|
399
|
+
* // Store multiple tag IDs
|
|
400
|
+
* const tagIdsField: HiddenField<number[]> = {
|
|
401
|
+
* type: 'hidden',
|
|
402
|
+
* key: 'tagIds',
|
|
403
|
+
* value: [1, 2, 3],
|
|
404
|
+
* };
|
|
405
|
+
* ```
|
|
406
|
+
*
|
|
407
|
+
* @typeParam TValue - The type of value stored (must be HiddenValue compatible)
|
|
408
|
+
*/
|
|
409
|
+
interface HiddenField<TValue extends HiddenValue = HiddenValue> extends FieldDef<never> {
|
|
410
|
+
/** Discriminant for hidden field type */
|
|
411
|
+
type: 'hidden';
|
|
412
|
+
/**
|
|
413
|
+
* The value to store in the form.
|
|
414
|
+
* This is required - a hidden field without a value serves no purpose.
|
|
415
|
+
*/
|
|
416
|
+
value: TValue;
|
|
417
|
+
}
|
|
418
|
+
|
|
299
419
|
/**
|
|
300
420
|
* Type constraints for field nesting rules
|
|
301
421
|
* These ensure that container fields can only contain valid child field types
|
|
@@ -309,9 +429,10 @@ declare function isGroupField(field: FieldDef<any>): field is GroupField;
|
|
|
309
429
|
type PageAllowedChildren = LeafFieldTypes | RowField | GroupField | ArrayField;
|
|
310
430
|
/**
|
|
311
431
|
* Fields that are allowed as children of Row fields
|
|
312
|
-
* Rows can contain: groups, arrays, and leaf fields (but NOT pages or
|
|
432
|
+
* Rows can contain: groups, arrays, and leaf fields (but NOT pages, other rows, or hidden fields)
|
|
433
|
+
* Hidden fields are excluded because rows are for horizontal layouts and hidden fields don't render
|
|
313
434
|
*/
|
|
314
|
-
type RowAllowedChildren = LeafFieldTypes | GroupField | ArrayField;
|
|
435
|
+
type RowAllowedChildren = Exclude<LeafFieldTypes, HiddenField> | GroupField | ArrayField;
|
|
315
436
|
/**
|
|
316
437
|
* Fields that are allowed as children of Group fields
|
|
317
438
|
* Groups can contain: rows and leaf fields (but NOT pages or other groups)
|
|
@@ -359,6 +480,8 @@ type ArrayAllowedChildren = LeafFieldTypes | RowField | GroupField;
|
|
|
359
480
|
*
|
|
360
481
|
* Nesting constraints: Arrays can contain rows, leaf fields, or groups (for object arrays),
|
|
361
482
|
* but NOT pages or other arrays. Runtime validation enforces these rules.
|
|
483
|
+
*
|
|
484
|
+
* Note: Arrays are container fields and do not support `meta` since they have no native form element.
|
|
362
485
|
*/
|
|
363
486
|
interface ArrayField<TFields extends readonly ArrayAllowedChildren[] = readonly ArrayAllowedChildren[]> extends FieldDef<never> {
|
|
364
487
|
type: 'array';
|
|
@@ -371,6 +494,8 @@ interface ArrayField<TFields extends readonly ArrayAllowedChildren[] = readonly
|
|
|
371
494
|
readonly fields: TFields;
|
|
372
495
|
/** Array fields do not have a label property **/
|
|
373
496
|
readonly label?: never;
|
|
497
|
+
/** Arrays do not support meta - they have no native form element **/
|
|
498
|
+
readonly meta?: never;
|
|
374
499
|
}
|
|
375
500
|
/**
|
|
376
501
|
* Type guard for ArrayField with proper type narrowing
|
|
@@ -416,6 +541,8 @@ interface PageLogicConfig {
|
|
|
416
541
|
* TypeScript cannot enforce field nesting rules due to circular dependency limitations.
|
|
417
542
|
* For documentation: Pages should contain rows, groups, and leaf fields, but NOT other pages.
|
|
418
543
|
* Runtime validation enforces these rules.
|
|
544
|
+
*
|
|
545
|
+
* Note: Pages are container fields and do not support `meta` since they have no native form element.
|
|
419
546
|
*/
|
|
420
547
|
interface PageField<TFields extends readonly PageAllowedChildren[] = PageAllowedChildren[]> extends FieldDef<never> {
|
|
421
548
|
type: 'page';
|
|
@@ -423,6 +550,8 @@ interface PageField<TFields extends readonly PageAllowedChildren[] = PageAllowed
|
|
|
423
550
|
readonly fields: TFields;
|
|
424
551
|
/** Page fields do not have a label property **/
|
|
425
552
|
readonly label?: never;
|
|
553
|
+
/** Pages do not support meta - they have no native form element **/
|
|
554
|
+
readonly meta?: never;
|
|
426
555
|
/**
|
|
427
556
|
* Logic configurations for conditional page visibility.
|
|
428
557
|
* Only 'hidden' type logic is supported for pages.
|
|
@@ -618,6 +747,7 @@ interface FieldRegistryContainers {
|
|
|
618
747
|
*/
|
|
619
748
|
interface FieldRegistryLeaves {
|
|
620
749
|
text: TextField;
|
|
750
|
+
hidden: HiddenField;
|
|
621
751
|
}
|
|
622
752
|
/**
|
|
623
753
|
* Global interface for dynamic form field definitions with categorization
|
|
@@ -1957,14 +2087,44 @@ interface FieldTypeDefinition<T extends FieldDef<any> = any> {
|
|
|
1957
2087
|
/** Field definition type marker (internal use) */
|
|
1958
2088
|
_fieldDef?: T;
|
|
1959
2089
|
/**
|
|
1960
|
-
* Function to load the component (supports lazy loading)
|
|
1961
|
-
* Returns a Promise that resolves to the component class or module with default export
|
|
2090
|
+
* Function to load the component (supports lazy loading).
|
|
2091
|
+
* Returns a Promise that resolves to the component class or module with default export.
|
|
2092
|
+
*
|
|
2093
|
+
* Optional - omit for componentless fields (e.g., hidden fields) that only
|
|
2094
|
+
* contribute to form values without rendering any UI.
|
|
1962
2095
|
*/
|
|
1963
2096
|
loadComponent?: () => Promise<any>;
|
|
1964
|
-
/**
|
|
1965
|
-
|
|
2097
|
+
/**
|
|
2098
|
+
* Mapper function that converts field definition to component bindings.
|
|
2099
|
+
*
|
|
2100
|
+
* Optional - omit for componentless fields (like hidden fields) that don't need
|
|
2101
|
+
* input mapping. When omitted for componentless fields (no loadComponent), an empty
|
|
2102
|
+
* signal is returned. When omitted for regular fields with a component, falls back
|
|
2103
|
+
* to baseFieldMapper.
|
|
2104
|
+
*/
|
|
2105
|
+
mapper?: MapperFn<T>;
|
|
1966
2106
|
/** How this field type handles form values and data collection (defaults to 'include') */
|
|
1967
2107
|
valueHandling?: ValueHandlingMode;
|
|
2108
|
+
/**
|
|
2109
|
+
* List of prop keys to forward to the meta object.
|
|
2110
|
+
*
|
|
2111
|
+
* Some props (like `type` for inputs, `rows`/`cols` for textareas) are actually
|
|
2112
|
+
* native HTML attributes. Specifying them here causes them to be merged into
|
|
2113
|
+
* the meta object before being passed to the component, ensuring they're applied
|
|
2114
|
+
* via the meta tracking mechanism.
|
|
2115
|
+
*
|
|
2116
|
+
* Note: Meta values always take precedence over forwarded props.
|
|
2117
|
+
*
|
|
2118
|
+
* @example
|
|
2119
|
+
* ```typescript
|
|
2120
|
+
* {
|
|
2121
|
+
* name: 'input',
|
|
2122
|
+
* propsToMeta: ['type'],
|
|
2123
|
+
* // ...
|
|
2124
|
+
* }
|
|
2125
|
+
* ```
|
|
2126
|
+
*/
|
|
2127
|
+
propsToMeta?: string[];
|
|
1968
2128
|
}
|
|
1969
2129
|
/**
|
|
1970
2130
|
* Injection token for the global field type registry.
|
|
@@ -2665,7 +2825,7 @@ interface FieldWithValidation {
|
|
|
2665
2825
|
* This type represents all possible value types that can be used in form fields.
|
|
2666
2826
|
*/
|
|
2667
2827
|
type ValueType = string | number | boolean | Date | object | unknown[];
|
|
2668
|
-
interface BaseValueField<TProps, TValue> extends FieldDef<TProps>, FieldWithValidation {
|
|
2828
|
+
interface BaseValueField<TProps, TValue, TMeta extends FieldMeta = FieldMeta> extends FieldDef<TProps, TMeta>, FieldWithValidation {
|
|
2669
2829
|
value?: TValue;
|
|
2670
2830
|
/**
|
|
2671
2831
|
* Placeholder text displayed when the field is empty.
|
|
@@ -2674,11 +2834,11 @@ interface BaseValueField<TProps, TValue> extends FieldDef<TProps>, FieldWithVali
|
|
|
2674
2834
|
placeholder?: DynamicText;
|
|
2675
2835
|
required?: boolean;
|
|
2676
2836
|
}
|
|
2677
|
-
declare function isValueField<TProps>(field: FieldDef<TProps>): field is BaseValueField<TProps, ValueType>;
|
|
2837
|
+
declare function isValueField<TProps, TMeta extends FieldMeta = FieldMeta>(field: FieldDef<TProps, TMeta>): field is BaseValueField<TProps, ValueType, TMeta>;
|
|
2678
2838
|
type ExcludedKeys$1 = 'type' | 'conditionals' | 'value' | 'valueType' | 'disabled' | 'readonly' | 'hidden' | 'col' | 'minValue' | 'maxValue' | 'step' | 'required' | 'email' | 'min' | 'max' | 'minLength' | 'maxLength' | 'pattern' | 'validators' | 'logic' | 'schemas';
|
|
2679
2839
|
type ValueFieldComponent<T extends BaseValueField<Record<string, unknown> | unknown, unknown>> = Prettify<WithInputSignals<Omit<T, ExcludedKeys$1>>>;
|
|
2680
2840
|
|
|
2681
|
-
interface BaseCheckedField<TProps> extends FieldDef<TProps>, FieldWithValidation {
|
|
2841
|
+
interface BaseCheckedField<TProps, TMeta extends FieldMeta = FieldMeta> extends FieldDef<TProps, TMeta>, FieldWithValidation {
|
|
2682
2842
|
value?: boolean;
|
|
2683
2843
|
/**
|
|
2684
2844
|
* Placeholder text displayed when the field is empty.
|
|
@@ -2687,7 +2847,7 @@ interface BaseCheckedField<TProps> extends FieldDef<TProps>, FieldWithValidation
|
|
|
2687
2847
|
placeholder?: DynamicText;
|
|
2688
2848
|
required?: boolean;
|
|
2689
2849
|
}
|
|
2690
|
-
declare function isCheckedField<TProps>(field: FieldDef<TProps>): field is BaseCheckedField<TProps>;
|
|
2850
|
+
declare function isCheckedField<TProps, TMeta extends FieldMeta = FieldMeta>(field: FieldDef<TProps, TMeta>): field is BaseCheckedField<TProps, TMeta>;
|
|
2691
2851
|
type ExcludedKeys = 'type' | 'conditionals' | 'value' | 'disabled' | 'readonly' | 'hidden' | 'col' | keyof FieldWithValidation;
|
|
2692
2852
|
type CheckedFieldComponent<T extends BaseCheckedField<Record<string, unknown> | unknown>> = Prettify<WithInputSignals<Omit<T, ExcludedKeys>>>;
|
|
2693
2853
|
|
|
@@ -3001,6 +3161,33 @@ declare function textFieldMapper(fieldDef: TextField): Signal<Record<string, unk
|
|
|
3001
3161
|
*/
|
|
3002
3162
|
declare function dynamicTextToObservable(value: DynamicText | undefined, injector?: Injector): Observable<string>;
|
|
3003
3163
|
|
|
3164
|
+
/**
|
|
3165
|
+
* Applies meta attributes to a DOM element and tracks which attributes were applied.
|
|
3166
|
+
*
|
|
3167
|
+
* This utility handles:
|
|
3168
|
+
* - Removing previously applied attributes that are no longer in meta
|
|
3169
|
+
* - Setting new attributes from meta
|
|
3170
|
+
* - Converting all values to strings via String()
|
|
3171
|
+
*
|
|
3172
|
+
* @param element - The DOM element to apply attributes to
|
|
3173
|
+
* @param meta - The meta object containing attributes to apply
|
|
3174
|
+
* @param previouslyApplied - Set of attribute names that were previously applied
|
|
3175
|
+
* @returns A new Set containing the attribute names that were applied
|
|
3176
|
+
*
|
|
3177
|
+
* @example
|
|
3178
|
+
* ```typescript
|
|
3179
|
+
* private appliedAttrs = new Set<string>();
|
|
3180
|
+
*
|
|
3181
|
+
* explicitEffect([this.meta], ([meta]) => {
|
|
3182
|
+
* const input = this.el.nativeElement.querySelector('input');
|
|
3183
|
+
* if (input) {
|
|
3184
|
+
* this.appliedAttrs = applyMetaToElement(input, meta, this.appliedAttrs);
|
|
3185
|
+
* }
|
|
3186
|
+
* });
|
|
3187
|
+
* ```
|
|
3188
|
+
*/
|
|
3189
|
+
declare function applyMetaToElement(element: Element, meta: FieldMeta | undefined, previouslyApplied: Set<string>): Set<string>;
|
|
3190
|
+
|
|
3004
3191
|
/**
|
|
3005
3192
|
* Pipe that handles dynamic text resolution with support for static strings,
|
|
3006
3193
|
* Observables, and Signals.
|
|
@@ -3052,6 +3239,8 @@ declare class RowFieldComponent {
|
|
|
3052
3239
|
private readonly logger;
|
|
3053
3240
|
field: _angular_core.InputSignal<RowField<readonly _ng_forge_dynamic_forms.RowAllowedChildren[]>>;
|
|
3054
3241
|
key: _angular_core.InputSignal<string>;
|
|
3242
|
+
className: _angular_core.InputSignal<string | undefined>;
|
|
3243
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
3055
3244
|
readonly disabled: _angular_core.Signal<boolean>;
|
|
3056
3245
|
private readonly rawFieldRegistry;
|
|
3057
3246
|
private readonly fieldsSource;
|
|
@@ -3059,7 +3248,7 @@ declare class RowFieldComponent {
|
|
|
3059
3248
|
constructor();
|
|
3060
3249
|
private setupEffects;
|
|
3061
3250
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RowFieldComponent, never>;
|
|
3062
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RowFieldComponent, "div[row-field]", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3251
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RowFieldComponent, "div[row-field]", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3063
3252
|
}
|
|
3064
3253
|
|
|
3065
3254
|
/**
|
|
@@ -3081,6 +3270,8 @@ declare class GroupFieldComponent<TModel extends Record<string, unknown> = Recor
|
|
|
3081
3270
|
private readonly memoizedDefaultValues;
|
|
3082
3271
|
field: _angular_core.InputSignal<GroupField<readonly _ng_forge_dynamic_forms.GroupAllowedChildren[]>>;
|
|
3083
3272
|
key: _angular_core.InputSignal<string>;
|
|
3273
|
+
className: _angular_core.InputSignal<string | undefined>;
|
|
3274
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
3084
3275
|
private readonly rawFieldRegistry;
|
|
3085
3276
|
private readonly formSetup;
|
|
3086
3277
|
readonly defaultValues: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
@@ -3103,7 +3294,7 @@ declare class GroupFieldComponent<TModel extends Record<string, unknown> = Recor
|
|
|
3103
3294
|
constructor();
|
|
3104
3295
|
private setupEffects;
|
|
3105
3296
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GroupFieldComponent<any>, never>;
|
|
3106
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GroupFieldComponent<any>, "fieldset[group-field]", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; }, { "validityChange": "validityChange"; "dirtyChange": "dirtyChange"; "submitted": "submitted"; }, never, never, true, never>;
|
|
3297
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GroupFieldComponent<any>, "fieldset[group-field]", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "validityChange": "validityChange"; "dirtyChange": "dirtyChange"; "submitted": "submitted"; }, never, never, true, never>;
|
|
3107
3298
|
}
|
|
3108
3299
|
|
|
3109
3300
|
/**
|
|
@@ -3138,6 +3329,8 @@ declare class ArrayFieldComponent<TModel extends Record<string, unknown> = Recor
|
|
|
3138
3329
|
private readonly logger;
|
|
3139
3330
|
field: _angular_core.InputSignal<ArrayField<readonly _ng_forge_dynamic_forms.ArrayAllowedChildren[]>>;
|
|
3140
3331
|
key: _angular_core.InputSignal<string>;
|
|
3332
|
+
className: _angular_core.InputSignal<string | undefined>;
|
|
3333
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
3141
3334
|
private readonly rawFieldRegistry;
|
|
3142
3335
|
private readonly fieldTemplate;
|
|
3143
3336
|
private readonly arrayFieldTrees;
|
|
@@ -3155,7 +3348,7 @@ declare class ArrayFieldComponent<TModel extends Record<string, unknown> = Recor
|
|
|
3155
3348
|
private addItem;
|
|
3156
3349
|
private removeItem;
|
|
3157
3350
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ArrayFieldComponent<any>, never>;
|
|
3158
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArrayFieldComponent<any>, "array-field", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3351
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ArrayFieldComponent<any>, "array-field", never, { "field": { "alias": "field"; "required": true; "isSignal": true; }; "key": { "alias": "key"; "required": true; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3159
3352
|
}
|
|
3160
3353
|
|
|
3161
3354
|
/**
|
|
@@ -3203,5 +3396,5 @@ declare function omit<T extends object, K extends keyof T>(obj: T, keys: K[]): O
|
|
|
3203
3396
|
*/
|
|
3204
3397
|
declare function interpolateParams(message: string, error: ValidationError): string;
|
|
3205
3398
|
|
|
3206
|
-
export { ARRAY_CONTEXT, AddArrayItemEvent, ArrayFieldComponent, BUILT_IN_FIELDS, ConsoleLogger, DynamicForm, DynamicFormError, DynamicFormLogger, DynamicTextPipe, EventBus, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FormClearEvent, FormResetEvent, GroupFieldComponent, NextPageEvent, NoopLogger, PageChangeEvent, PreviousPageEvent, RemoveArrayItemEvent, RowFieldComponent, SubmitEvent, applyValidator, applyValidators, arrayFieldMapper, baseFieldMapper, buildBaseInputs, dynamicTextToObservable, getArrayLength, groupFieldMapper, interpolateParams, isArrayField, isCheckedField, isContainerField, isDisplayOnlyField, isFormStateCondition, isGroupField, isLeafField, isPageField, isRowField, isValueBearingField, isValueField, omit, pageFieldMapper, provideDynamicForm, resolveNextButtonDisabled, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, textFieldMapper, withLoggerConfig };
|
|
3207
|
-
export type { ArrayAllowedChildren, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemContext, AsyncCustomValidator, AsyncValidatorConfig, AvailableFieldTypes, BaseCheckedField, BaseValidatorConfig, BaseValueField, BuiltInValidatorConfig, ButtonLogicContext, CheckedFieldComponent, ConditionalExpression, ContainerFieldTypes, CustomFnConfig, CustomValidator, CustomValidatorConfig, DynamicFormFieldRegistry, DynamicText, EvaluationContext, ExtractField, ExtractFieldDefs, ExtractFormValue, FieldComponent, FieldDef, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldSignalContext, FieldTypeDefinition, FieldWithValidation, FormConfig, FormEvent, FormEventConstructor, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, GroupAllowedChildren, GroupField, HttpCustomValidator, HttpResourceRequest, HttpValidatorConfig, InferFormValue$1 as InferFormValue, LeafFieldTypes, Logger, LogicConfig, MapperFn, NarrowField, NarrowFields, NextButtonOptions, PageAllowedChildren, PageField, Prettify, RegisteredFieldTypes, RowAllowedChildren, RowField, SchemaApplicationConfig, SchemaDefinition, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationMessages, ValidatorConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WithInputSignals };
|
|
3399
|
+
export { ARRAY_CONTEXT, AddArrayItemEvent, ArrayFieldComponent, BUILT_IN_FIELDS, ConsoleLogger, DynamicForm, DynamicFormError, DynamicFormLogger, DynamicTextPipe, EventBus, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FormClearEvent, FormResetEvent, GroupFieldComponent, NextPageEvent, NoopLogger, PageChangeEvent, PreviousPageEvent, RemoveArrayItemEvent, RowFieldComponent, SubmitEvent, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, baseFieldMapper, buildBaseInputs, dynamicTextToObservable, getArrayLength, groupFieldMapper, interpolateParams, isArrayField, isCheckedField, isContainerField, isDisplayOnlyField, isFormStateCondition, isGroupField, isLeafField, isPageField, isRowField, isValueBearingField, isValueField, omit, pageFieldMapper, provideDynamicForm, resolveNextButtonDisabled, resolveSubmitButtonDisabled, resolveTokens, rowFieldMapper, textFieldMapper, withLoggerConfig };
|
|
3400
|
+
export type { ArrayAllowedChildren, ArrayContext, ArrayField, ArrayFieldTree, ArrayItemContext, AsyncCustomValidator, AsyncValidatorConfig, AvailableFieldTypes, BaseCheckedField, BaseValidatorConfig, BaseValueField, BuiltInValidatorConfig, ButtonLogicContext, CheckedFieldComponent, ConditionalExpression, ContainerFieldTypes, CustomFnConfig, CustomValidator, CustomValidatorConfig, DynamicFormFieldRegistry, DynamicText, EvaluationContext, ExtractField, ExtractFieldDefs, ExtractFormValue, FieldComponent, FieldDef, FieldMeta, FieldOption, FieldPathAccess, FieldRegistryContainers, FieldRegistryLeaves, FieldSignalContext, FieldTypeDefinition, FieldWithValidation, FormConfig, FormEvent, FormEventConstructor, FormMode, FormModeDetectionResult, FormOptions, FormStateCondition, GroupAllowedChildren, GroupField, HttpCustomValidator, HttpResourceRequest, HttpValidatorConfig, InferFormValue$1 as InferFormValue, LeafFieldTypes, Logger, LogicConfig, MapperFn, NarrowField, NarrowFields, NextButtonOptions, PageAllowedChildren, PageField, Prettify, RegisteredFieldTypes, RowAllowedChildren, RowField, SchemaApplicationConfig, SchemaDefinition, SubmissionActionResult, SubmissionConfig, SubmitButtonOptions, TextElementType, TextField, TextProps, TokenContext, ValidationError, ValidationMessages, ValidatorConfig, ValueFieldComponent, ValueHandlingMode, ValueType, WithInputSignals };
|