@ng-forge/dynamic-forms-bootstrap 1.3.0-next.2 → 1.3.0-next.4

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-bootstrap-bs-field-errors-wrapper.component-42hynKVO.mjs +56 -0
  2. package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-42hynKVO.mjs.map +1 -0
  3. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.mjs +64 -37
  4. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.mjs.map +1 -1
  5. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.mjs +92 -34
  6. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.mjs.map +1 -1
  7. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-button.mjs +94 -49
  8. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-button.mjs.map +1 -1
  9. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.mjs +97 -23
  10. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.mjs.map +1 -1
  11. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.mjs +169 -40
  12. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.mjs.map +1 -1
  13. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-input.mjs +180 -88
  14. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-input.mjs.map +1 -1
  15. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.mjs +143 -66
  16. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.mjs.map +1 -1
  17. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-radio.mjs +326 -61
  18. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-radio.mjs.map +1 -1
  19. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-select.mjs +123 -33
  20. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-select.mjs.map +1 -1
  21. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-slider.mjs +161 -30
  22. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-slider.mjs.map +1 -1
  23. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-textarea.mjs +97 -23
  24. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-textarea.mjs.map +1 -1
  25. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-toggle.mjs +97 -23
  26. package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-toggle.mjs.map +1 -1
  27. package/fesm2022/ng-forge-dynamic-forms-bootstrap-shared.mjs +100 -41
  28. package/fesm2022/ng-forge-dynamic-forms-bootstrap-shared.mjs.map +1 -1
  29. package/fesm2022/ng-forge-dynamic-forms-bootstrap.mjs +238 -251
  30. package/fesm2022/ng-forge-dynamic-forms-bootstrap.mjs.map +1 -1
  31. package/package.json +2 -2
  32. package/types/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.d.ts +18 -18
  33. package/types/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.d.ts +24 -17
  34. package/types/ng-forge-dynamic-forms-bootstrap-lazy-button.d.ts +94 -88
  35. package/types/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.d.ts +24 -18
  36. package/types/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.d.ts +49 -28
  37. package/types/ng-forge-dynamic-forms-bootstrap-lazy-input.d.ts +51 -37
  38. package/types/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.d.ts +34 -23
  39. package/types/ng-forge-dynamic-forms-bootstrap-lazy-radio.d.ts +30 -19
  40. package/types/ng-forge-dynamic-forms-bootstrap-lazy-select.d.ts +36 -24
  41. package/types/ng-forge-dynamic-forms-bootstrap-lazy-slider.d.ts +56 -35
  42. package/types/ng-forge-dynamic-forms-bootstrap-lazy-textarea.d.ts +24 -18
  43. package/types/ng-forge-dynamic-forms-bootstrap-lazy-toggle.d.ts +23 -17
  44. package/types/ng-forge-dynamic-forms-bootstrap-shared.d.ts +78 -71
  45. package/types/ng-forge-dynamic-forms-bootstrap.d.ts +225 -250
  46. package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-D4qTxFSp.mjs +0 -25
  47. package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-D4qTxFSp.mjs.map +0 -1
@@ -1,270 +1,257 @@
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 { BOOTSTRAP_CONFIG } from '@ng-forge/dynamic-forms-bootstrap/shared';
4
- export { BOOTSTRAP_CONFIG, BS_INPUT_TYPE_OVERRIDE } from '@ng-forge/dynamic-forms-bootstrap/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 { BOOTSTRAP_CONFIG, BOOTSTRAP_CONFIG as BOOTSTRAP_CONFIG$1, BS_INPUT_TYPE_OVERRIDE } from "@ng-forge/dynamic-forms-bootstrap/shared";
4
+ import { DynamicFormError } from "@ng-forge/dynamic-forms";
7
5
  const BsField = {
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-bootstrap/lazy/input').then(({ BsInputFieldComponent }) => BsInputFieldComponent);
75
- const loadSelectComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/select').then(({ BsSelectFieldComponent }) => BsSelectFieldComponent);
76
- const loadCheckboxComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/checkbox').then(({ BsCheckboxFieldComponent }) => BsCheckboxFieldComponent);
77
- const loadButtonComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/button').then(({ BsButtonFieldComponent }) => BsButtonFieldComponent);
78
- const loadTextareaComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/textarea').then(({ BsTextareaFieldComponent }) => BsTextareaFieldComponent);
79
- const loadRadioComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/radio').then(({ BsRadioFieldComponent }) => BsRadioFieldComponent);
80
- const loadMultiCheckboxComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox').then(({ BsMultiCheckboxFieldComponent }) => BsMultiCheckboxFieldComponent);
81
- const loadDatepickerComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/datepicker').then(({ BsDatepickerFieldComponent }) => BsDatepickerFieldComponent);
82
- const loadSliderComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/slider').then(({ BsSliderFieldComponent }) => BsSliderFieldComponent);
83
- const loadToggleComponent = () => import('@ng-forge/dynamic-forms-bootstrap/lazy/toggle').then(({ BsToggleFieldComponent }) => BsToggleFieldComponent);
61
+ const loadInputComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/input").then(({ BsInputFieldComponent }) => BsInputFieldComponent);
62
+ const loadSelectComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/select").then(({ BsSelectFieldComponent }) => BsSelectFieldComponent);
63
+ const loadCheckboxComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/checkbox").then(({ BsCheckboxFieldComponent }) => BsCheckboxFieldComponent);
64
+ const loadButtonComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/button").then(({ BsButtonFieldComponent }) => BsButtonFieldComponent);
65
+ const loadTextareaComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/textarea").then(({ BsTextareaFieldComponent }) => BsTextareaFieldComponent);
66
+ const loadRadioComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/radio").then(({ BsRadioFieldComponent }) => BsRadioFieldComponent);
67
+ const loadMultiCheckboxComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox").then(({ BsMultiCheckboxFieldComponent }) => BsMultiCheckboxFieldComponent);
68
+ const loadDatepickerComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/datepicker").then(({ BsDatepickerFieldComponent }) => BsDatepickerFieldComponent);
69
+ const loadSliderComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/slider").then(({ BsSliderFieldComponent }) => BsSliderFieldComponent);
70
+ const loadToggleComponent = () => import("@ng-forge/dynamic-forms-bootstrap/lazy/toggle").then(({ BsToggleFieldComponent }) => BsToggleFieldComponent);
84
71
  const BOOTSTRAP_FIELD_TYPES = [
85
- {
86
- name: BsField.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: BsField.Select,
98
- loadComponent: loadSelectComponent,
99
- mapper: optionsFieldMapper,
100
- scope: 'single-select',
101
- ...VALUE_FIELD_TYPES_BASE,
102
- },
103
- {
104
- name: BsField.Checkbox,
105
- loadComponent: loadCheckboxComponent,
106
- mapper: checkboxFieldMapper,
107
- scope: 'boolean',
108
- ...VALUE_FIELD_TYPES_BASE,
109
- },
110
- {
111
- name: BsField.Button,
112
- loadComponent: loadButtonComponent,
113
- mapper: buttonFieldMapper,
114
- ...BUTTON_FIELD_TYPES_BASE,
115
- },
116
- {
117
- name: BsField.Submit,
118
- loadComponent: loadButtonComponent,
119
- mapper: submitButtonFieldMapper,
120
- ...BUTTON_FIELD_TYPES_BASE,
121
- },
122
- {
123
- name: BsField.Next,
124
- loadComponent: loadButtonComponent,
125
- mapper: nextButtonFieldMapper,
126
- ...BUTTON_FIELD_TYPES_BASE,
127
- },
128
- {
129
- name: BsField.Previous,
130
- loadComponent: loadButtonComponent,
131
- mapper: previousButtonFieldMapper,
132
- ...BUTTON_FIELD_TYPES_BASE,
133
- },
134
- {
135
- name: BsField.AddArrayItem,
136
- loadComponent: loadButtonComponent,
137
- mapper: addArrayItemButtonMapper,
138
- ...BUTTON_FIELD_TYPES_BASE,
139
- },
140
- {
141
- name: BsField.PrependArrayItem,
142
- loadComponent: loadButtonComponent,
143
- mapper: prependArrayItemButtonMapper,
144
- ...BUTTON_FIELD_TYPES_BASE,
145
- },
146
- {
147
- name: BsField.InsertArrayItem,
148
- loadComponent: loadButtonComponent,
149
- mapper: insertArrayItemButtonMapper,
150
- ...BUTTON_FIELD_TYPES_BASE,
151
- },
152
- {
153
- name: BsField.RemoveArrayItem,
154
- loadComponent: loadButtonComponent,
155
- mapper: removeArrayItemButtonMapper,
156
- ...BUTTON_FIELD_TYPES_BASE,
157
- },
158
- {
159
- name: BsField.PopArrayItem,
160
- loadComponent: loadButtonComponent,
161
- mapper: popArrayItemButtonMapper,
162
- ...BUTTON_FIELD_TYPES_BASE,
163
- },
164
- {
165
- name: BsField.ShiftArrayItem,
166
- loadComponent: loadButtonComponent,
167
- mapper: shiftArrayItemButtonMapper,
168
- ...BUTTON_FIELD_TYPES_BASE,
169
- },
170
- {
171
- name: BsField.Textarea,
172
- loadComponent: loadTextareaComponent,
173
- mapper: valueFieldMapper,
174
- propsToMeta: ['rows'],
175
- scope: 'text-input',
176
- ...VALUE_FIELD_TYPES_BASE,
177
- },
178
- {
179
- name: BsField.Radio,
180
- loadComponent: loadRadioComponent,
181
- mapper: optionsFieldMapper,
182
- scope: 'single-select',
183
- ...VALUE_FIELD_TYPES_BASE,
184
- },
185
- {
186
- name: BsField.MultiCheckbox,
187
- loadComponent: loadMultiCheckboxComponent,
188
- mapper: optionsFieldMapper,
189
- scope: 'multi-select',
190
- ...VALUE_FIELD_TYPES_BASE,
191
- },
192
- {
193
- name: BsField.Datepicker,
194
- loadComponent: loadDatepickerComponent,
195
- mapper: datepickerFieldMapper,
196
- scope: 'date',
197
- ...VALUE_FIELD_TYPES_BASE,
198
- },
199
- {
200
- name: BsField.Slider,
201
- loadComponent: loadSliderComponent,
202
- mapper: valueFieldMapper,
203
- scope: 'numeric',
204
- ...VALUE_FIELD_TYPES_BASE,
205
- },
206
- {
207
- name: BsField.Toggle,
208
- loadComponent: loadToggleComponent,
209
- mapper: checkboxFieldMapper,
210
- scope: 'boolean',
211
- ...VALUE_FIELD_TYPES_BASE,
212
- },
72
+ {
73
+ name: BsField.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: BsField.Select,
83
+ loadComponent: loadSelectComponent,
84
+ mapper: optionsFieldMapper,
85
+ scope: "single-select",
86
+ ...VALUE_FIELD_TYPES_BASE
87
+ },
88
+ {
89
+ name: BsField.Checkbox,
90
+ loadComponent: loadCheckboxComponent,
91
+ mapper: checkboxFieldMapper,
92
+ scope: "boolean",
93
+ ...VALUE_FIELD_TYPES_BASE
94
+ },
95
+ {
96
+ name: BsField.Button,
97
+ loadComponent: loadButtonComponent,
98
+ mapper: buttonFieldMapper,
99
+ ...BUTTON_FIELD_TYPES_BASE
100
+ },
101
+ {
102
+ name: BsField.Submit,
103
+ loadComponent: loadButtonComponent,
104
+ mapper: submitButtonFieldMapper,
105
+ ...BUTTON_FIELD_TYPES_BASE
106
+ },
107
+ {
108
+ name: BsField.Next,
109
+ loadComponent: loadButtonComponent,
110
+ mapper: nextButtonFieldMapper,
111
+ ...BUTTON_FIELD_TYPES_BASE
112
+ },
113
+ {
114
+ name: BsField.Previous,
115
+ loadComponent: loadButtonComponent,
116
+ mapper: previousButtonFieldMapper,
117
+ ...BUTTON_FIELD_TYPES_BASE
118
+ },
119
+ {
120
+ name: BsField.AddArrayItem,
121
+ loadComponent: loadButtonComponent,
122
+ mapper: addArrayItemButtonMapper,
123
+ ...BUTTON_FIELD_TYPES_BASE
124
+ },
125
+ {
126
+ name: BsField.PrependArrayItem,
127
+ loadComponent: loadButtonComponent,
128
+ mapper: prependArrayItemButtonMapper,
129
+ ...BUTTON_FIELD_TYPES_BASE
130
+ },
131
+ {
132
+ name: BsField.InsertArrayItem,
133
+ loadComponent: loadButtonComponent,
134
+ mapper: insertArrayItemButtonMapper,
135
+ ...BUTTON_FIELD_TYPES_BASE
136
+ },
137
+ {
138
+ name: BsField.RemoveArrayItem,
139
+ loadComponent: loadButtonComponent,
140
+ mapper: removeArrayItemButtonMapper,
141
+ ...BUTTON_FIELD_TYPES_BASE
142
+ },
143
+ {
144
+ name: BsField.PopArrayItem,
145
+ loadComponent: loadButtonComponent,
146
+ mapper: popArrayItemButtonMapper,
147
+ ...BUTTON_FIELD_TYPES_BASE
148
+ },
149
+ {
150
+ name: BsField.ShiftArrayItem,
151
+ loadComponent: loadButtonComponent,
152
+ mapper: shiftArrayItemButtonMapper,
153
+ ...BUTTON_FIELD_TYPES_BASE
154
+ },
155
+ {
156
+ name: BsField.Textarea,
157
+ loadComponent: loadTextareaComponent,
158
+ mapper: valueFieldMapper,
159
+ propsToMeta: ["rows"],
160
+ scope: "text-input",
161
+ ...VALUE_FIELD_TYPES_BASE
162
+ },
163
+ {
164
+ name: BsField.Radio,
165
+ loadComponent: loadRadioComponent,
166
+ mapper: optionsFieldMapper,
167
+ scope: "single-select",
168
+ ...VALUE_FIELD_TYPES_BASE
169
+ },
170
+ {
171
+ name: BsField.MultiCheckbox,
172
+ loadComponent: loadMultiCheckboxComponent,
173
+ mapper: optionsFieldMapper,
174
+ scope: "multi-select",
175
+ ...VALUE_FIELD_TYPES_BASE
176
+ },
177
+ {
178
+ name: BsField.Datepicker,
179
+ loadComponent: loadDatepickerComponent,
180
+ mapper: datepickerFieldMapper,
181
+ scope: "date",
182
+ ...VALUE_FIELD_TYPES_BASE
183
+ },
184
+ {
185
+ name: BsField.Slider,
186
+ loadComponent: loadSliderComponent,
187
+ mapper: valueFieldMapper,
188
+ scope: "numeric",
189
+ ...VALUE_FIELD_TYPES_BASE
190
+ },
191
+ {
192
+ name: BsField.Toggle,
193
+ loadComponent: loadToggleComponent,
194
+ mapper: checkboxFieldMapper,
195
+ scope: "boolean",
196
+ ...VALUE_FIELD_TYPES_BASE
197
+ }
213
198
  ];
214
-
215
-
216
199
  const BOOTSTRAP_FIELD_ERRORS_WRAPPER = {
217
- wrapperName: 'field-errors',
218
- loadComponent: () => import('./ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-D4qTxFSp.mjs'),
219
- rendersFieldErrors: true,
200
+ wrapperName: "field-errors",
201
+ loadComponent: () => import("./ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-42hynKVO.mjs"),
202
+ rendersFieldErrors: true
220
203
  };
221
204
  function withBootstrapFields(config) {
222
- const base = [...BOOTSTRAP_FIELD_TYPES, withBootstrapAddons(), BOOTSTRAP_FIELD_ERRORS_WRAPPER];
223
- if (config) {
224
- base.push({
225
- ɵkind: 'bootstrap-config',
226
- ɵproviders: [{ provide: BOOTSTRAP_CONFIG, useValue: config }],
227
- });
228
- return base;
229
- }
230
- return base;
205
+ const base = [
206
+ ...BOOTSTRAP_FIELD_TYPES,
207
+ withBootstrapAddons(),
208
+ BOOTSTRAP_FIELD_ERRORS_WRAPPER
209
+ ];
210
+ if (config) {
211
+ base.push({
212
+ ɵkind: "bootstrap-config",
213
+ ɵproviders: [{
214
+ provide: BOOTSTRAP_CONFIG$1,
215
+ useValue: config
216
+ }]
217
+ });
218
+ return base;
219
+ }
220
+ return base;
231
221
  }
232
- /* -- Bootstrap addon types --------------------------------------------- */
233
222
  const BS_ICON_KIND = {
234
- type: 'bs-icon',
235
- loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon').then((m) => m.BsIconAddonComponent),
236
- validate: (addon, fieldKey) => {
237
- if (typeof addon.icon !== 'string' || addon.icon.length === 0) {
238
- throw new DynamicFormError(`Addon type 'bs-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);
239
- }
240
- },
223
+ type: "bs-icon",
224
+ loadComponent: () => import("@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon").then((m) => m.BsIconAddonComponent),
225
+ validate: (addon, fieldKey) => {
226
+ if (typeof addon.icon !== "string" || addon.icon.length === 0) throw new DynamicFormError(`Addon type 'bs-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);
227
+ }
241
228
  };
242
229
  const BS_BUTTON_KIND = {
243
- type: 'bs-button',
244
- loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-button').then((m) => m.BsButtonAddonComponent),
245
- validate: (addon, fieldKey) => {
246
- const set = [addon.preset, addon.actionRef, addon.action].filter((v) => v !== undefined);
247
- if (set.length > 1) {
248
- throw new DynamicFormError(`Addon type 'bs-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`);
249
- }
250
- if (addon.icon && !addon.label && !addon.ariaLabel) {
251
- throw new DynamicFormError(`Addon type 'bs-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);
252
- }
253
- },
230
+ type: "bs-button",
231
+ loadComponent: () => import("@ng-forge/dynamic-forms-bootstrap/lazy/addon-button").then((m) => m.BsButtonAddonComponent),
232
+ validate: (addon, fieldKey) => {
233
+ if ([
234
+ addon.preset,
235
+ addon.actionRef,
236
+ addon.action
237
+ ].filter((v) => v !== void 0).length > 1) throw new DynamicFormError(`Addon type 'bs-button' on field '${fieldKey}' has more than one of preset/actionRef/action — exactly one allowed.`);
238
+ if (addon.icon && !addon.label && !addon.ariaLabel) throw new DynamicFormError(`Addon type 'bs-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);
239
+ }
254
240
  };
255
241
  function withBootstrapAddons() {
256
- return {
257
- ɵkind: 'addons',
258
- ɵproviders: [
259
- { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_ICON_KIND, multi: true },
260
- { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_BUTTON_KIND, multi: true },
261
- ],
262
- };
242
+ return {
243
+ ɵkind: "addons",
244
+ ɵproviders: [{
245
+ provide: ADDON_TYPE_DEFINITIONS,
246
+ useValue: BS_ICON_KIND,
247
+ multi: true
248
+ }, {
249
+ provide: ADDON_TYPE_DEFINITIONS,
250
+ useValue: BS_BUTTON_KIND,
251
+ multi: true
252
+ }]
253
+ };
263
254
  }
255
+ export { BOOTSTRAP_CONFIG, BOOTSTRAP_FIELD_TYPES, BS_INPUT_TYPE_OVERRIDE, BsField, withBootstrapAddons, withBootstrapFields };
264
256
 
265
-
266
- /* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */
267
-
268
-
269
- export { BOOTSTRAP_FIELD_TYPES, BsField, withBootstrapAddons, withBootstrapFields };
270
- //# sourceMappingURL=ng-forge-dynamic-forms-bootstrap.mjs.map
257
+ //# sourceMappingURL=ng-forge-dynamic-forms-bootstrap.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-forge-dynamic-forms-bootstrap.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;;;ACvCA;;;AAIA;AACE;AACA;;AAGF;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAIA;AAEA;AAEA;AAGO;AACL;;AAEE;AACA;;AAEA;AACA;AACE;AACD;AACD;AACD;AACD;;AAEE;AACA;AACA;AACA;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;;AAEA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACD;;;;ACtJH;AACE;AACA;AACA;;AAeI;;;;AAOA;;AAEgC;AAClC;;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-bootstrap/src/lib/types/types.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/fields/button/bs-button.mapper.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/config/bootstrap-field-config.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/providers/bootstrap-providers.ts","../../../../packages/dynamic-forms-bootstrap/src/index.ts"],"sourcesContent":["/**\n * Bootstrap field type constants\n * Based on available field components in the /fields folder\n */\nexport const BsField = {\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 BsFieldType = (typeof BsField)[keyof typeof BsField];\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 real lazy secondary entrypoints. */\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 { BsField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/bs-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/bs-specific-button.mapper';\n\nconst VALUE_FIELD_TYPES_BASE = {\n renderReadyWhen: ['field'],\n} as const;\n\nconst BUTTON_FIELD_TYPES_BASE = {\n renderReadyWhen: [],\n valueHandling: 'exclude',\n} as const;\n\nconst loadInputComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/input').then(({ BsInputFieldComponent }) => BsInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/select').then(({ BsSelectFieldComponent }) => BsSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/checkbox').then(({ BsCheckboxFieldComponent }) => BsCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/button').then(({ BsButtonFieldComponent }) => BsButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/textarea').then(({ BsTextareaFieldComponent }) => BsTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/radio').then(({ BsRadioFieldComponent }) => BsRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox').then(\n ({ BsMultiCheckboxFieldComponent }) => BsMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/datepicker').then(({ BsDatepickerFieldComponent }) => BsDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/slider').then(({ BsSliderFieldComponent }) => BsSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/toggle').then(({ BsToggleFieldComponent }) => BsToggleFieldComponent);\n\nexport const BOOTSTRAP_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: BsField.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: BsField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows'],\n scope: 'text-input',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.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 real lazy secondary entrypoints. */\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 { BOOTSTRAP_FIELD_TYPES } from '../config/bootstrap-field-config';\nimport { BOOTSTRAP_CONFIG, type BootstrapConfig, type BsButtonAddon, type BsIconAddon } from '@ng-forge/dynamic-forms-bootstrap/shared';\n\n/** Field type definitions for Bootstrap components. */\nexport type BootstrapFieldTypes = FieldTypeDefinition[];\n\ntype BootstrapConfigFeature = {\n ɵkind: 'bootstrap-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withBootstrapFields()` shape — field defs + the auto-included\n * addons feature so `bs-icon` / `bs-button` work out of the box.\n */\ntype BootstrapFieldsWithAddons = [...BootstrapFieldTypes, BootstrapAddonsFeature, WrapperTypeDefinition];\n\ntype BootstrapFieldsWithConfig = [...BootstrapFieldTypes, BootstrapAddonsFeature, WrapperTypeDefinition, BootstrapConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Bootstrap 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 BOOTSTRAP_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/bs-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Provides Bootstrap field type definitions for the dynamic form system,\n * with Bootstrap-shipped addon types (`bs-icon`, `bs-button`) auto-included\n * so addons work out of the box.\n *\n * @param config - Optional global configuration for Bootstrap form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withBootstrapFields(): BootstrapFieldsWithAddons;\nexport function withBootstrapFields(config: BootstrapConfig): BootstrapFieldsWithConfig;\nexport function withBootstrapFields(config: BootstrapConfig | undefined): BootstrapFieldsWithAddons | BootstrapFieldsWithConfig;\nexport function withBootstrapFields(config?: BootstrapConfig): BootstrapFieldsWithAddons | BootstrapFieldsWithConfig {\n // Always include the addons feature — bs-icon / bs-button are part of\n // the canonical Bootstrap surface.\n const base: unknown[] = [...BOOTSTRAP_FIELD_TYPES, withBootstrapAddons(), BOOTSTRAP_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'bootstrap-config',\n ɵproviders: [{ provide: BOOTSTRAP_CONFIG, useValue: config }],\n } satisfies BootstrapConfigFeature);\n return base as BootstrapFieldsWithConfig;\n }\n\n return base as BootstrapFieldsWithAddons;\n}\n\n/* -- Bootstrap addon types --------------------------------------------- */\n\nconst BS_ICON_KIND: AddonTypeDefinition<BsIconAddon> = {\n type: 'bs-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon').then((m) => m.BsIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'bs-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst BS_BUTTON_KIND: AddonTypeDefinition<BsButtonAddon> = {\n type: 'bs-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-button').then((m) => m.BsButtonAddonComponent),\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 'bs-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 'bs-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Bootstrap addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype BootstrapAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Bootstrap-shipped addon types (`bs-icon`, `bs-button`) standalone. */\nexport function withBootstrapAddons(): BootstrapAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_BUTTON_KIND, multi: true },\n ],\n };\n}\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nexport { BOOTSTRAP_FIELD_TYPES, BOOTSTRAP_CONFIG, BsField, withBootstrapFields, withBootstrapAddons, BS_INPUT_TYPE_OVERRIDE } from './lib';\n\nexport type { BsIconAddon, BsButtonAddon, BsAddon, BsInputAddon, BsAddonExtensions } from './lib';\nexport type {\n BsButtonProps,\n BsButtonField,\n BsSubmitButtonField,\n BsNextButtonField,\n BsPreviousButtonField,\n BsAddArrayItemButtonField,\n BsPrependArrayItemButtonField,\n BsInsertArrayItemButtonField,\n BsRemoveArrayItemButtonField,\n BsPopArrayItemButtonField,\n BsShiftArrayItemButtonField,\n BsCheckboxProps,\n BsCheckboxField,\n BsDatepickerProps,\n BsDatepickerField,\n BsInputProps,\n BsInputField,\n BsMultiCheckboxProps,\n BsMultiCheckboxField,\n BsRadioProps,\n BsRadioField,\n BsSelectProps,\n BsSelectField,\n BsSliderProps,\n BsSliderField,\n BsTextareaProps,\n BsTextareaField,\n BsToggleProps,\n BsToggleField,\n BootstrapConfig,\n BsFieldType,\n BsFormProps,\n BsFormConfig,\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 { BsButtonFieldComponent as BsButtonFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/button';\nimport type { BsCheckboxFieldComponent as BsCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/checkbox';\nimport type { BsDatepickerFieldComponent as BsDatepickerFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/datepicker';\nimport type { BsInputFieldComponent as BsInputFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/input';\nimport type { BsMultiCheckboxFieldComponent as BsMultiCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox';\nimport type { BsRadioFieldComponent as BsRadioFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/radio';\nimport type { BsSelectFieldComponent as BsSelectFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/select';\nimport type { BsSliderFieldComponent as BsSliderFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/slider';\nimport type { BsTextareaFieldComponent as BsTextareaFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/textarea';\nimport type { BsToggleFieldComponent as BsToggleFieldComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/toggle';\nimport type { BsIconAddonComponent as BsIconAddonComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon';\nimport type { BsButtonAddonComponent as BsButtonAddonComponentClass } from '@ng-forge/dynamic-forms-bootstrap/lazy/addon-button';\n\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/button`. Import it from there to use the class as a value. */\nexport type BsButtonFieldComponent<TEvent extends FormEvent> = BsButtonFieldComponentClass<TEvent>;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/checkbox`. Import it from there to use the class as a value. */\nexport type BsCheckboxFieldComponent = BsCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/datepicker`. Import it from there to use the class as a value. */\nexport type BsDatepickerFieldComponent = BsDatepickerFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/input`. Import it from there to use the class as a value. */\nexport type BsInputFieldComponent = BsInputFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox`. Import it from there to use the class as a value. */\nexport type BsMultiCheckboxFieldComponent = BsMultiCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/radio`. Import it from there to use the class as a value. */\nexport type BsRadioFieldComponent = BsRadioFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/select`. Import it from there to use the class as a value. */\nexport type BsSelectFieldComponent = BsSelectFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/slider`. Import it from there to use the class as a value. */\nexport type BsSliderFieldComponent = BsSliderFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/textarea`. Import it from there to use the class as a value. */\nexport type BsTextareaFieldComponent = BsTextareaFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/toggle`. Import it from there to use the class as a value. */\nexport type BsToggleFieldComponent = BsToggleFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon`. Import it from there to use the class as a value. */\nexport type BsIconAddonComponent = BsIconAddonComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-bootstrap/lazy/addon-button`. Import it from there to use the class as a value. */\nexport type BsButtonAddonComponent = BsButtonAddonComponentClass;\n"]}
1
+ {"version":3,"file":"ng-forge-dynamic-forms-bootstrap.mjs","names":["BOOTSTRAP_CONFIG"],"sources":["../../../../packages/dynamic-forms-bootstrap/src/lib/types/types.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/fields/button/bs-button.mapper.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/config/bootstrap-field-config.ts","../../../../packages/dynamic-forms-bootstrap/src/lib/providers/bootstrap-providers.ts"],"sourcesContent":["/**\n * Bootstrap field type constants\n * Based on available field components in the /fields folder\n */\nexport const BsField = {\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 BsFieldType = (typeof BsField)[keyof typeof BsField];\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 real lazy secondary entrypoints. */\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 { BsField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/bs-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/bs-specific-button.mapper';\n\nconst VALUE_FIELD_TYPES_BASE = {\n renderReadyWhen: ['field'],\n} as const;\n\nconst BUTTON_FIELD_TYPES_BASE = {\n renderReadyWhen: [],\n valueHandling: 'exclude',\n} as const;\n\nconst loadInputComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/input').then(({ BsInputFieldComponent }) => BsInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/select').then(({ BsSelectFieldComponent }) => BsSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/checkbox').then(({ BsCheckboxFieldComponent }) => BsCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/button').then(({ BsButtonFieldComponent }) => BsButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/textarea').then(({ BsTextareaFieldComponent }) => BsTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/radio').then(({ BsRadioFieldComponent }) => BsRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/multi-checkbox').then(\n ({ BsMultiCheckboxFieldComponent }) => BsMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/datepicker').then(({ BsDatepickerFieldComponent }) => BsDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/slider').then(({ BsSliderFieldComponent }) => BsSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-bootstrap/lazy/toggle').then(({ BsToggleFieldComponent }) => BsToggleFieldComponent);\n\nexport const BOOTSTRAP_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: BsField.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: BsField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows'],\n scope: 'text-input',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: BsField.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 real lazy secondary entrypoints. */\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 { BOOTSTRAP_FIELD_TYPES } from '../config/bootstrap-field-config';\nimport { BOOTSTRAP_CONFIG, type BootstrapConfig, type BsButtonAddon, type BsIconAddon } from '@ng-forge/dynamic-forms-bootstrap/shared';\n\n/** Field type definitions for Bootstrap components. */\nexport type BootstrapFieldTypes = FieldTypeDefinition[];\n\ntype BootstrapConfigFeature = {\n ɵkind: 'bootstrap-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withBootstrapFields()` shape — field defs + the auto-included\n * addons feature so `bs-icon` / `bs-button` work out of the box.\n */\ntype BootstrapFieldsWithAddons = [...BootstrapFieldTypes, BootstrapAddonsFeature, WrapperTypeDefinition];\n\ntype BootstrapFieldsWithConfig = [...BootstrapFieldTypes, BootstrapAddonsFeature, WrapperTypeDefinition, BootstrapConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Bootstrap 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 BOOTSTRAP_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/bs-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Provides Bootstrap field type definitions for the dynamic form system,\n * with Bootstrap-shipped addon types (`bs-icon`, `bs-button`) auto-included\n * so addons work out of the box.\n *\n * @param config - Optional global configuration for Bootstrap form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withBootstrapFields(): BootstrapFieldsWithAddons;\nexport function withBootstrapFields(config: BootstrapConfig): BootstrapFieldsWithConfig;\nexport function withBootstrapFields(config: BootstrapConfig | undefined): BootstrapFieldsWithAddons | BootstrapFieldsWithConfig;\nexport function withBootstrapFields(config?: BootstrapConfig): BootstrapFieldsWithAddons | BootstrapFieldsWithConfig {\n // Always include the addons feature — bs-icon / bs-button are part of\n // the canonical Bootstrap surface.\n const base: unknown[] = [...BOOTSTRAP_FIELD_TYPES, withBootstrapAddons(), BOOTSTRAP_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'bootstrap-config',\n ɵproviders: [{ provide: BOOTSTRAP_CONFIG, useValue: config }],\n } satisfies BootstrapConfigFeature);\n return base as BootstrapFieldsWithConfig;\n }\n\n return base as BootstrapFieldsWithAddons;\n}\n\n/* -- Bootstrap addon types --------------------------------------------- */\n\nconst BS_ICON_KIND: AddonTypeDefinition<BsIconAddon> = {\n type: 'bs-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-icon').then((m) => m.BsIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'bs-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst BS_BUTTON_KIND: AddonTypeDefinition<BsButtonAddon> = {\n type: 'bs-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-bootstrap/lazy/addon-button').then((m) => m.BsButtonAddonComponent),\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 'bs-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 'bs-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Bootstrap addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype BootstrapAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Bootstrap-shipped addon types (`bs-icon`, `bs-button`) standalone. */\nexport function withBootstrapAddons(): BootstrapAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: BS_BUTTON_KIND, multi: true },\n ],\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-forge/dynamic-forms-bootstrap",
3
- "version": "1.3.0-next.2",
3
+ "version": "1.3.0-next.4",
4
4
  "description": "Bootstrap 5 integration for @ng-forge/dynamic-forms. Pre-built Bootstrap form components.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -93,7 +93,7 @@
93
93
  "@angular/common": "^22.0.0",
94
94
  "@angular/core": "^22.0.0",
95
95
  "@angular/forms": "^22.0.0",
96
- "@ng-forge/dynamic-forms": "~1.3.0-next.2",
96
+ "@ng-forge/dynamic-forms": "~1.3.0-next.4",
97
97
  "rxjs": ">=7.0.0"
98
98
  },
99
99
  "dependencies": {