@diagrammo/dgmo 0.8.4 → 0.8.6

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 (68) hide show
  1. package/.claude/commands/dgmo.md +300 -0
  2. package/.cursorrules +20 -2
  3. package/.github/copilot-instructions.md +20 -2
  4. package/.windsurfrules +20 -2
  5. package/AGENTS.md +23 -3
  6. package/dist/cli.cjs +191 -189
  7. package/dist/editor.cjs +5 -18
  8. package/dist/editor.cjs.map +1 -1
  9. package/dist/editor.js +5 -18
  10. package/dist/editor.js.map +1 -1
  11. package/dist/highlight.cjs +543 -0
  12. package/dist/highlight.cjs.map +1 -0
  13. package/dist/highlight.d.cts +32 -0
  14. package/dist/highlight.d.ts +32 -0
  15. package/dist/highlight.js +513 -0
  16. package/dist/highlight.js.map +1 -0
  17. package/dist/index.cjs +3253 -3356
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +77 -56
  20. package/dist/index.d.ts +77 -56
  21. package/dist/index.js +3247 -3349
  22. package/dist/index.js.map +1 -1
  23. package/docs/ai-integration.md +1 -1
  24. package/docs/language-reference.md +113 -33
  25. package/gallery/fixtures/boxes-and-lines.dgmo +64 -0
  26. package/gallery/fixtures/slope.dgmo +7 -6
  27. package/package.json +26 -6
  28. package/src/boxes-and-lines/collapse.ts +78 -0
  29. package/src/boxes-and-lines/layout.ts +319 -0
  30. package/src/boxes-and-lines/parser.ts +694 -0
  31. package/src/boxes-and-lines/renderer.ts +848 -0
  32. package/src/boxes-and-lines/types.ts +40 -0
  33. package/src/c4/parser.ts +10 -5
  34. package/src/c4/renderer.ts +232 -56
  35. package/src/chart.ts +9 -4
  36. package/src/cli.ts +49 -6
  37. package/src/completion.ts +25 -33
  38. package/src/d3.ts +187 -46
  39. package/src/dgmo-router.ts +3 -7
  40. package/src/echarts.ts +38 -2
  41. package/src/editor/highlight-api.ts +444 -0
  42. package/src/editor/keywords.ts +6 -19
  43. package/src/er/parser.ts +10 -4
  44. package/src/gantt/parser.ts +7 -4
  45. package/src/gantt/renderer.ts +3 -5
  46. package/src/index.ts +106 -50
  47. package/src/infra/parser.ts +7 -5
  48. package/src/infra/renderer.ts +2 -2
  49. package/src/kanban/parser.ts +7 -5
  50. package/src/kanban/renderer.ts +43 -18
  51. package/src/org/parser.ts +7 -4
  52. package/src/org/renderer.ts +40 -29
  53. package/src/sequence/parser.ts +11 -5
  54. package/src/sequence/renderer.ts +114 -45
  55. package/src/sitemap/parser.ts +8 -4
  56. package/src/sitemap/renderer.ts +137 -57
  57. package/src/utils/legend-svg.ts +44 -20
  58. package/src/utils/parsing.ts +1 -1
  59. package/src/utils/tag-groups.ts +21 -1
  60. package/gallery/fixtures/initiative-status-full.dgmo +0 -46
  61. package/gallery/fixtures/initiative-status-phases.dgmo +0 -29
  62. package/gallery/fixtures/initiative-status.dgmo +0 -9
  63. package/src/initiative-status/collapse.ts +0 -76
  64. package/src/initiative-status/filter.ts +0 -63
  65. package/src/initiative-status/layout.ts +0 -650
  66. package/src/initiative-status/parser.ts +0 -629
  67. package/src/initiative-status/renderer.ts +0 -1199
  68. package/src/initiative-status/types.ts +0 -57
package/dist/editor.cjs CHANGED
@@ -51,11 +51,11 @@ var CHART_TYPES = /* @__PURE__ */ new Set([
51
51
  "org",
52
52
  "kanban",
53
53
  "c4",
54
- "initiative-status",
55
54
  "state",
56
55
  "sitemap",
57
56
  "infra",
58
57
  "gantt",
58
+ "boxes-and-lines",
59
59
  // Data chart types
60
60
  "bar",
61
61
  "line",
@@ -123,6 +123,8 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
123
123
  "import",
124
124
  "active-tag",
125
125
  "hide",
126
+ "mode",
127
+ "direction",
126
128
  // ER
127
129
  "notation",
128
130
  // Class
@@ -171,6 +173,8 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
171
173
  "no-label-name",
172
174
  "no-label-value",
173
175
  "no-label-percent",
176
+ // Slope
177
+ "period",
174
178
  // Quadrant
175
179
  "x-axis",
176
180
  "y-axis",
@@ -181,8 +185,6 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
181
185
  // Layout
182
186
  "direction-tb",
183
187
  "direction-lr",
184
- // Initiative-status
185
- "contains",
186
188
  // Data chart metadata
187
189
  "title",
188
190
  "series",
@@ -219,21 +221,6 @@ var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([
219
221
  "aka",
220
222
  "position",
221
223
  "default",
222
- // Sequence participant types
223
- "actor",
224
- "service",
225
- "database",
226
- "queue",
227
- "cache",
228
- "gateway",
229
- "external",
230
- "networking",
231
- "frontend",
232
- // C4 element types
233
- "system",
234
- "person",
235
- "container",
236
- "component",
237
224
  // ER column modifiers
238
225
  "pk",
239
226
  "fk",
@@ -1 +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 // 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":["t"]}
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 'state',\n 'sitemap',\n 'infra',\n 'gantt',\n 'boxes-and-lines',\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 'mode',\n 'direction',\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 // 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 — 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 // 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":["t"]}
package/dist/editor.js CHANGED
@@ -21,11 +21,11 @@ var CHART_TYPES = /* @__PURE__ */ new Set([
21
21
  "org",
22
22
  "kanban",
23
23
  "c4",
24
- "initiative-status",
25
24
  "state",
26
25
  "sitemap",
27
26
  "infra",
28
27
  "gantt",
28
+ "boxes-and-lines",
29
29
  // Data chart types
30
30
  "bar",
31
31
  "line",
@@ -93,6 +93,8 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
93
93
  "import",
94
94
  "active-tag",
95
95
  "hide",
96
+ "mode",
97
+ "direction",
96
98
  // ER
97
99
  "notation",
98
100
  // Class
@@ -141,6 +143,8 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
141
143
  "no-label-name",
142
144
  "no-label-value",
143
145
  "no-label-percent",
146
+ // Slope
147
+ "period",
144
148
  // Quadrant
145
149
  "x-axis",
146
150
  "y-axis",
@@ -151,8 +155,6 @@ var DIRECTIVE_KEYWORDS = /* @__PURE__ */ new Set([
151
155
  // Layout
152
156
  "direction-tb",
153
157
  "direction-lr",
154
- // Initiative-status
155
- "contains",
156
158
  // Data chart metadata
157
159
  "title",
158
160
  "series",
@@ -189,21 +191,6 @@ var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([
189
191
  "aka",
190
192
  "position",
191
193
  "default",
192
- // Sequence participant types
193
- "actor",
194
- "service",
195
- "database",
196
- "queue",
197
- "cache",
198
- "gateway",
199
- "external",
200
- "networking",
201
- "frontend",
202
- // C4 element types
203
- "system",
204
- "person",
205
- "container",
206
- "component",
207
194
  // ER column modifiers
208
195
  "pk",
209
196
  "fk",
@@ -1 +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 // 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":[]}
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 'state',\n 'sitemap',\n 'infra',\n 'gantt',\n 'boxes-and-lines',\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 'mode',\n 'direction',\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 // 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 — 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 // 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":[]}