@diagrammo/dgmo 0.8.3 → 0.8.5

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 (122) hide show
  1. package/.claude/commands/dgmo-diagram-this.md +60 -0
  2. package/.claude/commands/dgmo-document-project.md +128 -0
  3. package/.claude/commands/dgmo.md +452 -50
  4. package/.cursorrules +32 -37
  5. package/.github/copilot-instructions.md +35 -44
  6. package/.windsurfrules +32 -37
  7. package/README.md +4 -4
  8. package/dist/cli.cjs +188 -185
  9. package/dist/editor.cjs +338 -0
  10. package/dist/editor.cjs.map +1 -0
  11. package/dist/editor.d.cts +27 -0
  12. package/dist/editor.d.ts +27 -0
  13. package/dist/editor.js +307 -0
  14. package/dist/editor.js.map +1 -0
  15. package/dist/highlight.cjs +560 -0
  16. package/dist/highlight.cjs.map +1 -0
  17. package/dist/highlight.d.cts +32 -0
  18. package/dist/highlight.d.ts +32 -0
  19. package/dist/highlight.js +530 -0
  20. package/dist/highlight.js.map +1 -0
  21. package/dist/index.cjs +3467 -1078
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +22 -1
  24. package/dist/index.d.ts +22 -1
  25. package/dist/index.js +3466 -1078
  26. package/dist/index.js.map +1 -1
  27. package/docs/language-reference.md +46 -37
  28. package/gallery/fixtures/arc.dgmo +18 -0
  29. package/gallery/fixtures/area.dgmo +19 -0
  30. package/gallery/fixtures/bar-stacked.dgmo +10 -0
  31. package/gallery/fixtures/bar.dgmo +10 -0
  32. package/gallery/fixtures/c4-full.dgmo +52 -0
  33. package/gallery/fixtures/c4.dgmo +17 -0
  34. package/gallery/fixtures/chord.dgmo +12 -0
  35. package/gallery/fixtures/class-basic.dgmo +14 -0
  36. package/gallery/fixtures/class-full.dgmo +43 -0
  37. package/gallery/fixtures/doughnut.dgmo +8 -0
  38. package/gallery/fixtures/flowchart-basic.dgmo +3 -0
  39. package/gallery/fixtures/flowchart-colors.dgmo +5 -0
  40. package/gallery/fixtures/flowchart-complex.dgmo +17 -0
  41. package/gallery/fixtures/flowchart-decision.dgmo +5 -0
  42. package/gallery/fixtures/flowchart-full.dgmo +13 -0
  43. package/gallery/fixtures/flowchart-groups.dgmo +10 -0
  44. package/gallery/fixtures/flowchart-loop.dgmo +7 -0
  45. package/gallery/fixtures/flowchart-nested.dgmo +7 -0
  46. package/gallery/fixtures/flowchart-shapes.dgmo +5 -0
  47. package/gallery/fixtures/function.dgmo +8 -0
  48. package/gallery/fixtures/funnel.dgmo +7 -0
  49. package/gallery/fixtures/gantt-full.dgmo +49 -0
  50. package/gallery/fixtures/gantt.dgmo +42 -0
  51. package/gallery/fixtures/heatmap.dgmo +8 -0
  52. package/gallery/fixtures/infra-full.dgmo +78 -0
  53. package/gallery/fixtures/infra-overload.dgmo +25 -0
  54. package/gallery/fixtures/infra.dgmo +47 -0
  55. package/gallery/fixtures/initiative-status-full.dgmo +46 -0
  56. package/gallery/fixtures/initiative-status-phases.dgmo +29 -0
  57. package/gallery/fixtures/initiative-status.dgmo +9 -0
  58. package/gallery/fixtures/line.dgmo +19 -0
  59. package/gallery/fixtures/multi-line.dgmo +11 -0
  60. package/gallery/fixtures/org-basic.dgmo +16 -0
  61. package/gallery/fixtures/org-full.dgmo +69 -0
  62. package/gallery/fixtures/org-teams.dgmo +25 -0
  63. package/gallery/fixtures/pie.dgmo +9 -0
  64. package/gallery/fixtures/polar-area.dgmo +8 -0
  65. package/gallery/fixtures/quadrant.dgmo +18 -0
  66. package/gallery/fixtures/radar.dgmo +8 -0
  67. package/gallery/fixtures/sankey.dgmo +31 -0
  68. package/gallery/fixtures/scatter.dgmo +21 -0
  69. package/gallery/fixtures/sequence-tags-protocols.dgmo +45 -0
  70. package/gallery/fixtures/sequence-tags.dgmo +41 -0
  71. package/gallery/fixtures/sequence.dgmo +35 -0
  72. package/gallery/fixtures/sitemap-basic.dgmo +12 -0
  73. package/gallery/fixtures/sitemap-full.dgmo +156 -0
  74. package/gallery/fixtures/slope.dgmo +9 -0
  75. package/gallery/fixtures/spr-eras.dgmo +62 -0
  76. package/gallery/fixtures/state.dgmo +30 -0
  77. package/gallery/fixtures/timeline-intraday.dgmo +14 -0
  78. package/gallery/fixtures/timeline.dgmo +32 -0
  79. package/gallery/fixtures/venn.dgmo +10 -0
  80. package/gallery/fixtures/wordcloud.dgmo +24 -0
  81. package/package.json +71 -2
  82. package/src/c4/layout.ts +372 -90
  83. package/src/c4/parser.ts +100 -55
  84. package/src/chart.ts +91 -28
  85. package/src/class/parser.ts +41 -12
  86. package/src/cli.ts +211 -62
  87. package/src/completion.ts +378 -183
  88. package/src/d3.ts +1044 -303
  89. package/src/dgmo-mermaid.ts +16 -13
  90. package/src/dgmo-router.ts +69 -23
  91. package/src/echarts.ts +646 -153
  92. package/src/editor/dgmo.grammar +69 -0
  93. package/src/editor/dgmo.grammar.d.ts +2 -0
  94. package/src/editor/dgmo.grammar.js +18 -0
  95. package/src/editor/dgmo.grammar.terms.d.ts +5 -0
  96. package/src/editor/dgmo.grammar.terms.js +35 -0
  97. package/src/editor/highlight-api.ts +444 -0
  98. package/src/editor/highlight.ts +36 -0
  99. package/src/editor/index.ts +28 -0
  100. package/src/editor/keywords.ts +222 -0
  101. package/src/editor/tokens.ts +30 -0
  102. package/src/er/parser.ts +48 -14
  103. package/src/er/renderer.ts +112 -53
  104. package/src/gantt/calculator.ts +91 -29
  105. package/src/gantt/parser.ts +197 -71
  106. package/src/gantt/renderer.ts +1120 -350
  107. package/src/graph/flowchart-parser.ts +46 -25
  108. package/src/graph/state-parser.ts +47 -17
  109. package/src/index.ts +96 -31
  110. package/src/infra/parser.ts +157 -53
  111. package/src/infra/renderer.ts +723 -271
  112. package/src/initiative-status/parser.ts +138 -44
  113. package/src/kanban/parser.ts +25 -14
  114. package/src/org/layout.ts +111 -44
  115. package/src/org/parser.ts +69 -22
  116. package/src/palettes/index.ts +3 -2
  117. package/src/sequence/parser.ts +193 -61
  118. package/src/sitemap/parser.ts +65 -29
  119. package/src/utils/arrows.ts +2 -22
  120. package/src/utils/duration.ts +39 -21
  121. package/src/utils/legend-constants.ts +0 -2
  122. package/src/utils/parsing.ts +75 -31
package/dist/editor.js ADDED
@@ -0,0 +1,307 @@
1
+ // src/editor/index.ts
2
+ import { LRLanguage, LanguageSupport } from "@codemirror/language";
3
+
4
+ // src/editor/dgmo.grammar.js
5
+ import { LRParser } from "@lezer/lr";
6
+
7
+ // src/editor/dgmo.grammar.terms.js
8
+ var ChartType = 1;
9
+ var TagKeyword = 2;
10
+ var DirectiveKeyword = 3;
11
+ var ControlKeyword = 4;
12
+ var ModifierKeyword = 5;
13
+
14
+ // src/editor/keywords.ts
15
+ var CHART_TYPES = /* @__PURE__ */ new Set([
16
+ // Diagram types
17
+ "sequence",
18
+ "flowchart",
19
+ "class",
20
+ "er",
21
+ "org",
22
+ "kanban",
23
+ "c4",
24
+ "initiative-status",
25
+ "state",
26
+ "sitemap",
27
+ "infra",
28
+ "gantt",
29
+ // Data chart types
30
+ "bar",
31
+ "line",
32
+ "pie",
33
+ "doughnut",
34
+ "area",
35
+ "polar-area",
36
+ "radar",
37
+ "bar-stacked",
38
+ "multi-line",
39
+ "scatter",
40
+ "sankey",
41
+ "chord",
42
+ "function",
43
+ "heatmap",
44
+ "funnel",
45
+ // Visualization types
46
+ "slope",
47
+ "wordcloud",
48
+ "arc",
49
+ "timeline",
50
+ "venn",
51
+ "quadrant"
52
+ ]);
53
+ var METADATA_KEYS = /* @__PURE__ */ new Set([
54
+ "title",
55
+ "series",
56
+ "orientation",
57
+ "x-label",
58
+ "y-label",
59
+ "size-label",
60
+ "x",
61
+ "columns",
62
+ "rows",
63
+ "labels",
64
+ "rotate",
65
+ "max",
66
+ "size",
67
+ "order",
68
+ "sort",
69
+ "scale",
70
+ "values",
71
+ "notation",
72
+ "x-axis",
73
+ "y-axis",
74
+ "top-right",
75
+ "top-left",
76
+ "bottom-right",
77
+ "bottom-left"
78
+ ]);
79
+ var TAG_KEYWORD = "tag";
80
+ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
81
+ // Gantt
82
+ "start",
83
+ "era",
84
+ "marker",
85
+ "holiday",
86
+ "workweek",
87
+ "today-marker",
88
+ "critical-path",
89
+ "no-dependencies",
90
+ "sort",
91
+ // Tags
92
+ "tags",
93
+ "import",
94
+ "active-tag",
95
+ "hide",
96
+ // ER
97
+ "notation",
98
+ // Class
99
+ "extends",
100
+ "implements",
101
+ "abstract",
102
+ "interface",
103
+ "enum",
104
+ // C4
105
+ "containers",
106
+ "components",
107
+ "deployment",
108
+ // Infra directives
109
+ "sub-node-label",
110
+ "show-sub-node-count",
111
+ "no-auto-color",
112
+ // Infra node properties
113
+ "description",
114
+ "instances",
115
+ "max-rps",
116
+ "latency-ms",
117
+ "uptime",
118
+ "firewall-block",
119
+ "ratelimit-rps",
120
+ "cb-error-threshold",
121
+ "cb-latency-threshold-ms",
122
+ "buffer",
123
+ "drain-rate",
124
+ "retention-hours",
125
+ "partitions",
126
+ "split",
127
+ "slo-p90-latency-ms",
128
+ "slo-availability",
129
+ "cache-hit",
130
+ "concurrency",
131
+ "duration-ms",
132
+ "cold-start-ms",
133
+ "rps",
134
+ // Sequence
135
+ "activations",
136
+ "no-activations",
137
+ "collapse-notes",
138
+ "no-collapse-notes",
139
+ // Data charts
140
+ "stacked",
141
+ "no-label-name",
142
+ "no-label-value",
143
+ "no-label-percent",
144
+ // Slope
145
+ "period",
146
+ // Quadrant
147
+ "x-axis",
148
+ "y-axis",
149
+ "top-right",
150
+ "top-left",
151
+ "bottom-right",
152
+ "bottom-left",
153
+ // Layout
154
+ "direction-tb",
155
+ "direction-lr",
156
+ // Initiative-status
157
+ "contains",
158
+ // Data chart metadata
159
+ "title",
160
+ "series",
161
+ "orientation",
162
+ "x-label",
163
+ "y-label",
164
+ "size-label",
165
+ "columns",
166
+ "rows",
167
+ "labels",
168
+ "rotate",
169
+ "scale",
170
+ "values"
171
+ ]);
172
+ var CONTROL_KEYWORDS = /* @__PURE__ */ new Set([
173
+ "if",
174
+ "else",
175
+ "loop",
176
+ "parallel",
177
+ "note"
178
+ ]);
179
+ var STATUS_KEYWORDS = /* @__PURE__ */ new Set([
180
+ "na",
181
+ "todo",
182
+ "wip",
183
+ "done",
184
+ "blocked",
185
+ "in-progress",
186
+ "backlog",
187
+ "ready"
188
+ ]);
189
+ var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([
190
+ "alias",
191
+ "aka",
192
+ "position",
193
+ "default",
194
+ // Sequence participant types
195
+ "actor",
196
+ "service",
197
+ "database",
198
+ "queue",
199
+ "cache",
200
+ "gateway",
201
+ "external",
202
+ "networking",
203
+ "frontend",
204
+ // C4 element types
205
+ "system",
206
+ "person",
207
+ "container",
208
+ "component",
209
+ // ER column modifiers
210
+ "pk",
211
+ "fk",
212
+ "nullable",
213
+ "unique",
214
+ // ER data types
215
+ "int",
216
+ "varchar",
217
+ "text",
218
+ "boolean",
219
+ "date",
220
+ "timestamp",
221
+ "float",
222
+ "decimal"
223
+ ]);
224
+
225
+ // src/editor/tokens.ts
226
+ function specializeKeyword(value) {
227
+ if (CHART_TYPES.has(value)) return ChartType;
228
+ if (value === TAG_KEYWORD) return TagKeyword;
229
+ if (DIRECTIVE_KEYWORDS.has(value)) return DirectiveKeyword;
230
+ if (CONTROL_KEYWORDS.has(value)) return ControlKeyword;
231
+ if (STATUS_KEYWORDS.has(value)) return ModifierKeyword;
232
+ if (MODIFIER_KEYWORDS.has(value)) return ModifierKeyword;
233
+ return -1;
234
+ }
235
+
236
+ // src/editor/dgmo.grammar.js
237
+ var parser = LRParser.deserialize({
238
+ version: 14,
239
+ states: "!WQVQPOOOOQO'#DU'#DUOOQO'#DP'#DPO%]QPO'#CdOOQO'#DO'#DOQVQPOOOOQO-E6}-E6}OOQO,59O,59OOOQO-E6|-E6|",
240
+ stateData: "&Q~OvOS~OPPOQPORPOSPOTPOVSOXPOYPOZPO[PO]PO^PO_PO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPOwSO~OPPOQPORPOSPOTPOXPOYPOZPO[PO]PO^PO_PO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPO~OwVO~P#]OVXYZ[]^_`ghijklmnoabcdefpqk~",
241
+ goto: "!byPPPPPPPPzPPPPPPPPPPPPPPPPPPPPPPPPP!O!UPPPP!]TSOTQTORWTSROTRURVQORT",
242
+ nodeNames: "\u26A0 ChartType TagKeyword DirectiveKeyword ControlKeyword ModifierKeyword Document Comment ContentLine SyncArrow AsyncArrow Duration DateLiteral Percentage Number SectionMarker Url OpenBracket CloseBracket OpenParen CloseParen OpenAngle CloseAngle ColorAnnotation Pipe Colon Comma Plus Dash Tilde Star Question Identifier Punct",
243
+ maxTerm: 40,
244
+ skippedNodes: [0],
245
+ repeatNodeCount: 2,
246
+ tokenData: "9q~RxOX#oXY#tYZ$PZp#opq#tqt#oux#oxy$Uyz$tz{${{|%S|}%Z}!O%b!O!P#o!P!Q%q!Q![&b![!],v!]!^#o!^!_,}!_!`-U!`!a-c!a!b-j!b!c#o!c!}-q!}#O0w#O#P#o#P#Q0|#Q#R#o#R#S-q#S#T#o#T#[-q#[#]1T#]#o-q#o#p#o#p#q9T#q#r#o#r#s9[#s;'S#o;'S;=`9k<%lO#o~#tOq~~#yQv~XY#tpq#t~$UOw~~$]Qc~q~}!O$c#T#o$c~$fRyz$o}!O$c#T#o$c~$tOg~~${Od~q~~%SOn~q~~%ZOk~q~~%bOj~q~~%iPl~q~!`!a%l~%qOX~~%vPq~!P!Q%y~&OSV~OY%yZ;'S%y;'S;=`&[<%lO%y~&_P;=`<%l%y~&iY^~q~uv'X!O!P'^!Q![(z#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~'^O]~~'aP!Q!['d~'iX^~uv'X!Q!['d#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~(XP#W#X([~(aPZ~!a!b(d~(iOZ~~(nQZ~!a!b(d#]#^(t~(wP#b#c([~)PY^~uv'X!O!P'^!Q![)o#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~)tY^~uv'X!O!P'^!Q![*d#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~*iZ^~uv'X}!O+[!O!P'^!Q![,R#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~+_P!Q![+b~+eP!Q![+h~+mP[~}!O+p~+sP!Q![+v~+yP!Q![+|~,RO[~~,WY^~uv'X!O!P'^!Q![,R#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~,}Oi~q~~-UOe~q~~-ZPq~!_!`-^~-cO_~~-jOf~q~~-qOo~q~~-x_p~q~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~.|_p~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~0O]qr.wst.wvw.wwx.w{|.w!O!P.w!P!Q.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~0|Oa~~1TOb~q~~1[ap~q~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#h.w#h#i2a#i#o.w~2fap~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#h.w#h#i3k#i#o.w~3pap~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#d.w#d#e4u#e#o.w~4zbp~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w![!]6S!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#g.w#g#h7|#h#o.w~6VP!P!Q6Y~6]P!P!Q6`~6cYOX7RZp7Rqy7Rz|7R}!`7R!a#P7R#Q#p7R#q;'S7R;'S;=`7v<%lO7R~7WY`~OX7RZp7Rqy7Rz|7R}!`7R!a#P7R#Q#p7R#q;'S7R;'S;=`7v<%lO7R~7yP;=`<%l7R~8R`p~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w![!]6S!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~9[Oh~q~~9cPm~q~!`!a9f~9kOY~~9nP;=`<%l#o",
247
+ tokenizers: [0],
248
+ topRules: { "Document": [0, 6] },
249
+ specialized: [{ term: 32, get: (value, stack) => specializeKeyword(value, stack) << 1, external: specializeKeyword }],
250
+ tokenPrec: 204
251
+ });
252
+
253
+ // src/editor/highlight.ts
254
+ import { styleTags, tags as t } from "@lezer/highlight";
255
+ var dgmoHighlighting = styleTags({
256
+ Comment: t.lineComment,
257
+ ChartType: t.typeName,
258
+ TagKeyword: t.definitionKeyword,
259
+ DirectiveKeyword: t.keyword,
260
+ ControlKeyword: t.controlKeyword,
261
+ ModifierKeyword: t.modifier,
262
+ SyncArrow: t.operator,
263
+ AsyncArrow: t.operator,
264
+ Duration: t.number,
265
+ DateLiteral: t.number,
266
+ Number: t.number,
267
+ Percentage: t.number,
268
+ SectionMarker: t.heading,
269
+ OpenBracket: t.squareBracket,
270
+ CloseBracket: t.squareBracket,
271
+ OpenParen: t.paren,
272
+ CloseParen: t.paren,
273
+ OpenAngle: t.angleBracket,
274
+ CloseAngle: t.angleBracket,
275
+ Url: t.url,
276
+ ColorAnnotation: t.atom,
277
+ Pipe: t.separator,
278
+ Colon: t.separator,
279
+ Plus: t.separator,
280
+ Comma: t.punctuation,
281
+ Dash: t.operator,
282
+ Tilde: t.operator,
283
+ Star: t.operator,
284
+ Question: t.operator,
285
+ Punct: t.punctuation
286
+ });
287
+
288
+ // src/editor/index.ts
289
+ var dgmoParser = parser.configure({
290
+ props: [dgmoHighlighting]
291
+ });
292
+ var dgmoLanguage = LRLanguage.define({
293
+ name: "dgmo",
294
+ parser: dgmoParser
295
+ });
296
+ var dgmoLanguageSupport = new LanguageSupport(dgmoLanguage);
297
+ var dgmoExtension = dgmoLanguageSupport;
298
+ export {
299
+ CHART_TYPES,
300
+ METADATA_KEYS,
301
+ dgmoExtension,
302
+ dgmoHighlighting,
303
+ dgmoLanguage,
304
+ dgmoLanguageSupport,
305
+ dgmoParser
306
+ };
307
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editor/index.ts","../src/editor/dgmo.grammar.js","../src/editor/dgmo.grammar.terms.js","../src/editor/keywords.ts","../src/editor/tokens.ts","../src/editor/highlight.ts"],"sourcesContent":["import { LRLanguage, LanguageSupport } from '@codemirror/language';\nimport type { Extension } from '@codemirror/state';\nimport { parser } from './dgmo.grammar.js';\nimport { dgmoHighlighting } from './highlight';\n\nexport { CHART_TYPES, METADATA_KEYS } from './keywords';\nexport { dgmoHighlighting } from './highlight';\n\n/** The raw Lezer parser for DGMO. */\nexport const dgmoParser = parser.configure({\n props: [dgmoHighlighting],\n});\n\n/** LRLanguage wrapper for CodeMirror. */\nexport const dgmoLanguage = LRLanguage.define({\n name: 'dgmo',\n parser: dgmoParser,\n});\n\n/** Full language support (language + extensions). */\nexport const dgmoLanguageSupport = new LanguageSupport(dgmoLanguage);\n\n/**\n * Drop-in replacement for the old dgmoExtension.\n * Consumers should add indentationMarkers() separately if desired\n * (from @replit/codemirror-indentation-markers).\n */\nexport const dgmoExtension: Extension = dgmoLanguageSupport;\n","// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nimport {specializeKeyword} from \"./tokens\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"!WQVQPOOOOQO'#DU'#DUOOQO'#DP'#DPO%]QPO'#CdOOQO'#DO'#DOQVQPOOOOQO-E6}-E6}OOQO,59O,59OOOQO-E6|-E6|\",\n stateData: \"&Q~OvOS~OPPOQPORPOSPOTPOVSOXPOYPOZPO[PO]PO^PO_PO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPOwSO~OPPOQPORPOSPOTPOXPOYPOZPO[PO]PO^PO_PO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPO~OwVO~P#]OVXYZ[]^_`ghijklmnoabcdefpqk~\",\n goto: \"!byPPPPPPPPzPPPPPPPPPPPPPPPPPPPPPPPPP!O!UPPPP!]TSOTQTORWTSROTRURVQORT\",\n nodeNames: \"⚠ ChartType TagKeyword DirectiveKeyword ControlKeyword ModifierKeyword Document Comment ContentLine SyncArrow AsyncArrow Duration DateLiteral Percentage Number SectionMarker Url OpenBracket CloseBracket OpenParen CloseParen OpenAngle CloseAngle ColorAnnotation Pipe Colon Comma Plus Dash Tilde Star Question Identifier Punct\",\n maxTerm: 40,\n skippedNodes: [0],\n repeatNodeCount: 2,\n tokenData: \"9q~RxOX#oXY#tYZ$PZp#opq#tqt#oux#oxy$Uyz$tz{${{|%S|}%Z}!O%b!O!P#o!P!Q%q!Q![&b![!],v!]!^#o!^!_,}!_!`-U!`!a-c!a!b-j!b!c#o!c!}-q!}#O0w#O#P#o#P#Q0|#Q#R#o#R#S-q#S#T#o#T#[-q#[#]1T#]#o-q#o#p#o#p#q9T#q#r#o#r#s9[#s;'S#o;'S;=`9k<%lO#o~#tOq~~#yQv~XY#tpq#t~$UOw~~$]Qc~q~}!O$c#T#o$c~$fRyz$o}!O$c#T#o$c~$tOg~~${Od~q~~%SOn~q~~%ZOk~q~~%bOj~q~~%iPl~q~!`!a%l~%qOX~~%vPq~!P!Q%y~&OSV~OY%yZ;'S%y;'S;=`&[<%lO%y~&_P;=`<%l%y~&iY^~q~uv'X!O!P'^!Q![(z#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~'^O]~~'aP!Q!['d~'iX^~uv'X!Q!['d#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~(XP#W#X([~(aPZ~!a!b(d~(iOZ~~(nQZ~!a!b(d#]#^(t~(wP#b#c([~)PY^~uv'X!O!P'^!Q![)o#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~)tY^~uv'X!O!P'^!Q![*d#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~*iZ^~uv'X}!O+[!O!P'^!Q![,R#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~+_P!Q![+b~+eP!Q![+h~+mP[~}!O+p~+sP!Q![+v~+yP!Q![+|~,RO[~~,WY^~uv'X!O!P'^!Q![,R#U#V(U#W#X([#[#]([#a#b(i#e#f([#k#l([#m#n([~,}Oi~q~~-UOe~q~~-ZPq~!_!`-^~-cO_~~-jOf~q~~-qOo~q~~-x_p~q~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~.|_p~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~0O]qr.wst.wvw.wwx.w{|.w!O!P.w!P!Q.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~0|Oa~~1TOb~q~~1[ap~q~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#h.w#h#i2a#i#o.w~2fap~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#h.w#h#i3k#i#o.w~3pap~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#d.w#d#e4u#e#o.w~4zbp~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w![!]6S!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#g.w#g#h7|#h#o.w~6VP!P!Q6Y~6]P!P!Q6`~6cYOX7RZp7Rqy7Rz|7R}!`7R!a#P7R#Q#p7R#q;'S7R;'S;=`7v<%lO7R~7WY`~OX7RZp7Rqy7Rz|7R}!`7R!a#P7R#Q#p7R#q;'S7R;'S;=`7v<%lO7R~7yP;=`<%l7R~8R`p~qr.wst.wvw.wwx.w{|.w}!O/{!O!P.w!P!Q.w!Q![.w![!]6S!_!`.w!a!b.w!b!c.w!c!}.w#R#S.w#T#o.w~9[Oh~q~~9cPm~q~!`!a9f~9kOY~~9nP;=`<%l#o\",\n tokenizers: [0],\n topRules: {\"Document\":[0,6]},\n specialized: [{term: 32, get: (value, stack) => (specializeKeyword(value, stack) << 1), external: specializeKeyword}],\n tokenPrec: 204\n})\n","// This file was generated by lezer-generator. You probably shouldn't edit it.\nexport const\n ChartType = 1,\n TagKeyword = 2,\n DirectiveKeyword = 3,\n ControlKeyword = 4,\n ModifierKeyword = 5,\n Document = 6,\n Comment = 7,\n ContentLine = 8,\n SyncArrow = 9,\n AsyncArrow = 10,\n Duration = 11,\n DateLiteral = 12,\n Percentage = 13,\n Number = 14,\n SectionMarker = 15,\n Url = 16,\n OpenBracket = 17,\n CloseBracket = 18,\n OpenParen = 19,\n CloseParen = 20,\n OpenAngle = 21,\n CloseAngle = 22,\n ColorAnnotation = 23,\n Pipe = 24,\n Colon = 25,\n Comma = 26,\n Plus = 27,\n Dash = 28,\n Tilde = 29,\n Star = 30,\n Question = 31,\n Identifier = 32,\n Punct = 33\n","/** All supported DGMO chart types. */\nexport const CHART_TYPES = new Set([\n // Diagram types\n 'sequence',\n 'flowchart',\n 'class',\n 'er',\n 'org',\n 'kanban',\n 'c4',\n 'initiative-status',\n 'state',\n 'sitemap',\n 'infra',\n 'gantt',\n // Data chart types\n 'bar',\n 'line',\n 'pie',\n 'doughnut',\n 'area',\n 'polar-area',\n 'radar',\n 'bar-stacked',\n 'multi-line',\n 'scatter',\n 'sankey',\n 'chord',\n 'function',\n 'heatmap',\n 'funnel',\n // Visualization types\n 'slope',\n 'wordcloud',\n 'arc',\n 'timeline',\n 'venn',\n 'quadrant',\n]);\n\n/** Metadata keys recognized across chart types. */\nexport const METADATA_KEYS = new Set([\n 'title',\n 'series',\n 'orientation',\n 'x-label',\n 'y-label',\n 'size-label',\n 'x',\n 'columns',\n 'rows',\n 'labels',\n 'rotate',\n 'max',\n 'size',\n 'order',\n 'sort',\n 'scale',\n 'values',\n 'notation',\n 'x-axis',\n 'y-axis',\n 'top-right',\n 'top-left',\n 'bottom-right',\n 'bottom-left',\n]);\n\n/** Tag declaration keyword. */\nexport const TAG_KEYWORD = 'tag';\n\n/** Directive keywords — commands that configure chart behavior. */\nexport const DIRECTIVE_KEYWORDS = new Set([\n // Gantt\n 'start',\n 'era',\n 'marker',\n 'holiday',\n 'workweek',\n 'today-marker',\n 'critical-path',\n 'no-dependencies',\n 'sort',\n // Tags\n 'tags',\n 'import',\n 'active-tag',\n 'hide',\n // ER\n 'notation',\n // Class\n 'extends',\n 'implements',\n 'abstract',\n 'interface',\n 'enum',\n // C4\n 'containers',\n 'components',\n 'deployment',\n // Infra directives\n 'sub-node-label',\n 'show-sub-node-count',\n 'no-auto-color',\n // Infra node properties\n 'description',\n 'instances',\n 'max-rps',\n 'latency-ms',\n 'uptime',\n 'firewall-block',\n 'ratelimit-rps',\n 'cb-error-threshold',\n 'cb-latency-threshold-ms',\n 'buffer',\n 'drain-rate',\n 'retention-hours',\n 'partitions',\n 'split',\n 'slo-p90-latency-ms',\n 'slo-availability',\n 'cache-hit',\n 'concurrency',\n 'duration-ms',\n 'cold-start-ms',\n 'rps',\n // Sequence\n 'activations',\n 'no-activations',\n 'collapse-notes',\n 'no-collapse-notes',\n // Data charts\n 'stacked',\n 'no-label-name',\n 'no-label-value',\n 'no-label-percent',\n // Slope\n 'period',\n // Quadrant\n 'x-axis',\n 'y-axis',\n 'top-right',\n 'top-left',\n 'bottom-right',\n 'bottom-left',\n // Layout\n 'direction-tb',\n 'direction-lr',\n // Initiative-status\n 'contains',\n // Data chart metadata\n 'title',\n 'series',\n 'orientation',\n 'x-label',\n 'y-label',\n 'size-label',\n 'columns',\n 'rows',\n 'labels',\n 'rotate',\n 'scale',\n 'values',\n]);\n\n/** Control flow keywords — structural blocks. */\nexport const CONTROL_KEYWORDS = new Set([\n 'if',\n 'else',\n 'loop',\n 'parallel',\n 'note',\n]);\n\n/** Status keywords — initiative-status, kanban. */\nexport const STATUS_KEYWORDS = new Set([\n 'na',\n 'todo',\n 'wip',\n 'done',\n 'blocked',\n 'in-progress',\n 'backlog',\n 'ready',\n]);\n\n/** Modifier keywords — adjust declarations. */\nexport const MODIFIER_KEYWORDS = new Set([\n 'alias',\n 'aka',\n 'position',\n 'default',\n // Sequence participant types\n 'actor',\n 'service',\n 'database',\n 'queue',\n 'cache',\n 'gateway',\n 'external',\n 'networking',\n 'frontend',\n // C4 element types\n 'system',\n 'person',\n 'container',\n 'component',\n // ER column modifiers\n 'pk',\n 'fk',\n 'nullable',\n 'unique',\n // ER data types\n 'int',\n 'varchar',\n 'text',\n 'boolean',\n 'date',\n 'timestamp',\n 'float',\n 'decimal',\n]);\n","import {\n ChartType,\n TagKeyword,\n DirectiveKeyword,\n ControlKeyword,\n ModifierKeyword,\n} from './dgmo.grammar.terms.js';\nimport {\n CHART_TYPES,\n TAG_KEYWORD,\n DIRECTIVE_KEYWORDS,\n CONTROL_KEYWORDS,\n STATUS_KEYWORDS,\n MODIFIER_KEYWORDS,\n} from './keywords';\n\n/**\n * Keyword specializer for the Lezer grammar.\n * Called on every Identifier token — returns a specialized term ID\n * or -1 to keep it as a plain Identifier.\n */\nexport function specializeKeyword(value: string): number {\n if (CHART_TYPES.has(value)) return ChartType;\n if (value === TAG_KEYWORD) return TagKeyword;\n if (DIRECTIVE_KEYWORDS.has(value)) return DirectiveKeyword;\n if (CONTROL_KEYWORDS.has(value)) return ControlKeyword;\n if (STATUS_KEYWORDS.has(value)) return ModifierKeyword;\n if (MODIFIER_KEYWORDS.has(value)) return ModifierKeyword;\n return -1;\n}\n","import type { NodePropSource } from '@lezer/common';\nimport { styleTags, tags as t } from '@lezer/highlight';\n\n/** Maps grammar node names to semantic highlight tags. */\nexport const dgmoHighlighting: NodePropSource = styleTags({\n Comment: t.lineComment,\n ChartType: t.typeName,\n TagKeyword: t.definitionKeyword,\n DirectiveKeyword: t.keyword,\n ControlKeyword: t.controlKeyword,\n ModifierKeyword: t.modifier,\n SyncArrow: t.operator,\n AsyncArrow: t.operator,\n Duration: t.number,\n DateLiteral: t.number,\n Number: t.number,\n Percentage: t.number,\n SectionMarker: t.heading,\n OpenBracket: t.squareBracket,\n CloseBracket: t.squareBracket,\n OpenParen: t.paren,\n CloseParen: t.paren,\n OpenAngle: t.angleBracket,\n CloseAngle: t.angleBracket,\n Url: t.url,\n ColorAnnotation: t.atom,\n Pipe: t.separator,\n Colon: t.separator,\n Plus: t.separator,\n Comma: t.punctuation,\n Dash: t.operator,\n Tilde: t.operator,\n Star: t.operator,\n Question: t.operator,\n Punct: t.punctuation,\n});\n"],"mappings":"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","names":[]}