@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,1157 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://libraries.ludic-assembly.victorqueiroz.dev/schema/svg-asset-0.1.json",
4
+ "title": "SVG Asset Notation 0.1",
5
+ "description": "Structural validation. compileSvgAsset additionally validates references, scopes, cycles, key ordering and evaluated geometry.",
6
+ "type": "object",
7
+ "properties": {
8
+ "schema": { "const": "svg-asset/0.1" },
9
+ "name": { "type": "string", "maxLength": 120, "minLength": 1 },
10
+ "viewBox": {
11
+ "type": "array",
12
+ "prefixItems": [
13
+ { "type": "number", "minimum": -1000000, "maximum": 1000000 },
14
+ { "type": "number", "minimum": -1000000, "maximum": 1000000 },
15
+ { "type": "number", "minimum": 0, "maximum": 1000000, "exclusiveMinimum": 0 },
16
+ { "type": "number", "minimum": 0, "maximum": 1000000, "exclusiveMinimum": 0 }
17
+ ],
18
+ "items": false,
19
+ "minItems": 4,
20
+ "maxItems": 4
21
+ },
22
+ "seed": { "type": "integer", "minimum": 0, "maximum": 4294967295 },
23
+ "params": {
24
+ "type": "object",
25
+ "propertyNames": {
26
+ "type": "string",
27
+ "maxLength": 64,
28
+ "minLength": 1,
29
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
30
+ },
31
+ "additionalProperties": {
32
+ "type": "object",
33
+ "properties": {
34
+ "default": { "type": "number", "minimum": -1000000, "maximum": 1000000 },
35
+ "min": { "type": "number", "minimum": -1000000, "maximum": 1000000 },
36
+ "max": { "type": "number", "minimum": -1000000, "maximum": 1000000 }
37
+ },
38
+ "required": ["default", "min", "max"],
39
+ "additionalProperties": false
40
+ },
41
+ "maxProperties": 128
42
+ },
43
+ "palette": {
44
+ "type": "object",
45
+ "propertyNames": {
46
+ "type": "string",
47
+ "maxLength": 64,
48
+ "minLength": 1,
49
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
50
+ },
51
+ "additionalProperties": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
52
+ "maxProperties": 128
53
+ },
54
+ "gradients": {
55
+ "type": "object",
56
+ "propertyNames": {
57
+ "type": "string",
58
+ "maxLength": 64,
59
+ "minLength": 1,
60
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
61
+ },
62
+ "additionalProperties": { "$ref": "#/$defs/gradient" },
63
+ "maxProperties": 128
64
+ },
65
+ "clips": {
66
+ "type": "object",
67
+ "propertyNames": {
68
+ "type": "string",
69
+ "maxLength": 64,
70
+ "minLength": 1,
71
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
72
+ },
73
+ "additionalProperties": {
74
+ "type": "array",
75
+ "items": { "$ref": "#/$defs/shape" },
76
+ "minItems": 1,
77
+ "maxItems": 512
78
+ },
79
+ "maxProperties": 128
80
+ },
81
+ "masks": {
82
+ "type": "object",
83
+ "propertyNames": {
84
+ "type": "string",
85
+ "maxLength": 64,
86
+ "minLength": 1,
87
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
88
+ },
89
+ "additionalProperties": {
90
+ "type": "array",
91
+ "items": { "$ref": "#/$defs/shape" },
92
+ "minItems": 1,
93
+ "maxItems": 512
94
+ },
95
+ "maxProperties": 128
96
+ },
97
+ "symbols": {
98
+ "type": "object",
99
+ "propertyNames": {
100
+ "type": "string",
101
+ "maxLength": 64,
102
+ "minLength": 1,
103
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
104
+ },
105
+ "additionalProperties": {
106
+ "type": "object",
107
+ "properties": {
108
+ "params": {
109
+ "type": "object",
110
+ "propertyNames": {
111
+ "type": "string",
112
+ "maxLength": 64,
113
+ "minLength": 1,
114
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
115
+ },
116
+ "additionalProperties": {
117
+ "type": "object",
118
+ "properties": {
119
+ "default": { "type": "number", "minimum": -1000000, "maximum": 1000000 },
120
+ "min": { "type": "number", "minimum": -1000000, "maximum": 1000000 },
121
+ "max": { "type": "number", "minimum": -1000000, "maximum": 1000000 }
122
+ },
123
+ "required": ["default", "min", "max"],
124
+ "additionalProperties": false
125
+ },
126
+ "maxProperties": 128
127
+ },
128
+ "children": { "type": "array", "items": { "$ref": "#/$defs/node" }, "minItems": 1, "maxItems": 512 }
129
+ },
130
+ "required": ["children"],
131
+ "additionalProperties": false
132
+ },
133
+ "maxProperties": 128
134
+ },
135
+ "animations": {
136
+ "type": "object",
137
+ "propertyNames": {
138
+ "type": "string",
139
+ "maxLength": 64,
140
+ "minLength": 1,
141
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
142
+ },
143
+ "additionalProperties": {
144
+ "type": "object",
145
+ "properties": {
146
+ "duration": { "type": "number", "minimum": 0, "maximum": 60, "exclusiveMinimum": 0 },
147
+ "loop": { "type": "boolean" },
148
+ "tracks": {
149
+ "type": "object",
150
+ "propertyNames": {
151
+ "type": "string",
152
+ "maxLength": 64,
153
+ "minLength": 1,
154
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
155
+ },
156
+ "additionalProperties": {
157
+ "type": "array",
158
+ "items": {
159
+ "type": "object",
160
+ "properties": {
161
+ "time": { "type": "number", "minimum": 0, "maximum": 60 },
162
+ "value": { "type": "number", "minimum": -1000000, "maximum": 1000000 },
163
+ "ease": { "enum": ["linear", "smooth", "hold"] }
164
+ },
165
+ "required": ["time", "value"],
166
+ "additionalProperties": false
167
+ },
168
+ "minItems": 2,
169
+ "maxItems": 256
170
+ },
171
+ "maxProperties": 128
172
+ }
173
+ },
174
+ "required": ["duration", "loop", "tracks"],
175
+ "additionalProperties": false
176
+ },
177
+ "maxProperties": 128
178
+ },
179
+ "defaultAnimation": {
180
+ "type": "string",
181
+ "maxLength": 64,
182
+ "minLength": 1,
183
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
184
+ },
185
+ "nodes": { "type": "array", "items": { "$ref": "#/$defs/node" }, "minItems": 1, "maxItems": 512 }
186
+ },
187
+ "required": ["schema", "name", "viewBox", "nodes"],
188
+ "additionalProperties": false,
189
+ "$defs": {
190
+ "expr": {
191
+ "oneOf": [
192
+ { "type": "number", "minimum": -1000000, "maximum": 1000000 },
193
+ { "type": "string", "pattern": "^\\$[A-Za-z][A-Za-z0-9_-]*$", "maxLength": 65 },
194
+ {
195
+ "type": "array",
196
+ "prefixItems": [{ "enum": ["sin", "cos", "abs"] }, { "$ref": "#/$defs/expr" }],
197
+ "items": false,
198
+ "minItems": 2,
199
+ "maxItems": 2
200
+ },
201
+ {
202
+ "type": "array",
203
+ "prefixItems": [
204
+ { "enum": ["add", "sub", "mul", "div", "min", "max"] },
205
+ { "$ref": "#/$defs/expr" },
206
+ { "$ref": "#/$defs/expr" }
207
+ ],
208
+ "items": false,
209
+ "minItems": 3,
210
+ "maxItems": 3
211
+ },
212
+ {
213
+ "type": "array",
214
+ "prefixItems": [
215
+ { "enum": ["clamp", "mix", "rand"] },
216
+ { "$ref": "#/$defs/expr" },
217
+ { "$ref": "#/$defs/expr" },
218
+ { "$ref": "#/$defs/expr" }
219
+ ],
220
+ "items": false,
221
+ "minItems": 4,
222
+ "maxItems": 4
223
+ }
224
+ ]
225
+ },
226
+ "paint": {
227
+ "oneOf": [
228
+ { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
229
+ { "const": "none" },
230
+ { "type": "string", "pattern": "^@[A-Za-z][A-Za-z0-9_-]*$", "maxLength": 65 },
231
+ {
232
+ "type": "object",
233
+ "properties": {
234
+ "gradient": {
235
+ "type": "string",
236
+ "maxLength": 64,
237
+ "minLength": 1,
238
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
239
+ }
240
+ },
241
+ "required": ["gradient"],
242
+ "additionalProperties": false
243
+ }
244
+ ]
245
+ },
246
+ "command": {
247
+ "oneOf": [
248
+ {
249
+ "type": "array",
250
+ "prefixItems": [{ "enum": ["M", "L"] }, { "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
251
+ "items": false,
252
+ "minItems": 3,
253
+ "maxItems": 3
254
+ },
255
+ {
256
+ "type": "array",
257
+ "prefixItems": [
258
+ { "const": "Q" },
259
+ { "$ref": "#/$defs/expr" },
260
+ { "$ref": "#/$defs/expr" },
261
+ { "$ref": "#/$defs/expr" },
262
+ { "$ref": "#/$defs/expr" }
263
+ ],
264
+ "items": false,
265
+ "minItems": 5,
266
+ "maxItems": 5
267
+ },
268
+ {
269
+ "type": "array",
270
+ "prefixItems": [
271
+ { "const": "C" },
272
+ { "$ref": "#/$defs/expr" },
273
+ { "$ref": "#/$defs/expr" },
274
+ { "$ref": "#/$defs/expr" },
275
+ { "$ref": "#/$defs/expr" },
276
+ { "$ref": "#/$defs/expr" },
277
+ { "$ref": "#/$defs/expr" }
278
+ ],
279
+ "items": false,
280
+ "minItems": 7,
281
+ "maxItems": 7
282
+ },
283
+ {
284
+ "type": "array",
285
+ "prefixItems": [
286
+ { "const": "A" },
287
+ { "$ref": "#/$defs/expr" },
288
+ { "$ref": "#/$defs/expr" },
289
+ { "$ref": "#/$defs/expr" },
290
+ { "enum": [0, 1] },
291
+ { "enum": [0, 1] },
292
+ { "$ref": "#/$defs/expr" },
293
+ { "$ref": "#/$defs/expr" }
294
+ ],
295
+ "items": false,
296
+ "minItems": 8,
297
+ "maxItems": 8
298
+ },
299
+ { "type": "array", "prefixItems": [{ "const": "Z" }], "items": false, "minItems": 1, "maxItems": 1 }
300
+ ]
301
+ },
302
+ "shape": {
303
+ "oneOf": [
304
+ {
305
+ "type": "object",
306
+ "properties": {
307
+ "id": {
308
+ "type": "string",
309
+ "maxLength": 64,
310
+ "minLength": 1,
311
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
312
+ },
313
+ "transform": {
314
+ "type": "object",
315
+ "properties": {
316
+ "translate": {
317
+ "type": "array",
318
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
319
+ "items": false,
320
+ "minItems": 2,
321
+ "maxItems": 2
322
+ },
323
+ "rotate": { "$ref": "#/$defs/expr" },
324
+ "scale": {
325
+ "type": "array",
326
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
327
+ "items": false,
328
+ "minItems": 2,
329
+ "maxItems": 2
330
+ },
331
+ "pivot": {
332
+ "type": "array",
333
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
334
+ "items": false,
335
+ "minItems": 2,
336
+ "maxItems": 2
337
+ }
338
+ },
339
+ "required": [],
340
+ "additionalProperties": false
341
+ },
342
+ "style": {
343
+ "type": "object",
344
+ "properties": {
345
+ "fill": { "$ref": "#/$defs/paint" },
346
+ "stroke": { "$ref": "#/$defs/paint" },
347
+ "strokeWidth": { "$ref": "#/$defs/expr" },
348
+ "linecap": { "enum": ["butt", "round", "square"] },
349
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
350
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
351
+ },
352
+ "required": [],
353
+ "additionalProperties": false
354
+ },
355
+ "opacity": { "$ref": "#/$defs/expr" },
356
+ "clip": {
357
+ "type": "string",
358
+ "maxLength": 64,
359
+ "minLength": 1,
360
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
361
+ },
362
+ "mask": {
363
+ "type": "string",
364
+ "maxLength": 64,
365
+ "minLength": 1,
366
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
367
+ },
368
+ "blur": { "$ref": "#/$defs/expr" },
369
+ "kind": { "const": "rect" },
370
+ "x": { "$ref": "#/$defs/expr" },
371
+ "y": { "$ref": "#/$defs/expr" },
372
+ "width": { "$ref": "#/$defs/expr" },
373
+ "height": { "$ref": "#/$defs/expr" },
374
+ "radius": { "$ref": "#/$defs/expr" }
375
+ },
376
+ "required": ["id", "kind", "x", "y", "width", "height"],
377
+ "additionalProperties": false
378
+ },
379
+ {
380
+ "type": "object",
381
+ "properties": {
382
+ "id": {
383
+ "type": "string",
384
+ "maxLength": 64,
385
+ "minLength": 1,
386
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
387
+ },
388
+ "transform": {
389
+ "type": "object",
390
+ "properties": {
391
+ "translate": {
392
+ "type": "array",
393
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
394
+ "items": false,
395
+ "minItems": 2,
396
+ "maxItems": 2
397
+ },
398
+ "rotate": { "$ref": "#/$defs/expr" },
399
+ "scale": {
400
+ "type": "array",
401
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
402
+ "items": false,
403
+ "minItems": 2,
404
+ "maxItems": 2
405
+ },
406
+ "pivot": {
407
+ "type": "array",
408
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
409
+ "items": false,
410
+ "minItems": 2,
411
+ "maxItems": 2
412
+ }
413
+ },
414
+ "required": [],
415
+ "additionalProperties": false
416
+ },
417
+ "style": {
418
+ "type": "object",
419
+ "properties": {
420
+ "fill": { "$ref": "#/$defs/paint" },
421
+ "stroke": { "$ref": "#/$defs/paint" },
422
+ "strokeWidth": { "$ref": "#/$defs/expr" },
423
+ "linecap": { "enum": ["butt", "round", "square"] },
424
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
425
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
426
+ },
427
+ "required": [],
428
+ "additionalProperties": false
429
+ },
430
+ "opacity": { "$ref": "#/$defs/expr" },
431
+ "clip": {
432
+ "type": "string",
433
+ "maxLength": 64,
434
+ "minLength": 1,
435
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
436
+ },
437
+ "mask": {
438
+ "type": "string",
439
+ "maxLength": 64,
440
+ "minLength": 1,
441
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
442
+ },
443
+ "blur": { "$ref": "#/$defs/expr" },
444
+ "kind": { "const": "ellipse" },
445
+ "cx": { "$ref": "#/$defs/expr" },
446
+ "cy": { "$ref": "#/$defs/expr" },
447
+ "rx": { "$ref": "#/$defs/expr" },
448
+ "ry": { "$ref": "#/$defs/expr" }
449
+ },
450
+ "required": ["id", "kind", "cx", "cy", "rx", "ry"],
451
+ "additionalProperties": false
452
+ },
453
+ {
454
+ "type": "object",
455
+ "properties": {
456
+ "id": {
457
+ "type": "string",
458
+ "maxLength": 64,
459
+ "minLength": 1,
460
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
461
+ },
462
+ "transform": {
463
+ "type": "object",
464
+ "properties": {
465
+ "translate": {
466
+ "type": "array",
467
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
468
+ "items": false,
469
+ "minItems": 2,
470
+ "maxItems": 2
471
+ },
472
+ "rotate": { "$ref": "#/$defs/expr" },
473
+ "scale": {
474
+ "type": "array",
475
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
476
+ "items": false,
477
+ "minItems": 2,
478
+ "maxItems": 2
479
+ },
480
+ "pivot": {
481
+ "type": "array",
482
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
483
+ "items": false,
484
+ "minItems": 2,
485
+ "maxItems": 2
486
+ }
487
+ },
488
+ "required": [],
489
+ "additionalProperties": false
490
+ },
491
+ "style": {
492
+ "type": "object",
493
+ "properties": {
494
+ "fill": { "$ref": "#/$defs/paint" },
495
+ "stroke": { "$ref": "#/$defs/paint" },
496
+ "strokeWidth": { "$ref": "#/$defs/expr" },
497
+ "linecap": { "enum": ["butt", "round", "square"] },
498
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
499
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
500
+ },
501
+ "required": [],
502
+ "additionalProperties": false
503
+ },
504
+ "opacity": { "$ref": "#/$defs/expr" },
505
+ "clip": {
506
+ "type": "string",
507
+ "maxLength": 64,
508
+ "minLength": 1,
509
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
510
+ },
511
+ "mask": {
512
+ "type": "string",
513
+ "maxLength": 64,
514
+ "minLength": 1,
515
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
516
+ },
517
+ "blur": { "$ref": "#/$defs/expr" },
518
+ "kind": { "const": "path" },
519
+ "d": { "type": "array", "items": { "$ref": "#/$defs/command" }, "minItems": 1, "maxItems": 2048 }
520
+ },
521
+ "required": ["id", "kind", "d"],
522
+ "additionalProperties": false
523
+ }
524
+ ]
525
+ },
526
+ "node": {
527
+ "oneOf": [
528
+ {
529
+ "type": "object",
530
+ "properties": {
531
+ "id": {
532
+ "type": "string",
533
+ "maxLength": 64,
534
+ "minLength": 1,
535
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
536
+ },
537
+ "transform": {
538
+ "type": "object",
539
+ "properties": {
540
+ "translate": {
541
+ "type": "array",
542
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
543
+ "items": false,
544
+ "minItems": 2,
545
+ "maxItems": 2
546
+ },
547
+ "rotate": { "$ref": "#/$defs/expr" },
548
+ "scale": {
549
+ "type": "array",
550
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
551
+ "items": false,
552
+ "minItems": 2,
553
+ "maxItems": 2
554
+ },
555
+ "pivot": {
556
+ "type": "array",
557
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
558
+ "items": false,
559
+ "minItems": 2,
560
+ "maxItems": 2
561
+ }
562
+ },
563
+ "required": [],
564
+ "additionalProperties": false
565
+ },
566
+ "style": {
567
+ "type": "object",
568
+ "properties": {
569
+ "fill": { "$ref": "#/$defs/paint" },
570
+ "stroke": { "$ref": "#/$defs/paint" },
571
+ "strokeWidth": { "$ref": "#/$defs/expr" },
572
+ "linecap": { "enum": ["butt", "round", "square"] },
573
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
574
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
575
+ },
576
+ "required": [],
577
+ "additionalProperties": false
578
+ },
579
+ "opacity": { "$ref": "#/$defs/expr" },
580
+ "clip": {
581
+ "type": "string",
582
+ "maxLength": 64,
583
+ "minLength": 1,
584
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
585
+ },
586
+ "mask": {
587
+ "type": "string",
588
+ "maxLength": 64,
589
+ "minLength": 1,
590
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
591
+ },
592
+ "blur": { "$ref": "#/$defs/expr" },
593
+ "kind": { "const": "rect" },
594
+ "x": { "$ref": "#/$defs/expr" },
595
+ "y": { "$ref": "#/$defs/expr" },
596
+ "width": { "$ref": "#/$defs/expr" },
597
+ "height": { "$ref": "#/$defs/expr" },
598
+ "radius": { "$ref": "#/$defs/expr" }
599
+ },
600
+ "required": ["id", "kind", "x", "y", "width", "height"],
601
+ "additionalProperties": false
602
+ },
603
+ {
604
+ "type": "object",
605
+ "properties": {
606
+ "id": {
607
+ "type": "string",
608
+ "maxLength": 64,
609
+ "minLength": 1,
610
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
611
+ },
612
+ "transform": {
613
+ "type": "object",
614
+ "properties": {
615
+ "translate": {
616
+ "type": "array",
617
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
618
+ "items": false,
619
+ "minItems": 2,
620
+ "maxItems": 2
621
+ },
622
+ "rotate": { "$ref": "#/$defs/expr" },
623
+ "scale": {
624
+ "type": "array",
625
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
626
+ "items": false,
627
+ "minItems": 2,
628
+ "maxItems": 2
629
+ },
630
+ "pivot": {
631
+ "type": "array",
632
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
633
+ "items": false,
634
+ "minItems": 2,
635
+ "maxItems": 2
636
+ }
637
+ },
638
+ "required": [],
639
+ "additionalProperties": false
640
+ },
641
+ "style": {
642
+ "type": "object",
643
+ "properties": {
644
+ "fill": { "$ref": "#/$defs/paint" },
645
+ "stroke": { "$ref": "#/$defs/paint" },
646
+ "strokeWidth": { "$ref": "#/$defs/expr" },
647
+ "linecap": { "enum": ["butt", "round", "square"] },
648
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
649
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
650
+ },
651
+ "required": [],
652
+ "additionalProperties": false
653
+ },
654
+ "opacity": { "$ref": "#/$defs/expr" },
655
+ "clip": {
656
+ "type": "string",
657
+ "maxLength": 64,
658
+ "minLength": 1,
659
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
660
+ },
661
+ "mask": {
662
+ "type": "string",
663
+ "maxLength": 64,
664
+ "minLength": 1,
665
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
666
+ },
667
+ "blur": { "$ref": "#/$defs/expr" },
668
+ "kind": { "const": "ellipse" },
669
+ "cx": { "$ref": "#/$defs/expr" },
670
+ "cy": { "$ref": "#/$defs/expr" },
671
+ "rx": { "$ref": "#/$defs/expr" },
672
+ "ry": { "$ref": "#/$defs/expr" }
673
+ },
674
+ "required": ["id", "kind", "cx", "cy", "rx", "ry"],
675
+ "additionalProperties": false
676
+ },
677
+ {
678
+ "type": "object",
679
+ "properties": {
680
+ "id": {
681
+ "type": "string",
682
+ "maxLength": 64,
683
+ "minLength": 1,
684
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
685
+ },
686
+ "transform": {
687
+ "type": "object",
688
+ "properties": {
689
+ "translate": {
690
+ "type": "array",
691
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
692
+ "items": false,
693
+ "minItems": 2,
694
+ "maxItems": 2
695
+ },
696
+ "rotate": { "$ref": "#/$defs/expr" },
697
+ "scale": {
698
+ "type": "array",
699
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
700
+ "items": false,
701
+ "minItems": 2,
702
+ "maxItems": 2
703
+ },
704
+ "pivot": {
705
+ "type": "array",
706
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
707
+ "items": false,
708
+ "minItems": 2,
709
+ "maxItems": 2
710
+ }
711
+ },
712
+ "required": [],
713
+ "additionalProperties": false
714
+ },
715
+ "style": {
716
+ "type": "object",
717
+ "properties": {
718
+ "fill": { "$ref": "#/$defs/paint" },
719
+ "stroke": { "$ref": "#/$defs/paint" },
720
+ "strokeWidth": { "$ref": "#/$defs/expr" },
721
+ "linecap": { "enum": ["butt", "round", "square"] },
722
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
723
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
724
+ },
725
+ "required": [],
726
+ "additionalProperties": false
727
+ },
728
+ "opacity": { "$ref": "#/$defs/expr" },
729
+ "clip": {
730
+ "type": "string",
731
+ "maxLength": 64,
732
+ "minLength": 1,
733
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
734
+ },
735
+ "mask": {
736
+ "type": "string",
737
+ "maxLength": 64,
738
+ "minLength": 1,
739
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
740
+ },
741
+ "blur": { "$ref": "#/$defs/expr" },
742
+ "kind": { "const": "path" },
743
+ "d": { "type": "array", "items": { "$ref": "#/$defs/command" }, "minItems": 1, "maxItems": 2048 }
744
+ },
745
+ "required": ["id", "kind", "d"],
746
+ "additionalProperties": false
747
+ },
748
+ {
749
+ "type": "object",
750
+ "properties": {
751
+ "id": {
752
+ "type": "string",
753
+ "maxLength": 64,
754
+ "minLength": 1,
755
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
756
+ },
757
+ "transform": {
758
+ "type": "object",
759
+ "properties": {
760
+ "translate": {
761
+ "type": "array",
762
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
763
+ "items": false,
764
+ "minItems": 2,
765
+ "maxItems": 2
766
+ },
767
+ "rotate": { "$ref": "#/$defs/expr" },
768
+ "scale": {
769
+ "type": "array",
770
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
771
+ "items": false,
772
+ "minItems": 2,
773
+ "maxItems": 2
774
+ },
775
+ "pivot": {
776
+ "type": "array",
777
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
778
+ "items": false,
779
+ "minItems": 2,
780
+ "maxItems": 2
781
+ }
782
+ },
783
+ "required": [],
784
+ "additionalProperties": false
785
+ },
786
+ "style": {
787
+ "type": "object",
788
+ "properties": {
789
+ "fill": { "$ref": "#/$defs/paint" },
790
+ "stroke": { "$ref": "#/$defs/paint" },
791
+ "strokeWidth": { "$ref": "#/$defs/expr" },
792
+ "linecap": { "enum": ["butt", "round", "square"] },
793
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
794
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
795
+ },
796
+ "required": [],
797
+ "additionalProperties": false
798
+ },
799
+ "opacity": { "$ref": "#/$defs/expr" },
800
+ "clip": {
801
+ "type": "string",
802
+ "maxLength": 64,
803
+ "minLength": 1,
804
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
805
+ },
806
+ "mask": {
807
+ "type": "string",
808
+ "maxLength": 64,
809
+ "minLength": 1,
810
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
811
+ },
812
+ "blur": { "$ref": "#/$defs/expr" },
813
+ "kind": { "const": "group" },
814
+ "children": {
815
+ "type": "array",
816
+ "items": { "$ref": "#/$defs/node" },
817
+ "minItems": 1,
818
+ "maxItems": 512
819
+ }
820
+ },
821
+ "required": ["id", "kind", "children"],
822
+ "additionalProperties": false
823
+ },
824
+ {
825
+ "type": "object",
826
+ "properties": {
827
+ "id": {
828
+ "type": "string",
829
+ "maxLength": 64,
830
+ "minLength": 1,
831
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
832
+ },
833
+ "transform": {
834
+ "type": "object",
835
+ "properties": {
836
+ "translate": {
837
+ "type": "array",
838
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
839
+ "items": false,
840
+ "minItems": 2,
841
+ "maxItems": 2
842
+ },
843
+ "rotate": { "$ref": "#/$defs/expr" },
844
+ "scale": {
845
+ "type": "array",
846
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
847
+ "items": false,
848
+ "minItems": 2,
849
+ "maxItems": 2
850
+ },
851
+ "pivot": {
852
+ "type": "array",
853
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
854
+ "items": false,
855
+ "minItems": 2,
856
+ "maxItems": 2
857
+ }
858
+ },
859
+ "required": [],
860
+ "additionalProperties": false
861
+ },
862
+ "style": {
863
+ "type": "object",
864
+ "properties": {
865
+ "fill": { "$ref": "#/$defs/paint" },
866
+ "stroke": { "$ref": "#/$defs/paint" },
867
+ "strokeWidth": { "$ref": "#/$defs/expr" },
868
+ "linecap": { "enum": ["butt", "round", "square"] },
869
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
870
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
871
+ },
872
+ "required": [],
873
+ "additionalProperties": false
874
+ },
875
+ "opacity": { "$ref": "#/$defs/expr" },
876
+ "clip": {
877
+ "type": "string",
878
+ "maxLength": 64,
879
+ "minLength": 1,
880
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
881
+ },
882
+ "mask": {
883
+ "type": "string",
884
+ "maxLength": 64,
885
+ "minLength": 1,
886
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
887
+ },
888
+ "blur": { "$ref": "#/$defs/expr" },
889
+ "kind": { "const": "use" },
890
+ "symbol": {
891
+ "type": "string",
892
+ "maxLength": 64,
893
+ "minLength": 1,
894
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
895
+ },
896
+ "args": {
897
+ "type": "object",
898
+ "propertyNames": {
899
+ "type": "string",
900
+ "maxLength": 64,
901
+ "minLength": 1,
902
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
903
+ },
904
+ "additionalProperties": { "$ref": "#/$defs/expr" },
905
+ "maxProperties": 128
906
+ }
907
+ },
908
+ "required": ["id", "kind", "symbol"],
909
+ "additionalProperties": false
910
+ },
911
+ {
912
+ "type": "object",
913
+ "properties": {
914
+ "id": {
915
+ "type": "string",
916
+ "maxLength": 64,
917
+ "minLength": 1,
918
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
919
+ },
920
+ "transform": {
921
+ "type": "object",
922
+ "properties": {
923
+ "translate": {
924
+ "type": "array",
925
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
926
+ "items": false,
927
+ "minItems": 2,
928
+ "maxItems": 2
929
+ },
930
+ "rotate": { "$ref": "#/$defs/expr" },
931
+ "scale": {
932
+ "type": "array",
933
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
934
+ "items": false,
935
+ "minItems": 2,
936
+ "maxItems": 2
937
+ },
938
+ "pivot": {
939
+ "type": "array",
940
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
941
+ "items": false,
942
+ "minItems": 2,
943
+ "maxItems": 2
944
+ }
945
+ },
946
+ "required": [],
947
+ "additionalProperties": false
948
+ },
949
+ "style": {
950
+ "type": "object",
951
+ "properties": {
952
+ "fill": { "$ref": "#/$defs/paint" },
953
+ "stroke": { "$ref": "#/$defs/paint" },
954
+ "strokeWidth": { "$ref": "#/$defs/expr" },
955
+ "linecap": { "enum": ["butt", "round", "square"] },
956
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
957
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
958
+ },
959
+ "required": [],
960
+ "additionalProperties": false
961
+ },
962
+ "opacity": { "$ref": "#/$defs/expr" },
963
+ "clip": {
964
+ "type": "string",
965
+ "maxLength": 64,
966
+ "minLength": 1,
967
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
968
+ },
969
+ "mask": {
970
+ "type": "string",
971
+ "maxLength": 64,
972
+ "minLength": 1,
973
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
974
+ },
975
+ "blur": { "$ref": "#/$defs/expr" },
976
+ "kind": { "const": "repeat" },
977
+ "count": { "type": "integer", "minimum": 1, "maximum": 1024 },
978
+ "children": {
979
+ "type": "array",
980
+ "items": { "$ref": "#/$defs/node" },
981
+ "minItems": 1,
982
+ "maxItems": 512
983
+ }
984
+ },
985
+ "required": ["id", "kind", "count", "children"],
986
+ "additionalProperties": false
987
+ },
988
+ {
989
+ "type": "object",
990
+ "properties": {
991
+ "id": {
992
+ "type": "string",
993
+ "maxLength": 64,
994
+ "minLength": 1,
995
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
996
+ },
997
+ "transform": {
998
+ "type": "object",
999
+ "properties": {
1000
+ "translate": {
1001
+ "type": "array",
1002
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1003
+ "items": false,
1004
+ "minItems": 2,
1005
+ "maxItems": 2
1006
+ },
1007
+ "rotate": { "$ref": "#/$defs/expr" },
1008
+ "scale": {
1009
+ "type": "array",
1010
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1011
+ "items": false,
1012
+ "minItems": 2,
1013
+ "maxItems": 2
1014
+ },
1015
+ "pivot": {
1016
+ "type": "array",
1017
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1018
+ "items": false,
1019
+ "minItems": 2,
1020
+ "maxItems": 2
1021
+ }
1022
+ },
1023
+ "required": [],
1024
+ "additionalProperties": false
1025
+ },
1026
+ "style": {
1027
+ "type": "object",
1028
+ "properties": {
1029
+ "fill": { "$ref": "#/$defs/paint" },
1030
+ "stroke": { "$ref": "#/$defs/paint" },
1031
+ "strokeWidth": { "$ref": "#/$defs/expr" },
1032
+ "linecap": { "enum": ["butt", "round", "square"] },
1033
+ "linejoin": { "enum": ["miter", "round", "bevel"] },
1034
+ "fillRule": { "enum": ["nonzero", "evenodd"] }
1035
+ },
1036
+ "required": [],
1037
+ "additionalProperties": false
1038
+ },
1039
+ "opacity": { "$ref": "#/$defs/expr" },
1040
+ "clip": {
1041
+ "type": "string",
1042
+ "maxLength": 64,
1043
+ "minLength": 1,
1044
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
1045
+ },
1046
+ "mask": {
1047
+ "type": "string",
1048
+ "maxLength": 64,
1049
+ "minLength": 1,
1050
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
1051
+ },
1052
+ "blur": { "$ref": "#/$defs/expr" },
1053
+ "kind": { "const": "emitter" },
1054
+ "count": { "type": "integer", "minimum": 1, "maximum": 1024 },
1055
+ "lifetime": { "type": "number", "minimum": 0, "maximum": 60, "exclusiveMinimum": 0 },
1056
+ "mode": { "enum": ["loop", "burst"] },
1057
+ "start": { "type": "number", "minimum": 0, "maximum": 60 },
1058
+ "velocity": {
1059
+ "type": "array",
1060
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1061
+ "items": false,
1062
+ "minItems": 2,
1063
+ "maxItems": 2
1064
+ },
1065
+ "acceleration": {
1066
+ "type": "array",
1067
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1068
+ "items": false,
1069
+ "minItems": 2,
1070
+ "maxItems": 2
1071
+ },
1072
+ "children": {
1073
+ "type": "array",
1074
+ "items": { "$ref": "#/$defs/node" },
1075
+ "minItems": 1,
1076
+ "maxItems": 512
1077
+ }
1078
+ },
1079
+ "required": ["id", "kind", "count", "lifetime", "mode", "velocity", "children"],
1080
+ "additionalProperties": false
1081
+ }
1082
+ ]
1083
+ },
1084
+ "gradient": {
1085
+ "oneOf": [
1086
+ {
1087
+ "type": "object",
1088
+ "properties": {
1089
+ "kind": { "const": "linear" },
1090
+ "from": {
1091
+ "type": "array",
1092
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1093
+ "items": false,
1094
+ "minItems": 2,
1095
+ "maxItems": 2
1096
+ },
1097
+ "to": {
1098
+ "type": "array",
1099
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1100
+ "items": false,
1101
+ "minItems": 2,
1102
+ "maxItems": 2
1103
+ },
1104
+ "stops": {
1105
+ "type": "array",
1106
+ "items": {
1107
+ "type": "object",
1108
+ "properties": {
1109
+ "offset": { "type": "number", "minimum": 0, "maximum": 1 },
1110
+ "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
1111
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 }
1112
+ },
1113
+ "required": ["offset", "color"],
1114
+ "additionalProperties": false
1115
+ },
1116
+ "minItems": 2,
1117
+ "maxItems": 32
1118
+ }
1119
+ },
1120
+ "required": ["kind", "from", "to", "stops"],
1121
+ "additionalProperties": false
1122
+ },
1123
+ {
1124
+ "type": "object",
1125
+ "properties": {
1126
+ "kind": { "const": "radial" },
1127
+ "center": {
1128
+ "type": "array",
1129
+ "prefixItems": [{ "$ref": "#/$defs/expr" }, { "$ref": "#/$defs/expr" }],
1130
+ "items": false,
1131
+ "minItems": 2,
1132
+ "maxItems": 2
1133
+ },
1134
+ "radius": { "$ref": "#/$defs/expr" },
1135
+ "stops": {
1136
+ "type": "array",
1137
+ "items": {
1138
+ "type": "object",
1139
+ "properties": {
1140
+ "offset": { "type": "number", "minimum": 0, "maximum": 1 },
1141
+ "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
1142
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 }
1143
+ },
1144
+ "required": ["offset", "color"],
1145
+ "additionalProperties": false
1146
+ },
1147
+ "minItems": 2,
1148
+ "maxItems": 32
1149
+ }
1150
+ },
1151
+ "required": ["kind", "center", "radius", "stops"],
1152
+ "additionalProperties": false
1153
+ }
1154
+ ]
1155
+ }
1156
+ }
1157
+ }