@fieldia/core 0.1.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.
Files changed (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/package.json +40 -0
  4. package/schema/page.schema.json +2142 -0
  5. package/src/index.d.mts +15 -0
  6. package/src/index.d.ts +15 -0
  7. package/src/index.js +46 -0
  8. package/src/index.js.map +1 -0
  9. package/src/index.mjs +14 -0
  10. package/src/index.mjs.map +1 -0
  11. package/src/lib/expression/evaluateModifier.d.mts +55 -0
  12. package/src/lib/expression/evaluateModifier.d.ts +55 -0
  13. package/src/lib/expression/evaluateModifier.js +121 -0
  14. package/src/lib/expression/evaluateModifier.js.map +1 -0
  15. package/src/lib/expression/evaluateModifier.mjs +117 -0
  16. package/src/lib/expression/evaluateModifier.mjs.map +1 -0
  17. package/src/lib/expression/evaluator.d.mts +23 -0
  18. package/src/lib/expression/evaluator.d.ts +23 -0
  19. package/src/lib/expression/evaluator.js +122 -0
  20. package/src/lib/expression/evaluator.js.map +1 -0
  21. package/src/lib/expression/evaluator.mjs +118 -0
  22. package/src/lib/expression/evaluator.mjs.map +1 -0
  23. package/src/lib/expression/extractFieldNames.d.mts +41 -0
  24. package/src/lib/expression/extractFieldNames.d.ts +41 -0
  25. package/src/lib/expression/extractFieldNames.js +97 -0
  26. package/src/lib/expression/extractFieldNames.js.map +1 -0
  27. package/src/lib/expression/extractFieldNames.mjs +93 -0
  28. package/src/lib/expression/extractFieldNames.mjs.map +1 -0
  29. package/src/lib/expression/modifier.d.mts +14 -0
  30. package/src/lib/expression/modifier.d.ts +14 -0
  31. package/src/lib/expression/modifier.js +55 -0
  32. package/src/lib/expression/modifier.js.map +1 -0
  33. package/src/lib/expression/modifier.mjs +52 -0
  34. package/src/lib/expression/modifier.mjs.map +1 -0
  35. package/src/lib/expression/parser.d.mts +109 -0
  36. package/src/lib/expression/parser.d.ts +109 -0
  37. package/src/lib/expression/parser.js +317 -0
  38. package/src/lib/expression/parser.js.map +1 -0
  39. package/src/lib/expression/parser.mjs +313 -0
  40. package/src/lib/expression/parser.mjs.map +1 -0
  41. package/src/lib/expression/tokenizer.d.mts +31 -0
  42. package/src/lib/expression/tokenizer.d.ts +31 -0
  43. package/src/lib/expression/tokenizer.js +100 -0
  44. package/src/lib/expression/tokenizer.js.map +1 -0
  45. package/src/lib/expression/tokenizer.mjs +96 -0
  46. package/src/lib/expression/tokenizer.mjs.map +1 -0
  47. package/src/lib/format/field.d.mts +967 -0
  48. package/src/lib/format/field.d.ts +967 -0
  49. package/src/lib/format/field.js +147 -0
  50. package/src/lib/format/field.js.map +1 -0
  51. package/src/lib/format/field.mjs +144 -0
  52. package/src/lib/format/field.mjs.map +1 -0
  53. package/src/lib/format/json-schema.d.mts +6 -0
  54. package/src/lib/format/json-schema.d.ts +6 -0
  55. package/src/lib/format/json-schema.js +14 -0
  56. package/src/lib/format/json-schema.js.map +1 -0
  57. package/src/lib/format/json-schema.mjs +11 -0
  58. package/src/lib/format/json-schema.mjs.map +1 -0
  59. package/src/lib/format/json.d.mts +7 -0
  60. package/src/lib/format/json.d.ts +7 -0
  61. package/src/lib/format/json.js +7 -0
  62. package/src/lib/format/json.js.map +1 -0
  63. package/src/lib/format/json.mjs +4 -0
  64. package/src/lib/format/json.mjs.map +1 -0
  65. package/src/lib/format/layout.d.mts +521 -0
  66. package/src/lib/format/layout.d.ts +521 -0
  67. package/src/lib/format/layout.js +150 -0
  68. package/src/lib/format/layout.js.map +1 -0
  69. package/src/lib/format/layout.mjs +147 -0
  70. package/src/lib/format/layout.mjs.map +1 -0
  71. package/src/lib/format/layout.types.d.mts +22 -0
  72. package/src/lib/format/layout.types.d.ts +22 -0
  73. package/src/lib/format/layout.types.js +3 -0
  74. package/src/lib/format/layout.types.js.map +1 -0
  75. package/src/lib/format/layout.types.mjs +2 -0
  76. package/src/lib/format/layout.types.mjs.map +1 -0
  77. package/src/lib/format/page.d.mts +511 -0
  78. package/src/lib/format/page.d.ts +511 -0
  79. package/src/lib/format/page.js +27 -0
  80. package/src/lib/format/page.js.map +1 -0
  81. package/src/lib/format/page.mjs +24 -0
  82. package/src/lib/format/page.mjs.map +1 -0
  83. package/src/lib/format/validate.d.mts +23 -0
  84. package/src/lib/format/validate.d.ts +23 -0
  85. package/src/lib/format/validate.js +210 -0
  86. package/src/lib/format/validate.js.map +1 -0
  87. package/src/lib/format/validate.mjs +207 -0
  88. package/src/lib/format/validate.mjs.map +1 -0
  89. package/src/lib/record/check.d.mts +14 -0
  90. package/src/lib/record/check.d.ts +14 -0
  91. package/src/lib/record/check.js +167 -0
  92. package/src/lib/record/check.js.map +1 -0
  93. package/src/lib/record/check.mjs +163 -0
  94. package/src/lib/record/check.mjs.map +1 -0
  95. package/src/lib/record/data-source.d.mts +109 -0
  96. package/src/lib/record/data-source.d.ts +109 -0
  97. package/src/lib/record/data-source.js +3 -0
  98. package/src/lib/record/data-source.js.map +1 -0
  99. package/src/lib/record/data-source.mjs +2 -0
  100. package/src/lib/record/data-source.mjs.map +1 -0
  101. package/src/lib/record/form.d.mts +106 -0
  102. package/src/lib/record/form.d.ts +106 -0
  103. package/src/lib/record/form.js +545 -0
  104. package/src/lib/record/form.js.map +1 -0
  105. package/src/lib/record/form.mjs +542 -0
  106. package/src/lib/record/form.mjs.map +1 -0
  107. package/src/lib/record/memory-data-source.d.mts +28 -0
  108. package/src/lib/record/memory-data-source.d.ts +28 -0
  109. package/src/lib/record/memory-data-source.js +132 -0
  110. package/src/lib/record/memory-data-source.js.map +1 -0
  111. package/src/lib/record/memory-data-source.mjs +129 -0
  112. package/src/lib/record/memory-data-source.mjs.map +1 -0
  113. package/src/lib/record/messages.d.mts +35 -0
  114. package/src/lib/record/messages.d.ts +35 -0
  115. package/src/lib/record/messages.js +111 -0
  116. package/src/lib/record/messages.js.map +1 -0
  117. package/src/lib/record/messages.mjs +107 -0
  118. package/src/lib/record/messages.mjs.map +1 -0
  119. package/src/lib/record/scheduler.d.mts +12 -0
  120. package/src/lib/record/scheduler.d.ts +12 -0
  121. package/src/lib/record/scheduler.js +16 -0
  122. package/src/lib/record/scheduler.js.map +1 -0
  123. package/src/lib/record/scheduler.mjs +12 -0
  124. package/src/lib/record/scheduler.mjs.map +1 -0
  125. package/src/lib/record/values.d.mts +54 -0
  126. package/src/lib/record/values.d.ts +54 -0
  127. package/src/lib/record/values.js +78 -0
  128. package/src/lib/record/values.js.map +1 -0
  129. package/src/lib/record/values.mjs +71 -0
  130. package/src/lib/record/values.mjs.map +1 -0
@@ -0,0 +1,2142 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "fieldia": {
6
+ "type": "string",
7
+ "const": "0.1"
8
+ },
9
+ "id": {
10
+ "type": "string",
11
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
12
+ },
13
+ "title": {
14
+ "type": "string"
15
+ },
16
+ "description": {
17
+ "type": "string"
18
+ },
19
+ "data": {
20
+ "oneOf": [
21
+ {
22
+ "type": "object",
23
+ "properties": {
24
+ "kind": {
25
+ "type": "string",
26
+ "const": "record"
27
+ },
28
+ "model": {
29
+ "type": "string",
30
+ "minLength": 1
31
+ }
32
+ },
33
+ "required": [
34
+ "kind",
35
+ "model"
36
+ ],
37
+ "additionalProperties": false
38
+ },
39
+ {
40
+ "type": "object",
41
+ "properties": {
42
+ "kind": {
43
+ "type": "string",
44
+ "const": "responses"
45
+ }
46
+ },
47
+ "required": [
48
+ "kind"
49
+ ],
50
+ "additionalProperties": false
51
+ }
52
+ ]
53
+ },
54
+ "fields": {
55
+ "type": "object",
56
+ "propertyNames": {
57
+ "type": "string",
58
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
59
+ },
60
+ "additionalProperties": {
61
+ "$ref": "#/$defs/Field"
62
+ }
63
+ },
64
+ "layout": {
65
+ "$ref": "#/$defs/RootLayout"
66
+ }
67
+ },
68
+ "required": [
69
+ "fieldia",
70
+ "id",
71
+ "data",
72
+ "fields",
73
+ "layout"
74
+ ],
75
+ "additionalProperties": false,
76
+ "title": "Fieldia page",
77
+ "description": "A form, survey or record screen as data. This schema checks shape; validatePage() also checks that every reference resolves.",
78
+ "$defs": {
79
+ "Field": {
80
+ "oneOf": [
81
+ {
82
+ "type": "object",
83
+ "properties": {
84
+ "type": {
85
+ "type": "string",
86
+ "const": "char"
87
+ },
88
+ "label": {
89
+ "type": "string"
90
+ },
91
+ "help": {
92
+ "type": "string"
93
+ },
94
+ "required": {
95
+ "type": "boolean"
96
+ },
97
+ "readonly": {
98
+ "type": "boolean"
99
+ },
100
+ "default": {
101
+ "$ref": "#/$defs/JsonValue"
102
+ },
103
+ "size": {
104
+ "type": "integer",
105
+ "exclusiveMinimum": 0,
106
+ "maximum": 9007199254740991
107
+ },
108
+ "pattern": {
109
+ "type": "string"
110
+ }
111
+ },
112
+ "required": [
113
+ "type",
114
+ "label"
115
+ ],
116
+ "additionalProperties": false
117
+ },
118
+ {
119
+ "type": "object",
120
+ "properties": {
121
+ "type": {
122
+ "type": "string",
123
+ "const": "text"
124
+ },
125
+ "label": {
126
+ "type": "string"
127
+ },
128
+ "help": {
129
+ "type": "string"
130
+ },
131
+ "required": {
132
+ "type": "boolean"
133
+ },
134
+ "readonly": {
135
+ "type": "boolean"
136
+ },
137
+ "default": {
138
+ "$ref": "#/$defs/JsonValue"
139
+ },
140
+ "size": {
141
+ "type": "integer",
142
+ "exclusiveMinimum": 0,
143
+ "maximum": 9007199254740991
144
+ }
145
+ },
146
+ "required": [
147
+ "type",
148
+ "label"
149
+ ],
150
+ "additionalProperties": false
151
+ },
152
+ {
153
+ "type": "object",
154
+ "properties": {
155
+ "type": {
156
+ "type": "string",
157
+ "const": "html"
158
+ },
159
+ "label": {
160
+ "type": "string"
161
+ },
162
+ "help": {
163
+ "type": "string"
164
+ },
165
+ "required": {
166
+ "type": "boolean"
167
+ },
168
+ "readonly": {
169
+ "type": "boolean"
170
+ },
171
+ "default": {
172
+ "$ref": "#/$defs/JsonValue"
173
+ }
174
+ },
175
+ "required": [
176
+ "type",
177
+ "label"
178
+ ],
179
+ "additionalProperties": false
180
+ },
181
+ {
182
+ "type": "object",
183
+ "properties": {
184
+ "type": {
185
+ "type": "string",
186
+ "const": "integer"
187
+ },
188
+ "label": {
189
+ "type": "string"
190
+ },
191
+ "help": {
192
+ "type": "string"
193
+ },
194
+ "required": {
195
+ "type": "boolean"
196
+ },
197
+ "readonly": {
198
+ "type": "boolean"
199
+ },
200
+ "default": {
201
+ "$ref": "#/$defs/JsonValue"
202
+ },
203
+ "min": {
204
+ "type": "number"
205
+ },
206
+ "max": {
207
+ "type": "number"
208
+ }
209
+ },
210
+ "required": [
211
+ "type",
212
+ "label"
213
+ ],
214
+ "additionalProperties": false
215
+ },
216
+ {
217
+ "type": "object",
218
+ "properties": {
219
+ "type": {
220
+ "type": "string",
221
+ "const": "float"
222
+ },
223
+ "label": {
224
+ "type": "string"
225
+ },
226
+ "help": {
227
+ "type": "string"
228
+ },
229
+ "required": {
230
+ "type": "boolean"
231
+ },
232
+ "readonly": {
233
+ "type": "boolean"
234
+ },
235
+ "default": {
236
+ "$ref": "#/$defs/JsonValue"
237
+ },
238
+ "min": {
239
+ "type": "number"
240
+ },
241
+ "max": {
242
+ "type": "number"
243
+ },
244
+ "digits": {
245
+ "type": "array",
246
+ "prefixItems": [
247
+ {
248
+ "type": "integer",
249
+ "exclusiveMinimum": 0,
250
+ "maximum": 9007199254740991
251
+ },
252
+ {
253
+ "type": "integer",
254
+ "minimum": 0,
255
+ "maximum": 9007199254740991
256
+ }
257
+ ],
258
+ "items": false,
259
+ "minItems": 2,
260
+ "maxItems": 2
261
+ }
262
+ },
263
+ "required": [
264
+ "type",
265
+ "label"
266
+ ],
267
+ "additionalProperties": false
268
+ },
269
+ {
270
+ "type": "object",
271
+ "properties": {
272
+ "type": {
273
+ "type": "string",
274
+ "const": "monetary"
275
+ },
276
+ "label": {
277
+ "type": "string"
278
+ },
279
+ "help": {
280
+ "type": "string"
281
+ },
282
+ "required": {
283
+ "type": "boolean"
284
+ },
285
+ "readonly": {
286
+ "type": "boolean"
287
+ },
288
+ "default": {
289
+ "$ref": "#/$defs/JsonValue"
290
+ },
291
+ "currencyField": {
292
+ "type": "string",
293
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
294
+ },
295
+ "currency": {
296
+ "type": "string",
297
+ "pattern": "^[A-Z]{3}$"
298
+ },
299
+ "min": {
300
+ "type": "number"
301
+ },
302
+ "max": {
303
+ "type": "number"
304
+ },
305
+ "digits": {
306
+ "type": "array",
307
+ "prefixItems": [
308
+ {
309
+ "type": "integer",
310
+ "exclusiveMinimum": 0,
311
+ "maximum": 9007199254740991
312
+ },
313
+ {
314
+ "type": "integer",
315
+ "minimum": 0,
316
+ "maximum": 9007199254740991
317
+ }
318
+ ],
319
+ "items": false,
320
+ "minItems": 2,
321
+ "maxItems": 2
322
+ }
323
+ },
324
+ "required": [
325
+ "type",
326
+ "label"
327
+ ],
328
+ "additionalProperties": false
329
+ },
330
+ {
331
+ "type": "object",
332
+ "properties": {
333
+ "type": {
334
+ "type": "string",
335
+ "const": "boolean"
336
+ },
337
+ "label": {
338
+ "type": "string"
339
+ },
340
+ "help": {
341
+ "type": "string"
342
+ },
343
+ "required": {
344
+ "type": "boolean"
345
+ },
346
+ "readonly": {
347
+ "type": "boolean"
348
+ },
349
+ "default": {
350
+ "$ref": "#/$defs/JsonValue"
351
+ }
352
+ },
353
+ "required": [
354
+ "type",
355
+ "label"
356
+ ],
357
+ "additionalProperties": false
358
+ },
359
+ {
360
+ "type": "object",
361
+ "properties": {
362
+ "type": {
363
+ "type": "string",
364
+ "const": "date"
365
+ },
366
+ "label": {
367
+ "type": "string"
368
+ },
369
+ "help": {
370
+ "type": "string"
371
+ },
372
+ "required": {
373
+ "type": "boolean"
374
+ },
375
+ "readonly": {
376
+ "type": "boolean"
377
+ },
378
+ "default": {
379
+ "$ref": "#/$defs/JsonValue"
380
+ }
381
+ },
382
+ "required": [
383
+ "type",
384
+ "label"
385
+ ],
386
+ "additionalProperties": false
387
+ },
388
+ {
389
+ "type": "object",
390
+ "properties": {
391
+ "type": {
392
+ "type": "string",
393
+ "const": "datetime"
394
+ },
395
+ "label": {
396
+ "type": "string"
397
+ },
398
+ "help": {
399
+ "type": "string"
400
+ },
401
+ "required": {
402
+ "type": "boolean"
403
+ },
404
+ "readonly": {
405
+ "type": "boolean"
406
+ },
407
+ "default": {
408
+ "$ref": "#/$defs/JsonValue"
409
+ }
410
+ },
411
+ "required": [
412
+ "type",
413
+ "label"
414
+ ],
415
+ "additionalProperties": false
416
+ },
417
+ {
418
+ "type": "object",
419
+ "properties": {
420
+ "type": {
421
+ "type": "string",
422
+ "const": "selection"
423
+ },
424
+ "label": {
425
+ "type": "string"
426
+ },
427
+ "help": {
428
+ "type": "string"
429
+ },
430
+ "required": {
431
+ "type": "boolean"
432
+ },
433
+ "readonly": {
434
+ "type": "boolean"
435
+ },
436
+ "default": {
437
+ "$ref": "#/$defs/JsonValue"
438
+ },
439
+ "options": {
440
+ "minItems": 1,
441
+ "type": "array",
442
+ "items": {
443
+ "$ref": "#/$defs/Option"
444
+ }
445
+ },
446
+ "multiple": {
447
+ "type": "boolean"
448
+ }
449
+ },
450
+ "required": [
451
+ "type",
452
+ "label",
453
+ "options"
454
+ ],
455
+ "additionalProperties": false
456
+ },
457
+ {
458
+ "type": "object",
459
+ "properties": {
460
+ "type": {
461
+ "type": "string",
462
+ "const": "binary"
463
+ },
464
+ "label": {
465
+ "type": "string"
466
+ },
467
+ "help": {
468
+ "type": "string"
469
+ },
470
+ "required": {
471
+ "type": "boolean"
472
+ },
473
+ "readonly": {
474
+ "type": "boolean"
475
+ },
476
+ "default": {
477
+ "$ref": "#/$defs/JsonValue"
478
+ },
479
+ "accept": {
480
+ "type": "array",
481
+ "items": {
482
+ "type": "string"
483
+ }
484
+ },
485
+ "maxSize": {
486
+ "type": "integer",
487
+ "exclusiveMinimum": 0,
488
+ "maximum": 9007199254740991
489
+ }
490
+ },
491
+ "required": [
492
+ "type",
493
+ "label"
494
+ ],
495
+ "additionalProperties": false
496
+ },
497
+ {
498
+ "type": "object",
499
+ "properties": {
500
+ "type": {
501
+ "type": "string",
502
+ "const": "image"
503
+ },
504
+ "label": {
505
+ "type": "string"
506
+ },
507
+ "help": {
508
+ "type": "string"
509
+ },
510
+ "required": {
511
+ "type": "boolean"
512
+ },
513
+ "readonly": {
514
+ "type": "boolean"
515
+ },
516
+ "default": {
517
+ "$ref": "#/$defs/JsonValue"
518
+ },
519
+ "maxSize": {
520
+ "type": "integer",
521
+ "exclusiveMinimum": 0,
522
+ "maximum": 9007199254740991
523
+ }
524
+ },
525
+ "required": [
526
+ "type",
527
+ "label"
528
+ ],
529
+ "additionalProperties": false
530
+ },
531
+ {
532
+ "type": "object",
533
+ "properties": {
534
+ "type": {
535
+ "type": "string",
536
+ "const": "many2one"
537
+ },
538
+ "label": {
539
+ "type": "string"
540
+ },
541
+ "help": {
542
+ "type": "string"
543
+ },
544
+ "required": {
545
+ "type": "boolean"
546
+ },
547
+ "readonly": {
548
+ "type": "boolean"
549
+ },
550
+ "default": {
551
+ "$ref": "#/$defs/JsonValue"
552
+ },
553
+ "relation": {
554
+ "type": "string",
555
+ "minLength": 1
556
+ },
557
+ "filter": {
558
+ "type": "array",
559
+ "items": {
560
+ "$ref": "#/$defs/FilterCondition"
561
+ }
562
+ }
563
+ },
564
+ "required": [
565
+ "type",
566
+ "label",
567
+ "relation"
568
+ ],
569
+ "additionalProperties": false
570
+ },
571
+ {
572
+ "type": "object",
573
+ "properties": {
574
+ "type": {
575
+ "type": "string",
576
+ "const": "many2many"
577
+ },
578
+ "label": {
579
+ "type": "string"
580
+ },
581
+ "help": {
582
+ "type": "string"
583
+ },
584
+ "required": {
585
+ "type": "boolean"
586
+ },
587
+ "readonly": {
588
+ "type": "boolean"
589
+ },
590
+ "default": {
591
+ "$ref": "#/$defs/JsonValue"
592
+ },
593
+ "relation": {
594
+ "type": "string",
595
+ "minLength": 1
596
+ },
597
+ "filter": {
598
+ "type": "array",
599
+ "items": {
600
+ "$ref": "#/$defs/FilterCondition"
601
+ }
602
+ }
603
+ },
604
+ "required": [
605
+ "type",
606
+ "label",
607
+ "relation"
608
+ ],
609
+ "additionalProperties": false
610
+ },
611
+ {
612
+ "type": "object",
613
+ "properties": {
614
+ "type": {
615
+ "type": "string",
616
+ "const": "one2many"
617
+ },
618
+ "label": {
619
+ "type": "string"
620
+ },
621
+ "help": {
622
+ "type": "string"
623
+ },
624
+ "required": {
625
+ "type": "boolean"
626
+ },
627
+ "readonly": {
628
+ "type": "boolean"
629
+ },
630
+ "default": {
631
+ "$ref": "#/$defs/JsonValue"
632
+ },
633
+ "relation": {
634
+ "type": "string",
635
+ "minLength": 1
636
+ },
637
+ "fields": {
638
+ "type": "object",
639
+ "propertyNames": {
640
+ "type": "string",
641
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
642
+ },
643
+ "additionalProperties": {
644
+ "$ref": "#/$defs/LineField"
645
+ }
646
+ }
647
+ },
648
+ "required": [
649
+ "type",
650
+ "label",
651
+ "relation",
652
+ "fields"
653
+ ],
654
+ "additionalProperties": false
655
+ },
656
+ {
657
+ "type": "object",
658
+ "properties": {
659
+ "type": {
660
+ "type": "string",
661
+ "const": "reference"
662
+ },
663
+ "label": {
664
+ "type": "string"
665
+ },
666
+ "help": {
667
+ "type": "string"
668
+ },
669
+ "required": {
670
+ "type": "boolean"
671
+ },
672
+ "readonly": {
673
+ "type": "boolean"
674
+ },
675
+ "default": {
676
+ "$ref": "#/$defs/JsonValue"
677
+ },
678
+ "models": {
679
+ "minItems": 1,
680
+ "type": "array",
681
+ "items": {
682
+ "$ref": "#/$defs/Option"
683
+ }
684
+ }
685
+ },
686
+ "required": [
687
+ "type",
688
+ "label",
689
+ "models"
690
+ ],
691
+ "additionalProperties": false
692
+ },
693
+ {
694
+ "type": "object",
695
+ "properties": {
696
+ "type": {
697
+ "type": "string",
698
+ "const": "properties"
699
+ },
700
+ "label": {
701
+ "type": "string"
702
+ },
703
+ "help": {
704
+ "type": "string"
705
+ },
706
+ "required": {
707
+ "type": "boolean"
708
+ },
709
+ "readonly": {
710
+ "type": "boolean"
711
+ },
712
+ "default": {
713
+ "$ref": "#/$defs/JsonValue"
714
+ }
715
+ },
716
+ "required": [
717
+ "type",
718
+ "label"
719
+ ],
720
+ "additionalProperties": false
721
+ },
722
+ {
723
+ "type": "object",
724
+ "properties": {
725
+ "type": {
726
+ "type": "string",
727
+ "const": "json"
728
+ },
729
+ "label": {
730
+ "type": "string"
731
+ },
732
+ "help": {
733
+ "type": "string"
734
+ },
735
+ "required": {
736
+ "type": "boolean"
737
+ },
738
+ "readonly": {
739
+ "type": "boolean"
740
+ },
741
+ "default": {
742
+ "$ref": "#/$defs/JsonValue"
743
+ }
744
+ },
745
+ "required": [
746
+ "type",
747
+ "label"
748
+ ],
749
+ "additionalProperties": false
750
+ }
751
+ ]
752
+ },
753
+ "JsonValue": {
754
+ "$ref": "#/$defs/__schema0"
755
+ },
756
+ "__schema0": {
757
+ "anyOf": [
758
+ {
759
+ "type": "string"
760
+ },
761
+ {
762
+ "type": "number"
763
+ },
764
+ {
765
+ "type": "boolean"
766
+ },
767
+ {
768
+ "type": "null"
769
+ },
770
+ {
771
+ "type": "array",
772
+ "items": {
773
+ "$ref": "#/$defs/__schema0"
774
+ }
775
+ },
776
+ {
777
+ "type": "object",
778
+ "propertyNames": {
779
+ "type": "string"
780
+ },
781
+ "additionalProperties": {
782
+ "$ref": "#/$defs/__schema0"
783
+ }
784
+ }
785
+ ]
786
+ },
787
+ "Option": {
788
+ "type": "object",
789
+ "properties": {
790
+ "value": {
791
+ "type": [
792
+ "string",
793
+ "number"
794
+ ]
795
+ },
796
+ "label": {
797
+ "type": "string"
798
+ }
799
+ },
800
+ "required": [
801
+ "value",
802
+ "label"
803
+ ],
804
+ "additionalProperties": false
805
+ },
806
+ "FilterCondition": {
807
+ "type": "object",
808
+ "properties": {
809
+ "field": {
810
+ "type": "string",
811
+ "minLength": 1
812
+ },
813
+ "op": {
814
+ "type": "string",
815
+ "enum": [
816
+ "=",
817
+ "!=",
818
+ "<",
819
+ ">",
820
+ "<=",
821
+ ">=",
822
+ "in",
823
+ "not in",
824
+ "like",
825
+ "ilike"
826
+ ]
827
+ },
828
+ "value": {
829
+ "$ref": "#/$defs/JsonValue"
830
+ },
831
+ "valueFrom": {
832
+ "type": "string",
833
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
834
+ }
835
+ },
836
+ "required": [
837
+ "field",
838
+ "op"
839
+ ],
840
+ "additionalProperties": false
841
+ },
842
+ "LineField": {
843
+ "oneOf": [
844
+ {
845
+ "type": "object",
846
+ "properties": {
847
+ "type": {
848
+ "type": "string",
849
+ "const": "char"
850
+ },
851
+ "label": {
852
+ "type": "string"
853
+ },
854
+ "help": {
855
+ "type": "string"
856
+ },
857
+ "required": {
858
+ "type": "boolean"
859
+ },
860
+ "readonly": {
861
+ "type": "boolean"
862
+ },
863
+ "default": {
864
+ "$ref": "#/$defs/JsonValue"
865
+ },
866
+ "size": {
867
+ "type": "integer",
868
+ "exclusiveMinimum": 0,
869
+ "maximum": 9007199254740991
870
+ },
871
+ "pattern": {
872
+ "type": "string"
873
+ }
874
+ },
875
+ "required": [
876
+ "type",
877
+ "label"
878
+ ],
879
+ "additionalProperties": false
880
+ },
881
+ {
882
+ "type": "object",
883
+ "properties": {
884
+ "type": {
885
+ "type": "string",
886
+ "const": "text"
887
+ },
888
+ "label": {
889
+ "type": "string"
890
+ },
891
+ "help": {
892
+ "type": "string"
893
+ },
894
+ "required": {
895
+ "type": "boolean"
896
+ },
897
+ "readonly": {
898
+ "type": "boolean"
899
+ },
900
+ "default": {
901
+ "$ref": "#/$defs/JsonValue"
902
+ },
903
+ "size": {
904
+ "type": "integer",
905
+ "exclusiveMinimum": 0,
906
+ "maximum": 9007199254740991
907
+ }
908
+ },
909
+ "required": [
910
+ "type",
911
+ "label"
912
+ ],
913
+ "additionalProperties": false
914
+ },
915
+ {
916
+ "type": "object",
917
+ "properties": {
918
+ "type": {
919
+ "type": "string",
920
+ "const": "html"
921
+ },
922
+ "label": {
923
+ "type": "string"
924
+ },
925
+ "help": {
926
+ "type": "string"
927
+ },
928
+ "required": {
929
+ "type": "boolean"
930
+ },
931
+ "readonly": {
932
+ "type": "boolean"
933
+ },
934
+ "default": {
935
+ "$ref": "#/$defs/JsonValue"
936
+ }
937
+ },
938
+ "required": [
939
+ "type",
940
+ "label"
941
+ ],
942
+ "additionalProperties": false
943
+ },
944
+ {
945
+ "type": "object",
946
+ "properties": {
947
+ "type": {
948
+ "type": "string",
949
+ "const": "integer"
950
+ },
951
+ "label": {
952
+ "type": "string"
953
+ },
954
+ "help": {
955
+ "type": "string"
956
+ },
957
+ "required": {
958
+ "type": "boolean"
959
+ },
960
+ "readonly": {
961
+ "type": "boolean"
962
+ },
963
+ "default": {
964
+ "$ref": "#/$defs/JsonValue"
965
+ },
966
+ "min": {
967
+ "type": "number"
968
+ },
969
+ "max": {
970
+ "type": "number"
971
+ }
972
+ },
973
+ "required": [
974
+ "type",
975
+ "label"
976
+ ],
977
+ "additionalProperties": false
978
+ },
979
+ {
980
+ "type": "object",
981
+ "properties": {
982
+ "type": {
983
+ "type": "string",
984
+ "const": "float"
985
+ },
986
+ "label": {
987
+ "type": "string"
988
+ },
989
+ "help": {
990
+ "type": "string"
991
+ },
992
+ "required": {
993
+ "type": "boolean"
994
+ },
995
+ "readonly": {
996
+ "type": "boolean"
997
+ },
998
+ "default": {
999
+ "$ref": "#/$defs/JsonValue"
1000
+ },
1001
+ "min": {
1002
+ "type": "number"
1003
+ },
1004
+ "max": {
1005
+ "type": "number"
1006
+ },
1007
+ "digits": {
1008
+ "type": "array",
1009
+ "prefixItems": [
1010
+ {
1011
+ "type": "integer",
1012
+ "exclusiveMinimum": 0,
1013
+ "maximum": 9007199254740991
1014
+ },
1015
+ {
1016
+ "type": "integer",
1017
+ "minimum": 0,
1018
+ "maximum": 9007199254740991
1019
+ }
1020
+ ],
1021
+ "items": false,
1022
+ "minItems": 2,
1023
+ "maxItems": 2
1024
+ }
1025
+ },
1026
+ "required": [
1027
+ "type",
1028
+ "label"
1029
+ ],
1030
+ "additionalProperties": false
1031
+ },
1032
+ {
1033
+ "type": "object",
1034
+ "properties": {
1035
+ "type": {
1036
+ "type": "string",
1037
+ "const": "monetary"
1038
+ },
1039
+ "label": {
1040
+ "type": "string"
1041
+ },
1042
+ "help": {
1043
+ "type": "string"
1044
+ },
1045
+ "required": {
1046
+ "type": "boolean"
1047
+ },
1048
+ "readonly": {
1049
+ "type": "boolean"
1050
+ },
1051
+ "default": {
1052
+ "$ref": "#/$defs/JsonValue"
1053
+ },
1054
+ "currencyField": {
1055
+ "type": "string",
1056
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1057
+ },
1058
+ "currency": {
1059
+ "type": "string",
1060
+ "pattern": "^[A-Z]{3}$"
1061
+ },
1062
+ "min": {
1063
+ "type": "number"
1064
+ },
1065
+ "max": {
1066
+ "type": "number"
1067
+ },
1068
+ "digits": {
1069
+ "type": "array",
1070
+ "prefixItems": [
1071
+ {
1072
+ "type": "integer",
1073
+ "exclusiveMinimum": 0,
1074
+ "maximum": 9007199254740991
1075
+ },
1076
+ {
1077
+ "type": "integer",
1078
+ "minimum": 0,
1079
+ "maximum": 9007199254740991
1080
+ }
1081
+ ],
1082
+ "items": false,
1083
+ "minItems": 2,
1084
+ "maxItems": 2
1085
+ }
1086
+ },
1087
+ "required": [
1088
+ "type",
1089
+ "label"
1090
+ ],
1091
+ "additionalProperties": false
1092
+ },
1093
+ {
1094
+ "type": "object",
1095
+ "properties": {
1096
+ "type": {
1097
+ "type": "string",
1098
+ "const": "boolean"
1099
+ },
1100
+ "label": {
1101
+ "type": "string"
1102
+ },
1103
+ "help": {
1104
+ "type": "string"
1105
+ },
1106
+ "required": {
1107
+ "type": "boolean"
1108
+ },
1109
+ "readonly": {
1110
+ "type": "boolean"
1111
+ },
1112
+ "default": {
1113
+ "$ref": "#/$defs/JsonValue"
1114
+ }
1115
+ },
1116
+ "required": [
1117
+ "type",
1118
+ "label"
1119
+ ],
1120
+ "additionalProperties": false
1121
+ },
1122
+ {
1123
+ "type": "object",
1124
+ "properties": {
1125
+ "type": {
1126
+ "type": "string",
1127
+ "const": "date"
1128
+ },
1129
+ "label": {
1130
+ "type": "string"
1131
+ },
1132
+ "help": {
1133
+ "type": "string"
1134
+ },
1135
+ "required": {
1136
+ "type": "boolean"
1137
+ },
1138
+ "readonly": {
1139
+ "type": "boolean"
1140
+ },
1141
+ "default": {
1142
+ "$ref": "#/$defs/JsonValue"
1143
+ }
1144
+ },
1145
+ "required": [
1146
+ "type",
1147
+ "label"
1148
+ ],
1149
+ "additionalProperties": false
1150
+ },
1151
+ {
1152
+ "type": "object",
1153
+ "properties": {
1154
+ "type": {
1155
+ "type": "string",
1156
+ "const": "datetime"
1157
+ },
1158
+ "label": {
1159
+ "type": "string"
1160
+ },
1161
+ "help": {
1162
+ "type": "string"
1163
+ },
1164
+ "required": {
1165
+ "type": "boolean"
1166
+ },
1167
+ "readonly": {
1168
+ "type": "boolean"
1169
+ },
1170
+ "default": {
1171
+ "$ref": "#/$defs/JsonValue"
1172
+ }
1173
+ },
1174
+ "required": [
1175
+ "type",
1176
+ "label"
1177
+ ],
1178
+ "additionalProperties": false
1179
+ },
1180
+ {
1181
+ "type": "object",
1182
+ "properties": {
1183
+ "type": {
1184
+ "type": "string",
1185
+ "const": "selection"
1186
+ },
1187
+ "label": {
1188
+ "type": "string"
1189
+ },
1190
+ "help": {
1191
+ "type": "string"
1192
+ },
1193
+ "required": {
1194
+ "type": "boolean"
1195
+ },
1196
+ "readonly": {
1197
+ "type": "boolean"
1198
+ },
1199
+ "default": {
1200
+ "$ref": "#/$defs/JsonValue"
1201
+ },
1202
+ "options": {
1203
+ "minItems": 1,
1204
+ "type": "array",
1205
+ "items": {
1206
+ "$ref": "#/$defs/Option"
1207
+ }
1208
+ },
1209
+ "multiple": {
1210
+ "type": "boolean"
1211
+ }
1212
+ },
1213
+ "required": [
1214
+ "type",
1215
+ "label",
1216
+ "options"
1217
+ ],
1218
+ "additionalProperties": false
1219
+ },
1220
+ {
1221
+ "type": "object",
1222
+ "properties": {
1223
+ "type": {
1224
+ "type": "string",
1225
+ "const": "binary"
1226
+ },
1227
+ "label": {
1228
+ "type": "string"
1229
+ },
1230
+ "help": {
1231
+ "type": "string"
1232
+ },
1233
+ "required": {
1234
+ "type": "boolean"
1235
+ },
1236
+ "readonly": {
1237
+ "type": "boolean"
1238
+ },
1239
+ "default": {
1240
+ "$ref": "#/$defs/JsonValue"
1241
+ },
1242
+ "accept": {
1243
+ "type": "array",
1244
+ "items": {
1245
+ "type": "string"
1246
+ }
1247
+ },
1248
+ "maxSize": {
1249
+ "type": "integer",
1250
+ "exclusiveMinimum": 0,
1251
+ "maximum": 9007199254740991
1252
+ }
1253
+ },
1254
+ "required": [
1255
+ "type",
1256
+ "label"
1257
+ ],
1258
+ "additionalProperties": false
1259
+ },
1260
+ {
1261
+ "type": "object",
1262
+ "properties": {
1263
+ "type": {
1264
+ "type": "string",
1265
+ "const": "image"
1266
+ },
1267
+ "label": {
1268
+ "type": "string"
1269
+ },
1270
+ "help": {
1271
+ "type": "string"
1272
+ },
1273
+ "required": {
1274
+ "type": "boolean"
1275
+ },
1276
+ "readonly": {
1277
+ "type": "boolean"
1278
+ },
1279
+ "default": {
1280
+ "$ref": "#/$defs/JsonValue"
1281
+ },
1282
+ "maxSize": {
1283
+ "type": "integer",
1284
+ "exclusiveMinimum": 0,
1285
+ "maximum": 9007199254740991
1286
+ }
1287
+ },
1288
+ "required": [
1289
+ "type",
1290
+ "label"
1291
+ ],
1292
+ "additionalProperties": false
1293
+ },
1294
+ {
1295
+ "type": "object",
1296
+ "properties": {
1297
+ "type": {
1298
+ "type": "string",
1299
+ "const": "many2one"
1300
+ },
1301
+ "label": {
1302
+ "type": "string"
1303
+ },
1304
+ "help": {
1305
+ "type": "string"
1306
+ },
1307
+ "required": {
1308
+ "type": "boolean"
1309
+ },
1310
+ "readonly": {
1311
+ "type": "boolean"
1312
+ },
1313
+ "default": {
1314
+ "$ref": "#/$defs/JsonValue"
1315
+ },
1316
+ "relation": {
1317
+ "type": "string",
1318
+ "minLength": 1
1319
+ },
1320
+ "filter": {
1321
+ "type": "array",
1322
+ "items": {
1323
+ "$ref": "#/$defs/FilterCondition"
1324
+ }
1325
+ }
1326
+ },
1327
+ "required": [
1328
+ "type",
1329
+ "label",
1330
+ "relation"
1331
+ ],
1332
+ "additionalProperties": false
1333
+ },
1334
+ {
1335
+ "type": "object",
1336
+ "properties": {
1337
+ "type": {
1338
+ "type": "string",
1339
+ "const": "many2many"
1340
+ },
1341
+ "label": {
1342
+ "type": "string"
1343
+ },
1344
+ "help": {
1345
+ "type": "string"
1346
+ },
1347
+ "required": {
1348
+ "type": "boolean"
1349
+ },
1350
+ "readonly": {
1351
+ "type": "boolean"
1352
+ },
1353
+ "default": {
1354
+ "$ref": "#/$defs/JsonValue"
1355
+ },
1356
+ "relation": {
1357
+ "type": "string",
1358
+ "minLength": 1
1359
+ },
1360
+ "filter": {
1361
+ "type": "array",
1362
+ "items": {
1363
+ "$ref": "#/$defs/FilterCondition"
1364
+ }
1365
+ }
1366
+ },
1367
+ "required": [
1368
+ "type",
1369
+ "label",
1370
+ "relation"
1371
+ ],
1372
+ "additionalProperties": false
1373
+ },
1374
+ {
1375
+ "type": "object",
1376
+ "properties": {
1377
+ "type": {
1378
+ "type": "string",
1379
+ "const": "reference"
1380
+ },
1381
+ "label": {
1382
+ "type": "string"
1383
+ },
1384
+ "help": {
1385
+ "type": "string"
1386
+ },
1387
+ "required": {
1388
+ "type": "boolean"
1389
+ },
1390
+ "readonly": {
1391
+ "type": "boolean"
1392
+ },
1393
+ "default": {
1394
+ "$ref": "#/$defs/JsonValue"
1395
+ },
1396
+ "models": {
1397
+ "minItems": 1,
1398
+ "type": "array",
1399
+ "items": {
1400
+ "$ref": "#/$defs/Option"
1401
+ }
1402
+ }
1403
+ },
1404
+ "required": [
1405
+ "type",
1406
+ "label",
1407
+ "models"
1408
+ ],
1409
+ "additionalProperties": false
1410
+ },
1411
+ {
1412
+ "type": "object",
1413
+ "properties": {
1414
+ "type": {
1415
+ "type": "string",
1416
+ "const": "properties"
1417
+ },
1418
+ "label": {
1419
+ "type": "string"
1420
+ },
1421
+ "help": {
1422
+ "type": "string"
1423
+ },
1424
+ "required": {
1425
+ "type": "boolean"
1426
+ },
1427
+ "readonly": {
1428
+ "type": "boolean"
1429
+ },
1430
+ "default": {
1431
+ "$ref": "#/$defs/JsonValue"
1432
+ }
1433
+ },
1434
+ "required": [
1435
+ "type",
1436
+ "label"
1437
+ ],
1438
+ "additionalProperties": false
1439
+ },
1440
+ {
1441
+ "type": "object",
1442
+ "properties": {
1443
+ "type": {
1444
+ "type": "string",
1445
+ "const": "json"
1446
+ },
1447
+ "label": {
1448
+ "type": "string"
1449
+ },
1450
+ "help": {
1451
+ "type": "string"
1452
+ },
1453
+ "required": {
1454
+ "type": "boolean"
1455
+ },
1456
+ "readonly": {
1457
+ "type": "boolean"
1458
+ },
1459
+ "default": {
1460
+ "$ref": "#/$defs/JsonValue"
1461
+ }
1462
+ },
1463
+ "required": [
1464
+ "type",
1465
+ "label"
1466
+ ],
1467
+ "additionalProperties": false
1468
+ }
1469
+ ]
1470
+ },
1471
+ "RootLayout": {
1472
+ "oneOf": [
1473
+ {
1474
+ "$ref": "#/$defs/SheetNode"
1475
+ },
1476
+ {
1477
+ "$ref": "#/$defs/SectionsNode"
1478
+ },
1479
+ {
1480
+ "$ref": "#/$defs/TabsNode"
1481
+ },
1482
+ {
1483
+ "$ref": "#/$defs/WizardNode"
1484
+ }
1485
+ ]
1486
+ },
1487
+ "SheetNode": {
1488
+ "type": "object",
1489
+ "properties": {
1490
+ "type": {
1491
+ "type": "string",
1492
+ "const": "sheet"
1493
+ },
1494
+ "id": {
1495
+ "type": "string",
1496
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1497
+ },
1498
+ "title": {
1499
+ "type": "object",
1500
+ "properties": {
1501
+ "field": {
1502
+ "type": "string",
1503
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1504
+ },
1505
+ "subtitleField": {
1506
+ "type": "string",
1507
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1508
+ },
1509
+ "avatarField": {
1510
+ "type": "string",
1511
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1512
+ },
1513
+ "placeholder": {
1514
+ "type": "string"
1515
+ }
1516
+ },
1517
+ "required": [
1518
+ "field"
1519
+ ],
1520
+ "additionalProperties": false
1521
+ },
1522
+ "statusbar": {
1523
+ "type": "object",
1524
+ "properties": {
1525
+ "field": {
1526
+ "type": "string",
1527
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1528
+ },
1529
+ "visibleStates": {
1530
+ "type": "array",
1531
+ "items": {
1532
+ "type": [
1533
+ "string",
1534
+ "number"
1535
+ ]
1536
+ }
1537
+ },
1538
+ "clickable": {
1539
+ "type": "boolean"
1540
+ }
1541
+ },
1542
+ "required": [
1543
+ "field"
1544
+ ],
1545
+ "additionalProperties": false
1546
+ },
1547
+ "buttons": {
1548
+ "type": "array",
1549
+ "items": {
1550
+ "type": "object",
1551
+ "properties": {
1552
+ "type": {
1553
+ "type": "string",
1554
+ "const": "button"
1555
+ },
1556
+ "id": {
1557
+ "type": "string",
1558
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1559
+ },
1560
+ "label": {
1561
+ "type": "string"
1562
+ },
1563
+ "action": {
1564
+ "type": "string",
1565
+ "minLength": 1
1566
+ },
1567
+ "params": {
1568
+ "type": "object",
1569
+ "propertyNames": {
1570
+ "type": "string"
1571
+ },
1572
+ "additionalProperties": {
1573
+ "$ref": "#/$defs/JsonValue"
1574
+ }
1575
+ },
1576
+ "style": {
1577
+ "type": "string",
1578
+ "enum": [
1579
+ "primary",
1580
+ "secondary",
1581
+ "danger",
1582
+ "link"
1583
+ ]
1584
+ },
1585
+ "confirm": {
1586
+ "type": "string"
1587
+ },
1588
+ "icon": {
1589
+ "type": "string"
1590
+ },
1591
+ "invisible": {
1592
+ "$ref": "#/$defs/Modifier"
1593
+ }
1594
+ },
1595
+ "required": [
1596
+ "type",
1597
+ "id",
1598
+ "label",
1599
+ "action"
1600
+ ],
1601
+ "additionalProperties": false
1602
+ }
1603
+ },
1604
+ "statButtons": {
1605
+ "type": "array",
1606
+ "items": {
1607
+ "type": "object",
1608
+ "properties": {
1609
+ "id": {
1610
+ "type": "string",
1611
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1612
+ },
1613
+ "label": {
1614
+ "type": "string"
1615
+ },
1616
+ "action": {
1617
+ "type": "string",
1618
+ "minLength": 1
1619
+ },
1620
+ "field": {
1621
+ "type": "string",
1622
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1623
+ },
1624
+ "icon": {
1625
+ "type": "string"
1626
+ },
1627
+ "invisible": {
1628
+ "$ref": "#/$defs/Modifier"
1629
+ }
1630
+ },
1631
+ "required": [
1632
+ "id",
1633
+ "label",
1634
+ "action"
1635
+ ],
1636
+ "additionalProperties": false
1637
+ }
1638
+ },
1639
+ "ribbon": {
1640
+ "type": "object",
1641
+ "properties": {
1642
+ "id": {
1643
+ "type": "string",
1644
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1645
+ },
1646
+ "label": {
1647
+ "type": "string"
1648
+ },
1649
+ "tone": {
1650
+ "type": "string",
1651
+ "enum": [
1652
+ "info",
1653
+ "success",
1654
+ "warning",
1655
+ "danger",
1656
+ "muted"
1657
+ ]
1658
+ },
1659
+ "invisible": {
1660
+ "$ref": "#/$defs/Modifier"
1661
+ }
1662
+ },
1663
+ "required": [
1664
+ "id",
1665
+ "label"
1666
+ ],
1667
+ "additionalProperties": false
1668
+ },
1669
+ "alerts": {
1670
+ "type": "array",
1671
+ "items": {
1672
+ "type": "object",
1673
+ "properties": {
1674
+ "id": {
1675
+ "type": "string",
1676
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1677
+ },
1678
+ "message": {
1679
+ "type": "string"
1680
+ },
1681
+ "tone": {
1682
+ "type": "string",
1683
+ "enum": [
1684
+ "info",
1685
+ "success",
1686
+ "warning",
1687
+ "danger",
1688
+ "muted"
1689
+ ]
1690
+ },
1691
+ "invisible": {
1692
+ "$ref": "#/$defs/Modifier"
1693
+ }
1694
+ },
1695
+ "required": [
1696
+ "id",
1697
+ "message"
1698
+ ],
1699
+ "additionalProperties": false
1700
+ }
1701
+ },
1702
+ "children": {
1703
+ "type": "array",
1704
+ "items": {
1705
+ "$ref": "#/$defs/LayoutNode"
1706
+ }
1707
+ },
1708
+ "sidePanel": {
1709
+ "type": "object",
1710
+ "properties": {
1711
+ "type": {
1712
+ "type": "string",
1713
+ "const": "slot"
1714
+ },
1715
+ "id": {
1716
+ "type": "string",
1717
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1718
+ },
1719
+ "name": {
1720
+ "type": "string",
1721
+ "minLength": 1
1722
+ },
1723
+ "invisible": {
1724
+ "$ref": "#/$defs/Modifier"
1725
+ }
1726
+ },
1727
+ "required": [
1728
+ "type",
1729
+ "id",
1730
+ "name"
1731
+ ],
1732
+ "additionalProperties": false
1733
+ }
1734
+ },
1735
+ "required": [
1736
+ "type",
1737
+ "id",
1738
+ "children"
1739
+ ],
1740
+ "additionalProperties": false
1741
+ },
1742
+ "Modifier": {
1743
+ "anyOf": [
1744
+ {
1745
+ "type": "boolean"
1746
+ },
1747
+ {
1748
+ "type": "string",
1749
+ "minLength": 1
1750
+ }
1751
+ ]
1752
+ },
1753
+ "LayoutNode": {
1754
+ "oneOf": [
1755
+ {
1756
+ "type": "object",
1757
+ "properties": {
1758
+ "type": {
1759
+ "type": "string",
1760
+ "const": "field"
1761
+ },
1762
+ "id": {
1763
+ "type": "string",
1764
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1765
+ },
1766
+ "field": {
1767
+ "type": "string",
1768
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1769
+ },
1770
+ "label": {
1771
+ "type": "string"
1772
+ },
1773
+ "widget": {
1774
+ "type": "string",
1775
+ "minLength": 1
1776
+ },
1777
+ "placeholder": {
1778
+ "type": "string"
1779
+ },
1780
+ "help": {
1781
+ "type": "string"
1782
+ },
1783
+ "colspan": {
1784
+ "type": "integer",
1785
+ "minimum": 1,
1786
+ "maximum": 4
1787
+ },
1788
+ "columns": {
1789
+ "minItems": 1,
1790
+ "type": "array",
1791
+ "items": {
1792
+ "type": "string",
1793
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$"
1794
+ }
1795
+ },
1796
+ "invisible": {
1797
+ "$ref": "#/$defs/Modifier"
1798
+ },
1799
+ "readonly": {
1800
+ "$ref": "#/$defs/Modifier"
1801
+ },
1802
+ "required": {
1803
+ "$ref": "#/$defs/Modifier"
1804
+ }
1805
+ },
1806
+ "required": [
1807
+ "type",
1808
+ "id",
1809
+ "field"
1810
+ ],
1811
+ "additionalProperties": false
1812
+ },
1813
+ {
1814
+ "type": "object",
1815
+ "properties": {
1816
+ "type": {
1817
+ "type": "string",
1818
+ "const": "button"
1819
+ },
1820
+ "id": {
1821
+ "type": "string",
1822
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1823
+ },
1824
+ "label": {
1825
+ "type": "string"
1826
+ },
1827
+ "action": {
1828
+ "type": "string",
1829
+ "minLength": 1
1830
+ },
1831
+ "params": {
1832
+ "type": "object",
1833
+ "propertyNames": {
1834
+ "type": "string"
1835
+ },
1836
+ "additionalProperties": {
1837
+ "$ref": "#/$defs/JsonValue"
1838
+ }
1839
+ },
1840
+ "style": {
1841
+ "type": "string",
1842
+ "enum": [
1843
+ "primary",
1844
+ "secondary",
1845
+ "danger",
1846
+ "link"
1847
+ ]
1848
+ },
1849
+ "confirm": {
1850
+ "type": "string"
1851
+ },
1852
+ "icon": {
1853
+ "type": "string"
1854
+ },
1855
+ "invisible": {
1856
+ "$ref": "#/$defs/Modifier"
1857
+ }
1858
+ },
1859
+ "required": [
1860
+ "type",
1861
+ "id",
1862
+ "label",
1863
+ "action"
1864
+ ],
1865
+ "additionalProperties": false
1866
+ },
1867
+ {
1868
+ "type": "object",
1869
+ "properties": {
1870
+ "type": {
1871
+ "type": "string",
1872
+ "const": "text"
1873
+ },
1874
+ "id": {
1875
+ "type": "string",
1876
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1877
+ },
1878
+ "text": {
1879
+ "type": "string"
1880
+ },
1881
+ "style": {
1882
+ "type": "string",
1883
+ "enum": [
1884
+ "heading",
1885
+ "paragraph",
1886
+ "note"
1887
+ ]
1888
+ },
1889
+ "invisible": {
1890
+ "$ref": "#/$defs/Modifier"
1891
+ }
1892
+ },
1893
+ "required": [
1894
+ "type",
1895
+ "id",
1896
+ "text"
1897
+ ],
1898
+ "additionalProperties": false
1899
+ },
1900
+ {
1901
+ "type": "object",
1902
+ "properties": {
1903
+ "type": {
1904
+ "type": "string",
1905
+ "const": "slot"
1906
+ },
1907
+ "id": {
1908
+ "type": "string",
1909
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1910
+ },
1911
+ "name": {
1912
+ "type": "string",
1913
+ "minLength": 1
1914
+ },
1915
+ "invisible": {
1916
+ "$ref": "#/$defs/Modifier"
1917
+ }
1918
+ },
1919
+ "required": [
1920
+ "type",
1921
+ "id",
1922
+ "name"
1923
+ ],
1924
+ "additionalProperties": false
1925
+ },
1926
+ {
1927
+ "$ref": "#/$defs/SectionNode"
1928
+ },
1929
+ {
1930
+ "$ref": "#/$defs/TabsNode"
1931
+ }
1932
+ ]
1933
+ },
1934
+ "SectionNode": {
1935
+ "type": "object",
1936
+ "properties": {
1937
+ "type": {
1938
+ "type": "string",
1939
+ "const": "section"
1940
+ },
1941
+ "id": {
1942
+ "type": "string",
1943
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
1944
+ },
1945
+ "title": {
1946
+ "type": "string"
1947
+ },
1948
+ "description": {
1949
+ "type": "string"
1950
+ },
1951
+ "columns": {
1952
+ "anyOf": [
1953
+ {
1954
+ "type": "number",
1955
+ "const": 1
1956
+ },
1957
+ {
1958
+ "type": "number",
1959
+ "const": 2
1960
+ },
1961
+ {
1962
+ "type": "number",
1963
+ "const": 3
1964
+ },
1965
+ {
1966
+ "type": "number",
1967
+ "const": 4
1968
+ }
1969
+ ]
1970
+ },
1971
+ "collapsible": {
1972
+ "type": "boolean"
1973
+ },
1974
+ "invisible": {
1975
+ "$ref": "#/$defs/Modifier"
1976
+ },
1977
+ "children": {
1978
+ "type": "array",
1979
+ "items": {
1980
+ "$ref": "#/$defs/LayoutNode"
1981
+ }
1982
+ }
1983
+ },
1984
+ "required": [
1985
+ "type",
1986
+ "id",
1987
+ "children"
1988
+ ],
1989
+ "additionalProperties": false
1990
+ },
1991
+ "TabsNode": {
1992
+ "type": "object",
1993
+ "properties": {
1994
+ "type": {
1995
+ "type": "string",
1996
+ "const": "tabs"
1997
+ },
1998
+ "id": {
1999
+ "type": "string",
2000
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
2001
+ },
2002
+ "invisible": {
2003
+ "$ref": "#/$defs/Modifier"
2004
+ },
2005
+ "children": {
2006
+ "minItems": 1,
2007
+ "type": "array",
2008
+ "items": {
2009
+ "$ref": "#/$defs/TabNode"
2010
+ }
2011
+ }
2012
+ },
2013
+ "required": [
2014
+ "type",
2015
+ "id",
2016
+ "children"
2017
+ ],
2018
+ "additionalProperties": false
2019
+ },
2020
+ "TabNode": {
2021
+ "type": "object",
2022
+ "properties": {
2023
+ "type": {
2024
+ "type": "string",
2025
+ "const": "tab"
2026
+ },
2027
+ "id": {
2028
+ "type": "string",
2029
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
2030
+ },
2031
+ "label": {
2032
+ "type": "string"
2033
+ },
2034
+ "icon": {
2035
+ "type": "string"
2036
+ },
2037
+ "invisible": {
2038
+ "$ref": "#/$defs/Modifier"
2039
+ },
2040
+ "children": {
2041
+ "type": "array",
2042
+ "items": {
2043
+ "$ref": "#/$defs/LayoutNode"
2044
+ }
2045
+ }
2046
+ },
2047
+ "required": [
2048
+ "type",
2049
+ "id",
2050
+ "label",
2051
+ "children"
2052
+ ],
2053
+ "additionalProperties": false
2054
+ },
2055
+ "SectionsNode": {
2056
+ "type": "object",
2057
+ "properties": {
2058
+ "type": {
2059
+ "type": "string",
2060
+ "const": "sections"
2061
+ },
2062
+ "id": {
2063
+ "type": "string",
2064
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
2065
+ },
2066
+ "children": {
2067
+ "type": "array",
2068
+ "items": {
2069
+ "$ref": "#/$defs/LayoutNode"
2070
+ }
2071
+ }
2072
+ },
2073
+ "required": [
2074
+ "type",
2075
+ "id",
2076
+ "children"
2077
+ ],
2078
+ "additionalProperties": false
2079
+ },
2080
+ "WizardNode": {
2081
+ "type": "object",
2082
+ "properties": {
2083
+ "type": {
2084
+ "type": "string",
2085
+ "const": "wizard"
2086
+ },
2087
+ "id": {
2088
+ "type": "string",
2089
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
2090
+ },
2091
+ "children": {
2092
+ "minItems": 1,
2093
+ "type": "array",
2094
+ "items": {
2095
+ "$ref": "#/$defs/StepNode"
2096
+ }
2097
+ }
2098
+ },
2099
+ "required": [
2100
+ "type",
2101
+ "id",
2102
+ "children"
2103
+ ],
2104
+ "additionalProperties": false
2105
+ },
2106
+ "StepNode": {
2107
+ "type": "object",
2108
+ "properties": {
2109
+ "type": {
2110
+ "type": "string",
2111
+ "const": "step"
2112
+ },
2113
+ "id": {
2114
+ "type": "string",
2115
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$"
2116
+ },
2117
+ "label": {
2118
+ "type": "string"
2119
+ },
2120
+ "description": {
2121
+ "type": "string"
2122
+ },
2123
+ "invisible": {
2124
+ "$ref": "#/$defs/Modifier"
2125
+ },
2126
+ "children": {
2127
+ "type": "array",
2128
+ "items": {
2129
+ "$ref": "#/$defs/LayoutNode"
2130
+ }
2131
+ }
2132
+ },
2133
+ "required": [
2134
+ "type",
2135
+ "id",
2136
+ "label",
2137
+ "children"
2138
+ ],
2139
+ "additionalProperties": false
2140
+ }
2141
+ }
2142
+ }