{
  "version": 3,
  "sources": ["../../../src/diagrams/git/parser/gitGraph.jison", "../../../src/diagrams/git/gitGraphAst.js", "../../../src/diagrams/git/gitGraphRenderer.js", "../../../src/diagrams/git/styles.js", "../../../src/diagrams/git/gitGraphDiagram.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,3],$V1=[1,6],$V2=[1,4],$V3=[1,5],$V4=[2,5],$V5=[1,12],$V6=[5,7,13,19,21,23,24,26,28,31,37,40,47],$V7=[7,13,19,21,23,24,26,28,31,37,40],$V8=[7,12,13,19,21,23,24,26,28,31,37,40],$V9=[7,13,47],$Va=[1,42],$Vb=[1,41],$Vc=[7,13,29,32,35,38,47],$Vd=[1,55],$Ve=[1,56],$Vf=[1,57],$Vg=[7,13,32,35,42,47];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"eol\":4,\"GG\":5,\"document\":6,\"EOF\":7,\":\":8,\"DIR\":9,\"options\":10,\"body\":11,\"OPT\":12,\"NL\":13,\"line\":14,\"statement\":15,\"commitStatement\":16,\"mergeStatement\":17,\"cherryPickStatement\":18,\"acc_title\":19,\"acc_title_value\":20,\"acc_descr\":21,\"acc_descr_value\":22,\"acc_descr_multiline_value\":23,\"section\":24,\"branchStatement\":25,\"CHECKOUT\":26,\"ref\":27,\"BRANCH\":28,\"ORDER\":29,\"NUM\":30,\"CHERRY_PICK\":31,\"COMMIT_ID\":32,\"STR\":33,\"PARENT_COMMIT\":34,\"COMMIT_TAG\":35,\"EMPTYSTR\":36,\"MERGE\":37,\"COMMIT_TYPE\":38,\"commitType\":39,\"COMMIT\":40,\"commit_arg\":41,\"COMMIT_MSG\":42,\"NORMAL\":43,\"REVERSE\":44,\"HIGHLIGHT\":45,\"ID\":46,\";\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"GG\",7:\"EOF\",8:\":\",9:\"DIR\",12:\"OPT\",13:\"NL\",19:\"acc_title\",20:\"acc_title_value\",21:\"acc_descr\",22:\"acc_descr_value\",23:\"acc_descr_multiline_value\",24:\"section\",26:\"CHECKOUT\",28:\"BRANCH\",29:\"ORDER\",30:\"NUM\",31:\"CHERRY_PICK\",32:\"COMMIT_ID\",33:\"STR\",34:\"PARENT_COMMIT\",35:\"COMMIT_TAG\",36:\"EMPTYSTR\",37:\"MERGE\",38:\"COMMIT_TYPE\",40:\"COMMIT\",42:\"COMMIT_MSG\",43:\"NORMAL\",44:\"REVERSE\",45:\"HIGHLIGHT\",46:\"ID\",47:\";\"},\nproductions_: [0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n return $$[$0]; \nbreak;\ncase 3:\n return $$[$0-1]; \nbreak;\ncase 4:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 6:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 7:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 9:\nthis.$ = []\nbreak;\ncase 10:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 11:\nthis.$ =$$[$0-1]\nbreak;\ncase 16:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 17: case 18:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 19:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 21:\nyy.checkout($$[$0])\nbreak;\ncase 22:\nyy.branch($$[$0])\nbreak;\ncase 23:\nyy.branch($$[$0-2], $$[$0])\nbreak;\ncase 24:\nyy.cherryPick($$[$0], '', undefined)\nbreak;\ncase 25:\nyy.cherryPick($$[$0-2], '', undefined,$$[$0])\nbreak;\ncase 26:\nyy.cherryPick($$[$0-2], '', $$[$0])\nbreak;\ncase 27:\nyy.cherryPick($$[$0-4], '', $$[$0],$$[$0-2])\nbreak;\ncase 28:\nyy.cherryPick($$[$0-4], '', $$[$0-2],$$[$0])\nbreak;\ncase 29:\nyy.cherryPick($$[$0], '', $$[$0-2])\nbreak;\ncase 30:\nyy.cherryPick($$[$0], '', '')\nbreak;\ncase 31:\nyy.cherryPick($$[$0-2], '', '')\nbreak;\ncase 32:\nyy.cherryPick($$[$0-4], '', '',$$[$0-2])\nbreak;\ncase 33:\nyy.cherryPick($$[$0-4], '', '',$$[$0])\nbreak;\ncase 34:\nyy.cherryPick($$[$0-2], '', $$[$0-4],$$[$0])\nbreak;\ncase 35:\nyy.cherryPick($$[$0-2], '', '',$$[$0])\nbreak;\ncase 36:\nyy.merge($$[$0],'','','')\nbreak;\ncase 37:\nyy.merge($$[$0-2], $$[$0],'','')\nbreak;\ncase 38:\nyy.merge($$[$0-2],'', $$[$0],'')\nbreak;\ncase 39:\nyy.merge($$[$0-2], '','',$$[$0])\nbreak;\ncase 40:\nyy.merge($$[$0-4], $$[$0],'', $$[$0-2])\nbreak;\ncase 41:\nyy.merge($$[$0-4], '',$$[$0], $$[$0-2])\nbreak;\ncase 42:\nyy.merge($$[$0-4], '',$$[$0-2], $$[$0])\nbreak;\ncase 43:\nyy.merge($$[$0-4], $$[$0-2], $$[$0], '')\nbreak;\ncase 44:\nyy.merge($$[$0-4], $$[$0-2], '', $$[$0])\nbreak;\ncase 45:\nyy.merge($$[$0-4], $$[$0],$$[$0-2], '')\nbreak;\ncase 46:\nyy.merge($$[$0-6], $$[$0-4], $$[$0-2], $$[$0])\nbreak;\ncase 47:\nyy.merge($$[$0-6], $$[$0], $$[$0-4], $$[$0-2])\nbreak;\ncase 48:\nyy.merge($$[$0-6], $$[$0-4], $$[$0], $$[$0-2])\nbreak;\ncase 49:\nyy.merge($$[$0-6], $$[$0-2], $$[$0-4], $$[$0])\nbreak;\ncase 50:\nyy.merge($$[$0-6], $$[$0], $$[$0-2], $$[$0-4])\nbreak;\ncase 51:\nyy.merge($$[$0-6], $$[$0-2], $$[$0], $$[$0-4])\nbreak;\ncase 52:\nyy.commit($$[$0])\nbreak;\ncase 53:\nyy.commit('','',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 54:\nyy.commit('','',$$[$0],'')\nbreak;\ncase 55:\nyy.commit('','',$$[$0],$$[$0-2])\nbreak;\ncase 56:\nyy.commit('','',$$[$0-2],$$[$0])\nbreak;\ncase 57:\nyy.commit('',$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 58:\nyy.commit('',$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 59:\nyy.commit('',$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 60:\nyy.commit('',$$[$0-2],$$[$0],'')\nbreak;\ncase 61:\nyy.commit('',$$[$0],$$[$0-2],'')\nbreak;\ncase 62:\nyy.commit('',$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 63:\nyy.commit('',$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 64:\nyy.commit('',$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 65:\nyy.commit('',$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 66:\nyy.commit('',$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 67:\nyy.commit('',$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 68:\nyy.commit($$[$0],'',yy.commitType.NORMAL,'')\nbreak;\ncase 69:\nyy.commit($$[$0],'',yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 70:\nyy.commit($$[$0-2],'',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 71:\nyy.commit($$[$0-2],'',$$[$0],'')\nbreak;\ncase 72:\nyy.commit($$[$0],'',$$[$0-2],'')\nbreak;\ncase 73:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,'')\nbreak;\ncase 74:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 75:\nyy.commit($$[$0-4],'',$$[$0-2],$$[$0])\nbreak;\ncase 76:\nyy.commit($$[$0-4],'',$$[$0],$$[$0-2])\nbreak;\ncase 77:\nyy.commit($$[$0-2],'',$$[$0-4],$$[$0])\nbreak;\ncase 78:\nyy.commit($$[$0],'',$$[$0-4],$$[$0-2])\nbreak;\ncase 79:\nyy.commit($$[$0],'',$$[$0-2],$$[$0-4])\nbreak;\ncase 80:\nyy.commit($$[$0-2],'',$$[$0],$$[$0-4])\nbreak;\ncase 81:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],'')\nbreak;\ncase 82:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],'')\nbreak;\ncase 83:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],'')\nbreak;\ncase 84:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],'')\nbreak;\ncase 85:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],'')\nbreak;\ncase 86:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],'')\nbreak;\ncase 87:\nyy.commit($$[$0-4],$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 88:\nyy.commit($$[$0-4],$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 89:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 90:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 91:\nyy.commit($$[$0],$$[$0-4],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 92:\nyy.commit($$[$0-2],$$[$0-4],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 93:\nyy.commit($$[$0-6],$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 94:\nyy.commit($$[$0-6],$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 95:\nyy.commit($$[$0-6],$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 96:\nyy.commit($$[$0-6],$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 97:\nyy.commit($$[$0-6],$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 98:\nyy.commit($$[$0-6],$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 99:\nyy.commit($$[$0-4],$$[$0-6],$$[$0-2],$$[$0])\nbreak;\ncase 100:\nyy.commit($$[$0-4],$$[$0-6],$$[$0],$$[$0-2])\nbreak;\ncase 101:\nyy.commit($$[$0-2],$$[$0-6],$$[$0-4],$$[$0])\nbreak;\ncase 102:\nyy.commit($$[$0],$$[$0-6],$$[$0-4],$$[$0-2])\nbreak;\ncase 103:\nyy.commit($$[$0-2],$$[$0-6],$$[$0],$$[$0-4])\nbreak;\ncase 104:\nyy.commit($$[$0],$$[$0-6],$$[$0-2],$$[$0-4])\nbreak;\ncase 105:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],$$[$0-6])\nbreak;\ncase 106:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],$$[$0-6])\nbreak;\ncase 107:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],$$[$0-6])\nbreak;\ncase 108:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],$$[$0-6])\nbreak;\ncase 109:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],$$[$0-6])\nbreak;\ncase 110:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],$$[$0-6])\nbreak;\ncase 111:\nyy.commit($$[$0-2],$$[$0-4],$$[$0-6],$$[$0])\nbreak;\ncase 112:\nyy.commit($$[$0],$$[$0-4],$$[$0-6],$$[$0-2])\nbreak;\ncase 113:\nyy.commit($$[$0-2],$$[$0],$$[$0-6],$$[$0-4])\nbreak;\ncase 114:\nyy.commit($$[$0],$$[$0-2],$$[$0-6],$$[$0-4])\nbreak;\ncase 115:\nyy.commit($$[$0-4],$$[$0-2],$$[$0-6],$$[$0])\nbreak;\ncase 116:\nyy.commit($$[$0-4],$$[$0],$$[$0-6],$$[$0-2])\nbreak;\ncase 117:\nthis.$ = \"\"\nbreak;\ncase 118:\nthis.$=$$[$0]\nbreak;\ncase 119:\n this.$=yy.commitType.NORMAL;\nbreak;\ncase 120:\n this.$=yy.commitType.REVERSE;\nbreak;\ncase 121:\n this.$=yy.commitType.HIGHLIGHT;\nbreak;\n}\n},\ntable: [{3:1,4:2,5:$V0,7:$V1,13:$V2,47:$V3},{1:[3]},{3:7,4:2,5:$V0,7:$V1,13:$V2,47:$V3},{6:8,7:$V4,8:[1,9],9:[1,10],10:11,13:$V5},o($V6,[2,124]),o($V6,[2,125]),o($V6,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:$V4,10:11,13:$V5},{8:[1,15]},o($V7,[2,9],{11:16,12:[1,17]}),o($V8,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:$V4,10:11,13:$V5},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},o($V8,[2,7]),{1:[2,3]},{7:[1,36]},o($V7,[2,10]),{4:37,7:$V1,13:$V2,47:$V3},o($V7,[2,12]),o($V9,[2,13]),o($V9,[2,14]),o($V9,[2,15]),{20:[1,38]},{22:[1,39]},o($V9,[2,18]),o($V9,[2,19]),o($V9,[2,20]),{27:40,33:$Va,46:$Vb},o($V9,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:$Va,46:$Vb},{32:[1,50],35:[1,51]},{27:52,33:$Va,46:$Vb},{1:[2,4]},o($V7,[2,11]),o($V9,[2,16]),o($V9,[2,17]),o($V9,[2,21]),o($Vc,[2,122]),o($Vc,[2,123]),o($V9,[2,52]),{33:[1,53]},{39:54,43:$Vd,44:$Ve,45:$Vf},{33:[1,58]},{33:[1,59]},o($V9,[2,118]),o($V9,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},o($V9,[2,22],{29:[1,66]}),o($V9,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),o($V9,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),o($Vg,[2,119]),o($Vg,[2,120]),o($Vg,[2,121]),o($V9,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),o($V9,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:$Vd,44:$Ve,45:$Vf},{33:[1,81]},o($V9,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:$Vd,44:$Ve,45:$Vf},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:$Vd,44:$Ve,45:$Vf},{33:[1,95]},{33:[1,96]},{39:97,43:$Vd,44:$Ve,45:$Vf},{33:[1,98]},o($V9,[2,37],{35:[1,100],38:[1,99]}),o($V9,[2,38],{32:[1,102],35:[1,101]}),o($V9,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},o($V9,[2,23]),o($V9,[2,55],{32:[1,110],42:[1,111]}),o($V9,[2,59],{38:[1,112],42:[1,113]}),o($V9,[2,69],{32:[1,115],38:[1,114]}),o($V9,[2,56],{32:[1,116],42:[1,117]}),o($V9,[2,61],{35:[1,118],42:[1,119]}),o($V9,[2,72],{32:[1,121],35:[1,120]}),o($V9,[2,58],{38:[1,122],42:[1,123]}),o($V9,[2,60],{35:[1,124],42:[1,125]}),o($V9,[2,73],{35:[1,127],38:[1,126]}),o($V9,[2,70],{32:[1,129],38:[1,128]}),o($V9,[2,71],{32:[1,131],35:[1,130]}),o($V9,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:$Vd,44:$Ve,45:$Vf},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:$Vd,44:$Ve,45:$Vf},o($V9,[2,25],{35:[1,140]}),o($V9,[2,26],{34:[1,141]}),o($V9,[2,31],{34:[1,142]}),o($V9,[2,29],{34:[1,143]}),o($V9,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:$Vd,44:$Ve,45:$Vf},{33:[1,148]},{39:149,43:$Vd,44:$Ve,45:$Vf},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:$Vd,44:$Ve,45:$Vf},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:$Vd,44:$Ve,45:$Vf},{33:[1,162]},{39:163,43:$Vd,44:$Ve,45:$Vf},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:$Vd,44:$Ve,45:$Vf},{33:[1,168]},o($V9,[2,43],{35:[1,169]}),o($V9,[2,44],{38:[1,170]}),o($V9,[2,42],{32:[1,171]}),o($V9,[2,45],{35:[1,172]}),o($V9,[2,40],{38:[1,173]}),o($V9,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},o($V9,[2,66],{42:[1,181]}),o($V9,[2,79],{32:[1,182]}),o($V9,[2,67],{42:[1,183]}),o($V9,[2,90],{38:[1,184]}),o($V9,[2,80],{32:[1,185]}),o($V9,[2,89],{38:[1,186]}),o($V9,[2,65],{42:[1,187]}),o($V9,[2,78],{32:[1,188]}),o($V9,[2,64],{42:[1,189]}),o($V9,[2,84],{35:[1,190]}),o($V9,[2,77],{32:[1,191]}),o($V9,[2,83],{35:[1,192]}),o($V9,[2,63],{42:[1,193]}),o($V9,[2,91],{38:[1,194]}),o($V9,[2,62],{42:[1,195]}),o($V9,[2,85],{35:[1,196]}),o($V9,[2,86],{35:[1,197]}),o($V9,[2,92],{38:[1,198]}),o($V9,[2,76],{32:[1,199]}),o($V9,[2,87],{38:[1,200]}),o($V9,[2,75],{32:[1,201]}),o($V9,[2,81],{35:[1,202]}),o($V9,[2,82],{35:[1,203]}),o($V9,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:$Vd,44:$Ve,45:$Vf},{33:[1,207]},{33:[1,208]},{39:209,43:$Vd,44:$Ve,45:$Vf},{33:[1,210]},o($V9,[2,27]),o($V9,[2,32]),o($V9,[2,28]),o($V9,[2,33]),o($V9,[2,34]),o($V9,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:$Vd,44:$Ve,45:$Vf},{33:[1,215]},{39:216,43:$Vd,44:$Ve,45:$Vf},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:$Vd,44:$Ve,45:$Vf},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:$Vd,44:$Ve,45:$Vf},{33:[1,229]},{39:230,43:$Vd,44:$Ve,45:$Vf},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:$Vd,44:$Ve,45:$Vf},o($V9,[2,46]),o($V9,[2,48]),o($V9,[2,47]),o($V9,[2,49]),o($V9,[2,51]),o($V9,[2,50]),o($V9,[2,107]),o($V9,[2,108]),o($V9,[2,105]),o($V9,[2,106]),o($V9,[2,110]),o($V9,[2,109]),o($V9,[2,114]),o($V9,[2,113]),o($V9,[2,112]),o($V9,[2,111]),o($V9,[2,116]),o($V9,[2,115]),o($V9,[2,104]),o($V9,[2,103]),o($V9,[2,102]),o($V9,[2,101]),o($V9,[2,99]),o($V9,[2,100]),o($V9,[2,98]),o($V9,[2,97]),o($V9,[2,96]),o($V9,[2,95]),o($V9,[2,93]),o($V9,[2,94])],\ndefaultActions: {7:[2,1],13:[2,2],18:[2,3],36:[2,4]},\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/* 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: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin(\"acc_title\");return 19; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 21; \nbreak;\ncase 3: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 4: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 5: this.popState(); \nbreak;\ncase 6:return \"acc_descr_multiline_value\";\nbreak;\ncase 7:/*{console.log('New line');return 13;}*/ return 13;\nbreak;\ncase 8:/* skip comments */\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:return 5;\nbreak;\ncase 11:return 40;\nbreak;\ncase 12:return 32;\nbreak;\ncase 13:return 38;\nbreak;\ncase 14:return 42;\nbreak;\ncase 15:return 43;\nbreak;\ncase 16:return 44;\nbreak;\ncase 17:return 45;\nbreak;\ncase 18:return 35;\nbreak;\ncase 19:return 28;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21:return 37;\nbreak;\ncase 22:return 31;\nbreak;\ncase 23:return 34\nbreak;\ncase 24:return 26;\nbreak;\ncase 25:return 9;\nbreak;\ncase 26:return 9;\nbreak;\ncase 27:return 9;\nbreak;\ncase 28:return 8;\nbreak;\ncase 29:return 'CARET'\nbreak;\ncase 30:this.begin(\"options\"); //\nbreak;\ncase 31:this.popState();       // not used anymore in the renderer, fixed for backward compatibility\nbreak;\ncase 32:return 12;          //\nbreak;\ncase 33:return 36;\nbreak;\ncase 34:this.begin(\"string\");\nbreak;\ncase 35:this.popState();\nbreak;\ncase 36:return 33;\nbreak;\ncase 37:return 30;\nbreak;\ncase 38:return 46; // only a subset of https://git-scm.com/docs/git-check-ref-format\nbreak;\ncase 39:return 7;\nbreak;\ncase 40:/* skip all whitespace */ // lowest priority so we can use lookaheads in earlier regex\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:(\\r?\\n)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit(?=\\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\\b)/i,/^(?:REVERSE\\b)/i,/^(?:HIGHLIGHT\\b)/i,/^(?:tag:)/i,/^(?:branch(?=\\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\\s|$))/i,/^(?:cherry-pick(?=\\s|$))/i,/^(?:parent:)/i,/^(?:\\b(checkout|switch)(?=\\s|$))/i,/^(?:LR\\b)/i,/^(?:TB\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:[ \\r\\n\\t]+end\\b)/i,/^(?:[\\s\\S]+(?=[ \\r\\n\\t]+end))/i,/^(?:[\"][\"])/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[0-9]+(?=\\s|$))/i,/^(?:\\w([-\\./\\w]*[-\\w])?)/i,/^(?:$)/i,/^(?:\\s+)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[5,6],\"inclusive\":false},\"acc_descr\":{\"rules\":[3],\"inclusive\":false},\"acc_title\":{\"rules\":[1],\"inclusive\":false},\"options\":{\"rules\":[31,32],\"inclusive\":false},\"string\":{\"rules\":[35,36],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,34,37,38,39,40],\"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 { log } from '../../logger.js';\nimport { random } from '../../utils.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common from '../common/common.js';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../common/commonDb.js';\n\nlet mainBranchName = getConfig().gitGraph.mainBranchName;\nlet mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\nlet commits = new Map();\nlet head = null;\nlet branchesConfig = new Map();\nbranchesConfig.set(mainBranchName, { name: mainBranchName, order: mainBranchOrder });\nlet branches = new Map();\nbranches.set(mainBranchName, head);\nlet curBranch = mainBranchName;\nlet direction = 'LR';\nlet seq = 0;\n\n/**\n *\n */\nfunction getId() {\n  return random({ length: 7 });\n}\n\n// /**\n//  * @param currentCommit\n//  * @param otherCommit\n//  */\n// eslint-disable-next-line @cspell/spellchecker\n// function isFastForwardable(currentCommit, otherCommit) {\n//   log.debug('Entering isFastForwardable:', currentCommit.id, otherCommit.id);\n//   let cnt = 0;\n//   while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit && cnt < 1000) {\n//     cnt++;\n//     // only if other branch has more commits\n//     if (otherCommit.parent == null) break;\n//     if (Array.isArray(otherCommit.parent)) {\n//       log.debug('In merge commit:', otherCommit.parent);\n//       return (\n//         isFastForwardable(currentCommit, commits.get(otherCommit.parent[0])) ||\n//         isFastForwardable(currentCommit, commits.get(otherCommit.parent[1]))\n//       );\n//     } else {\n//       otherCommit = commits.get(otherCommit.parent);\n//     }\n//   }\n//   log.debug(currentCommit.id, otherCommit.id);\n//   return currentCommit.id === otherCommit.id;\n// }\n\n/**\n * @param currentCommit\n * @param otherCommit\n */\n// function isReachableFrom(currentCommit, otherCommit) {\n//   const currentSeq = currentCommit.seq;\n//   const otherSeq = otherCommit.seq;\n//   if (currentSeq > otherSeq) return isFastForwardable(otherCommit, currentCommit);\n//   return false;\n// }\n\n/**\n * @param list\n * @param fn\n */\nfunction uniqBy(list, fn) {\n  const recordMap = Object.create(null);\n  return list.reduce((out, item) => {\n    const key = fn(item);\n    if (!recordMap[key]) {\n      recordMap[key] = true;\n      out.push(item);\n    }\n    return out;\n  }, []);\n}\n\nexport const setDirection = function (dir) {\n  direction = dir;\n};\nlet options = {};\nexport const setOptions = function (rawOptString) {\n  log.debug('options str', rawOptString);\n  rawOptString = rawOptString && rawOptString.trim();\n  rawOptString = rawOptString || '{}';\n  try {\n    options = JSON.parse(rawOptString);\n  } catch (e) {\n    log.error('error while parsing gitGraph options', e.message);\n  }\n};\n\nexport const getOptions = function () {\n  return options;\n};\n\nexport const commit = function (msg, id, type, tag) {\n  log.debug('Entering commit:', msg, id, type, tag);\n  id = common.sanitizeText(id, getConfig());\n  msg = common.sanitizeText(msg, getConfig());\n  tag = common.sanitizeText(tag, getConfig());\n  const commit = {\n    id: id ? id : seq + '-' + getId(),\n    message: msg,\n    seq: seq++,\n    type: type ? type : commitType.NORMAL,\n    tag: tag ? tag : '',\n    parents: head == null ? [] : [head.id],\n    branch: curBranch,\n  };\n  head = commit;\n  commits.set(commit.id, commit);\n  branches.set(curBranch, commit.id);\n  log.debug('in pushCommit ' + commit.id);\n};\n\nexport const branch = function (name, order) {\n  name = common.sanitizeText(name, getConfig());\n  if (!branches.has(name)) {\n    branches.set(name, head != null ? head.id : null);\n    branchesConfig.set(name, { name, order: order ? parseInt(order, 10) : null });\n    checkout(name);\n    log.debug('in createBranch');\n  } else {\n    let error = new Error(\n      'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ' +\n        name +\n        '\")'\n    );\n    error.hash = {\n      text: 'branch ' + name,\n      token: 'branch ' + name,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"checkout ' + name + '\"'],\n    };\n    throw error;\n  }\n};\n\nexport const merge = function (otherBranch, custom_id, override_type, custom_tag) {\n  otherBranch = common.sanitizeText(otherBranch, getConfig());\n  custom_id = common.sanitizeText(custom_id, getConfig());\n\n  const currentCommit = commits.get(branches.get(curBranch));\n  const otherCommit = commits.get(branches.get(otherBranch));\n  if (curBranch === otherBranch) {\n    let error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  } else if (currentCommit === undefined || !currentCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Current branch (' + curBranch + ')has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['commit'],\n    };\n    throw error;\n  } else if (!branches.has(otherBranch)) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') does not exist'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch ' + otherBranch],\n    };\n    throw error;\n  } else if (otherCommit === undefined || !otherCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"commit\"'],\n    };\n    throw error;\n  } else if (currentCommit === otherCommit) {\n    let error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  } else if (custom_id && commits.has(custom_id)) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Commit with id:' +\n        custom_id +\n        ' already exists, use different custom Id'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch + custom_id + override_type + custom_tag,\n      token: 'merge ' + otherBranch + custom_id + override_type + custom_tag,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: [\n        'merge ' + otherBranch + ' ' + custom_id + '_UNIQUE ' + override_type + ' ' + custom_tag,\n      ],\n    };\n\n    throw error;\n  }\n  // if (isReachableFrom(currentCommit, otherCommit)) {\n  //   log.debug('Already merged');\n  //   return;\n  // }\n  // if (isFastForwardable(currentCommit, otherCommit)) {\n  //   branches.set(curBranch, branches.get(otherBranch));\n  //   head = commits.get(branches.get(curBranch));\n  // } else {\n  // create merge commit\n  const commit = {\n    id: custom_id ? custom_id : seq + '-' + getId(),\n    message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n    seq: seq++,\n    parents: [head == null ? null : head.id, branches.get(otherBranch)],\n    branch: curBranch,\n    type: commitType.MERGE,\n    customType: override_type,\n    customId: custom_id ? true : false,\n    tag: custom_tag ? custom_tag : '',\n  };\n  head = commit;\n  commits.set(commit.id, commit);\n  branches.set(curBranch, commit.id);\n  // }\n  log.debug(branches);\n  log.debug('in mergeBranch');\n};\n\nexport const cherryPick = function (sourceId, targetId, tag, parentCommitId) {\n  log.debug('Entering cherryPick:', sourceId, targetId, tag);\n  sourceId = common.sanitizeText(sourceId, getConfig());\n  targetId = common.sanitizeText(targetId, getConfig());\n  tag = common.sanitizeText(tag, getConfig());\n  parentCommitId = common.sanitizeText(parentCommitId, getConfig());\n\n  if (!sourceId || !commits.has(sourceId)) {\n    let error = new Error(\n      'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n    );\n    error.hash = {\n      text: 'cherryPick ' + sourceId + ' ' + targetId,\n      token: 'cherryPick ' + sourceId + ' ' + targetId,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['cherry-pick abc'],\n    };\n    throw error;\n  }\n  let sourceCommit = commits.get(sourceId);\n  let sourceCommitBranch = sourceCommit.branch;\n  if (\n    parentCommitId &&\n    !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))\n  ) {\n    let error = new Error(\n      'Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.'\n    );\n    throw error;\n  }\n  if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n    let error = new Error(\n      'Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.'\n    );\n    throw error;\n  }\n  if (!targetId || !commits.has(targetId)) {\n    // cherry-pick source commit to current branch\n\n    if (sourceCommitBranch === curBranch) {\n      let error = new Error(\n        'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const currentCommit = commits.get(branches.get(curBranch));\n    if (currentCommit === undefined || !currentCommit) {\n      let error = new Error(\n        'Incorrect usage of \"cherry-pick\". Current branch (' + curBranch + ')has no commits'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const commit = {\n      id: seq + '-' + getId(),\n      message: 'cherry-picked ' + sourceCommit + ' into ' + curBranch,\n      seq: seq++,\n      parents: [head == null ? null : head.id, sourceCommit.id],\n      branch: curBranch,\n      type: commitType.CHERRY_PICK,\n      tag:\n        tag ??\n        `cherry-pick:${sourceCommit.id}${\n          sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : ''\n        }`,\n    };\n    head = commit;\n    commits.set(commit.id, commit);\n    branches.set(curBranch, commit.id);\n    log.debug(branches);\n    log.debug('in cherryPick');\n  }\n};\nexport const checkout = function (branch) {\n  branch = common.sanitizeText(branch, getConfig());\n  if (!branches.has(branch)) {\n    let error = new Error(\n      'Trying to checkout branch which is not yet created. (Help try using \"branch ' + branch + '\")'\n    );\n    error.hash = {\n      text: 'checkout ' + branch,\n      token: 'checkout ' + branch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"branch ' + branch + '\"'],\n    };\n    throw error;\n    //branches[branch] = head != null ? head.id : null;\n    //log.debug('in createBranch');\n  } else {\n    curBranch = branch;\n    const id = branches.get(curBranch);\n    head = commits.get(id);\n  }\n};\n\n// export const reset = function (commitRef) {\n//   log.debug('in reset', commitRef);\n//   const ref = commitRef.split(':')[0];\n//   let parentCount = parseInt(commitRef.split(':')[1]);\n//   let commit = ref === 'HEAD' ? head : commits.get(branches.get(ref));\n//   log.debug(commit, parentCount);\n//   while (parentCount > 0) {\n//     commit = commits.get(commit.parent);\n//     parentCount--;\n//     if (!commit) {\n//       const err = 'Critical error - unique parent commit not found during reset';\n//       log.error(err);\n//       throw err;\n//     }\n//   }\n//   head = commit;\n//   branches[curBranch] = commit.id;\n// };\n\n/**\n * @param arr\n * @param key\n * @param newVal\n */\nfunction upsert(arr, key, newVal) {\n  const index = arr.indexOf(key);\n  if (index === -1) {\n    arr.push(newVal);\n  } else {\n    arr.splice(index, 1, newVal);\n  }\n}\n\n/** @param commitArr */\nfunction prettyPrintCommitHistory(commitArr) {\n  const commit = commitArr.reduce((out, commit) => {\n    if (out.seq > commit.seq) {\n      return out;\n    }\n    return commit;\n  }, commitArr[0]);\n  let line = '';\n  commitArr.forEach(function (c) {\n    if (c === commit) {\n      line += '\\t*';\n    } else {\n      line += '\\t|';\n    }\n  });\n  const label = [line, commit.id, commit.seq];\n  for (let branch in branches) {\n    if (branches.get(branch) === commit.id) {\n      label.push(branch);\n    }\n  }\n  log.debug(label.join(' '));\n  if (commit.parents && commit.parents.length == 2) {\n    const newCommit = commits.get(commit.parents[0]);\n    upsert(commitArr, commit, newCommit);\n    commitArr.push(commits.get(commit.parents[1]));\n  } else if (commit.parents.length == 0) {\n    return;\n  } else {\n    const nextCommit = commits.get(commit.parents);\n    upsert(commitArr, commit, nextCommit);\n  }\n  commitArr = uniqBy(commitArr, (c) => c.id);\n  prettyPrintCommitHistory(commitArr);\n}\n\nexport const prettyPrint = function () {\n  log.debug(commits);\n  const node = getCommitsArray()[0];\n  prettyPrintCommitHistory([node]);\n};\n\nexport const clear = function () {\n  commits = new Map();\n  head = null;\n  let mainBranch = getConfig().gitGraph.mainBranchName;\n  let mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\n  branches = new Map();\n  branches.set(mainBranch, null);\n  branchesConfig = new Map();\n  branchesConfig.set(mainBranch, { name: mainBranch, order: mainBranchOrder });\n  curBranch = mainBranch;\n  seq = 0;\n  commonClear();\n};\n\nexport const getBranchesAsObjArray = function () {\n  const branchesArray = [...branchesConfig.values()]\n    .map((branchConfig, i) => {\n      if (branchConfig.order !== null) {\n        return branchConfig;\n      }\n      return {\n        ...branchConfig,\n        order: parseFloat(`0.${i}`, 10),\n      };\n    })\n    .sort((a, b) => a.order - b.order)\n    .map(({ name }) => ({ name }));\n\n  return branchesArray;\n};\n\nexport const getBranches = function () {\n  return branches;\n};\nexport const getCommits = function () {\n  return commits;\n};\nexport const getCommitsArray = function () {\n  const commitArr = [...commits.values()];\n  commitArr.forEach(function (o) {\n    log.debug(o.id);\n  });\n  commitArr.sort((a, b) => a.seq - b.seq);\n  return commitArr;\n};\nexport const getCurrentBranch = function () {\n  return curBranch;\n};\nexport const getDirection = function () {\n  return direction;\n};\nexport const getHead = function () {\n  return head;\n};\n\nexport const commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nexport default {\n  getConfig: () => getConfig().gitGraph,\n  setDirection,\n  setOptions,\n  getOptions,\n  commit,\n  branch,\n  merge,\n  cherryPick,\n  checkout,\n  //reset,\n  prettyPrint,\n  clear,\n  getBranchesAsObjArray,\n  getBranches,\n  getCommits,\n  getCommitsArray,\n  getCurrentBranch,\n  getDirection,\n  getHead,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n  commitType,\n};\n", "import { select } from 'd3';\nimport { getConfig, setupGraphViewbox } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport utils from '../../utils.js';\n\n/**\n * @typedef {Map<string, { id: string, message: string, seq: number, type: number, tag: string, parents: string[], branch: string }>} CommitMap\n */\n\n/** @type {CommitMap} */\nlet allCommitsDict = new Map();\n\nconst commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nconst THEME_COLOR_LIMIT = 8;\n\nlet branchPos = {};\nlet commitPos = {};\nlet lanes = [];\nlet maxPos = 0;\nlet dir = 'LR';\nlet defaultPos = 30;\nconst clear = () => {\n  branchPos = new Map();\n  commitPos = new Map();\n  allCommitsDict = new Map();\n  maxPos = 0;\n  lanes = [];\n  dir = 'LR';\n};\n\n/**\n * Draws a text, used for labels of the branches\n *\n * @param {string} txt The text\n * @returns {SVGElement}\n */\nconst drawText = (txt) => {\n  const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n  let rows = [];\n\n  // Handling of new lines in the label\n  if (typeof txt === 'string') {\n    rows = txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi);\n  } else if (Array.isArray(txt)) {\n    rows = txt;\n  } else {\n    rows = [];\n  }\n\n  for (const row of rows) {\n    const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n    tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n    tspan.setAttribute('dy', '1em');\n    tspan.setAttribute('x', '0');\n    tspan.setAttribute('class', 'row');\n    tspan.textContent = row.trim();\n    svgLabel.appendChild(tspan);\n  }\n  /**\n   * @param svg\n   * @param selector\n   */\n  return svgLabel;\n};\n\n/**\n * Searches for the closest parent from the parents list passed as argument.\n * The parents list comes from an individual commit. The closest parent is actually\n * the one farther down the graph, since that means it is closer to its child.\n *\n * @param {string[]} parents\n * @returns {string | undefined}\n */\nconst findClosestParent = (parents) => {\n  let closestParent = '';\n  let maxPosition = 0;\n\n  parents.forEach((parent) => {\n    const parentPosition =\n      dir === 'TB' || dir === 'BT' ? commitPos.get(parent).y : commitPos.get(parent).x;\n    if (parentPosition >= maxPosition) {\n      closestParent = parent;\n      maxPosition = parentPosition;\n    }\n  });\n\n  return closestParent || undefined;\n};\n\n/**\n * Searches for the closest parent from the parents list passed as argument for Bottom-to-Top orientation.\n * The parents list comes from an individual commit. The closest parent is actually\n * the one farther down the graph, since that means it is closer to its child.\n *\n * @param {string[]} parents\n * @returns {string | undefined}\n */\nconst findClosestParentBT = (parents) => {\n  let closestParent = '';\n  let maxPosition = Infinity;\n\n  parents.forEach((parent) => {\n    const parentPosition = commitPos.get(parent).y;\n    if (parentPosition <= maxPosition) {\n      closestParent = parent;\n      maxPosition = parentPosition;\n    }\n  });\n\n  return closestParent || undefined;\n};\n\n/**\n * Sets the position of the commit elements when the orientation is set to BT-Parallel.\n * This is needed to render the chart in Bottom-to-Top mode while keeping the parallel\n * commits in the correct position. First, it finds the correct position of the root commit\n * using the findClosestParent method. Then, it uses the findClosestParentBT to set the position\n * of the remaining commits.\n *\n * @param {any} sortedKeys\n * @param {CommitMap} commits\n * @param {any} defaultPos\n * @param {any} commitStep\n * @param {any} layoutOffset\n */\nconst setParallelBTPos = (sortedKeys, commits, defaultPos, commitStep, layoutOffset) => {\n  let curPos = defaultPos;\n  let maxPosition = defaultPos;\n  let roots = [];\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents.length) {\n      const closestParent = findClosestParent(commit.parents);\n      curPos = commitPos.get(closestParent).y + commitStep;\n      if (curPos >= maxPosition) {\n        maxPosition = curPos;\n      }\n    } else {\n      roots.push(commit);\n    }\n    const x = branchPos.get(commit.branch).pos;\n    const y = curPos + layoutOffset;\n    commitPos.set(commit.id, { x: x, y: y });\n  });\n  curPos = maxPosition;\n  roots.forEach((commit) => {\n    const posWithOffset = curPos + defaultPos;\n    const y = posWithOffset;\n    const x = branchPos.get(commit.branch).pos;\n    commitPos.set(commit.id, { x: x, y: y });\n  });\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents.length) {\n      const closestParent = findClosestParentBT(commit.parents);\n      curPos = commitPos.get(closestParent).y - commitStep;\n      if (curPos <= maxPosition) {\n        maxPosition = curPos;\n      }\n      const x = branchPos.get(commit.branch).pos;\n      const y = curPos - layoutOffset;\n      commitPos.set(commit.id, { x: x, y: y });\n    }\n  });\n};\n\n/**\n * Draws the commits with its symbol and labels. The function has two modes, one which only\n * calculates the positions and one that does the actual drawing. This for a simple way getting the\n * vertical layering correct in the graph.\n *\n * @param {any} svg\n * @param {CommitMap} commits\n * @param {any} modifyGraph\n */\nconst drawCommits = (svg, commits, modifyGraph) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const gBullets = svg.append('g').attr('class', 'commit-bullets');\n  const gLabels = svg.append('g').attr('class', 'commit-labels');\n  let pos = 0;\n\n  if (dir === 'TB' || dir === 'BT') {\n    pos = defaultPos;\n  }\n  const keys = [...commits.keys()];\n  const isParallelCommits = gitGraphConfig.parallelCommits;\n  const layoutOffset = 10;\n  const commitStep = 40;\n  let sortedKeys =\n    dir !== 'BT' || (dir === 'BT' && isParallelCommits)\n      ? keys.sort((a, b) => {\n          return commits.get(a).seq - commits.get(b).seq;\n        })\n      : keys\n          .sort((a, b) => {\n            return commits.get(a).seq - commits.get(b).seq;\n          })\n          .reverse();\n\n  if (dir === 'BT' && isParallelCommits) {\n    setParallelBTPos(sortedKeys, commits, pos, commitStep, layoutOffset);\n    sortedKeys = sortedKeys.reverse();\n  }\n  sortedKeys.forEach((key) => {\n    const commit = commits.get(key);\n    if (isParallelCommits) {\n      if (commit.parents.length) {\n        const closestParent =\n          dir === 'BT' ? findClosestParentBT(commit.parents) : findClosestParent(commit.parents);\n        if (dir === 'TB') {\n          pos = commitPos.get(closestParent).y + commitStep;\n        } else if (dir === 'BT') {\n          pos = commitPos.get(key).y - commitStep;\n        } else {\n          pos = commitPos.get(closestParent).x + commitStep;\n        }\n      } else {\n        if (dir === 'TB') {\n          pos = defaultPos;\n        } else if (dir === 'BT') {\n          pos = commitPos.get(key).y - commitStep;\n        } else {\n          pos = 0;\n        }\n      }\n    }\n    const posWithOffset = dir === 'BT' && isParallelCommits ? pos : pos + layoutOffset;\n    const y = dir === 'TB' || dir === 'BT' ? posWithOffset : branchPos.get(commit.branch).pos;\n    const x = dir === 'TB' || dir === 'BT' ? branchPos.get(commit.branch).pos : posWithOffset;\n\n    // Don't draw the commits now but calculate the positioning which is used by the branch lines etc.\n    if (modifyGraph) {\n      let typeClass;\n      let commitSymbolType =\n        commit.customType !== undefined && commit.customType !== ''\n          ? commit.customType\n          : commit.type;\n      switch (commitSymbolType) {\n        case commitType.NORMAL:\n          typeClass = 'commit-normal';\n          break;\n        case commitType.REVERSE:\n          typeClass = 'commit-reverse';\n          break;\n        case commitType.HIGHLIGHT:\n          typeClass = 'commit-highlight';\n          break;\n        case commitType.MERGE:\n          typeClass = 'commit-merge';\n          break;\n        case commitType.CHERRY_PICK:\n          typeClass = 'commit-cherry-pick';\n          break;\n        default:\n          typeClass = 'commit-normal';\n      }\n\n      if (commitSymbolType === commitType.HIGHLIGHT) {\n        const circle = gBullets.append('rect');\n        circle.attr('x', x - 10);\n        circle.attr('y', y - 10);\n        circle.attr('height', 20);\n        circle.attr('width', 20);\n        circle.attr(\n          'class',\n          `commit ${commit.id} commit-highlight${\n            branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n          } ${typeClass}-outer`\n        );\n        gBullets\n          .append('rect')\n          .attr('x', x - 6)\n          .attr('y', y - 6)\n          .attr('height', 12)\n          .attr('width', 12)\n          .attr(\n            'class',\n            `commit ${commit.id} commit${\n              branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n            } ${typeClass}-inner`\n          );\n      } else if (commitSymbolType === commitType.CHERRY_PICK) {\n        gBullets\n          .append('circle')\n          .attr('cx', x)\n          .attr('cy', y)\n          .attr('r', 10)\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('circle')\n          .attr('cx', x - 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('circle')\n          .attr('cx', x + 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('line')\n          .attr('x1', x + 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n        gBullets\n          .append('line')\n          .attr('x1', x - 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', `commit ${commit.id} ${typeClass}`);\n      } else {\n        const circle = gBullets.append('circle');\n        circle.attr('cx', x);\n        circle.attr('cy', y);\n        circle.attr('r', commit.type === commitType.MERGE ? 9 : 10);\n        circle.attr(\n          'class',\n          `commit ${commit.id} commit${branchPos.get(commit.branch).index % THEME_COLOR_LIMIT}`\n        );\n        if (commitSymbolType === commitType.MERGE) {\n          const circle2 = gBullets.append('circle');\n          circle2.attr('cx', x);\n          circle2.attr('cy', y);\n          circle2.attr('r', 6);\n          circle2.attr(\n            'class',\n            `commit ${typeClass} ${commit.id} commit${\n              branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n            }`\n          );\n        }\n        if (commitSymbolType === commitType.REVERSE) {\n          const cross = gBullets.append('path');\n          cross\n            .attr('d', `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`)\n            .attr(\n              'class',\n              `commit ${typeClass} ${commit.id} commit${\n                branchPos.get(commit.branch).index % THEME_COLOR_LIMIT\n              }`\n            );\n        }\n      }\n    }\n    if (dir === 'TB' || dir === 'BT') {\n      commitPos.set(commit.id, { x: x, y: posWithOffset });\n    } else {\n      commitPos.set(commit.id, { x: posWithOffset, y: y });\n    }\n\n    // The first iteration over the commits are for positioning purposes, this\n    // is required for drawing the lines. The circles and labels is drawn after the labels\n    // placing them on top of the lines.\n    if (modifyGraph) {\n      const px = 4;\n      const py = 2;\n      // Draw the commit label\n      if (\n        commit.type !== commitType.CHERRY_PICK &&\n        ((commit.customId && commit.type === commitType.MERGE) ||\n          commit.type !== commitType.MERGE) &&\n        gitGraphConfig.showCommitLabel\n      ) {\n        const wrapper = gLabels.append('g');\n        const labelBkg = wrapper.insert('rect').attr('class', 'commit-label-bkg');\n\n        const text = wrapper\n          .append('text')\n          .attr('x', pos)\n          .attr('y', y + 25)\n          .attr('class', 'commit-label')\n          .text(commit.id);\n        let bbox = text.node().getBBox();\n\n        // Now we have the label, lets position the background\n        labelBkg\n          .attr('x', posWithOffset - bbox.width / 2 - py)\n          .attr('y', y + 13.5)\n          .attr('width', bbox.width + 2 * py)\n          .attr('height', bbox.height + 2 * py);\n\n        if (dir === 'TB' || dir === 'BT') {\n          labelBkg.attr('x', x - (bbox.width + 4 * px + 5)).attr('y', y - 12);\n          text.attr('x', x - (bbox.width + 4 * px)).attr('y', y + bbox.height - 12);\n        } else {\n          text.attr('x', posWithOffset - bbox.width / 2);\n        }\n        if (gitGraphConfig.rotateCommitLabel) {\n          if (dir === 'TB' || dir === 'BT') {\n            text.attr('transform', 'rotate(' + -45 + ', ' + x + ', ' + y + ')');\n            labelBkg.attr('transform', 'rotate(' + -45 + ', ' + x + ', ' + y + ')');\n          } else {\n            let r_x = -7.5 - ((bbox.width + 10) / 25) * 9.5;\n            let r_y = 10 + (bbox.width / 25) * 8.5;\n            wrapper.attr(\n              'transform',\n              'translate(' + r_x + ', ' + r_y + ') rotate(' + -45 + ', ' + pos + ', ' + y + ')'\n            );\n          }\n        }\n      }\n      if (commit.tag) {\n        const rect = gLabels.insert('polygon');\n        const hole = gLabels.append('circle');\n        const tag = gLabels\n          .append('text')\n          // Note that we are delaying setting the x position until we know the width of the text\n          .attr('y', y - 16)\n          .attr('class', 'tag-label')\n          .text(commit.tag);\n        let tagBbox = tag.node().getBBox();\n        tag.attr('x', posWithOffset - tagBbox.width / 2);\n\n        const h2 = tagBbox.height / 2;\n        const ly = y - 19.2;\n        rect.attr('class', 'tag-label-bkg').attr(\n          'points',\n          `\n          ${pos - tagBbox.width / 2 - px / 2},${ly + py}\n          ${pos - tagBbox.width / 2 - px / 2},${ly - py}\n          ${posWithOffset - tagBbox.width / 2 - px},${ly - h2 - py}\n          ${posWithOffset + tagBbox.width / 2 + px},${ly - h2 - py}\n          ${posWithOffset + tagBbox.width / 2 + px},${ly + h2 + py}\n          ${posWithOffset - tagBbox.width / 2 - px},${ly + h2 + py}`\n        );\n\n        hole\n          .attr('cx', pos - tagBbox.width / 2 + px / 2)\n          .attr('cy', ly)\n          .attr('r', 1.5)\n          .attr('class', 'tag-hole');\n\n        if (dir === 'TB' || dir === 'BT') {\n          rect\n            .attr('class', 'tag-label-bkg')\n            .attr(\n              'points',\n              `\n            ${x},${pos + py}\n            ${x},${pos - py}\n            ${x + layoutOffset},${pos - h2 - py}\n            ${x + layoutOffset + tagBbox.width + px},${pos - h2 - py}\n            ${x + layoutOffset + tagBbox.width + px},${pos + h2 + py}\n            ${x + layoutOffset},${pos + h2 + py}`\n            )\n            .attr('transform', 'translate(12,12) rotate(45, ' + x + ',' + pos + ')');\n          hole\n            .attr('cx', x + px / 2)\n            .attr('cy', pos)\n            .attr('transform', 'translate(12,12) rotate(45, ' + x + ',' + pos + ')');\n          tag\n            .attr('x', x + 5)\n            .attr('y', pos + 3)\n            .attr('transform', 'translate(14,14) rotate(45, ' + x + ',' + pos + ')');\n        }\n      }\n    }\n    pos = dir === 'BT' && isParallelCommits ? pos + commitStep : pos + commitStep + layoutOffset;\n    if (pos > maxPos) {\n      maxPos = pos;\n    }\n  });\n};\n\n/**\n * Detect if there are commits\n * between commitA's x-position\n * and commitB's x-position on the\n * same branch as commitA, where\n * commitA isn't main\n *\n * @param {any} commitA\n * @param {any} commitB\n * @param p1\n * @param p2\n * @param {CommitMap} allCommits\n * @returns {boolean}\n * If there are commits between\n * commitA's x-position\n * and commitB's x-position\n * on the source branch, where\n * source branch is not main\n * return true\n */\nconst shouldRerouteArrow = (commitA, commitB, p1, p2, allCommits) => {\n  const commitBIsFurthest = dir === 'TB' || dir === 'BT' ? p1.x < p2.x : p1.y < p2.y;\n  const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n  const isOnBranchToGetCurve = (x) => x.branch === branchToGetCurve;\n  const isBetweenCommits = (x) => x.seq > commitA.seq && x.seq < commitB.seq;\n  return [...allCommits.values()].some((commitX) => {\n    return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n  });\n};\n\n/**\n * This function find a lane in the y-axis that is not overlapping with any other lanes. This is\n * used for drawing the lines between commits.\n *\n * @param {any} y1\n * @param {any} y2\n * @param {any} depth\n * @returns {number} Y value between y1 and y2\n */\nconst findLane = (y1, y2, depth = 0) => {\n  const candidate = y1 + Math.abs(y1 - y2) / 2;\n  if (depth > 5) {\n    return candidate;\n  }\n\n  let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n  if (ok) {\n    lanes.push(candidate);\n    return candidate;\n  }\n  const diff = Math.abs(y1 - y2);\n  return findLane(y1, y2 - diff / 5, depth + 1);\n};\n\n/**\n * Draw the lines between the commits. They were arrows initially.\n *\n * @param {any} svg\n * @param {any} commitA\n * @param {any} commitB\n * @param {CommitMap} allCommits\n */\nconst drawArrow = (svg, commitA, commitB, allCommits) => {\n  const p1 = commitPos.get(commitA.id); // arrowStart\n  const p2 = commitPos.get(commitB.id); // arrowEnd\n  const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n  // log.debug('drawArrow', p1, p2, arrowNeedsRerouting, commitA.id, commitB.id);\n\n  // Lower-right quadrant logic; top-left is 0,0\n\n  let arc = '';\n  let arc2 = '';\n  let radius = 0;\n  let offset = 0;\n  let colorClassNum = branchPos.get(commitB.branch).index;\n  if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n    colorClassNum = branchPos.get(commitA.branch).index;\n  }\n\n  let lineDef;\n  if (arrowNeedsRerouting) {\n    arc = 'A 10 10, 0, 0, 0,';\n    arc2 = 'A 10 10, 0, 0, 1,';\n    radius = 10;\n    offset = 10;\n\n    const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n    const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n\n    if (dir === 'TB') {\n      if (p1.x < p2.x) {\n        // Source commit is on branch position left of destination commit\n        // so render arrow rightward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${\n          p1.y + offset\n        } L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch position right of destination commit\n        // so render arrow leftward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${\n          p1.y + offset\n        } L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      }\n    } else if (dir === 'BT') {\n      if (p1.x < p2.x) {\n        // Source commit is on branch position left of destination commit\n        // so render arrow rightward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${\n          p1.y - offset\n        } L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch position right of destination commit\n        // so render arrow leftward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${\n          p1.y - offset\n        } L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n      }\n    } else {\n      if (p1.y < p2.y) {\n        // Source commit is on branch positioned above destination commit\n        // so render arrow downward with colour of destination branch\n        lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${\n          p1.x + offset\n        } ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n      } else {\n        // Source commit is on branch positioned below destination commit\n        // so render arrow upward with colour of source branch\n        colorClassNum = branchPos.get(commitA.branch).index;\n        lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${\n          p1.x + offset\n        } ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n      }\n    }\n  } else {\n    arc = 'A 20 20, 0, 0, 0,';\n    arc2 = 'A 20 20, 0, 0, 1,';\n    radius = 20;\n    offset = 20;\n\n    if (dir === 'TB') {\n      if (p1.x < p2.x) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.x > p2.x) {\n        arc = 'A 20 20, 0, 0, 0,';\n        arc2 = 'A 20 20, 0, 0, 1,';\n        radius = 20;\n        offset = 20;\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.x === p2.x) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    } else if (dir === 'BT') {\n      if (p1.x < p2.x) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.x > p2.x) {\n        arc = 'A 20 20, 0, 0, 0,';\n        arc2 = 'A 20 20, 0, 0, 1,';\n        radius = 20;\n        offset = 20;\n\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.x === p2.x) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    } else {\n      if (p1.y < p2.y) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n            p1.y + offset\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n      if (p1.y > p2.y) {\n        if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n          lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n            p1.y - offset\n          } L ${p2.x} ${p2.y}`;\n        } else {\n          lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n            p2.y\n          } L ${p2.x} ${p2.y}`;\n        }\n      }\n\n      if (p1.y === p2.y) {\n        lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n      }\n    }\n  }\n  svg\n    .append('path')\n    .attr('d', lineDef)\n    .attr('class', 'arrow arrow' + (colorClassNum % THEME_COLOR_LIMIT));\n};\n\n/**\n * @param {*} svg\n * @param {CommitMap} commits\n */\nconst drawArrows = (svg, commits) => {\n  const gArrows = svg.append('g').attr('class', 'commit-arrows');\n  [...commits.keys()].forEach((key) => {\n    const commit = commits.get(key);\n    if (commit.parents && commit.parents.length > 0) {\n      commit.parents.forEach((parent) => {\n        drawArrow(gArrows, commits.get(parent), commit, commits);\n      });\n    }\n  });\n};\n\n/**\n * Adds the branches and the branches' labels to the svg.\n *\n * @param svg\n * @param branches\n */\nconst drawBranches = (svg, branches) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const g = svg.append('g');\n  branches.forEach((branch, index) => {\n    const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n\n    const pos = branchPos.get(branch.name).pos;\n    const line = g.append('line');\n    line.attr('x1', 0);\n    line.attr('y1', pos);\n    line.attr('x2', maxPos);\n    line.attr('y2', pos);\n    line.attr('class', 'branch branch' + adjustIndexForTheme);\n\n    if (dir === 'TB') {\n      line.attr('y1', defaultPos);\n      line.attr('x1', pos);\n      line.attr('y2', maxPos);\n      line.attr('x2', pos);\n    } else if (dir === 'BT') {\n      line.attr('y1', maxPos);\n      line.attr('x1', pos);\n      line.attr('y2', defaultPos);\n      line.attr('x2', pos);\n    }\n    lanes.push(pos);\n\n    let name = branch.name;\n\n    // Create the actual text element\n    const labelElement = drawText(name);\n    // Create outer g, edgeLabel, this will be positioned after graph layout\n    const bkg = g.insert('rect');\n    const branchLabel = g.insert('g').attr('class', 'branchLabel');\n\n    // Create inner g, label, this will be positioned now for centering the text\n    const label = branchLabel.insert('g').attr('class', 'label branch-label' + adjustIndexForTheme);\n    label.node().appendChild(labelElement);\n    let bbox = labelElement.getBBox();\n    bkg\n      .attr('class', 'branchLabelBkg label' + adjustIndexForTheme)\n      .attr('rx', 4)\n      .attr('ry', 4)\n      .attr('x', -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0))\n      .attr('y', -bbox.height / 2 + 8)\n      .attr('width', bbox.width + 18)\n      .attr('height', bbox.height + 4);\n    label.attr(\n      'transform',\n      'translate(' +\n        (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) +\n        ', ' +\n        (pos - bbox.height / 2 - 1) +\n        ')'\n    );\n    if (dir === 'TB') {\n      bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', 0);\n      label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + 0 + ')');\n    } else if (dir === 'BT') {\n      bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', maxPos);\n      label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + maxPos + ')');\n    } else {\n      bkg.attr('transform', 'translate(' + -19 + ', ' + (pos - bbox.height / 2) + ')');\n    }\n  });\n};\n\n/**\n * @param txt\n * @param id\n * @param ver\n * @param diagObj\n */\nexport const draw = function (txt, id, ver, diagObj) {\n  clear();\n  const conf = getConfig();\n  const gitGraphConfig = conf.gitGraph;\n  // try {\n  log.debug('in gitgraph renderer', txt + '\\n', 'id:', id, ver);\n\n  allCommitsDict = diagObj.db.getCommits();\n  const branches = diagObj.db.getBranchesAsObjArray();\n  dir = diagObj.db.getDirection();\n  const diagram = select(`[id=\"${id}\"]`);\n  // Position branches\n  let pos = 0;\n  branches.forEach((branch, index) => {\n    const labelElement = drawText(branch.name);\n    const g = diagram.append('g');\n    const branchLabel = g.insert('g').attr('class', 'branchLabel');\n    const label = branchLabel.insert('g').attr('class', 'label branch-label');\n    label.node().appendChild(labelElement);\n    let bbox = labelElement.getBBox();\n\n    branchPos.set(branch.name, { pos, index });\n    pos +=\n      50 +\n      (gitGraphConfig.rotateCommitLabel ? 40 : 0) +\n      (dir === 'TB' || dir === 'BT' ? bbox.width / 2 : 0);\n    label.remove();\n    branchLabel.remove();\n    g.remove();\n  });\n\n  drawCommits(diagram, allCommitsDict, false);\n  if (gitGraphConfig.showBranches) {\n    drawBranches(diagram, branches);\n  }\n  drawArrows(diagram, allCommitsDict);\n  drawCommits(diagram, allCommitsDict, true);\n  utils.insertTitle(\n    diagram,\n    'gitTitleText',\n    gitGraphConfig.titleTopMargin,\n    diagObj.db.getDiagramTitle()\n  );\n\n  // Setup the view box and size of the svg element\n  setupGraphViewbox(\n    undefined,\n    diagram,\n    gitGraphConfig.diagramPadding,\n    gitGraphConfig.useMaxWidth ?? conf.useMaxWidth\n  );\n};\n\nexport default {\n  draw,\n};\n", "const getStyles = (options) =>\n  `\n  .commit-id,\n  .commit-msg,\n  .branch-label {\n    fill: lightgrey;\n    color: lightgrey;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n  ${[0, 1, 2, 3, 4, 5, 6, 7]\n    .map(\n      (i) =>\n        `\n        .branch-label${i} { fill: ${options['gitBranchLabel' + i]}; }\n        .commit${i} { stroke: ${options['git' + i]}; fill: ${options['git' + i]}; }\n        .commit-highlight${i} { stroke: ${options['gitInv' + i]}; fill: ${options['gitInv' + i]}; }\n        .label${i}  { fill: ${options['git' + i]}; }\n        .arrow${i} { stroke: ${options['git' + i]}; }\n        `\n    )\n    .join('\\n')}\n\n  .branch {\n    stroke-width: 1;\n    stroke: ${options.lineColor};\n    stroke-dasharray: 2;\n  }\n  .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n  .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${\n    options.commitLabelBackground\n  }; opacity: 0.5; }\n  .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n  .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n  .tag-hole { fill: ${options.textColor}; }\n\n  .commit-merge {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n  .commit-reverse {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n    stroke-width: 3;\n  }\n  .commit-highlight-outer {\n  }\n  .commit-highlight-inner {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n\n  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n  .gitTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }\n`;\n\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport gitGraphParser from './parser/gitGraph.jison';\nimport gitGraphDb from './gitGraphAst.js';\nimport gitGraphRenderer from './gitGraphRenderer.js';\nimport gitGraphStyles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n  parser: gitGraphParser,\n  db: gitGraphDb,\n  renderer: gitGraphRenderer,\n  styles: gitGraphStyles,\n};\n"],
  "mappings": "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,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC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,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,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C,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAEd,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG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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", "$Vf", "$Vg", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "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", "gitGraph_default", "parser", "mainBranchName", "getConfig", "mainBranchOrder", "commits", "head", "branchesConfig", "branches", "curBranch", "direction", "seq", "getId", "random", "__name", "uniqBy", "list", "fn", "recordMap", "out", "item", "key", "setDirection", "dir", "options", "setOptions", "rawOptString", "log", "e", "getOptions", "commit", "msg", "id", "type", "tag", "common_default", "commitType", "branch", "name", "order", "checkout", "error", "merge", "otherBranch", "custom_id", "override_type", "custom_tag", "currentCommit", "otherCommit", "cherryPick", "sourceId", "targetId", "parentCommitId", "sourceCommit", "sourceCommitBranch", "upsert", "arr", "newVal", "index", "prettyPrintCommitHistory", "commitArr", "line", "c", "label", "newCommit", "nextCommit", "prettyPrint", "node", "getCommitsArray", "clear", "mainBranch", "getBranchesAsObjArray", "branchConfig", "i", "a", "b", "getBranches", "getCommits", "o", "getCurrentBranch", "getDirection", "getHead", "gitGraphAst_default", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "allCommitsDict", "commitType", "THEME_COLOR_LIMIT", "branchPos", "commitPos", "lanes", "maxPos", "dir", "defaultPos", "clear", "__name", "drawText", "txt", "svgLabel", "rows", "row", "tspan", "findClosestParent", "parents", "closestParent", "maxPosition", "parent", "parentPosition", "findClosestParentBT", "setParallelBTPos", "sortedKeys", "commits", "commitStep", "layoutOffset", "curPos", "roots", "key", "commit", "x", "y", "drawCommits", "svg", "modifyGraph", "gitGraphConfig", "getConfig", "gBullets", "gLabels", "pos", "keys", "isParallelCommits", "a", "b", "posWithOffset", "typeClass", "commitSymbolType", "circle", "circle2", "wrapper", "labelBkg", "text", "bbox", "r_x", "r_y", "rect", "hole", "tag", "tagBbox", "h2", "ly", "shouldRerouteArrow", "commitA", "commitB", "p1", "p2", "allCommits", "branchToGetCurve", "isOnBranchToGetCurve", "isBetweenCommits", "commitX", "findLane", "y1", "y2", "depth", "candidate", "lane", "diff", "drawArrow", "arrowNeedsRerouting", "arc", "arc2", "radius", "offset", "colorClassNum", "lineDef", "lineY", "lineX", "drawArrows", "gArrows", "drawBranches", "branches", "g", "branch", "index", "adjustIndexForTheme", "line", "name", "labelElement", "bkg", "label", "draw", "id", "ver", "diagObj", "conf", "log", "diagram", "select_default", "branchLabel", "utils_default", "setupGraphViewbox", "gitGraphRenderer_default", "getStyles", "__name", "options", "i", "styles_default", "diagram", "gitGraph_default", "gitGraphAst_default", "gitGraphRenderer_default", "styles_default"]
}
