@diagrammo/dgmo 0.15.1 → 0.16.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 (109) hide show
  1. package/README.md +9 -9
  2. package/dist/advanced.cjs +479 -454
  3. package/dist/advanced.d.cts +34 -35
  4. package/dist/advanced.d.ts +34 -35
  5. package/dist/advanced.js +479 -453
  6. package/dist/auto.cjs +374 -352
  7. package/dist/auto.js +103 -103
  8. package/dist/auto.mjs +374 -352
  9. package/dist/cli.cjs +140 -140
  10. package/dist/editor.cjs +8 -9
  11. package/dist/editor.js +8 -9
  12. package/dist/highlight.cjs +8 -9
  13. package/dist/highlight.js +8 -9
  14. package/dist/index.cjs +365 -342
  15. package/dist/index.js +365 -342
  16. package/dist/internal.cjs +479 -454
  17. package/dist/internal.d.cts +34 -35
  18. package/dist/internal.d.ts +34 -35
  19. package/dist/internal.js +479 -453
  20. package/dist/pert.d.cts +2 -2
  21. package/dist/pert.d.ts +2 -2
  22. package/docs/language-reference.md +83 -66
  23. package/gallery/fixtures/area.dgmo +3 -3
  24. package/gallery/fixtures/bar-stacked.dgmo +5 -5
  25. package/gallery/fixtures/boxes-and-lines.dgmo +2 -2
  26. package/gallery/fixtures/c4-full.dgmo +8 -8
  27. package/gallery/fixtures/class-full.dgmo +2 -2
  28. package/gallery/fixtures/doughnut.dgmo +6 -6
  29. package/gallery/fixtures/flowchart-colors.dgmo +3 -3
  30. package/gallery/fixtures/function.dgmo +3 -3
  31. package/gallery/fixtures/gantt-full.dgmo +9 -9
  32. package/gallery/fixtures/gantt.dgmo +7 -7
  33. package/gallery/fixtures/infra-full.dgmo +6 -6
  34. package/gallery/fixtures/infra.dgmo +2 -2
  35. package/gallery/fixtures/kanban.dgmo +9 -9
  36. package/gallery/fixtures/line.dgmo +2 -2
  37. package/gallery/fixtures/multi-line.dgmo +3 -3
  38. package/gallery/fixtures/org-full.dgmo +6 -6
  39. package/gallery/fixtures/quadrant.dgmo +2 -2
  40. package/gallery/fixtures/sankey.dgmo +9 -9
  41. package/gallery/fixtures/scatter.dgmo +3 -3
  42. package/gallery/fixtures/sequence-tags-protocols.dgmo +8 -8
  43. package/gallery/fixtures/sequence-tags.dgmo +7 -7
  44. package/gallery/fixtures/sitemap-full.dgmo +7 -7
  45. package/gallery/fixtures/slope.dgmo +5 -5
  46. package/gallery/fixtures/spr-eras.dgmo +9 -9
  47. package/gallery/fixtures/timeline.dgmo +3 -3
  48. package/gallery/fixtures/venn.dgmo +3 -3
  49. package/package.json +1 -1
  50. package/src/advanced.ts +0 -1
  51. package/src/boxes-and-lines/renderer.ts +5 -1
  52. package/src/c4/parser.ts +1 -1
  53. package/src/c4/renderer.ts +15 -8
  54. package/src/chart.ts +18 -9
  55. package/src/class/parser.ts +7 -6
  56. package/src/class/renderer.ts +17 -6
  57. package/src/cli.ts +6 -6
  58. package/src/completion.ts +13 -3
  59. package/src/cycle/parser.ts +14 -0
  60. package/src/cycle/renderer.ts +6 -3
  61. package/src/d3.ts +86 -46
  62. package/src/echarts.ts +26 -9
  63. package/src/editor/dgmo.grammar +1 -3
  64. package/src/editor/dgmo.grammar.js +8 -8
  65. package/src/editor/dgmo.grammar.terms.js +11 -12
  66. package/src/editor/highlight-api.ts +0 -1
  67. package/src/editor/highlight.ts +0 -1
  68. package/src/er/parser.ts +18 -11
  69. package/src/er/renderer.ts +19 -7
  70. package/src/gantt/parser.ts +1 -1
  71. package/src/gantt/renderer.ts +7 -4
  72. package/src/graph/flowchart-parser.ts +18 -84
  73. package/src/graph/flowchart-renderer.ts +3 -8
  74. package/src/graph/layout.ts +0 -2
  75. package/src/graph/state-parser.ts +17 -62
  76. package/src/graph/state-renderer.ts +3 -8
  77. package/src/infra/parser.ts +21 -11
  78. package/src/infra/renderer.ts +7 -4
  79. package/src/journey-map/parser.ts +10 -3
  80. package/src/journey-map/renderer.ts +3 -1
  81. package/src/kanban/parser.ts +10 -6
  82. package/src/kanban/renderer.ts +3 -1
  83. package/src/mindmap/parser.ts +2 -2
  84. package/src/mindmap/renderer.ts +2 -1
  85. package/src/org/parser.ts +2 -2
  86. package/src/org/renderer.ts +4 -3
  87. package/src/pert/parser.ts +7 -7
  88. package/src/pert/renderer.ts +7 -2
  89. package/src/pert/types.ts +1 -1
  90. package/src/pyramid/parser.ts +12 -0
  91. package/src/raci/parser.ts +40 -10
  92. package/src/raci/renderer.ts +2 -1
  93. package/src/raci/types.ts +4 -3
  94. package/src/ring/parser.ts +12 -0
  95. package/src/sequence/parser.ts +15 -9
  96. package/src/sequence/renderer.ts +1 -1
  97. package/src/sitemap/layout.ts +0 -2
  98. package/src/sitemap/parser.ts +11 -37
  99. package/src/sitemap/renderer.ts +13 -13
  100. package/src/sitemap/types.ts +0 -1
  101. package/src/tech-radar/renderer.ts +5 -3
  102. package/src/tech-radar/types.ts +2 -0
  103. package/src/utils/arrows.ts +3 -28
  104. package/src/utils/legend-d3.ts +12 -6
  105. package/src/utils/legend-layout.ts +1 -1
  106. package/src/utils/legend-types.ts +1 -1
  107. package/src/utils/parsing.ts +64 -35
  108. package/src/utils/tag-groups.ts +98 -18
  109. package/src/wireframe/parser.ts +2 -2
package/dist/pert.d.cts CHANGED
@@ -12,7 +12,7 @@ interface DgmoError {
12
12
  code?: string;
13
13
  }
14
14
 
15
- /** A single entry inside a tag group: `Value(color)` */
15
+ /** A single entry inside a tag group: `Value color` */
16
16
  interface TagEntry {
17
17
  value: string;
18
18
  color: string;
@@ -248,7 +248,7 @@ interface ParsedPert {
248
248
  groups: PertGroup[];
249
249
  /**
250
250
  * Tag groups declared at the top of the diagram (`tag Priority as p
251
- * High(red), Low(green)`). Drive node fill via `resolveTagColor()`.
251
+ * High red, Low green`). Drive node fill via `resolveTagColor()`.
252
252
  * Empty when no `tag` blocks are declared.
253
253
  */
254
254
  tagGroups: TagGroup[];
package/dist/pert.d.ts CHANGED
@@ -12,7 +12,7 @@ interface DgmoError {
12
12
  code?: string;
13
13
  }
14
14
 
15
- /** A single entry inside a tag group: `Value(color)` */
15
+ /** A single entry inside a tag group: `Value color` */
16
16
  interface TagEntry {
17
17
  value: string;
18
18
  color: string;
@@ -248,7 +248,7 @@ interface ParsedPert {
248
248
  groups: PertGroup[];
249
249
  /**
250
250
  * Tag groups declared at the top of the diagram (`tag Priority as p
251
- * High(red), Low(green)`). Drive node fill via `resolveTagColor()`.
251
+ * High red, Low green`). Drive node fill via `resolveTagColor()`.
252
252
  * Empty when no `tag` blocks are declared.
253
253
  */
254
254
  tagGroups: TagGroup[];
@@ -59,14 +59,15 @@ These patterns are shared across all or most diagram types.
59
59
 
60
60
  ```
61
61
  tag GroupName as <alias>
62
- Value1(color)
63
- Value2(color) [default]
62
+ Value1 color
63
+ Value2 color
64
64
  ```
65
65
 
66
66
  - `tag` keyword, NO colon
67
67
  - Alias: optional postfix `as <alias>` per §2A (universal alias syntax — `[A-Za-z][A-Za-z0-9_]{0,11}`)
68
- - Inline values also supported: `tag Priority as p Low(green), High(red)`
69
- - First entry is default unless another is marked `default`
68
+ - Inline values also supported: `tag Priority as p Low green, High red`
69
+ - Color follows the value as a bare trailing token (see §1.5). Capitalize the color word (`Red`, `Yellow`) to keep it as a literal value with no color.
70
+ - First entry is the default — reorder to change
70
71
  - Must appear before diagram content
71
72
  - Legacy bare shorthand (`tag Priority p`) and `alias` keyword (`tag Priority alias p`) emit `E_TAG_SHORTHAND_REMOVED` per TD-18
72
73
 
@@ -85,15 +86,36 @@ EntityName | key: value, key2: value2
85
86
 
86
87
  ### 1.5 Color Suffixes
87
88
 
89
+ Color is set by typing the color name at the end of a label, lowercase. Example: `Done green` colors Done green. Eleven colors exist: `red`, `orange`, `yellow`, `green`, `blue`, `purple`, `teal`, `cyan`, `gray`, `black`, `white`. To use a color word as a literal label, capitalize it: `Red` stays as the word `Red`.
90
+
88
91
  ```
89
- Label(colorName)
92
+ Label color // bare trailing color token
93
+ Done green // value=Done, color=green
94
+ Senior Engineer red // value="Senior Engineer", color=red
95
+ Red // value=Red, no color (capitalized → escape hatch)
90
96
  ```
91
97
 
92
- - **Allowed color names (exactly these 10):** `red`, `orange`, `yellow`, `green`, `blue`, `purple`, `teal`, `cyan`, `lightblue`, `gray`
93
- - Any other value — including hex codes (`#ff0000`), CSS keywords (`black`, `white`, `pink`), or typos — is a parse error and produces an inline diagnostic in the editor (with a "did you mean?" suggestion when close to a known name)
94
- - The actual hex value rendered for each name comes from the active palette/theme; users cannot extend or override the allowed list
95
- - Appears at end of labels, node names, tag values, series names
96
- - Color is stripped from display text
98
+ **The universal rule** color trails the label:
99
+
100
+ > Color is the trailing whitespace-delimited token of a label region, when that token (case-sensitive, lowercase) is one of the 11 names above. Otherwise the label region has no color.
101
+
102
+ The "label region" is everything left after the parser strips off structural terminators it owns: `as <alias>`, `| <pipe metadata>`, numeric values, date ranges, structural brackets. Parsers split those off BEFORE invoking the color rule. So `Tortuga Distillery orange 3000` → `{ label: "Tortuga Distillery", color: "orange", value: 3000 }`: numeric value first, then the color trails the remaining label.
103
+
104
+ **Where the rule applies**: tag values, kanban columns (`[Done] green`), venn / quadrant items (color before `as`), gantt / timeline eras and markers, data-chart series + rows, sankey nodes + link lines, cycle / pyramid / ring / RACI / boxes-and-lines node labels (shortcut for `| color: <name>` when color is the only metadata).
105
+
106
+ **Long form preserved for multi-key pipe metadata**:
107
+
108
+ ```
109
+ Spring | color: green // shortcut and long form are equivalent
110
+ Spring | color: green, icon: ❄ // long form REQUIRED when other keys accompany color
111
+ ```
112
+
113
+ **Accepted tradeoffs**:
114
+
115
+ - **No typo diagnostics**: `Done grren` is a 2-word label with no color, no warning.
116
+ - **Case-sensitivity is the escape hatch**: `Red`, `Yellow`, `Green` stay as labels.
117
+ - **No edge color** on flowchart, state, sitemap. Sankey links DO accept a trailing color word after the numeric value.
118
+ - **11-name palette is a frozen public contract**: adding a 12th color is itself a breaking change.
97
119
 
98
120
  ### 1.6 Indentation
99
121
 
@@ -104,12 +126,12 @@ Label(colorName)
104
126
 
105
127
  ```
106
128
  [Group Name]
107
- [Group Name](color)
129
+ [Group Name] color
108
130
  [Group Name] | key: value
109
131
  ```
110
132
 
111
133
  - Bracket-enclosed name
112
- - Optional color suffix
134
+ - Optional trailing-token color (kanban columns, scatter categories, era/marker labels)
113
135
  - Optional pipe metadata (outside brackets)
114
136
  - Indented content below belongs to the group
115
137
 
@@ -162,7 +184,7 @@ A -日本語-> B
162
184
  A -🎉-> B
163
185
 
164
186
  // punctuation is literal — no markdown interpretation
165
- A -(parenthetical)-> B // label = "(parenthetical)" (NOT a color)
187
+ A -(parenthetical)-> B // label = "(parenthetical)"
166
188
  A -*emphasis*-> B // label = "*emphasis*" (NOT bold)
167
189
  A -`code`-> B // label = "`code`" (NOT a code span)
168
190
 
@@ -185,23 +207,21 @@ A -Makes calls-> B | tech: HTTP // preferred: technology on target metadata
185
207
  - **Plain text only**: no markdown interpretation. `*foo*` renders as `*foo*`, not italicized. `[label](url)` renders as literal `[label](url)`, not a hyperlink. Clickable URLs belong in notes, not in in-arrow labels.
186
208
  - **HTML-safe**: all renderers emit label text as a DOM text node. `<script>alert(1)</script>` renders as literal text — the entire label is a sequence of codepoints, not a markup fragment.
187
209
 
188
- #### Color suffix (flowchart and state only)
210
+ #### Edge color is not a feature
211
+
212
+ Edges on flowchart, state, and sitemap diagrams have NO color slot. `A -(red)-> B` is a literal label with text `(red)`; `A -yes-> B` and `A -no-> B` no longer auto-color the arrow. Arrows render with the default theme color, period. To color a *node*, use tags (§1.3).
213
+
214
+ Sankey link lines DO accept a trailing-token color, because the link itself carries data:
189
215
 
190
216
  ```
191
- A -(red)-> B // colored edge, no label
192
- A -(notacolor)-> B // label = "(notacolor)" (fall-through)
193
- A -(red) uses-> B // label = "(red) uses" (combined form not supported)
194
- A -red-> B // label = "red" (bare word is always a label)
217
+ Sugar Plantations -> Tortuga Distillery 3000 red // link is colored red
195
218
  ```
196
219
 
197
- A parenthesized palette color is only recognized when the entire label between the opening `-` and the arrow token is exactly `(colorName)` and `colorName` is one of the 11 names in §1.5. Any other content falls through to the label. To combine a color and a label, use the post-colon or pipe-metadata form instead.
198
-
199
220
  #### Migrating from pre-gauntlet syntax
200
221
 
201
- Two legacy forms changed with this spec:
222
+ One legacy form changed with this spec:
202
223
 
203
224
  1. **C4 trailing `[technology]` sugar is removed.** A C4 arrow like `-Makes calls [HTTPS]-> API` used to extract `HTTPS` as the technology annotation. The full `Makes calls [HTTPS]` is now the label. Use the post-colon or pipe form for technology: `-Makes calls-> API | tech: HTTPS`.
204
- 2. **Bare palette color suffixes are a literal label.** `A -red-> B` on flowchart/state used to be accepted as a bare color suffix in some surfaces. It is now always a label with text `red`. To color an edge, use the `-(red)->` parens form.
205
225
 
206
226
  No code migration is required for in-arrow label character escaping — any label that was valid before remains valid, with one exception: if your label happened to contain the literal substring `->` or `~>`, the parser now rejects it with `E_ARROW_SUBSTRING_IN_LABEL`. Move those labels to the post-colon form.
207
227
 
@@ -290,8 +310,8 @@ b -ack-> a
290
310
 
291
311
  ```
292
312
  venn
293
- Swordsmanship(red) as sw
294
- Navigation(blue) as nav
313
+ Swordsmanship red as sw
314
+ Navigation blue as nav
295
315
  sw + nav Sea Raiders
296
316
  ```
297
317
 
@@ -304,7 +324,7 @@ tag Concern as c
304
324
 
305
325
  - **Token shape**: `[A-Za-z][A-Za-z0-9_]{0,11}` — letter start,
306
326
  letters/digits/underscore, length 1–12. **Case-sensitive**.
307
- - **Modifier order on declarations**: `<name> [(color)] [is a type] as <alias> [| key: value, …]`.
327
+ - **Modifier order on declarations**: `<name> [color] [is a type] as <alias> [| key: value, …]`.
308
328
  - **Strict ordering**: aliases must be declared on or before first use.
309
329
  - **Flat global namespace**: one alias literal has exactly one binding per source.
310
330
  - **Aliases are NEVER UNH-normalized** — exact-match short-codes only.
@@ -328,7 +348,7 @@ rarely benefit. Aliases should aid comprehension, not obscure it.
328
348
  |-----|-----|
329
349
  | `tag Priority p` (bare shorthand) | `tag Priority as p` |
330
350
  | `tag Priority alias p` (explicit) | `tag Priority as p` |
331
- | `Swordsmanship(red) alias sw` (venn) | `Swordsmanship(red) as sw` |
351
+ | `Swordsmanship red alias sw` (venn) | `Swordsmanship red as sw` |
332
352
 
333
353
  ### 2A.6 Error Codes
334
354
 
@@ -644,7 +664,7 @@ flowchart [Title]
644
664
  | Subroutine | `[[Label]]` | `[[Validate]]` |
645
665
  | Document | `[Label~]` | `[Report~]` |
646
666
 
647
- - Color suffix: `(Start(green))`
667
+ - Node coloring: use tags (§1.3) — flowchart nodes have no color suffix
648
668
 
649
669
  ### 4.3 Arrows
650
670
 
@@ -652,8 +672,6 @@ flowchart [Title]
652
672
  |------|--------|
653
673
  | Unlabeled | `->` |
654
674
  | Labeled | `-label->` |
655
- | Colored | `-(color)->` |
656
- | Labeled + colored | `-label(color)->` |
657
675
 
658
676
  - Color inference: `yes/success/ok/true` infers green; `no/fail/error/false` infers red
659
677
 
@@ -695,7 +713,7 @@ state [Title]
695
713
 
696
714
  ```
697
715
  StateName
698
- StateName(color)
716
+ StateName color
699
717
  [*] // initial/final pseudostate
700
718
  ```
701
719
 
@@ -705,13 +723,12 @@ StateName(color)
705
723
  |------|--------|
706
724
  | Unlabeled | `Idle -> Active` |
707
725
  | Labeled | `Idle -submit-> Processing` |
708
- | Colored | `Idle -(blue)-> Active` |
709
726
 
710
727
  ### 5.4 Groups
711
728
 
712
729
  ```
713
730
  [Group Name]
714
- [Group Name](color)
731
+ [Group Name] color
715
732
  ```
716
733
 
717
734
  ### 5.5 Options
@@ -742,7 +759,7 @@ CEO
742
759
  CFO
743
760
  ```
744
761
 
745
- - Color suffix: `Alice(blue)`
762
+ - Node coloring: per-node indented metadata `\n color: blue` (deferred to a follow-up spec; tag groups inside org also work)
746
763
  - Pipe metadata: `Alice | role: CEO, t: Exec`
747
764
 
748
765
  ### 6.3 Metadata (Indented, Colon REQUIRED)
@@ -863,7 +880,7 @@ er [Title]
863
880
 
864
881
  ```
865
882
  users
866
- users(blue)
883
+ users blue
867
884
  users | domain: Core
868
885
  ```
869
886
 
@@ -986,7 +1003,7 @@ Columns represent workflow stages and must flow left-to-right from least-done to
986
1003
 
987
1004
  ```
988
1005
  [Column Name]
989
- [Column Name](color) | wip: 3
1006
+ [Column Name] color | wip: 3
990
1007
  ```
991
1008
 
992
1009
  ### 10.3 Cards (Indented Under Columns)
@@ -1118,14 +1135,14 @@ Top-level directive (not nested under `holiday`).
1118
1135
 
1119
1136
  **Flat form:**
1120
1137
  ```
1121
- era 2026-04-06 -> 2026-04-10 Conference (purple)
1138
+ era 2026-04-06 -> 2026-04-10 Conference purple
1122
1139
  ```
1123
1140
 
1124
1141
  **Block form:**
1125
1142
  ```
1126
1143
  era
1127
- 2026-04-06 -> 2026-04-10 Conference (purple)
1128
- 2026-06-01 -> 2026-06-05 Sprint Review (blue)
1144
+ 2026-04-06 -> 2026-04-10 Conference purple
1145
+ 2026-06-01 -> 2026-06-05 Sprint Review blue
1129
1146
  ```
1130
1147
 
1131
1148
  ### 12.6 Markers
@@ -1139,7 +1156,7 @@ marker 2026-03-27 Board Review
1139
1156
  ```
1140
1157
  marker
1141
1158
  2026-03-27 Board Review
1142
- 2026-06-15 Release (green)
1159
+ 2026-06-15 Release green
1143
1160
  ```
1144
1161
 
1145
1162
  ### 12.7 Groups (Swimlanes)
@@ -1322,21 +1339,21 @@ era 1716 -> 1718 Nassau Republic
1322
1339
  ```
1323
1340
  era
1324
1341
  1716 -> 1718 Nassau Republic
1325
- 1718 -> 1720 Woodes Rogers Era (orange)
1342
+ 1718 -> 1720 Woodes Rogers Era orange
1326
1343
  ```
1327
1344
 
1328
1345
  ### 14.4 Markers
1329
1346
 
1330
1347
  **Flat form:**
1331
1348
  ```
1332
- marker 1718-07 Woodes Rogers arrives (orange)
1349
+ marker 1718-07 Woodes Rogers arrives orange
1333
1350
  ```
1334
1351
 
1335
1352
  **Block form:**
1336
1353
  ```
1337
1354
  marker
1338
- 1718-07 Woodes Rogers arrives (orange)
1339
- 1720-01 End of Golden Age (red)
1355
+ 1718-07 Woodes Rogers arrives orange
1356
+ 1720-01 End of Golden Age red
1340
1357
  ```
1341
1358
 
1342
1359
  ### 14.5 Groups
@@ -1365,11 +1382,11 @@ Q1 400, 700, 300, 500 ⚠ tolerated; use spaces
1365
1382
 
1366
1383
  ```
1367
1384
  series ✅ preferred
1368
- Cloud Platform (blue)
1369
- Legacy Suite (red)
1370
- Mobile App (green)
1385
+ Cloud Platform blue
1386
+ Legacy Suite red
1387
+ Mobile App green
1371
1388
 
1372
- series Cloud (blue), Legacy (red) ⚠ tolerated; prefer the block
1389
+ series Cloud blue, Legacy red ⚠ tolerated; prefer the block
1373
1390
  ```
1374
1391
 
1375
1392
  Parsers accept either form. The rules above are authoring guidance.
@@ -1381,8 +1398,8 @@ Parsers accept either form. The rules above are authoring guidance.
1381
1398
  **Series** — follows Rule B (prefer the indented block):
1382
1399
  ```
1383
1400
  series
1384
- Cloud Platform (blue)
1385
- Legacy Suite (red)
1401
+ Cloud Platform blue
1402
+ Legacy Suite red
1386
1403
  ```
1387
1404
 
1388
1405
  Short one-line form is tolerated: `series Revenue` or `series A B`.
@@ -1391,7 +1408,7 @@ Short one-line form is tolerated: `series Revenue` or `series A B`.
1391
1408
  ```
1392
1409
  Label 100
1393
1410
  Label 100 200 300
1394
- Label(color) 100
1411
+ Label color 100 // trailing color before numeric values
1395
1412
  Q1 400 700 300 500
1396
1413
  ```
1397
1414
 
@@ -1425,7 +1442,7 @@ Each chart honors the subset of flags that has a renderable atom on it:
1425
1442
 
1426
1443
  **Eras (line/area only):**
1427
1444
  ```
1428
- era Day 1 -> Day 3 Rough Seas (red)
1445
+ era Day 1 -> Day 3 Rough Seas red
1429
1446
  ```
1430
1447
 
1431
1448
  ### 15.2 Scatter / Bubble Charts
@@ -1438,7 +1455,7 @@ Name x y size
1438
1455
 
1439
1456
  **Categories:**
1440
1457
  ```
1441
- [Caribbean](red)
1458
+ [Caribbean] red
1442
1459
  Blackbeard 90 8500
1443
1460
  ```
1444
1461
 
@@ -1477,8 +1494,8 @@ x-label Distance
1477
1494
  y-label Height
1478
1495
  x 0 to 250
1479
1496
 
1480
- 15 degrees(blue): -0.001*x^2 + 0.27*x
1481
- 45 degrees(red): -0.003*x^2 + 0.75*x
1497
+ 15 degrees blue: -0.001*x^2 + 0.27*x
1498
+ 45 degrees red: -0.003*x^2 + 0.75*x
1482
1499
  ```
1483
1500
 
1484
1501
  The colon between name and expression is **required** — both sides can contain spaces, so colon is the unambiguous delimiter.
@@ -1490,8 +1507,8 @@ The colon between name and expression is **required** — both sides can contain
1490
1507
 
1491
1508
  **Tree structure (indented, space-separated):**
1492
1509
  ```
1493
- Sugar Plantations(green)
1494
- Tortuga Distillery(orange) 3000
1510
+ Sugar Plantations green
1511
+ Tortuga Distillery orange 3000
1495
1512
  Nassau Distillery 2500
1496
1513
  ```
1497
1514
 
@@ -1544,7 +1561,7 @@ Roberts 12 52
1544
1561
  ```
1545
1562
  - Data rows: `Label value1 value2` — follows §15 Rule A (space-separated; commas between values tolerated for back-compat but not idiomatic)
1546
1563
  - Thousands commas within values supported (e.g., `1,000`)
1547
- - Color annotations: `Label (color) value1 value2`
1564
+ - Color annotations: `Label color value1 value2` (trailing color word before numeric values)
1548
1565
  - Minimum 2 periods required
1549
1566
 
1550
1567
  ### 16.2 Wordcloud
@@ -1567,7 +1584,7 @@ navigation 88
1567
1584
  ```
1568
1585
  arc Pirate Alliances
1569
1586
 
1570
- [Caribbean](red)
1587
+ [Caribbean] red
1571
1588
  Blackbeard -> Bonnet 8
1572
1589
  Blackbeard -> Vane 5
1573
1590
 
@@ -1582,15 +1599,15 @@ order group
1582
1599
  ```
1583
1600
  venn Skill Overlap
1584
1601
 
1585
- Swordsmanship(red) as sw
1586
- Navigation(blue) as nav
1587
- Leadership(green) as lead
1602
+ Swordsmanship red as sw
1603
+ Navigation blue as nav
1604
+ Leadership green as lead
1588
1605
 
1589
1606
  sw + nav Sea Raiders
1590
1607
  sw + nav + lead Legendary Pirates
1591
1608
  ```
1592
1609
 
1593
- - Set declaration: `Name(color) as <alias>` — uses the universal alias syntax (§2A)
1610
+ - Set declaration: `Name [color] as <alias>` — color is an optional trailing token BEFORE `as` (universal alias syntax, §2A)
1594
1611
  - Intersections: `Set1 + Set2 Label` — label follows the last set reference (no colon)
1595
1612
  - Legacy `Name(color) alias X` emits `E_VENN_ALIAS_KEYWORD_REMOVED` per TD-18
1596
1613
 
@@ -1601,10 +1618,10 @@ quadrant Crew Assessment
1601
1618
  x-label Low Skill, High Skill
1602
1619
  y-label Low Loyalty, High Loyalty
1603
1620
 
1604
- top-right Promote (green)
1605
- top-left Train (yellow)
1606
- bottom-left Maroon (red)
1607
- bottom-right Watch Closely (purple)
1621
+ top-right Promote green
1622
+ top-left Train yellow
1623
+ bottom-left Maroon red
1624
+ bottom-right Watch Closely purple
1608
1625
 
1609
1626
  Quartermaster 0.9 0.95
1610
1627
  Navigator 0.85 0.8
@@ -2,9 +2,9 @@ area Memory Usage Over Time
2
2
  x-label Hour
3
3
  y-label GB
4
4
 
5
- era 12am -> 9am Night (blue)
6
- era 9am -> 6pm Day (green)
7
- era 6pm -> 11pm Evening (purple)
5
+ era 12am -> 9am Night blue
6
+ era 9am -> 6pm Day green
7
+ era 6pm -> 11pm Evening purple
8
8
 
9
9
  12am 2.1
10
10
  3am 1.8
@@ -3,11 +3,11 @@ x-label Month
3
3
  y-label Tickets
4
4
 
5
5
  series
6
- Critical (red)
7
- High (orange)
8
- Medium (yellow)
9
- Low (green)
10
- Info (blue)
6
+ Critical red
7
+ High orange
8
+ Medium yellow
9
+ Low green
10
+ Info blue
11
11
 
12
12
  January 8 24 45 62 31
13
13
  February 12 19 51 58 28
@@ -1,7 +1,7 @@
1
1
  boxes-and-lines E-Commerce Platform
2
2
 
3
- tag Team t Backend(blue), Frontend(green), Platform(purple)
4
- tag Priority p High(red), Medium(orange), Low(gray)
3
+ tag Team t Backend blue, Frontend green, Platform purple
4
+ tag Priority p High red, Medium orange, Low gray
5
5
 
6
6
  active-tag Team
7
7
  hide priority:Low
@@ -1,16 +1,16 @@
1
1
  c4 Online Bookstore — C4 Architecture
2
2
 
3
3
  tag Technology as tech
4
- React(blue)
5
- Node(green)
6
- Python(orange)
7
- PostgreSQL(purple)
4
+ React blue
5
+ Node green
6
+ Python orange
7
+ PostgreSQL purple
8
8
 
9
9
  tag Team as t
10
- Frontend(blue)
11
- Backend(green)
12
- Platform(teal)
13
- Data(purple)
10
+ Frontend blue
11
+ Backend green
12
+ Platform teal
13
+ Data purple
14
14
 
15
15
  Customer is a person | t: Frontend
16
16
  description: Browses and purchases books online
@@ -4,7 +4,7 @@ Drawable [interface]
4
4
  + draw(): void
5
5
  + resize(w: number, h: number): void
6
6
 
7
- Shape implements Drawable [abstract] (purple)
7
+ Shape implements Drawable [abstract] purple
8
8
  # x: number
9
9
  # y: number
10
10
  + area(): number
@@ -20,7 +20,7 @@ Rectangle extends Shape
20
20
  - height: number
21
21
  + getDiagonal(): number
22
22
 
23
- Color [enum] (yellow)
23
+ Color [enum] yellow
24
24
  Red
25
25
  Green
26
26
  Blue
@@ -1,8 +1,8 @@
1
1
  doughnut Cloud Spending by Service
2
2
 
3
- Compute (blue) 34
4
- Storage (cyan) 22
5
- Database (green) 18
6
- Networking (orange) 12
7
- AI/ML (purple) 8
8
- Other (gray) 6
3
+ Compute blue 34
4
+ Storage cyan 22
5
+ Database green 18
6
+ Networking orange 12
7
+ AI/ML purple 8
8
+ Other gray 6
@@ -1,5 +1,5 @@
1
1
  flowchart Color Demo
2
2
 
3
- (Start(green)) -> [Parse Input] -> <Valid?(blue)>
4
- -yes(green)-> [Process(teal)] -> (Success(green))
5
- -no(red)-> [Error Handler(red)] -> /Log Error(orange)/ -> (Failure(red))
3
+ (Start) -> [Parse Input] -> <Valid?>
4
+ -yes-> [Process] -> (Success)
5
+ -no-> [Error Handler] -> /Log Error/ -> (Failure)
@@ -3,6 +3,6 @@ x-label x
3
3
  y-label f(x)
4
4
 
5
5
  x -6 to 6
6
- f(x) (blue) sin(x)
7
- g(x) (red) x^2 / 10
8
- h(x) (green) cos(x) * 2
6
+ f(x) blue: sin(x)
7
+ g(x) red: x^2 / 10
8
+ h(x) green: cos(x) * 2
@@ -5,20 +5,20 @@ critical-path
5
5
  dependencies
6
6
 
7
7
  tag Team as t
8
- Engineering(blue)
9
- Design(purple)
10
- QA(orange)
11
- Marketing(green)
8
+ Engineering blue
9
+ Design purple
10
+ QA orange
11
+ Marketing green
12
12
 
13
13
  tag Phase as p
14
- Foundation(green)
15
- Growth(orange)
16
- Launch(red)
14
+ Foundation green
15
+ Growth orange
16
+ Launch red
17
17
 
18
18
  era 2024-01-15 -> 2024-02-15 Investor Review
19
- era 2024-03-10 -> 2024-03-14 GDC 2024 (purple)
19
+ era 2024-03-10 -> 2024-03-14 GDC 2024 purple
20
20
  marker 2024-02-26 Board Meeting
21
- marker 2024-04-08 Trade Show Demo (orange)
21
+ marker 2024-04-08 Trade Show Demo orange
22
22
 
23
23
  // Independent task with offset — starts 8bd after project start
24
24
  10bd Brand Guidelines | t: Design, p: Foundation, offset: 8bd
@@ -5,18 +5,18 @@ critical-path
5
5
  dependencies
6
6
 
7
7
  tag Team as t
8
- Engineering(blue)
9
- Design(purple)
10
- QA(orange)
8
+ Engineering blue
9
+ Design purple
10
+ QA orange
11
11
 
12
12
  tag Phase as p
13
- Foundation(green)
14
- Growth(orange)
13
+ Foundation green
14
+ Growth orange
15
15
 
16
16
  era 2024-01-15 -> 2024-02-15 Investor Review
17
- era 2024-03-10 -> 2024-03-14 GDC 2024 (purple)
17
+ era 2024-03-10 -> 2024-03-14 GDC 2024 purple
18
18
  marker 2024-02-26 Board Meeting
19
- marker 2024-04-08 Trade Show Demo (orange)
19
+ marker 2024-04-08 Trade Show Demo orange
20
20
 
21
21
  // Independent task with offset — starts 8bd after project start
22
22
  10bd Brand Guidelines | t: Design, p: Foundation, offset: 8bd
@@ -1,14 +1,14 @@
1
1
  infra E-Commerce Platform — Full Infrastructure
2
2
 
3
3
  tag Team as t
4
- Backend(blue)
5
- Platform(teal)
6
- Data(purple)
4
+ Backend blue
5
+ Platform teal
6
+ Data purple
7
7
 
8
8
  tag Tier as r
9
- Edge(green)
10
- Core(blue)
11
- Storage(orange)
9
+ Edge green
10
+ Core blue
11
+ Storage orange
12
12
 
13
13
  edge
14
14
  rps: 15000
@@ -1,8 +1,8 @@
1
1
  infra Production Traffic Flow
2
2
 
3
3
  tag Team as t
4
- Backend(blue)
5
- Platform(teal)
4
+ Backend blue
5
+ Platform teal
6
6
 
7
7
  edge
8
8
  rps: 10000