@dicebear/schema 2.0.1 → 2.0.2

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.
@@ -9,19 +9,39 @@
9
9
  },
10
10
  "colorName": {
11
11
  "description": "A reference to a color palette defined in the top-level `colors` section.",
12
- "allOf": [{ "$ref": "#/definitions/camelCaseName" }]
12
+ "allOf": [
13
+ {
14
+ "$ref": "#/definitions/camelCaseName"
15
+ }
16
+ ]
13
17
  },
14
18
  "componentName": {
15
19
  "description": "A reference to a component defined in the top-level `components` section.",
16
- "allOf": [{ "$ref": "#/definitions/camelCaseName" }]
20
+ "allOf": [
21
+ {
22
+ "$ref": "#/definitions/camelCaseName"
23
+ }
24
+ ]
17
25
  },
18
26
  "translateValue": {
19
27
  "description": "A translation value expressed as a percentage of the component's width (for `x`) or height (for `y`). Defines a range the PRNG picks from. Set `min === max` for a fixed value. A positive `step` quantizes the range to multiples of `step` starting at `min`; omit for a continuous range. When `(max - min)` is not a multiple of `step`, `max` itself is unreachable — the last bucket is clamped to `≤ max`.",
20
28
  "type": "object",
21
29
  "properties": {
22
- "min": { "type": "number", "minimum": -1000, "maximum": 1000 },
23
- "max": { "type": "number", "minimum": -1000, "maximum": 1000 },
24
- "step": { "type": "number", "exclusiveMinimum": 0, "maximum": 2000 }
30
+ "min": {
31
+ "type": "number",
32
+ "minimum": -1000,
33
+ "maximum": 1000
34
+ },
35
+ "max": {
36
+ "type": "number",
37
+ "minimum": -1000,
38
+ "maximum": 1000
39
+ },
40
+ "step": {
41
+ "type": "number",
42
+ "exclusiveMinimum": 0,
43
+ "maximum": 2000
44
+ }
25
45
  },
26
46
  "required": ["min", "max"],
27
47
  "additionalProperties": false
@@ -35,12 +55,16 @@
35
55
  "colorValue": {
36
56
  "description": "A color value for `fill`, `stroke`, `stop-color`, and other color attributes. Either a plain string (any CSS color format — named color, hex, `rgb()`, `oklch()`, `color-mix()`, local paint server reference `url(#id)`, etc.) or an object referencing a named color palette defined in the top-level `colors` section. CSS color syntax is not validated; invalid colors are the browser's problem.",
37
57
  "anyOf": [
38
- { "$ref": "#/definitions/attributeString" },
58
+ {
59
+ "$ref": "#/definitions/attributeString"
60
+ },
39
61
  {
40
62
  "description": "A reference to a named color palette. At render time, the PRNG selects a color value from the referenced palette.",
41
63
  "type": "object",
42
64
  "properties": {
43
- "type": { "const": "color" },
65
+ "type": {
66
+ "const": "color"
67
+ },
44
68
  "name": {
45
69
  "description": "The name of the color palette to reference.",
46
70
  "$ref": "#/definitions/colorName"
@@ -88,31 +112,49 @@
88
112
  "type": "string",
89
113
  "pattern": "[vV][bB][sS][cC][rR][iI][pP][tT][ \\t\\n\\f\\r]*:"
90
114
  },
91
- { "type": "string", "pattern": "\\\\" }
115
+ {
116
+ "type": "string",
117
+ "pattern": "\\\\"
118
+ }
92
119
  ]
93
120
  }
94
121
  },
95
122
  "attributeString": {
96
123
  "description": "The default value type for generic SVG attribute values — transform lists, numeric values, keywords, and so on. No syntactic validation; only the common `filteredString` injection filter applies.",
97
124
  "type": "string",
98
- "allOf": [{ "$ref": "#/definitions/filteredString" }],
125
+ "allOf": [
126
+ {
127
+ "$ref": "#/definitions/filteredString"
128
+ }
129
+ ],
99
130
  "maxLength": 1024
100
131
  },
101
132
  "pathDataString": {
102
133
  "description": "Used for the `d` attribute of `<path>`. Same filter as `attributeString`, but with a much larger length budget to accommodate complex path geometry.",
103
134
  "type": "string",
104
- "allOf": [{ "$ref": "#/definitions/filteredString" }],
135
+ "allOf": [
136
+ {
137
+ "$ref": "#/definitions/filteredString"
138
+ }
139
+ ],
105
140
  "maxLength": 16384
106
141
  },
107
142
  "cssString": {
108
143
  "description": "Used for inline `style` attribute content and `<style>` element bodies. Known-dangerous `@`-rules — `@import`, `@font-face`, `@document`, `@charset` — are rejected in addition to the common `filteredString` injection filter. Other `@`-rules (`@media`, `@keyframes`, `@supports`, `@layer`, etc.) are permitted, but the `filteredString` injection filter still applies to their contents — so external `url(...)` references inside e.g. an `@media` rule are still blocked. This is not a general CSS sanitizer.",
109
144
  "type": "string",
110
- "allOf": [{ "$ref": "#/definitions/filteredString" }],
145
+ "allOf": [
146
+ {
147
+ "$ref": "#/definitions/filteredString"
148
+ }
149
+ ],
111
150
  "maxLength": 4096,
112
151
  "not": {
113
152
  "type": "string",
114
153
  "anyOf": [
115
- { "type": "string", "pattern": "@[iI][mM][pP][oO][rR][tT]" },
154
+ {
155
+ "type": "string",
156
+ "pattern": "@[iI][mM][pP][oO][rR][tT]"
157
+ },
116
158
  {
117
159
  "type": "string",
118
160
  "pattern": "@[fF][oO][nN][tT]-[fF][aA][cC][eE]"
@@ -121,33 +163,71 @@
121
163
  "type": "string",
122
164
  "pattern": "@[dD][oO][cC][uU][mM][eE][nN][tT]"
123
165
  },
124
- { "type": "string", "pattern": "@[cC][hH][aA][rR][sS][eE][tT]" }
166
+ {
167
+ "type": "string",
168
+ "pattern": "@[cC][hH][aA][rR][sS][eE][tT]"
169
+ }
125
170
  ]
126
171
  }
127
172
  },
128
173
  "element": {
129
174
  "description": "An SVG node. One of four mutually exclusive forms, discriminated by `type` (and `name` for the `<style>` special case): a text element, a component reference, a `<style>` element, or any other SVG element.",
130
175
  "anyOf": [
131
- { "$ref": "#/definitions/textElement" },
132
- { "$ref": "#/definitions/componentReference" },
133
- { "$ref": "#/definitions/styleElement" },
134
- { "$ref": "#/definitions/genericElement" }
176
+ {
177
+ "$ref": "#/definitions/textElement"
178
+ },
179
+ {
180
+ "$ref": "#/definitions/componentReference"
181
+ },
182
+ {
183
+ "$ref": "#/definitions/styleElement"
184
+ },
185
+ {
186
+ "$ref": "#/definitions/genericElement"
187
+ }
188
+ ]
189
+ },
190
+ "staticElement": {
191
+ "description": "An element below `defs` or `clipPath`: the same node as `element`, but without `animations` at any depth. The renderer plays an animation by wrapping the element in a group, and that wrapper never reaches a `<use>` instance of a def and is no valid clipPath content, so such an animation could not play. Animate the `<use>` instead.",
192
+ "allOf": [
193
+ {
194
+ "$ref": "#/definitions/element"
195
+ },
196
+ {
197
+ "properties": {
198
+ "animations": false,
199
+ "children": {
200
+ "items": {
201
+ "$ref": "#/definitions/staticElement"
202
+ }
203
+ }
204
+ }
205
+ }
135
206
  ]
136
207
  },
137
208
  "textElement": {
138
209
  "description": "A raw text node. Its `value` becomes the text content rendered into the parent element.",
139
210
  "type": "object",
140
211
  "properties": {
141
- "type": { "const": "text" },
212
+ "type": {
213
+ "const": "text"
214
+ },
142
215
  "value": {
143
216
  "description": "Either a plain string, or a `variable` reference resolved at render time to the seed's initials.",
144
217
  "anyOf": [
145
- { "type": "string", "maxLength": 4096 },
218
+ {
219
+ "type": "string",
220
+ "maxLength": 4096
221
+ },
146
222
  {
147
223
  "type": "object",
148
224
  "properties": {
149
- "type": { "const": "variable" },
150
- "name": { "enum": ["initial", "initials"] }
225
+ "type": {
226
+ "const": "variable"
227
+ },
228
+ "name": {
229
+ "enum": ["initial", "initials"]
230
+ }
151
231
  },
152
232
  "required": ["type", "name"],
153
233
  "additionalProperties": false
@@ -162,9 +242,15 @@
162
242
  "description": "A reference to a named component defined in the top-level `components` section. At render time, the PRNG selects one of the component's variants. Optional `attributes` are applied to the generated `<use>` tag — most commonly a `transform` placing the instance, but any allowlisted attribute is accepted.",
163
243
  "type": "object",
164
244
  "properties": {
165
- "type": { "const": "component" },
166
- "name": { "$ref": "#/definitions/componentName" },
167
- "attributes": { "$ref": "#/definitions/attributes" },
245
+ "type": {
246
+ "const": "component"
247
+ },
248
+ "name": {
249
+ "$ref": "#/definitions/componentName"
250
+ },
251
+ "attributes": {
252
+ "$ref": "#/definitions/attributes"
253
+ },
168
254
  "animations": {
169
255
  "$ref": "#/definitions/animations"
170
256
  }
@@ -176,16 +262,26 @@
176
262
  "description": "An SVG `<style>` element. Its CSS content must be provided as `text` children; each child's value is validated as a CSS string with a stricter content policy than generic SVG attribute values.",
177
263
  "type": "object",
178
264
  "properties": {
179
- "type": { "const": "element" },
180
- "name": { "const": "style" },
181
- "attributes": { "$ref": "#/definitions/attributes" },
265
+ "type": {
266
+ "const": "element"
267
+ },
268
+ "name": {
269
+ "const": "style"
270
+ },
271
+ "attributes": {
272
+ "$ref": "#/definitions/attributes"
273
+ },
182
274
  "children": {
183
275
  "type": "array",
184
276
  "items": {
185
277
  "type": "object",
186
278
  "properties": {
187
- "type": { "const": "text" },
188
- "value": { "$ref": "#/definitions/cssString" }
279
+ "type": {
280
+ "const": "text"
281
+ },
282
+ "value": {
283
+ "$ref": "#/definitions/cssString"
284
+ }
189
285
  },
190
286
  "required": ["type", "value"],
191
287
  "additionalProperties": false
@@ -197,10 +293,12 @@
197
293
  "additionalProperties": false
198
294
  },
199
295
  "genericElement": {
200
- "description": "Any SVG element other than `<style>`, which has its own stricter content policy.",
296
+ "description": "Any SVG element other than `<style>`, which has its own stricter content policy. Two elements own a content model the renderer's animation wrappers cannot enter: below `defs` and `clipPath` no element may carry `animations`, and elements that cannot be wrapped in a group, such as `stop`, `tspan`, `textPath`, `mpath` and the filter primitives, carry none themselves.",
201
297
  "type": "object",
202
298
  "properties": {
203
- "type": { "const": "element" },
299
+ "type": {
300
+ "const": "element"
301
+ },
204
302
  "name": {
205
303
  "description": "The SVG tag name. Only a safe subset of SVG elements is permitted; dangerous elements such as `script`, `foreignObject`, or `a` are excluded.",
206
304
  "enum": [
@@ -261,101 +359,265 @@
261
359
  "view"
262
360
  ]
263
361
  },
264
- "attributes": { "$ref": "#/definitions/attributes" },
362
+ "attributes": {
363
+ "$ref": "#/definitions/attributes"
364
+ },
265
365
  "animations": {
266
366
  "$ref": "#/definitions/animations"
267
367
  },
268
368
  "children": {
269
369
  "type": "array",
270
- "items": { "$ref": "#/definitions/element" },
370
+ "items": {
371
+ "$ref": "#/definitions/element"
372
+ },
271
373
  "maxItems": 1024
272
374
  }
273
375
  },
274
376
  "required": ["type", "name"],
275
- "additionalProperties": false
377
+ "additionalProperties": false,
378
+ "allOf": [
379
+ {
380
+ "if": {
381
+ "properties": {
382
+ "name": {
383
+ "enum": ["clipPath", "defs"]
384
+ }
385
+ },
386
+ "required": ["name"]
387
+ },
388
+ "then": {
389
+ "properties": {
390
+ "children": {
391
+ "items": {
392
+ "$ref": "#/definitions/staticElement"
393
+ }
394
+ }
395
+ }
396
+ }
397
+ },
398
+ {
399
+ "if": {
400
+ "properties": {
401
+ "name": {
402
+ "enum": [
403
+ "feBlend",
404
+ "feColorMatrix",
405
+ "feComponentTransfer",
406
+ "feComposite",
407
+ "feConvolveMatrix",
408
+ "feDiffuseLighting",
409
+ "feDisplacementMap",
410
+ "feDistantLight",
411
+ "feDropShadow",
412
+ "feFlood",
413
+ "feFuncA",
414
+ "feFuncB",
415
+ "feFuncG",
416
+ "feFuncR",
417
+ "feGaussianBlur",
418
+ "feImage",
419
+ "feMerge",
420
+ "feMergeNode",
421
+ "feMorphology",
422
+ "feOffset",
423
+ "fePointLight",
424
+ "feSpecularLighting",
425
+ "feSpotLight",
426
+ "feTile",
427
+ "feTurbulence",
428
+ "mpath",
429
+ "stop",
430
+ "textPath",
431
+ "tspan"
432
+ ]
433
+ }
434
+ },
435
+ "required": ["name"]
436
+ },
437
+ "then": {
438
+ "properties": {
439
+ "animations": false
440
+ }
441
+ }
442
+ }
443
+ ]
276
444
  },
277
445
  "attributes": {
278
446
  "description": "A map of allowed SVG presentation attributes. Only a safe subset is permitted; event handlers (e.g. `onclick`) and namespace attributes (e.g. `xlink:href`) are not allowed.",
279
447
  "type": "object",
280
448
  "properties": {
281
- "alignment-baseline": { "$ref": "#/definitions/attributeString" },
282
- "amplitude": { "$ref": "#/definitions/attributeString" },
283
- "azimuth": { "$ref": "#/definitions/attributeString" },
284
- "baseFrequency": { "$ref": "#/definitions/attributeString" },
285
- "baseline-shift": { "$ref": "#/definitions/attributeString" },
286
- "bias": { "$ref": "#/definitions/attributeString" },
287
- "class": { "$ref": "#/definitions/attributeString" },
288
- "clipPathUnits": { "$ref": "#/definitions/attributeString" },
289
- "clip-path": { "$ref": "#/definitions/attributeString" },
290
- "clip-rule": { "$ref": "#/definitions/attributeString" },
449
+ "alignment-baseline": {
450
+ "$ref": "#/definitions/attributeString"
451
+ },
452
+ "amplitude": {
453
+ "$ref": "#/definitions/attributeString"
454
+ },
455
+ "azimuth": {
456
+ "$ref": "#/definitions/attributeString"
457
+ },
458
+ "baseFrequency": {
459
+ "$ref": "#/definitions/attributeString"
460
+ },
461
+ "baseline-shift": {
462
+ "$ref": "#/definitions/attributeString"
463
+ },
464
+ "bias": {
465
+ "$ref": "#/definitions/attributeString"
466
+ },
467
+ "class": {
468
+ "$ref": "#/definitions/attributeString"
469
+ },
470
+ "clipPathUnits": {
471
+ "$ref": "#/definitions/attributeString"
472
+ },
473
+ "clip-path": {
474
+ "$ref": "#/definitions/attributeString"
475
+ },
476
+ "clip-rule": {
477
+ "$ref": "#/definitions/attributeString"
478
+ },
291
479
  "color": {
292
480
  "$ref": "#/definitions/colorValue"
293
481
  },
294
- "color-interpolation": { "$ref": "#/definitions/attributeString" },
482
+ "color-interpolation": {
483
+ "$ref": "#/definitions/attributeString"
484
+ },
295
485
  "color-interpolation-filters": {
296
486
  "$ref": "#/definitions/attributeString"
297
487
  },
298
- "crossorigin": { "$ref": "#/definitions/attributeString" },
299
- "cx": { "$ref": "#/definitions/attributeString" },
300
- "cy": { "$ref": "#/definitions/attributeString" },
301
- "d": { "$ref": "#/definitions/pathDataString" },
302
- "decoding": { "$ref": "#/definitions/attributeString" },
303
- "diffuseConstant": { "$ref": "#/definitions/attributeString" },
304
- "direction": { "$ref": "#/definitions/attributeString" },
305
- "display": { "$ref": "#/definitions/attributeString" },
306
- "divisor": { "$ref": "#/definitions/attributeString" },
307
- "dominant-baseline": { "$ref": "#/definitions/attributeString" },
308
- "dx": { "$ref": "#/definitions/attributeString" },
309
- "dy": { "$ref": "#/definitions/attributeString" },
310
- "edgeMode": { "$ref": "#/definitions/attributeString" },
311
- "elevation": { "$ref": "#/definitions/attributeString" },
312
- "exponent": { "$ref": "#/definitions/attributeString" },
313
- "fill": { "$ref": "#/definitions/colorValue" },
314
- "fill-opacity": { "$ref": "#/definitions/attributeString" },
315
- "fill-rule": { "$ref": "#/definitions/attributeString" },
316
- "filter": { "$ref": "#/definitions/attributeString" },
317
- "filterUnits": { "$ref": "#/definitions/attributeString" },
488
+ "crossorigin": {
489
+ "$ref": "#/definitions/attributeString"
490
+ },
491
+ "cx": {
492
+ "$ref": "#/definitions/attributeString"
493
+ },
494
+ "cy": {
495
+ "$ref": "#/definitions/attributeString"
496
+ },
497
+ "d": {
498
+ "$ref": "#/definitions/pathDataString"
499
+ },
500
+ "decoding": {
501
+ "$ref": "#/definitions/attributeString"
502
+ },
503
+ "diffuseConstant": {
504
+ "$ref": "#/definitions/attributeString"
505
+ },
506
+ "direction": {
507
+ "$ref": "#/definitions/attributeString"
508
+ },
509
+ "display": {
510
+ "$ref": "#/definitions/attributeString"
511
+ },
512
+ "divisor": {
513
+ "$ref": "#/definitions/attributeString"
514
+ },
515
+ "dominant-baseline": {
516
+ "$ref": "#/definitions/attributeString"
517
+ },
518
+ "dx": {
519
+ "$ref": "#/definitions/attributeString"
520
+ },
521
+ "dy": {
522
+ "$ref": "#/definitions/attributeString"
523
+ },
524
+ "edgeMode": {
525
+ "$ref": "#/definitions/attributeString"
526
+ },
527
+ "elevation": {
528
+ "$ref": "#/definitions/attributeString"
529
+ },
530
+ "exponent": {
531
+ "$ref": "#/definitions/attributeString"
532
+ },
533
+ "fill": {
534
+ "$ref": "#/definitions/colorValue"
535
+ },
536
+ "fill-opacity": {
537
+ "$ref": "#/definitions/attributeString"
538
+ },
539
+ "fill-rule": {
540
+ "$ref": "#/definitions/attributeString"
541
+ },
542
+ "filter": {
543
+ "$ref": "#/definitions/attributeString"
544
+ },
545
+ "filterUnits": {
546
+ "$ref": "#/definitions/attributeString"
547
+ },
318
548
  "flood-color": {
319
549
  "$ref": "#/definitions/colorValue"
320
550
  },
321
- "flood-opacity": { "$ref": "#/definitions/attributeString" },
551
+ "flood-opacity": {
552
+ "$ref": "#/definitions/attributeString"
553
+ },
322
554
  "font-family": {
323
555
  "anyOf": [
324
- { "$ref": "#/definitions/attributeString" },
556
+ {
557
+ "$ref": "#/definitions/attributeString"
558
+ },
325
559
  {
326
560
  "type": "object",
327
561
  "properties": {
328
- "type": { "const": "variable" },
329
- "name": { "const": "fontFamily" }
562
+ "type": {
563
+ "const": "variable"
564
+ },
565
+ "name": {
566
+ "const": "fontFamily"
567
+ }
330
568
  },
331
569
  "required": ["type", "name"],
332
570
  "additionalProperties": false
333
571
  }
334
572
  ]
335
573
  },
336
- "font-size": { "$ref": "#/definitions/attributeString" },
337
- "font-size-adjust": { "$ref": "#/definitions/attributeString" },
338
- "font-style": { "$ref": "#/definitions/attributeString" },
339
- "font-variant": { "$ref": "#/definitions/attributeString" },
574
+ "font-size": {
575
+ "$ref": "#/definitions/attributeString"
576
+ },
577
+ "font-size-adjust": {
578
+ "$ref": "#/definitions/attributeString"
579
+ },
580
+ "font-style": {
581
+ "$ref": "#/definitions/attributeString"
582
+ },
583
+ "font-variant": {
584
+ "$ref": "#/definitions/attributeString"
585
+ },
340
586
  "font-weight": {
341
587
  "anyOf": [
342
- { "$ref": "#/definitions/attributeString" },
588
+ {
589
+ "$ref": "#/definitions/attributeString"
590
+ },
343
591
  {
344
592
  "type": "object",
345
593
  "properties": {
346
- "type": { "const": "variable" },
347
- "name": { "const": "fontWeight" }
594
+ "type": {
595
+ "const": "variable"
596
+ },
597
+ "name": {
598
+ "const": "fontWeight"
599
+ }
348
600
  },
349
601
  "required": ["type", "name"],
350
602
  "additionalProperties": false
351
603
  }
352
604
  ]
353
605
  },
354
- "fx": { "$ref": "#/definitions/attributeString" },
355
- "fy": { "$ref": "#/definitions/attributeString" },
356
- "gradientTransform": { "$ref": "#/definitions/attributeString" },
357
- "gradientUnits": { "$ref": "#/definitions/attributeString" },
358
- "height": { "$ref": "#/definitions/attributeString" },
606
+ "fx": {
607
+ "$ref": "#/definitions/attributeString"
608
+ },
609
+ "fy": {
610
+ "$ref": "#/definitions/attributeString"
611
+ },
612
+ "gradientTransform": {
613
+ "$ref": "#/definitions/attributeString"
614
+ },
615
+ "gradientUnits": {
616
+ "$ref": "#/definitions/attributeString"
617
+ },
618
+ "height": {
619
+ "$ref": "#/definitions/attributeString"
620
+ },
359
621
  "href": {
360
622
  "anyOf": [
361
623
  {
@@ -370,110 +632,306 @@
370
632
  }
371
633
  ]
372
634
  },
373
- "id": { "$ref": "#/definitions/attributeString" },
374
- "image-rendering": { "$ref": "#/definitions/attributeString" },
375
- "in": { "$ref": "#/definitions/attributeString" },
376
- "in2": { "$ref": "#/definitions/attributeString" },
377
- "intercept": { "$ref": "#/definitions/attributeString" },
378
- "k1": { "$ref": "#/definitions/attributeString" },
379
- "k2": { "$ref": "#/definitions/attributeString" },
380
- "k3": { "$ref": "#/definitions/attributeString" },
381
- "k4": { "$ref": "#/definitions/attributeString" },
382
- "kernelMatrix": { "$ref": "#/definitions/attributeString" },
383
- "kernelUnitLength": { "$ref": "#/definitions/attributeString" },
384
- "lang": { "$ref": "#/definitions/attributeString" },
385
- "lengthAdjust": { "$ref": "#/definitions/attributeString" },
386
- "letter-spacing": { "$ref": "#/definitions/attributeString" },
635
+ "id": {
636
+ "$ref": "#/definitions/attributeString"
637
+ },
638
+ "image-rendering": {
639
+ "$ref": "#/definitions/attributeString"
640
+ },
641
+ "in": {
642
+ "$ref": "#/definitions/attributeString"
643
+ },
644
+ "in2": {
645
+ "$ref": "#/definitions/attributeString"
646
+ },
647
+ "intercept": {
648
+ "$ref": "#/definitions/attributeString"
649
+ },
650
+ "k1": {
651
+ "$ref": "#/definitions/attributeString"
652
+ },
653
+ "k2": {
654
+ "$ref": "#/definitions/attributeString"
655
+ },
656
+ "k3": {
657
+ "$ref": "#/definitions/attributeString"
658
+ },
659
+ "k4": {
660
+ "$ref": "#/definitions/attributeString"
661
+ },
662
+ "kernelMatrix": {
663
+ "$ref": "#/definitions/attributeString"
664
+ },
665
+ "kernelUnitLength": {
666
+ "$ref": "#/definitions/attributeString"
667
+ },
668
+ "lang": {
669
+ "$ref": "#/definitions/attributeString"
670
+ },
671
+ "lengthAdjust": {
672
+ "$ref": "#/definitions/attributeString"
673
+ },
674
+ "letter-spacing": {
675
+ "$ref": "#/definitions/attributeString"
676
+ },
387
677
  "lighting-color": {
388
678
  "$ref": "#/definitions/colorValue"
389
679
  },
390
- "marker-end": { "$ref": "#/definitions/attributeString" },
391
- "marker-mid": { "$ref": "#/definitions/attributeString" },
392
- "marker-start": { "$ref": "#/definitions/attributeString" },
393
- "markerHeight": { "$ref": "#/definitions/attributeString" },
394
- "markerUnits": { "$ref": "#/definitions/attributeString" },
395
- "markerWidth": { "$ref": "#/definitions/attributeString" },
396
- "mask": { "$ref": "#/definitions/attributeString" },
397
- "maskContentUnits": { "$ref": "#/definitions/attributeString" },
398
- "maskUnits": { "$ref": "#/definitions/attributeString" },
399
- "media": { "$ref": "#/definitions/attributeString" },
400
- "method": { "$ref": "#/definitions/attributeString" },
401
- "mode": { "$ref": "#/definitions/attributeString" },
402
- "numOctaves": { "$ref": "#/definitions/attributeString" },
403
- "offset": { "$ref": "#/definitions/attributeString" },
404
- "opacity": { "$ref": "#/definitions/attributeString" },
405
- "operator": { "$ref": "#/definitions/attributeString" },
406
- "order": { "$ref": "#/definitions/attributeString" },
407
- "orient": { "$ref": "#/definitions/attributeString" },
408
- "overflow": { "$ref": "#/definitions/attributeString" },
409
- "paint-order": { "$ref": "#/definitions/attributeString" },
410
- "path": { "$ref": "#/definitions/attributeString" },
411
- "pathLength": { "$ref": "#/definitions/attributeString" },
412
- "patternContentUnits": { "$ref": "#/definitions/attributeString" },
413
- "patternTransform": { "$ref": "#/definitions/attributeString" },
414
- "patternUnits": { "$ref": "#/definitions/attributeString" },
415
- "points": { "$ref": "#/definitions/attributeString" },
416
- "preserveAlpha": { "$ref": "#/definitions/attributeString" },
417
- "preserveAspectRatio": { "$ref": "#/definitions/attributeString" },
418
- "primitiveUnits": { "$ref": "#/definitions/attributeString" },
419
- "r": { "$ref": "#/definitions/attributeString" },
420
- "radius": { "$ref": "#/definitions/attributeString" },
421
- "refX": { "$ref": "#/definitions/attributeString" },
422
- "refY": { "$ref": "#/definitions/attributeString" },
423
- "result": { "$ref": "#/definitions/attributeString" },
424
- "rx": { "$ref": "#/definitions/attributeString" },
425
- "ry": { "$ref": "#/definitions/attributeString" },
426
- "scale": { "$ref": "#/definitions/attributeString" },
427
- "seed": { "$ref": "#/definitions/attributeString" },
428
- "shape-rendering": { "$ref": "#/definitions/attributeString" },
429
- "slope": { "$ref": "#/definitions/attributeString" },
430
- "specularConstant": { "$ref": "#/definitions/attributeString" },
431
- "specularExponent": { "$ref": "#/definitions/attributeString" },
432
- "spreadMethod": { "$ref": "#/definitions/attributeString" },
433
- "startOffset": { "$ref": "#/definitions/attributeString" },
434
- "stdDeviation": { "$ref": "#/definitions/attributeString" },
435
- "stitchTiles": { "$ref": "#/definitions/attributeString" },
680
+ "marker-end": {
681
+ "$ref": "#/definitions/attributeString"
682
+ },
683
+ "marker-mid": {
684
+ "$ref": "#/definitions/attributeString"
685
+ },
686
+ "marker-start": {
687
+ "$ref": "#/definitions/attributeString"
688
+ },
689
+ "markerHeight": {
690
+ "$ref": "#/definitions/attributeString"
691
+ },
692
+ "markerUnits": {
693
+ "$ref": "#/definitions/attributeString"
694
+ },
695
+ "markerWidth": {
696
+ "$ref": "#/definitions/attributeString"
697
+ },
698
+ "mask": {
699
+ "$ref": "#/definitions/attributeString"
700
+ },
701
+ "maskContentUnits": {
702
+ "$ref": "#/definitions/attributeString"
703
+ },
704
+ "maskUnits": {
705
+ "$ref": "#/definitions/attributeString"
706
+ },
707
+ "media": {
708
+ "$ref": "#/definitions/attributeString"
709
+ },
710
+ "method": {
711
+ "$ref": "#/definitions/attributeString"
712
+ },
713
+ "mode": {
714
+ "$ref": "#/definitions/attributeString"
715
+ },
716
+ "numOctaves": {
717
+ "$ref": "#/definitions/attributeString"
718
+ },
719
+ "offset": {
720
+ "$ref": "#/definitions/attributeString"
721
+ },
722
+ "opacity": {
723
+ "$ref": "#/definitions/attributeString"
724
+ },
725
+ "operator": {
726
+ "$ref": "#/definitions/attributeString"
727
+ },
728
+ "order": {
729
+ "$ref": "#/definitions/attributeString"
730
+ },
731
+ "orient": {
732
+ "$ref": "#/definitions/attributeString"
733
+ },
734
+ "overflow": {
735
+ "$ref": "#/definitions/attributeString"
736
+ },
737
+ "paint-order": {
738
+ "$ref": "#/definitions/attributeString"
739
+ },
740
+ "path": {
741
+ "$ref": "#/definitions/attributeString"
742
+ },
743
+ "pathLength": {
744
+ "$ref": "#/definitions/attributeString"
745
+ },
746
+ "patternContentUnits": {
747
+ "$ref": "#/definitions/attributeString"
748
+ },
749
+ "patternTransform": {
750
+ "$ref": "#/definitions/attributeString"
751
+ },
752
+ "patternUnits": {
753
+ "$ref": "#/definitions/attributeString"
754
+ },
755
+ "points": {
756
+ "$ref": "#/definitions/attributeString"
757
+ },
758
+ "preserveAlpha": {
759
+ "$ref": "#/definitions/attributeString"
760
+ },
761
+ "preserveAspectRatio": {
762
+ "$ref": "#/definitions/attributeString"
763
+ },
764
+ "primitiveUnits": {
765
+ "$ref": "#/definitions/attributeString"
766
+ },
767
+ "r": {
768
+ "$ref": "#/definitions/attributeString"
769
+ },
770
+ "radius": {
771
+ "$ref": "#/definitions/attributeString"
772
+ },
773
+ "refX": {
774
+ "$ref": "#/definitions/attributeString"
775
+ },
776
+ "refY": {
777
+ "$ref": "#/definitions/attributeString"
778
+ },
779
+ "result": {
780
+ "$ref": "#/definitions/attributeString"
781
+ },
782
+ "rx": {
783
+ "$ref": "#/definitions/attributeString"
784
+ },
785
+ "ry": {
786
+ "$ref": "#/definitions/attributeString"
787
+ },
788
+ "scale": {
789
+ "$ref": "#/definitions/attributeString"
790
+ },
791
+ "seed": {
792
+ "$ref": "#/definitions/attributeString"
793
+ },
794
+ "shape-rendering": {
795
+ "$ref": "#/definitions/attributeString"
796
+ },
797
+ "slope": {
798
+ "$ref": "#/definitions/attributeString"
799
+ },
800
+ "specularConstant": {
801
+ "$ref": "#/definitions/attributeString"
802
+ },
803
+ "specularExponent": {
804
+ "$ref": "#/definitions/attributeString"
805
+ },
806
+ "spreadMethod": {
807
+ "$ref": "#/definitions/attributeString"
808
+ },
809
+ "startOffset": {
810
+ "$ref": "#/definitions/attributeString"
811
+ },
812
+ "stdDeviation": {
813
+ "$ref": "#/definitions/attributeString"
814
+ },
815
+ "stitchTiles": {
816
+ "$ref": "#/definitions/attributeString"
817
+ },
436
818
  "stop-color": {
437
819
  "$ref": "#/definitions/colorValue"
438
820
  },
439
- "stop-opacity": { "$ref": "#/definitions/attributeString" },
440
- "stroke": { "$ref": "#/definitions/colorValue" },
441
- "stroke-dasharray": { "$ref": "#/definitions/attributeString" },
442
- "stroke-dashoffset": { "$ref": "#/definitions/attributeString" },
443
- "stroke-linecap": { "$ref": "#/definitions/attributeString" },
444
- "stroke-linejoin": { "$ref": "#/definitions/attributeString" },
445
- "stroke-miterlimit": { "$ref": "#/definitions/attributeString" },
446
- "stroke-opacity": { "$ref": "#/definitions/attributeString" },
447
- "stroke-width": { "$ref": "#/definitions/attributeString" },
448
- "style": { "$ref": "#/definitions/cssString" },
449
- "surfaceScale": { "$ref": "#/definitions/attributeString" },
450
- "systemLanguage": { "$ref": "#/definitions/attributeString" },
451
- "tabindex": { "$ref": "#/definitions/attributeString" },
452
- "tableValues": { "$ref": "#/definitions/attributeString" },
453
- "targetX": { "$ref": "#/definitions/attributeString" },
454
- "targetY": { "$ref": "#/definitions/attributeString" },
455
- "text-anchor": { "$ref": "#/definitions/attributeString" },
456
- "text-decoration": { "$ref": "#/definitions/attributeString" },
457
- "text-rendering": { "$ref": "#/definitions/attributeString" },
458
- "textLength": { "$ref": "#/definitions/attributeString" },
459
- "transform": { "$ref": "#/definitions/attributeString" },
460
- "transform-origin": { "$ref": "#/definitions/attributeString" },
461
- "type": { "$ref": "#/definitions/attributeString" },
462
- "values": { "$ref": "#/definitions/attributeString" },
463
- "viewBox": { "$ref": "#/definitions/attributeString" },
464
- "visibility": { "$ref": "#/definitions/attributeString" },
465
- "width": { "$ref": "#/definitions/attributeString" },
466
- "word-spacing": { "$ref": "#/definitions/attributeString" },
467
- "writing-mode": { "$ref": "#/definitions/attributeString" },
468
- "x": { "$ref": "#/definitions/attributeString" },
469
- "x1": { "$ref": "#/definitions/attributeString" },
470
- "x2": { "$ref": "#/definitions/attributeString" },
471
- "xChannelSelector": { "$ref": "#/definitions/attributeString" },
472
- "y": { "$ref": "#/definitions/attributeString" },
473
- "y1": { "$ref": "#/definitions/attributeString" },
474
- "y2": { "$ref": "#/definitions/attributeString" },
475
- "yChannelSelector": { "$ref": "#/definitions/attributeString" },
476
- "z": { "$ref": "#/definitions/attributeString" }
821
+ "stop-opacity": {
822
+ "$ref": "#/definitions/attributeString"
823
+ },
824
+ "stroke": {
825
+ "$ref": "#/definitions/colorValue"
826
+ },
827
+ "stroke-dasharray": {
828
+ "$ref": "#/definitions/attributeString"
829
+ },
830
+ "stroke-dashoffset": {
831
+ "$ref": "#/definitions/attributeString"
832
+ },
833
+ "stroke-linecap": {
834
+ "$ref": "#/definitions/attributeString"
835
+ },
836
+ "stroke-linejoin": {
837
+ "$ref": "#/definitions/attributeString"
838
+ },
839
+ "stroke-miterlimit": {
840
+ "$ref": "#/definitions/attributeString"
841
+ },
842
+ "stroke-opacity": {
843
+ "$ref": "#/definitions/attributeString"
844
+ },
845
+ "stroke-width": {
846
+ "$ref": "#/definitions/attributeString"
847
+ },
848
+ "style": {
849
+ "$ref": "#/definitions/cssString"
850
+ },
851
+ "surfaceScale": {
852
+ "$ref": "#/definitions/attributeString"
853
+ },
854
+ "systemLanguage": {
855
+ "$ref": "#/definitions/attributeString"
856
+ },
857
+ "tabindex": {
858
+ "$ref": "#/definitions/attributeString"
859
+ },
860
+ "tableValues": {
861
+ "$ref": "#/definitions/attributeString"
862
+ },
863
+ "targetX": {
864
+ "$ref": "#/definitions/attributeString"
865
+ },
866
+ "targetY": {
867
+ "$ref": "#/definitions/attributeString"
868
+ },
869
+ "text-anchor": {
870
+ "$ref": "#/definitions/attributeString"
871
+ },
872
+ "text-decoration": {
873
+ "$ref": "#/definitions/attributeString"
874
+ },
875
+ "text-rendering": {
876
+ "$ref": "#/definitions/attributeString"
877
+ },
878
+ "textLength": {
879
+ "$ref": "#/definitions/attributeString"
880
+ },
881
+ "transform": {
882
+ "$ref": "#/definitions/attributeString"
883
+ },
884
+ "transform-origin": {
885
+ "$ref": "#/definitions/attributeString"
886
+ },
887
+ "type": {
888
+ "$ref": "#/definitions/attributeString"
889
+ },
890
+ "values": {
891
+ "$ref": "#/definitions/attributeString"
892
+ },
893
+ "viewBox": {
894
+ "$ref": "#/definitions/attributeString"
895
+ },
896
+ "visibility": {
897
+ "$ref": "#/definitions/attributeString"
898
+ },
899
+ "width": {
900
+ "$ref": "#/definitions/attributeString"
901
+ },
902
+ "word-spacing": {
903
+ "$ref": "#/definitions/attributeString"
904
+ },
905
+ "writing-mode": {
906
+ "$ref": "#/definitions/attributeString"
907
+ },
908
+ "x": {
909
+ "$ref": "#/definitions/attributeString"
910
+ },
911
+ "x1": {
912
+ "$ref": "#/definitions/attributeString"
913
+ },
914
+ "x2": {
915
+ "$ref": "#/definitions/attributeString"
916
+ },
917
+ "xChannelSelector": {
918
+ "$ref": "#/definitions/attributeString"
919
+ },
920
+ "y": {
921
+ "$ref": "#/definitions/attributeString"
922
+ },
923
+ "y1": {
924
+ "$ref": "#/definitions/attributeString"
925
+ },
926
+ "y2": {
927
+ "$ref": "#/definitions/attributeString"
928
+ },
929
+ "yChannelSelector": {
930
+ "$ref": "#/definitions/attributeString"
931
+ },
932
+ "z": {
933
+ "$ref": "#/definitions/attributeString"
934
+ }
477
935
  },
478
936
  "additionalProperties": false
479
937
  },
@@ -487,9 +945,21 @@
487
945
  "description": "A rotation in degrees. Defines a range the PRNG picks from. Set `min === max` for a fixed angle. A positive `step` quantizes the range to multiples of `step` starting at `min`; omit for a continuous range. When `(max - min)` is not a multiple of `step`, `max` itself is unreachable — the last bucket is clamped to `≤ max`.",
488
946
  "type": "object",
489
947
  "properties": {
490
- "min": { "type": "number", "minimum": -360, "maximum": 360 },
491
- "max": { "type": "number", "minimum": -360, "maximum": 360 },
492
- "step": { "type": "number", "exclusiveMinimum": 0, "maximum": 720 }
948
+ "min": {
949
+ "type": "number",
950
+ "minimum": -360,
951
+ "maximum": 360
952
+ },
953
+ "max": {
954
+ "type": "number",
955
+ "minimum": -360,
956
+ "maximum": 360
957
+ },
958
+ "step": {
959
+ "type": "number",
960
+ "exclusiveMinimum": 0,
961
+ "maximum": 720
962
+ }
493
963
  },
494
964
  "required": ["min", "max"],
495
965
  "additionalProperties": false
@@ -498,9 +968,21 @@
498
968
  "description": "A scale factor around the component's own center (`1` corresponds to the original size). Defines a range the PRNG picks from. Set `min === max` for a fixed scale. A positive `step` quantizes the range to multiples of `step` starting at `min`; omit for a continuous range. When `(max - min)` is not a multiple of `step`, `max` itself is unreachable — the last bucket is clamped to `≤ max`.",
499
969
  "type": "object",
500
970
  "properties": {
501
- "min": { "type": "number", "minimum": 0, "maximum": 10 },
502
- "max": { "type": "number", "minimum": 0, "maximum": 10 },
503
- "step": { "type": "number", "exclusiveMinimum": 0, "maximum": 10 }
971
+ "min": {
972
+ "type": "number",
973
+ "minimum": 0,
974
+ "maximum": 10
975
+ },
976
+ "max": {
977
+ "type": "number",
978
+ "minimum": 0,
979
+ "maximum": 10
980
+ },
981
+ "step": {
982
+ "type": "number",
983
+ "exclusiveMinimum": 0,
984
+ "maximum": 10
985
+ }
504
986
  },
505
987
  "required": ["min", "max"],
506
988
  "additionalProperties": false
@@ -509,8 +991,12 @@
509
991
  "description": "A positional translation applied to the component after placement. Values are interpreted as a percentage of the component's size.",
510
992
  "type": "object",
511
993
  "properties": {
512
- "x": { "$ref": "#/definitions/translateValue" },
513
- "y": { "$ref": "#/definitions/translateValue" }
994
+ "x": {
995
+ "$ref": "#/definitions/translateValue"
996
+ },
997
+ "y": {
998
+ "$ref": "#/definitions/translateValue"
999
+ }
514
1000
  },
515
1001
  "additionalProperties": false
516
1002
  },
@@ -530,21 +1016,33 @@
530
1016
  "minimum": 1,
531
1017
  "maximum": 1000000
532
1018
  },
533
- "probability": { "$ref": "#/definitions/componentProbability" },
534
- "rotate": { "$ref": "#/definitions/componentRotate" },
535
- "scale": { "$ref": "#/definitions/componentScale" },
536
- "translate": { "$ref": "#/definitions/componentTranslate" },
1019
+ "probability": {
1020
+ "$ref": "#/definitions/componentProbability"
1021
+ },
1022
+ "rotate": {
1023
+ "$ref": "#/definitions/componentRotate"
1024
+ },
1025
+ "scale": {
1026
+ "$ref": "#/definitions/componentScale"
1027
+ },
1028
+ "translate": {
1029
+ "$ref": "#/definitions/componentTranslate"
1030
+ },
537
1031
  "variants": {
538
1032
  "description": "The available visual variants of this component. The PRNG selects one variant per render. Keys must be `camelCaseName` identifiers.",
539
1033
  "type": "object",
540
- "propertyNames": { "$ref": "#/definitions/camelCaseName" },
1034
+ "propertyNames": {
1035
+ "$ref": "#/definitions/camelCaseName"
1036
+ },
541
1037
  "additionalProperties": {
542
1038
  "type": "object",
543
1039
  "properties": {
544
1040
  "elements": {
545
1041
  "description": "The SVG elements that make up this variant.",
546
1042
  "type": "array",
547
- "items": { "$ref": "#/definitions/element" },
1043
+ "items": {
1044
+ "$ref": "#/definitions/element"
1045
+ },
548
1046
  "maxItems": 1024
549
1047
  },
550
1048
  "weight": {
@@ -706,7 +1204,11 @@
706
1204
  },
707
1205
  "easing": {
708
1206
  "description": "The default easing for segments whose keyframes define none.",
709
- "allOf": [{ "$ref": "#/definitions/easingValue" }]
1207
+ "allOf": [
1208
+ {
1209
+ "$ref": "#/definitions/easingValue"
1210
+ }
1211
+ ]
710
1212
  },
711
1213
  "origin": {
712
1214
  "description": "The transform origin for `rotate` and `scale` tracks, as a percentage of the element's bounding box (`fill-box`). Defaults to the center (`x` 50, `y` 50).",
@@ -732,27 +1234,51 @@
732
1234
  "properties": {
733
1235
  "translateX": {
734
1236
  "description": "Horizontal offset in user units, relative to the element's resting position. Positive values move right.",
735
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1237
+ "allOf": [
1238
+ {
1239
+ "$ref": "#/definitions/animationTrack"
1240
+ }
1241
+ ]
736
1242
  },
737
1243
  "translateY": {
738
1244
  "description": "Vertical offset in user units, relative to the element's resting position. Positive values move down.",
739
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1245
+ "allOf": [
1246
+ {
1247
+ "$ref": "#/definitions/animationTrack"
1248
+ }
1249
+ ]
740
1250
  },
741
1251
  "rotate": {
742
1252
  "description": "Rotation in degrees around `origin`, added to the element's resting transform. Positive values rotate clockwise. Values are not normalized, `360` describes one full turn.",
743
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1253
+ "allOf": [
1254
+ {
1255
+ "$ref": "#/definitions/animationTrack"
1256
+ }
1257
+ ]
744
1258
  },
745
1259
  "scaleX": {
746
1260
  "description": "Horizontal scale factor around `origin`. `1` is the resting size.",
747
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1261
+ "allOf": [
1262
+ {
1263
+ "$ref": "#/definitions/animationTrack"
1264
+ }
1265
+ ]
748
1266
  },
749
1267
  "scaleY": {
750
1268
  "description": "Vertical scale factor around `origin`. `1` is the resting size.",
751
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1269
+ "allOf": [
1270
+ {
1271
+ "$ref": "#/definitions/animationTrack"
1272
+ }
1273
+ ]
752
1274
  },
753
1275
  "opacity": {
754
1276
  "description": "Opacity from 0 to 1. It replaces the element's own `opacity` attribute while the animation plays, so a layer hidden with `opacity=\"0\"` can be brought in by its animation.",
755
- "allOf": [{ "$ref": "#/definitions/animationTrack" }]
1277
+ "allOf": [
1278
+ {
1279
+ "$ref": "#/definitions/animationTrack"
1280
+ }
1281
+ ]
756
1282
  }
757
1283
  },
758
1284
  "minProperties": 1,
@@ -857,7 +1383,9 @@
857
1383
  "elements": {
858
1384
  "description": "The list of SVG elements that make up the avatar.",
859
1385
  "type": "array",
860
- "items": { "$ref": "#/definitions/element" },
1386
+ "items": {
1387
+ "$ref": "#/definitions/element"
1388
+ },
861
1389
  "maxItems": 1024
862
1390
  },
863
1391
  "width": {
@@ -879,11 +1407,17 @@
879
1407
  "components": {
880
1408
  "description": "Named, reusable SVG components. Each component defines a set of variants that the PRNG can select from at render time, or aliases another component to render an additional, independently-randomized instance of it. Keys must be `camelCaseName` identifiers.",
881
1409
  "type": "object",
882
- "propertyNames": { "$ref": "#/definitions/camelCaseName" },
1410
+ "propertyNames": {
1411
+ "$ref": "#/definitions/camelCaseName"
1412
+ },
883
1413
  "additionalProperties": {
884
1414
  "anyOf": [
885
- { "$ref": "#/definitions/componentBase" },
886
- { "$ref": "#/definitions/componentAlias" }
1415
+ {
1416
+ "$ref": "#/definitions/componentBase"
1417
+ },
1418
+ {
1419
+ "$ref": "#/definitions/componentAlias"
1420
+ }
887
1421
  ]
888
1422
  },
889
1423
  "maxProperties": 512
@@ -891,21 +1425,27 @@
891
1425
  "colors": {
892
1426
  "description": "Named color palettes used by the avatar. The PRNG selects colors from these groups at render time. Color groups can define constraints such as contrast or exclusion rules. Keys must be `camelCaseName` identifiers.",
893
1427
  "type": "object",
894
- "propertyNames": { "$ref": "#/definitions/camelCaseName" },
1428
+ "propertyNames": {
1429
+ "$ref": "#/definitions/camelCaseName"
1430
+ },
895
1431
  "additionalProperties": {
896
1432
  "type": "object",
897
1433
  "properties": {
898
1434
  "values": {
899
1435
  "description": "The list of hex color values the PRNG can choose from. The order carries meaning for a user who sets the `*ColorOrder` render option to `fixed` without colors of their own: the palette is then used in exactly this order.",
900
1436
  "type": "array",
901
- "items": { "$ref": "#/definitions/hexColor" },
1437
+ "items": {
1438
+ "$ref": "#/definitions/hexColor"
1439
+ },
902
1440
  "minItems": 1,
903
1441
  "maxItems": 128
904
1442
  },
905
1443
  "notEqualTo": {
906
1444
  "description": "A list of other color names. The selected color value must differ from the color values selected in those colors. The schema does not prevent cycles (e.g. `a` notEqualTo `b` and `b` notEqualTo `a`); renderers resolve palettes in definition order and must reject unsatisfiable configurations at load time.",
907
1445
  "type": "array",
908
- "items": { "$ref": "#/definitions/colorName" },
1446
+ "items": {
1447
+ "$ref": "#/definitions/colorName"
1448
+ },
909
1449
  "maxItems": 64
910
1450
  },
911
1451
  "contrastTo": {