mermaid
Version:
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
8 lines • 132 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/diagrams/block/parser/block.jison", "../../../src/diagrams/block/blockDB.ts", "../../../src/diagrams/block/styles.ts", "../../../src/diagrams/block/layout.ts", "../../../src/diagrams/block/renderHelpers.ts", "../../../src/diagrams/block/blockRenderer.ts", "../../../src/diagrams/block/blockDiagram.ts"],
"sourcesContent": ["/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,15],$V1=[1,7],$V2=[1,13],$V3=[1,14],$V4=[1,19],$V5=[1,16],$V6=[1,17],$V7=[1,18],$V8=[8,30],$V9=[8,10,21,28,29,30,31,39,43,46],$Va=[1,23],$Vb=[1,24],$Vc=[8,10,15,16,21,28,29,30,31,39,43,46],$Vd=[8,10,15,16,21,27,28,29,30,31,39,43,46],$Ve=[1,49];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"spaceLines\":3,\"SPACELINE\":4,\"NL\":5,\"separator\":6,\"SPACE\":7,\"EOF\":8,\"start\":9,\"BLOCK_DIAGRAM_KEY\":10,\"document\":11,\"stop\":12,\"statement\":13,\"link\":14,\"LINK\":15,\"START_LINK\":16,\"LINK_LABEL\":17,\"STR\":18,\"nodeStatement\":19,\"columnsStatement\":20,\"SPACE_BLOCK\":21,\"blockStatement\":22,\"classDefStatement\":23,\"cssClassStatement\":24,\"styleStatement\":25,\"node\":26,\"SIZE\":27,\"COLUMNS\":28,\"id-block\":29,\"end\":30,\"NODE_ID\":31,\"nodeShapeNLabel\":32,\"dirList\":33,\"DIR\":34,\"NODE_DSTART\":35,\"NODE_DEND\":36,\"BLOCK_ARROW_START\":37,\"BLOCK_ARROW_END\":38,\"classDef\":39,\"CLASSDEF_ID\":40,\"CLASSDEF_STYLEOPTS\":41,\"DEFAULT\":42,\"class\":43,\"CLASSENTITY_IDS\":44,\"STYLECLASS\":45,\"style\":46,\"STYLE_ENTITY_IDS\":47,\"STYLE_DEFINITION_DATA\":48,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACELINE\",5:\"NL\",7:\"SPACE\",8:\"EOF\",10:\"BLOCK_DIAGRAM_KEY\",15:\"LINK\",16:\"START_LINK\",17:\"LINK_LABEL\",18:\"STR\",21:\"SPACE_BLOCK\",27:\"SIZE\",28:\"COLUMNS\",29:\"id-block\",30:\"end\",31:\"NODE_ID\",34:\"DIR\",35:\"NODE_DSTART\",36:\"NODE_DEND\",37:\"BLOCK_ARROW_START\",38:\"BLOCK_ARROW_END\",39:\"classDef\",40:\"CLASSDEF_ID\",41:\"CLASSDEF_STYLEOPTS\",42:\"DEFAULT\",43:\"class\",44:\"CLASSENTITY_IDS\",45:\"STYLECLASS\",46:\"style\",47:\"STYLE_ENTITY_IDS\",48:\"STYLE_DEFINITION_DATA\"},\nproductions_: [0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\nyy.getLogger().debug('Rule: separator (NL) ');\nbreak;\ncase 5:\nyy.getLogger().debug('Rule: separator (Space) ');\nbreak;\ncase 6:\nyy.getLogger().debug('Rule: separator (EOF) ');\nbreak;\ncase 7:\n yy.getLogger().debug(\"Rule: hierarchy: \", $$[$0-1]); yy.setHierarchy($$[$0-1]); \nbreak;\ncase 8:\nyy.getLogger().debug('Stop NL ');\nbreak;\ncase 9:\nyy.getLogger().debug('Stop EOF ');\nbreak;\ncase 10:\nyy.getLogger().debug('Stop NL2 ');\nbreak;\ncase 11:\nyy.getLogger().debug('Stop EOF2 ');\nbreak;\ncase 12:\n yy.getLogger().debug(\"Rule: statement: \", $$[$0]); typeof $$[$0].length === 'number'?this.$ = $$[$0]:this.$ = [$$[$0]]; \nbreak;\ncase 13:\n yy.getLogger().debug(\"Rule: statement #2: \", $$[$0-1]); this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 14:\n yy.getLogger().debug(\"Rule: link: \", $$[$0], yytext); this.$={edgeTypeStr: $$[$0], label:''}; \nbreak;\ncase 15:\n yy.getLogger().debug(\"Rule: LABEL link: \", $$[$0-3], $$[$0-1], $$[$0]); this.$={edgeTypeStr: $$[$0], label:$$[$0-1]}; \nbreak;\ncase 18:\n const num=parseInt($$[$0]); const spaceId = yy.generateId(); this.$ = { id: spaceId, type:'space', label:'', width: num, children: [] }\nbreak;\ncase 23:\n\n yy.getLogger().debug('Rule: (nodeStatement link node) ', $$[$0-2], $$[$0-1], $$[$0], ' typestr: ',$$[$0-1].edgeTypeStr);\n const edgeData = yy.edgeStrToEdgeData($$[$0-1].edgeTypeStr)\n const startEdgeData = yy.edgeStrToEdgeStartData($$[$0-1].edgeTypeStr);\n const lineThickness = yy.edgeStrToThickness($$[$0-1].edgeTypeStr);\n const linePattern = yy.edgeStrToPattern($$[$0-1].edgeTypeStr);\n this.$ = [\n {id: $$[$0-2].id, label: $$[$0-2].label, type:$$[$0-2].type, directions: $$[$0-2].directions},\n {id: $$[$0-2].id + '-' + $$[$0].id, start: $$[$0-2].id, end: $$[$0].id, label: $$[$0-1].label, type: 'edge', thickness: lineThickness, pattern: linePattern, directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: startEdgeData },\n {id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions}\n ];\n \nbreak;\ncase 24:\n yy.getLogger().debug('Rule: nodeStatement (abc88 node size) ', $$[$0-1], $$[$0]); this.$ = {id: $$[$0-1].id, label: $$[$0-1].label, type: yy.typeStr2Type($$[$0-1].typeStr), directions: $$[$0-1].directions, widthInColumns: parseInt($$[$0],10)}; \nbreak;\ncase 25:\n yy.getLogger().debug('Rule: nodeStatement (node) ', $$[$0]); this.$ = {id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns:1}; \nbreak;\ncase 26:\n yy.getLogger().debug('APA123', this? this:'na'); yy.getLogger().debug(\"COLUMNS: \", $$[$0]); this.$ = {type: 'column-setting', columns: $$[$0] === 'auto'?-1:parseInt($$[$0]) } \nbreak;\ncase 27:\n yy.getLogger().debug('Rule: id-block statement : ', $$[$0-2], $$[$0-1]); const id2 = yy.generateId(); this.$ = { ...$$[$0-2], type:'composite', children: $$[$0-1] }; \nbreak;\ncase 28:\n yy.getLogger().debug('Rule: blockStatement : ', $$[$0-2], $$[$0-1], $$[$0]); const id = yy.generateId(); this.$ = { id, type:'composite', label:'', children: $$[$0-1] }; \nbreak;\ncase 29:\n yy.getLogger().debug(\"Rule: node (NODE_ID separator): \", $$[$0]); this.$ = { id: $$[$0] }; \nbreak;\ncase 30:\n\n yy.getLogger().debug(\"Rule: node (NODE_ID nodeShapeNLabel separator): \", $$[$0-1], $$[$0]);\n this.$ = { id: $$[$0-1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };\n \nbreak;\ncase 31:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0]); this.$ = [$$[$0]]; \nbreak;\ncase 32:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0-1], $$[$0]); this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 33:\n yy.getLogger().debug(\"Rule: nodeShapeNLabel: \", $$[$0-2], $$[$0-1], $$[$0]); this.$ = { typeStr: $$[$0-2] + $$[$0], label: $$[$0-1] }; \nbreak;\ncase 34:\n yy.getLogger().debug(\"Rule: BLOCK_ARROW nodeShapeNLabel: \", $$[$0-3], $$[$0-2], \" #3:\",$$[$0-1], $$[$0]); this.$ = { typeStr: $$[$0-3] + $$[$0], label: $$[$0-2], directions: $$[$0-1]}; \nbreak;\ncase 35: case 36:\n\n this.$ = { type: 'classDef', id: $$[$0-1].trim(), css: $$[$0].trim() };\n \nbreak;\ncase 37:\n\n //log.debug('apply class: id(s): ',$$[$0-1], ' style class: ', $$[$0]);\n this.$={ type: 'applyClass', id: $$[$0-1].trim(), styleClass: $$[$0].trim() };\n \nbreak;\ncase 38:\n\n this.$={ type: 'applyStyles', id: $$[$0-1].trim(), stylesStr: $$[$0].trim() };\n \nbreak;\n}\n},\ntable: [{9:1,10:[1,2]},{1:[3]},{10:$V0,11:3,13:4,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{8:[1,20]},o($V8,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:$V0,21:$V1,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7}),o($V9,[2,16],{14:22,15:$Va,16:$Vb}),o($V9,[2,17]),o($V9,[2,18]),o($V9,[2,19]),o($V9,[2,20]),o($V9,[2,21]),o($V9,[2,22]),o($Vc,[2,25],{27:[1,25]}),o($V9,[2,26]),{19:26,26:12,31:$V4},{10:$V0,11:27,13:4,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},o($Vd,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},o($V8,[2,13]),{26:35,31:$V4},{31:[2,14]},{17:[1,36]},o($Vc,[2,24]),{10:$V0,11:37,13:4,14:22,15:$Va,16:$Vb,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},o($Vd,[2,30]),{18:[1,43]},{18:[1,44]},o($Vc,[2,23]),{18:[1,45]},{30:[1,46]},o($V9,[2,28]),o($V9,[2,35]),o($V9,[2,36]),o($V9,[2,37]),o($V9,[2,38]),{36:[1,47]},{33:48,34:$Ve},{15:[1,50]},o($V9,[2,27]),o($Vd,[2,33]),{38:[1,51]},{33:52,34:$Ve,38:[2,31]},{31:[2,15]},o($Vd,[2,34]),{38:[2,32]}],\ndefaultActions: {20:[2,7],23:[2,14],50:[2,15],52:[2,32]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: yy.getLogger().debug('Found block-beta'); return 10; \nbreak;\ncase 1: yy.getLogger().debug('Found id-block'); return 29; \nbreak;\ncase 2: yy.getLogger().debug('Found block'); return 10; \nbreak;\ncase 3: yy.getLogger().debug('.', yy_.yytext); /* skip all whitespace */ \nbreak;\ncase 4:yy.getLogger().debug('_', yy_.yytext); /* skip all whitespace */ \nbreak;\ncase 5: return 5 \nbreak;\ncase 6: yy_.yytext=-1; return 28; \nbreak;\ncase 7: yy_.yytext = yy_.yytext.replace(/columns\\s+/,''); yy.getLogger().debug('COLUMNS (LEX)', yy_.yytext); return 28; \nbreak;\ncase 8: this.pushState(\"md_string\");\nbreak;\ncase 9: return \"MD_STR\";\nbreak;\ncase 10: this.popState();\nbreak;\ncase 11:this.pushState(\"string\");\nbreak;\ncase 12: yy.getLogger().debug('LEX: POPPING STR:', yy_.yytext);this.popState();\nbreak;\ncase 13: yy.getLogger().debug('LEX: STR end:', yy_.yytext); return \"STR\";\nbreak;\ncase 14: yy_.yytext = yy_.yytext.replace(/space\\:/,'');yy.getLogger().debug('SPACE NUM (LEX)', yy_.yytext); return 21; \nbreak;\ncase 15: yy_.yytext = '1'; yy.getLogger().debug('COLUMNS (LEX)', yy_.yytext); return 21; \nbreak;\ncase 16:return 42;\nbreak;\ncase 17:return 'LINKSTYLE';\nbreak;\ncase 18:return 'INTERPOLATE';\nbreak;\ncase 19: this.pushState('CLASSDEF'); return 39; \nbreak;\ncase 20: this.popState(); this.pushState('CLASSDEFID'); return 'DEFAULT_CLASSDEF_ID' \nbreak;\ncase 21: this.popState(); this.pushState('CLASSDEFID'); return 40 \nbreak;\ncase 22: this.popState(); return 41 \nbreak;\ncase 23: this.pushState('CLASS'); return 43; \nbreak;\ncase 24: this.popState(); this.pushState('CLASS_STYLE'); return 44 \nbreak;\ncase 25: this.popState(); return 45 \nbreak;\ncase 26: this.pushState('STYLE_STMNT'); return 46; \nbreak;\ncase 27: this.popState(); this.pushState('STYLE_DEFINITION'); return 47 \nbreak;\ncase 28: this.popState(); return 48 \nbreak;\ncase 29: this.pushState(\"acc_title\");return 'acc_title'; \nbreak;\ncase 30: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 31: this.pushState(\"acc_descr\");return 'acc_descr'; \nbreak;\ncase 32: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 33: this.pushState(\"acc_descr_multiline\");\nbreak;\ncase 34: this.popState(); \nbreak;\ncase 35:return \"acc_descr_multiline_value\";\nbreak;\ncase 36:return 30;\nbreak;\ncase 37: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 38: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 39: this.popState();yy.getLogger().debug('Lex: ))'); return \"NODE_DEND\"; \nbreak;\ncase 40: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 41: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 42: this.popState();yy.getLogger().debug('Lex: (-'); return \"NODE_DEND\"; \nbreak;\ncase 43: this.popState();yy.getLogger().debug('Lex: -)'); return \"NODE_DEND\"; \nbreak;\ncase 44: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 45: this.popState();yy.getLogger().debug('Lex: ]]'); return \"NODE_DEND\"; \nbreak;\ncase 46: this.popState();yy.getLogger().debug('Lex: ('); return \"NODE_DEND\"; \nbreak;\ncase 47: this.popState();yy.getLogger().debug('Lex: ])'); return \"NODE_DEND\"; \nbreak;\ncase 48: this.popState();yy.getLogger().debug('Lex: /]'); return \"NODE_DEND\"; \nbreak;\ncase 49: this.popState();yy.getLogger().debug('Lex: /]'); return \"NODE_DEND\"; \nbreak;\ncase 50: this.popState();yy.getLogger().debug('Lex: )]'); return \"NODE_DEND\"; \nbreak;\ncase 51: this.popState();yy.getLogger().debug('Lex: )'); return \"NODE_DEND\"; \nbreak;\ncase 52: this.popState();yy.getLogger().debug('Lex: ]>'); return \"NODE_DEND\"; \nbreak;\ncase 53: this.popState();yy.getLogger().debug('Lex: ]'); return \"NODE_DEND\"; \nbreak;\ncase 54: yy.getLogger().debug('Lexa: -)'); this.pushState('NODE');return 35; \nbreak;\ncase 55: yy.getLogger().debug('Lexa: (-'); this.pushState('NODE');return 35; \nbreak;\ncase 56: yy.getLogger().debug('Lexa: ))'); this.pushState('NODE');return 35; \nbreak;\ncase 57: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 58: yy.getLogger().debug('Lex: ((('); this.pushState('NODE');return 35; \nbreak;\ncase 59: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 60: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 61: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 62: yy.getLogger().debug('Lexc: >'); this.pushState('NODE');return 35; \nbreak;\ncase 63: yy.getLogger().debug('Lexa: (['); this.pushState('NODE');return 35; \nbreak;\ncase 64: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 65: this.pushState('NODE');return 35; \nbreak;\ncase 66: this.pushState('NODE');return 35; \nbreak;\ncase 67: this.pushState('NODE');return 35; \nbreak;\ncase 68: this.pushState('NODE');return 35; \nbreak;\ncase 69: this.pushState('NODE');return 35; \nbreak;\ncase 70: this.pushState('NODE');return 35; \nbreak;\ncase 71: this.pushState('NODE');return 35; \nbreak;\ncase 72: yy.getLogger().debug('Lexa: ['); this.pushState('NODE');return 35; \nbreak;\ncase 73: this.pushState('BLOCK_ARROW');yy.getLogger().debug('LEX ARR START');return 37; \nbreak;\ncase 74: yy.getLogger().debug('Lex: NODE_ID', yy_.yytext);return 31; \nbreak;\ncase 75: yy.getLogger().debug('Lex: EOF', yy_.yytext);return 8; \nbreak;\ncase 76: this.pushState(\"md_string\");\nbreak;\ncase 77: this.pushState(\"md_string\");\nbreak;\ncase 78: return \"NODE_DESCR\";\nbreak;\ncase 79: this.popState();\nbreak;\ncase 80: yy.getLogger().debug('Lex: Starting string');this.pushState(\"string\");\nbreak;\ncase 81: yy.getLogger().debug('LEX ARR: Starting string');this.pushState(\"string\");\nbreak;\ncase 82: yy.getLogger().debug('LEX: NODE_DESCR:', yy_.yytext); return \"NODE_DESCR\";\nbreak;\ncase 83:yy.getLogger().debug('LEX POPPING');this.popState();\nbreak;\ncase 84: yy.getLogger().debug('Lex: =>BAE'); this.pushState('ARROW_DIR'); \nbreak;\ncase 85: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (right): dir:',yy_.yytext);return \"DIR\"; \nbreak;\ncase 86: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (left):',yy_.yytext);return \"DIR\"; \nbreak;\ncase 87: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (x):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 88: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (y):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 89: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (up):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 90: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (down):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 91: yy_.yytext=']>';yy.getLogger().debug('Lex (ARROW_DIR end):',yy_.yytext);this.popState();this.popState();return \"BLOCK_ARROW_END\"; \nbreak;\ncase 92: yy.getLogger().debug('Lex: LINK', '#'+yy_.yytext+'#'); return 15; \nbreak;\ncase 93: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 94: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 95: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 96: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 97: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 98: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 99: this.pushState(\"md_string\");\nbreak;\ncase 100: yy.getLogger().debug('Lex: Starting string');this.pushState(\"string\"); return \"LINK_LABEL\";\nbreak;\ncase 101: this.popState(); yy.getLogger().debug('Lex: LINK', '#'+yy_.yytext+'#'); return 15; \nbreak;\ncase 102: this.popState(); yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 103: this.popState(); yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 104: yy.getLogger().debug('Lex: COLON', yy_.yytext); yy_.yytext=yy_.yytext.slice(1);return 27; \nbreak;\n}\n},\nrules: [/^(?:block-beta\\b)/,/^(?:block:)/,/^(?:block\\b)/,/^(?:[\\s]+)/,/^(?:[\\n]+)/,/^(?:((\\u000D\\u000A)|(\\u000A)))/,/^(?:columns\\s+auto\\b)/,/^(?:columns\\s+[\\d]+)/,/^(?:[\"][`])/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:space[:]\\d+)/,/^(?:space\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\s+)/,/^(?:DEFAULT\\s+)/,/^(?:\\w+\\s+)/,/^(?:[^\\n]*)/,/^(?:class\\s+)/,/^(?:(\\w+)+((,\\s*\\w+)*))/,/^(?:[^\\n]*)/,/^(?:style\\s+)/,/^(?:(\\w+)+((,\\s*\\w+)*))/,/^(?:[^\\n]*)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:end\\b\\s*)/,/^(?:\\(\\(\\()/,/^(?:\\)\\)\\))/,/^(?:[\\)]\\))/,/^(?:\\}\\})/,/^(?:\\})/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:\\(\\()/,/^(?:\\]\\])/,/^(?:\\()/,/^(?:\\]\\))/,/^(?:\\\\\\])/,/^(?:\\/\\])/,/^(?:\\)\\])/,/^(?:[\\)])/,/^(?:\\]>)/,/^(?:[\\]])/,/^(?:-\\))/,/^(?:\\(-)/,/^(?:\\)\\))/,/^(?:\\))/,/^(?:\\(\\(\\()/,/^(?:\\(\\()/,/^(?:\\{\\{)/,/^(?:\\{)/,/^(?:>)/,/^(?:\\(\\[)/,/^(?:\\()/,/^(?:\\[\\[)/,/^(?:\\[\\|)/,/^(?:\\[\\()/,/^(?:\\)\\)\\))/,/^(?:\\[\\\\)/,/^(?:\\[\\/)/,/^(?:\\[\\\\)/,/^(?:\\[)/,/^(?:<\\[)/,/^(?:[^\\(\\[\\n\\-\\)\\{\\}\\s\\<\\>:=]+)/,/^(?:$)/,/^(?:[\"][`])/,/^(?:[\"][`])/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:\\]>\\s*\\()/,/^(?:,?\\s*right\\s*)/,/^(?:,?\\s*left\\s*)/,/^(?:,?\\s*x\\s*)/,/^(?:,?\\s*y\\s*)/,/^(?:,?\\s*up\\s*)/,/^(?:,?\\s*down\\s*)/,/^(?:\\)\\s*)/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?:\\s*~~[\\~]+\\s*)/,/^(?:\\s*[xo<]?--\\s*)/,/^(?:\\s*[xo<]?==\\s*)/,/^(?:\\s*[xo<]?-\\.\\s*)/,/^(?:[\"][`])/,/^(?:[\"])/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?::\\d+)/],\nconditions: {\"STYLE_DEFINITION\":{\"rules\":[28],\"inclusive\":false},\"STYLE_STMNT\":{\"rules\":[27],\"inclusive\":false},\"CLASSDEFID\":{\"rules\":[22],\"inclusive\":false},\"CLASSDEF\":{\"rules\":[20,21],\"inclusive\":false},\"CLASS_STYLE\":{\"rules\":[25],\"inclusive\":false},\"CLASS\":{\"rules\":[24],\"inclusive\":false},\"LLABEL\":{\"rules\":[99,100,101,102,103],\"inclusive\":false},\"ARROW_DIR\":{\"rules\":[85,86,87,88,89,90,91],\"inclusive\":false},\"BLOCK_ARROW\":{\"rules\":[76,81,84],\"inclusive\":false},\"NODE\":{\"rules\":[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],\"inclusive\":false},\"md_string\":{\"rules\":[9,10,78,79],\"inclusive\":false},\"space\":{\"rules\":[],\"inclusive\":false},\"string\":{\"rules\":[12,13,82,83],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[34,35],\"inclusive\":false},\"acc_descr\":{\"rules\":[32],\"inclusive\":false},\"acc_title\":{\"rules\":[30],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { clone } from 'es-toolkit/compat';\nimport * as configApi from '../../config.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport common from '../common/common.js';\nimport { clear as commonClear } from '../common/commonDb.js';\nimport type { Block, ClassDef } from './blockTypes.js';\n\n// Initialize the node database for simple lookups\nlet blockDatabase = new Map<string, Block>();\nlet edgeList: Block[] = [];\nlet edgeCount = new Map<string, number>();\n\nconst COLOR_KEYWORD = 'color';\nconst FILL_KEYWORD = 'fill';\nconst BG_FILL = 'bgFill';\nconst STYLECLASS_SEP = ',';\nlet classes = new Map<string, ClassDef>();\nlet diagramId = '';\n\nconst sanitizeText = (txt: string) => common.sanitizeText(txt, getConfig());\n\n/**\n * Called when the parser comes across a (style) class definition\n * @example classDef my-style fill:#f96;\n *\n * @param id - the id of this (style) class\n * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)\n */\nexport const addStyleClass = function (id: string, styleAttributes = '') {\n // create a new style class object with this id\n let foundClass = classes.get(id);\n if (!foundClass) {\n foundClass = { id: id, styles: [], textStyles: [] };\n classes.set(id, foundClass); // This is a classDef\n }\n if (styleAttributes !== undefined && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n // remove any trailing ;\n const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim();\n\n // replace some style keywords\n if (RegExp(COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n};\n\n/**\n * Called when the parser comes across a style definition\n * @example style my-block-id fill:#f96;\n *\n * @param id - the id of the block to style\n * @param styles - the string with 1 or more style attributes (each separated by a comma)\n */\nexport const addStyle2Node = function (id: string, styles = '') {\n const foundBlock = blockDatabase.get(id)!;\n if (styles !== undefined && styles !== null) {\n foundBlock.styles = styles.split(STYLECLASS_SEP);\n }\n};\n\n/**\n * Add a CSS/style class to the block with the given id.\n * If the block isn't already in the list of known blocks, add it.\n * Might be called by parser when a CSS/style class should be applied to a block\n *\n * @param itemIds - The id or a list of ids of the item(s) to apply the css class to\n * @param cssClassName - CSS class name\n */\nexport const setCssClass = function (itemIds: string, cssClassName: string) {\n itemIds.split(',').forEach(function (id: string) {\n let foundBlock = blockDatabase.get(id);\n if (foundBlock === undefined) {\n const trimmedId = id.trim();\n foundBlock = { id: trimmedId, type: 'na', children: [] } as Block;\n blockDatabase.set(trimmedId, foundBlock);\n }\n if (!foundBlock.classes) {\n foundBlock.classes = [];\n }\n foundBlock.classes.push(cssClassName);\n });\n};\n\n/**\n * Next palette slot to hand out.\n *\n * Composites only, and one counter across the whole parse -- exactly what the flowchart\n * does for its subgraphs. There, `declarationIndex` is built by walking `subGraphs` and\n * nothing else, and every palette selector it emits is a `.cluster` or a collapsed\n * subgraph; a plain node never takes a slot. A block diagram's containers are its\n * composites, so those are what take one here.\n *\n * A nested composite continues the cycle rather than restarting it, which is what keeps\n * two sibling containers from opening on the same colour.\n */\nlet nextColorIndex = 0;\n\nconst populateBlockDatabase = (_blockList: Block[], parent: Block): void => {\n const blockList = _blockList.flat();\n const children = [];\n const columnSettingBlock = blockList.find((b) => b?.type === 'column-setting');\n const column = columnSettingBlock?.columns ?? -1;\n for (const block of blockList) {\n if (\n typeof column === 'number' &&\n column > 0 &&\n block.type !== 'column-setting' &&\n typeof block.widthInColumns === 'number' &&\n block.widthInColumns > column\n ) {\n log.warn(\n `Block ${block.id} width ${block.widthInColumns} exceeds configured column width ${column}`\n );\n }\n if (block.label) {\n block.label = sanitizeText(block.label);\n }\n if (block.type === 'classDef') {\n addStyleClass(block.id, block.css);\n continue;\n }\n if (block.type === 'applyClass') {\n setCssClass(block.id, block?.styleClass ?? '');\n continue;\n }\n if (block.type === 'applyStyles') {\n if (block?.stylesStr) {\n addStyle2Node(block.id, block?.stylesStr);\n }\n continue;\n }\n if (block.type === 'column-setting') {\n parent.columns = block.columns ?? -1;\n } else if (block.type === 'edge') {\n const count = (edgeCount.get(block.id) ?? 0) + 1;\n edgeCount.set(block.id, count);\n block.id = count + '-' + block.id;\n edgeList.push(block);\n } else {\n if (!block.label) {\n if (block.type === 'composite') {\n block.label = '';\n // log.debug('abc89 composite', block);\n } else {\n block.label = block.id;\n }\n }\n const existingBlock = blockDatabase.get(block.id);\n\n if (existingBlock === undefined) {\n // Assigned here, before the recursion into `block.children` below, so an outer\n // composite takes a lower slot than any composite nested inside it.\n if (block.type === 'composite') {\n block.colorIndex = nextColorIndex++;\n }\n blockDatabase.set(block.id, block);\n } else {\n // Add newer relevant data to aggregated node\n if (block.type !== 'na') {\n existingBlock.type = block.type;\n }\n if (block.label !== block.id) {\n existingBlock.label = block.label;\n }\n }\n\n if (block.children) {\n populateBlockDatabase(block.children, block);\n }\n if (block.type === 'space') {\n // log.debug('abc95 space', block);\n const w = block.width ?? 1;\n for (let j = 0; j < w; j++) {\n const newBlock = clone(block);\n newBlock.id = newBlock.id + '-' + j;\n blockDatabase.set(newBlock.id, newBlock);\n children.push(newBlock);\n }\n } else if (existingBlock === undefined) {\n children.push(block);\n }\n }\n }\n parent.children = children;\n};\n\nlet blocks: Block[] = [];\nlet rootBlock = { id: 'root', type: 'composite', children: [], columns: -1 } as Block;\n\nconst clear = (): void => {\n log.debug('Clear called');\n commonClear();\n rootBlock = { id: 'root', type: 'composite', children: [], columns: -1 } as Block;\n blockDatabase = new Map([['root', rootBlock]]);\n blocks = [];\n classes = new Map();\n\n edgeList = [];\n edgeCount = new Map();\n diagramId = '';\n nextColorIndex = 0;\n};\n\nexport function typeStr2Type(typeStr: string) {\n log.debug('typeStr2Type', typeStr);\n switch (typeStr) {\n case '[]':\n return 'square';\n case '()':\n log.debug('we have a round');\n return 'round';\n case '(())':\n return 'circle';\n case '>]':\n return 'rect_left_inv_arrow';\n case '{}':\n return 'diamond';\n case '{{}}':\n return 'hexagon';\n case '([])':\n return 'stadium';\n case '[[]]':\n return 'subroutine';\n case '[()]':\n return 'cylinder';\n case '((()))':\n return 'doublecircle';\n case '[//]':\n return 'lean_right';\n case '[\\\\\\\\]':\n return 'lean_left';\n case '[/\\\\]':\n return 'trapezoid';\n case '[\\\\/]':\n return 'inv_trapezoid';\n case '<[]>':\n return 'block_arrow';\n default:\n return 'na';\n }\n}\n\nexport function edgeTypeStr2Type(typeStr: string): string {\n log.debug('typeStr2Type', typeStr);\n switch (typeStr) {\n case '==':\n return 'thick';\n default:\n return 'normal';\n }\n}\n\nexport function edgeStrToEdgeData(typeStr: string): string {\n const lastChar = typeStr.trim().slice(-1);\n switch (lastChar) {\n case 'x':\n return 'arrow_cross';\n case 'o':\n return 'arrow_circle';\n case '>':\n return 'arrow_point';\n default:\n return '';\n }\n}\n\nexport function edgeStrToEdgeStartData(typeStr: string): string {\n const firstChar = typeStr.trim().charAt(0);\n switch (firstChar) {\n case 'x':\n return 'arrow_cross';\n case 'o':\n return 'arrow_circle';\n case '<':\n return 'arrow_point';\n default:\n return 'arrow_open';\n }\n}\n\nexport function edgeStrToThickness(typeStr: string): string {\n return typeStr.includes('==') ? 'thick' : 'normal';\n}\n\nexport function edgeStrToPattern(typeStr: string): string {\n if (typeStr.includes('.-')) {\n return 'dotted';\n }\n return 'solid';\n}\n\nlet cnt = 0;\nexport const generateId = () => {\n cnt++;\n return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt;\n};\n\nconst setHierarchy = (block: Block[]): void => {\n rootBlock.children = block;\n populateBlockDatabase(block, rootBlock);\n blocks = rootBlock.children;\n};\n\nconst getColumns = (blockId: string): number => {\n const block = blockDatabase.get(blockId);\n if (!block) {\n return -1;\n }\n if (block.columns) {\n return block.columns;\n }\n if (!block.children) {\n return -1;\n }\n return block.children.length;\n};\n\n/**\n * Returns all the blocks as a flat array\n * @returns\n */\nconst getBlocksFlat = () => {\n return [...blockDatabase.values()];\n};\n/**\n * Returns the hierarchy of blocks\n * @returns\n */\nconst getBlocks = () => {\n return blocks || [];\n};\n\nconst getEdges = () => {\n return edgeList;\n};\nconst getBlock = (id: string) => {\n return blockDatabase.get(id);\n};\n\nconst setBlock = (block: Block) => {\n blockDatabase.set(block.id, block);\n};\n\nconst setDiagramId = (id: string) => {\n diagramId = id;\n};\n\nconst getDiagramId = () => diagramId;\n\nconst getLogger = () => log;\n\n/**\n * Return all of the style classes\n */\nexport const getClasses = function () {\n return classes;\n};\n\nconst db = {\n getConfig: () => configApi.getConfig().block,\n typeStr2Type: typeStr2Type,\n edgeTypeStr2Type: edgeTypeStr2Type,\n edgeStrToEdgeData,\n edgeStrToEdgeStartData,\n edgeStrToThickness,\n edgeStrToPattern,\n getLogger,\n getBlocksFlat,\n getBlocks,\n getEdges,\n setHierarchy,\n getBlock,\n setBlock,\n getColumns,\n getClasses,\n clear,\n generateId,\n setDiagramId,\n getDiagramId,\n} as const;\n\nexport type BlockDB = typeof db & DiagramDB;\nexport default db;\n", "import * as khroma from 'khroma';\nimport { getIconStyles } from '../globalStyles.js';\nimport { colorSlotCount, hasPalette, isColorTheme, safeLook } from '../common/colorThemeGate.js';\n\n/** Returns the styles given options */\nexport interface BlockChartStyleOptions {\n arrowheadColor: string;\n border2: string;\n clusterBkg: string;\n clusterBorder: string;\n edgeLabelBackground: string;\n fontFamily: string;\n lineColor: string;\n mainBkg: string;\n nodeBorder: string;\n nodeTextColor: string;\n strokeWidth?: number;\n tertiaryColor: string;\n textColor: string;\n titleColor: string;\n /* Supplied by `createUserStyles`, which spreads `config.themeVariables` and adds the\n theme name and look. Only the colour themes carry the palette arrays. */\n theme?: string;\n look?: string;\n borderColorArray?: string[];\n bkgColorArray?: string[];\n THEME_COLOR_LIMIT?: number;\n}\n\n/**\n * Per-composite palette rules, matching what the flowchart does for its subgraphs: one\n * counter over containers, and nothing on the plain shapes.\n *\n * A composite always draws a `rect.composite` inside a `.node` group -- it has no roughjs\n * variant, so unlike the flowchart there is no `.rough-node` prefix to mirror and no\n * hachure path to avoid painting. That one selector is the whole surface.\n *\n * Not `!important`: `composite.ts` puts a block's own `style` declarations in an inline\n * `style` attribute, which has to keep winning over the theme palette.\n */\nconst genColor = (options: BlockChartStyleOptions) => {\n const { theme, bkgColorArray, borderColorArray } = options;\n if (!isColorTheme(theme, borderColorArray)) {\n return '';\n }\n const look = safeLook(options.look);\n const hasBkgColors = hasPalette(bkgColorArray);\n let sections = '';\n\n for (let i = 0; i < colorSlotCount(options.THEME_COLOR_LIMIT, borderColorArray); i++) {\n const borderColor = borderColorArray![i % borderColorArray!.length];\n const fill = hasBkgColors ? `fill: ${bkgColorArray[i % bkgColorArray.length]};` : '';\n const slot = `[data-look=\"${look}\"][data-color-id=\"color-${i}\"]`;\n\n sections += `\n\n ${slot}.node rect.composite {\n stroke: ${borderColor};\n ${fill}\n }\n`;\n }\n return sections;\n};\n\nconst fade = (color: string, opacity: number) => {\n // @ts-ignore TODO: incorrect types from khroma\n const channel = khroma.channel;\n\n const r = channel(color, 'r');\n const g = channel(color, 'g');\n const b = channel(color, 'b');\n\n // @ts-ignore incorrect types from khroma\n return khroma.rgba(r, g, b, opacity);\n};\n\nconst getStyles = (options: BlockChartStyleOptions) =>\n `${genColor(options)}\n .label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span {\n color: ${options.titleColor};\n }\n\n\n\n .label text,span {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n /* From the theme, as every other diagram does. Pinned at 1px here, so block drew a\n thinner border than an identical flowchart node under any theme asking for more --\n the neo theme asks for 2. Nothing downstream corrected it: the neo rules set stroke\n and filter, never stroke-width. */\n stroke-width: ${options.strokeWidth ?? 1}px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePaths .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n /*\n * This is for backward compatibility with existing code that didn't\n * add a \\`<p>\\` around edge labels.\n *\n * TODO: We should probably remove this in a future release.\n */\n p {\n margin: 0;\n padding: 0;\n display: inline;\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${options.edgeLabelBackground};\n }\n\n .node .cluster {\n // fill: ${fade(options.mainBkg, 0.5)};\n fill: ${fade(options.clusterBkg, 0.5)};\n stroke: ${fade(options.clusterBorder, 0.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n ${getIconStyles()}\n`;\n\nexport default getStyles;\n", "import type { BlockDB } from './blockDB.js';\nimport type { Block } from './blockTypes.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\n\ninterface BlockPosition {\n px: number;\n py: number;\n}\n\nexport function calculateBlockPosition(columns: number, position: number): BlockPosition {\n // log.debug('calculateBlockPosition abc89', columns, position);\n // Ensure that columns is a positive integer\n if (columns === 0 || !Number.isInteger(columns)) {\n throw new Error('Columns must be an integer !== 0.');\n }\n\n // Ensure that position is a non-negative integer\n if (position < 0 || !Number.isInteger(position)) {\n throw new Error('Position must be a non-negative integer.' + position);\n }\n\n if (columns < 0) {\n // Auto columns is set\n return { px: position, py: 0 };\n }\n if (columns === 1) {\n // Auto columns is set\n return { px: 0, py: position };\n }\n // Calculate posX and posY\n const px = position % columns;\n const py = Math.floor(position / columns);\n // log.debug('calculateBlockPosition abc89', columns, position, '=> (', px, py, ')');\n return { px, py };\n}\n\nconst getMaxChildSize = (block: Block) => {\n let maxWidth = 0;\n let maxHeight = 0;\n // find max width of children\n // log.debug('getMaxChildSize abc95 (start) parent:', block.id);\n for (const child of block.children) {\n const { width, height, x, y } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };\n log.debug(\n 'getMaxChildSize abc95 child:',\n child.id,\n 'width:',\n width,\n 'height:',\n height,\n 'x:',\n x,\n 'y:',\n y,\n child.type\n );\n if (child.type === 'space') {\n continue;\n }\n const normalizedWidth = width / (child.widthInColumns ?? 1);\n if (normalizedWidth > maxWidth) {\n maxWidth = normalizedWidth;\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return { width: maxWidth, height: maxHeight };\n};\n\nfunction setBlockSizes(\n block: Block,\n db: BlockDB,\n siblingWidth = 0,\n siblingHeight = 0,\n padding = 8\n) {\n log.debug(\n 'setBlockSizes abc95 (start)',\n block.id,\n block?.size?.x,\n 'block width =',\n block?.size,\n 'siblingWidth',\n siblingWidth\n );\n if (!block?.size?.width) {\n block.size = {\n width: siblingWidth,\n height: siblingHeight,\n x: 0,\n y: 0,\n };\n }\n let maxWidth = 0;\n let maxHeight = 0;\n\n if (block.children?.length > 0) {\n for (const child of block.children) {\n setBlockSizes(child, db, 0, 0, padding);\n }\n // find max width of children\n const childSize = getMaxChildSize(block);\n maxWidth = childSize.width;\n maxHeight = childSize.height;\n log.debug('setBlockSizes abc95 maxWidth of', block.id, ':s children is ', maxWidth, maxHeight);\n\n // set width of block to max width of children\n for (const child of block.children) {\n if (child.size) {\n log.debug(\n `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}`\n );\n child.size.width =\n maxWidth * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);\n child.size.height = maxHeight;\n child.size.x = 0;\n child.size.y = 0;\n\n log.debug(\n `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}`\n );\n }\n }\n for (const child of block.children) {\n setBlockSizes(child, db, maxWidth, maxHeight, padding);\n }\n\n const columns = block.columns ?? -1;\n let numItems = 0;\n for (const child of block.children) {\n numItems += child.widthInColumns ?? 1;\n }\n\n // The width and height in number blocks\n let xSize = block.children.length;\n if (columns > 0 && columns < numItems) {\n xSize = columns;\n }\n\n const ySize = Math.ceil(numItems / xSize);\n\n let width = xSize * (maxWidth + padding) + padding;\n let height = ySize * (maxHeight + padding) + padding;\n // If maxWidth\n if (width < siblingWidth) {\n log.debug(\n `Detected to small sibling: abc95 ${block.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width}`\n );\n width = siblingWidth;\n height = siblingHeight;\n const childWidth = (siblingWidth - xSize * padding - padding) / xSize;\n const childHeight = (siblingHeight - ySize * padding - padding) / ySize;\n // cspell:ignore indata\n log.debug('Size indata abc88', block.id, 'childWidth', childWidth, 'maxWidth', maxWidth);\n log.debug('Size indata abc88', block.id, 'childHeight', childHeight, 'maxHeight', maxHeight);\n log.debug('Size indata abc88 xSize', xSize, 'padding', padding);\n\n // set width of block to max width of children\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n child.size.height = childHeight;\n child.size.x = 0;\n child.size.y = 0;\n }\n }\n }\n\n log.debug(\n `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${\n block.children.length\n } width=${Math.max(width, block.size?.width || 0)}`\n );\n if (width < (block?.size?.width || 0)) {\n width = block?.size?.width || 0;\n\n // Grow children to fit\n const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length;\n if (num > 0) {\n const childWidth = (width - num * padding - padding) / num;\n log.debug('abc95 (growing to fit) width', block.id, width, block.size?.width, childWidth);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n }\n }\n }\n }\n block.size = {\n width,\n height,\n x: 0,\n y: 0,\n };\n }\n\n log.debug(\n 'setBlockSizes abc94 (done)',\n block.id,\n block?.size?.x,\n block?.size?.width,\n block?.size?.y,\n block?.size?.height\n );\n}\n\nfunction layoutBlocks(block: Block, db: BlockDB, padding = 8) {\n log.debug(\n `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n const columns = block.columns ?? -1;\n log.debug('layoutBlocks columns abc95', block.id, '=>', columns, block);\n if (\n block.children && // find max width of children\n block.children.length > 0\n ) {\n const width = block?.children[0]?.size?.width ?? 0;\n const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;\n\n log.debug('widthOfChildren 88', widthOfChildren, 'posX');\n\n // Pre-compute per-row max heights so y-positioning accounts for rows of different heights\n const rowHeights = new Map<number, number>();\n {\n let colPos = 0;\n for (const child of block.children) {\n if (!child.size) {\n continue;\n }\n const { py } = calculateBlockPosition(columns, colPos);\n const currentMax = rowHeights.get(py) ?? 0;\n if (child.size.height > currentMax) {\n rowHeights.set(py, child.size.height);\n }\n let filled = child?.widthInColumns ?? 1;\n if (columns > 0) {\n filled = Math.min(filled, columns - (colPos % columns));\n }\n colPos += filled;\n }\n }\n const rowYOffsets = new Map<number, number>();\n {\n let offset = 0;\n const rows = [...rowHeights.keys()].sort((a, b) => a - b);\n for (const row of rows) {\n rowYOffsets.set(row, offset);\n offset += (rowHeights.get(row) ?? 0) + padding;\n }\n }\n\n // let first = true;\n let columnPos = 0;\n log.debug('abc91 block?.size?.x', block.id, block?.size?.x);\n let startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n let rowPos = 0;\n for (const child of block.children) {\n const parent = block;\n\n if (!child.size) {\n continue;\n }\n const { width, height } = child.size;\n const { px, py } = calculateBlockPosition(columns, columnPos);\n if (py != rowPos) {\n rowPos = py;\n startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n log.debug('New row in layout for block', block.id, ' and child ', child.id, rowPos);\n }\n log.debug(\n `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent?.size?.x},${parent?.size?.y}) parent: ${parent.id} width: ${width}${padding}`\n );\n if (parent.size) {\n const halfWidth = width / 2;\n child.size.x = startingPosX + padding + halfWidth;\n\n // cspell:ignore pyid\n log.debug(\n `abc91 layout blocks (calc) px, pyid:${\n child.id\n } startingPos=X${startingPosX} new startingPosX${\n child.size.x\n } ${halfWidth} padding=${padding} width=${width} halfWidth=${halfWidth} => x:${\n child.size.x\n } y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${\n (width * (child?.widthInColumns ?? 1)) / 2\n }`\n );\n\n startingPosX = child.size.x + halfWidth;\n\n const rowYOffset = rowYOffsets.get(py) ?? 0;\n const rowHeight = rowHeights.get(py) ?? height;\n child.size.y =\n parent.size.y - parent.size.height / 2 + rowYOffset + rowHeight / 2 + padding;\n\n log.debug(\n `abc88 layout blocks (calc) px, pyid:${\n child.id\n }startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${\n child.widthInColumns\n }(width * (child?.w || 1)) / 2${(width * (child?.widthInColumns ?? 1)) / 2}`\n );\n }\n if (child.children) {\n layoutBlocks(child, db, padding);\n }\n let columnsFilled = child?.widthInColumns ?? 1;\n if (columns > 0) {\n // Make sure overflowing lines do not affect later lines\n columnsFilled = Math.min(columnsFilled, columns - (columnPos % columns));\n }\n columnPos += columnsFilled;\n log.debug('abc88 columnsPos', child, columnPos);\n }\n }\n log.debug(\n `layout blocks (<==layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n}\n\nfunction findBounds(\n block: Block,\n { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }\n) {\n if (block.size && block.id !== 'root') {\n const { x, y, width, height } = block.size;\n if (x - width / 2 < minX) {\n minX = x - width / 2;\n }\n if (y - height / 2 < minY) {\n minY = y - height / 2;\n }\n if (x + width / 2 > maxX) {\n maxX = x + width / 2;\n }\n if (y + height / 2 > maxY) {\n maxY = y + height / 2;\n }\n }\n if (block.children) {\n for (const child of block.children) {\n ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));\n }\n }\n return { minX, minY, maxX, maxY };\n}\n\nexport function layout(db: BlockDB) {\n const root = db.getBlock('root');\n if (!root) {\n return;\n }\n\n const padding = getConfig()?.block?.padding ?? 8;\n setBlockSizes(root, db, 0, 0, padding);\n layoutBlocks(root, db, padding);\n // Position blocks relative to parents\n // positionBlock(root, root, db);\n log.debug('getBlocks', JSON.stringify(root, null, 2));\n\n const { minX, minY, maxX, maxY } = findBounds(root);\n\n const height = maxY - minY;\n const width = maxX - minX;\n return { x: minX, y: minY, width, height };\n}\n", "import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { getConfig } from '../../config.js';\nimport {\n insertEdge,\n insertEdgeLabel,\n positionEdgeLabel,\n} from '../../rendering-util/rendering-elements/edges.js';\nimport { insertNode, positionNode } from '../../rendering-util/rendering-elements/nodes.js';\nimport { stampColorSlot } from '../common/colorThemeGate.js';\nimport type { D3Selection } from '../../types.js';\nimport type { ShapeID } from '../../rendering-util/rendering-elements/shapes.js';\nimport { getStylesFromArray } from '../../utils.js';\nimport type { BlockDB } from './blockDB.js';\nimport type { Block } from './blockTypes.js';\n\nfunction getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {\n const vertex = block;\n\n let classStr = 'default';\n if ((vertex?.classes?.length || 0) > 0) {\n classStr = (vertex?.classes ?? []).join(' ');\n }\n classStr = classStr + ' flowchart-label';\n const cssCompiledStyles = (vertex?.classes ?? []).flatMap(\n (className) => db.getClasses().get(className)?.styles ?? []\n );\n\n // We create a SVG label, either by delegating to addHtmlLabel or manually\n let radius = 0;\n let shape: ShapeID = 'rect';\n let padding;\n // Set the shape based parameters\n switch (vertex.type) {\n case 'round':\n radius = 5;\n shape = 'rect';\n break;\n case 'composite':\n radius = 0;\n shape = 'composite';\n padding = 0;\n break;\n case 'square':\n shape = 'rect';\n break;\n case 'diamond':\n shape = 'question';\n break;\n case 'hexagon':\n shape = 'hexagon';\n break;\n case 'block_arrow':\n shape = 'block_arrow';\n break;\n case 'odd':\n shape = 'rect_left_inv_arrow';\n break;\n case 'lean_right':\n shape = 'lean_right';\n break;\n case 'lean_left':\n shape = 'lean_left';\n break;\n case 'trapezoid':\n shape = 'trapezoid';\n break;\n case 'inv_trapezoid':\n shape = 'inv_trapezoid';\n break;\n case 'rect_left_inv_arrow':\n shape = 'rect_left_inv_arrow';\n break;\n case 'circle':\n shape = 'circle';\n break;\n case 'ellipse':\n // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976\n shape = 'ellipse';\n break;\n case 'stadium':\n shape = 'stadium';\n break;\n case 'subroutine':\n shape = 'subroutine';\n break;\n case 'cylinder':\n shape = 'cylinder';\n break;\n case 'group':\n shape = 'rect';\n break;\n case 'doublecircle':\n shape = 'doublecircle';\n break;\n default:\n shape = 'rect';\n }\n\n const styles = getStylesFromArray(vertex?.styles ?? []);\n\n // Use vertex id as text in the box if no text is provided by the graph definition\n const vertexText = vertex.label;\n\n const bounds = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };\n const dbDiagramId = db.getDiagramId();\n // Add the node\n const node = {\n labelStyle: styles.labelStyle,\n shape,\n label: vertexText,\n labelText: vertexText,\n rx: radius,\n ry: radius,\n class: classStr,\n cssClasses: classStr,\n cssStyles: vertex?.styles ?? [],\n cssCompiledStyles,\n style: styles.style,\n id: vertex.id,\n domId: dbDiagramId ? `${dbDiagramId}-${vertex.id}` : vertex.id,\n isGroup: false as const,\n directions: vertex.directions,\n width: bounds.width || undefined,\n height: bounds.height || undefined,\n wrappingWidth: bounds.width || Number.POSITIVE_INFINITY,\n x: bounds.x,\n y: bounds.y,\n positioned,\n intersect: undefined,\n padding: padding ?? getConfig()?.block?.padding ?? 0,\n widthInColumns: vertex.widthInColumns ?? 1,\n colorIndex: vertex.colorIndex,\n look: getConfig().look,\n };\n return node;\n}\nasync function calculateBlockSize(\n elem: d3.Selection<SVGGElement, unknown, HTMLElement, any>,\n block: any,\n db: any\n) {\n const node = getNodeFromBlock(block, db, false);\n if (block.type === 'group') {\n return;\n }\n\n // Add the element to the DOM to size it\n const config = getConfig();\n const nodeEl = await insertNode(elem, node, { config });\n const boundingBox = nodeEl.node()?.getBBox() ?? { width: 0, height: 0 };\n const obj = db.getBlock(node.id);\n obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl };\n db.setBlock(obj);\n nodeEl.remove();\n}\ntype ActionFun = typeof calculateBlockSize;\n\nexport async function insertBlockPositioned(elem: any, block: Block, db: any) {\n const node = getNodeFromBlock(block, db, true);\n // Add the element to the DOM to size it\n const obj = db.getBlock(node.id);\n if (obj.type !== 'space') {\n const config = getConfig();\n const el = await insertNode(elem, node, { config });\n /* Only where a slot was actually assigned -- composites. `stampColorSlot` falls back\n to `colorIndex ?? 0`, so calling it unconditionally would stamp every plain block\n with slot 0 and paint the whole diagram one colour. `squareRect.ts` guards the same\n way for the same reason.\n\n Stamped here rather than inside the shapes because `composite.ts` does not stamp\n for itself, and doing it in the block renderer keeps the change inside the block\n diagram: no other diagram routes through this call. */\n if (node.colorIndex !== undefined) {\n stampColorSlot(\n // `insertNode` returns an anchor instead of a group when the node carries a\n // link, and both are `SVGGraphicsElement`s -- but the union of the two selections\n // is not assignable to one instantiation of the generic, so it is narrowed here.\n el as D3Selection<SVGGraphicsElement>,\n node.colorIndex,\n config.theme,\n config.themeVariables?.borderColorArray\n );\n }\n block.intersect = node?.intersect;\n positionNode(node);\n }\n}\n\nexport async function performOperations(\n elem: d3.Selection<SVGGElement, unknown, HTMLElement, any>,\n blocks: Block[],\n db: BlockDB,\n operation: ActionFun\n) {\n for (const block of blocks) {\n await operation(elem, block, db);\n if (block.children) {\n await performOperations(elem, block.children, db, operation);\n }\n }\n}\n\nexport async function calculateBlockSizes(elem: any, blocks: Block[], db: BlockDB) {\n await performOperations(elem, blocks, db, calculateBlockSize);\n}\n\nexport async function insertBlocks(\n elem: d3.Selection<SVGGElement, unknown, HTMLElement, any>,\n blocks: Block[],\n db: BlockDB\n) {\n await performOperations(elem, blocks, db, insertBlockPositioned);\n}\n\nexport async function insertEdges(\n elem: any,\n edges: Block[],\n blocks: Block[],\n db: BlockDB,\n id: string\n) {\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true,\n });\n g.setGraph({\n rankdir: 'TB',\n nodesep: 10,\n ranksep: 10,\n marginx: 8,\n marginy: 8,\n });\n\n for (const block of blocks) {\n if (block.size) {\n g.setNode(block.id, {\n width: block.size.width,\n height: block.size.height,\n intersect: block.intersect,\n });\n }\n }\n\n for (const edge of edges) {\n // elem, e, edge, clusterDb, diagramType, graph;\n if (edge.start && edge.end) {\n const startBlock = db.getBlock(edge.start);\n const endBlock = db.getBlock(edge.end);\n\n if (startBlock?.size && endBlock?.size) {\n const start = startBlock.size;\n const end = endBlock.size;\n const points = [\n { x: start.x, y: start.y },\n { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 },\n { x: end.x, y: end.y },\n ];\n const prefixedEdgeId = id ? `${id}-${edge.id}` : edge.id;\n\n const thicknessClass =\n edge.thickness === 'thick' ? 'edge-thickness-thick' : 'edge-thickness-normal';\n const patternClass =\n edge.pattern === 'dotted' ? 'edge-pattern-dotted' : 'edge-pattern-solid';\n const dynamicClasses = `${thicknessClass} ${patternClass} flowchart-link LS-a1 LE-b1`;\n\n insertEdge(\n elem,\n {\n ...edge,\n id: prefixedEdgeId,\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: dynamicClasses,\n },\n {},\n 'block',\n g.node(edge.start),\n g.node(edge.end),\n id\n );\n if (edge.label) {\n await insertEdgeLabel(elem, {\n ...edge,\n label: edge.label,\n labelStyle: 'stroke: #333; stroke-width: 1.5px;fill:none;',\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: dynamicClasses,\n });\n positionEdgeLabel(\n { ...edge, x: points[1].x, y: points[1].y },\n {\n originalPath: points,\n }\n );\n }\n }\n }\n }\n}\n", "import { select as d3select } from 'd3';\nimport type { Diagram } from '../../Diagram.js';\nimport * as configApi from '../../config.js';\nimport { log } from '../../logger.js';\nimport insertMarkers from '../../rendering-util/rendering-elements/markers.js';\nimport { insertLookDefs } from '../../rendering-util/insertLookDefs.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { BlockDB } from './blockDB.js';\nimport { layout } from './layout.js';\nimport { calculateBlockSizes, insertBlocks, insertEdges } from './renderHelpers.js';\n\nexport const getClasses = function (text: any, diagObj: any) {\n return diagObj.db.getClasses();\n};\n\nexport const draw = async function (\n text: string,\n id: string,\n _version: string,\n diagObj: Diagram\n): Promise<void> {\n const { securityLevel, block: conf } = configApi.getConfig();\n const db = diagObj.db as BlockDB;\n db.setDiagramId(id);\n let sandboxElement: any;\n if (securityLevel === 'sandbox') {\n sandboxElement = d3select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? d3select<HTMLBodyElement, unknown>(sandboxElement.nodes()[0].contentDocument.body)\n : d3select<HTMLBodyElement, unknown>('body');\n\n const svg =\n securityLevel === 'sandbox'\n ? root.select<SVGSVGElement>(`[id=\"${id}\"]`)\n : d3select<SVGSVGElement, unknown>(`[id=\"${id}\"]`);\n\n // The look-specific stylesheet rules reference these by id. Block runs its own render\n // loop rather than `rendering-util/render.ts`, so it has to ask for them: without them a\n // `look: neo` block resolves `stroke: url(#\u2026-gradient)` to nothing and loses its borders.\n insertLookDefs(svg, configApi.getConfig());\n\n // Define the supported markers for the diagram\n const markers = ['point', 'circle', 'cross'];\n\n // Add the marker definitions to the svg as marker tags\n insertMarkers(svg, markers, diagObj.type, id);\n\n const bl = db.getBlocks();\n const blArr = db.getBlocksFlat();\n const edges = db.getEdges();\n\n const nodes = svg.insert('g').attr('class', 'block');\n await calculateBlockSizes(nodes, bl, db);\n const bounds = layout(db);\n await insertBlocks(nodes, bl, db);\n await insertEdges(nodes, edges, blArr, db, id);\n\n // Establish svg dimensions and get width and height\n // Why, oh why ????\n const renderedBounds = nodes.node()?.getBBox();\n const bounds2 =\n renderedBounds &&\n Number.isFinite(renderedBounds.width) &&\n Number.isFinite(renderedBounds.height)\n ? renderedBounds\n : bounds;\n if (bounds2) {\n const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));\n const height = bounds2.height + magicFactor + 10;\n const width = bounds2.width + 10;\n const { useMaxWidth } = conf!;\n configureSvgSize(svg, height, width, !!useMaxWidth);\n log.debug('Here Bounds', bounds, bounds2);\n svg.attr(\n 'viewBox',\n `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`\n );\n }\n};\n\nexport default {\n draw,\n getClasses,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: jison doesn't export types\nimport parser from './parser/block.jison';\nimport db from './blockDB.js';\nimport flowStyles from './styles.js';\nimport renderer from './blockRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles: flowStyles,\n};\n"],
"mappings": "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",
"names": ["parser", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "num", "spaceId", "edgeData", "startEdgeData", "lineThickness", "linePattern", "id2", "id", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "block_default", "parser", "blockDatabase", "edgeList", "edgeCount", "COLOR_KEYWORD", "FILL_KEYWORD", "BG_FILL", "STYLECLASS_SEP", "classes", "diagramId", "sanitizeText", "__name", "txt", "common_default", "getConfig", "addStyleClass", "id", "styleAttributes", "foundClass", "attrib", "fixedAttrib", "newStyle2", "addStyle2Node", "styles", "foundBlock", "setCssClass", "itemIds", "cssClassName", "trimmedId", "nextColorIndex", "populateBlockDatabase", "_blockList", "parent", "blockList", "children", "column", "b", "block", "log", "count", "existingBlock", "w", "j", "newBlock", "clone", "blocks", "rootBlock", "clear", "typeStr2Type", "typeStr", "edgeTypeStr2Type", "edgeStrToEdgeData", "edgeStrToEdgeStartData", "edgeStrToThickness", "edgeStrToPattern", "cnt", "generateId", "setHierarchy", "getColumns", "blockId", "getBlocksFlat", "getBlocks", "getEdges", "getBlock", "setBlock", "setDiagramId", "getDiagramId", "getLogger", "getClasses", "db", "blockDB_default", "genColor", "__name", "options", "theme", "bkgColorArray", "borderColorArray", "isColorTheme", "look", "safeLook", "hasBkgColors", "hasPalette", "sections", "i", "colorSlotCount", "borderColor", "fill", "slot", "fade", "color", "opacity", "channel", "channel_default", "r", "b", "rgba_default", "getStyles", "getIconStyles", "styles_default", "calculateBlockPosition", "columns", "position", "px", "py", "__name", "getMaxChildSize", "block", "maxWidth", "maxHeight", "child", "width", "height", "x", "y", "log", "normalizedWidth", "setBlockSizes", "db", "siblingWidth", "siblingHeight", "padding", "childSize", "numItems", "xSize", "ySize", "childWidth", "childHeight", "num", "layoutBlocks", "widthOfChildren", "rowHeights", "colPos", "currentMax", "filled", "rowYOffsets", "offset", "rows", "a", "b", "row", "columnPos", "startingPosX", "rowPos", "parent", "halfWidth", "rowYOffset", "rowHeight", "columnsFilled", "findBounds", "minX", "minY", "maxX", "maxY", "layout", "root", "getConfig", "getNodeFromBlock", "block", "db", "positioned", "vertex", "classStr", "cssCompiledStyles", "className", "radius", "shape", "padding", "styles", "getStylesFromArray", "vertexText", "bounds", "dbDiagramId", "getConfig", "__name", "calculateBlockSize", "elem", "node", "config", "nodeEl", "insertNode", "boundingBox", "obj", "insertBlockPositioned", "el", "stampColorSlot", "positionNode", "performOperations", "blocks", "operation", "calculateBlockSizes", "insertBlocks", "insertEdges", "edges", "id", "g", "Graph", "edge", "startBlock", "endBlock", "start", "end", "points", "prefixedEdgeId", "thicknessClass", "patternClass", "dynamicClasses", "insertEdge", "insertEdgeLabel", "positionEdgeLabel", "getClasses", "__name", "text", "diagObj", "draw", "id", "_version", "securityLevel", "conf", "getConfig", "db", "sandboxElement", "select_default", "root", "svg", "insertLookDefs", "markers_default", "bl", "blArr", "edges", "nodes", "calculateBlockSizes", "bounds", "layout", "insertBlocks", "insertEdges", "renderedBounds", "bounds2", "magicFactor", "height", "width", "useMaxWidth", "configureSvgSize", "log", "blockRenderer_default", "diagram", "block_default", "blockDB_default", "blockRenderer_default", "styles_default"]
}