forma-diagrams 0.5.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.
Files changed (109) hide show
  1. package/Dockerfile +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -0
  4. package/THIRD_PARTY_NOTICES.md +20 -0
  5. package/bin/forma +3 -0
  6. package/deploy/.env.example +11 -0
  7. package/deploy/Caddyfile +4 -0
  8. package/deploy/compose.yml +38 -0
  9. package/dist/assets/IBMPlexSans-Regular-Bl2SjS7V.ttf +0 -0
  10. package/dist/assets/IBMPlexSans-SemiBold-B9auKknr.ttf +0 -0
  11. package/dist/assets/elk.bundled-Y7ymokgr.js +24 -0
  12. package/dist/assets/index-_kg9cdik.css +1 -0
  13. package/dist/assets/index-al0xDdTG.js +452 -0
  14. package/dist/fonts/IBMPlexSans-Regular.ttf +0 -0
  15. package/dist/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  16. package/dist/fonts/OFL.txt +93 -0
  17. package/dist/index.html +14 -0
  18. package/dist/licenses/FORMA_LICENSE.txt +21 -0
  19. package/dist/licenses/THIRD_PARTY_LICENSES.txt +11601 -0
  20. package/docs/api.md +41 -0
  21. package/docs/decisions/001-foundation.md +57 -0
  22. package/docs/decisions/002-composition-and-human-edits.md +47 -0
  23. package/docs/decisions/003-general-composition.md +30 -0
  24. package/docs/decisions/004-library-and-distribution.md +33 -0
  25. package/docs/decisions/005-organizational-hosting.md +33 -0
  26. package/docs/decisions/006-hosted-agent-access.md +25 -0
  27. package/docs/format.md +132 -0
  28. package/docs/gallery.md +73 -0
  29. package/docs/images/architecture.png +0 -0
  30. package/docs/images/editor.png +0 -0
  31. package/docs/images/gallery/architecture.png +0 -0
  32. package/docs/images/gallery/decision.png +0 -0
  33. package/docs/images/gallery/development-signal.png +0 -0
  34. package/docs/images/gallery/development.png +0 -0
  35. package/docs/images/gallery/editor-roundtrip.png +0 -0
  36. package/docs/images/gallery/entities.png +0 -0
  37. package/docs/images/gallery/mindmap.png +0 -0
  38. package/docs/images/gallery/organization.png +0 -0
  39. package/docs/images/gallery/timeline.png +0 -0
  40. package/docs/images/release.png +0 -0
  41. package/docs/install.md +50 -0
  42. package/docs/plans/mvp.md +24 -0
  43. package/docs/self-hosting.md +167 -0
  44. package/docs/verification-v2.md +41 -0
  45. package/docs/verification-v3.md +16 -0
  46. package/docs/verification-v4.1.md +35 -0
  47. package/docs/verification-v4.2.md +20 -0
  48. package/docs/verification-v4.3.md +5 -0
  49. package/docs/verification-v4.md +31 -0
  50. package/docs/verification-v5.1.md +7 -0
  51. package/docs/verification-v5.2.md +7 -0
  52. package/docs/verification-v5.md +7 -0
  53. package/docs/verification.md +91 -0
  54. package/examples/design-systems/atelier.json +53 -0
  55. package/examples/design-systems/signal.json +53 -0
  56. package/examples/gallery/architecture.forma.json +178 -0
  57. package/examples/gallery/decision.forma.json +182 -0
  58. package/examples/gallery/development-signal.forma.json +299 -0
  59. package/examples/gallery/development.forma.json +299 -0
  60. package/examples/gallery/entities.forma.json +123 -0
  61. package/examples/gallery/mindmap.forma.json +158 -0
  62. package/examples/gallery/organization.forma.json +151 -0
  63. package/examples/gallery/timeline.forma.json +138 -0
  64. package/examples/platform.forma.json +116 -0
  65. package/examples/release.forma.json +58 -0
  66. package/examples/roundtrip/agent-continued.forma.json +310 -0
  67. package/examples/roundtrip/agent-patch.json +7 -0
  68. package/examples/roundtrip/human-edited.forma.json +309 -0
  69. package/package.json +81 -0
  70. package/packages/cli/bin.mjs +3 -0
  71. package/packages/cli/src/agent-access.ts +232 -0
  72. package/packages/cli/src/blob-store.ts +241 -0
  73. package/packages/cli/src/file-library.ts +179 -0
  74. package/packages/cli/src/google.ts +51 -0
  75. package/packages/cli/src/hosted.ts +498 -0
  76. package/packages/cli/src/http.ts +67 -0
  77. package/packages/cli/src/index.ts +397 -0
  78. package/packages/cli/src/mcp.ts +114 -0
  79. package/packages/cli/src/remote.ts +228 -0
  80. package/packages/cli/src/server.ts +69 -0
  81. package/packages/cli/src/signed-cookie.ts +42 -0
  82. package/packages/core/src/align.ts +237 -0
  83. package/packages/core/src/document.ts +408 -0
  84. package/packages/core/src/font-metrics.json +1 -0
  85. package/packages/core/src/geometry.ts +463 -0
  86. package/packages/core/src/index.ts +12 -0
  87. package/packages/core/src/inspect.ts +230 -0
  88. package/packages/core/src/layout.ts +450 -0
  89. package/packages/core/src/render.ts +182 -0
  90. package/packages/core/src/resolve-style.ts +29 -0
  91. package/packages/core/src/scene.ts +40 -0
  92. package/packages/core/src/styles.ts +122 -0
  93. package/packages/core/src/text.ts +81 -0
  94. package/packages/core/src/theme.ts +33 -0
  95. package/public/fonts/IBMPlexSans-Regular.ttf +0 -0
  96. package/public/fonts/IBMPlexSans-SemiBold.ttf +0 -0
  97. package/public/fonts/OFL.txt +93 -0
  98. package/schema/design-system.v1.schema.json +734 -0
  99. package/schema/forma.v1.schema.json +273 -0
  100. package/schema/forma.v2.schema.json +1756 -0
  101. package/skills/forma/SKILL.md +20 -0
  102. package/skills/forma/references/composition.md +11 -0
  103. package/skills/forma/references/hosted.md +28 -0
  104. package/skills/forma-architecture/SKILL.md +14 -0
  105. package/skills/forma-entities/SKILL.md +14 -0
  106. package/skills/forma-flow/SKILL.md +14 -0
  107. package/skills/forma-mindmap/SKILL.md +14 -0
  108. package/skills/forma-organization/SKILL.md +14 -0
  109. package/skills/forma-timeline/SKILL.md +14 -0
@@ -0,0 +1,734 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "version": {
6
+ "type": "number",
7
+ "const": 1
8
+ },
9
+ "id": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "maxLength": 80
13
+ },
14
+ "name": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "maxLength": 120
18
+ },
19
+ "revision": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "maxLength": 40
23
+ },
24
+ "canvas": {
25
+ "type": "object",
26
+ "properties": {
27
+ "background": {
28
+ "type": "string",
29
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
30
+ },
31
+ "text": {
32
+ "type": "string",
33
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
34
+ },
35
+ "secondary": {
36
+ "type": "string",
37
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
38
+ },
39
+ "border": {
40
+ "type": "string",
41
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
42
+ },
43
+ "fontFamily": {
44
+ "type": "string",
45
+ "pattern": "^[a-zA-Z0-9 ,'-]{1,100}$"
46
+ }
47
+ },
48
+ "additionalProperties": false
49
+ },
50
+ "spacing": {
51
+ "type": "object",
52
+ "properties": {
53
+ "node": {
54
+ "type": "number",
55
+ "minimum": 20,
56
+ "maximum": 240
57
+ },
58
+ "layer": {
59
+ "type": "number",
60
+ "minimum": 32,
61
+ "maximum": 320
62
+ }
63
+ },
64
+ "additionalProperties": false
65
+ },
66
+ "node": {
67
+ "type": "object",
68
+ "properties": {
69
+ "fill": {
70
+ "type": "string",
71
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
72
+ },
73
+ "stroke": {
74
+ "type": "string",
75
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
76
+ },
77
+ "text": {
78
+ "type": "string",
79
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
80
+ },
81
+ "secondary": {
82
+ "type": "string",
83
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
84
+ },
85
+ "strokeWidth": {
86
+ "type": "number",
87
+ "minimum": 0,
88
+ "maximum": 12
89
+ },
90
+ "dash": {
91
+ "type": "string",
92
+ "enum": [
93
+ "solid",
94
+ "dashed",
95
+ "dotted"
96
+ ]
97
+ },
98
+ "radius": {
99
+ "type": "number",
100
+ "minimum": 0,
101
+ "maximum": 100
102
+ },
103
+ "opacity": {
104
+ "type": "number",
105
+ "minimum": 0.1,
106
+ "maximum": 1
107
+ },
108
+ "fontFamily": {
109
+ "type": "string",
110
+ "pattern": "^[a-zA-Z0-9 ,'-]{1,100}$"
111
+ },
112
+ "fontSize": {
113
+ "type": "number",
114
+ "minimum": 10,
115
+ "maximum": 40
116
+ },
117
+ "fontWeight": {
118
+ "anyOf": [
119
+ {
120
+ "type": "number",
121
+ "const": 400
122
+ },
123
+ {
124
+ "type": "number",
125
+ "const": 600
126
+ }
127
+ ]
128
+ },
129
+ "padding": {
130
+ "type": "number",
131
+ "minimum": 12,
132
+ "maximum": 64
133
+ },
134
+ "width": {
135
+ "type": "number",
136
+ "minimum": 80,
137
+ "maximum": 1200
138
+ },
139
+ "height": {
140
+ "type": "number",
141
+ "minimum": 40,
142
+ "maximum": 1600
143
+ },
144
+ "shape": {
145
+ "type": "string",
146
+ "enum": [
147
+ "rect",
148
+ "pill",
149
+ "diamond",
150
+ "ellipse",
151
+ "cylinder",
152
+ "text"
153
+ ]
154
+ },
155
+ "align": {
156
+ "type": "string",
157
+ "enum": [
158
+ "left",
159
+ "center",
160
+ "right"
161
+ ]
162
+ },
163
+ "verticalAlign": {
164
+ "type": "string",
165
+ "enum": [
166
+ "top",
167
+ "middle",
168
+ "bottom"
169
+ ]
170
+ },
171
+ "arrowStart": {
172
+ "type": "string",
173
+ "enum": [
174
+ "none",
175
+ "open",
176
+ "filled",
177
+ "diamond",
178
+ "circle"
179
+ ]
180
+ },
181
+ "arrowEnd": {
182
+ "type": "string",
183
+ "enum": [
184
+ "none",
185
+ "open",
186
+ "filled",
187
+ "diamond",
188
+ "circle"
189
+ ]
190
+ },
191
+ "sourcePort": {
192
+ "type": "string",
193
+ "enum": [
194
+ "top",
195
+ "right",
196
+ "bottom",
197
+ "left"
198
+ ]
199
+ },
200
+ "targetPort": {
201
+ "type": "string",
202
+ "enum": [
203
+ "top",
204
+ "right",
205
+ "bottom",
206
+ "left"
207
+ ]
208
+ },
209
+ "sourceIndex": {
210
+ "type": "integer",
211
+ "minimum": 0,
212
+ "maximum": 11
213
+ },
214
+ "targetIndex": {
215
+ "type": "integer",
216
+ "minimum": 0,
217
+ "maximum": 11
218
+ },
219
+ "routing": {
220
+ "type": "string",
221
+ "enum": [
222
+ "orthogonal",
223
+ "straight"
224
+ ]
225
+ }
226
+ },
227
+ "additionalProperties": false
228
+ },
229
+ "edge": {
230
+ "type": "object",
231
+ "properties": {
232
+ "fill": {
233
+ "type": "string",
234
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
235
+ },
236
+ "stroke": {
237
+ "type": "string",
238
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
239
+ },
240
+ "text": {
241
+ "type": "string",
242
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
243
+ },
244
+ "secondary": {
245
+ "type": "string",
246
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
247
+ },
248
+ "strokeWidth": {
249
+ "type": "number",
250
+ "minimum": 0,
251
+ "maximum": 12
252
+ },
253
+ "dash": {
254
+ "type": "string",
255
+ "enum": [
256
+ "solid",
257
+ "dashed",
258
+ "dotted"
259
+ ]
260
+ },
261
+ "radius": {
262
+ "type": "number",
263
+ "minimum": 0,
264
+ "maximum": 100
265
+ },
266
+ "opacity": {
267
+ "type": "number",
268
+ "minimum": 0.1,
269
+ "maximum": 1
270
+ },
271
+ "fontFamily": {
272
+ "type": "string",
273
+ "pattern": "^[a-zA-Z0-9 ,'-]{1,100}$"
274
+ },
275
+ "fontSize": {
276
+ "type": "number",
277
+ "minimum": 10,
278
+ "maximum": 40
279
+ },
280
+ "fontWeight": {
281
+ "anyOf": [
282
+ {
283
+ "type": "number",
284
+ "const": 400
285
+ },
286
+ {
287
+ "type": "number",
288
+ "const": 600
289
+ }
290
+ ]
291
+ },
292
+ "padding": {
293
+ "type": "number",
294
+ "minimum": 12,
295
+ "maximum": 64
296
+ },
297
+ "width": {
298
+ "type": "number",
299
+ "minimum": 80,
300
+ "maximum": 1200
301
+ },
302
+ "height": {
303
+ "type": "number",
304
+ "minimum": 40,
305
+ "maximum": 1600
306
+ },
307
+ "shape": {
308
+ "type": "string",
309
+ "enum": [
310
+ "rect",
311
+ "pill",
312
+ "diamond",
313
+ "ellipse",
314
+ "cylinder",
315
+ "text"
316
+ ]
317
+ },
318
+ "align": {
319
+ "type": "string",
320
+ "enum": [
321
+ "left",
322
+ "center",
323
+ "right"
324
+ ]
325
+ },
326
+ "verticalAlign": {
327
+ "type": "string",
328
+ "enum": [
329
+ "top",
330
+ "middle",
331
+ "bottom"
332
+ ]
333
+ },
334
+ "arrowStart": {
335
+ "type": "string",
336
+ "enum": [
337
+ "none",
338
+ "open",
339
+ "filled",
340
+ "diamond",
341
+ "circle"
342
+ ]
343
+ },
344
+ "arrowEnd": {
345
+ "type": "string",
346
+ "enum": [
347
+ "none",
348
+ "open",
349
+ "filled",
350
+ "diamond",
351
+ "circle"
352
+ ]
353
+ },
354
+ "sourcePort": {
355
+ "type": "string",
356
+ "enum": [
357
+ "top",
358
+ "right",
359
+ "bottom",
360
+ "left"
361
+ ]
362
+ },
363
+ "targetPort": {
364
+ "type": "string",
365
+ "enum": [
366
+ "top",
367
+ "right",
368
+ "bottom",
369
+ "left"
370
+ ]
371
+ },
372
+ "sourceIndex": {
373
+ "type": "integer",
374
+ "minimum": 0,
375
+ "maximum": 11
376
+ },
377
+ "targetIndex": {
378
+ "type": "integer",
379
+ "minimum": 0,
380
+ "maximum": 11
381
+ },
382
+ "routing": {
383
+ "type": "string",
384
+ "enum": [
385
+ "orthogonal",
386
+ "straight"
387
+ ]
388
+ }
389
+ },
390
+ "additionalProperties": false
391
+ },
392
+ "group": {
393
+ "type": "object",
394
+ "properties": {
395
+ "fill": {
396
+ "type": "string",
397
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
398
+ },
399
+ "stroke": {
400
+ "type": "string",
401
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
402
+ },
403
+ "text": {
404
+ "type": "string",
405
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
406
+ },
407
+ "secondary": {
408
+ "type": "string",
409
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
410
+ },
411
+ "strokeWidth": {
412
+ "type": "number",
413
+ "minimum": 0,
414
+ "maximum": 12
415
+ },
416
+ "dash": {
417
+ "type": "string",
418
+ "enum": [
419
+ "solid",
420
+ "dashed",
421
+ "dotted"
422
+ ]
423
+ },
424
+ "radius": {
425
+ "type": "number",
426
+ "minimum": 0,
427
+ "maximum": 100
428
+ },
429
+ "opacity": {
430
+ "type": "number",
431
+ "minimum": 0.1,
432
+ "maximum": 1
433
+ },
434
+ "fontFamily": {
435
+ "type": "string",
436
+ "pattern": "^[a-zA-Z0-9 ,'-]{1,100}$"
437
+ },
438
+ "fontSize": {
439
+ "type": "number",
440
+ "minimum": 10,
441
+ "maximum": 40
442
+ },
443
+ "fontWeight": {
444
+ "anyOf": [
445
+ {
446
+ "type": "number",
447
+ "const": 400
448
+ },
449
+ {
450
+ "type": "number",
451
+ "const": 600
452
+ }
453
+ ]
454
+ },
455
+ "padding": {
456
+ "type": "number",
457
+ "minimum": 12,
458
+ "maximum": 64
459
+ },
460
+ "width": {
461
+ "type": "number",
462
+ "minimum": 80,
463
+ "maximum": 1200
464
+ },
465
+ "height": {
466
+ "type": "number",
467
+ "minimum": 40,
468
+ "maximum": 1600
469
+ },
470
+ "shape": {
471
+ "type": "string",
472
+ "enum": [
473
+ "rect",
474
+ "pill",
475
+ "diamond",
476
+ "ellipse",
477
+ "cylinder",
478
+ "text"
479
+ ]
480
+ },
481
+ "align": {
482
+ "type": "string",
483
+ "enum": [
484
+ "left",
485
+ "center",
486
+ "right"
487
+ ]
488
+ },
489
+ "verticalAlign": {
490
+ "type": "string",
491
+ "enum": [
492
+ "top",
493
+ "middle",
494
+ "bottom"
495
+ ]
496
+ },
497
+ "arrowStart": {
498
+ "type": "string",
499
+ "enum": [
500
+ "none",
501
+ "open",
502
+ "filled",
503
+ "diamond",
504
+ "circle"
505
+ ]
506
+ },
507
+ "arrowEnd": {
508
+ "type": "string",
509
+ "enum": [
510
+ "none",
511
+ "open",
512
+ "filled",
513
+ "diamond",
514
+ "circle"
515
+ ]
516
+ },
517
+ "sourcePort": {
518
+ "type": "string",
519
+ "enum": [
520
+ "top",
521
+ "right",
522
+ "bottom",
523
+ "left"
524
+ ]
525
+ },
526
+ "targetPort": {
527
+ "type": "string",
528
+ "enum": [
529
+ "top",
530
+ "right",
531
+ "bottom",
532
+ "left"
533
+ ]
534
+ },
535
+ "sourceIndex": {
536
+ "type": "integer",
537
+ "minimum": 0,
538
+ "maximum": 11
539
+ },
540
+ "targetIndex": {
541
+ "type": "integer",
542
+ "minimum": 0,
543
+ "maximum": 11
544
+ },
545
+ "routing": {
546
+ "type": "string",
547
+ "enum": [
548
+ "orthogonal",
549
+ "straight"
550
+ ]
551
+ }
552
+ },
553
+ "additionalProperties": false
554
+ },
555
+ "roles": {
556
+ "type": "object",
557
+ "propertyNames": {
558
+ "type": "string",
559
+ "minLength": 1,
560
+ "maxLength": 80
561
+ },
562
+ "additionalProperties": {
563
+ "type": "object",
564
+ "properties": {
565
+ "fill": {
566
+ "type": "string",
567
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
568
+ },
569
+ "stroke": {
570
+ "type": "string",
571
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
572
+ },
573
+ "text": {
574
+ "type": "string",
575
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
576
+ },
577
+ "secondary": {
578
+ "type": "string",
579
+ "pattern": "^(#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|none|transparent)$"
580
+ },
581
+ "strokeWidth": {
582
+ "type": "number",
583
+ "minimum": 0,
584
+ "maximum": 12
585
+ },
586
+ "dash": {
587
+ "type": "string",
588
+ "enum": [
589
+ "solid",
590
+ "dashed",
591
+ "dotted"
592
+ ]
593
+ },
594
+ "radius": {
595
+ "type": "number",
596
+ "minimum": 0,
597
+ "maximum": 100
598
+ },
599
+ "opacity": {
600
+ "type": "number",
601
+ "minimum": 0.1,
602
+ "maximum": 1
603
+ },
604
+ "fontFamily": {
605
+ "type": "string",
606
+ "pattern": "^[a-zA-Z0-9 ,'-]{1,100}$"
607
+ },
608
+ "fontSize": {
609
+ "type": "number",
610
+ "minimum": 10,
611
+ "maximum": 40
612
+ },
613
+ "fontWeight": {
614
+ "anyOf": [
615
+ {
616
+ "type": "number",
617
+ "const": 400
618
+ },
619
+ {
620
+ "type": "number",
621
+ "const": 600
622
+ }
623
+ ]
624
+ },
625
+ "padding": {
626
+ "type": "number",
627
+ "minimum": 12,
628
+ "maximum": 64
629
+ },
630
+ "width": {
631
+ "type": "number",
632
+ "minimum": 80,
633
+ "maximum": 1200
634
+ },
635
+ "height": {
636
+ "type": "number",
637
+ "minimum": 40,
638
+ "maximum": 1600
639
+ },
640
+ "shape": {
641
+ "type": "string",
642
+ "enum": [
643
+ "rect",
644
+ "pill",
645
+ "diamond",
646
+ "ellipse",
647
+ "cylinder",
648
+ "text"
649
+ ]
650
+ },
651
+ "align": {
652
+ "type": "string",
653
+ "enum": [
654
+ "left",
655
+ "center",
656
+ "right"
657
+ ]
658
+ },
659
+ "verticalAlign": {
660
+ "type": "string",
661
+ "enum": [
662
+ "top",
663
+ "middle",
664
+ "bottom"
665
+ ]
666
+ },
667
+ "arrowStart": {
668
+ "type": "string",
669
+ "enum": [
670
+ "none",
671
+ "open",
672
+ "filled",
673
+ "diamond",
674
+ "circle"
675
+ ]
676
+ },
677
+ "arrowEnd": {
678
+ "type": "string",
679
+ "enum": [
680
+ "none",
681
+ "open",
682
+ "filled",
683
+ "diamond",
684
+ "circle"
685
+ ]
686
+ },
687
+ "sourcePort": {
688
+ "type": "string",
689
+ "enum": [
690
+ "top",
691
+ "right",
692
+ "bottom",
693
+ "left"
694
+ ]
695
+ },
696
+ "targetPort": {
697
+ "type": "string",
698
+ "enum": [
699
+ "top",
700
+ "right",
701
+ "bottom",
702
+ "left"
703
+ ]
704
+ },
705
+ "sourceIndex": {
706
+ "type": "integer",
707
+ "minimum": 0,
708
+ "maximum": 11
709
+ },
710
+ "targetIndex": {
711
+ "type": "integer",
712
+ "minimum": 0,
713
+ "maximum": 11
714
+ },
715
+ "routing": {
716
+ "type": "string",
717
+ "enum": [
718
+ "orthogonal",
719
+ "straight"
720
+ ]
721
+ }
722
+ },
723
+ "additionalProperties": false
724
+ }
725
+ }
726
+ },
727
+ "required": [
728
+ "version",
729
+ "id",
730
+ "name",
731
+ "revision"
732
+ ],
733
+ "additionalProperties": false
734
+ }