@ng-forge/dynamic-forms-bootstrap 1.3.0-next.1 → 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.
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-42hynKVO.mjs +56 -0
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-42hynKVO.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.mjs +64 -37
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.mjs +92 -34
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-button.mjs +94 -49
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-button.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.mjs +97 -23
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.mjs +169 -40
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-input.mjs +180 -88
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-input.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.mjs +143 -66
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-radio.mjs +326 -61
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-radio.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-select.mjs +123 -33
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-select.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-slider.mjs +161 -30
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-slider.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-textarea.mjs +97 -23
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-textarea.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-toggle.mjs +97 -23
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-lazy-toggle.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-shared.mjs +100 -41
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-shared.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-bootstrap.mjs +238 -251
- package/fesm2022/ng-forge-dynamic-forms-bootstrap.mjs.map +1 -1
- package/package.json +2 -2
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-addon-button.d.ts +18 -18
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-addon-icon.d.ts +24 -17
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-button.d.ts +94 -88
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-checkbox.d.ts +24 -18
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-datepicker.d.ts +49 -28
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-input.d.ts +51 -38
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-multi-checkbox.d.ts +34 -23
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-radio.d.ts +30 -19
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-select.d.ts +36 -24
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-slider.d.ts +56 -35
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-textarea.d.ts +24 -18
- package/types/ng-forge-dynamic-forms-bootstrap-lazy-toggle.d.ts +23 -17
- package/types/ng-forge-dynamic-forms-bootstrap-shared.d.ts +78 -71
- package/types/ng-forge-dynamic-forms-bootstrap.d.ts +225 -251
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-D4qTxFSp.mjs +0 -25
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-bs-field-errors-wrapper.component-D4qTxFSp.mjs.map +0 -1
|
@@ -1,270 +1,257 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { BOOTSTRAP_CONFIG } from
|
|
4
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
72
|
-
|
|
58
|
+
renderReadyWhen: [],
|
|
59
|
+
valueHandling: "exclude"
|
|
73
60
|
};
|
|
74
|
-
const loadInputComponent = () => import(
|
|
75
|
-
const loadSelectComponent = () => import(
|
|
76
|
-
const loadCheckboxComponent = () => import(
|
|
77
|
-
const loadButtonComponent = () => import(
|
|
78
|
-
const loadTextareaComponent = () => import(
|
|
79
|
-
const loadRadioComponent = () => import(
|
|
80
|
-
const loadMultiCheckboxComponent = () => import(
|
|
81
|
-
const loadDatepickerComponent = () => import(
|
|
82
|
-
const loadSliderComponent = () => import(
|
|
83
|
-
const loadToggleComponent = () => import(
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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.
|
|
3
|
+
"version": "1.3.0-next.3",
|
|
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.
|
|
96
|
+
"@ng-forge/dynamic-forms": "~1.3.0-next.3",
|
|
97
97
|
"rxjs": ">=7.0.0"
|
|
98
98
|
},
|
|
99
99
|
"dependencies": {
|