@json-editor/json-editor 2.5.4 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.github/workflows/build.yml +12 -3
  2. package/CHANGELOG.md +51 -14
  3. package/README.md +159 -20
  4. package/dist/jsoneditor.js +2 -2
  5. package/dist/nonmin/jsoneditor.js +5483 -3610
  6. package/dist/nonmin/jsoneditor.js.map +1 -1
  7. package/docs/cleave.html +1 -1
  8. package/docs/datetime.html +1 -1
  9. package/docs/describedby.html +1 -1
  10. package/docs/form-submission.html +76 -0
  11. package/docs/index.html +2 -2
  12. package/docs/materialize_css.html +1 -1
  13. package/docs/meta_schema.json +0 -1
  14. package/docs/radio.html +1 -1
  15. package/docs/select2.html +1 -1
  16. package/docs/selectize.html +1 -1
  17. package/docs/starrating.html +1 -1
  18. package/docs/wysiwyg.html +1 -1
  19. package/package.json +28 -26
  20. package/release-notes.md +5 -3
  21. package/src/core.js +36 -37
  22. package/src/defaults.js +9 -2
  23. package/src/editor.js +6 -2
  24. package/src/editors/array.js +12 -1
  25. package/src/editors/autocomplete.js +4 -3
  26. package/src/editors/button.js +1 -1
  27. package/src/editors/multiple.js +2 -0
  28. package/src/editors/multiselect.js +14 -5
  29. package/src/editors/object.js +10 -6
  30. package/src/editors/radio.js +6 -1
  31. package/src/editors/string.js +7 -1
  32. package/src/editors/table.js +21 -2
  33. package/src/editors/upload.js +1 -1
  34. package/src/editors/uuid.js +2 -12
  35. package/src/iconlib.js +1 -1
  36. package/src/schemaloader.js +232 -109
  37. package/src/style.css +3 -0
  38. package/src/style.css.js +1 -1
  39. package/src/theme.js +5 -4
  40. package/src/themes/bootstrap3.js +3 -2
  41. package/src/themes/bootstrap4.js +7 -0
  42. package/src/themes/spectre.js +2 -1
  43. package/src/utilities.js +18 -0
  44. package/src/validator.js +65 -47
  45. package/tests/codeceptjs/codecept.json +1 -1
  46. package/tests/codeceptjs/core_test.js +98 -0
  47. package/tests/codeceptjs/editors/advanced_test.js +1 -1
  48. package/tests/codeceptjs/editors/array_test.js +74 -0
  49. package/tests/codeceptjs/editors/autocomplete_test.js +16 -0
  50. package/tests/codeceptjs/editors/button_test.js +11 -4
  51. package/tests/codeceptjs/editors/integer_test.js +7 -2
  52. package/tests/codeceptjs/editors/jodit_test.js +3 -3
  53. package/tests/codeceptjs/editors/object_test.js +84 -13
  54. package/tests/codeceptjs/editors/range_test.js +12 -0
  55. package/tests/codeceptjs/editors/stepper_test.js +12 -0
  56. package/tests/codeceptjs/editors/uuid_test.js +31 -4
  57. package/tests/codeceptjs/editors/validation_test.js +1 -1
  58. package/tests/docker-compose.yml +1 -1
  59. package/tests/fixtures/definitions.json +22 -0
  60. package/tests/fixtures/properties.json +20 -0
  61. package/tests/fixtures/validation.json +207 -0
  62. package/tests/pages/array-checkboxes-infotext.html +52 -0
  63. package/tests/pages/array-move-events.html +4 -2
  64. package/tests/pages/array-unique-items-sort.html +78 -0
  65. package/tests/pages/autocomplete.html +69 -0
  66. package/tests/pages/button-icons.html +38 -0
  67. package/tests/pages/core.html +4 -2
  68. package/tests/pages/error-messages.html +47 -0
  69. package/tests/pages/grid-strict.html +6 -10
  70. package/tests/pages/grid.html +0 -4
  71. package/tests/pages/issues/issue-gh-812.html +4 -2
  72. package/tests/pages/meta_schema.json +14 -1
  73. package/tests/pages/object-required-properties.html +37 -14
  74. package/tests/pages/object-show-opt-in.html +110 -0
  75. package/tests/pages/object-with-dependencies-array.html +29 -19
  76. package/tests/pages/range.html +60 -0
  77. package/tests/pages/ready.html +43 -0
  78. package/tests/pages/references.html +162 -0
  79. package/tests/pages/stepper-manual.html +57 -0
  80. package/tests/pages/string-simplemde-editor.html +81 -0
  81. package/tests/pages/table-move-events.html +4 -1
  82. package/tests/pages/urn.html +11 -8
  83. package/tests/pages/uuid.html +89 -50
  84. package/tests/pages/validation-messages.json +705 -0
  85. package/tests/unit/core.spec.js +79 -66
  86. package/tests/unit/editor.spec.js +20 -8
  87. package/tests/unit/editors/array.spec.js +3 -2
  88. package/tests/unit/editors/object.spec.js +3 -1
  89. package/tests/unit/editors/table.spec.js +4 -2
  90. package/tests/unit/schemaloader.spec.js +77 -105
  91. package/tests/unit/validator.spec.js +10 -0
@@ -0,0 +1,705 @@
1
+ {
2
+ "type": "object",
3
+ "title": "Error Messages",
4
+ "properties": {
5
+ "error_notempty": {
6
+ "type": "string",
7
+ "title": "error_notempty",
8
+ "minLength": 1,
9
+ "options": {
10
+ "error_messages": {
11
+ "en": {
12
+ "error_notempty": "CUSTOM EN: Value required"
13
+ },
14
+ "es": {
15
+ "error_notempty": "CUSTOM ES: Value required"
16
+ }
17
+ }
18
+ }
19
+ },
20
+ "error_const": {
21
+ "type": "string",
22
+ "title": "error_const",
23
+ "const": "test",
24
+ "default": "something else",
25
+ "options": {
26
+ "error_messages": {
27
+ "en": {
28
+ "error_const": "CUSTOM EN: Value must be the constant value"
29
+ },
30
+ "es": {
31
+ "error_const": "CUSTOM ES: Value must be the constant value"
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "error_minLength": {
37
+ "type": "string",
38
+ "title": "error_minLength",
39
+ "minLength": 6,
40
+ "options": {
41
+ "error_messages": {
42
+ "en": {
43
+ "error_minLength": "CUSTOM EN: Value must be at least {{0}} characters long"
44
+ },
45
+ "es": {
46
+ "error_minLength": "CUSTOM ES: Value must be at least {{0}} characters long"
47
+ }
48
+ }
49
+ }
50
+ },
51
+ "error_maxLength": {
52
+ "type": "string",
53
+ "title": "error_maxLength",
54
+ "maxLength": 6,
55
+ "default": "alohomora",
56
+ "options": {
57
+ "error_messages": {
58
+ "en": {
59
+ "error_maxLength": "CUSTOM EN: Value must be at most {{0}} characters long"
60
+ },
61
+ "es": {
62
+ "error_maxLength": "CUSTOM ES: Value must be at most {{0}} characters long"
63
+ }
64
+ }
65
+ }
66
+ },
67
+ "error_anyOf": {
68
+ "title": "error_anyOf",
69
+ "anyOf": [
70
+ {
71
+ "type": "integer"
72
+ },
73
+ {
74
+ "type": "integer"
75
+ }
76
+ ],
77
+ "default": 1.5,
78
+ "options": {
79
+ "error_messages": {
80
+ "en": {
81
+ "error_anyOf": "CUSTOM EN: Value must validate against at least one of the provided schemas"
82
+ },
83
+ "es": {
84
+ "error_anyOf": "CUSTOM ES: Value must validate against at least one of the provided schemas"
85
+ }
86
+ }
87
+ }
88
+ },
89
+ "error_oneOf": {
90
+ "title": "error_oneOf",
91
+ "oneOf": [
92
+ {
93
+ "type": "integer"
94
+ }
95
+ ],
96
+ "default": 1.5,
97
+ "options": {
98
+ "error_messages": {
99
+ "en": {
100
+ "error_oneOf": "CUSTOM EN: Value must validate against exactly one of the provided schemas. It currently validates against {{0}} of the schemas."
101
+ },
102
+ "es": {
103
+ "error_oneOf": "CUSTOM ES: Value must validate against exactly one of the provided schemas. It currently validates against {{0}} of the schemas."
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "error_type_union": {
109
+ "type": ["integer"],
110
+ "title": "error_type_union",
111
+ "default": 1.5,
112
+ "options": {
113
+ "error_messages": {
114
+ "en": {
115
+ "error_type_union": "CUSTOM EN: Value must be one of the provided types"
116
+ },
117
+ "es": {
118
+ "error_type_union": "CUSTOM ES: Value must be one of the provided types"
119
+ }
120
+ }
121
+ }
122
+ },
123
+ "error_disallow_union": {
124
+ "type": "string",
125
+ "title": "error_disallow_union",
126
+ "disallow": ["string", "boolean"],
127
+ "default": 15,
128
+ "options": {
129
+ "error_messages": {
130
+ "en": {
131
+ "error_disallow_union": "CUSTOM EN: Value must not be one of the provided disallowed types"
132
+ },
133
+ "es": {
134
+ "error_disallow_union": "CUSTOM ES: Value must not be one of the provided disallowed types"
135
+ }
136
+ }
137
+ }
138
+ },
139
+ "error_disallow": {
140
+ "type": "string",
141
+ "title": "error_disallow",
142
+ "disallow": "string",
143
+ "default": 15,
144
+ "options": {
145
+ "error_messages": {
146
+ "en": {
147
+ "error_disallow": "CUSTOM EN: Value must not be of type {{0}}"
148
+ },
149
+ "es": {
150
+ "error_disallow": "CUSTOM ES: Value must not be of type {{0}}"
151
+ }
152
+ }
153
+ }
154
+ },
155
+ "error_type": {
156
+ "type": "integer",
157
+ "title": "error_type",
158
+ "default": 1.5,
159
+ "options": {
160
+ "error_messages": {
161
+ "en": {
162
+ "error_type": "CUSTOM EN: Value must be of type {{0}}"
163
+ },
164
+ "es": {
165
+ "error_type": "CUSTOM ES: Value must be of type {{0}}"
166
+ }
167
+ }
168
+ }
169
+ },
170
+ "error_not": {
171
+ "type": "string",
172
+ "title": "error_not",
173
+ "not": {
174
+ "type": "string"
175
+ },
176
+ "default": "alohomora",
177
+ "options": {
178
+ "error_messages": {
179
+ "en": {
180
+ "error_not": "CUSTOM EN: Value must not validate against the provided schema"
181
+ },
182
+ "es": {
183
+ "error_not": "CUSTOM ES: Value must not validate against the provided schema"
184
+ }
185
+ }
186
+ }
187
+ },
188
+ "error_invalid_epoch": {
189
+ "type": "integer",
190
+ "title": "error_invalid_epoch",
191
+ "format": "date",
192
+ "default": 1,
193
+ "options": {
194
+ "error_messages": {
195
+ "en": {
196
+ "error_invalid_epoch": "CUSTOM EN: Date must be greater than 1 January 1970"
197
+ },
198
+ "es": {
199
+ "error_invalid_epoch": "CUSTOM ES: Date must be greater than 1 January 1970"
200
+ }
201
+ }
202
+ }
203
+ },
204
+ "error_pattern": {
205
+ "type": "string",
206
+ "title": "error_pattern",
207
+ "pattern": "^[a-zA-Z0-9_]+$",
208
+ "default": "@alohomora",
209
+ "options": {
210
+ "error_messages": {
211
+ "en": {
212
+ "error_pattern": "CUSTOM EN: Value must match the pattern {{0}}"
213
+ },
214
+ "es": {
215
+ "error_pattern": "CUSTOM ES: Value must match the pattern {{0}}"
216
+ }
217
+ }
218
+ }
219
+ },
220
+ "error_multipleOf": {
221
+ "type": "integer",
222
+ "title": "error_multipleOf",
223
+ "exclusiveMinimum": false,
224
+ "multipleOf": 5,
225
+ "default": 13,
226
+ "options": {
227
+ "error_messages": {
228
+ "en": {
229
+ "error_multipleOf": "CUSTOM EN: Value must be a multiple of {{0}}"
230
+ },
231
+ "es": {
232
+ "error_multipleOf": "CUSTOM ES: Value must be a multiple of {{0}}"
233
+ }
234
+ }
235
+ }
236
+ },
237
+ "error_minimum_incl": {
238
+ "type": "integer",
239
+ "title": "error_minimum_incl",
240
+ "exclusiveMinimum": false,
241
+ "minimum": 5,
242
+ "default": 4,
243
+ "options": {
244
+ "error_messages": {
245
+ "en": {
246
+ "error_minimum_incl": "CUSTOM EN: Value must be at least {{0}}"
247
+ },
248
+ "es": {
249
+ "error_minimum_incl": "CUSTOM ES: Value must be at least {{0}}"
250
+ }
251
+ }
252
+ }
253
+ },
254
+ "error_minimum_excl": {
255
+ "type": "integer",
256
+ "title": "error_minimum_excl",
257
+ "exclusiveMinimum": true,
258
+ "minimum": 5,
259
+ "default": 5,
260
+ "options": {
261
+ "error_messages": {
262
+ "en": {
263
+ "error_minimum_excl": "CUSTOM EN: Value must be greater than {{0}}"
264
+ },
265
+ "es": {
266
+ "error_minimum_excl": "CUSTOM ES: Value must be greater than {{0}}"
267
+ }
268
+ }
269
+ }
270
+ },
271
+ "error_maximum_incl": {
272
+ "type": "integer",
273
+ "title": "error_maximum_incl",
274
+ "exclusiveMaximum": false,
275
+ "maximum": 10,
276
+ "default": 11,
277
+ "options": {
278
+ "error_messages": {
279
+ "en": {
280
+ "error_maximum_incl": "CUSTOM EN: Value must be less than {{0}}"
281
+ },
282
+ "es": {
283
+ "error_maximum_incl": "CUSTOM ES: Value must be less than {{0}}"
284
+ }
285
+ }
286
+ }
287
+ },
288
+ "error_maximum_excl": {
289
+ "type": "integer",
290
+ "title": "error_maximum_excl",
291
+ "exclusiveMaximum": true,
292
+ "maximum": 15,
293
+ "default": 20,
294
+ "options": {
295
+ "error_messages": {
296
+ "en": {
297
+ "error_maximum_excl": "CUSTOM EN: Value must be less than {{0}}"
298
+ },
299
+ "es": {
300
+ "error_maximum_excl": "CUSTOM ES: Value must be less than {{0}}"
301
+ }
302
+ }
303
+ }
304
+ },
305
+ "error_notset": {
306
+ "type": "string",
307
+ "title": "error_notset",
308
+ "required": true,
309
+ "options": {
310
+ "error_messages": {
311
+ "en": {
312
+ "error_notset": "CUSTOM EN: Property must be set."
313
+ },
314
+ "es": {
315
+ "error_notset": "CUSTOM ES: Property must be set."
316
+ }
317
+ }
318
+ }
319
+ },
320
+ "error_enum": {
321
+ "type": "string",
322
+ "title": "error_enum",
323
+ "enum": [
324
+ "blue",
325
+ "red"
326
+ ],
327
+ "default": "black",
328
+ "options": {
329
+ "error_messages": {
330
+ "en": {
331
+ "error_enum": "CUSTOM EN: Value must be one of the enumerated values"
332
+ },
333
+ "es": {
334
+ "error_enum": "CUSTOM ES: Value must be one of the enumerated values"
335
+ }
336
+ }
337
+ }
338
+ },
339
+ "error_minProperties": {
340
+ "type": "object",
341
+ "title": "error_minProperties",
342
+ "minProperties": 1,
343
+ "properties": {},
344
+ "options": {
345
+ "error_messages": {
346
+ "en": {
347
+ "error_minProperties": "CUSTOM EN: Object must have at least {{0}} properties"
348
+ },
349
+ "es": {
350
+ "error_minProperties": "CUSTOM ES: Object must have at least {{0}} properties"
351
+ }
352
+ }
353
+ }
354
+ },
355
+ "error_maxProperties": {
356
+ "type": "object",
357
+ "title": "error_maxProperties",
358
+ "maxProperties": 1,
359
+ "properties": {
360
+ "name": {
361
+ "type": "string"
362
+ },
363
+ "surname": {
364
+ "type": "string"
365
+ }
366
+ },
367
+ "default": {
368
+ "name": "Ron",
369
+ "surname": "Wesley"
370
+ },
371
+ "options": {
372
+ "error_messages": {
373
+ "en": {
374
+ "error_maxProperties": "CUSTOM EN: Object must have at most {{0}} properties"
375
+ },
376
+ "es": {
377
+ "error_maxProperties": "CUSTOM ES: Object must have at most {{0}} properties"
378
+ }
379
+ }
380
+ }
381
+ },
382
+ "error_required": {
383
+ "type": "object",
384
+ "title": "error_required",
385
+ "required": [
386
+ "name"
387
+ ],
388
+ "properties": {},
389
+ "options": {
390
+ "error_messages": {
391
+ "en": {
392
+ "error_required": "CUSTOM EN: Object is missing the required property '{{0}}'"
393
+ },
394
+ "es": {
395
+ "error_required": "CUSTOM ES: Object is missing the required property '{{0}}'"
396
+ }
397
+ }
398
+ }
399
+ },
400
+ "error_property_names_unsupported": {
401
+ "type": "object",
402
+ "title": "error_property_names_unsupported",
403
+ "propertyNames": {
404
+ "UNSOPPORTED": true
405
+ },
406
+ "default": {
407
+ "fullname": "test"
408
+ },
409
+ "options": {
410
+ "error_messages": {
411
+ "en": {
412
+ "error_property_names_unsupported": "CUSTOM EN: Unsupported propertyName {{0}}"
413
+ },
414
+ "es": {
415
+ "error_property_names_unsupported": "CUSTOM ES: Unsupported propertyName {{0}}"
416
+ }
417
+ }
418
+ }
419
+ },
420
+ "error_property_names_pattern": {
421
+ "type": "object",
422
+ "title": "error_property_names_pattern",
423
+ "propertyNames": {
424
+ "pattern": false
425
+ },
426
+ "default": {
427
+ "fullname": "test"
428
+ },
429
+ "options": {
430
+ "error_messages": {
431
+ "en": {
432
+ "error_property_names_pattern": "CUSTOM EN: Property name {{0}} cannot match invalid pattern"
433
+ },
434
+ "es": {
435
+ "error_property_names_pattern": "CUSTOM ES: Property name {{0}} cannot match invalid pattern"
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "error_property_names_enum": {
441
+ "type": "object",
442
+ "title": "error_property_names_enum",
443
+ "propertyNames": {
444
+ "enum": "names"
445
+ },
446
+ "default": {
447
+ "fullname": "test"
448
+ },
449
+ "options": {
450
+ "error_messages": {
451
+ "en": {
452
+ "error_property_names_enum": "CUSTOM EN: Property name {{0}} cannot match invalid enum"
453
+ },
454
+ "es": {
455
+ "error_property_names_enum": "CUSTOM ES: Property name {{0}} cannot match invalid enum"
456
+ }
457
+ }
458
+ }
459
+ },
460
+ "error_property_names_maxlength": {
461
+ "type": "object",
462
+ "title": "error_property_names_maxlength",
463
+ "propertyNames": {
464
+ "maxLength": "3"
465
+ },
466
+ "default": {
467
+ "fullname": "test"
468
+ },
469
+ "options": {
470
+ "error_messages": {
471
+ "en": {
472
+ "error_property_names_maxlength": "CUSTOM EN: Property name {{0}} cannot match invalid maxLength"
473
+ },
474
+ "es": {
475
+ "error_property_names_maxlength": "CUSTOM ES: Property name {{0}} cannot match invalid maxLength"
476
+ }
477
+ }
478
+ }
479
+ },
480
+ "error_property_names_exceeds_maxlength": {
481
+ "type": "object",
482
+ "title": "error_property_names_exceeds_maxlength",
483
+ "propertyNames": {
484
+ "maxLength": 3
485
+ },
486
+ "default": {
487
+ "fullname": "test"
488
+ },
489
+ "options": {
490
+ "error_messages": {
491
+ "en": {
492
+ "error_property_names_exceeds_maxlength": "CUSTOM EN: Property name {{0}} exceeds maxLength"
493
+ },
494
+ "es": {
495
+ "error_property_names_exceeds_maxlength": "CUSTOM ES: Property name {{0}} exceeds maxLength"
496
+ }
497
+ }
498
+ }
499
+ },
500
+ "error_property_names_false": {
501
+ "type": "object",
502
+ "title": "error_property_names_false",
503
+ "propertyNames": false,
504
+ "default": {
505
+ "pets": "pets"
506
+ },
507
+ "options": {
508
+ "error_messages": {
509
+ "en": {
510
+ "error_property_names_false": "CUSTOM EN: Property name {{0}} does not match pattern"
511
+ },
512
+ "es": {
513
+ "error_property_names_false": "CUSTOM ES: Property name {{0}} does not match pattern"
514
+ }
515
+ }
516
+ }
517
+ },
518
+ "error_property_names_pattern_mismatch": {
519
+ "type": "object",
520
+ "title": "error_property_names_pattern_mismatch",
521
+ "propertyNames": {
522
+ "pattern": "^[a-zA-Z0-9_]+$"
523
+ },
524
+ "default": {
525
+ "$pets": "pets"
526
+ },
527
+ "options": {
528
+ "error_messages": {
529
+ "en": {
530
+ "error_property_names_pattern_mismatch": "CUSTOM EN: Property name {{0}} does not match pattern"
531
+ },
532
+ "es": {
533
+ "error_property_names_pattern_mismatch": "CUSTOM ES: Property name {{0}} does not match pattern"
534
+ }
535
+ }
536
+ }
537
+ },
538
+ "error_property_names_const_mismatch": {
539
+ "type": "object",
540
+ "title": "error_property_names_const_mismatch",
541
+ "propertyNames": {
542
+ "const": "name"
543
+ },
544
+ "default": {
545
+ "pets": "pets"
546
+ },
547
+ "options": {
548
+ "error_messages": {
549
+ "en": {
550
+ "error_property_names_const_mismatch": "CUSTOM EN: Property name {{0}} does not match the const value"
551
+ },
552
+ "es": {
553
+ "error_property_names_const_mismatch": "CUSTOM ES: Property name {{0}} does not match the const value"
554
+ }
555
+ }
556
+ }
557
+ },
558
+ "error_property_names_enum_mismatch": {
559
+ "type": "object",
560
+ "title": "error_property_names_enum_mismatch",
561
+ "propertyNames": {
562
+ "enum": [
563
+ "name",
564
+ "age"
565
+ ]
566
+ },
567
+ "default": {
568
+ "pets": "pets"
569
+ },
570
+ "options": {
571
+ "error_messages": {
572
+ "en": {
573
+ "error_property_names_enum_mismatch": "CUSTOM EN: Property name {{0}} does not match any enum values"
574
+ },
575
+ "es": {
576
+ "error_property_names_enum_mismatch": "CUSTOM ES: Property name {{0}} does not match any enum values"
577
+ }
578
+ }
579
+ }
580
+ },
581
+ "error_dependency": {
582
+ "type": "object",
583
+ "title": "error_dependency",
584
+ "properties": {},
585
+ "dependencies": {
586
+ "name": "Ron"
587
+ },
588
+ "options": {
589
+ "error_messages": {
590
+ "en": {
591
+ "error_dependency": "CUSTOM EN: Must have property {{0}}"
592
+ },
593
+ "es": {
594
+ "error_dependency": "CUSTOM ES: Must have property {{0}}"
595
+ }
596
+ }
597
+ }
598
+ },
599
+ "error_additional_properties": {
600
+ "type": "object",
601
+ "title": "error_additional_properties",
602
+ "additionalProperties": false,
603
+ "properties": {
604
+ "name": {
605
+ "type": "string"
606
+ }
607
+ },
608
+ "default": {
609
+ "name": "Ron",
610
+ "age": 18
611
+ },
612
+ "options": {
613
+ "error_messages": {
614
+ "en": {
615
+ "error_additional_properties": "CUSTOM EN: No additional properties allowed, but property {{0}} is set"
616
+ },
617
+ "es": {
618
+ "error_additional_properties": "CUSTOM ES: No additional properties allowed, but property {{0}} is set"
619
+ }
620
+ }
621
+ }
622
+ },
623
+ "error_uniqueItems": {
624
+ "type": "array",
625
+ "format": "tabs",
626
+ "title": "error_uniqueItems",
627
+ "uniqueItems": true,
628
+ "default": ["alohomora", "alohomora"],
629
+ "items": {
630
+ "type": "string"
631
+ },
632
+ "options": {
633
+ "error_messages": {
634
+ "en": {
635
+ "error_uniqueItems": "CUSTOM EN: Array must have unique items"
636
+ },
637
+ "es": {
638
+ "error_uniqueItems": "CUSTOM ES: Array must have unique items"
639
+ }
640
+ }
641
+ }
642
+ },
643
+ "error_additionalItems": {
644
+ "type": "array",
645
+ "format": "tabs",
646
+ "title": "error_additionalItems",
647
+ "additionalItems": false,
648
+ "items": {
649
+ "type": "string"
650
+ },
651
+ "default": ["alohomora", true],
652
+ "options": {
653
+ "error_messages": {
654
+ "en": {
655
+ "error_additionalItems": "CUSTOM EN: No additional items allowed in this array"
656
+ },
657
+ "es": {
658
+ "error_additionalItems": "CUSTOM ES: No additional items allowed in this array"
659
+ }
660
+ }
661
+ }
662
+ },
663
+ "error_minItems": {
664
+ "type": "array",
665
+ "format": "tabs",
666
+ "title": "error_minItems",
667
+ "minItems": 1,
668
+ "items": {
669
+ "type": "string"
670
+ },
671
+ "options": {
672
+ "error_messages": {
673
+ "en": {
674
+ "error_minItems": "CUSTOM EN: Value must have at least {{0}} items"
675
+ },
676
+ "es": {
677
+ "error_minItems": "CUSTOM ES: Value must have at least {{0}} items"
678
+ }
679
+ }
680
+ }
681
+ },
682
+ "error_maxItems": {
683
+ "type": "array",
684
+ "format": "tabs",
685
+ "title": "error_maxItems",
686
+ "maxItems": 1,
687
+ "default": [
688
+ "alohomora", "wingardium leviosa"
689
+ ],
690
+ "items": {
691
+ "type": "string"
692
+ },
693
+ "options": {
694
+ "error_messages": {
695
+ "en": {
696
+ "error_maxItems": "CUSTOM EN: Value must have at most {{0}} items"
697
+ },
698
+ "es": {
699
+ "error_maxItems": "CUSTOM ES: Value must have at most {{0}} items"
700
+ }
701
+ }
702
+ }
703
+ }
704
+ }
705
+ }