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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/fesm2022/ng-forge-dynamic-forms-material-lazy-addon-button.mjs +118 -33
  2. package/fesm2022/ng-forge-dynamic-forms-material-lazy-addon-button.mjs.map +1 -1
  3. package/fesm2022/ng-forge-dynamic-forms-material-lazy-addon-icon.mjs +112 -33
  4. package/fesm2022/ng-forge-dynamic-forms-material-lazy-addon-icon.mjs.map +1 -1
  5. package/fesm2022/ng-forge-dynamic-forms-material-lazy-button.mjs +96 -33
  6. package/fesm2022/ng-forge-dynamic-forms-material-lazy-button.mjs.map +1 -1
  7. package/fesm2022/ng-forge-dynamic-forms-material-lazy-checkbox.mjs +137 -29
  8. package/fesm2022/ng-forge-dynamic-forms-material-lazy-checkbox.mjs.map +1 -1
  9. package/fesm2022/ng-forge-dynamic-forms-material-lazy-datepicker.mjs +316 -62
  10. package/fesm2022/ng-forge-dynamic-forms-material-lazy-datepicker.mjs.map +1 -1
  11. package/fesm2022/ng-forge-dynamic-forms-material-lazy-input.mjs +253 -107
  12. package/fesm2022/ng-forge-dynamic-forms-material-lazy-input.mjs.map +1 -1
  13. package/fesm2022/ng-forge-dynamic-forms-material-lazy-multi-checkbox.mjs +179 -65
  14. package/fesm2022/ng-forge-dynamic-forms-material-lazy-multi-checkbox.mjs.map +1 -1
  15. package/fesm2022/ng-forge-dynamic-forms-material-lazy-radio.mjs +168 -27
  16. package/fesm2022/ng-forge-dynamic-forms-material-lazy-radio.mjs.map +1 -1
  17. package/fesm2022/ng-forge-dynamic-forms-material-lazy-select.mjs +253 -56
  18. package/fesm2022/ng-forge-dynamic-forms-material-lazy-select.mjs.map +1 -1
  19. package/fesm2022/ng-forge-dynamic-forms-material-lazy-slider.mjs +157 -27
  20. package/fesm2022/ng-forge-dynamic-forms-material-lazy-slider.mjs.map +1 -1
  21. package/fesm2022/ng-forge-dynamic-forms-material-lazy-textarea.mjs +206 -51
  22. package/fesm2022/ng-forge-dynamic-forms-material-lazy-textarea.mjs.map +1 -1
  23. package/fesm2022/ng-forge-dynamic-forms-material-lazy-toggle.mjs +134 -29
  24. package/fesm2022/ng-forge-dynamic-forms-material-lazy-toggle.mjs.map +1 -1
  25. package/fesm2022/ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-bFeO_Ift.mjs +64 -0
  26. package/fesm2022/ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-bFeO_Ift.mjs.map +1 -0
  27. package/fesm2022/ng-forge-dynamic-forms-material-shared.mjs +7 -11
  28. package/fesm2022/ng-forge-dynamic-forms-material-shared.mjs.map +1 -1
  29. package/fesm2022/ng-forge-dynamic-forms-material.mjs +241 -260
  30. package/fesm2022/ng-forge-dynamic-forms-material.mjs.map +1 -1
  31. package/package.json +2 -2
  32. package/types/ng-forge-dynamic-forms-material-lazy-addon-button.d.ts +17 -17
  33. package/types/ng-forge-dynamic-forms-material-lazy-addon-icon.d.ts +23 -16
  34. package/types/ng-forge-dynamic-forms-material-lazy-button.d.ts +87 -81
  35. package/types/ng-forge-dynamic-forms-material-lazy-checkbox.d.ts +27 -21
  36. package/types/ng-forge-dynamic-forms-material-lazy-datepicker.d.ts +68 -40
  37. package/types/ng-forge-dynamic-forms-material-lazy-input.d.ts +54 -41
  38. package/types/ng-forge-dynamic-forms-material-lazy-multi-checkbox.d.ts +35 -24
  39. package/types/ng-forge-dynamic-forms-material-lazy-radio.d.ts +30 -19
  40. package/types/ng-forge-dynamic-forms-material-lazy-select.d.ts +56 -38
  41. package/types/ng-forge-dynamic-forms-material-lazy-slider.d.ts +33 -22
  42. package/types/ng-forge-dynamic-forms-material-lazy-textarea.d.ts +47 -34
  43. package/types/ng-forge-dynamic-forms-material-lazy-toggle.d.ts +29 -23
  44. package/types/ng-forge-dynamic-forms-material-shared.d.ts +56 -64
  45. package/types/ng-forge-dynamic-forms-material.d.ts +211 -237
  46. package/fesm2022/ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-Dz2-IbBh.mjs +0 -26
  47. package/fesm2022/ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-Dz2-IbBh.mjs.map +0 -1
@@ -1,279 +1,260 @@
1
- import { DEFAULT_PROPS, ARRAY_CONTEXT, injectNonFieldLogicResolver, buildBaseInputs, valueFieldMapper, optionsFieldMapper, checkboxFieldMapper, submitButtonFieldMapper, nextButtonFieldMapper, previousButtonFieldMapper, addArrayItemButtonMapper, prependArrayItemButtonMapper, insertArrayItemButtonMapper, removeArrayItemButtonMapper, popArrayItemButtonMapper, shiftArrayItemButtonMapper, datepickerFieldMapper, ADDON_TYPE_DEFINITIONS } from '@ng-forge/dynamic-forms/integration';
2
- import { inject, computed, isSignal } from '@angular/core';
3
- import { MATERIAL_CONFIG } from '@ng-forge/dynamic-forms-material/shared';
4
- export { MATERIAL_CONFIG, MAT_INPUT_TYPE_OVERRIDE } from '@ng-forge/dynamic-forms-material/shared';
5
- import { DynamicFormError } from '@ng-forge/dynamic-forms';
6
-
1
+ import { ADDON_TYPE_DEFINITIONS, ARRAY_CONTEXT, DEFAULT_PROPS, addArrayItemButtonMapper, buildBaseInputs, checkboxFieldMapper, datepickerFieldMapper, injectNonFieldLogicResolver, insertArrayItemButtonMapper, nextButtonFieldMapper, optionsFieldMapper, popArrayItemButtonMapper, prependArrayItemButtonMapper, previousButtonFieldMapper, removeArrayItemButtonMapper, shiftArrayItemButtonMapper, submitButtonFieldMapper, valueFieldMapper } from "@ng-forge/dynamic-forms/integration";
2
+ import { computed, inject, isSignal } from "@angular/core";
3
+ import { MATERIAL_CONFIG, MATERIAL_CONFIG as MATERIAL_CONFIG$1, MAT_INPUT_TYPE_OVERRIDE } from "@ng-forge/dynamic-forms-material/shared";
4
+ import { DynamicFormError } from "@ng-forge/dynamic-forms";
7
5
  const MatField = {
8
- Input: 'input',
9
- Select: 'select',
10
- Checkbox: 'checkbox',
11
- Button: 'button',
12
- Submit: 'submit',
13
- Next: 'next',
14
- Previous: 'previous',
15
- AddArrayItem: 'add-array-item',
16
- PrependArrayItem: 'prepend-array-item',
17
- InsertArrayItem: 'insert-array-item',
18
- RemoveArrayItem: 'remove-array-item',
19
- PopArrayItem: 'pop-array-item',
20
- ShiftArrayItem: 'shift-array-item',
21
- Textarea: 'textarea',
22
- Radio: 'radio',
23
- MultiCheckbox: 'multi-checkbox',
24
- Datepicker: 'datepicker',
25
- Slider: 'slider',
26
- Toggle: 'toggle',
6
+ Input: "input",
7
+ Select: "select",
8
+ Checkbox: "checkbox",
9
+ Button: "button",
10
+ Submit: "submit",
11
+ Next: "next",
12
+ Previous: "previous",
13
+ AddArrayItem: "add-array-item",
14
+ PrependArrayItem: "prepend-array-item",
15
+ InsertArrayItem: "insert-array-item",
16
+ RemoveArrayItem: "remove-array-item",
17
+ PopArrayItem: "pop-array-item",
18
+ ShiftArrayItem: "shift-array-item",
19
+ Textarea: "textarea",
20
+ Radio: "radio",
21
+ MultiCheckbox: "multi-checkbox",
22
+ Datepicker: "datepicker",
23
+ Slider: "slider",
24
+ Toggle: "toggle"
27
25
  };
28
-
29
26
  function buttonFieldMapper(fieldDef) {
30
- const defaultProps = inject(DEFAULT_PROPS);
31
- const arrayContext = inject(ARRAY_CONTEXT, { optional: true });
32
- const resolveLogic = injectNonFieldLogicResolver(fieldDef);
33
- return computed(() => {
34
- const baseInputs = buildBaseInputs(fieldDef, defaultProps());
35
- const inputs = {
36
- ...baseInputs,
37
- ...resolveLogic(),
38
- };
39
- if ('event' in fieldDef && fieldDef.event !== undefined) {
40
- inputs['event'] = fieldDef.event;
41
- }
42
- if ('eventArgs' in fieldDef && fieldDef.eventArgs !== undefined) {
43
- inputs['eventArgs'] = fieldDef.eventArgs;
44
- }
45
- const template = 'template' in fieldDef ? fieldDef.template : undefined;
46
- if (template || arrayContext) {
47
- const getIndex = () => {
48
- if (!arrayContext)
49
- return -1;
50
- return isSignal(arrayContext.index) ? arrayContext.index() : arrayContext.index;
51
- };
52
- inputs['eventContext'] = {
53
- key: fieldDef.key,
54
- index: getIndex(),
55
- arrayKey: arrayContext?.arrayKey ?? '',
56
- get formValue() {
57
- return arrayContext?.formValue ?? {};
58
- },
59
- template,
60
- };
61
- }
62
- return inputs;
63
- });
27
+ const defaultProps = inject(DEFAULT_PROPS);
28
+ const arrayContext = inject(ARRAY_CONTEXT, { optional: true });
29
+ const resolveLogic = injectNonFieldLogicResolver(fieldDef);
30
+ return computed(() => {
31
+ const inputs = {
32
+ ...buildBaseInputs(fieldDef, defaultProps()),
33
+ ...resolveLogic()
34
+ };
35
+ if ("event" in fieldDef && fieldDef.event !== void 0) inputs["event"] = fieldDef.event;
36
+ if ("eventArgs" in fieldDef && fieldDef.eventArgs !== void 0) inputs["eventArgs"] = fieldDef.eventArgs;
37
+ const template = "template" in fieldDef ? fieldDef.template : void 0;
38
+ if (template || arrayContext) {
39
+ const getIndex = () => {
40
+ if (!arrayContext) return -1;
41
+ return isSignal(arrayContext.index) ? arrayContext.index() : arrayContext.index;
42
+ };
43
+ inputs["eventContext"] = {
44
+ key: fieldDef.key,
45
+ index: getIndex(),
46
+ arrayKey: arrayContext?.arrayKey ?? "",
47
+ get formValue() {
48
+ return arrayContext?.formValue ?? {};
49
+ },
50
+ template
51
+ };
52
+ }
53
+ return inputs;
54
+ });
64
55
  }
65
-
66
-
67
- const VALUE_FIELD_TYPES_BASE = {
68
- renderReadyWhen: ['field'],
69
- };
56
+ const VALUE_FIELD_TYPES_BASE = { renderReadyWhen: ["field"] };
70
57
  const BUTTON_FIELD_TYPES_BASE = {
71
- renderReadyWhen: [],
72
- valueHandling: 'exclude',
58
+ renderReadyWhen: [],
59
+ valueHandling: "exclude"
73
60
  };
74
- const loadInputComponent = () => import('@ng-forge/dynamic-forms-material/lazy/input').then(({ MatInputFieldComponent }) => MatInputFieldComponent);
75
- const loadSelectComponent = () => import('@ng-forge/dynamic-forms-material/lazy/select').then(({ MatSelectFieldComponent }) => MatSelectFieldComponent);
76
- const loadCheckboxComponent = () => import('@ng-forge/dynamic-forms-material/lazy/checkbox').then(({ MatCheckboxFieldComponent }) => MatCheckboxFieldComponent);
77
- const loadButtonComponent = () => import('@ng-forge/dynamic-forms-material/lazy/button').then(({ MatButtonFieldComponent }) => MatButtonFieldComponent);
78
- const loadTextareaComponent = () => import('@ng-forge/dynamic-forms-material/lazy/textarea').then(({ MatTextareaFieldComponent }) => MatTextareaFieldComponent);
79
- const loadRadioComponent = () => import('@ng-forge/dynamic-forms-material/lazy/radio').then(({ MatRadioFieldComponent }) => MatRadioFieldComponent);
80
- const loadMultiCheckboxComponent = () => import('@ng-forge/dynamic-forms-material/lazy/multi-checkbox').then(({ MatMultiCheckboxFieldComponent }) => MatMultiCheckboxFieldComponent);
81
- const loadDatepickerComponent = () => import('@ng-forge/dynamic-forms-material/lazy/datepicker').then(({ MatDatepickerFieldComponent }) => MatDatepickerFieldComponent);
82
- const loadSliderComponent = () => import('@ng-forge/dynamic-forms-material/lazy/slider').then(({ MatSliderFieldComponent }) => MatSliderFieldComponent);
83
- const loadToggleComponent = () => import('@ng-forge/dynamic-forms-material/lazy/toggle').then(({ MatToggleFieldComponent }) => MatToggleFieldComponent);
61
+ const loadInputComponent = () => import("@ng-forge/dynamic-forms-material/lazy/input").then(({ MatInputFieldComponent }) => MatInputFieldComponent);
62
+ const loadSelectComponent = () => import("@ng-forge/dynamic-forms-material/lazy/select").then(({ MatSelectFieldComponent }) => MatSelectFieldComponent);
63
+ const loadCheckboxComponent = () => import("@ng-forge/dynamic-forms-material/lazy/checkbox").then(({ MatCheckboxFieldComponent }) => MatCheckboxFieldComponent);
64
+ const loadButtonComponent = () => import("@ng-forge/dynamic-forms-material/lazy/button").then(({ MatButtonFieldComponent }) => MatButtonFieldComponent);
65
+ const loadTextareaComponent = () => import("@ng-forge/dynamic-forms-material/lazy/textarea").then(({ MatTextareaFieldComponent }) => MatTextareaFieldComponent);
66
+ const loadRadioComponent = () => import("@ng-forge/dynamic-forms-material/lazy/radio").then(({ MatRadioFieldComponent }) => MatRadioFieldComponent);
67
+ const loadMultiCheckboxComponent = () => import("@ng-forge/dynamic-forms-material/lazy/multi-checkbox").then(({ MatMultiCheckboxFieldComponent }) => MatMultiCheckboxFieldComponent);
68
+ const loadDatepickerComponent = () => import("@ng-forge/dynamic-forms-material/lazy/datepicker").then(({ MatDatepickerFieldComponent }) => MatDatepickerFieldComponent);
69
+ const loadSliderComponent = () => import("@ng-forge/dynamic-forms-material/lazy/slider").then(({ MatSliderFieldComponent }) => MatSliderFieldComponent);
70
+ const loadToggleComponent = () => import("@ng-forge/dynamic-forms-material/lazy/toggle").then(({ MatToggleFieldComponent }) => MatToggleFieldComponent);
84
71
  const MATERIAL_FIELD_TYPES = [
85
- {
86
- name: MatField.Input,
87
- loadComponent: loadInputComponent,
88
- mapper: valueFieldMapper,
89
- propsToMeta: ['type'],
90
- scope: ['text-input', 'numeric'],
91
- addons: {
92
- slots: ['prefix', 'suffix'],
93
- },
94
- ...VALUE_FIELD_TYPES_BASE,
95
- },
96
- {
97
- name: MatField.Select,
98
- loadComponent: loadSelectComponent,
99
- mapper: optionsFieldMapper,
100
- scope: 'single-select',
101
- addons: {
102
- slots: ['prefix', 'suffix'],
103
- },
104
- ...VALUE_FIELD_TYPES_BASE,
105
- },
106
- {
107
- name: MatField.Checkbox,
108
- loadComponent: loadCheckboxComponent,
109
- mapper: checkboxFieldMapper,
110
- scope: 'boolean',
111
- ...VALUE_FIELD_TYPES_BASE,
112
- },
113
- {
114
- name: MatField.Button,
115
- loadComponent: loadButtonComponent,
116
- mapper: buttonFieldMapper,
117
- ...BUTTON_FIELD_TYPES_BASE,
118
- },
119
- {
120
- name: MatField.Submit,
121
- loadComponent: loadButtonComponent,
122
- mapper: submitButtonFieldMapper,
123
- ...BUTTON_FIELD_TYPES_BASE,
124
- },
125
- {
126
- name: MatField.Next,
127
- loadComponent: loadButtonComponent,
128
- mapper: nextButtonFieldMapper,
129
- ...BUTTON_FIELD_TYPES_BASE,
130
- },
131
- {
132
- name: MatField.Previous,
133
- loadComponent: loadButtonComponent,
134
- mapper: previousButtonFieldMapper,
135
- ...BUTTON_FIELD_TYPES_BASE,
136
- },
137
- {
138
- name: MatField.AddArrayItem,
139
- loadComponent: loadButtonComponent,
140
- mapper: addArrayItemButtonMapper,
141
- ...BUTTON_FIELD_TYPES_BASE,
142
- },
143
- {
144
- name: MatField.PrependArrayItem,
145
- loadComponent: loadButtonComponent,
146
- mapper: prependArrayItemButtonMapper,
147
- ...BUTTON_FIELD_TYPES_BASE,
148
- },
149
- {
150
- name: MatField.InsertArrayItem,
151
- loadComponent: loadButtonComponent,
152
- mapper: insertArrayItemButtonMapper,
153
- ...BUTTON_FIELD_TYPES_BASE,
154
- },
155
- {
156
- name: MatField.RemoveArrayItem,
157
- loadComponent: loadButtonComponent,
158
- mapper: removeArrayItemButtonMapper,
159
- ...BUTTON_FIELD_TYPES_BASE,
160
- },
161
- {
162
- name: MatField.PopArrayItem,
163
- loadComponent: loadButtonComponent,
164
- mapper: popArrayItemButtonMapper,
165
- ...BUTTON_FIELD_TYPES_BASE,
166
- },
167
- {
168
- name: MatField.ShiftArrayItem,
169
- loadComponent: loadButtonComponent,
170
- mapper: shiftArrayItemButtonMapper,
171
- ...BUTTON_FIELD_TYPES_BASE,
172
- },
173
- {
174
- name: MatField.Textarea,
175
- loadComponent: loadTextareaComponent,
176
- mapper: valueFieldMapper,
177
- propsToMeta: ['rows', 'cols'],
178
- scope: 'text-input',
179
- addons: {
180
- slots: ['prefix', 'suffix'],
181
- },
182
- ...VALUE_FIELD_TYPES_BASE,
183
- },
184
- {
185
- name: MatField.Radio,
186
- loadComponent: loadRadioComponent,
187
- mapper: optionsFieldMapper,
188
- scope: 'single-select',
189
- ...VALUE_FIELD_TYPES_BASE,
190
- },
191
- {
192
- name: MatField.MultiCheckbox,
193
- loadComponent: loadMultiCheckboxComponent,
194
- mapper: optionsFieldMapper,
195
- scope: 'multi-select',
196
- ...VALUE_FIELD_TYPES_BASE,
197
- },
198
- {
199
- name: MatField.Datepicker,
200
- loadComponent: loadDatepickerComponent,
201
- mapper: datepickerFieldMapper,
202
- scope: 'date',
203
- addons: {
204
- slots: ['prefix', 'suffix'],
205
- },
206
- ...VALUE_FIELD_TYPES_BASE,
207
- },
208
- {
209
- name: MatField.Slider,
210
- loadComponent: loadSliderComponent,
211
- mapper: valueFieldMapper,
212
- scope: 'numeric',
213
- ...VALUE_FIELD_TYPES_BASE,
214
- },
215
- {
216
- name: MatField.Toggle,
217
- loadComponent: loadToggleComponent,
218
- mapper: checkboxFieldMapper,
219
- scope: 'boolean',
220
- ...VALUE_FIELD_TYPES_BASE,
221
- },
72
+ {
73
+ name: MatField.Input,
74
+ loadComponent: loadInputComponent,
75
+ mapper: valueFieldMapper,
76
+ propsToMeta: ["type"],
77
+ scope: ["text-input", "numeric"],
78
+ addons: { slots: ["prefix", "suffix"] },
79
+ ...VALUE_FIELD_TYPES_BASE
80
+ },
81
+ {
82
+ name: MatField.Select,
83
+ loadComponent: loadSelectComponent,
84
+ mapper: optionsFieldMapper,
85
+ scope: "single-select",
86
+ addons: { slots: ["prefix", "suffix"] },
87
+ ...VALUE_FIELD_TYPES_BASE
88
+ },
89
+ {
90
+ name: MatField.Checkbox,
91
+ loadComponent: loadCheckboxComponent,
92
+ mapper: checkboxFieldMapper,
93
+ scope: "boolean",
94
+ ...VALUE_FIELD_TYPES_BASE
95
+ },
96
+ {
97
+ name: MatField.Button,
98
+ loadComponent: loadButtonComponent,
99
+ mapper: buttonFieldMapper,
100
+ ...BUTTON_FIELD_TYPES_BASE
101
+ },
102
+ {
103
+ name: MatField.Submit,
104
+ loadComponent: loadButtonComponent,
105
+ mapper: submitButtonFieldMapper,
106
+ ...BUTTON_FIELD_TYPES_BASE
107
+ },
108
+ {
109
+ name: MatField.Next,
110
+ loadComponent: loadButtonComponent,
111
+ mapper: nextButtonFieldMapper,
112
+ ...BUTTON_FIELD_TYPES_BASE
113
+ },
114
+ {
115
+ name: MatField.Previous,
116
+ loadComponent: loadButtonComponent,
117
+ mapper: previousButtonFieldMapper,
118
+ ...BUTTON_FIELD_TYPES_BASE
119
+ },
120
+ {
121
+ name: MatField.AddArrayItem,
122
+ loadComponent: loadButtonComponent,
123
+ mapper: addArrayItemButtonMapper,
124
+ ...BUTTON_FIELD_TYPES_BASE
125
+ },
126
+ {
127
+ name: MatField.PrependArrayItem,
128
+ loadComponent: loadButtonComponent,
129
+ mapper: prependArrayItemButtonMapper,
130
+ ...BUTTON_FIELD_TYPES_BASE
131
+ },
132
+ {
133
+ name: MatField.InsertArrayItem,
134
+ loadComponent: loadButtonComponent,
135
+ mapper: insertArrayItemButtonMapper,
136
+ ...BUTTON_FIELD_TYPES_BASE
137
+ },
138
+ {
139
+ name: MatField.RemoveArrayItem,
140
+ loadComponent: loadButtonComponent,
141
+ mapper: removeArrayItemButtonMapper,
142
+ ...BUTTON_FIELD_TYPES_BASE
143
+ },
144
+ {
145
+ name: MatField.PopArrayItem,
146
+ loadComponent: loadButtonComponent,
147
+ mapper: popArrayItemButtonMapper,
148
+ ...BUTTON_FIELD_TYPES_BASE
149
+ },
150
+ {
151
+ name: MatField.ShiftArrayItem,
152
+ loadComponent: loadButtonComponent,
153
+ mapper: shiftArrayItemButtonMapper,
154
+ ...BUTTON_FIELD_TYPES_BASE
155
+ },
156
+ {
157
+ name: MatField.Textarea,
158
+ loadComponent: loadTextareaComponent,
159
+ mapper: valueFieldMapper,
160
+ propsToMeta: ["rows", "cols"],
161
+ scope: "text-input",
162
+ addons: { slots: ["prefix", "suffix"] },
163
+ ...VALUE_FIELD_TYPES_BASE
164
+ },
165
+ {
166
+ name: MatField.Radio,
167
+ loadComponent: loadRadioComponent,
168
+ mapper: optionsFieldMapper,
169
+ scope: "single-select",
170
+ ...VALUE_FIELD_TYPES_BASE
171
+ },
172
+ {
173
+ name: MatField.MultiCheckbox,
174
+ loadComponent: loadMultiCheckboxComponent,
175
+ mapper: optionsFieldMapper,
176
+ scope: "multi-select",
177
+ ...VALUE_FIELD_TYPES_BASE
178
+ },
179
+ {
180
+ name: MatField.Datepicker,
181
+ loadComponent: loadDatepickerComponent,
182
+ mapper: datepickerFieldMapper,
183
+ scope: "date",
184
+ addons: { slots: ["prefix", "suffix"] },
185
+ ...VALUE_FIELD_TYPES_BASE
186
+ },
187
+ {
188
+ name: MatField.Slider,
189
+ loadComponent: loadSliderComponent,
190
+ mapper: valueFieldMapper,
191
+ scope: "numeric",
192
+ ...VALUE_FIELD_TYPES_BASE
193
+ },
194
+ {
195
+ name: MatField.Toggle,
196
+ loadComponent: loadToggleComponent,
197
+ mapper: checkboxFieldMapper,
198
+ scope: "boolean",
199
+ ...VALUE_FIELD_TYPES_BASE
200
+ }
222
201
  ];
223
-
224
-
225
202
  const MATERIAL_FIELD_ERRORS_WRAPPER = {
226
- wrapperName: 'field-errors',
227
- loadComponent: () => import('./ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-Dz2-IbBh.mjs'),
228
- rendersFieldErrors: true,
203
+ wrapperName: "field-errors",
204
+ loadComponent: () => import("./ng-forge-dynamic-forms-material-mat-field-errors-wrapper.component-bFeO_Ift.mjs"),
205
+ rendersFieldErrors: true
229
206
  };
230
207
  function withMaterialFields(config) {
231
- const base = [...MATERIAL_FIELD_TYPES, withMaterialAddons(), MATERIAL_FIELD_ERRORS_WRAPPER];
232
- if (config) {
233
- base.push({
234
- ɵkind: 'material-config',
235
- ɵproviders: [{ provide: MATERIAL_CONFIG, useValue: config }],
236
- });
237
- return base;
238
- }
239
- return base;
208
+ const base = [
209
+ ...MATERIAL_FIELD_TYPES,
210
+ withMaterialAddons(),
211
+ MATERIAL_FIELD_ERRORS_WRAPPER
212
+ ];
213
+ if (config) {
214
+ base.push({
215
+ ɵkind: "material-config",
216
+ ɵproviders: [{
217
+ provide: MATERIAL_CONFIG$1,
218
+ useValue: config
219
+ }]
220
+ });
221
+ return base;
222
+ }
223
+ return base;
240
224
  }
241
- /* -- Material addon types ----------------------------------------------- */
242
225
  const MAT_ICON_KIND = {
243
- type: 'mat-icon',
244
- loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-icon').then((m) => m.MatIconAddonComponent),
245
- validate: (addon, fieldKey) => {
246
- if (typeof addon.icon !== 'string' || addon.icon.length === 0) {
247
- throw new DynamicFormError(`Addon type 'mat-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);
248
- }
249
- },
226
+ type: "mat-icon",
227
+ loadComponent: () => import("@ng-forge/dynamic-forms-material/lazy/addon-icon").then((m) => m.MatIconAddonComponent),
228
+ validate: (addon, fieldKey) => {
229
+ if (typeof addon.icon !== "string" || addon.icon.length === 0) throw new DynamicFormError(`Addon type 'mat-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);
230
+ }
250
231
  };
251
232
  const MAT_BUTTON_KIND = {
252
- type: 'mat-button',
253
- loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-button').then((m) => m.MatButtonAddonComponent),
254
- validate: (addon, fieldKey) => {
255
- const set = [addon.preset, addon.actionRef, addon.action].filter((v) => v !== undefined);
256
- if (set.length > 1) {
257
- throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`);
258
- }
259
- if (addon.icon && !addon.label && !addon.ariaLabel) {
260
- throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);
261
- }
262
- },
233
+ type: "mat-button",
234
+ loadComponent: () => import("@ng-forge/dynamic-forms-material/lazy/addon-button").then((m) => m.MatButtonAddonComponent),
235
+ validate: (addon, fieldKey) => {
236
+ if ([
237
+ addon.preset,
238
+ addon.actionRef,
239
+ addon.action
240
+ ].filter((v) => v !== void 0).length > 1) throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`);
241
+ if (addon.icon && !addon.label && !addon.ariaLabel) throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);
242
+ }
263
243
  };
264
244
  function withMaterialAddons() {
265
- return {
266
- ɵkind: 'addons',
267
- ɵproviders: [
268
- { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_ICON_KIND, multi: true },
269
- { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_BUTTON_KIND, multi: true },
270
- ],
271
- };
245
+ return {
246
+ ɵkind: "addons",
247
+ ɵproviders: [{
248
+ provide: ADDON_TYPE_DEFINITIONS,
249
+ useValue: MAT_ICON_KIND,
250
+ multi: true
251
+ }, {
252
+ provide: ADDON_TYPE_DEFINITIONS,
253
+ useValue: MAT_BUTTON_KIND,
254
+ multi: true
255
+ }]
256
+ };
272
257
  }
258
+ export { MATERIAL_CONFIG, MATERIAL_FIELD_TYPES, MAT_INPUT_TYPE_OVERRIDE, MatField, withMaterialAddons, withMaterialFields };
273
259
 
274
-
275
- /* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */
276
-
277
-
278
- export { MATERIAL_FIELD_TYPES, MatField, withMaterialAddons, withMaterialFields };
279
- //# sourceMappingURL=ng-forge-dynamic-forms-material.mjs.map
260
+ //# sourceMappingURL=ng-forge-dynamic-forms-material.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-forge-dynamic-forms-material.mjs","mappings":";;;;;;AAIO;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACXI;AACJ;AACA;AACA;;;AAKE;AACE;AACA;;;AAKA;;;AAKA;;QAIF;AACA;;AAGI;;AACA;AACF;;;;AAKE;AACA;AACE;;;;;AAMN;AACF;AACF;;;AClCA;;;AAQA;AACE;AACA;;AAGF;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAIA;AAEA;AAEA;AAOO;AACL;;AAEE;AACA;;AAEA;AACA;AACE;AACD;AACD;AACD;AACD;;AAEE;AACA;AACA;AACA;AACE;AACD;AACD;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACE;AACD;AACD;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACE;AACD;AACD;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;;;;AC5KH;AACE;AACA;AACA;;AAeI;;;;AAOA;;AAE+B;AACjC;;AAGF;AACF;AAEA;AAEA;AACE;AACA;AACA;AACE;AACE;;;;AAKN;AACE;AACA;AACA;;AAIE;AACE;;QAKF;AACE;;;;;;AAkBF;AACA;;;AAGC;;AAEL;;;AChHA","names":[],"ignoreList":[],"sources":["../../../../packages/dynamic-forms-material/src/lib/types/types.ts","../../../../packages/dynamic-forms-material/src/lib/fields/button/mat-button.mapper.ts","../../../../packages/dynamic-forms-material/src/lib/config/material-field-config.ts","../../../../packages/dynamic-forms-material/src/lib/providers/material-providers.ts","../../../../packages/dynamic-forms-material/src/index.ts"],"sourcesContent":["/**\n * Material Design field type constants\n * Based on available field components in the /fields folder\n */\nexport const MatField = {\n Input: 'input',\n Select: 'select',\n Checkbox: 'checkbox',\n Button: 'button',\n Submit: 'submit',\n Next: 'next',\n Previous: 'previous',\n AddArrayItem: 'add-array-item',\n PrependArrayItem: 'prepend-array-item',\n InsertArrayItem: 'insert-array-item',\n RemoveArrayItem: 'remove-array-item',\n PopArrayItem: 'pop-array-item',\n ShiftArrayItem: 'shift-array-item',\n Textarea: 'textarea',\n Radio: 'radio',\n MultiCheckbox: 'multi-checkbox',\n Datepicker: 'datepicker',\n Slider: 'slider',\n Toggle: 'toggle',\n} as const;\n\nexport type MatFieldType = (typeof MatField)[keyof typeof MatField];\n","import { computed, inject, isSignal, Signal } from '@angular/core';\nimport { FieldDef } from '@ng-forge/dynamic-forms';\nimport { ARRAY_CONTEXT, buildBaseInputs, DEFAULT_PROPS, injectNonFieldLogicResolver } from '@ng-forge/dynamic-forms/integration';\n\n/**\n * Generic button mapper for custom events or basic buttons.\n * For specific button types (submit, next, prev, add/remove array items),\n * use the dedicated field types and their specific mappers.\n *\n * @param fieldDef The button field definition\n * @returns Signal containing Record of input names to values for ngComponentOutlet\n */\nexport function buttonFieldMapper(fieldDef: FieldDef<Record<string, unknown>>): Signal<Record<string, unknown>> {\n const defaultProps = inject(DEFAULT_PROPS);\n const arrayContext = inject(ARRAY_CONTEXT, { optional: true });\n const resolveLogic = injectNonFieldLogicResolver(fieldDef);\n\n return computed(() => {\n const baseInputs = buildBaseInputs(fieldDef, defaultProps());\n\n const inputs: Record<string, unknown> = {\n ...baseInputs,\n ...resolveLogic(),\n };\n\n // Add event binding for button events\n if ('event' in fieldDef && fieldDef.event !== undefined) {\n inputs['event'] = fieldDef.event;\n }\n\n // Add eventArgs binding if provided\n if ('eventArgs' in fieldDef && fieldDef.eventArgs !== undefined) {\n inputs['eventArgs'] = fieldDef.eventArgs;\n }\n\n // Add eventContext for token resolution (supports $template, $arrayKey, $index, etc.)\n const template = 'template' in fieldDef ? fieldDef.template : undefined;\n if (template || arrayContext) {\n // Read signal value if index is a signal (supports differential updates)\n const getIndex = () => {\n if (!arrayContext) return -1;\n return isSignal(arrayContext.index) ? arrayContext.index() : arrayContext.index;\n };\n\n inputs['eventContext'] = {\n key: fieldDef.key,\n index: getIndex(),\n arrayKey: arrayContext?.arrayKey ?? '',\n get formValue() {\n return arrayContext?.formValue ?? {};\n },\n template,\n };\n }\n\n return inputs;\n });\n}\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nimport { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';\nimport {\n addArrayItemButtonMapper,\n checkboxFieldMapper,\n datepickerFieldMapper,\n insertArrayItemButtonMapper,\n optionsFieldMapper,\n popArrayItemButtonMapper,\n prependArrayItemButtonMapper,\n removeArrayItemButtonMapper,\n shiftArrayItemButtonMapper,\n valueFieldMapper,\n} from '@ng-forge/dynamic-forms/integration';\nimport { MatField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/mat-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/mat-specific-button.mapper';\n\n/**\n * Base for value-bearing field types — waits for the mapper to emit the `field`\n * input before instantiating the component (matches NgForgeField's\n * `input.required<FieldTree<T>>()` contract).\n */\nconst VALUE_FIELD_TYPES_BASE = {\n renderReadyWhen: ['field'],\n} as const;\n\n/**\n * Base for action/button field types that don't bind to a form value.\n * Renders immediately, opted out of form-value collection.\n */\nconst BUTTON_FIELD_TYPES_BASE = {\n renderReadyWhen: [],\n valueHandling: 'exclude',\n} as const;\n\nconst loadInputComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/input').then(({ MatInputFieldComponent }) => MatInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/select').then(({ MatSelectFieldComponent }) => MatSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/checkbox').then(({ MatCheckboxFieldComponent }) => MatCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/button').then(({ MatButtonFieldComponent }) => MatButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/textarea').then(({ MatTextareaFieldComponent }) => MatTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/radio').then(({ MatRadioFieldComponent }) => MatRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/multi-checkbox').then(\n ({ MatMultiCheckboxFieldComponent }) => MatMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/datepicker').then(({ MatDatepickerFieldComponent }) => MatDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/slider').then(({ MatSliderFieldComponent }) => MatSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/toggle').then(({ MatToggleFieldComponent }) => MatToggleFieldComponent);\n\n/**\n * Material Design field type definitions\n * Follows the FieldTypeDefinition interface for proper registry integration\n */\nexport const MATERIAL_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: MatField.Input,\n loadComponent: loadInputComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['type'],\n scope: ['text-input', 'numeric'],\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows', 'cols'],\n scope: 'text-input',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Toggle,\n loadComponent: loadToggleComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n];\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nimport type { Provider } from '@angular/core';\nimport { DynamicFormError, type AddonTypeDefinition } from '@ng-forge/dynamic-forms';\nimport { ADDON_TYPE_DEFINITIONS, type FieldTypeDefinition, type WrapperTypeDefinition } from '@ng-forge/dynamic-forms/integration';\nimport { MATERIAL_CONFIG, type MaterialConfig, type MatButtonAddon, type MatIconAddon } from '@ng-forge/dynamic-forms-material/shared';\nimport { MATERIAL_FIELD_TYPES } from '../config/material-field-config';\n\n/** Field type definitions for Material Design components. */\nexport type MaterialFieldTypes = FieldTypeDefinition[];\n\ntype MaterialConfigFeature = {\n ɵkind: 'material-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withMaterialFields()` shape — field defs + the auto-included\n * addons feature so `mat-icon` / `mat-button` work out of the box.\n */\ntype MaterialFieldsWithAddons = [...MaterialFieldTypes, MaterialAddonsFeature, WrapperTypeDefinition];\n\ntype MaterialFieldsWithConfig = [...MaterialFieldTypes, MaterialAddonsFeature, WrapperTypeDefinition, MaterialConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Material one, so\n * a container-level validation message renders like a field-level one.\n * Registered under the same name, so the later registration wins.\n */\nconst MATERIAL_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/mat-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Configure dynamic forms with Material Design field types, with\n * Material-shipped addon types (`mat-icon`, `mat-button`) auto-included so\n * addons work out of the box.\n *\n * @param config - Optional global configuration for Material form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withMaterialFields(): MaterialFieldsWithAddons;\nexport function withMaterialFields(config: MaterialConfig): MaterialFieldsWithConfig;\nexport function withMaterialFields(config: MaterialConfig | undefined): MaterialFieldsWithAddons | MaterialFieldsWithConfig;\nexport function withMaterialFields(config?: MaterialConfig): MaterialFieldsWithAddons | MaterialFieldsWithConfig {\n // Always include the addons feature — mat-icon / mat-button are part of\n // the canonical Material surface.\n const base: unknown[] = [...MATERIAL_FIELD_TYPES, withMaterialAddons(), MATERIAL_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'material-config',\n ɵproviders: [{ provide: MATERIAL_CONFIG, useValue: config }],\n } satisfies MaterialConfigFeature);\n return base as MaterialFieldsWithConfig;\n }\n\n return base as MaterialFieldsWithAddons;\n}\n\n/* -- Material addon types ----------------------------------------------- */\n\nconst MAT_ICON_KIND: AddonTypeDefinition<MatIconAddon> = {\n type: 'mat-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-icon').then((m) => m.MatIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'mat-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst MAT_BUTTON_KIND: AddonTypeDefinition<MatButtonAddon> = {\n type: 'mat-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-button').then((m) => m.MatButtonAddonComponent),\n validate: (addon, fieldKey) => {\n // Exactly one of preset / actionRef / action — validator drops the addon\n // (with warning) if the rule is violated.\n const set = [addon.preset, addon.actionRef, addon.action].filter((v) => v !== undefined);\n if (set.length > 1) {\n throw new DynamicFormError(\n `Addon type 'mat-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`,\n );\n }\n // Icon-only buttons require ariaLabel for screen readers.\n if (addon.icon && !addon.label && !addon.ariaLabel) {\n throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Material addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype MaterialAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Material-shipped addon types (`mat-icon`, `mat-button`) standalone. */\nexport function withMaterialAddons(): MaterialAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_BUTTON_KIND, multi: true },\n ],\n };\n}\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nexport { MATERIAL_FIELD_TYPES, MATERIAL_CONFIG, MatField, withMaterialFields, withMaterialAddons, MAT_INPUT_TYPE_OVERRIDE } from './lib';\n\nexport type { MatIconAddon, MatButtonAddon, MatAddon, MatInputAddon, MatAddonExtensions } from './lib';\n\nexport type {\n MatButtonProps,\n MatButtonField,\n MatSubmitButtonField,\n MatNextButtonField,\n MatPreviousButtonField,\n MatAddArrayItemButtonField,\n MatPrependArrayItemButtonField,\n MatInsertArrayItemButtonField,\n MatRemoveArrayItemButtonField,\n MatPopArrayItemButtonField,\n MatShiftArrayItemButtonField,\n MatCheckboxProps,\n MatCheckboxField,\n MatDatepickerProps,\n MatDatepickerField,\n MatInputProps,\n MatInputField,\n MatMultiCheckboxProps,\n MatMultiCheckboxField,\n MatRadioProps,\n MatRadioField,\n MatSelectProps,\n MatSelectField,\n MatSliderProps,\n MatSliderField,\n MatTextareaProps,\n MatTextareaField,\n MatToggleProps,\n MatToggleField,\n MaterialConfig,\n MatFieldType,\n MatFormProps,\n MatFormConfig,\n} from './lib';\n\n// Component classes load from the lazy entries. Re-exporting their values here would bundle them\n// eagerly, and compiling them into this entry creates duplicate classes (NG0912, #625).\nimport type { FormEvent } from '@ng-forge/dynamic-forms';\nimport type { MatButtonFieldComponent as MatButtonFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/button';\nimport type { MatCheckboxFieldComponent as MatCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/checkbox';\nimport type { MatDatepickerFieldComponent as MatDatepickerFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/datepicker';\nimport type { MatInputFieldComponent as MatInputFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/input';\nimport type { MatMultiCheckboxFieldComponent as MatMultiCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/multi-checkbox';\nimport type { MatRadioFieldComponent as MatRadioFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/radio';\nimport type { MatSelectFieldComponent as MatSelectFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/select';\nimport type { MatSliderFieldComponent as MatSliderFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/slider';\nimport type { MatTextareaFieldComponent as MatTextareaFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/textarea';\nimport type { MatToggleFieldComponent as MatToggleFieldComponentClass } from '@ng-forge/dynamic-forms-material/lazy/toggle';\nimport type { MatIconAddonComponent as MatIconAddonComponentClass } from '@ng-forge/dynamic-forms-material/lazy/addon-icon';\nimport type { MatButtonAddonComponent as MatButtonAddonComponentClass } from '@ng-forge/dynamic-forms-material/lazy/addon-button';\n\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/button`. Import it from there to use the class as a value. */\nexport type MatButtonFieldComponent<TEvent extends FormEvent> = MatButtonFieldComponentClass<TEvent>;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/checkbox`. Import it from there to use the class as a value. */\nexport type MatCheckboxFieldComponent = MatCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/datepicker`. Import it from there to use the class as a value. */\nexport type MatDatepickerFieldComponent = MatDatepickerFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/input`. Import it from there to use the class as a value. */\nexport type MatInputFieldComponent = MatInputFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/multi-checkbox`. Import it from there to use the class as a value. */\nexport type MatMultiCheckboxFieldComponent = MatMultiCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/radio`. Import it from there to use the class as a value. */\nexport type MatRadioFieldComponent = MatRadioFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/select`. Import it from there to use the class as a value. */\nexport type MatSelectFieldComponent = MatSelectFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/slider`. Import it from there to use the class as a value. */\nexport type MatSliderFieldComponent = MatSliderFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/textarea`. Import it from there to use the class as a value. */\nexport type MatTextareaFieldComponent = MatTextareaFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/toggle`. Import it from there to use the class as a value. */\nexport type MatToggleFieldComponent = MatToggleFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/addon-icon`. Import it from there to use the class as a value. */\nexport type MatIconAddonComponent = MatIconAddonComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-material/lazy/addon-button`. Import it from there to use the class as a value. */\nexport type MatButtonAddonComponent = MatButtonAddonComponentClass;\n"]}
1
+ {"version":3,"file":"ng-forge-dynamic-forms-material.mjs","names":["MATERIAL_CONFIG"],"sources":["../../../../packages/dynamic-forms-material/src/lib/types/types.ts","../../../../packages/dynamic-forms-material/src/lib/fields/button/mat-button.mapper.ts","../../../../packages/dynamic-forms-material/src/lib/config/material-field-config.ts","../../../../packages/dynamic-forms-material/src/lib/providers/material-providers.ts"],"sourcesContent":["/**\n * Material Design field type constants\n * Based on available field components in the /fields folder\n */\nexport const MatField = {\n Input: 'input',\n Select: 'select',\n Checkbox: 'checkbox',\n Button: 'button',\n Submit: 'submit',\n Next: 'next',\n Previous: 'previous',\n AddArrayItem: 'add-array-item',\n PrependArrayItem: 'prepend-array-item',\n InsertArrayItem: 'insert-array-item',\n RemoveArrayItem: 'remove-array-item',\n PopArrayItem: 'pop-array-item',\n ShiftArrayItem: 'shift-array-item',\n Textarea: 'textarea',\n Radio: 'radio',\n MultiCheckbox: 'multi-checkbox',\n Datepicker: 'datepicker',\n Slider: 'slider',\n Toggle: 'toggle',\n} as const;\n\nexport type MatFieldType = (typeof MatField)[keyof typeof MatField];\n","import { computed, inject, isSignal, Signal } from '@angular/core';\nimport { FieldDef } from '@ng-forge/dynamic-forms';\nimport { ARRAY_CONTEXT, buildBaseInputs, DEFAULT_PROPS, injectNonFieldLogicResolver } from '@ng-forge/dynamic-forms/integration';\n\n/**\n * Generic button mapper for custom events or basic buttons.\n * For specific button types (submit, next, prev, add/remove array items),\n * use the dedicated field types and their specific mappers.\n *\n * @param fieldDef The button field definition\n * @returns Signal containing Record of input names to values for ngComponentOutlet\n */\nexport function buttonFieldMapper(fieldDef: FieldDef<Record<string, unknown>>): Signal<Record<string, unknown>> {\n const defaultProps = inject(DEFAULT_PROPS);\n const arrayContext = inject(ARRAY_CONTEXT, { optional: true });\n const resolveLogic = injectNonFieldLogicResolver(fieldDef);\n\n return computed(() => {\n const baseInputs = buildBaseInputs(fieldDef, defaultProps());\n\n const inputs: Record<string, unknown> = {\n ...baseInputs,\n ...resolveLogic(),\n };\n\n // Add event binding for button events\n if ('event' in fieldDef && fieldDef.event !== undefined) {\n inputs['event'] = fieldDef.event;\n }\n\n // Add eventArgs binding if provided\n if ('eventArgs' in fieldDef && fieldDef.eventArgs !== undefined) {\n inputs['eventArgs'] = fieldDef.eventArgs;\n }\n\n // Add eventContext for token resolution (supports $template, $arrayKey, $index, etc.)\n const template = 'template' in fieldDef ? fieldDef.template : undefined;\n if (template || arrayContext) {\n // Read signal value if index is a signal (supports differential updates)\n const getIndex = () => {\n if (!arrayContext) return -1;\n return isSignal(arrayContext.index) ? arrayContext.index() : arrayContext.index;\n };\n\n inputs['eventContext'] = {\n key: fieldDef.key,\n index: getIndex(),\n arrayKey: arrayContext?.arrayKey ?? '',\n get formValue() {\n return arrayContext?.formValue ?? {};\n },\n template,\n };\n }\n\n return inputs;\n });\n}\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nimport { FieldTypeDefinition } from '@ng-forge/dynamic-forms/integration';\nimport {\n addArrayItemButtonMapper,\n checkboxFieldMapper,\n datepickerFieldMapper,\n insertArrayItemButtonMapper,\n optionsFieldMapper,\n popArrayItemButtonMapper,\n prependArrayItemButtonMapper,\n removeArrayItemButtonMapper,\n shiftArrayItemButtonMapper,\n valueFieldMapper,\n} from '@ng-forge/dynamic-forms/integration';\nimport { MatField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/mat-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/mat-specific-button.mapper';\n\n/**\n * Base for value-bearing field types — waits for the mapper to emit the `field`\n * input before instantiating the component (matches NgForgeField's\n * `input.required<FieldTree<T>>()` contract).\n */\nconst VALUE_FIELD_TYPES_BASE = {\n renderReadyWhen: ['field'],\n} as const;\n\n/**\n * Base for action/button field types that don't bind to a form value.\n * Renders immediately, opted out of form-value collection.\n */\nconst BUTTON_FIELD_TYPES_BASE = {\n renderReadyWhen: [],\n valueHandling: 'exclude',\n} as const;\n\nconst loadInputComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/input').then(({ MatInputFieldComponent }) => MatInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/select').then(({ MatSelectFieldComponent }) => MatSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/checkbox').then(({ MatCheckboxFieldComponent }) => MatCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/button').then(({ MatButtonFieldComponent }) => MatButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/textarea').then(({ MatTextareaFieldComponent }) => MatTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/radio').then(({ MatRadioFieldComponent }) => MatRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/multi-checkbox').then(\n ({ MatMultiCheckboxFieldComponent }) => MatMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/datepicker').then(({ MatDatepickerFieldComponent }) => MatDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/slider').then(({ MatSliderFieldComponent }) => MatSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-material/lazy/toggle').then(({ MatToggleFieldComponent }) => MatToggleFieldComponent);\n\n/**\n * Material Design field type definitions\n * Follows the FieldTypeDefinition interface for proper registry integration\n */\nexport const MATERIAL_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: MatField.Input,\n loadComponent: loadInputComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['type'],\n scope: ['text-input', 'numeric'],\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows', 'cols'],\n scope: 'text-input',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n addons: {\n slots: ['prefix', 'suffix'],\n },\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: MatField.Toggle,\n loadComponent: loadToggleComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n];\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nimport type { Provider } from '@angular/core';\nimport { DynamicFormError, type AddonTypeDefinition } from '@ng-forge/dynamic-forms';\nimport { ADDON_TYPE_DEFINITIONS, type FieldTypeDefinition, type WrapperTypeDefinition } from '@ng-forge/dynamic-forms/integration';\nimport { MATERIAL_CONFIG, type MaterialConfig, type MatButtonAddon, type MatIconAddon } from '@ng-forge/dynamic-forms-material/shared';\nimport { MATERIAL_FIELD_TYPES } from '../config/material-field-config';\n\n/** Field type definitions for Material Design components. */\nexport type MaterialFieldTypes = FieldTypeDefinition[];\n\ntype MaterialConfigFeature = {\n ɵkind: 'material-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withMaterialFields()` shape — field defs + the auto-included\n * addons feature so `mat-icon` / `mat-button` work out of the box.\n */\ntype MaterialFieldsWithAddons = [...MaterialFieldTypes, MaterialAddonsFeature, WrapperTypeDefinition];\n\ntype MaterialFieldsWithConfig = [...MaterialFieldTypes, MaterialAddonsFeature, WrapperTypeDefinition, MaterialConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Material one, so\n * a container-level validation message renders like a field-level one.\n * Registered under the same name, so the later registration wins.\n */\nconst MATERIAL_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/mat-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Configure dynamic forms with Material Design field types, with\n * Material-shipped addon types (`mat-icon`, `mat-button`) auto-included so\n * addons work out of the box.\n *\n * @param config - Optional global configuration for Material form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withMaterialFields(): MaterialFieldsWithAddons;\nexport function withMaterialFields(config: MaterialConfig): MaterialFieldsWithConfig;\nexport function withMaterialFields(config: MaterialConfig | undefined): MaterialFieldsWithAddons | MaterialFieldsWithConfig;\nexport function withMaterialFields(config?: MaterialConfig): MaterialFieldsWithAddons | MaterialFieldsWithConfig {\n // Always include the addons feature — mat-icon / mat-button are part of\n // the canonical Material surface.\n const base: unknown[] = [...MATERIAL_FIELD_TYPES, withMaterialAddons(), MATERIAL_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'material-config',\n ɵproviders: [{ provide: MATERIAL_CONFIG, useValue: config }],\n } satisfies MaterialConfigFeature);\n return base as MaterialFieldsWithConfig;\n }\n\n return base as MaterialFieldsWithAddons;\n}\n\n/* -- Material addon types ----------------------------------------------- */\n\nconst MAT_ICON_KIND: AddonTypeDefinition<MatIconAddon> = {\n type: 'mat-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-icon').then((m) => m.MatIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'mat-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst MAT_BUTTON_KIND: AddonTypeDefinition<MatButtonAddon> = {\n type: 'mat-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-material/lazy/addon-button').then((m) => m.MatButtonAddonComponent),\n validate: (addon, fieldKey) => {\n // Exactly one of preset / actionRef / action — validator drops the addon\n // (with warning) if the rule is violated.\n const set = [addon.preset, addon.actionRef, addon.action].filter((v) => v !== undefined);\n if (set.length > 1) {\n throw new DynamicFormError(\n `Addon type 'mat-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`,\n );\n }\n // Icon-only buttons require ariaLabel for screen readers.\n if (addon.icon && !addon.label && !addon.ariaLabel) {\n throw new DynamicFormError(`Addon type 'mat-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Material addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype MaterialAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Material-shipped addon types (`mat-icon`, `mat-button`) standalone. */\nexport function withMaterialAddons(): MaterialAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: MAT_BUTTON_KIND, multi: true },\n ],\n };\n}\n"],"mappings":"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"}