@ludic-labs/assembly 0.0.0-stage → 0.4.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 (78) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/LICENSE +2 -0
  3. package/README.md +50 -2
  4. package/dist/bake.d.ts +80 -0
  5. package/dist/bake.js +214 -0
  6. package/dist/browser.d.ts +89 -0
  7. package/dist/browser.js +534 -0
  8. package/dist/compat.d.ts +17 -0
  9. package/dist/compat.js +153 -0
  10. package/dist/compiler.d.ts +18 -0
  11. package/dist/compiler.js +1264 -0
  12. package/dist/diagnostics.d.ts +5 -0
  13. package/dist/diagnostics.js +8 -0
  14. package/dist/export.d.ts +54 -0
  15. package/dist/export.js +272 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.js +3 -0
  18. package/dist/legacy.d.ts +36 -0
  19. package/dist/legacy.js +180 -0
  20. package/dist/math.d.ts +16 -0
  21. package/dist/math.js +62 -0
  22. package/dist/mesh.d.ts +11 -0
  23. package/dist/mesh.js +153 -0
  24. package/dist/motion.d.ts +63 -0
  25. package/dist/motion.js +1476 -0
  26. package/dist/pixel.d.ts +268 -0
  27. package/dist/pixel.js +942 -0
  28. package/dist/required.d.ts +2 -0
  29. package/dist/required.js +6 -0
  30. package/dist/shapes.d.ts +71 -0
  31. package/dist/shapes.js +396 -0
  32. package/dist/sprite-brief.d.ts +5 -0
  33. package/dist/sprite-brief.js +47 -0
  34. package/dist/sprite-compiler.d.ts +62 -0
  35. package/dist/sprite-compiler.js +1745 -0
  36. package/dist/sprite-decompile.d.ts +68 -0
  37. package/dist/sprite-decompile.js +786 -0
  38. package/dist/sprite-format.d.ts +4 -0
  39. package/dist/sprite-format.js +155 -0
  40. package/dist/sprite-guide.d.ts +40 -0
  41. package/dist/sprite-guide.js +330 -0
  42. package/dist/sprite-scene.d.ts +277 -0
  43. package/dist/sprite-scene.js +664 -0
  44. package/dist/sprite-types.d.ts +110 -0
  45. package/dist/sprite-types.js +1 -0
  46. package/dist/sprite.d.ts +8 -0
  47. package/dist/sprite.js +8 -0
  48. package/dist/svg/schema.d.ts +71 -0
  49. package/dist/svg/schema.js +217 -0
  50. package/dist/svg/types.d.ts +148 -0
  51. package/dist/svg/types.js +1 -0
  52. package/dist/svg.d.ts +26 -0
  53. package/dist/svg.js +539 -0
  54. package/dist/text.d.ts +12 -0
  55. package/dist/text.js +75 -0
  56. package/dist/types.d.ts +478 -0
  57. package/dist/types.js +1 -0
  58. package/docs/svg/README.md +150 -0
  59. package/docs/svg/specification.md +108 -0
  60. package/examples/svg/arcane-shield.json +261 -0
  61. package/examples/svg/aurora-ribbon.json +158 -0
  62. package/examples/svg/bouncing-ember.json +76 -0
  63. package/examples/svg/ember-fountain.json +224 -0
  64. package/examples/svg/lantern-keeper.json +1159 -0
  65. package/examples/svg/night-workshop.json +1120 -0
  66. package/examples/svg/waygate-platform.json +64 -0
  67. package/examples/svg/waygate-spark.json +92 -0
  68. package/examples/svg/waygate-wisp.json +105 -0
  69. package/examples/svg/waygate.json +485 -0
  70. package/package.json +132 -4
  71. package/schemas/asset-assembly-0.1.schema.json +354 -0
  72. package/schemas/asset-assembly-0.2.schema.json +429 -0
  73. package/schemas/asset-assembly-0.3.schema.json +572 -0
  74. package/schemas/motion-set-0.1.schema.json +178 -0
  75. package/schemas/pixel-sprite-0.1.schema.json +892 -0
  76. package/schemas/pixel-sprite-scene-0.1.schema.json +149 -0
  77. package/schemas/svg-asset-0.1.schema.json +1157 -0
  78. package/tools/svg-asset.mjs +106 -0
@@ -0,0 +1,892 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://libraries.ludic-assembly.victorqueiroz.dev/pixel-sprite-0.1.schema.json",
4
+ "title": "pixel-sprite-0.1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "format": {
9
+ "const": "pixel-sprite/0.1"
10
+ },
11
+ "id": {
12
+ "type": "string"
13
+ },
14
+ "asset": {
15
+ "type": "string"
16
+ },
17
+ "notes": {},
18
+ "palette": {
19
+ "type": "object",
20
+ "additionalProperties": false,
21
+ "properties": {
22
+ "colors": {
23
+ "type": "object",
24
+ "additionalProperties": {
25
+ "type": "string",
26
+ "pattern": "^#([0-9a-fA-F]{6})([0-9a-fA-F]{2})?$"
27
+ }
28
+ },
29
+ "ramps": {
30
+ "type": "object",
31
+ "additionalProperties": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "string",
35
+ "pattern": "^#([0-9a-fA-F]{6})([0-9a-fA-F]{2})?$"
36
+ },
37
+ "minItems": 1
38
+ }
39
+ },
40
+ "keys": {
41
+ "type": "object",
42
+ "additionalProperties": {
43
+ "type": "string",
44
+ "minLength": 1
45
+ }
46
+ },
47
+ "keyWidth": {
48
+ "enum": [1, 2, 3]
49
+ },
50
+ "lock": {
51
+ "type": "boolean"
52
+ }
53
+ }
54
+ },
55
+ "parts": {
56
+ "oneOf": [
57
+ {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "string"
61
+ }
62
+ },
63
+ {
64
+ "type": "object",
65
+ "additionalProperties": {
66
+ "type": "object",
67
+ "additionalProperties": false,
68
+ "properties": {
69
+ "ramps": {
70
+ "type": "array",
71
+ "items": {
72
+ "type": "string"
73
+ }
74
+ },
75
+ "colors": {
76
+ "type": "array",
77
+ "items": {
78
+ "type": "string",
79
+ "minLength": 1
80
+ }
81
+ },
82
+ "notes": {}
83
+ }
84
+ }
85
+ }
86
+ ]
87
+ },
88
+ "stamps": {
89
+ "type": "object",
90
+ "additionalProperties": {
91
+ "type": "object",
92
+ "additionalProperties": false,
93
+ "properties": {
94
+ "pixels": {
95
+ "type": "array",
96
+ "items": {
97
+ "type": "string"
98
+ },
99
+ "minItems": 1
100
+ }
101
+ },
102
+ "required": ["pixels"]
103
+ },
104
+ "maxProperties": 256
105
+ },
106
+ "recipes": {
107
+ "type": "object",
108
+ "additionalProperties": {
109
+ "type": "array",
110
+ "items": {
111
+ "$ref": "#/$defs/layer"
112
+ }
113
+ }
114
+ },
115
+ "views": {
116
+ "type": "object",
117
+ "additionalProperties": {
118
+ "type": "object",
119
+ "additionalProperties": false,
120
+ "properties": {
121
+ "camera": {
122
+ "oneOf": [
123
+ {
124
+ "enum": ["dimetric", "dimetricRight", "dimetricOpposite", "dimetricLeft", "front", "topDown"]
125
+ },
126
+ {
127
+ "type": "object",
128
+ "additionalProperties": false,
129
+ "properties": {
130
+ "yaw": {
131
+ "type": "number"
132
+ },
133
+ "pitch": {
134
+ "type": "number"
135
+ }
136
+ },
137
+ "required": ["yaw", "pitch"]
138
+ }
139
+ ]
140
+ },
141
+ "pixelsPerMetre": {
142
+ "type": "number",
143
+ "exclusiveMinimum": 0
144
+ },
145
+ "margin": {
146
+ "type": "integer",
147
+ "minimum": 0
148
+ },
149
+ "hide": {
150
+ "type": "array",
151
+ "items": {
152
+ "type": "string"
153
+ }
154
+ },
155
+ "pose": {
156
+ "type": "object",
157
+ "additionalProperties": false,
158
+ "properties": {
159
+ "clip": {
160
+ "type": "string"
161
+ },
162
+ "phase": {
163
+ "type": "number"
164
+ }
165
+ },
166
+ "required": ["clip", "phase"]
167
+ },
168
+ "notes": {}
169
+ },
170
+ "required": ["camera", "pixelsPerMetre"]
171
+ }
172
+ },
173
+ "cels": {
174
+ "type": "object",
175
+ "additionalProperties": {
176
+ "type": "object",
177
+ "additionalProperties": false,
178
+ "properties": {
179
+ "size": {
180
+ "type": "array",
181
+ "items": {
182
+ "type": "integer",
183
+ "minimum": 1,
184
+ "maximum": 1024
185
+ },
186
+ "minItems": 2,
187
+ "maxItems": 2
188
+ },
189
+ "pivot": {
190
+ "type": "array",
191
+ "items": {
192
+ "type": "integer",
193
+ "minimum": -9007199254740991,
194
+ "maximum": 9007199254740991
195
+ },
196
+ "minItems": 2,
197
+ "maxItems": 2
198
+ },
199
+ "base": {
200
+ "oneOf": [
201
+ {
202
+ "type": "string"
203
+ },
204
+ {
205
+ "type": "object",
206
+ "additionalProperties": false,
207
+ "properties": {
208
+ "render": {
209
+ "type": "object",
210
+ "additionalProperties": false,
211
+ "properties": {
212
+ "camera": {
213
+ "oneOf": [
214
+ {
215
+ "enum": [
216
+ "dimetric",
217
+ "dimetricRight",
218
+ "dimetricOpposite",
219
+ "dimetricLeft",
220
+ "front",
221
+ "topDown"
222
+ ]
223
+ },
224
+ {
225
+ "type": "object",
226
+ "additionalProperties": false,
227
+ "properties": {
228
+ "yaw": {
229
+ "type": "number"
230
+ },
231
+ "pitch": {
232
+ "type": "number"
233
+ }
234
+ },
235
+ "required": ["yaw", "pitch"]
236
+ }
237
+ ]
238
+ },
239
+ "pixelsPerMetre": {
240
+ "type": "number",
241
+ "exclusiveMinimum": 0
242
+ },
243
+ "fitHeight": {
244
+ "type": "integer",
245
+ "minimum": 1,
246
+ "maximum": 1024,
247
+ "description": "Exact occupied row count; takes precedence over pixelsPerMetre."
248
+ },
249
+ "margin": {
250
+ "type": "integer",
251
+ "minimum": 0
252
+ },
253
+ "profile": {
254
+ "enum": ["arcade", "fantasy", "scene"]
255
+ },
256
+ "features": {
257
+ "type": "array",
258
+ "items": {
259
+ "type": "string"
260
+ }
261
+ },
262
+ "snap": {
263
+ "type": "boolean"
264
+ }
265
+ }
266
+ }
267
+ },
268
+ "required": ["render"]
269
+ }
270
+ ]
271
+ },
272
+ "flip": {
273
+ "enum": ["x", "y", "xy"]
274
+ },
275
+ "view": {
276
+ "type": "string"
277
+ },
278
+ "exempt": {
279
+ "type": "array",
280
+ "items": {
281
+ "type": "string"
282
+ }
283
+ },
284
+ "layers": {
285
+ "type": "array",
286
+ "items": {
287
+ "$ref": "#/$defs/layer"
288
+ },
289
+ "maxItems": 512
290
+ },
291
+ "notes": {}
292
+ }
293
+ },
294
+ "minProperties": 1,
295
+ "maxProperties": 4096
296
+ },
297
+ "animations": {
298
+ "type": "object",
299
+ "additionalProperties": {
300
+ "type": "object",
301
+ "additionalProperties": false,
302
+ "properties": {
303
+ "cels": {
304
+ "type": "array",
305
+ "items": {
306
+ "type": "string"
307
+ },
308
+ "minItems": 1
309
+ },
310
+ "ms": {
311
+ "oneOf": [
312
+ {
313
+ "type": "integer",
314
+ "minimum": 1
315
+ },
316
+ {
317
+ "type": "array",
318
+ "items": {
319
+ "type": "integer",
320
+ "minimum": 1
321
+ },
322
+ "minItems": 1
323
+ }
324
+ ]
325
+ },
326
+ "loop": {
327
+ "type": "boolean"
328
+ }
329
+ },
330
+ "required": ["cels"]
331
+ }
332
+ }
333
+ },
334
+ "required": ["format", "cels"],
335
+ "$defs": {
336
+ "at": {
337
+ "oneOf": [
338
+ {
339
+ "type": "array",
340
+ "items": {
341
+ "type": "integer",
342
+ "minimum": -9007199254740991,
343
+ "maximum": 9007199254740991
344
+ },
345
+ "minItems": 2,
346
+ "maxItems": 2
347
+ },
348
+ {
349
+ "type": "object",
350
+ "additionalProperties": false,
351
+ "properties": {
352
+ "part": {
353
+ "type": "string"
354
+ },
355
+ "corner": {
356
+ "$ref": "#/$defs/corner"
357
+ },
358
+ "offset": {
359
+ "type": "array",
360
+ "items": {
361
+ "type": "integer",
362
+ "minimum": -9007199254740991,
363
+ "maximum": 9007199254740991
364
+ },
365
+ "minItems": 2,
366
+ "maxItems": 2
367
+ }
368
+ },
369
+ "required": ["part"]
370
+ },
371
+ {
372
+ "type": "object",
373
+ "additionalProperties": false,
374
+ "properties": {
375
+ "guide": {
376
+ "type": "string"
377
+ },
378
+ "corner": {
379
+ "$ref": "#/$defs/corner"
380
+ },
381
+ "offset": {
382
+ "type": "array",
383
+ "items": {
384
+ "type": "integer",
385
+ "minimum": -9007199254740991,
386
+ "maximum": 9007199254740991
387
+ },
388
+ "minItems": 2,
389
+ "maxItems": 2
390
+ }
391
+ },
392
+ "required": ["guide"]
393
+ }
394
+ ]
395
+ },
396
+ "corner": {
397
+ "enum": ["top-left", "top-right", "bottom-left", "bottom-right", "center"]
398
+ },
399
+ "layer": {
400
+ "oneOf": [
401
+ {
402
+ "type": "object",
403
+ "additionalProperties": false,
404
+ "properties": {
405
+ "pixels": {
406
+ "type": "array",
407
+ "items": {
408
+ "type": "string"
409
+ },
410
+ "minItems": 1
411
+ },
412
+ "at": {
413
+ "$ref": "#/$defs/at"
414
+ },
415
+ "part": {
416
+ "type": "string"
417
+ },
418
+ "onPart": {
419
+ "oneOf": [
420
+ {
421
+ "type": "boolean"
422
+ },
423
+ {
424
+ "type": "string"
425
+ }
426
+ ]
427
+ }
428
+ },
429
+ "required": ["pixels"]
430
+ },
431
+ {
432
+ "type": "object",
433
+ "additionalProperties": false,
434
+ "properties": {
435
+ "rect": {
436
+ "oneOf": [
437
+ {
438
+ "type": "array",
439
+ "items": {
440
+ "type": "integer",
441
+ "minimum": -9007199254740991,
442
+ "maximum": 9007199254740991
443
+ },
444
+ "minItems": 4,
445
+ "maxItems": 4
446
+ },
447
+ {
448
+ "type": "object",
449
+ "additionalProperties": false,
450
+ "properties": {
451
+ "guide": {
452
+ "type": "string"
453
+ },
454
+ "grow": {
455
+ "type": "integer",
456
+ "minimum": -9007199254740991,
457
+ "maximum": 9007199254740991
458
+ }
459
+ },
460
+ "required": ["guide"]
461
+ }
462
+ ]
463
+ },
464
+ "fill": {
465
+ "type": "string",
466
+ "minLength": 1
467
+ },
468
+ "round": {
469
+ "enum": [0, 1]
470
+ },
471
+ "part": {
472
+ "type": "string"
473
+ }
474
+ },
475
+ "required": ["rect", "fill"]
476
+ },
477
+ {
478
+ "type": "object",
479
+ "additionalProperties": false,
480
+ "properties": {
481
+ "ellipse": {
482
+ "oneOf": [
483
+ {
484
+ "type": "array",
485
+ "items": {
486
+ "type": "integer",
487
+ "minimum": -9007199254740991,
488
+ "maximum": 9007199254740991
489
+ },
490
+ "minItems": 4,
491
+ "maxItems": 4
492
+ },
493
+ {
494
+ "type": "object",
495
+ "additionalProperties": false,
496
+ "properties": {
497
+ "guide": {
498
+ "type": "string"
499
+ },
500
+ "grow": {
501
+ "type": "integer",
502
+ "minimum": -9007199254740991,
503
+ "maximum": 9007199254740991
504
+ }
505
+ },
506
+ "required": ["guide"]
507
+ }
508
+ ]
509
+ },
510
+ "fill": {
511
+ "type": "string",
512
+ "minLength": 1
513
+ },
514
+ "part": {
515
+ "type": "string"
516
+ }
517
+ },
518
+ "required": ["ellipse", "fill"]
519
+ },
520
+ {
521
+ "type": "object",
522
+ "additionalProperties": false,
523
+ "properties": {
524
+ "line": {
525
+ "type": "array",
526
+ "items": {
527
+ "type": "array",
528
+ "items": {
529
+ "type": "integer",
530
+ "minimum": -9007199254740991,
531
+ "maximum": 9007199254740991
532
+ },
533
+ "minItems": 2,
534
+ "maxItems": 2
535
+ },
536
+ "minItems": 2
537
+ },
538
+ "color": {
539
+ "type": "string",
540
+ "minLength": 1
541
+ },
542
+ "part": {
543
+ "type": "string"
544
+ }
545
+ },
546
+ "required": ["line", "color"]
547
+ },
548
+ {
549
+ "type": "object",
550
+ "additionalProperties": false,
551
+ "properties": {
552
+ "stamp": {
553
+ "type": "string"
554
+ },
555
+ "at": {
556
+ "oneOf": [
557
+ {
558
+ "$ref": "#/$defs/at"
559
+ },
560
+ {
561
+ "type": "array",
562
+ "items": {
563
+ "type": "array",
564
+ "items": {
565
+ "type": "integer",
566
+ "minimum": -9007199254740991,
567
+ "maximum": 9007199254740991
568
+ },
569
+ "minItems": 2,
570
+ "maxItems": 2
571
+ },
572
+ "minItems": 1
573
+ }
574
+ ]
575
+ },
576
+ "flip": {
577
+ "enum": ["", "x", "y", "xy"]
578
+ },
579
+ "part": {
580
+ "type": "string"
581
+ },
582
+ "onPart": {
583
+ "oneOf": [
584
+ {
585
+ "type": "boolean"
586
+ },
587
+ {
588
+ "type": "string"
589
+ }
590
+ ]
591
+ }
592
+ },
593
+ "required": ["stamp"]
594
+ },
595
+ {
596
+ "type": "object",
597
+ "additionalProperties": false,
598
+ "properties": {
599
+ "outline": {
600
+ "type": "string",
601
+ "minLength": 1
602
+ },
603
+ "parts": {
604
+ "type": "array",
605
+ "items": {
606
+ "type": "string"
607
+ },
608
+ "minItems": 1
609
+ },
610
+ "side": {
611
+ "enum": ["outside", "inside"]
612
+ },
613
+ "corners": {
614
+ "type": "boolean"
615
+ },
616
+ "against": {
617
+ "enum": ["empty", "any"]
618
+ }
619
+ },
620
+ "required": ["outline"]
621
+ },
622
+ {
623
+ "type": "object",
624
+ "additionalProperties": false,
625
+ "properties": {
626
+ "bevel": {
627
+ "type": "object",
628
+ "additionalProperties": false,
629
+ "properties": {
630
+ "light": {
631
+ "type": "string",
632
+ "minLength": 1
633
+ },
634
+ "shadow": {
635
+ "type": "string",
636
+ "minLength": 1
637
+ }
638
+ },
639
+ "minProperties": 1
640
+ },
641
+ "parts": {
642
+ "type": "array",
643
+ "items": {
644
+ "type": "string"
645
+ },
646
+ "minItems": 1
647
+ },
648
+ "width": {
649
+ "type": "integer",
650
+ "minimum": 1,
651
+ "maximum": 8
652
+ },
653
+ "dir": {
654
+ "enum": ["upper-left", "upper-right", "lower-left", "lower-right"]
655
+ },
656
+ "through": {
657
+ "type": "array",
658
+ "items": {
659
+ "type": "string"
660
+ },
661
+ "minItems": 1
662
+ },
663
+ "keep": {
664
+ "type": "array",
665
+ "items": {
666
+ "type": "string",
667
+ "minLength": 1
668
+ },
669
+ "minItems": 1
670
+ }
671
+ },
672
+ "required": ["bevel"]
673
+ },
674
+ {
675
+ "type": "object",
676
+ "additionalProperties": false,
677
+ "properties": {
678
+ "speck": {
679
+ "type": "string",
680
+ "minLength": 1
681
+ },
682
+ "parts": {
683
+ "type": "array",
684
+ "items": {
685
+ "type": "string"
686
+ },
687
+ "minItems": 1
688
+ },
689
+ "count": {
690
+ "type": "integer",
691
+ "minimum": 1,
692
+ "maximum": 4096
693
+ },
694
+ "seed": {
695
+ "type": "integer"
696
+ },
697
+ "inset": {
698
+ "type": "integer",
699
+ "minimum": 0
700
+ }
701
+ },
702
+ "required": ["speck"]
703
+ },
704
+ {
705
+ "type": "object",
706
+ "additionalProperties": false,
707
+ "properties": {
708
+ "mirror": {
709
+ "enum": ["x", "y"]
710
+ },
711
+ "parts": {
712
+ "type": "array",
713
+ "items": {
714
+ "type": "string"
715
+ },
716
+ "minItems": 1
717
+ }
718
+ },
719
+ "required": ["mirror"]
720
+ },
721
+ {
722
+ "type": "object",
723
+ "additionalProperties": false,
724
+ "properties": {
725
+ "recolor": {
726
+ "type": "object",
727
+ "additionalProperties": {
728
+ "type": "string",
729
+ "minLength": 1
730
+ },
731
+ "minProperties": 1
732
+ },
733
+ "parts": {
734
+ "type": "array",
735
+ "items": {
736
+ "type": "string"
737
+ },
738
+ "minItems": 1
739
+ }
740
+ },
741
+ "required": ["recolor"]
742
+ },
743
+ {
744
+ "type": "object",
745
+ "additionalProperties": false,
746
+ "properties": {
747
+ "repaint": {
748
+ "type": "string",
749
+ "minLength": 1
750
+ },
751
+ "parts": {
752
+ "type": "array",
753
+ "items": {
754
+ "type": "string"
755
+ },
756
+ "minItems": 1
757
+ },
758
+ "keep": {
759
+ "type": "array",
760
+ "items": {
761
+ "type": "string",
762
+ "minLength": 1
763
+ },
764
+ "minItems": 1
765
+ }
766
+ },
767
+ "required": ["repaint", "parts"]
768
+ },
769
+ {
770
+ "type": "object",
771
+ "additionalProperties": false,
772
+ "properties": {
773
+ "move": {
774
+ "type": "array",
775
+ "items": {
776
+ "type": "integer",
777
+ "minimum": -9007199254740991,
778
+ "maximum": 9007199254740991
779
+ },
780
+ "minItems": 2,
781
+ "maxItems": 2
782
+ },
783
+ "parts": {
784
+ "type": "array",
785
+ "items": {
786
+ "type": "string"
787
+ },
788
+ "minItems": 1
789
+ }
790
+ },
791
+ "required": ["move", "parts"]
792
+ },
793
+ {
794
+ "type": "object",
795
+ "additionalProperties": false,
796
+ "properties": {
797
+ "silhouette": {
798
+ "oneOf": [
799
+ {
800
+ "type": "string"
801
+ },
802
+ {
803
+ "type": "array",
804
+ "items": {
805
+ "type": "string"
806
+ },
807
+ "minItems": 1
808
+ }
809
+ ]
810
+ },
811
+ "fill": {
812
+ "type": "string",
813
+ "minLength": 1
814
+ },
815
+ "part": {
816
+ "type": "string"
817
+ }
818
+ },
819
+ "required": ["silhouette", "fill"]
820
+ },
821
+ {
822
+ "type": "object",
823
+ "additionalProperties": false,
824
+ "properties": {
825
+ "shade": {
826
+ "oneOf": [
827
+ {
828
+ "type": "string",
829
+ "minLength": 1
830
+ },
831
+ {
832
+ "const": true
833
+ },
834
+ {
835
+ "type": "object",
836
+ "additionalProperties": {
837
+ "type": "string",
838
+ "minLength": 1
839
+ },
840
+ "minProperties": 1
841
+ }
842
+ ]
843
+ },
844
+ "parts": {
845
+ "type": "array",
846
+ "items": {
847
+ "type": "string"
848
+ },
849
+ "minItems": 1
850
+ },
851
+ "guides": {
852
+ "type": "object",
853
+ "additionalProperties": {
854
+ "type": "string"
855
+ }
856
+ }
857
+ },
858
+ "required": ["shade"]
859
+ },
860
+ {
861
+ "type": "object",
862
+ "additionalProperties": false,
863
+ "properties": {
864
+ "recipe": {
865
+ "type": "string"
866
+ }
867
+ },
868
+ "required": ["recipe"]
869
+ },
870
+ {
871
+ "type": "object",
872
+ "additionalProperties": false,
873
+ "properties": {
874
+ "use": {
875
+ "type": "string"
876
+ },
877
+ "at": {
878
+ "$ref": "#/$defs/at"
879
+ },
880
+ "flip": {
881
+ "enum": ["", "x", "y", "xy"]
882
+ },
883
+ "part": {
884
+ "type": "string"
885
+ }
886
+ },
887
+ "required": ["use"]
888
+ }
889
+ ]
890
+ }
891
+ }
892
+ }