umlimator 0.11.0 → 0.12.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.
- package/README.md +72 -8
- package/lib/umlimator.d.ts +143 -1
- package/lib/umlimator.js +983 -77
- package/lib/umlimator.schema.json +1139 -0
- package/package.json +2 -2
|
@@ -0,0 +1,1139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://zintaen.github.io/umlimator/lib/umlimator.schema.json",
|
|
4
|
+
"title": "umlimator map model",
|
|
5
|
+
"description": "A layered architecture map: shared cards (nodes) and lines (edges), and views that each show some of them. Keys beyond these are allowed.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"nodes",
|
|
9
|
+
"views"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"$schema": {
|
|
13
|
+
"type": "string"
|
|
14
|
+
},
|
|
15
|
+
"title": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "The map's title."
|
|
18
|
+
},
|
|
19
|
+
"root": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The view shown first (default: the view with no parent)."
|
|
22
|
+
},
|
|
23
|
+
"nodes": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"$ref": "#/$defs/node"
|
|
27
|
+
},
|
|
28
|
+
"description": "Every card, shared by the views."
|
|
29
|
+
},
|
|
30
|
+
"edges": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": {
|
|
33
|
+
"$ref": "#/$defs/edge"
|
|
34
|
+
},
|
|
35
|
+
"description": "Every line, shared by the views: a view draws those between its cards."
|
|
36
|
+
},
|
|
37
|
+
"views": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"minItems": 1,
|
|
40
|
+
"items": {
|
|
41
|
+
"$ref": "#/$defs/view"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"icons": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"description": "Icons by name, as render() draws them: g (an SVG group's inner markup, drawn in the card's colour) or src (an image URL or data URI).",
|
|
47
|
+
"additionalProperties": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"properties": {
|
|
50
|
+
"g": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"src": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"dark": {
|
|
57
|
+
"type": "boolean"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"authors": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"additionalProperties": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"properties": {
|
|
67
|
+
"name": {
|
|
68
|
+
"type": "string"
|
|
69
|
+
},
|
|
70
|
+
"url": {
|
|
71
|
+
"type": "string"
|
|
72
|
+
},
|
|
73
|
+
"avatar": {
|
|
74
|
+
"type": "string"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"sourcesBase": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"description": "A prefix for the cards' source paths."
|
|
82
|
+
},
|
|
83
|
+
"rules": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"items": {
|
|
86
|
+
"$ref": "#/$defs/rule"
|
|
87
|
+
},
|
|
88
|
+
"description": "What must hold: lines a rule forbids, or cycles between boxes. rules() lists what breaks them, the map marks it, and umlimator.py check fails on it."
|
|
89
|
+
},
|
|
90
|
+
"stories": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"$ref": "#/$defs/story"
|
|
94
|
+
},
|
|
95
|
+
"description": "Narrated walk-throughs of the map: handle.play(id), the page's Stories menu, umlimator.py record."
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"$defs": {
|
|
99
|
+
"kind": {
|
|
100
|
+
"description": "The card's kind, drawn as its colour and mark. An unknown kind draws as a script card.",
|
|
101
|
+
"anyOf": [
|
|
102
|
+
{
|
|
103
|
+
"enum": [
|
|
104
|
+
"frontend",
|
|
105
|
+
"backend",
|
|
106
|
+
"database",
|
|
107
|
+
"cloud",
|
|
108
|
+
"security",
|
|
109
|
+
"queue",
|
|
110
|
+
"external",
|
|
111
|
+
"file",
|
|
112
|
+
"ai",
|
|
113
|
+
"public",
|
|
114
|
+
"lane",
|
|
115
|
+
"script",
|
|
116
|
+
"skill-dep",
|
|
117
|
+
"dep",
|
|
118
|
+
"verb",
|
|
119
|
+
"step",
|
|
120
|
+
"hook",
|
|
121
|
+
"guard",
|
|
122
|
+
"board",
|
|
123
|
+
"state",
|
|
124
|
+
"client",
|
|
125
|
+
"ui",
|
|
126
|
+
"web",
|
|
127
|
+
"page",
|
|
128
|
+
"browser",
|
|
129
|
+
"app",
|
|
130
|
+
"api",
|
|
131
|
+
"service",
|
|
132
|
+
"server",
|
|
133
|
+
"function",
|
|
134
|
+
"endpoint",
|
|
135
|
+
"route",
|
|
136
|
+
"cli",
|
|
137
|
+
"worker",
|
|
138
|
+
"module",
|
|
139
|
+
"db",
|
|
140
|
+
"store",
|
|
141
|
+
"storage",
|
|
142
|
+
"cache",
|
|
143
|
+
"table",
|
|
144
|
+
"data",
|
|
145
|
+
"infra",
|
|
146
|
+
"cdn",
|
|
147
|
+
"deploy",
|
|
148
|
+
"host",
|
|
149
|
+
"ci",
|
|
150
|
+
"auth",
|
|
151
|
+
"secret",
|
|
152
|
+
"policy",
|
|
153
|
+
"bus",
|
|
154
|
+
"event",
|
|
155
|
+
"stream",
|
|
156
|
+
"webhook",
|
|
157
|
+
"cron",
|
|
158
|
+
"job",
|
|
159
|
+
"user",
|
|
160
|
+
"human",
|
|
161
|
+
"thirdparty",
|
|
162
|
+
"vendor",
|
|
163
|
+
"doc",
|
|
164
|
+
"config",
|
|
165
|
+
"skill",
|
|
166
|
+
"md",
|
|
167
|
+
"template",
|
|
168
|
+
"output",
|
|
169
|
+
"agent",
|
|
170
|
+
"llm",
|
|
171
|
+
"model"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"type": "string"
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
"tone": {
|
|
180
|
+
"description": "A palette colour: --um-<tone>.",
|
|
181
|
+
"anyOf": [
|
|
182
|
+
{
|
|
183
|
+
"enum": [
|
|
184
|
+
"accent",
|
|
185
|
+
"cyan",
|
|
186
|
+
"green",
|
|
187
|
+
"violet",
|
|
188
|
+
"amber",
|
|
189
|
+
"rose",
|
|
190
|
+
"orange",
|
|
191
|
+
"slate",
|
|
192
|
+
"fuchsia"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"type": "string"
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
"badge": {
|
|
201
|
+
"anyOf": [
|
|
202
|
+
{
|
|
203
|
+
"type": "string"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"type": "object",
|
|
207
|
+
"required": [
|
|
208
|
+
"text"
|
|
209
|
+
],
|
|
210
|
+
"properties": {
|
|
211
|
+
"text": {
|
|
212
|
+
"type": "string"
|
|
213
|
+
},
|
|
214
|
+
"tone": {
|
|
215
|
+
"$ref": "#/$defs/tone"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"side": {
|
|
222
|
+
"enum": [
|
|
223
|
+
"left",
|
|
224
|
+
"right",
|
|
225
|
+
"top",
|
|
226
|
+
"bottom"
|
|
227
|
+
],
|
|
228
|
+
"description": "The card side the line uses."
|
|
229
|
+
},
|
|
230
|
+
"node": {
|
|
231
|
+
"type": "object",
|
|
232
|
+
"required": [
|
|
233
|
+
"id"
|
|
234
|
+
],
|
|
235
|
+
"properties": {
|
|
236
|
+
"id": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"description": "Unique across the model, the view-local cards included."
|
|
239
|
+
},
|
|
240
|
+
"label": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"description": "The card's name."
|
|
243
|
+
},
|
|
244
|
+
"kind": {
|
|
245
|
+
"$ref": "#/$defs/kind"
|
|
246
|
+
},
|
|
247
|
+
"sublabel": {
|
|
248
|
+
"type": "string",
|
|
249
|
+
"description": "A line under the name."
|
|
250
|
+
},
|
|
251
|
+
"sub": {
|
|
252
|
+
"type": "string",
|
|
253
|
+
"description": "Same as sublabel."
|
|
254
|
+
},
|
|
255
|
+
"badge": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"description": "One tab on the card (badges takes several)."
|
|
258
|
+
},
|
|
259
|
+
"badges": {
|
|
260
|
+
"type": "array",
|
|
261
|
+
"items": {
|
|
262
|
+
"$ref": "#/$defs/badge"
|
|
263
|
+
},
|
|
264
|
+
"description": "Tabs on the card."
|
|
265
|
+
},
|
|
266
|
+
"verbs": {
|
|
267
|
+
"type": "array",
|
|
268
|
+
"items": {
|
|
269
|
+
"type": "string"
|
|
270
|
+
},
|
|
271
|
+
"description": "Chips on the card and in the details panel."
|
|
272
|
+
},
|
|
273
|
+
"icon": {
|
|
274
|
+
"type": "string",
|
|
275
|
+
"description": "A logo or line icon: a name from icons/manifest.json (render() draws what the model's icons table carries)."
|
|
276
|
+
},
|
|
277
|
+
"noSub": {
|
|
278
|
+
"type": "boolean",
|
|
279
|
+
"description": "The name only on the card; the sub-line stays in the details panel."
|
|
280
|
+
},
|
|
281
|
+
"opensView": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"description": "The view the card opens. It may name a view the host loads only when it is opened."
|
|
284
|
+
},
|
|
285
|
+
"opensCount": {
|
|
286
|
+
"type": "integer",
|
|
287
|
+
"minimum": 0,
|
|
288
|
+
"description": "The number on the ⤢ badge while the view it opens is not loaded."
|
|
289
|
+
},
|
|
290
|
+
"edited": {
|
|
291
|
+
"type": "boolean",
|
|
292
|
+
"description": "A marker on the card."
|
|
293
|
+
},
|
|
294
|
+
"change": {
|
|
295
|
+
"enum": [
|
|
296
|
+
"added",
|
|
297
|
+
"new",
|
|
298
|
+
"modified",
|
|
299
|
+
"changed",
|
|
300
|
+
"removed",
|
|
301
|
+
"planned"
|
|
302
|
+
],
|
|
303
|
+
"description": "A NEW, CHANGED, REMOVED or PLANNED badge; removed and planned cards are dashed."
|
|
304
|
+
},
|
|
305
|
+
"emphasis": {
|
|
306
|
+
"type": "boolean",
|
|
307
|
+
"description": "Drawn as a main step."
|
|
308
|
+
},
|
|
309
|
+
"what": {
|
|
310
|
+
"type": "string",
|
|
311
|
+
"description": "The details panel's first tab. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
312
|
+
},
|
|
313
|
+
"when": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"description": "When it happens. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
316
|
+
},
|
|
317
|
+
"how": {
|
|
318
|
+
"type": "string",
|
|
319
|
+
"description": "How it works. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
320
|
+
},
|
|
321
|
+
"note": {
|
|
322
|
+
"type": "string",
|
|
323
|
+
"description": "A note in the details panel."
|
|
324
|
+
},
|
|
325
|
+
"source": {
|
|
326
|
+
"anyOf": [
|
|
327
|
+
{
|
|
328
|
+
"type": "string"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"type": "array",
|
|
332
|
+
"items": {
|
|
333
|
+
"type": "string"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
],
|
|
337
|
+
"description": "Source paths (a :line suffix is fine), relative to sourcesBase."
|
|
338
|
+
},
|
|
339
|
+
"author": {
|
|
340
|
+
"type": "string",
|
|
341
|
+
"description": "A GitHub login: a name tag under the card."
|
|
342
|
+
},
|
|
343
|
+
"origin": {
|
|
344
|
+
"type": "string",
|
|
345
|
+
"description": "Where an external skill comes from."
|
|
346
|
+
},
|
|
347
|
+
"credits": {
|
|
348
|
+
"type": "array",
|
|
349
|
+
"items": {
|
|
350
|
+
"type": "string"
|
|
351
|
+
},
|
|
352
|
+
"description": "Further authors listed in the panel."
|
|
353
|
+
},
|
|
354
|
+
"examples": {
|
|
355
|
+
"type": "array",
|
|
356
|
+
"description": "A thumbnail gallery in the panel.",
|
|
357
|
+
"items": {
|
|
358
|
+
"type": "object",
|
|
359
|
+
"properties": {
|
|
360
|
+
"title": {
|
|
361
|
+
"type": "string"
|
|
362
|
+
},
|
|
363
|
+
"caption": {
|
|
364
|
+
"type": "string"
|
|
365
|
+
},
|
|
366
|
+
"thumb": {
|
|
367
|
+
"type": "string"
|
|
368
|
+
},
|
|
369
|
+
"full": {
|
|
370
|
+
"type": "string"
|
|
371
|
+
},
|
|
372
|
+
"href": {
|
|
373
|
+
"type": "string"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
"nodeOverride": {
|
|
381
|
+
"type": "object",
|
|
382
|
+
"description": "This card's fields in this view only.",
|
|
383
|
+
"properties": {
|
|
384
|
+
"label": {
|
|
385
|
+
"type": "string",
|
|
386
|
+
"description": "The card's name."
|
|
387
|
+
},
|
|
388
|
+
"kind": {
|
|
389
|
+
"$ref": "#/$defs/kind"
|
|
390
|
+
},
|
|
391
|
+
"sublabel": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"description": "A line under the name."
|
|
394
|
+
},
|
|
395
|
+
"sub": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"description": "Same as sublabel."
|
|
398
|
+
},
|
|
399
|
+
"badge": {
|
|
400
|
+
"type": "string",
|
|
401
|
+
"description": "One tab on the card (badges takes several)."
|
|
402
|
+
},
|
|
403
|
+
"badges": {
|
|
404
|
+
"type": "array",
|
|
405
|
+
"items": {
|
|
406
|
+
"$ref": "#/$defs/badge"
|
|
407
|
+
},
|
|
408
|
+
"description": "Tabs on the card."
|
|
409
|
+
},
|
|
410
|
+
"verbs": {
|
|
411
|
+
"type": "array",
|
|
412
|
+
"items": {
|
|
413
|
+
"type": "string"
|
|
414
|
+
},
|
|
415
|
+
"description": "Chips on the card and in the details panel."
|
|
416
|
+
},
|
|
417
|
+
"icon": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"description": "A logo or line icon: a name from icons/manifest.json (render() draws what the model's icons table carries)."
|
|
420
|
+
},
|
|
421
|
+
"noSub": {
|
|
422
|
+
"type": "boolean",
|
|
423
|
+
"description": "The name only on the card; the sub-line stays in the details panel."
|
|
424
|
+
},
|
|
425
|
+
"opensView": {
|
|
426
|
+
"type": "string",
|
|
427
|
+
"description": "The view the card opens. It may name a view the host loads only when it is opened."
|
|
428
|
+
},
|
|
429
|
+
"opensCount": {
|
|
430
|
+
"type": "integer",
|
|
431
|
+
"minimum": 0,
|
|
432
|
+
"description": "The number on the ⤢ badge while the view it opens is not loaded."
|
|
433
|
+
},
|
|
434
|
+
"edited": {
|
|
435
|
+
"type": "boolean",
|
|
436
|
+
"description": "A marker on the card."
|
|
437
|
+
},
|
|
438
|
+
"change": {
|
|
439
|
+
"enum": [
|
|
440
|
+
"added",
|
|
441
|
+
"new",
|
|
442
|
+
"modified",
|
|
443
|
+
"changed",
|
|
444
|
+
"removed",
|
|
445
|
+
"planned"
|
|
446
|
+
],
|
|
447
|
+
"description": "A NEW, CHANGED, REMOVED or PLANNED badge; removed and planned cards are dashed."
|
|
448
|
+
},
|
|
449
|
+
"emphasis": {
|
|
450
|
+
"type": "boolean",
|
|
451
|
+
"description": "Drawn as a main step."
|
|
452
|
+
},
|
|
453
|
+
"what": {
|
|
454
|
+
"type": "string",
|
|
455
|
+
"description": "The details panel's first tab. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
456
|
+
},
|
|
457
|
+
"when": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"description": "When it happens. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
460
|
+
},
|
|
461
|
+
"how": {
|
|
462
|
+
"type": "string",
|
|
463
|
+
"description": "How it works. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
464
|
+
},
|
|
465
|
+
"note": {
|
|
466
|
+
"type": "string",
|
|
467
|
+
"description": "A note in the details panel."
|
|
468
|
+
},
|
|
469
|
+
"source": {
|
|
470
|
+
"anyOf": [
|
|
471
|
+
{
|
|
472
|
+
"type": "string"
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"type": "array",
|
|
476
|
+
"items": {
|
|
477
|
+
"type": "string"
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
],
|
|
481
|
+
"description": "Source paths (a :line suffix is fine), relative to sourcesBase."
|
|
482
|
+
},
|
|
483
|
+
"author": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"description": "A GitHub login: a name tag under the card."
|
|
486
|
+
},
|
|
487
|
+
"origin": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"description": "Where an external skill comes from."
|
|
490
|
+
},
|
|
491
|
+
"credits": {
|
|
492
|
+
"type": "array",
|
|
493
|
+
"items": {
|
|
494
|
+
"type": "string"
|
|
495
|
+
},
|
|
496
|
+
"description": "Further authors listed in the panel."
|
|
497
|
+
},
|
|
498
|
+
"examples": {
|
|
499
|
+
"type": "array",
|
|
500
|
+
"description": "A thumbnail gallery in the panel.",
|
|
501
|
+
"items": {
|
|
502
|
+
"type": "object",
|
|
503
|
+
"properties": {
|
|
504
|
+
"title": {
|
|
505
|
+
"type": "string"
|
|
506
|
+
},
|
|
507
|
+
"caption": {
|
|
508
|
+
"type": "string"
|
|
509
|
+
},
|
|
510
|
+
"thumb": {
|
|
511
|
+
"type": "string"
|
|
512
|
+
},
|
|
513
|
+
"full": {
|
|
514
|
+
"type": "string"
|
|
515
|
+
},
|
|
516
|
+
"href": {
|
|
517
|
+
"type": "string"
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
},
|
|
524
|
+
"edge": {
|
|
525
|
+
"type": "object",
|
|
526
|
+
"required": [
|
|
527
|
+
"from",
|
|
528
|
+
"to"
|
|
529
|
+
],
|
|
530
|
+
"properties": {
|
|
531
|
+
"id": {
|
|
532
|
+
"type": "string",
|
|
533
|
+
"description": "A line's id; views and events refer to it. Without one, a line is \"<from>-><to>#<n>\"."
|
|
534
|
+
},
|
|
535
|
+
"from": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "A card's id, or a box's id in the view: the line ends on its border."
|
|
538
|
+
},
|
|
539
|
+
"to": {
|
|
540
|
+
"type": "string",
|
|
541
|
+
"description": "A card's id, or a box's id in the view: the line ends on its border."
|
|
542
|
+
},
|
|
543
|
+
"label": {
|
|
544
|
+
"type": "string",
|
|
545
|
+
"description": "A verb or protocol, short."
|
|
546
|
+
},
|
|
547
|
+
"sublabel": {
|
|
548
|
+
"type": "string",
|
|
549
|
+
"description": "A second, smaller line under the label (a technology, say); shown only with a label."
|
|
550
|
+
},
|
|
551
|
+
"kind": {
|
|
552
|
+
"enum": [
|
|
553
|
+
"calls",
|
|
554
|
+
"feeds",
|
|
555
|
+
"triggers",
|
|
556
|
+
"state",
|
|
557
|
+
"guard"
|
|
558
|
+
],
|
|
559
|
+
"description": "What the line means, drawn as its colour (default calls)."
|
|
560
|
+
},
|
|
561
|
+
"weight": {
|
|
562
|
+
"enum": [
|
|
563
|
+
1,
|
|
564
|
+
2,
|
|
565
|
+
3
|
|
566
|
+
],
|
|
567
|
+
"description": "How much the line stands for, drawn as its width (default 1)."
|
|
568
|
+
},
|
|
569
|
+
"style": {
|
|
570
|
+
"enum": [
|
|
571
|
+
"emphasis",
|
|
572
|
+
"added",
|
|
573
|
+
"dashed",
|
|
574
|
+
"async",
|
|
575
|
+
"security",
|
|
576
|
+
"removed",
|
|
577
|
+
"faded"
|
|
578
|
+
],
|
|
579
|
+
"description": "A style that wins over the kind's colour; faded keeps the kind's colour, faint and with no flow."
|
|
580
|
+
},
|
|
581
|
+
"change": {
|
|
582
|
+
"enum": [
|
|
583
|
+
"added",
|
|
584
|
+
"removed",
|
|
585
|
+
"changed"
|
|
586
|
+
],
|
|
587
|
+
"description": "Drawn as an added or removed line; diff() marks a changed one edited."
|
|
588
|
+
},
|
|
589
|
+
"edited": {
|
|
590
|
+
"type": "boolean",
|
|
591
|
+
"description": "A marker on the line."
|
|
592
|
+
},
|
|
593
|
+
"drift": {
|
|
594
|
+
"enum": [
|
|
595
|
+
"undrawn",
|
|
596
|
+
"idle"
|
|
597
|
+
],
|
|
598
|
+
"description": "What drift() found: a line that carried traffic but was not drawn, or a drawn one that carried none."
|
|
599
|
+
},
|
|
600
|
+
"fromSide": {
|
|
601
|
+
"$ref": "#/$defs/side"
|
|
602
|
+
},
|
|
603
|
+
"toSide": {
|
|
604
|
+
"$ref": "#/$defs/side"
|
|
605
|
+
},
|
|
606
|
+
"loop": {
|
|
607
|
+
"type": "boolean",
|
|
608
|
+
"description": "The view's loop back, whatever the cards' order."
|
|
609
|
+
},
|
|
610
|
+
"what": {
|
|
611
|
+
"type": "string",
|
|
612
|
+
"description": "The details panel. Markdown: `code`, **bold**, [links](https://…), blank-line paragraphs, - bullets."
|
|
613
|
+
},
|
|
614
|
+
"when": {
|
|
615
|
+
"type": "string",
|
|
616
|
+
"description": "When the line is used."
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
"container": {
|
|
621
|
+
"type": "object",
|
|
622
|
+
"required": [
|
|
623
|
+
"id"
|
|
624
|
+
],
|
|
625
|
+
"properties": {
|
|
626
|
+
"id": {
|
|
627
|
+
"type": "string",
|
|
628
|
+
"description": "Unique in the view; a line may end on it."
|
|
629
|
+
},
|
|
630
|
+
"label": {
|
|
631
|
+
"type": "string",
|
|
632
|
+
"description": "The box's title."
|
|
633
|
+
},
|
|
634
|
+
"nodeIds": {
|
|
635
|
+
"type": "array",
|
|
636
|
+
"items": {
|
|
637
|
+
"type": "string"
|
|
638
|
+
},
|
|
639
|
+
"description": "The cards in the box; its child boxes come in by their parent."
|
|
640
|
+
},
|
|
641
|
+
"parent": {
|
|
642
|
+
"type": "string",
|
|
643
|
+
"description": "The box this one sits in."
|
|
644
|
+
},
|
|
645
|
+
"badges": {
|
|
646
|
+
"type": "array",
|
|
647
|
+
"items": {
|
|
648
|
+
"$ref": "#/$defs/badge"
|
|
649
|
+
},
|
|
650
|
+
"description": "Tabs on the box's border."
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"view": {
|
|
655
|
+
"type": "object",
|
|
656
|
+
"required": [
|
|
657
|
+
"id",
|
|
658
|
+
"nodeIds"
|
|
659
|
+
],
|
|
660
|
+
"properties": {
|
|
661
|
+
"id": {
|
|
662
|
+
"type": "string",
|
|
663
|
+
"description": "Unique. A card with the same id opens this view."
|
|
664
|
+
},
|
|
665
|
+
"parent": {
|
|
666
|
+
"type": [
|
|
667
|
+
"string",
|
|
668
|
+
"null"
|
|
669
|
+
],
|
|
670
|
+
"description": "The view this one is inside (breadcrumbs, the up button)."
|
|
671
|
+
},
|
|
672
|
+
"title": {
|
|
673
|
+
"type": "string",
|
|
674
|
+
"description": "The view's title."
|
|
675
|
+
},
|
|
676
|
+
"caption": {
|
|
677
|
+
"type": "string",
|
|
678
|
+
"description": "One line under the title."
|
|
679
|
+
},
|
|
680
|
+
"note": {
|
|
681
|
+
"type": "string",
|
|
682
|
+
"description": "A note for the view."
|
|
683
|
+
},
|
|
684
|
+
"nodeIds": {
|
|
685
|
+
"type": "array",
|
|
686
|
+
"items": {
|
|
687
|
+
"type": "string"
|
|
688
|
+
},
|
|
689
|
+
"description": "The cards this view shows."
|
|
690
|
+
},
|
|
691
|
+
"edges": {
|
|
692
|
+
"type": "array",
|
|
693
|
+
"description": "The lines this view draws: model line ids or lines of its own. Default: every model line between its cards; [] draws none.",
|
|
694
|
+
"items": {
|
|
695
|
+
"anyOf": [
|
|
696
|
+
{
|
|
697
|
+
"type": "string"
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"$ref": "#/$defs/edge"
|
|
701
|
+
}
|
|
702
|
+
]
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
"nodes": {
|
|
706
|
+
"type": "array",
|
|
707
|
+
"items": {
|
|
708
|
+
"$ref": "#/$defs/node"
|
|
709
|
+
},
|
|
710
|
+
"description": "Cards only this view has."
|
|
711
|
+
},
|
|
712
|
+
"nodeOverrides": {
|
|
713
|
+
"type": "object",
|
|
714
|
+
"additionalProperties": {
|
|
715
|
+
"$ref": "#/$defs/nodeOverride"
|
|
716
|
+
},
|
|
717
|
+
"description": "Cards' fields changed in this view only, by card id."
|
|
718
|
+
},
|
|
719
|
+
"layout": {
|
|
720
|
+
"type": "object",
|
|
721
|
+
"description": "Places set by hand: card id → [column, row] (halves allowed). Default: laid out automatically.",
|
|
722
|
+
"additionalProperties": {
|
|
723
|
+
"type": "array",
|
|
724
|
+
"prefixItems": [
|
|
725
|
+
{
|
|
726
|
+
"type": "number"
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
"type": "number"
|
|
730
|
+
}
|
|
731
|
+
],
|
|
732
|
+
"minItems": 2,
|
|
733
|
+
"maxItems": 2
|
|
734
|
+
}
|
|
735
|
+
},
|
|
736
|
+
"containers": {
|
|
737
|
+
"type": "array",
|
|
738
|
+
"items": {
|
|
739
|
+
"$ref": "#/$defs/container"
|
|
740
|
+
},
|
|
741
|
+
"description": "Boxes around cards; parent nests them."
|
|
742
|
+
},
|
|
743
|
+
"render": {
|
|
744
|
+
"enum": [
|
|
745
|
+
"sequence",
|
|
746
|
+
"process"
|
|
747
|
+
],
|
|
748
|
+
"description": "sequence: the lines are the run order, numbered. process: four to six bold, numbered steps."
|
|
749
|
+
},
|
|
750
|
+
"mainSteps": {
|
|
751
|
+
"type": "boolean",
|
|
752
|
+
"description": "Same as render: process."
|
|
753
|
+
},
|
|
754
|
+
"stepIds": {
|
|
755
|
+
"type": "array",
|
|
756
|
+
"items": {
|
|
757
|
+
"type": "string"
|
|
758
|
+
},
|
|
759
|
+
"description": "A process view's main steps; its other cards draw as tools."
|
|
760
|
+
},
|
|
761
|
+
"lanes": {
|
|
762
|
+
"description": "Swimlanes: by hand, or false for none (a sequence view derives them).",
|
|
763
|
+
"anyOf": [
|
|
764
|
+
{
|
|
765
|
+
"const": false
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
"type": "array",
|
|
769
|
+
"items": {
|
|
770
|
+
"type": "object",
|
|
771
|
+
"properties": {
|
|
772
|
+
"title": {
|
|
773
|
+
"type": "string"
|
|
774
|
+
},
|
|
775
|
+
"label": {
|
|
776
|
+
"type": "string"
|
|
777
|
+
},
|
|
778
|
+
"nodeIds": {
|
|
779
|
+
"type": "array",
|
|
780
|
+
"items": {
|
|
781
|
+
"type": "string"
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
]
|
|
788
|
+
},
|
|
789
|
+
"tour": {
|
|
790
|
+
"type": "array",
|
|
791
|
+
"items": {
|
|
792
|
+
"type": "string"
|
|
793
|
+
},
|
|
794
|
+
"description": "Cards a dot rides through, in order."
|
|
795
|
+
},
|
|
796
|
+
"browserOrder": {
|
|
797
|
+
"type": "array",
|
|
798
|
+
"items": {
|
|
799
|
+
"type": "string"
|
|
800
|
+
},
|
|
801
|
+
"description": "Views the view list shows first."
|
|
802
|
+
},
|
|
803
|
+
"node": {
|
|
804
|
+
"type": "string",
|
|
805
|
+
"description": "The card the view is about (default: the card with the view's id)."
|
|
806
|
+
},
|
|
807
|
+
"intake": {
|
|
808
|
+
"type": "array",
|
|
809
|
+
"items": {
|
|
810
|
+
"type": "object",
|
|
811
|
+
"properties": {
|
|
812
|
+
"label": {
|
|
813
|
+
"type": "string"
|
|
814
|
+
},
|
|
815
|
+
"to": {
|
|
816
|
+
"type": "string"
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
},
|
|
821
|
+
"gap": {
|
|
822
|
+
"type": "number",
|
|
823
|
+
"description": "Space between columns, in px."
|
|
824
|
+
},
|
|
825
|
+
"rgap": {
|
|
826
|
+
"type": "number",
|
|
827
|
+
"description": "Space between rows, in px."
|
|
828
|
+
},
|
|
829
|
+
"keepPairs": {
|
|
830
|
+
"type": "boolean",
|
|
831
|
+
"description": "A→B and B→A drawn as two lines, not one two-way line."
|
|
832
|
+
},
|
|
833
|
+
"repair": {
|
|
834
|
+
"type": "boolean",
|
|
835
|
+
"description": "false: no port repair (a switch for debugging the router)."
|
|
836
|
+
},
|
|
837
|
+
"subAndChips": {
|
|
838
|
+
"type": "boolean",
|
|
839
|
+
"description": "Cards 80 px tall that show their sub-line, then their chips."
|
|
840
|
+
},
|
|
841
|
+
"kindsFromLabels": {
|
|
842
|
+
"type": "boolean",
|
|
843
|
+
"description": "Guess a line's kind from its label's words when its edges name none (render() and layout(); the standalone page always does)."
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
"rule": {
|
|
848
|
+
"type": "object",
|
|
849
|
+
"required": [
|
|
850
|
+
"id"
|
|
851
|
+
],
|
|
852
|
+
"description": "No line from the cards `from` picks to the cards `to` picks (a side left out picks every card), or, with noCycles, no boxes that reach each other through their lines.",
|
|
853
|
+
"properties": {
|
|
854
|
+
"id": {
|
|
855
|
+
"type": "string",
|
|
856
|
+
"description": "Unique among the rules."
|
|
857
|
+
},
|
|
858
|
+
"title": {
|
|
859
|
+
"type": "string",
|
|
860
|
+
"description": "What the rule says, as its breaks name it: \"Apps never call a database directly\"."
|
|
861
|
+
},
|
|
862
|
+
"views": {
|
|
863
|
+
"type": "array",
|
|
864
|
+
"items": {
|
|
865
|
+
"type": "string"
|
|
866
|
+
},
|
|
867
|
+
"description": "Narrows the views it holds in: by default every view, or, for a rule that names a box (a container, or a box's id, in from, to or a not), the views that draw one of the boxes it names."
|
|
868
|
+
},
|
|
869
|
+
"from": {
|
|
870
|
+
"$ref": "#/$defs/selector",
|
|
871
|
+
"description": "The cards a forbidden line starts from."
|
|
872
|
+
},
|
|
873
|
+
"to": {
|
|
874
|
+
"$ref": "#/$defs/selector",
|
|
875
|
+
"description": "The cards a forbidden line ends on."
|
|
876
|
+
},
|
|
877
|
+
"noCycles": {
|
|
878
|
+
"const": true,
|
|
879
|
+
"description": "No boxes reach each other through their lines: a line counts between the two boxes that hold its ends right under the box (or view) they share."
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
"anyOf": [
|
|
883
|
+
{
|
|
884
|
+
"required": [
|
|
885
|
+
"from"
|
|
886
|
+
]
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
"required": [
|
|
890
|
+
"to"
|
|
891
|
+
]
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
"required": [
|
|
895
|
+
"noCycles"
|
|
896
|
+
]
|
|
897
|
+
}
|
|
898
|
+
]
|
|
899
|
+
},
|
|
900
|
+
"selector": {
|
|
901
|
+
"type": "object",
|
|
902
|
+
"additionalProperties": false,
|
|
903
|
+
"description": "Picks cards: every key given must hold. A line's end on a box is that box: in it, and of no kind.",
|
|
904
|
+
"properties": {
|
|
905
|
+
"id": {
|
|
906
|
+
"description": "Cards (or boxes) by id.",
|
|
907
|
+
"anyOf": [
|
|
908
|
+
{
|
|
909
|
+
"type": "string"
|
|
910
|
+
},
|
|
911
|
+
{
|
|
912
|
+
"type": "array",
|
|
913
|
+
"items": {
|
|
914
|
+
"type": "string"
|
|
915
|
+
},
|
|
916
|
+
"minItems": 1
|
|
917
|
+
}
|
|
918
|
+
]
|
|
919
|
+
},
|
|
920
|
+
"kind": {
|
|
921
|
+
"description": "Cards by kind, as the map draws it: \"db\" picks databases.",
|
|
922
|
+
"anyOf": [
|
|
923
|
+
{
|
|
924
|
+
"$ref": "#/$defs/kind"
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
"type": "array",
|
|
928
|
+
"items": {
|
|
929
|
+
"$ref": "#/$defs/kind"
|
|
930
|
+
},
|
|
931
|
+
"minItems": 1
|
|
932
|
+
}
|
|
933
|
+
]
|
|
934
|
+
},
|
|
935
|
+
"container": {
|
|
936
|
+
"description": "Cards in these boxes, at any depth.",
|
|
937
|
+
"anyOf": [
|
|
938
|
+
{
|
|
939
|
+
"type": "string"
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"type": "array",
|
|
943
|
+
"items": {
|
|
944
|
+
"type": "string"
|
|
945
|
+
},
|
|
946
|
+
"minItems": 1
|
|
947
|
+
}
|
|
948
|
+
]
|
|
949
|
+
},
|
|
950
|
+
"not": {
|
|
951
|
+
"$ref": "#/$defs/selector",
|
|
952
|
+
"description": "The cards this selector does not pick."
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
},
|
|
956
|
+
"story": {
|
|
957
|
+
"type": "object",
|
|
958
|
+
"required": [
|
|
959
|
+
"id",
|
|
960
|
+
"steps"
|
|
961
|
+
],
|
|
962
|
+
"properties": {
|
|
963
|
+
"id": {
|
|
964
|
+
"type": "string",
|
|
965
|
+
"description": "Unique among the stories: handle.play(id), and #story=<id> in a page's link."
|
|
966
|
+
},
|
|
967
|
+
"title": {
|
|
968
|
+
"type": "string",
|
|
969
|
+
"description": "The story's name, in the Stories menu and over its captions."
|
|
970
|
+
},
|
|
971
|
+
"steps": {
|
|
972
|
+
"type": "array",
|
|
973
|
+
"minItems": 1,
|
|
974
|
+
"items": {
|
|
975
|
+
"$ref": "#/$defs/storyStep"
|
|
976
|
+
},
|
|
977
|
+
"description": "What the story shows, in order."
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
},
|
|
981
|
+
"storyStep": {
|
|
982
|
+
"type": "object",
|
|
983
|
+
"required": [
|
|
984
|
+
"view"
|
|
985
|
+
],
|
|
986
|
+
"description": "One step: it sets the whole picture (what it leaves out is cleared), then plays its tour.",
|
|
987
|
+
"properties": {
|
|
988
|
+
"view": {
|
|
989
|
+
"type": "string",
|
|
990
|
+
"description": "The view the step shows."
|
|
991
|
+
},
|
|
992
|
+
"caption": {
|
|
993
|
+
"type": "string",
|
|
994
|
+
"description": "What the step says, in the caption bar and to screen readers."
|
|
995
|
+
},
|
|
996
|
+
"select": {
|
|
997
|
+
"description": "The card or line selected: an id, or a Ref.",
|
|
998
|
+
"anyOf": [
|
|
999
|
+
{
|
|
1000
|
+
"type": "string"
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
"type": "object",
|
|
1004
|
+
"required": [
|
|
1005
|
+
"type"
|
|
1006
|
+
],
|
|
1007
|
+
"properties": {
|
|
1008
|
+
"type": {
|
|
1009
|
+
"enum": [
|
|
1010
|
+
"node",
|
|
1011
|
+
"edge",
|
|
1012
|
+
"container"
|
|
1013
|
+
]
|
|
1014
|
+
},
|
|
1015
|
+
"id": {
|
|
1016
|
+
"type": "string"
|
|
1017
|
+
},
|
|
1018
|
+
"ids": {
|
|
1019
|
+
"type": "array",
|
|
1020
|
+
"items": {
|
|
1021
|
+
"type": "string"
|
|
1022
|
+
}
|
|
1023
|
+
},
|
|
1024
|
+
"level": {
|
|
1025
|
+
"type": "number",
|
|
1026
|
+
"minimum": 0,
|
|
1027
|
+
"maximum": 1
|
|
1028
|
+
},
|
|
1029
|
+
"distance": {
|
|
1030
|
+
"type": "number",
|
|
1031
|
+
"minimum": 0
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
]
|
|
1036
|
+
},
|
|
1037
|
+
"highlight": {
|
|
1038
|
+
"type": "array",
|
|
1039
|
+
"items": {
|
|
1040
|
+
"description": "A card or line by id, or a Ref (as events name things).",
|
|
1041
|
+
"anyOf": [
|
|
1042
|
+
{
|
|
1043
|
+
"type": "string"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"type": "object",
|
|
1047
|
+
"required": [
|
|
1048
|
+
"type"
|
|
1049
|
+
],
|
|
1050
|
+
"properties": {
|
|
1051
|
+
"type": {
|
|
1052
|
+
"enum": [
|
|
1053
|
+
"node",
|
|
1054
|
+
"edge",
|
|
1055
|
+
"container"
|
|
1056
|
+
]
|
|
1057
|
+
},
|
|
1058
|
+
"id": {
|
|
1059
|
+
"type": "string"
|
|
1060
|
+
},
|
|
1061
|
+
"ids": {
|
|
1062
|
+
"type": "array",
|
|
1063
|
+
"items": {
|
|
1064
|
+
"type": "string"
|
|
1065
|
+
}
|
|
1066
|
+
},
|
|
1067
|
+
"level": {
|
|
1068
|
+
"type": "number",
|
|
1069
|
+
"minimum": 0,
|
|
1070
|
+
"maximum": 1
|
|
1071
|
+
},
|
|
1072
|
+
"distance": {
|
|
1073
|
+
"type": "number",
|
|
1074
|
+
"minimum": 0
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
]
|
|
1079
|
+
},
|
|
1080
|
+
"description": "Cards and lines lit, the rest dimmed: ids or Refs; the lines between two cards it names light too."
|
|
1081
|
+
},
|
|
1082
|
+
"tour": {
|
|
1083
|
+
"type": "array",
|
|
1084
|
+
"items": {
|
|
1085
|
+
"type": "string"
|
|
1086
|
+
},
|
|
1087
|
+
"description": "Card ids: the path a dot rides, once the step is shown."
|
|
1088
|
+
},
|
|
1089
|
+
"camera": {
|
|
1090
|
+
"description": "Where the camera goes: \"fit\" (the default), a point and zoom, or a card to frame.",
|
|
1091
|
+
"anyOf": [
|
|
1092
|
+
{
|
|
1093
|
+
"const": "fit"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
"type": "object",
|
|
1097
|
+
"required": [
|
|
1098
|
+
"x",
|
|
1099
|
+
"y"
|
|
1100
|
+
],
|
|
1101
|
+
"properties": {
|
|
1102
|
+
"x": {
|
|
1103
|
+
"type": "number"
|
|
1104
|
+
},
|
|
1105
|
+
"y": {
|
|
1106
|
+
"type": "number"
|
|
1107
|
+
},
|
|
1108
|
+
"zoom": {
|
|
1109
|
+
"type": "number",
|
|
1110
|
+
"exclusiveMinimum": 0
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
"type": "object",
|
|
1116
|
+
"required": [
|
|
1117
|
+
"card"
|
|
1118
|
+
],
|
|
1119
|
+
"properties": {
|
|
1120
|
+
"card": {
|
|
1121
|
+
"type": "string"
|
|
1122
|
+
},
|
|
1123
|
+
"zoom": {
|
|
1124
|
+
"type": "number",
|
|
1125
|
+
"exclusiveMinimum": 0
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
]
|
|
1130
|
+
},
|
|
1131
|
+
"duration": {
|
|
1132
|
+
"type": "number",
|
|
1133
|
+
"exclusiveMinimum": 0,
|
|
1134
|
+
"description": "The step's time in ms when playing (default 4000); its tour runs to its end first."
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
}
|