@ng-forge/dynamic-forms-ionic 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/README.md +0 -2
- package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-bXoq9uY6.mjs +64 -0
- package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-bXoq9uY6.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-button.mjs +129 -34
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-button.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-icon.mjs +118 -35
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-icon.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-button.mjs +113 -33
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-button.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-checkbox.mjs +124 -24
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-checkbox.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-datepicker.mjs +374 -90
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-datepicker.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-input.mjs +262 -126
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-input.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.mjs +191 -64
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-radio.mjs +178 -27
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-radio.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-select.mjs +163 -27
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-select.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-slider.mjs +144 -27
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-slider.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-textarea.mjs +157 -45
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-textarea.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-toggle.mjs +386 -75
- package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-toggle.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic-shared.mjs +139 -62
- package/fesm2022/ng-forge-dynamic-forms-ionic-shared.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-ionic.mjs +238 -251
- package/fesm2022/ng-forge-dynamic-forms-ionic.mjs.map +1 -1
- package/package.json +2 -3
- package/types/ng-forge-dynamic-forms-ionic-lazy-addon-button.d.ts +28 -28
- package/types/ng-forge-dynamic-forms-ionic-lazy-addon-icon.d.ts +24 -17
- package/types/ng-forge-dynamic-forms-ionic-lazy-button.d.ts +92 -86
- package/types/ng-forge-dynamic-forms-ionic-lazy-checkbox.d.ts +24 -18
- package/types/ng-forge-dynamic-forms-ionic-lazy-datepicker.d.ts +59 -34
- package/types/ng-forge-dynamic-forms-ionic-lazy-input.d.ts +69 -57
- package/types/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.d.ts +34 -23
- package/types/ng-forge-dynamic-forms-ionic-lazy-radio.d.ts +31 -20
- package/types/ng-forge-dynamic-forms-ionic-lazy-select.d.ts +37 -26
- package/types/ng-forge-dynamic-forms-ionic-lazy-slider.d.ts +53 -38
- package/types/ng-forge-dynamic-forms-ionic-lazy-textarea.d.ts +29 -23
- package/types/ng-forge-dynamic-forms-ionic-lazy-toggle.d.ts +119 -55
- package/types/ng-forge-dynamic-forms-ionic-shared.d.ts +78 -83
- package/types/ng-forge-dynamic-forms-ionic.d.ts +243 -266
- package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-CN0CagvT.mjs +0 -26
- package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-CN0CagvT.mjs.map +0 -1
|
@@ -1,270 +1,257 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { IONIC_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 { IONIC_CONFIG, IONIC_CONFIG as IONIC_CONFIG$1, IONIC_INPUT_TYPE_OVERRIDE } from "@ng-forge/dynamic-forms-ionic/shared";
|
|
4
|
+
import { DynamicFormError } from "@ng-forge/dynamic-forms";
|
|
7
5
|
const IonicField = {
|
|
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-ionic/lazy/input").then(({ IonicInputFieldComponent }) => IonicInputFieldComponent);
|
|
62
|
+
const loadSelectComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/select").then(({ IonicSelectFieldComponent }) => IonicSelectFieldComponent);
|
|
63
|
+
const loadCheckboxComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/checkbox").then(({ IonicCheckboxFieldComponent }) => IonicCheckboxFieldComponent);
|
|
64
|
+
const loadButtonComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/button").then(({ IonicButtonFieldComponent }) => IonicButtonFieldComponent);
|
|
65
|
+
const loadTextareaComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/textarea").then(({ IonicTextareaFieldComponent }) => IonicTextareaFieldComponent);
|
|
66
|
+
const loadRadioComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/radio").then(({ IonicRadioFieldComponent }) => IonicRadioFieldComponent);
|
|
67
|
+
const loadMultiCheckboxComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/multi-checkbox").then(({ IonicMultiCheckboxFieldComponent }) => IonicMultiCheckboxFieldComponent);
|
|
68
|
+
const loadDatepickerComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/datepicker").then(({ IonicDatepickerFieldComponent }) => IonicDatepickerFieldComponent);
|
|
69
|
+
const loadSliderComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/slider").then(({ IonicSliderFieldComponent }) => IonicSliderFieldComponent);
|
|
70
|
+
const loadToggleComponent = () => import("@ng-forge/dynamic-forms-ionic/lazy/toggle").then(({ IonicToggleFieldComponent }) => IonicToggleFieldComponent);
|
|
84
71
|
const IONIC_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: IonicField.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: IonicField.Select,
|
|
83
|
+
loadComponent: loadSelectComponent,
|
|
84
|
+
mapper: optionsFieldMapper,
|
|
85
|
+
scope: "single-select",
|
|
86
|
+
...VALUE_FIELD_TYPES_BASE
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: IonicField.Checkbox,
|
|
90
|
+
loadComponent: loadCheckboxComponent,
|
|
91
|
+
mapper: checkboxFieldMapper,
|
|
92
|
+
scope: "boolean",
|
|
93
|
+
...VALUE_FIELD_TYPES_BASE
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: IonicField.Button,
|
|
97
|
+
loadComponent: loadButtonComponent,
|
|
98
|
+
mapper: buttonFieldMapper,
|
|
99
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: IonicField.Submit,
|
|
103
|
+
loadComponent: loadButtonComponent,
|
|
104
|
+
mapper: submitButtonFieldMapper,
|
|
105
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: IonicField.Next,
|
|
109
|
+
loadComponent: loadButtonComponent,
|
|
110
|
+
mapper: nextButtonFieldMapper,
|
|
111
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: IonicField.Previous,
|
|
115
|
+
loadComponent: loadButtonComponent,
|
|
116
|
+
mapper: previousButtonFieldMapper,
|
|
117
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: IonicField.AddArrayItem,
|
|
121
|
+
loadComponent: loadButtonComponent,
|
|
122
|
+
mapper: addArrayItemButtonMapper,
|
|
123
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: IonicField.PrependArrayItem,
|
|
127
|
+
loadComponent: loadButtonComponent,
|
|
128
|
+
mapper: prependArrayItemButtonMapper,
|
|
129
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: IonicField.InsertArrayItem,
|
|
133
|
+
loadComponent: loadButtonComponent,
|
|
134
|
+
mapper: insertArrayItemButtonMapper,
|
|
135
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: IonicField.RemoveArrayItem,
|
|
139
|
+
loadComponent: loadButtonComponent,
|
|
140
|
+
mapper: removeArrayItemButtonMapper,
|
|
141
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: IonicField.PopArrayItem,
|
|
145
|
+
loadComponent: loadButtonComponent,
|
|
146
|
+
mapper: popArrayItemButtonMapper,
|
|
147
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: IonicField.ShiftArrayItem,
|
|
151
|
+
loadComponent: loadButtonComponent,
|
|
152
|
+
mapper: shiftArrayItemButtonMapper,
|
|
153
|
+
...BUTTON_FIELD_TYPES_BASE
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: IonicField.Textarea,
|
|
157
|
+
loadComponent: loadTextareaComponent,
|
|
158
|
+
mapper: valueFieldMapper,
|
|
159
|
+
propsToMeta: ["rows"],
|
|
160
|
+
scope: "text-input",
|
|
161
|
+
...VALUE_FIELD_TYPES_BASE
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: IonicField.Radio,
|
|
165
|
+
loadComponent: loadRadioComponent,
|
|
166
|
+
mapper: optionsFieldMapper,
|
|
167
|
+
scope: "single-select",
|
|
168
|
+
...VALUE_FIELD_TYPES_BASE
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: IonicField.MultiCheckbox,
|
|
172
|
+
loadComponent: loadMultiCheckboxComponent,
|
|
173
|
+
mapper: optionsFieldMapper,
|
|
174
|
+
scope: "multi-select",
|
|
175
|
+
...VALUE_FIELD_TYPES_BASE
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: IonicField.Datepicker,
|
|
179
|
+
loadComponent: loadDatepickerComponent,
|
|
180
|
+
mapper: datepickerFieldMapper,
|
|
181
|
+
scope: "date",
|
|
182
|
+
...VALUE_FIELD_TYPES_BASE
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: IonicField.Slider,
|
|
186
|
+
loadComponent: loadSliderComponent,
|
|
187
|
+
mapper: valueFieldMapper,
|
|
188
|
+
scope: "numeric",
|
|
189
|
+
...VALUE_FIELD_TYPES_BASE
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: IonicField.Toggle,
|
|
193
|
+
loadComponent: loadToggleComponent,
|
|
194
|
+
mapper: checkboxFieldMapper,
|
|
195
|
+
scope: "boolean",
|
|
196
|
+
...VALUE_FIELD_TYPES_BASE
|
|
197
|
+
}
|
|
213
198
|
];
|
|
214
|
-
|
|
215
|
-
|
|
216
199
|
const IONIC_FIELD_ERRORS_WRAPPER = {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
200
|
+
wrapperName: "field-errors",
|
|
201
|
+
loadComponent: () => import("./ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-bXoq9uY6.mjs"),
|
|
202
|
+
rendersFieldErrors: true
|
|
220
203
|
};
|
|
221
204
|
function withIonicFields(config) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
205
|
+
const base = [
|
|
206
|
+
...IONIC_FIELD_TYPES,
|
|
207
|
+
withIonicAddons(),
|
|
208
|
+
IONIC_FIELD_ERRORS_WRAPPER
|
|
209
|
+
];
|
|
210
|
+
if (config) {
|
|
211
|
+
base.push({
|
|
212
|
+
ɵkind: "ionic-config",
|
|
213
|
+
ɵproviders: [{
|
|
214
|
+
provide: IONIC_CONFIG$1,
|
|
215
|
+
useValue: config
|
|
216
|
+
}]
|
|
217
|
+
});
|
|
218
|
+
return base;
|
|
219
|
+
}
|
|
220
|
+
return base;
|
|
231
221
|
}
|
|
232
|
-
/* -- Ionic addon types ------------------------------------------------- */
|
|
233
222
|
const ION_ICON_KIND = {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
},
|
|
223
|
+
type: "ion-icon",
|
|
224
|
+
loadComponent: () => import("@ng-forge/dynamic-forms-ionic/lazy/addon-icon").then((m) => m.IonicIconAddonComponent),
|
|
225
|
+
validate: (addon, fieldKey) => {
|
|
226
|
+
if (typeof addon.icon !== "string" || addon.icon.length === 0) throw new DynamicFormError(`Addon type 'ion-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);
|
|
227
|
+
}
|
|
241
228
|
};
|
|
242
229
|
const ION_BUTTON_KIND = {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
},
|
|
230
|
+
type: "ion-button",
|
|
231
|
+
loadComponent: () => import("@ng-forge/dynamic-forms-ionic/lazy/addon-button").then((m) => m.IonicButtonAddonComponent),
|
|
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 'ion-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 'ion-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);
|
|
239
|
+
}
|
|
254
240
|
};
|
|
255
241
|
function withIonicAddons() {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
242
|
+
return {
|
|
243
|
+
ɵkind: "addons",
|
|
244
|
+
ɵproviders: [{
|
|
245
|
+
provide: ADDON_TYPE_DEFINITIONS,
|
|
246
|
+
useValue: ION_ICON_KIND,
|
|
247
|
+
multi: true
|
|
248
|
+
}, {
|
|
249
|
+
provide: ADDON_TYPE_DEFINITIONS,
|
|
250
|
+
useValue: ION_BUTTON_KIND,
|
|
251
|
+
multi: true
|
|
252
|
+
}]
|
|
253
|
+
};
|
|
263
254
|
}
|
|
255
|
+
export { IONIC_CONFIG, IONIC_FIELD_TYPES, IONIC_INPUT_TYPE_OVERRIDE, IonicField, withIonicAddons, withIonicFields };
|
|
264
256
|
|
|
265
|
-
|
|
266
|
-
/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
export { IONIC_FIELD_TYPES, IonicField, withIonicAddons, withIonicFields };
|
|
270
|
-
//# sourceMappingURL=ng-forge-dynamic-forms-ionic.mjs.map
|
|
257
|
+
//# sourceMappingURL=ng-forge-dynamic-forms-ionic.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-forge-dynamic-forms-ionic.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;AAOO;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;;;;AC1JH;AACE;AACA;AACA;;AAeI;;;;AAOA;;AAE4B;AAC9B;;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-ionic/src/lib/types/types.ts","../../../../packages/dynamic-forms-ionic/src/lib/fields/button/ionic-button.mapper.ts","../../../../packages/dynamic-forms-ionic/src/lib/config/ionic-field-config.ts","../../../../packages/dynamic-forms-ionic/src/lib/providers/ionic-providers.ts","../../../../packages/dynamic-forms-ionic/src/index.ts"],"sourcesContent":["/**\n * Ionic field type constants\n * Based on available field components in the /fields folder\n */\nexport const IonicField = {\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 IonicFieldType = (typeof IonicField)[keyof typeof IonicField];\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 -- Published secondary-entry imports must remain package specifiers for real lazy chunks. */\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 { IonicField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/ionic-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/ionic-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-ionic/lazy/input').then(({ IonicInputFieldComponent }) => IonicInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/select').then(({ IonicSelectFieldComponent }) => IonicSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/checkbox').then(({ IonicCheckboxFieldComponent }) => IonicCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/button').then(({ IonicButtonFieldComponent }) => IonicButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/textarea').then(({ IonicTextareaFieldComponent }) => IonicTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/radio').then(({ IonicRadioFieldComponent }) => IonicRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/multi-checkbox').then(\n ({ IonicMultiCheckboxFieldComponent }) => IonicMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/datepicker').then(({ IonicDatepickerFieldComponent }) => IonicDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/slider').then(({ IonicSliderFieldComponent }) => IonicSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/toggle').then(({ IonicToggleFieldComponent }) => IonicToggleFieldComponent);\n\n/**\n * Ionic field type definitions\n * Follows the FieldTypeDefinition interface for proper registry integration\n */\nexport const IONIC_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: IonicField.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: IonicField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows'],\n scope: 'text-input',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Toggle,\n loadComponent: loadToggleComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n];\n","/* eslint-disable @nx/enforce-module-boundaries -- Published secondary-entry imports must remain package specifiers for real lazy chunks. */\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 { IONIC_CONFIG, type IonicButtonAddon, type IonicConfig, type IonicIconAddon } from '@ng-forge/dynamic-forms-ionic/shared';\nimport { IONIC_FIELD_TYPES } from '../config/ionic-field-config';\n\n/** Field type definitions for Ionic components. */\nexport type IonicFieldTypes = FieldTypeDefinition[];\n\ntype IonicConfigFeature = {\n ɵkind: 'ionic-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withIonicFields()` shape — field defs + the auto-included\n * addons feature so `ion-icon` / `ion-button` work out of the box.\n */\ntype IonicFieldsWithAddons = [...IonicFieldTypes, IonicAddonsFeature, WrapperTypeDefinition];\n\ntype IonicFieldsWithConfig = [...IonicFieldTypes, IonicAddonsFeature, WrapperTypeDefinition, IonicConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Ionic 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 IONIC_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/ionic-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Provides Ionic field type definitions for the dynamic form system,\n * with Ionic-shipped addon types (`ion-icon`, `ion-button`) auto-included\n * so addons work out of the box.\n *\n * @param config - Optional global configuration for Ionic form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withIonicFields(): IonicFieldsWithAddons;\nexport function withIonicFields(config: IonicConfig): IonicFieldsWithConfig;\nexport function withIonicFields(config: IonicConfig | undefined): IonicFieldsWithAddons | IonicFieldsWithConfig;\nexport function withIonicFields(config?: IonicConfig): IonicFieldsWithAddons | IonicFieldsWithConfig {\n // Always include the addons feature — ion-icon / ion-button are part of\n // the canonical Ionic surface.\n const base: unknown[] = [...IONIC_FIELD_TYPES, withIonicAddons(), IONIC_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'ionic-config',\n ɵproviders: [{ provide: IONIC_CONFIG, useValue: config }],\n } satisfies IonicConfigFeature);\n return base as IonicFieldsWithConfig;\n }\n\n return base as IonicFieldsWithAddons;\n}\n\n/* -- Ionic addon types ------------------------------------------------- */\n\nconst ION_ICON_KIND: AddonTypeDefinition<IonicIconAddon> = {\n type: 'ion-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-ionic/lazy/addon-icon').then((m) => m.IonicIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'ion-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst ION_BUTTON_KIND: AddonTypeDefinition<IonicButtonAddon> = {\n type: 'ion-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-ionic/lazy/addon-button').then((m) => m.IonicButtonAddonComponent),\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 'ion-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 'ion-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Ionic addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype IonicAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Ionic-shipped addon types (`ion-icon`, `ion-button`) standalone. */\nexport function withIonicAddons(): IonicAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: ION_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: ION_BUTTON_KIND, multi: true },\n ],\n };\n}\n","/* eslint-disable @nx/enforce-module-boundaries -- Package self-imports preserve ng-packagr secondary entry points. */\nexport { IONIC_FIELD_TYPES, IONIC_CONFIG, IonicField, withIonicFields, withIonicAddons, IONIC_INPUT_TYPE_OVERRIDE } from './lib';\nexport type {\n IonicButtonProps,\n IonicButtonField,\n IonicSubmitButtonField,\n IonicNextButtonField,\n IonicPreviousButtonField,\n IonicAddArrayItemButtonField,\n IonicPrependArrayItemButtonField,\n IonicInsertArrayItemButtonField,\n IonicRemoveArrayItemButtonField,\n IonicPopArrayItemButtonField,\n IonicShiftArrayItemButtonField,\n IonicCheckboxProps,\n IonicCheckboxField,\n IonicDatepickerProps,\n IonicDatepickerField,\n IonicInputProps,\n IonicInputField,\n IonicMultiCheckboxProps,\n IonicMultiCheckboxField,\n IonicRadioProps,\n IonicRadioField,\n IonicSelectProps,\n IonicSelectField,\n IonicSliderProps,\n IonicSliderField,\n IonicTextareaProps,\n IonicTextareaField,\n IonicToggleProps,\n IonicToggleField,\n IonicConfig,\n IonicFieldType,\n IonicFormProps,\n IonicFormConfig,\n IonicAddon,\n IonicButtonAddon,\n IonicIconAddon,\n IonicInputAddon,\n IonicAddonExtensions,\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 { IonicButtonFieldComponent as IonicButtonFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/button';\nimport type { IonicCheckboxFieldComponent as IonicCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/checkbox';\nimport type { IonicDatepickerFieldComponent as IonicDatepickerFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/datepicker';\nimport type { IonicInputFieldComponent as IonicInputFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/input';\nimport type { IonicMultiCheckboxFieldComponent as IonicMultiCheckboxFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/multi-checkbox';\nimport type { IonicRadioFieldComponent as IonicRadioFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/radio';\nimport type { IonicSelectFieldComponent as IonicSelectFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/select';\nimport type { IonicSliderFieldComponent as IonicSliderFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/slider';\nimport type { IonicTextareaFieldComponent as IonicTextareaFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/textarea';\nimport type { IonicToggleFieldComponent as IonicToggleFieldComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/toggle';\nimport type { IonicIconAddonComponent as IonicIconAddonComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/addon-icon';\nimport type { IonicButtonAddonComponent as IonicButtonAddonComponentClass } from '@ng-forge/dynamic-forms-ionic/lazy/addon-button';\n\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/button`. Import it from there to use the class as a value. */\nexport type IonicButtonFieldComponent<TEvent extends FormEvent> = IonicButtonFieldComponentClass<TEvent>;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/checkbox`. Import it from there to use the class as a value. */\nexport type IonicCheckboxFieldComponent = IonicCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/datepicker`. Import it from there to use the class as a value. */\nexport type IonicDatepickerFieldComponent = IonicDatepickerFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/input`. Import it from there to use the class as a value. */\nexport type IonicInputFieldComponent = IonicInputFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/multi-checkbox`. Import it from there to use the class as a value. */\nexport type IonicMultiCheckboxFieldComponent = IonicMultiCheckboxFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/radio`. Import it from there to use the class as a value. */\nexport type IonicRadioFieldComponent = IonicRadioFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/select`. Import it from there to use the class as a value. */\nexport type IonicSelectFieldComponent = IonicSelectFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/slider`. Import it from there to use the class as a value. */\nexport type IonicSliderFieldComponent = IonicSliderFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/textarea`. Import it from there to use the class as a value. */\nexport type IonicTextareaFieldComponent = IonicTextareaFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/toggle`. Import it from there to use the class as a value. */\nexport type IonicToggleFieldComponent = IonicToggleFieldComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/addon-icon`. Import it from there to use the class as a value. */\nexport type IonicIconAddonComponent = IonicIconAddonComponentClass;\n/** Class type of the component in `@ng-forge/dynamic-forms-ionic/lazy/addon-button`. Import it from there to use the class as a value. */\nexport type IonicButtonAddonComponent = IonicButtonAddonComponentClass;\n"]}
|
|
1
|
+
{"version":3,"file":"ng-forge-dynamic-forms-ionic.mjs","names":["IONIC_CONFIG"],"sources":["../../../../packages/dynamic-forms-ionic/src/lib/types/types.ts","../../../../packages/dynamic-forms-ionic/src/lib/fields/button/ionic-button.mapper.ts","../../../../packages/dynamic-forms-ionic/src/lib/config/ionic-field-config.ts","../../../../packages/dynamic-forms-ionic/src/lib/providers/ionic-providers.ts"],"sourcesContent":["/**\n * Ionic field type constants\n * Based on available field components in the /fields folder\n */\nexport const IonicField = {\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 IonicFieldType = (typeof IonicField)[keyof typeof IonicField];\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 -- Published secondary-entry imports must remain package specifiers for real lazy chunks. */\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 { IonicField } from '../types/types';\nimport { buttonFieldMapper } from '../fields/button/ionic-button.mapper';\nimport { nextButtonFieldMapper, previousButtonFieldMapper, submitButtonFieldMapper } from '../fields/button/ionic-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-ionic/lazy/input').then(({ IonicInputFieldComponent }) => IonicInputFieldComponent);\nconst loadSelectComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/select').then(({ IonicSelectFieldComponent }) => IonicSelectFieldComponent);\nconst loadCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/checkbox').then(({ IonicCheckboxFieldComponent }) => IonicCheckboxFieldComponent);\nconst loadButtonComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/button').then(({ IonicButtonFieldComponent }) => IonicButtonFieldComponent);\nconst loadTextareaComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/textarea').then(({ IonicTextareaFieldComponent }) => IonicTextareaFieldComponent);\nconst loadRadioComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/radio').then(({ IonicRadioFieldComponent }) => IonicRadioFieldComponent);\nconst loadMultiCheckboxComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/multi-checkbox').then(\n ({ IonicMultiCheckboxFieldComponent }) => IonicMultiCheckboxFieldComponent,\n );\nconst loadDatepickerComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/datepicker').then(({ IonicDatepickerFieldComponent }) => IonicDatepickerFieldComponent);\nconst loadSliderComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/slider').then(({ IonicSliderFieldComponent }) => IonicSliderFieldComponent);\nconst loadToggleComponent = () =>\n import('@ng-forge/dynamic-forms-ionic/lazy/toggle').then(({ IonicToggleFieldComponent }) => IonicToggleFieldComponent);\n\n/**\n * Ionic field type definitions\n * Follows the FieldTypeDefinition interface for proper registry integration\n */\nexport const IONIC_FIELD_TYPES: FieldTypeDefinition[] = [\n {\n name: IonicField.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: IonicField.Select,\n loadComponent: loadSelectComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Checkbox,\n loadComponent: loadCheckboxComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Button,\n loadComponent: loadButtonComponent,\n mapper: buttonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Submit,\n loadComponent: loadButtonComponent,\n mapper: submitButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Next,\n loadComponent: loadButtonComponent,\n mapper: nextButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Previous,\n loadComponent: loadButtonComponent,\n mapper: previousButtonFieldMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.AddArrayItem,\n loadComponent: loadButtonComponent,\n mapper: addArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.PrependArrayItem,\n loadComponent: loadButtonComponent,\n mapper: prependArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.InsertArrayItem,\n loadComponent: loadButtonComponent,\n mapper: insertArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.RemoveArrayItem,\n loadComponent: loadButtonComponent,\n mapper: removeArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.PopArrayItem,\n loadComponent: loadButtonComponent,\n mapper: popArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.ShiftArrayItem,\n loadComponent: loadButtonComponent,\n mapper: shiftArrayItemButtonMapper,\n ...BUTTON_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Textarea,\n loadComponent: loadTextareaComponent,\n mapper: valueFieldMapper,\n propsToMeta: ['rows'],\n scope: 'text-input',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Radio,\n loadComponent: loadRadioComponent,\n mapper: optionsFieldMapper,\n scope: 'single-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.MultiCheckbox,\n loadComponent: loadMultiCheckboxComponent,\n mapper: optionsFieldMapper,\n scope: 'multi-select',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Datepicker,\n loadComponent: loadDatepickerComponent,\n mapper: datepickerFieldMapper,\n scope: 'date',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Slider,\n loadComponent: loadSliderComponent,\n mapper: valueFieldMapper,\n scope: 'numeric',\n ...VALUE_FIELD_TYPES_BASE,\n },\n {\n name: IonicField.Toggle,\n loadComponent: loadToggleComponent,\n mapper: checkboxFieldMapper,\n scope: 'boolean',\n ...VALUE_FIELD_TYPES_BASE,\n },\n];\n","/* eslint-disable @nx/enforce-module-boundaries -- Published secondary-entry imports must remain package specifiers for real lazy chunks. */\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 { IONIC_CONFIG, type IonicButtonAddon, type IonicConfig, type IonicIconAddon } from '@ng-forge/dynamic-forms-ionic/shared';\nimport { IONIC_FIELD_TYPES } from '../config/ionic-field-config';\n\n/** Field type definitions for Ionic components. */\nexport type IonicFieldTypes = FieldTypeDefinition[];\n\ntype IonicConfigFeature = {\n ɵkind: 'ionic-config';\n ɵproviders: Provider[];\n};\n\n/**\n * Default `withIonicFields()` shape — field defs + the auto-included\n * addons feature so `ion-icon` / `ion-button` work out of the box.\n */\ntype IonicFieldsWithAddons = [...IonicFieldTypes, IonicAddonsFeature, WrapperTypeDefinition];\n\ntype IonicFieldsWithConfig = [...IonicFieldTypes, IonicAddonsFeature, WrapperTypeDefinition, IonicConfigFeature];\n\n/**\n * Replaces the neutral core `field-errors` wrapper with the Ionic 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 IONIC_FIELD_ERRORS_WRAPPER: WrapperTypeDefinition = {\n wrapperName: 'field-errors',\n loadComponent: () => import('../wrappers/field-errors/ionic-field-errors-wrapper.component'),\n rendersFieldErrors: true,\n};\n\n/**\n * Provides Ionic field type definitions for the dynamic form system,\n * with Ionic-shipped addon types (`ion-icon`, `ion-button`) auto-included\n * so addons work out of the box.\n *\n * @param config - Optional global configuration for Ionic form fields\n * @returns Tuple of field type definitions, the addons feature, and\n * optionally a config feature.\n */\nexport function withIonicFields(): IonicFieldsWithAddons;\nexport function withIonicFields(config: IonicConfig): IonicFieldsWithConfig;\nexport function withIonicFields(config: IonicConfig | undefined): IonicFieldsWithAddons | IonicFieldsWithConfig;\nexport function withIonicFields(config?: IonicConfig): IonicFieldsWithAddons | IonicFieldsWithConfig {\n // Always include the addons feature — ion-icon / ion-button are part of\n // the canonical Ionic surface.\n const base: unknown[] = [...IONIC_FIELD_TYPES, withIonicAddons(), IONIC_FIELD_ERRORS_WRAPPER];\n\n if (config) {\n base.push({\n ɵkind: 'ionic-config',\n ɵproviders: [{ provide: IONIC_CONFIG, useValue: config }],\n } satisfies IonicConfigFeature);\n return base as IonicFieldsWithConfig;\n }\n\n return base as IonicFieldsWithAddons;\n}\n\n/* -- Ionic addon types ------------------------------------------------- */\n\nconst ION_ICON_KIND: AddonTypeDefinition<IonicIconAddon> = {\n type: 'ion-icon',\n loadComponent: () => import('@ng-forge/dynamic-forms-ionic/lazy/addon-icon').then((m) => m.IonicIconAddonComponent),\n validate: (addon, fieldKey) => {\n if (typeof addon.icon !== 'string' || addon.icon.length === 0) {\n throw new DynamicFormError(`Addon type 'ion-icon' requires a non-empty 'icon' string (field: '${fieldKey}').`);\n }\n },\n};\n\nconst ION_BUTTON_KIND: AddonTypeDefinition<IonicButtonAddon> = {\n type: 'ion-button',\n loadComponent: () => import('@ng-forge/dynamic-forms-ionic/lazy/addon-button').then((m) => m.IonicButtonAddonComponent),\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 'ion-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 'ion-button' on field '${fieldKey}' is icon-only — provide 'ariaLabel' for accessibility.`);\n }\n },\n};\n\n/**\n * Feature type discriminant for the Ionic addons feature. Matches core's\n * `'addons'` type so providers flow through the standard addon-type pipeline\n * in `provideDynamicForm`.\n */\ntype IonicAddonsFeature = {\n ɵkind: 'addons';\n ɵproviders: Provider[];\n};\n\n/** Register Ionic-shipped addon types (`ion-icon`, `ion-button`) standalone. */\nexport function withIonicAddons(): IonicAddonsFeature {\n return {\n ɵkind: 'addons',\n ɵproviders: [\n { provide: ADDON_TYPE_DEFINITIONS, useValue: ION_ICON_KIND, multi: true },\n { provide: ADDON_TYPE_DEFINITIONS, useValue: ION_BUTTON_KIND, multi: true },\n ],\n };\n}\n"],"mappings":"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"}
|