@ng-forge/dynamic-form-mcp 0.6.0 → 0.7.0
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/bin/ng-forge-mcp.js +1146 -536
- package/package.json +6 -6
- package/src/index.js +1146 -537
- package/src/registry/documentation.d.ts +14 -0
- package/src/registry/documentation.d.ts.map +1 -0
- package/src/registry/field-types.d.ts +9 -0
- package/src/registry/field-types.d.ts.map +1 -0
- package/src/registry/index.d.ts +10 -16
- package/src/registry/index.d.ts.map +1 -1
- package/src/registry/instructions.d.ts +1 -1
- package/src/registry/instructions.d.ts.map +1 -1
- package/src/registry/ui-adapters.d.ts +9 -0
- package/src/registry/ui-adapters.d.ts.map +1 -0
- package/src/registry/validators.d.ts +9 -0
- package/src/registry/validators.d.ts.map +1 -0
- package/src/resources/documentation.resource.d.ts +2 -1
- package/src/resources/documentation.resource.d.ts.map +1 -1
- package/src/services/doc-fetcher.d.ts +34 -0
- package/src/services/doc-fetcher.d.ts.map +1 -0
- package/src/services/topic-mapper.d.ts +18 -0
- package/src/services/topic-mapper.d.ts.map +1 -0
- package/src/tools/data/lookup-topics.d.ts +5 -0
- package/src/tools/data/lookup-topics.d.ts.map +1 -1
- package/src/tools/examples.tool.d.ts +18 -0
- package/src/tools/examples.tool.d.ts.map +1 -1
- package/src/tools/index.d.ts +8 -6
- package/src/tools/index.d.ts.map +1 -1
- package/src/tools/lookup.tool.d.ts.map +1 -1
- package/src/tools/search.tool.d.ts +9 -0
- package/src/tools/search.tool.d.ts.map +1 -0
- package/src/tools/validate.tool.d.ts.map +1 -1
- package/src/registry/api-reference.json +0 -561
- package/src/registry/docs.json +0 -266
- package/src/registry/field-types.json +0 -502
- package/src/registry/ui-adapters.json +0 -225
- package/src/registry/validators.json +0 -210
|
@@ -1,502 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"type": "input",
|
|
4
|
-
"category": "value",
|
|
5
|
-
"description": "Text-based input field with HTML5 type support (text, email, password, number, tel, url)",
|
|
6
|
-
"valueType": "string | number",
|
|
7
|
-
"baseInterface": "BaseValueField",
|
|
8
|
-
"props": {
|
|
9
|
-
"type": {
|
|
10
|
-
"name": "type",
|
|
11
|
-
"type": "'text' | 'email' | 'password' | 'number' | 'tel' | 'url'",
|
|
12
|
-
"description": "HTML input type",
|
|
13
|
-
"required": false,
|
|
14
|
-
"default": "text"
|
|
15
|
-
},
|
|
16
|
-
"placeholder": {
|
|
17
|
-
"name": "placeholder",
|
|
18
|
-
"type": "DynamicText",
|
|
19
|
-
"description": "Placeholder text displayed when field is empty",
|
|
20
|
-
"required": false
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
"validationSupported": true,
|
|
24
|
-
"source": "adapter",
|
|
25
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
26
|
-
"example": "{\n key: 'email',\n type: 'input',\n label: 'Email Address',\n required: true,\n email: true,\n props: { type: 'email', placeholder: 'user@example.com' }\n}",
|
|
27
|
-
"minimalExample": "{ key: 'name', type: 'input', label: 'Name' }"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"type": "textarea",
|
|
31
|
-
"category": "value",
|
|
32
|
-
"description": "Multi-line text input field for longer content",
|
|
33
|
-
"valueType": "string",
|
|
34
|
-
"baseInterface": "BaseValueField",
|
|
35
|
-
"props": {
|
|
36
|
-
"rows": {
|
|
37
|
-
"name": "rows",
|
|
38
|
-
"type": "number",
|
|
39
|
-
"description": "Number of visible text lines",
|
|
40
|
-
"required": false,
|
|
41
|
-
"default": 3
|
|
42
|
-
},
|
|
43
|
-
"placeholder": {
|
|
44
|
-
"name": "placeholder",
|
|
45
|
-
"type": "DynamicText",
|
|
46
|
-
"description": "Placeholder text displayed when field is empty",
|
|
47
|
-
"required": false
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
"validationSupported": true,
|
|
51
|
-
"source": "adapter",
|
|
52
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
53
|
-
"example": "{\n key: 'description',\n type: 'textarea',\n label: 'Description',\n props: { rows: 5, placeholder: 'Enter description...' }\n}",
|
|
54
|
-
"minimalExample": "{ key: 'bio', type: 'textarea', label: 'Bio' }"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"type": "select",
|
|
58
|
-
"category": "value",
|
|
59
|
-
"description": "Dropdown selection field with single or multiple selection",
|
|
60
|
-
"valueType": "T | T[]",
|
|
61
|
-
"baseInterface": "BaseValueField",
|
|
62
|
-
"props": {
|
|
63
|
-
"options": {
|
|
64
|
-
"name": "options",
|
|
65
|
-
"type": "FieldOption[]",
|
|
66
|
-
"description": "Array of selectable options with label and value. IMPORTANT: options goes at FIELD level, NOT inside props",
|
|
67
|
-
"required": true
|
|
68
|
-
},
|
|
69
|
-
"multiple": {
|
|
70
|
-
"name": "multiple",
|
|
71
|
-
"type": "boolean",
|
|
72
|
-
"description": "Allow multiple selections",
|
|
73
|
-
"required": false,
|
|
74
|
-
"default": false
|
|
75
|
-
},
|
|
76
|
-
"placeholder": {
|
|
77
|
-
"name": "placeholder",
|
|
78
|
-
"type": "DynamicText",
|
|
79
|
-
"description": "Placeholder text for empty selection",
|
|
80
|
-
"required": false
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"validationSupported": true,
|
|
84
|
-
"source": "adapter",
|
|
85
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
86
|
-
"example": "{\n key: 'country',\n type: 'select',\n label: 'Country',\n required: true,\n options: [\n { label: 'United States', value: 'us' },\n { label: 'Canada', value: 'ca' }\n ]\n}",
|
|
87
|
-
"minimalExample": "{ key: 'status', type: 'select', label: 'Status', options: [{ label: 'Active', value: 'active' }] }"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"type": "checkbox",
|
|
91
|
-
"category": "value",
|
|
92
|
-
"description": "Boolean toggle checkbox field",
|
|
93
|
-
"valueType": "boolean",
|
|
94
|
-
"baseInterface": "BaseCheckedField",
|
|
95
|
-
"props": {},
|
|
96
|
-
"validationSupported": true,
|
|
97
|
-
"source": "adapter",
|
|
98
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
99
|
-
"example": "{\n key: 'acceptTerms',\n type: 'checkbox',\n label: 'I accept the terms and conditions',\n required: true\n}",
|
|
100
|
-
"minimalExample": "{ key: 'agree', type: 'checkbox', label: 'I agree' }"
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"type": "multi-checkbox",
|
|
104
|
-
"category": "value",
|
|
105
|
-
"description": "Multiple checkbox group for selecting multiple values from options",
|
|
106
|
-
"valueType": "T[]",
|
|
107
|
-
"baseInterface": "BaseValueField",
|
|
108
|
-
"props": {
|
|
109
|
-
"options": {
|
|
110
|
-
"name": "options",
|
|
111
|
-
"type": "FieldOption[]",
|
|
112
|
-
"description": "Array of selectable options. IMPORTANT: options goes at FIELD level, NOT inside props",
|
|
113
|
-
"required": true
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
"validationSupported": true,
|
|
117
|
-
"source": "adapter",
|
|
118
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
119
|
-
"example": "{\n key: 'interests',\n type: 'multi-checkbox',\n label: 'Select your interests',\n options: [\n { label: 'Sports', value: 'sports' },\n { label: 'Music', value: 'music' },\n { label: 'Art', value: 'art' },\n { label: 'Technology', value: 'tech' }\n ]\n}",
|
|
120
|
-
"minimalExample": "{ key: 'tags', type: 'multi-checkbox', label: 'Tags', options: [{ label: 'A', value: 'a' }] }"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"type": "radio",
|
|
124
|
-
"category": "value",
|
|
125
|
-
"description": "Radio button group for single selection from options",
|
|
126
|
-
"valueType": "T",
|
|
127
|
-
"baseInterface": "BaseValueField",
|
|
128
|
-
"props": {
|
|
129
|
-
"options": {
|
|
130
|
-
"name": "options",
|
|
131
|
-
"type": "FieldOption[]",
|
|
132
|
-
"description": "Array of selectable options. IMPORTANT: options goes at FIELD level, NOT inside props",
|
|
133
|
-
"required": true
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
"validationSupported": true,
|
|
137
|
-
"source": "adapter",
|
|
138
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
139
|
-
"example": "{\n key: 'gender',\n type: 'radio',\n label: 'Gender',\n options: [\n { label: 'Male', value: 'male' },\n { label: 'Female', value: 'female' },\n { label: 'Other', value: 'other' }\n ]\n}",
|
|
140
|
-
"minimalExample": "{ key: 'choice', type: 'radio', label: 'Choice', options: [{ label: 'Yes', value: 'yes' }, { label: 'No', value: 'no' }] }"
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
"type": "datepicker",
|
|
144
|
-
"category": "value",
|
|
145
|
-
"description": "Date selection field with calendar picker",
|
|
146
|
-
"valueType": "Date | string",
|
|
147
|
-
"baseInterface": "BaseValueField",
|
|
148
|
-
"props": {
|
|
149
|
-
"minDate": {
|
|
150
|
-
"name": "minDate",
|
|
151
|
-
"type": "Date | string",
|
|
152
|
-
"description": "Minimum selectable date",
|
|
153
|
-
"required": false
|
|
154
|
-
},
|
|
155
|
-
"maxDate": {
|
|
156
|
-
"name": "maxDate",
|
|
157
|
-
"type": "Date | string",
|
|
158
|
-
"description": "Maximum selectable date",
|
|
159
|
-
"required": false
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
"validationSupported": true,
|
|
163
|
-
"source": "adapter",
|
|
164
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
165
|
-
"example": "{\n key: 'birthDate',\n type: 'datepicker',\n label: 'Date of Birth',\n required: true,\n props: { maxDate: new Date() }\n}",
|
|
166
|
-
"minimalExample": "{ key: 'date', type: 'datepicker', label: 'Date' }"
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
"type": "toggle",
|
|
170
|
-
"category": "value",
|
|
171
|
-
"description": "Switch/toggle control for boolean values",
|
|
172
|
-
"valueType": "boolean",
|
|
173
|
-
"baseInterface": "BaseCheckedField",
|
|
174
|
-
"props": {},
|
|
175
|
-
"validationSupported": true,
|
|
176
|
-
"source": "adapter",
|
|
177
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
178
|
-
"example": "{\n key: 'notifications',\n type: 'toggle',\n label: 'Enable notifications'\n}",
|
|
179
|
-
"minimalExample": "{ key: 'enabled', type: 'toggle', label: 'Enable' }"
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
"type": "slider",
|
|
183
|
-
"category": "value",
|
|
184
|
-
"description": "Numeric range slider for value selection",
|
|
185
|
-
"valueType": "number",
|
|
186
|
-
"baseInterface": "BaseValueField",
|
|
187
|
-
"props": {
|
|
188
|
-
"minValue": {
|
|
189
|
-
"name": "minValue",
|
|
190
|
-
"type": "number",
|
|
191
|
-
"description": "Minimum value. IMPORTANT: This is at FIELD level, NOT inside props",
|
|
192
|
-
"required": false,
|
|
193
|
-
"default": 0
|
|
194
|
-
},
|
|
195
|
-
"maxValue": {
|
|
196
|
-
"name": "maxValue",
|
|
197
|
-
"type": "number",
|
|
198
|
-
"description": "Maximum value. IMPORTANT: This is at FIELD level, NOT inside props",
|
|
199
|
-
"required": false,
|
|
200
|
-
"default": 100
|
|
201
|
-
},
|
|
202
|
-
"step": {
|
|
203
|
-
"name": "step",
|
|
204
|
-
"type": "number",
|
|
205
|
-
"description": "Step increment. IMPORTANT: This is at FIELD level, NOT inside props",
|
|
206
|
-
"required": false,
|
|
207
|
-
"default": 1
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
"validationSupported": true,
|
|
211
|
-
"source": "adapter",
|
|
212
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
213
|
-
"example": "{\n key: 'volume',\n type: 'slider',\n label: 'Volume',\n value: 50,\n minValue: 0,\n maxValue: 100,\n step: 5\n}",
|
|
214
|
-
"minimalExample": "{ key: 'rating', type: 'slider', label: 'Rating' }"
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
"type": "hidden",
|
|
218
|
-
"category": "value",
|
|
219
|
-
"description": "Hidden field that participates in form values without rendering. REQUIRED: The \"value\" property MUST be provided (string, number, boolean, or array). FORBIDDEN: label, logic, validators, required, props, disabled, readonly, hidden, col, tabIndex, meta - hidden fields are purely for passing values through the form. IMPORTANT: In multi-page forms, hidden fields must go INSIDE a page, not at the root level.",
|
|
220
|
-
"valueType": "string | number | boolean | (string | number | boolean)[]",
|
|
221
|
-
"baseInterface": "FieldDef",
|
|
222
|
-
"props": {},
|
|
223
|
-
"validationSupported": false,
|
|
224
|
-
"source": "core",
|
|
225
|
-
"allowedIn": ["top-level (single-page forms only)", "page.fields", "group.fields", "array.fields"],
|
|
226
|
-
"notAllowedIn": ["row", "top-level when using pages"],
|
|
227
|
-
"example": "// Hidden field - value is REQUIRED!\n{\n key: 'userId',\n type: 'hidden',\n value: 'abc123' // REQUIRED: string, number, boolean, or array\n}\n\n// Valid value types:\n{ key: 'count', type: 'hidden', value: 42 } // number\n{ key: 'active', type: 'hidden', value: true } // boolean\n{ key: 'tags', type: 'hidden', value: [1, 2, 3] } // array\n\n// ❌ FORBIDDEN (will cause validation error):\n// - label, logic, validators, required, props\n// - disabled, readonly, hidden, col, tabIndex, meta\n// - Validation shorthand: email, min, max, minLength, maxLength, pattern",
|
|
228
|
-
"minimalExample": "{ key: 'id', type: 'hidden', value: 'abc123' }"
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
"type": "text",
|
|
232
|
-
"category": "display",
|
|
233
|
-
"description": "Static text display element (headings, paragraphs, spans). The text content comes from the label property.",
|
|
234
|
-
"baseInterface": "FieldDef",
|
|
235
|
-
"props": {
|
|
236
|
-
"elementType": {
|
|
237
|
-
"name": "elementType",
|
|
238
|
-
"type": "'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span'",
|
|
239
|
-
"description": "HTML element type for rendering",
|
|
240
|
-
"required": false,
|
|
241
|
-
"default": "p"
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
"validationSupported": false,
|
|
245
|
-
"source": "core",
|
|
246
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
247
|
-
"example": "{\n key: 'sectionTitle',\n type: 'text',\n label: 'Personal Information',\n props: { elementType: 'h2' }\n}",
|
|
248
|
-
"minimalExample": "{ key: 'header', type: 'text', label: 'Section Title' }"
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
"type": "row",
|
|
252
|
-
"category": "container",
|
|
253
|
-
"description": "Horizontal layout container for grouping fields in columns. Rows do NOT have a label property. Supports only 'hidden' logic type for conditional visibility.",
|
|
254
|
-
"baseInterface": "FieldDef",
|
|
255
|
-
"props": {
|
|
256
|
-
"fields": {
|
|
257
|
-
"name": "fields",
|
|
258
|
-
"type": "RowAllowedChildren[]",
|
|
259
|
-
"description": "Child fields to render horizontally. Allowed: groups, arrays, VALUE fields (input, select, etc). NOT ALLOWED: pages, rows, hidden fields",
|
|
260
|
-
"required": true
|
|
261
|
-
}
|
|
262
|
-
},
|
|
263
|
-
"validationSupported": false,
|
|
264
|
-
"source": "core",
|
|
265
|
-
"allowedIn": ["top-level", "page", "group", "array"],
|
|
266
|
-
"notAllowedIn": ["row"],
|
|
267
|
-
"canContain": [
|
|
268
|
-
"group",
|
|
269
|
-
"array",
|
|
270
|
-
"input",
|
|
271
|
-
"textarea",
|
|
272
|
-
"select",
|
|
273
|
-
"checkbox",
|
|
274
|
-
"multi-checkbox",
|
|
275
|
-
"radio",
|
|
276
|
-
"datepicker",
|
|
277
|
-
"toggle",
|
|
278
|
-
"slider",
|
|
279
|
-
"text",
|
|
280
|
-
"button",
|
|
281
|
-
"submit",
|
|
282
|
-
"next",
|
|
283
|
-
"previous"
|
|
284
|
-
],
|
|
285
|
-
"cannotContain": ["page", "row", "hidden"],
|
|
286
|
-
"example": "{\n key: 'nameRow',\n type: 'row',\n // NOTE: Rows do NOT have a label property\n // Rows support only 'hidden' logic type for conditional visibility\n fields: [\n { key: 'firstName', type: 'input', label: 'First Name', col: 6 },\n { key: 'lastName', type: 'input', label: 'Last Name', col: 6 }\n ]\n}\n// NOT ALLOWED in rows:\n// - type: 'hidden' (hidden fields cannot be inside rows)\n// - type: 'page' (pages are top-level only)\n// - type: 'row' (no nested rows)",
|
|
287
|
-
"minimalExample": "{ key: 'row1', type: 'row', fields: [...] }"
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
"type": "group",
|
|
291
|
-
"category": "container",
|
|
292
|
-
"description": "Nested form group container creating a sub-object in form values. Groups are logical containers only and do NOT have a label property. Supports only 'hidden' logic type for conditional visibility.",
|
|
293
|
-
"valueType": "object",
|
|
294
|
-
"baseInterface": "FieldDef",
|
|
295
|
-
"props": {
|
|
296
|
-
"fields": {
|
|
297
|
-
"name": "fields",
|
|
298
|
-
"type": "GroupAllowedChildren[]",
|
|
299
|
-
"description": "Child fields in the group. Allowed: rows, leaf fields (NOT pages or other groups)",
|
|
300
|
-
"required": true
|
|
301
|
-
}
|
|
302
|
-
},
|
|
303
|
-
"validationSupported": true,
|
|
304
|
-
"source": "core",
|
|
305
|
-
"allowedIn": ["top-level", "page", "row", "array"],
|
|
306
|
-
"notAllowedIn": ["group"],
|
|
307
|
-
"canContain": [
|
|
308
|
-
"row",
|
|
309
|
-
"input",
|
|
310
|
-
"textarea",
|
|
311
|
-
"select",
|
|
312
|
-
"checkbox",
|
|
313
|
-
"multi-checkbox",
|
|
314
|
-
"radio",
|
|
315
|
-
"datepicker",
|
|
316
|
-
"toggle",
|
|
317
|
-
"slider",
|
|
318
|
-
"hidden",
|
|
319
|
-
"text",
|
|
320
|
-
"button",
|
|
321
|
-
"submit",
|
|
322
|
-
"next",
|
|
323
|
-
"previous"
|
|
324
|
-
],
|
|
325
|
-
"cannotContain": ["page", "group"],
|
|
326
|
-
"example": "{\n key: 'address',\n type: 'group',\n // NOTE: Groups do NOT have a label property\n fields: [\n { key: 'street', type: 'input', label: 'Street' },\n { key: 'city', type: 'input', label: 'City' },\n { key: 'zip', type: 'input', label: 'ZIP Code' }\n ]\n}",
|
|
327
|
-
"minimalExample": "{ key: 'address', type: 'group', fields: [...] }"
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
"type": "array",
|
|
331
|
-
"category": "container",
|
|
332
|
-
"description": "Repeatable field group for dynamic lists/arrays. Arrays do NOT have a label property. Use \"fields\" (not \"template\") to define the item template. Supports only 'hidden' logic type for conditional visibility. Supports minLength/maxLength for array size validation. Each array item is rendered inside a `<div class=\"df-array-item\">` wrapper with `role=\"group\"`, `aria-label=\"Item N\"` (1-based), `data-array-item-id`, and `data-array-item-index` attributes for styling, accessibility, and testing.",
|
|
333
|
-
"valueType": "T[]",
|
|
334
|
-
"baseInterface": "FieldDef",
|
|
335
|
-
"props": {
|
|
336
|
-
"fields": {
|
|
337
|
-
"name": "fields",
|
|
338
|
-
"type": "ArrayAllowedChildren[]",
|
|
339
|
-
"description": "Template field(s) for each array item. Allowed: rows, groups, leaf fields (NOT pages or other arrays)",
|
|
340
|
-
"required": true
|
|
341
|
-
},
|
|
342
|
-
"minLength": {
|
|
343
|
-
"name": "minLength",
|
|
344
|
-
"type": "number",
|
|
345
|
-
"description": "Minimum number of items required in the array. Validation fails if fewer items.",
|
|
346
|
-
"required": false
|
|
347
|
-
},
|
|
348
|
-
"maxLength": {
|
|
349
|
-
"name": "maxLength",
|
|
350
|
-
"type": "number",
|
|
351
|
-
"description": "Maximum number of items allowed in the array. Validation fails if more items.",
|
|
352
|
-
"required": false
|
|
353
|
-
}
|
|
354
|
-
},
|
|
355
|
-
"validationSupported": true,
|
|
356
|
-
"source": "core",
|
|
357
|
-
"allowedIn": ["top-level", "page", "row", "group"],
|
|
358
|
-
"notAllowedIn": ["array"],
|
|
359
|
-
"canContain": [
|
|
360
|
-
"row",
|
|
361
|
-
"group",
|
|
362
|
-
"input",
|
|
363
|
-
"textarea",
|
|
364
|
-
"select",
|
|
365
|
-
"checkbox",
|
|
366
|
-
"multi-checkbox",
|
|
367
|
-
"radio",
|
|
368
|
-
"datepicker",
|
|
369
|
-
"toggle",
|
|
370
|
-
"slider",
|
|
371
|
-
"hidden",
|
|
372
|
-
"text",
|
|
373
|
-
"button",
|
|
374
|
-
"submit",
|
|
375
|
-
"next",
|
|
376
|
-
"previous"
|
|
377
|
-
],
|
|
378
|
-
"cannotContain": ["page", "array"],
|
|
379
|
-
"example": "// Flat array with length validation\n{\n key: 'tags',\n type: 'array',\n minLength: 1, // At least one tag required\n maxLength: 5, // No more than 5 tags\n fields: [\n { key: 'tag', type: 'input', label: 'Tag' }\n ]\n}\n// Result: { tags: ['value1', 'value2'] }\n\n// Object array (nested groups)\n{\n key: 'contacts',\n type: 'array',\n minLength: 1,\n fields: [{\n type: 'group',\n fields: [\n { key: 'name', type: 'input', label: 'Name' },\n { key: 'email', type: 'input', label: 'Email' }\n ]\n }]\n}\n// Result: { contacts: [{name: '', email: ''}, ...] }",
|
|
380
|
-
"minimalExample": "{ key: 'items', type: 'array', fields: [...] }"
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
"type": "page",
|
|
384
|
-
"category": "container",
|
|
385
|
-
"description": "Multi-step form page container for wizard-style forms. Pages do NOT have label or title properties. ALL top-level fields must be pages if using multi-page mode. IMPORTANT: Navigation buttons (next, previous) must be added as fields WITHIN each page that needs them.",
|
|
386
|
-
"baseInterface": "FieldDef",
|
|
387
|
-
"props": {
|
|
388
|
-
"fields": {
|
|
389
|
-
"name": "fields",
|
|
390
|
-
"type": "PageAllowedChildren[]",
|
|
391
|
-
"description": "Fields in this page. Allowed: rows, groups, arrays, leaf fields (NOT other pages). Include next/previous buttons as needed.",
|
|
392
|
-
"required": true
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
"validationSupported": false,
|
|
396
|
-
"source": "core",
|
|
397
|
-
"allowedIn": ["top-level"],
|
|
398
|
-
"notAllowedIn": ["page", "row", "group", "array"],
|
|
399
|
-
"canContain": [
|
|
400
|
-
"row",
|
|
401
|
-
"group",
|
|
402
|
-
"array",
|
|
403
|
-
"input",
|
|
404
|
-
"textarea",
|
|
405
|
-
"select",
|
|
406
|
-
"checkbox",
|
|
407
|
-
"multi-checkbox",
|
|
408
|
-
"radio",
|
|
409
|
-
"datepicker",
|
|
410
|
-
"toggle",
|
|
411
|
-
"slider",
|
|
412
|
-
"hidden",
|
|
413
|
-
"text",
|
|
414
|
-
"button",
|
|
415
|
-
"submit",
|
|
416
|
-
"next",
|
|
417
|
-
"previous"
|
|
418
|
-
],
|
|
419
|
-
"cannotContain": ["page"],
|
|
420
|
-
"example": "{\n key: 'step1',\n type: 'page',\n // NOTE: Pages do NOT have label or title properties\n // Navigation buttons are fields WITHIN the page\n fields: [\n { key: 'firstName', type: 'input', label: 'First Name' },\n { key: 'lastName', type: 'input', label: 'Last Name' },\n { key: 'next', type: 'next', label: 'Next' }\n ]\n}",
|
|
421
|
-
"minimalExample": "{ key: 'step1', type: 'page', fields: [...] }"
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
"type": "next",
|
|
425
|
-
"category": "button",
|
|
426
|
-
"description": "Navigation button to go to next page in multi-step forms. Must be placed INSIDE a page's fields array.",
|
|
427
|
-
"baseInterface": "FieldDef",
|
|
428
|
-
"props": {},
|
|
429
|
-
"validationSupported": false,
|
|
430
|
-
"source": "adapter",
|
|
431
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
432
|
-
"example": "{\n key: 'next',\n type: 'next',\n label: 'Next'\n}",
|
|
433
|
-
"minimalExample": "{ key: 'next', type: 'next', label: 'Next' }"
|
|
434
|
-
},
|
|
435
|
-
{
|
|
436
|
-
"type": "previous",
|
|
437
|
-
"category": "button",
|
|
438
|
-
"description": "Navigation button to go to previous page in multi-step forms. Must be placed INSIDE a page's fields array.",
|
|
439
|
-
"baseInterface": "FieldDef",
|
|
440
|
-
"props": {},
|
|
441
|
-
"validationSupported": false,
|
|
442
|
-
"source": "adapter",
|
|
443
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
444
|
-
"example": "{\n key: 'back',\n type: 'previous',\n label: 'Back'\n}",
|
|
445
|
-
"minimalExample": "{ key: 'back', type: 'previous', label: 'Back' }"
|
|
446
|
-
},
|
|
447
|
-
{
|
|
448
|
-
"type": "button",
|
|
449
|
-
"category": "button",
|
|
450
|
-
"description": "Generic button for custom actions. IMPORTANT: The generic 'button' type REQUIRES the 'event' property with a FormEventConstructor. For simple use cases, prefer 'submit', 'next', or 'previous' which don't require event configuration.",
|
|
451
|
-
"baseInterface": "FieldDef",
|
|
452
|
-
"props": {
|
|
453
|
-
"event": {
|
|
454
|
-
"name": "event",
|
|
455
|
-
"type": "FormEventConstructor<TEvent>",
|
|
456
|
-
"description": "REQUIRED. Event constructor that will be emitted when button is clicked. Must be registered with provideFormEvents().",
|
|
457
|
-
"required": true
|
|
458
|
-
}
|
|
459
|
-
},
|
|
460
|
-
"validationSupported": false,
|
|
461
|
-
"source": "adapter",
|
|
462
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
463
|
-
"example": "// RECOMMENDED: Use pre-defined button types for common actions\n{ key: 'submit', type: 'submit', label: 'Submit Form' }\n{ key: 'next', type: 'next', label: 'Next' }\n{ key: 'back', type: 'previous', label: 'Back' }\n\n// ADVANCED: Generic button with custom event (requires setup)\n// 1. Create event class: class MyCustomEvent extends FormEvent {}\n// 2. Register with: provideFormEvents([MyCustomEvent])\n// 3. Use in config:\n{\n key: 'customAction',\n type: 'button',\n label: 'Custom Action',\n event: MyCustomEvent // Must be the class reference\n}",
|
|
464
|
-
"minimalExample": "{ key: 'action', type: 'button', label: 'Action', event: MyEvent }"
|
|
465
|
-
},
|
|
466
|
-
{
|
|
467
|
-
"type": "submit",
|
|
468
|
-
"category": "button",
|
|
469
|
-
"description": "Form submit button",
|
|
470
|
-
"baseInterface": "FieldDef",
|
|
471
|
-
"props": {},
|
|
472
|
-
"validationSupported": false,
|
|
473
|
-
"source": "adapter",
|
|
474
|
-
"allowedIn": ["top-level", "page", "row", "group", "array"],
|
|
475
|
-
"example": "{\n key: 'submit',\n type: 'submit',\n label: 'Submit Form'\n}",
|
|
476
|
-
"minimalExample": "{ key: 'submit', type: 'submit', label: 'Submit' }"
|
|
477
|
-
},
|
|
478
|
-
{
|
|
479
|
-
"type": "addArrayItem",
|
|
480
|
-
"category": "button",
|
|
481
|
-
"description": "Button to add a new item to an array field. Must be placed within or near the array container.",
|
|
482
|
-
"baseInterface": "FieldDef",
|
|
483
|
-
"props": {},
|
|
484
|
-
"validationSupported": false,
|
|
485
|
-
"source": "adapter",
|
|
486
|
-
"allowedIn": ["array", "row", "group"],
|
|
487
|
-
"example": "{\n key: 'addContact',\n type: 'addArrayItem',\n label: 'Add Contact'\n}",
|
|
488
|
-
"minimalExample": "{ key: 'add', type: 'addArrayItem', label: 'Add Item' }"
|
|
489
|
-
},
|
|
490
|
-
{
|
|
491
|
-
"type": "removeArrayItem",
|
|
492
|
-
"category": "button",
|
|
493
|
-
"description": "Button to remove the current item from an array field. Typically placed within each array item template.",
|
|
494
|
-
"baseInterface": "FieldDef",
|
|
495
|
-
"props": {},
|
|
496
|
-
"validationSupported": false,
|
|
497
|
-
"source": "adapter",
|
|
498
|
-
"allowedIn": ["array", "row", "group"],
|
|
499
|
-
"example": "{\n key: 'removeContact',\n type: 'removeArrayItem',\n label: 'Remove'\n}",
|
|
500
|
-
"minimalExample": "{ key: 'remove', type: 'removeArrayItem', label: 'Remove' }"
|
|
501
|
-
}
|
|
502
|
-
]
|