@defra/forms-model 3.0.431 → 3.0.433
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/dist/module/form/form-definition/index.js +2 -1
- package/dist/module/form/form-definition/index.js.map +1 -1
- package/dist/module/form/form-definition/types.js.map +1 -1
- package/dist/module/form/form-editor/index.js +107 -0
- package/dist/module/form/form-editor/index.js.map +1 -1
- package/dist/module/form/form-editor/types.js.map +1 -1
- package/dist/module/form/form-manager/index.js +1 -1
- package/dist/module/form/form-manager/index.js.map +1 -1
- package/dist/types/form/form-definition/index.d.ts.map +1 -1
- package/dist/types/form/form-definition/types.d.ts +1 -0
- package/dist/types/form/form-definition/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/index.d.ts +21 -1
- package/dist/types/form/form-editor/index.d.ts.map +1 -1
- package/dist/types/form/form-editor/types.d.ts +8 -2
- package/dist/types/form/form-editor/types.d.ts.map +1 -1
- package/dist/types/form/form-manager/index.d.ts +1 -1
- package/dist/types/form/form-manager/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/component-schema-v2.json +162 -0
- package/schemas/component-schema.json +162 -0
- package/schemas/date-sub-schema.json +11 -0
- package/schemas/form-definition-schema.json +1886 -0
- package/schemas/form-definition-v2-payload-schema.json +1469 -0
- package/schemas/form-editor-input-check-answers-setting-schema.json +18 -0
- package/schemas/form-editor-input-page-schema.json +41 -0
- package/schemas/form-editor-input-page-settings-schema.json +28 -0
- package/schemas/form-editor-input-question-schema.json +38 -0
- package/schemas/form-metadata-author-schema.json +24 -0
- package/schemas/form-metadata-contact-schema.json +61 -0
- package/schemas/form-metadata-email-schema.json +25 -0
- package/schemas/form-metadata-input-schema.json +127 -0
- package/schemas/form-metadata-online-schema.json +25 -0
- package/schemas/form-metadata-schema.json +340 -0
- package/schemas/form-metadata-state-schema.json +72 -0
- package/schemas/form-submit-payload-schema.json +124 -0
- package/schemas/form-submit-record-schema.json +30 -0
- package/schemas/form-submit-recordset-schema.json +62 -0
- package/schemas/list-schema-v2.json +496 -0
- package/schemas/list-schema.json +496 -0
- package/schemas/max-future-schema.json +8 -0
- package/schemas/max-length-schema.json +8 -0
- package/schemas/max-past-schema.json +8 -0
- package/schemas/max-schema.json +7 -0
- package/schemas/min-length-schema.json +8 -0
- package/schemas/min-schema.json +7 -0
- package/schemas/page-schema-payload-v2.json +400 -0
- package/schemas/page-schema-v2.json +400 -0
- package/schemas/page-schema.json +400 -0
- package/schemas/page-type-schema.json +11 -0
- package/schemas/pagination-options-schema.json +27 -0
- package/schemas/patch-page-schema.json +26 -0
- package/schemas/query-options-schema.json +94 -0
- package/schemas/question-schema.json +7 -0
- package/schemas/question-type-full-schema.json +22 -0
- package/schemas/question-type-schema.json +20 -0
- package/schemas/search-options-schema.json +59 -0
- package/schemas/sorting-options-schema.json +28 -0
- package/schemas/written-answer-sub-schema.json +12 -0
- package/src/form/form-definition/index.ts +5 -1
- package/src/form/form-definition/types.ts +1 -0
- package/src/form/form-editor/index.ts +147 -1
- package/src/form/form-editor/types.ts +19 -2
- package/src/form/form-manager/index.ts +1 -1
- package/scripts/generate-schemas.js +0 -238
- package/scripts/schema-modules/constants.js +0 -39
- package/scripts/schema-modules/schema-processors.js +0 -109
- package/scripts/schema-modules/schema-simplifiers.js +0 -351
- package/scripts/schema-modules/title-processors.js +0 -327
- package/scripts/schema-modules/types.js +0 -21
- package/scripts/schema-modules/utils.js +0 -41
@@ -0,0 +1,1886 @@
|
|
1
|
+
{
|
2
|
+
"type": "object",
|
3
|
+
"description": "Complete form definition describing all aspects of a form",
|
4
|
+
"properties": {
|
5
|
+
"engine": {
|
6
|
+
"type": "string",
|
7
|
+
"description": "Form engine version to use (V1 or V2)",
|
8
|
+
"default": "V1",
|
9
|
+
"title": "Engine"
|
10
|
+
},
|
11
|
+
"name": {
|
12
|
+
"type": "string",
|
13
|
+
"description": "Unique name identifying the form",
|
14
|
+
"title": "Name"
|
15
|
+
},
|
16
|
+
"feedback": {
|
17
|
+
"type": "object",
|
18
|
+
"description": "Feedback mechanism configuration",
|
19
|
+
"properties": {
|
20
|
+
"feedbackForm": {
|
21
|
+
"type": "boolean",
|
22
|
+
"description": "Whether to show the built-in feedback form",
|
23
|
+
"default": false,
|
24
|
+
"title": "Feedback Form"
|
25
|
+
},
|
26
|
+
"url": {
|
27
|
+
"type": "string",
|
28
|
+
"description": "URL to an external feedback form when not using built-in feedback",
|
29
|
+
"title": "Url"
|
30
|
+
},
|
31
|
+
"emailAddress": {
|
32
|
+
"type": "string",
|
33
|
+
"description": "Email address where feedback is sent",
|
34
|
+
"format": "email",
|
35
|
+
"title": "Email Address"
|
36
|
+
}
|
37
|
+
},
|
38
|
+
"additionalProperties": false,
|
39
|
+
"title": "Feedback"
|
40
|
+
},
|
41
|
+
"startPage": {
|
42
|
+
"type": "string",
|
43
|
+
"description": "Path of the first page to show when starting the form",
|
44
|
+
"title": "Start Page"
|
45
|
+
},
|
46
|
+
"pages": {
|
47
|
+
"type": "array",
|
48
|
+
"description": "All pages within the form",
|
49
|
+
"uniqueItems": true,
|
50
|
+
"items": {
|
51
|
+
"title": "Pages Item"
|
52
|
+
},
|
53
|
+
"oneOf": [
|
54
|
+
{
|
55
|
+
"type": "array",
|
56
|
+
"description": "Pages definition for forms using engine version V2.",
|
57
|
+
"items": {
|
58
|
+
"type": "object",
|
59
|
+
"description": "Enhanced page schema for V2 forms with support for empty titles",
|
60
|
+
"properties": {
|
61
|
+
"id": {
|
62
|
+
"type": "string",
|
63
|
+
"description": "Unique identifier for the page",
|
64
|
+
"format": "uuid",
|
65
|
+
"title": "Id"
|
66
|
+
},
|
67
|
+
"path": {
|
68
|
+
"type": "string",
|
69
|
+
"description": "URL path for this page, must not be the reserved \"/status\" path",
|
70
|
+
"not": {
|
71
|
+
"type": "string",
|
72
|
+
"enum": [
|
73
|
+
"/status"
|
74
|
+
]
|
75
|
+
},
|
76
|
+
"title": "Path"
|
77
|
+
},
|
78
|
+
"section": {
|
79
|
+
"type": "string",
|
80
|
+
"description": "Section this page belongs to",
|
81
|
+
"title": "Section"
|
82
|
+
},
|
83
|
+
"controller": {
|
84
|
+
"type": "string",
|
85
|
+
"description": "Custom controller class name for special page behavior",
|
86
|
+
"title": "Controller"
|
87
|
+
},
|
88
|
+
"components": {
|
89
|
+
"type": "array",
|
90
|
+
"description": "UI components displayed on this page",
|
91
|
+
"uniqueItems": true,
|
92
|
+
"items": {
|
93
|
+
"type": "object",
|
94
|
+
"description": "Form component definition specifying UI element behavior",
|
95
|
+
"properties": {
|
96
|
+
"id": {
|
97
|
+
"type": "string",
|
98
|
+
"description": "Unique identifier for the component",
|
99
|
+
"format": "uuid",
|
100
|
+
"title": "Id"
|
101
|
+
},
|
102
|
+
"type": {
|
103
|
+
"type": "string",
|
104
|
+
"description": "Component type (TextField, RadioButtons, DateField, etc.)",
|
105
|
+
"title": "Type"
|
106
|
+
},
|
107
|
+
"shortDescription": {
|
108
|
+
"type": "string",
|
109
|
+
"description": "Brief description of the component purpose",
|
110
|
+
"title": "Short Description"
|
111
|
+
},
|
112
|
+
"name": {
|
113
|
+
"type": [
|
114
|
+
"array",
|
115
|
+
"boolean",
|
116
|
+
"number",
|
117
|
+
"object",
|
118
|
+
"string",
|
119
|
+
"null"
|
120
|
+
],
|
121
|
+
"oneOf": [
|
122
|
+
{
|
123
|
+
"type": "string",
|
124
|
+
"description": "Name format for display-only components like HTML, Markdown, etc.",
|
125
|
+
"pattern": "^[a-zA-Z]+$",
|
126
|
+
"title": "Display Component Name"
|
127
|
+
},
|
128
|
+
{
|
129
|
+
"type": "string",
|
130
|
+
"description": "Name format for input components that collect user data.",
|
131
|
+
"pattern": "^[a-zA-Z]+$",
|
132
|
+
"title": "Input Component Name"
|
133
|
+
}
|
134
|
+
],
|
135
|
+
"title": "Name",
|
136
|
+
"description": "The name value.",
|
137
|
+
"oneOfTitles": [
|
138
|
+
"Display Component Name",
|
139
|
+
"Input Component Name"
|
140
|
+
]
|
141
|
+
},
|
142
|
+
"title": {
|
143
|
+
"type": [
|
144
|
+
"array",
|
145
|
+
"boolean",
|
146
|
+
"number",
|
147
|
+
"object",
|
148
|
+
"string",
|
149
|
+
"null"
|
150
|
+
],
|
151
|
+
"oneOf": [
|
152
|
+
{
|
153
|
+
"type": "string",
|
154
|
+
"description": "Title format for display-only components.",
|
155
|
+
"title": "Display Component Title"
|
156
|
+
},
|
157
|
+
{
|
158
|
+
"type": "string",
|
159
|
+
"description": "Title displayed above input components.",
|
160
|
+
"title": "Input Component Title"
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"title": "Title",
|
164
|
+
"description": "The title value.",
|
165
|
+
"oneOfTitles": [
|
166
|
+
"Display Component Title",
|
167
|
+
"Input Component Title"
|
168
|
+
]
|
169
|
+
},
|
170
|
+
"hint": {
|
171
|
+
"type": "string",
|
172
|
+
"description": "Additional guidance text displayed below the component title",
|
173
|
+
"title": "Hint"
|
174
|
+
},
|
175
|
+
"options": {
|
176
|
+
"type": "object",
|
177
|
+
"description": "Component-specific configuration options",
|
178
|
+
"default": {},
|
179
|
+
"properties": {
|
180
|
+
"rows": {
|
181
|
+
"type": "number",
|
182
|
+
"description": "Number of rows for textarea components",
|
183
|
+
"title": "Rows"
|
184
|
+
},
|
185
|
+
"maxWords": {
|
186
|
+
"type": "number",
|
187
|
+
"description": "Maximum number of words allowed in text inputs",
|
188
|
+
"title": "Max Words"
|
189
|
+
},
|
190
|
+
"maxDaysInPast": {
|
191
|
+
"type": "number",
|
192
|
+
"description": "Maximum days in the past allowed for date inputs",
|
193
|
+
"title": "Max Days In Past"
|
194
|
+
},
|
195
|
+
"maxDaysInFuture": {
|
196
|
+
"type": "number",
|
197
|
+
"description": "Maximum days in the future allowed for date inputs",
|
198
|
+
"title": "Max Days In Future"
|
199
|
+
},
|
200
|
+
"customValidationMessage": {
|
201
|
+
"type": "string",
|
202
|
+
"description": "Custom error message for validation failures",
|
203
|
+
"title": "Custom Validation Message"
|
204
|
+
},
|
205
|
+
"customValidationMessages": {
|
206
|
+
"type": "object",
|
207
|
+
"description": "Custom error messages keyed by validation rule name",
|
208
|
+
"properties": {},
|
209
|
+
"additionalProperties": true,
|
210
|
+
"title": "Custom Validation Messages"
|
211
|
+
}
|
212
|
+
},
|
213
|
+
"additionalProperties": true,
|
214
|
+
"title": "Options"
|
215
|
+
},
|
216
|
+
"schema": {
|
217
|
+
"type": "object",
|
218
|
+
"description": "Validation rules for the component",
|
219
|
+
"default": {},
|
220
|
+
"properties": {
|
221
|
+
"min": {
|
222
|
+
"type": "number",
|
223
|
+
"description": "Minimum value or length for validation",
|
224
|
+
"title": "Min"
|
225
|
+
},
|
226
|
+
"max": {
|
227
|
+
"type": "number",
|
228
|
+
"description": "Maximum value or length for validation",
|
229
|
+
"title": "Max"
|
230
|
+
},
|
231
|
+
"length": {
|
232
|
+
"type": "number",
|
233
|
+
"description": "Exact length required for validation",
|
234
|
+
"title": "Length"
|
235
|
+
}
|
236
|
+
},
|
237
|
+
"additionalProperties": true,
|
238
|
+
"title": "Schema"
|
239
|
+
},
|
240
|
+
"list": {
|
241
|
+
"type": "string",
|
242
|
+
"description": "Reference to a predefined list of options for select components",
|
243
|
+
"title": "List"
|
244
|
+
}
|
245
|
+
},
|
246
|
+
"required": [
|
247
|
+
"type"
|
248
|
+
],
|
249
|
+
"additionalProperties": true,
|
250
|
+
"title": "Components Item"
|
251
|
+
},
|
252
|
+
"title": "Components"
|
253
|
+
},
|
254
|
+
"repeat": {
|
255
|
+
"type": "object",
|
256
|
+
"title": "Repeat Configuration",
|
257
|
+
"description": "Configuration for repeatable pages, used with RepeatPageController. Defines how repeatable sections behave including min/max repetitions and display options.\n\nNOTE: This configuration is only used when the 'controller' property is set to 'RepeatPageController'. Otherwise, this property should not be specified.",
|
258
|
+
"oneOfTitles": [
|
259
|
+
"Repeat Configuration",
|
260
|
+
"Alternative Validation"
|
261
|
+
],
|
262
|
+
"properties": {
|
263
|
+
"options": {
|
264
|
+
"type": "object",
|
265
|
+
"description": "Display and identification options for the repetition",
|
266
|
+
"properties": {
|
267
|
+
"name": {
|
268
|
+
"type": "string",
|
269
|
+
"description": "Identifier for the repeatable section, used in data structure",
|
270
|
+
"title": "Name"
|
271
|
+
},
|
272
|
+
"title": {
|
273
|
+
"type": "string",
|
274
|
+
"description": "Title displayed for each repeatable item",
|
275
|
+
"title": "Title"
|
276
|
+
}
|
277
|
+
},
|
278
|
+
"required": [
|
279
|
+
"name",
|
280
|
+
"title"
|
281
|
+
],
|
282
|
+
"additionalProperties": false,
|
283
|
+
"title": "Options"
|
284
|
+
},
|
285
|
+
"schema": {
|
286
|
+
"type": "object",
|
287
|
+
"description": "Validation constraints for the number of repetitions",
|
288
|
+
"properties": {
|
289
|
+
"min": {
|
290
|
+
"type": "number",
|
291
|
+
"description": "Minimum number of repetitions required",
|
292
|
+
"title": "Min"
|
293
|
+
},
|
294
|
+
"max": {
|
295
|
+
"type": "number",
|
296
|
+
"description": "Maximum number of repetitions allowed",
|
297
|
+
"title": "Max"
|
298
|
+
}
|
299
|
+
},
|
300
|
+
"required": [
|
301
|
+
"min",
|
302
|
+
"max"
|
303
|
+
],
|
304
|
+
"additionalProperties": false,
|
305
|
+
"title": "Schema"
|
306
|
+
}
|
307
|
+
},
|
308
|
+
"required": [
|
309
|
+
"options",
|
310
|
+
"schema"
|
311
|
+
],
|
312
|
+
"additionalProperties": false
|
313
|
+
},
|
314
|
+
"condition": {
|
315
|
+
"type": "string",
|
316
|
+
"description": "Optional condition that determines if this page is shown",
|
317
|
+
"title": "Condition"
|
318
|
+
},
|
319
|
+
"next": {
|
320
|
+
"type": "array",
|
321
|
+
"description": "Possible navigation paths after this page",
|
322
|
+
"default": [],
|
323
|
+
"items": {
|
324
|
+
"type": "object",
|
325
|
+
"description": "Navigation link defining where to go after completing a page",
|
326
|
+
"properties": {
|
327
|
+
"path": {
|
328
|
+
"type": "string",
|
329
|
+
"description": "The target page path to navigate to",
|
330
|
+
"title": "Path"
|
331
|
+
},
|
332
|
+
"condition": {
|
333
|
+
"type": "string",
|
334
|
+
"description": "Optional condition that determines if this path should be taken",
|
335
|
+
"title": "Condition"
|
336
|
+
},
|
337
|
+
"redirect": {
|
338
|
+
"type": "string",
|
339
|
+
"description": "Optional external URL to redirect to instead of an internal page",
|
340
|
+
"title": "Redirect"
|
341
|
+
}
|
342
|
+
},
|
343
|
+
"required": [
|
344
|
+
"path"
|
345
|
+
],
|
346
|
+
"additionalProperties": false,
|
347
|
+
"title": "Next Item"
|
348
|
+
},
|
349
|
+
"title": "Next"
|
350
|
+
},
|
351
|
+
"events": {
|
352
|
+
"type": "object",
|
353
|
+
"description": "Event handlers for page lifecycle events",
|
354
|
+
"properties": {
|
355
|
+
"onLoad": {
|
356
|
+
"type": "object",
|
357
|
+
"description": "Event handler triggered when the page is loaded",
|
358
|
+
"properties": {
|
359
|
+
"type": {
|
360
|
+
"type": "string",
|
361
|
+
"description": "Type of the event handler (currently only \"http\" supported)",
|
362
|
+
"title": "Type"
|
363
|
+
},
|
364
|
+
"options": {
|
365
|
+
"type": "object",
|
366
|
+
"description": "Options specific to the event handler type",
|
367
|
+
"properties": {
|
368
|
+
"method": {
|
369
|
+
"type": "string",
|
370
|
+
"description": "HTTP method to use for the request",
|
371
|
+
"title": "Method"
|
372
|
+
},
|
373
|
+
"url": {
|
374
|
+
"type": "string",
|
375
|
+
"description": "URL endpoint to call when the event fires",
|
376
|
+
"format": "uri",
|
377
|
+
"title": "Url"
|
378
|
+
}
|
379
|
+
},
|
380
|
+
"required": [
|
381
|
+
"method",
|
382
|
+
"url"
|
383
|
+
],
|
384
|
+
"additionalProperties": false,
|
385
|
+
"title": "Options"
|
386
|
+
}
|
387
|
+
},
|
388
|
+
"required": [
|
389
|
+
"type"
|
390
|
+
],
|
391
|
+
"additionalProperties": false,
|
392
|
+
"title": "On Load"
|
393
|
+
},
|
394
|
+
"onSave": {
|
395
|
+
"type": "object",
|
396
|
+
"description": "Event handler triggered when the page data is saved",
|
397
|
+
"properties": {
|
398
|
+
"type": {
|
399
|
+
"type": "string",
|
400
|
+
"description": "Type of the event handler (currently only \"http\" supported)",
|
401
|
+
"title": "Type"
|
402
|
+
},
|
403
|
+
"options": {
|
404
|
+
"type": "object",
|
405
|
+
"description": "Options specific to the event handler type",
|
406
|
+
"properties": {
|
407
|
+
"method": {
|
408
|
+
"type": "string",
|
409
|
+
"description": "HTTP method to use for the request",
|
410
|
+
"title": "Method"
|
411
|
+
},
|
412
|
+
"url": {
|
413
|
+
"type": "string",
|
414
|
+
"description": "URL endpoint to call when the event fires",
|
415
|
+
"format": "uri",
|
416
|
+
"title": "Url"
|
417
|
+
}
|
418
|
+
},
|
419
|
+
"required": [
|
420
|
+
"method",
|
421
|
+
"url"
|
422
|
+
],
|
423
|
+
"additionalProperties": false,
|
424
|
+
"title": "Options"
|
425
|
+
}
|
426
|
+
},
|
427
|
+
"required": [
|
428
|
+
"type"
|
429
|
+
],
|
430
|
+
"additionalProperties": false,
|
431
|
+
"title": "On Save"
|
432
|
+
}
|
433
|
+
},
|
434
|
+
"additionalProperties": false,
|
435
|
+
"title": "Events"
|
436
|
+
},
|
437
|
+
"view": {
|
438
|
+
"type": "string",
|
439
|
+
"description": "Optional custom view template to use for rendering this page",
|
440
|
+
"title": "View"
|
441
|
+
},
|
442
|
+
"title": {
|
443
|
+
"type": "string",
|
444
|
+
"description": "Page title with enhanced support for empty titles in V2",
|
445
|
+
"title": "Title"
|
446
|
+
}
|
447
|
+
},
|
448
|
+
"required": [
|
449
|
+
"path",
|
450
|
+
"title"
|
451
|
+
],
|
452
|
+
"additionalProperties": false,
|
453
|
+
"title": "V2 Pages Item"
|
454
|
+
},
|
455
|
+
"title": "V2 Pages"
|
456
|
+
},
|
457
|
+
{
|
458
|
+
"type": "array",
|
459
|
+
"description": "Pages definition for forms using engine version V1.",
|
460
|
+
"items": {
|
461
|
+
"type": "object",
|
462
|
+
"description": "Form page definition specifying content and behavior",
|
463
|
+
"properties": {
|
464
|
+
"id": {
|
465
|
+
"type": "string",
|
466
|
+
"description": "Unique identifier for the page",
|
467
|
+
"format": "uuid",
|
468
|
+
"title": "Id"
|
469
|
+
},
|
470
|
+
"path": {
|
471
|
+
"type": "string",
|
472
|
+
"description": "URL path for this page, must not be the reserved \"/status\" path",
|
473
|
+
"not": {
|
474
|
+
"type": "string",
|
475
|
+
"enum": [
|
476
|
+
"/status"
|
477
|
+
]
|
478
|
+
},
|
479
|
+
"title": "Path"
|
480
|
+
},
|
481
|
+
"title": {
|
482
|
+
"type": "string",
|
483
|
+
"description": "Page title displayed at the top of the page",
|
484
|
+
"title": "Title"
|
485
|
+
},
|
486
|
+
"section": {
|
487
|
+
"type": "string",
|
488
|
+
"description": "Section this page belongs to",
|
489
|
+
"title": "Section"
|
490
|
+
},
|
491
|
+
"controller": {
|
492
|
+
"type": "string",
|
493
|
+
"description": "Custom controller class name for special page behavior",
|
494
|
+
"title": "Controller"
|
495
|
+
},
|
496
|
+
"components": {
|
497
|
+
"type": "array",
|
498
|
+
"description": "UI components displayed on this page",
|
499
|
+
"uniqueItems": true,
|
500
|
+
"items": {
|
501
|
+
"type": "object",
|
502
|
+
"description": "Form component definition specifying UI element behavior",
|
503
|
+
"properties": {
|
504
|
+
"id": {
|
505
|
+
"type": "string",
|
506
|
+
"description": "Unique identifier for the component",
|
507
|
+
"format": "uuid",
|
508
|
+
"title": "Id"
|
509
|
+
},
|
510
|
+
"type": {
|
511
|
+
"type": "string",
|
512
|
+
"description": "Component type (TextField, RadioButtons, DateField, etc.)",
|
513
|
+
"title": "Type"
|
514
|
+
},
|
515
|
+
"shortDescription": {
|
516
|
+
"type": "string",
|
517
|
+
"description": "Brief description of the component purpose",
|
518
|
+
"title": "Short Description"
|
519
|
+
},
|
520
|
+
"name": {
|
521
|
+
"type": [
|
522
|
+
"array",
|
523
|
+
"boolean",
|
524
|
+
"number",
|
525
|
+
"object",
|
526
|
+
"string",
|
527
|
+
"null"
|
528
|
+
],
|
529
|
+
"oneOf": [
|
530
|
+
{
|
531
|
+
"type": "string",
|
532
|
+
"description": "Name format for display-only components like HTML, Markdown, etc.",
|
533
|
+
"pattern": "^[a-zA-Z]+$",
|
534
|
+
"title": "Display Component Name"
|
535
|
+
},
|
536
|
+
{
|
537
|
+
"type": "string",
|
538
|
+
"description": "Name format for input components that collect user data.",
|
539
|
+
"pattern": "^[a-zA-Z]+$",
|
540
|
+
"title": "Input Component Name"
|
541
|
+
}
|
542
|
+
],
|
543
|
+
"title": "Name",
|
544
|
+
"description": "The name value.",
|
545
|
+
"oneOfTitles": [
|
546
|
+
"Display Component Name",
|
547
|
+
"Input Component Name"
|
548
|
+
]
|
549
|
+
},
|
550
|
+
"title": {
|
551
|
+
"type": [
|
552
|
+
"array",
|
553
|
+
"boolean",
|
554
|
+
"number",
|
555
|
+
"object",
|
556
|
+
"string",
|
557
|
+
"null"
|
558
|
+
],
|
559
|
+
"oneOf": [
|
560
|
+
{
|
561
|
+
"type": "string",
|
562
|
+
"description": "Title format for display-only components.",
|
563
|
+
"title": "Display Component Title"
|
564
|
+
},
|
565
|
+
{
|
566
|
+
"type": "string",
|
567
|
+
"description": "Title displayed above input components.",
|
568
|
+
"title": "Input Component Title"
|
569
|
+
}
|
570
|
+
],
|
571
|
+
"title": "Title",
|
572
|
+
"description": "The title value.",
|
573
|
+
"oneOfTitles": [
|
574
|
+
"Display Component Title",
|
575
|
+
"Input Component Title"
|
576
|
+
]
|
577
|
+
},
|
578
|
+
"hint": {
|
579
|
+
"type": "string",
|
580
|
+
"description": "Additional guidance text displayed below the component title",
|
581
|
+
"title": "Hint"
|
582
|
+
},
|
583
|
+
"options": {
|
584
|
+
"type": "object",
|
585
|
+
"description": "Component-specific configuration options",
|
586
|
+
"default": {},
|
587
|
+
"properties": {
|
588
|
+
"rows": {
|
589
|
+
"type": "number",
|
590
|
+
"description": "Number of rows for textarea components",
|
591
|
+
"title": "Rows"
|
592
|
+
},
|
593
|
+
"maxWords": {
|
594
|
+
"type": "number",
|
595
|
+
"description": "Maximum number of words allowed in text inputs",
|
596
|
+
"title": "Max Words"
|
597
|
+
},
|
598
|
+
"maxDaysInPast": {
|
599
|
+
"type": "number",
|
600
|
+
"description": "Maximum days in the past allowed for date inputs",
|
601
|
+
"title": "Max Days In Past"
|
602
|
+
},
|
603
|
+
"maxDaysInFuture": {
|
604
|
+
"type": "number",
|
605
|
+
"description": "Maximum days in the future allowed for date inputs",
|
606
|
+
"title": "Max Days In Future"
|
607
|
+
},
|
608
|
+
"customValidationMessage": {
|
609
|
+
"type": "string",
|
610
|
+
"description": "Custom error message for validation failures",
|
611
|
+
"title": "Custom Validation Message"
|
612
|
+
},
|
613
|
+
"customValidationMessages": {
|
614
|
+
"type": "object",
|
615
|
+
"description": "Custom error messages keyed by validation rule name",
|
616
|
+
"properties": {},
|
617
|
+
"additionalProperties": true,
|
618
|
+
"title": "Custom Validation Messages"
|
619
|
+
}
|
620
|
+
},
|
621
|
+
"additionalProperties": true,
|
622
|
+
"title": "Options"
|
623
|
+
},
|
624
|
+
"schema": {
|
625
|
+
"type": "object",
|
626
|
+
"description": "Validation rules for the component",
|
627
|
+
"default": {},
|
628
|
+
"properties": {
|
629
|
+
"min": {
|
630
|
+
"type": "number",
|
631
|
+
"description": "Minimum value or length for validation",
|
632
|
+
"title": "Min"
|
633
|
+
},
|
634
|
+
"max": {
|
635
|
+
"type": "number",
|
636
|
+
"description": "Maximum value or length for validation",
|
637
|
+
"title": "Max"
|
638
|
+
},
|
639
|
+
"length": {
|
640
|
+
"type": "number",
|
641
|
+
"description": "Exact length required for validation",
|
642
|
+
"title": "Length"
|
643
|
+
}
|
644
|
+
},
|
645
|
+
"additionalProperties": true,
|
646
|
+
"title": "Schema"
|
647
|
+
},
|
648
|
+
"list": {
|
649
|
+
"type": "string",
|
650
|
+
"description": "Reference to a predefined list of options for select components",
|
651
|
+
"title": "List"
|
652
|
+
}
|
653
|
+
},
|
654
|
+
"required": [
|
655
|
+
"type"
|
656
|
+
],
|
657
|
+
"additionalProperties": true,
|
658
|
+
"title": "Components Item"
|
659
|
+
},
|
660
|
+
"title": "Components"
|
661
|
+
},
|
662
|
+
"repeat": {
|
663
|
+
"type": "object",
|
664
|
+
"title": "Repeat Configuration",
|
665
|
+
"description": "Configuration for repeatable pages, used with RepeatPageController. Defines how repeatable sections behave including min/max repetitions and display options.\n\nNOTE: This configuration is only used when the 'controller' property is set to 'RepeatPageController'. Otherwise, this property should not be specified.",
|
666
|
+
"oneOfTitles": [
|
667
|
+
"Repeat Configuration",
|
668
|
+
"Alternative Validation"
|
669
|
+
],
|
670
|
+
"properties": {
|
671
|
+
"options": {
|
672
|
+
"type": "object",
|
673
|
+
"description": "Display and identification options for the repetition",
|
674
|
+
"properties": {
|
675
|
+
"name": {
|
676
|
+
"type": "string",
|
677
|
+
"description": "Identifier for the repeatable section, used in data structure",
|
678
|
+
"title": "Name"
|
679
|
+
},
|
680
|
+
"title": {
|
681
|
+
"type": "string",
|
682
|
+
"description": "Title displayed for each repeatable item",
|
683
|
+
"title": "Title"
|
684
|
+
}
|
685
|
+
},
|
686
|
+
"required": [
|
687
|
+
"name",
|
688
|
+
"title"
|
689
|
+
],
|
690
|
+
"additionalProperties": false,
|
691
|
+
"title": "Options"
|
692
|
+
},
|
693
|
+
"schema": {
|
694
|
+
"type": "object",
|
695
|
+
"description": "Validation constraints for the number of repetitions",
|
696
|
+
"properties": {
|
697
|
+
"min": {
|
698
|
+
"type": "number",
|
699
|
+
"description": "Minimum number of repetitions required",
|
700
|
+
"title": "Min"
|
701
|
+
},
|
702
|
+
"max": {
|
703
|
+
"type": "number",
|
704
|
+
"description": "Maximum number of repetitions allowed",
|
705
|
+
"title": "Max"
|
706
|
+
}
|
707
|
+
},
|
708
|
+
"required": [
|
709
|
+
"min",
|
710
|
+
"max"
|
711
|
+
],
|
712
|
+
"additionalProperties": false,
|
713
|
+
"title": "Schema"
|
714
|
+
}
|
715
|
+
},
|
716
|
+
"required": [
|
717
|
+
"options",
|
718
|
+
"schema"
|
719
|
+
],
|
720
|
+
"additionalProperties": false
|
721
|
+
},
|
722
|
+
"condition": {
|
723
|
+
"type": "string",
|
724
|
+
"description": "Optional condition that determines if this page is shown",
|
725
|
+
"title": "Condition"
|
726
|
+
},
|
727
|
+
"next": {
|
728
|
+
"type": "array",
|
729
|
+
"description": "Possible navigation paths after this page",
|
730
|
+
"default": [],
|
731
|
+
"items": {
|
732
|
+
"type": "object",
|
733
|
+
"description": "Navigation link defining where to go after completing a page",
|
734
|
+
"properties": {
|
735
|
+
"path": {
|
736
|
+
"type": "string",
|
737
|
+
"description": "The target page path to navigate to",
|
738
|
+
"title": "Path"
|
739
|
+
},
|
740
|
+
"condition": {
|
741
|
+
"type": "string",
|
742
|
+
"description": "Optional condition that determines if this path should be taken",
|
743
|
+
"title": "Condition"
|
744
|
+
},
|
745
|
+
"redirect": {
|
746
|
+
"type": "string",
|
747
|
+
"description": "Optional external URL to redirect to instead of an internal page",
|
748
|
+
"title": "Redirect"
|
749
|
+
}
|
750
|
+
},
|
751
|
+
"required": [
|
752
|
+
"path"
|
753
|
+
],
|
754
|
+
"additionalProperties": false,
|
755
|
+
"title": "Next Item"
|
756
|
+
},
|
757
|
+
"title": "Next"
|
758
|
+
},
|
759
|
+
"events": {
|
760
|
+
"type": "object",
|
761
|
+
"description": "Event handlers for page lifecycle events",
|
762
|
+
"properties": {
|
763
|
+
"onLoad": {
|
764
|
+
"type": "object",
|
765
|
+
"description": "Event handler triggered when the page is loaded",
|
766
|
+
"properties": {
|
767
|
+
"type": {
|
768
|
+
"type": "string",
|
769
|
+
"description": "Type of the event handler (currently only \"http\" supported)",
|
770
|
+
"title": "Type"
|
771
|
+
},
|
772
|
+
"options": {
|
773
|
+
"type": "object",
|
774
|
+
"description": "Options specific to the event handler type",
|
775
|
+
"properties": {
|
776
|
+
"method": {
|
777
|
+
"type": "string",
|
778
|
+
"description": "HTTP method to use for the request",
|
779
|
+
"title": "Method"
|
780
|
+
},
|
781
|
+
"url": {
|
782
|
+
"type": "string",
|
783
|
+
"description": "URL endpoint to call when the event fires",
|
784
|
+
"format": "uri",
|
785
|
+
"title": "Url"
|
786
|
+
}
|
787
|
+
},
|
788
|
+
"required": [
|
789
|
+
"method",
|
790
|
+
"url"
|
791
|
+
],
|
792
|
+
"additionalProperties": false,
|
793
|
+
"title": "Options"
|
794
|
+
}
|
795
|
+
},
|
796
|
+
"required": [
|
797
|
+
"type"
|
798
|
+
],
|
799
|
+
"additionalProperties": false,
|
800
|
+
"title": "On Load"
|
801
|
+
},
|
802
|
+
"onSave": {
|
803
|
+
"type": "object",
|
804
|
+
"description": "Event handler triggered when the page data is saved",
|
805
|
+
"properties": {
|
806
|
+
"type": {
|
807
|
+
"type": "string",
|
808
|
+
"description": "Type of the event handler (currently only \"http\" supported)",
|
809
|
+
"title": "Type"
|
810
|
+
},
|
811
|
+
"options": {
|
812
|
+
"type": "object",
|
813
|
+
"description": "Options specific to the event handler type",
|
814
|
+
"properties": {
|
815
|
+
"method": {
|
816
|
+
"type": "string",
|
817
|
+
"description": "HTTP method to use for the request",
|
818
|
+
"title": "Method"
|
819
|
+
},
|
820
|
+
"url": {
|
821
|
+
"type": "string",
|
822
|
+
"description": "URL endpoint to call when the event fires",
|
823
|
+
"format": "uri",
|
824
|
+
"title": "Url"
|
825
|
+
}
|
826
|
+
},
|
827
|
+
"required": [
|
828
|
+
"method",
|
829
|
+
"url"
|
830
|
+
],
|
831
|
+
"additionalProperties": false,
|
832
|
+
"title": "Options"
|
833
|
+
}
|
834
|
+
},
|
835
|
+
"required": [
|
836
|
+
"type"
|
837
|
+
],
|
838
|
+
"additionalProperties": false,
|
839
|
+
"title": "On Save"
|
840
|
+
}
|
841
|
+
},
|
842
|
+
"additionalProperties": false,
|
843
|
+
"title": "Events"
|
844
|
+
},
|
845
|
+
"view": {
|
846
|
+
"type": "string",
|
847
|
+
"description": "Optional custom view template to use for rendering this page",
|
848
|
+
"title": "View"
|
849
|
+
}
|
850
|
+
},
|
851
|
+
"required": [
|
852
|
+
"path",
|
853
|
+
"title"
|
854
|
+
],
|
855
|
+
"additionalProperties": false,
|
856
|
+
"title": "V1 Pages Item"
|
857
|
+
},
|
858
|
+
"title": "V1 Pages"
|
859
|
+
}
|
860
|
+
],
|
861
|
+
"title": "Pages",
|
862
|
+
"oneOfTitles": [
|
863
|
+
"V2 Pages",
|
864
|
+
"V1 Pages"
|
865
|
+
]
|
866
|
+
},
|
867
|
+
"sections": {
|
868
|
+
"type": "array",
|
869
|
+
"description": "Sections grouping related pages together",
|
870
|
+
"uniqueItems": true,
|
871
|
+
"items": {
|
872
|
+
"type": "object",
|
873
|
+
"description": "A form section grouping related pages together",
|
874
|
+
"properties": {
|
875
|
+
"name": {
|
876
|
+
"type": "string",
|
877
|
+
"description": "Unique identifier for the section, used in code and page references",
|
878
|
+
"title": "Name"
|
879
|
+
},
|
880
|
+
"title": {
|
881
|
+
"type": "string",
|
882
|
+
"description": "Human-readable section title displayed to users",
|
883
|
+
"title": "Title"
|
884
|
+
},
|
885
|
+
"hideTitle": {
|
886
|
+
"type": "boolean",
|
887
|
+
"description": "When true, the section title will not be displayed in the UI",
|
888
|
+
"default": false,
|
889
|
+
"title": "Hide Title"
|
890
|
+
}
|
891
|
+
},
|
892
|
+
"required": [
|
893
|
+
"name",
|
894
|
+
"title"
|
895
|
+
],
|
896
|
+
"additionalProperties": false,
|
897
|
+
"title": "Sections Item"
|
898
|
+
},
|
899
|
+
"title": "Sections"
|
900
|
+
},
|
901
|
+
"conditions": {
|
902
|
+
"type": "array",
|
903
|
+
"description": "Named conditions used for form logic",
|
904
|
+
"uniqueItems": true,
|
905
|
+
"items": {
|
906
|
+
"type": "object",
|
907
|
+
"description": "Container for a named condition with its definition",
|
908
|
+
"properties": {
|
909
|
+
"name": {
|
910
|
+
"type": "string",
|
911
|
+
"description": "Unique identifier used to reference this condition",
|
912
|
+
"title": "Name"
|
913
|
+
},
|
914
|
+
"displayName": {
|
915
|
+
"type": "string",
|
916
|
+
"description": "Human-readable name for display in the UI",
|
917
|
+
"title": "Display Name"
|
918
|
+
},
|
919
|
+
"value": {
|
920
|
+
"type": "object",
|
921
|
+
"description": "The complete condition definition",
|
922
|
+
"properties": {
|
923
|
+
"name": {
|
924
|
+
"type": "string",
|
925
|
+
"description": "Unique identifier for the condition set",
|
926
|
+
"title": "Name"
|
927
|
+
},
|
928
|
+
"conditions": {
|
929
|
+
"type": "array",
|
930
|
+
"description": "Array of conditions, condition references, or condition groups\n\nElements can be direct conditions, references to named conditions, or nested condition groups. This structure allows building complex logical expressions with AND/OR operators.",
|
931
|
+
"items": {
|
932
|
+
"anyOf": [
|
933
|
+
{
|
934
|
+
"type": "object",
|
935
|
+
"description": "Condition definition specifying a logical comparison",
|
936
|
+
"properties": {
|
937
|
+
"field": {
|
938
|
+
"type": "object",
|
939
|
+
"description": "The form field being evaluated in this condition",
|
940
|
+
"properties": {
|
941
|
+
"name": {
|
942
|
+
"type": "string",
|
943
|
+
"description": "Component name referenced by this condition",
|
944
|
+
"title": "Name"
|
945
|
+
},
|
946
|
+
"type": {
|
947
|
+
"type": "string",
|
948
|
+
"description": "Data type of the field (e.g., string, number, date)",
|
949
|
+
"title": "Type"
|
950
|
+
},
|
951
|
+
"display": {
|
952
|
+
"type": "string",
|
953
|
+
"description": "Human-readable name of the field for display purposes",
|
954
|
+
"title": "Display"
|
955
|
+
}
|
956
|
+
},
|
957
|
+
"required": [
|
958
|
+
"name",
|
959
|
+
"type",
|
960
|
+
"display"
|
961
|
+
],
|
962
|
+
"additionalProperties": false,
|
963
|
+
"title": "Field"
|
964
|
+
},
|
965
|
+
"operator": {
|
966
|
+
"type": "string",
|
967
|
+
"description": "Comparison operator: equals, notEquals, contains, notContains, greaterThan, lessThan, isEmpty, isNotEmpty",
|
968
|
+
"title": "Operator"
|
969
|
+
},
|
970
|
+
"value": {
|
971
|
+
"description": "Value to compare the field against, either fixed or relative date",
|
972
|
+
"anyOf": [
|
973
|
+
{
|
974
|
+
"type": "object",
|
975
|
+
"description": "Value specification for a condition",
|
976
|
+
"properties": {
|
977
|
+
"type": {
|
978
|
+
"type": "string",
|
979
|
+
"description": "Data type of the value (e.g., string, number, date)",
|
980
|
+
"title": "Type"
|
981
|
+
},
|
982
|
+
"value": {
|
983
|
+
"type": "string",
|
984
|
+
"description": "The actual value to compare against",
|
985
|
+
"title": "Value"
|
986
|
+
},
|
987
|
+
"display": {
|
988
|
+
"type": "string",
|
989
|
+
"description": "Human-readable version of the value for display purposes",
|
990
|
+
"title": "Display"
|
991
|
+
}
|
992
|
+
},
|
993
|
+
"required": [
|
994
|
+
"type",
|
995
|
+
"value",
|
996
|
+
"display"
|
997
|
+
],
|
998
|
+
"additionalProperties": false,
|
999
|
+
"title": "Static Value"
|
1000
|
+
},
|
1001
|
+
{
|
1002
|
+
"type": "object",
|
1003
|
+
"description": "Relative date specification for date-based conditions",
|
1004
|
+
"properties": {
|
1005
|
+
"type": {
|
1006
|
+
"type": "string",
|
1007
|
+
"description": "Data type identifier, should be \"RelativeDate\"",
|
1008
|
+
"title": "Type"
|
1009
|
+
},
|
1010
|
+
"period": {
|
1011
|
+
"type": "string",
|
1012
|
+
"description": "Numeric amount of the time period, as a string",
|
1013
|
+
"title": "Period"
|
1014
|
+
},
|
1015
|
+
"unit": {
|
1016
|
+
"type": "string",
|
1017
|
+
"description": "Time unit (e.g., days, weeks, months, years)",
|
1018
|
+
"title": "Unit"
|
1019
|
+
},
|
1020
|
+
"direction": {
|
1021
|
+
"type": "string",
|
1022
|
+
"description": "Temporal direction, either \"past\" or \"future\"",
|
1023
|
+
"title": "Direction"
|
1024
|
+
}
|
1025
|
+
},
|
1026
|
+
"required": [
|
1027
|
+
"type",
|
1028
|
+
"period",
|
1029
|
+
"unit",
|
1030
|
+
"direction"
|
1031
|
+
],
|
1032
|
+
"additionalProperties": false,
|
1033
|
+
"title": "Relative Date Value"
|
1034
|
+
}
|
1035
|
+
],
|
1036
|
+
"title": "Value",
|
1037
|
+
"anyOfTitles": [
|
1038
|
+
"Static Value",
|
1039
|
+
"Relative Date Value"
|
1040
|
+
]
|
1041
|
+
},
|
1042
|
+
"coordinator": {
|
1043
|
+
"type": "string",
|
1044
|
+
"description": "Logical operator connecting this condition with others (AND, OR)",
|
1045
|
+
"title": "Coordinator"
|
1046
|
+
}
|
1047
|
+
},
|
1048
|
+
"required": [
|
1049
|
+
"operator"
|
1050
|
+
],
|
1051
|
+
"additionalProperties": false,
|
1052
|
+
"title": "Unknown Value Type"
|
1053
|
+
},
|
1054
|
+
{
|
1055
|
+
"type": "object",
|
1056
|
+
"description": "Reference to a named condition defined elsewhere",
|
1057
|
+
"properties": {
|
1058
|
+
"conditionName": {
|
1059
|
+
"type": "string",
|
1060
|
+
"description": "Name of the referenced condition",
|
1061
|
+
"title": "Condition Name"
|
1062
|
+
},
|
1063
|
+
"conditionDisplayName": {
|
1064
|
+
"type": "string",
|
1065
|
+
"description": "Human-readable name of the condition for display purposes",
|
1066
|
+
"title": "Condition Display Name"
|
1067
|
+
},
|
1068
|
+
"coordinator": {
|
1069
|
+
"type": "string",
|
1070
|
+
"description": "Logical operator connecting this condition with others (AND, OR)",
|
1071
|
+
"title": "Coordinator"
|
1072
|
+
}
|
1073
|
+
},
|
1074
|
+
"required": [
|
1075
|
+
"conditionName",
|
1076
|
+
"conditionDisplayName"
|
1077
|
+
],
|
1078
|
+
"additionalProperties": false,
|
1079
|
+
"title": "Unknown Value Type"
|
1080
|
+
},
|
1081
|
+
{
|
1082
|
+
"$ref": "#/$defs/conditionGroupSchema",
|
1083
|
+
"title": "Nested Condition Group",
|
1084
|
+
"description": "A nested group of conditions that allows building complex logical expressions with multiple levels."
|
1085
|
+
}
|
1086
|
+
],
|
1087
|
+
"title": "Conditions Item",
|
1088
|
+
"anyOfTitles": [
|
1089
|
+
"Condition Definition",
|
1090
|
+
"Condition Reference",
|
1091
|
+
"Nested Condition Group"
|
1092
|
+
]
|
1093
|
+
},
|
1094
|
+
"title": "Conditions"
|
1095
|
+
}
|
1096
|
+
},
|
1097
|
+
"required": [
|
1098
|
+
"name"
|
1099
|
+
],
|
1100
|
+
"additionalProperties": false,
|
1101
|
+
"title": "Value"
|
1102
|
+
}
|
1103
|
+
},
|
1104
|
+
"required": [
|
1105
|
+
"name",
|
1106
|
+
"value"
|
1107
|
+
],
|
1108
|
+
"additionalProperties": false,
|
1109
|
+
"title": "Conditions Item"
|
1110
|
+
},
|
1111
|
+
"title": "Conditions"
|
1112
|
+
},
|
1113
|
+
"lists": {
|
1114
|
+
"type": "array",
|
1115
|
+
"description": "Reusable lists of options for select components",
|
1116
|
+
"uniqueItems": true,
|
1117
|
+
"items": {
|
1118
|
+
"type": "object",
|
1119
|
+
"description": "Reusable list of options for select components",
|
1120
|
+
"properties": {
|
1121
|
+
"id": {
|
1122
|
+
"type": "string",
|
1123
|
+
"description": "Unique identifier for the list",
|
1124
|
+
"format": "uuid",
|
1125
|
+
"title": "Id"
|
1126
|
+
},
|
1127
|
+
"name": {
|
1128
|
+
"type": "string",
|
1129
|
+
"description": "Name used to reference this list from components",
|
1130
|
+
"title": "Name"
|
1131
|
+
},
|
1132
|
+
"title": {
|
1133
|
+
"type": "string",
|
1134
|
+
"description": "Human-readable title for the list",
|
1135
|
+
"title": "Title"
|
1136
|
+
},
|
1137
|
+
"type": {
|
1138
|
+
"type": "string",
|
1139
|
+
"description": "Data type for list values (string or number)",
|
1140
|
+
"enum": [
|
1141
|
+
"string",
|
1142
|
+
"number"
|
1143
|
+
],
|
1144
|
+
"title": "Type"
|
1145
|
+
},
|
1146
|
+
"items": {
|
1147
|
+
"type": [
|
1148
|
+
"array",
|
1149
|
+
"boolean",
|
1150
|
+
"number",
|
1151
|
+
"object",
|
1152
|
+
"string",
|
1153
|
+
"null"
|
1154
|
+
],
|
1155
|
+
"oneOf": [
|
1156
|
+
{
|
1157
|
+
"type": "array",
|
1158
|
+
"description": "Array of items with string values",
|
1159
|
+
"uniqueItems": true,
|
1160
|
+
"items": {
|
1161
|
+
"type": "object",
|
1162
|
+
"description": "List item with string value",
|
1163
|
+
"properties": {
|
1164
|
+
"text": {
|
1165
|
+
"type": "string",
|
1166
|
+
"description": "Display text shown to the user",
|
1167
|
+
"title": "Text"
|
1168
|
+
},
|
1169
|
+
"description": {
|
1170
|
+
"type": "string",
|
1171
|
+
"description": "Optional additional descriptive text for the item",
|
1172
|
+
"title": "Description"
|
1173
|
+
},
|
1174
|
+
"conditional": {
|
1175
|
+
"type": "object",
|
1176
|
+
"description": "Optional components to show when this item is selected",
|
1177
|
+
"properties": {
|
1178
|
+
"components": {
|
1179
|
+
"type": "array",
|
1180
|
+
"description": "Components to display conditionally",
|
1181
|
+
"uniqueItems": true,
|
1182
|
+
"items": {
|
1183
|
+
"type": "object",
|
1184
|
+
"description": "Form component definition specifying UI element behavior",
|
1185
|
+
"properties": {
|
1186
|
+
"id": {
|
1187
|
+
"type": "string",
|
1188
|
+
"description": "Unique identifier for the component",
|
1189
|
+
"format": "uuid",
|
1190
|
+
"title": "Id"
|
1191
|
+
},
|
1192
|
+
"type": {
|
1193
|
+
"type": "string",
|
1194
|
+
"description": "Component type (TextField, RadioButtons, DateField, etc.)",
|
1195
|
+
"title": "Type"
|
1196
|
+
},
|
1197
|
+
"shortDescription": {
|
1198
|
+
"type": "string",
|
1199
|
+
"description": "Brief description of the component purpose",
|
1200
|
+
"title": "Short Description"
|
1201
|
+
},
|
1202
|
+
"name": {
|
1203
|
+
"type": [
|
1204
|
+
"array",
|
1205
|
+
"boolean",
|
1206
|
+
"number",
|
1207
|
+
"object",
|
1208
|
+
"string",
|
1209
|
+
"null"
|
1210
|
+
],
|
1211
|
+
"oneOf": [
|
1212
|
+
{
|
1213
|
+
"type": "string",
|
1214
|
+
"description": "Name format for display-only components like HTML, Markdown, etc.",
|
1215
|
+
"pattern": "^[a-zA-Z]+$",
|
1216
|
+
"title": "Display Component Name"
|
1217
|
+
},
|
1218
|
+
{
|
1219
|
+
"type": "string",
|
1220
|
+
"description": "Name format for input components that collect user data.",
|
1221
|
+
"pattern": "^[a-zA-Z]+$",
|
1222
|
+
"title": "Input Component Name"
|
1223
|
+
}
|
1224
|
+
],
|
1225
|
+
"title": "Name",
|
1226
|
+
"description": "The name value.",
|
1227
|
+
"oneOfTitles": [
|
1228
|
+
"Display Component Name",
|
1229
|
+
"Input Component Name"
|
1230
|
+
]
|
1231
|
+
},
|
1232
|
+
"title": {
|
1233
|
+
"type": [
|
1234
|
+
"array",
|
1235
|
+
"boolean",
|
1236
|
+
"number",
|
1237
|
+
"object",
|
1238
|
+
"string",
|
1239
|
+
"null"
|
1240
|
+
],
|
1241
|
+
"oneOf": [
|
1242
|
+
{
|
1243
|
+
"type": "string",
|
1244
|
+
"description": "Title format for display-only components.",
|
1245
|
+
"title": "Display Component Title"
|
1246
|
+
},
|
1247
|
+
{
|
1248
|
+
"type": "string",
|
1249
|
+
"description": "Title displayed above input components.",
|
1250
|
+
"title": "Input Component Title"
|
1251
|
+
}
|
1252
|
+
],
|
1253
|
+
"title": "Title",
|
1254
|
+
"description": "The title value.",
|
1255
|
+
"oneOfTitles": [
|
1256
|
+
"Display Component Title",
|
1257
|
+
"Input Component Title"
|
1258
|
+
]
|
1259
|
+
},
|
1260
|
+
"hint": {
|
1261
|
+
"type": "string",
|
1262
|
+
"description": "Additional guidance text displayed below the component title",
|
1263
|
+
"title": "Hint"
|
1264
|
+
},
|
1265
|
+
"options": {
|
1266
|
+
"type": "object",
|
1267
|
+
"description": "Component-specific configuration options",
|
1268
|
+
"default": {},
|
1269
|
+
"properties": {
|
1270
|
+
"rows": {
|
1271
|
+
"type": "number",
|
1272
|
+
"description": "Number of rows for textarea components",
|
1273
|
+
"title": "Rows"
|
1274
|
+
},
|
1275
|
+
"maxWords": {
|
1276
|
+
"type": "number",
|
1277
|
+
"description": "Maximum number of words allowed in text inputs",
|
1278
|
+
"title": "Max Words"
|
1279
|
+
},
|
1280
|
+
"maxDaysInPast": {
|
1281
|
+
"type": "number",
|
1282
|
+
"description": "Maximum days in the past allowed for date inputs",
|
1283
|
+
"title": "Max Days In Past"
|
1284
|
+
},
|
1285
|
+
"maxDaysInFuture": {
|
1286
|
+
"type": "number",
|
1287
|
+
"description": "Maximum days in the future allowed for date inputs",
|
1288
|
+
"title": "Max Days In Future"
|
1289
|
+
},
|
1290
|
+
"customValidationMessage": {
|
1291
|
+
"type": "string",
|
1292
|
+
"description": "Custom error message for validation failures",
|
1293
|
+
"title": "Custom Validation Message"
|
1294
|
+
},
|
1295
|
+
"customValidationMessages": {
|
1296
|
+
"type": "object",
|
1297
|
+
"description": "Custom error messages keyed by validation rule name",
|
1298
|
+
"properties": {},
|
1299
|
+
"additionalProperties": true,
|
1300
|
+
"title": "Custom Validation Messages"
|
1301
|
+
}
|
1302
|
+
},
|
1303
|
+
"additionalProperties": true,
|
1304
|
+
"title": "Options"
|
1305
|
+
},
|
1306
|
+
"schema": {
|
1307
|
+
"type": "object",
|
1308
|
+
"description": "Validation rules for the component",
|
1309
|
+
"default": {},
|
1310
|
+
"properties": {
|
1311
|
+
"min": {
|
1312
|
+
"type": "number",
|
1313
|
+
"description": "Minimum value or length for validation",
|
1314
|
+
"title": "Min"
|
1315
|
+
},
|
1316
|
+
"max": {
|
1317
|
+
"type": "number",
|
1318
|
+
"description": "Maximum value or length for validation",
|
1319
|
+
"title": "Max"
|
1320
|
+
},
|
1321
|
+
"length": {
|
1322
|
+
"type": "number",
|
1323
|
+
"description": "Exact length required for validation",
|
1324
|
+
"title": "Length"
|
1325
|
+
}
|
1326
|
+
},
|
1327
|
+
"additionalProperties": true,
|
1328
|
+
"title": "Schema"
|
1329
|
+
},
|
1330
|
+
"list": {
|
1331
|
+
"type": "string",
|
1332
|
+
"description": "Reference to a predefined list of options for select components",
|
1333
|
+
"title": "List"
|
1334
|
+
}
|
1335
|
+
},
|
1336
|
+
"required": [
|
1337
|
+
"type"
|
1338
|
+
],
|
1339
|
+
"additionalProperties": true,
|
1340
|
+
"title": "Components Item"
|
1341
|
+
},
|
1342
|
+
"title": "Components"
|
1343
|
+
}
|
1344
|
+
},
|
1345
|
+
"required": [
|
1346
|
+
"components"
|
1347
|
+
],
|
1348
|
+
"additionalProperties": false,
|
1349
|
+
"title": "Conditional"
|
1350
|
+
},
|
1351
|
+
"condition": {
|
1352
|
+
"type": "string",
|
1353
|
+
"description": "Condition that determines if this item is shown",
|
1354
|
+
"title": "Condition"
|
1355
|
+
},
|
1356
|
+
"hint": {
|
1357
|
+
"type": "string",
|
1358
|
+
"description": "Optional hint text to be shown on list item",
|
1359
|
+
"title": "Hint"
|
1360
|
+
},
|
1361
|
+
"value": {
|
1362
|
+
"type": "string",
|
1363
|
+
"description": "String value stored when this item is selected",
|
1364
|
+
"title": "Value"
|
1365
|
+
}
|
1366
|
+
},
|
1367
|
+
"required": [
|
1368
|
+
"value"
|
1369
|
+
],
|
1370
|
+
"additionalProperties": false,
|
1371
|
+
"title": "Items (array) Item"
|
1372
|
+
},
|
1373
|
+
"title": "String List Items"
|
1374
|
+
},
|
1375
|
+
{
|
1376
|
+
"type": "array",
|
1377
|
+
"description": "Array of items with numeric values",
|
1378
|
+
"uniqueItems": true,
|
1379
|
+
"items": {
|
1380
|
+
"type": "object",
|
1381
|
+
"description": "List item with numeric value",
|
1382
|
+
"properties": {
|
1383
|
+
"text": {
|
1384
|
+
"type": "string",
|
1385
|
+
"description": "Display text shown to the user",
|
1386
|
+
"title": "Text"
|
1387
|
+
},
|
1388
|
+
"description": {
|
1389
|
+
"type": "string",
|
1390
|
+
"description": "Optional additional descriptive text for the item",
|
1391
|
+
"title": "Description"
|
1392
|
+
},
|
1393
|
+
"conditional": {
|
1394
|
+
"type": "object",
|
1395
|
+
"description": "Optional components to show when this item is selected",
|
1396
|
+
"properties": {
|
1397
|
+
"components": {
|
1398
|
+
"type": "array",
|
1399
|
+
"description": "Components to display conditionally",
|
1400
|
+
"uniqueItems": true,
|
1401
|
+
"items": {
|
1402
|
+
"type": "object",
|
1403
|
+
"description": "Form component definition specifying UI element behavior",
|
1404
|
+
"properties": {
|
1405
|
+
"id": {
|
1406
|
+
"type": "string",
|
1407
|
+
"description": "Unique identifier for the component",
|
1408
|
+
"format": "uuid",
|
1409
|
+
"title": "Id"
|
1410
|
+
},
|
1411
|
+
"type": {
|
1412
|
+
"type": "string",
|
1413
|
+
"description": "Component type (TextField, RadioButtons, DateField, etc.)",
|
1414
|
+
"title": "Type"
|
1415
|
+
},
|
1416
|
+
"shortDescription": {
|
1417
|
+
"type": "string",
|
1418
|
+
"description": "Brief description of the component purpose",
|
1419
|
+
"title": "Short Description"
|
1420
|
+
},
|
1421
|
+
"name": {
|
1422
|
+
"type": [
|
1423
|
+
"array",
|
1424
|
+
"boolean",
|
1425
|
+
"number",
|
1426
|
+
"object",
|
1427
|
+
"string",
|
1428
|
+
"null"
|
1429
|
+
],
|
1430
|
+
"oneOf": [
|
1431
|
+
{
|
1432
|
+
"type": "string",
|
1433
|
+
"description": "Name format for display-only components like HTML, Markdown, etc.",
|
1434
|
+
"pattern": "^[a-zA-Z]+$",
|
1435
|
+
"title": "Display Component Name"
|
1436
|
+
},
|
1437
|
+
{
|
1438
|
+
"type": "string",
|
1439
|
+
"description": "Name format for input components that collect user data.",
|
1440
|
+
"pattern": "^[a-zA-Z]+$",
|
1441
|
+
"title": "Input Component Name"
|
1442
|
+
}
|
1443
|
+
],
|
1444
|
+
"title": "Name",
|
1445
|
+
"description": "The name value.",
|
1446
|
+
"oneOfTitles": [
|
1447
|
+
"Display Component Name",
|
1448
|
+
"Input Component Name"
|
1449
|
+
]
|
1450
|
+
},
|
1451
|
+
"title": {
|
1452
|
+
"type": [
|
1453
|
+
"array",
|
1454
|
+
"boolean",
|
1455
|
+
"number",
|
1456
|
+
"object",
|
1457
|
+
"string",
|
1458
|
+
"null"
|
1459
|
+
],
|
1460
|
+
"oneOf": [
|
1461
|
+
{
|
1462
|
+
"type": "string",
|
1463
|
+
"description": "Title format for display-only components.",
|
1464
|
+
"title": "Display Component Title"
|
1465
|
+
},
|
1466
|
+
{
|
1467
|
+
"type": "string",
|
1468
|
+
"description": "Title displayed above input components.",
|
1469
|
+
"title": "Input Component Title"
|
1470
|
+
}
|
1471
|
+
],
|
1472
|
+
"title": "Title",
|
1473
|
+
"description": "The title value.",
|
1474
|
+
"oneOfTitles": [
|
1475
|
+
"Display Component Title",
|
1476
|
+
"Input Component Title"
|
1477
|
+
]
|
1478
|
+
},
|
1479
|
+
"hint": {
|
1480
|
+
"type": "string",
|
1481
|
+
"description": "Additional guidance text displayed below the component title",
|
1482
|
+
"title": "Hint"
|
1483
|
+
},
|
1484
|
+
"options": {
|
1485
|
+
"type": "object",
|
1486
|
+
"description": "Component-specific configuration options",
|
1487
|
+
"default": {},
|
1488
|
+
"properties": {
|
1489
|
+
"rows": {
|
1490
|
+
"type": "number",
|
1491
|
+
"description": "Number of rows for textarea components",
|
1492
|
+
"title": "Rows"
|
1493
|
+
},
|
1494
|
+
"maxWords": {
|
1495
|
+
"type": "number",
|
1496
|
+
"description": "Maximum number of words allowed in text inputs",
|
1497
|
+
"title": "Max Words"
|
1498
|
+
},
|
1499
|
+
"maxDaysInPast": {
|
1500
|
+
"type": "number",
|
1501
|
+
"description": "Maximum days in the past allowed for date inputs",
|
1502
|
+
"title": "Max Days In Past"
|
1503
|
+
},
|
1504
|
+
"maxDaysInFuture": {
|
1505
|
+
"type": "number",
|
1506
|
+
"description": "Maximum days in the future allowed for date inputs",
|
1507
|
+
"title": "Max Days In Future"
|
1508
|
+
},
|
1509
|
+
"customValidationMessage": {
|
1510
|
+
"type": "string",
|
1511
|
+
"description": "Custom error message for validation failures",
|
1512
|
+
"title": "Custom Validation Message"
|
1513
|
+
},
|
1514
|
+
"customValidationMessages": {
|
1515
|
+
"type": "object",
|
1516
|
+
"description": "Custom error messages keyed by validation rule name",
|
1517
|
+
"properties": {},
|
1518
|
+
"additionalProperties": true,
|
1519
|
+
"title": "Custom Validation Messages"
|
1520
|
+
}
|
1521
|
+
},
|
1522
|
+
"additionalProperties": true,
|
1523
|
+
"title": "Options"
|
1524
|
+
},
|
1525
|
+
"schema": {
|
1526
|
+
"type": "object",
|
1527
|
+
"description": "Validation rules for the component",
|
1528
|
+
"default": {},
|
1529
|
+
"properties": {
|
1530
|
+
"min": {
|
1531
|
+
"type": "number",
|
1532
|
+
"description": "Minimum value or length for validation",
|
1533
|
+
"title": "Min"
|
1534
|
+
},
|
1535
|
+
"max": {
|
1536
|
+
"type": "number",
|
1537
|
+
"description": "Maximum value or length for validation",
|
1538
|
+
"title": "Max"
|
1539
|
+
},
|
1540
|
+
"length": {
|
1541
|
+
"type": "number",
|
1542
|
+
"description": "Exact length required for validation",
|
1543
|
+
"title": "Length"
|
1544
|
+
}
|
1545
|
+
},
|
1546
|
+
"additionalProperties": true,
|
1547
|
+
"title": "Schema"
|
1548
|
+
},
|
1549
|
+
"list": {
|
1550
|
+
"type": "string",
|
1551
|
+
"description": "Reference to a predefined list of options for select components",
|
1552
|
+
"title": "List"
|
1553
|
+
}
|
1554
|
+
},
|
1555
|
+
"required": [
|
1556
|
+
"type"
|
1557
|
+
],
|
1558
|
+
"additionalProperties": true,
|
1559
|
+
"title": "Components Item"
|
1560
|
+
},
|
1561
|
+
"title": "Components"
|
1562
|
+
}
|
1563
|
+
},
|
1564
|
+
"required": [
|
1565
|
+
"components"
|
1566
|
+
],
|
1567
|
+
"additionalProperties": false,
|
1568
|
+
"title": "Conditional"
|
1569
|
+
},
|
1570
|
+
"condition": {
|
1571
|
+
"type": "string",
|
1572
|
+
"description": "Condition that determines if this item is shown",
|
1573
|
+
"title": "Condition"
|
1574
|
+
},
|
1575
|
+
"hint": {
|
1576
|
+
"type": "string",
|
1577
|
+
"description": "Optional hint text to be shown on list item",
|
1578
|
+
"title": "Hint"
|
1579
|
+
},
|
1580
|
+
"value": {
|
1581
|
+
"type": "number",
|
1582
|
+
"description": "Numeric value stored when this item is selected",
|
1583
|
+
"title": "Value"
|
1584
|
+
}
|
1585
|
+
},
|
1586
|
+
"required": [
|
1587
|
+
"value"
|
1588
|
+
],
|
1589
|
+
"additionalProperties": false,
|
1590
|
+
"title": "Items (array) Item"
|
1591
|
+
},
|
1592
|
+
"title": "Number List Items"
|
1593
|
+
}
|
1594
|
+
],
|
1595
|
+
"title": "Items",
|
1596
|
+
"description": "The items value.",
|
1597
|
+
"oneOfTitles": [
|
1598
|
+
"Items (array)",
|
1599
|
+
"Items (array)"
|
1600
|
+
]
|
1601
|
+
}
|
1602
|
+
},
|
1603
|
+
"required": [
|
1604
|
+
"name",
|
1605
|
+
"title",
|
1606
|
+
"type"
|
1607
|
+
],
|
1608
|
+
"additionalProperties": false,
|
1609
|
+
"title": "Lists Item"
|
1610
|
+
},
|
1611
|
+
"title": "Lists"
|
1612
|
+
},
|
1613
|
+
"metadata": {
|
1614
|
+
"type": "object",
|
1615
|
+
"description": "Custom metadata for the form",
|
1616
|
+
"properties": {
|
1617
|
+
"a": {
|
1618
|
+
"type": [
|
1619
|
+
"array",
|
1620
|
+
"boolean",
|
1621
|
+
"number",
|
1622
|
+
"object",
|
1623
|
+
"string",
|
1624
|
+
"null"
|
1625
|
+
],
|
1626
|
+
"title": "A",
|
1627
|
+
"description": "The a value."
|
1628
|
+
}
|
1629
|
+
},
|
1630
|
+
"additionalProperties": true,
|
1631
|
+
"title": "Metadata"
|
1632
|
+
},
|
1633
|
+
"declaration": {
|
1634
|
+
"type": "string",
|
1635
|
+
"description": "Declaration text shown on the summary page",
|
1636
|
+
"title": "Declaration"
|
1637
|
+
},
|
1638
|
+
"skipSummary": {
|
1639
|
+
"type": [
|
1640
|
+
"array",
|
1641
|
+
"boolean",
|
1642
|
+
"number",
|
1643
|
+
"object",
|
1644
|
+
"string",
|
1645
|
+
"null"
|
1646
|
+
],
|
1647
|
+
"description": "option to skip the summary page",
|
1648
|
+
"title": "Skip Summary"
|
1649
|
+
},
|
1650
|
+
"phaseBanner": {
|
1651
|
+
"type": "object",
|
1652
|
+
"description": "Phase banner configuration",
|
1653
|
+
"properties": {
|
1654
|
+
"phase": {
|
1655
|
+
"type": "string",
|
1656
|
+
"description": "Development phase of the service (alpha or beta)",
|
1657
|
+
"enum": [
|
1658
|
+
"alpha",
|
1659
|
+
"beta"
|
1660
|
+
],
|
1661
|
+
"title": "Phase"
|
1662
|
+
}
|
1663
|
+
},
|
1664
|
+
"additionalProperties": false,
|
1665
|
+
"title": "Phase Banner"
|
1666
|
+
},
|
1667
|
+
"outputEmail": {
|
1668
|
+
"type": "string",
|
1669
|
+
"description": "Email address where form submissions are sent",
|
1670
|
+
"format": "email",
|
1671
|
+
"title": "Output Email"
|
1672
|
+
},
|
1673
|
+
"output": {
|
1674
|
+
"type": "object",
|
1675
|
+
"description": "Configuration for submission output format",
|
1676
|
+
"properties": {
|
1677
|
+
"audience": {
|
1678
|
+
"type": "string",
|
1679
|
+
"description": "Target audience for the output (human readable or machine processable)",
|
1680
|
+
"enum": [
|
1681
|
+
"human",
|
1682
|
+
"machine"
|
1683
|
+
],
|
1684
|
+
"title": "Audience"
|
1685
|
+
},
|
1686
|
+
"version": {
|
1687
|
+
"type": "string",
|
1688
|
+
"description": "Version identifier for the output format",
|
1689
|
+
"title": "Version"
|
1690
|
+
}
|
1691
|
+
},
|
1692
|
+
"required": [
|
1693
|
+
"audience",
|
1694
|
+
"version"
|
1695
|
+
],
|
1696
|
+
"additionalProperties": false,
|
1697
|
+
"title": "Output"
|
1698
|
+
}
|
1699
|
+
},
|
1700
|
+
"required": [
|
1701
|
+
"pages",
|
1702
|
+
"sections"
|
1703
|
+
],
|
1704
|
+
"additionalProperties": false,
|
1705
|
+
"$defs": {
|
1706
|
+
"conditionGroupSchema": {
|
1707
|
+
"type": "object",
|
1708
|
+
"description": "Group of conditions combined with logical operators",
|
1709
|
+
"properties": {
|
1710
|
+
"conditions": {
|
1711
|
+
"type": "array",
|
1712
|
+
"description": "Array of conditions or condition references in this group",
|
1713
|
+
"items": {
|
1714
|
+
"anyOf": [
|
1715
|
+
{
|
1716
|
+
"type": "object",
|
1717
|
+
"description": "Condition definition specifying a logical comparison",
|
1718
|
+
"properties": {
|
1719
|
+
"field": {
|
1720
|
+
"type": "object",
|
1721
|
+
"description": "The form field being evaluated in this condition",
|
1722
|
+
"properties": {
|
1723
|
+
"name": {
|
1724
|
+
"type": "string",
|
1725
|
+
"description": "Component name referenced by this condition",
|
1726
|
+
"title": "Name"
|
1727
|
+
},
|
1728
|
+
"type": {
|
1729
|
+
"type": "string",
|
1730
|
+
"description": "Data type of the field (e.g., string, number, date)",
|
1731
|
+
"title": "Type"
|
1732
|
+
},
|
1733
|
+
"display": {
|
1734
|
+
"type": "string",
|
1735
|
+
"description": "Human-readable name of the field for display purposes",
|
1736
|
+
"title": "Display"
|
1737
|
+
}
|
1738
|
+
},
|
1739
|
+
"required": [
|
1740
|
+
"name",
|
1741
|
+
"type",
|
1742
|
+
"display"
|
1743
|
+
],
|
1744
|
+
"additionalProperties": false,
|
1745
|
+
"title": "Field"
|
1746
|
+
},
|
1747
|
+
"operator": {
|
1748
|
+
"type": "string",
|
1749
|
+
"description": "Comparison operator (equals, greaterThan, contains, etc.)",
|
1750
|
+
"title": "Operator"
|
1751
|
+
},
|
1752
|
+
"value": {
|
1753
|
+
"description": "Value to compare the field against, either fixed or relative date",
|
1754
|
+
"anyOf": [
|
1755
|
+
{
|
1756
|
+
"type": "object",
|
1757
|
+
"description": "Value specification for a condition",
|
1758
|
+
"properties": {
|
1759
|
+
"type": {
|
1760
|
+
"type": "string",
|
1761
|
+
"description": "Data type of the value (e.g., string, number, date)",
|
1762
|
+
"title": "Type"
|
1763
|
+
},
|
1764
|
+
"value": {
|
1765
|
+
"type": "string",
|
1766
|
+
"description": "The actual value to compare against",
|
1767
|
+
"title": "Value"
|
1768
|
+
},
|
1769
|
+
"display": {
|
1770
|
+
"type": "string",
|
1771
|
+
"description": "Human-readable version of the value for display purposes",
|
1772
|
+
"title": "Display"
|
1773
|
+
}
|
1774
|
+
},
|
1775
|
+
"required": [
|
1776
|
+
"type",
|
1777
|
+
"value",
|
1778
|
+
"display"
|
1779
|
+
],
|
1780
|
+
"additionalProperties": false,
|
1781
|
+
"title": "Static Value"
|
1782
|
+
},
|
1783
|
+
{
|
1784
|
+
"type": "object",
|
1785
|
+
"description": "Relative date specification for date-based conditions",
|
1786
|
+
"properties": {
|
1787
|
+
"type": {
|
1788
|
+
"type": "string",
|
1789
|
+
"description": "Data type identifier, should be \"RelativeDate\"",
|
1790
|
+
"title": "Type"
|
1791
|
+
},
|
1792
|
+
"period": {
|
1793
|
+
"type": "string",
|
1794
|
+
"description": "Numeric amount of the time period, as a string",
|
1795
|
+
"title": "Period"
|
1796
|
+
},
|
1797
|
+
"unit": {
|
1798
|
+
"type": "string",
|
1799
|
+
"description": "Time unit (e.g., days, weeks, months, years)",
|
1800
|
+
"title": "Unit"
|
1801
|
+
},
|
1802
|
+
"direction": {
|
1803
|
+
"type": "string",
|
1804
|
+
"description": "Temporal direction, either \"past\" or \"future\"",
|
1805
|
+
"title": "Direction"
|
1806
|
+
}
|
1807
|
+
},
|
1808
|
+
"required": [
|
1809
|
+
"type",
|
1810
|
+
"period",
|
1811
|
+
"unit",
|
1812
|
+
"direction"
|
1813
|
+
],
|
1814
|
+
"additionalProperties": false,
|
1815
|
+
"title": "Relative Date Value"
|
1816
|
+
}
|
1817
|
+
],
|
1818
|
+
"title": "Value",
|
1819
|
+
"anyOfTitles": [
|
1820
|
+
"Static Value",
|
1821
|
+
"Relative Date Value"
|
1822
|
+
]
|
1823
|
+
},
|
1824
|
+
"coordinator": {
|
1825
|
+
"type": "string",
|
1826
|
+
"description": "Logical operator connecting this condition with others (AND, OR)",
|
1827
|
+
"title": "Coordinator"
|
1828
|
+
}
|
1829
|
+
},
|
1830
|
+
"required": [
|
1831
|
+
"operator"
|
1832
|
+
],
|
1833
|
+
"additionalProperties": false,
|
1834
|
+
"title": "Condition Definition"
|
1835
|
+
},
|
1836
|
+
{
|
1837
|
+
"type": "object",
|
1838
|
+
"description": "Reference to a named condition defined elsewhere",
|
1839
|
+
"properties": {
|
1840
|
+
"conditionName": {
|
1841
|
+
"type": "string",
|
1842
|
+
"description": "Name of the referenced condition",
|
1843
|
+
"title": "Condition Name"
|
1844
|
+
},
|
1845
|
+
"conditionDisplayName": {
|
1846
|
+
"type": "string",
|
1847
|
+
"description": "Human-readable name of the condition for display purposes",
|
1848
|
+
"title": "Condition Display Name"
|
1849
|
+
},
|
1850
|
+
"coordinator": {
|
1851
|
+
"type": "string",
|
1852
|
+
"description": "Logical operator connecting this condition with others (AND, OR)",
|
1853
|
+
"title": "Coordinator"
|
1854
|
+
}
|
1855
|
+
},
|
1856
|
+
"required": [
|
1857
|
+
"conditionName",
|
1858
|
+
"conditionDisplayName"
|
1859
|
+
],
|
1860
|
+
"additionalProperties": false,
|
1861
|
+
"title": "Condition Reference"
|
1862
|
+
},
|
1863
|
+
{
|
1864
|
+
"$ref": "#/$defs/conditionGroupSchema",
|
1865
|
+
"title": "Nested Condition Group",
|
1866
|
+
"description": "A nested group of conditions that allows building complex logical expressions with multiple levels."
|
1867
|
+
}
|
1868
|
+
],
|
1869
|
+
"title": "Conditions Item",
|
1870
|
+
"anyOfTitles": [
|
1871
|
+
"Condition Definition",
|
1872
|
+
"Condition Reference",
|
1873
|
+
"Nested Condition Group"
|
1874
|
+
]
|
1875
|
+
},
|
1876
|
+
"title": "Conditions"
|
1877
|
+
}
|
1878
|
+
},
|
1879
|
+
"additionalProperties": false,
|
1880
|
+
"title": "Condition Group Schema"
|
1881
|
+
}
|
1882
|
+
},
|
1883
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
1884
|
+
"title": "Form Definition Schema",
|
1885
|
+
"$id": "@defra/forms-model/schemas/form-definition-schema.json"
|
1886
|
+
}
|