mermaid
Version:
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
8 lines • 377 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/diagrams/sequence/parser/sequenceDiagram.jison", "../../../src/diagrams/sequence/sequenceDb.ts", "../../../src/diagrams/sequence/styles.js", "../../../src/diagrams/sequence/svgDraw.js", "../../../src/diagrams/sequence/actorBands.ts", "../../../src/diagrams/sequence/sequenceRenderer.ts", "../../../src/diagrams/sequence/sequenceDiagram.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,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,25],$Vd=[1,26],$Ve=[1,27],$Vf=[1,28],$Vg=[1,29],$Vh=[1,30],$Vi=[1,31],$Vj=[1,32],$Vk=[1,33],$Vl=[1,34],$Vm=[1,35],$Vn=[1,36],$Vo=[1,37],$Vp=[1,38],$Vq=[1,39],$Vr=[1,40],$Vs=[1,42],$Vt=[1,43],$Vu=[1,44],$Vv=[1,45],$Vw=[1,46],$Vx=[1,47],$Vy=[1,4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,49,50,51,53,54,56,61,62,63,64,73],$Vz=[1,74],$VA=[1,80],$VB=[1,81],$VC=[1,82],$VD=[1,83],$VE=[1,84],$VF=[1,85],$VG=[1,86],$VH=[1,87],$VI=[1,88],$VJ=[1,89],$VK=[1,90],$VL=[1,91],$VM=[1,92],$VN=[1,93],$VO=[1,94],$VP=[1,95],$VQ=[1,96],$VR=[1,97],$VS=[1,98],$VT=[1,99],$VU=[1,100],$VV=[1,101],$VW=[1,102],$VX=[1,103],$VY=[1,104],$VZ=[1,105],$V_=[2,78],$V$=[4,5,17,51,53,54],$V01=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],$V11=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,50,51,53,54,56,61,62,63,64,73],$V21=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,49,51,53,54,56,61,62,63,64,73],$V31=[4,5,10,14,15,17,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,48,51,53,54,56,61,62,63,64,73],$V41=[5,52],$V51=[70,71,72,73],$V61=[1,151];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NEWLINE\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"INVALID\":10,\"box_section\":11,\"box_line\":12,\"participant_statement\":13,\"create\":14,\"box\":15,\"restOfLine\":16,\"end\":17,\"signal\":18,\"autonumber\":19,\"NUM\":20,\"off\":21,\"activate\":22,\"actor\":23,\"deactivate\":24,\"note_statement\":25,\"links_statement\":26,\"link_statement\":27,\"properties_statement\":28,\"details_statement\":29,\"title\":30,\"legacy_title\":31,\"acc_title\":32,\"acc_title_value\":33,\"acc_descr\":34,\"acc_descr_value\":35,\"acc_descr_multiline_value\":36,\"loop\":37,\"rect\":38,\"opt\":39,\"alt\":40,\"else_sections\":41,\"par\":42,\"par_sections\":43,\"par_over\":44,\"critical\":45,\"option_sections\":46,\"break\":47,\"option\":48,\"and\":49,\"else\":50,\"participant\":51,\"AS\":52,\"participant_actor\":53,\"destroy\":54,\"actor_with_config\":55,\"note\":56,\"placement\":57,\"text2\":58,\"over\":59,\"actor_pair\":60,\"links\":61,\"link\":62,\"properties\":63,\"details\":64,\"spaceList\":65,\",\":66,\"left_of\":67,\"right_of\":68,\"signaltype\":69,\"+\":70,\"-\":71,\"()\":72,\"ACTOR\":73,\"config_object\":74,\"CONFIG_START\":75,\"CONFIG_CONTENT\":76,\"CONFIG_END\":77,\"SOLID_OPEN_ARROW\":78,\"DOTTED_OPEN_ARROW\":79,\"SOLID_ARROW\":80,\"SOLID_ARROW_TOP\":81,\"SOLID_ARROW_BOTTOM\":82,\"STICK_ARROW_TOP\":83,\"STICK_ARROW_BOTTOM\":84,\"SOLID_ARROW_TOP_DOTTED\":85,\"SOLID_ARROW_BOTTOM_DOTTED\":86,\"STICK_ARROW_TOP_DOTTED\":87,\"STICK_ARROW_BOTTOM_DOTTED\":88,\"SOLID_ARROW_TOP_REVERSE\":89,\"SOLID_ARROW_BOTTOM_REVERSE\":90,\"STICK_ARROW_TOP_REVERSE\":91,\"STICK_ARROW_BOTTOM_REVERSE\":92,\"SOLID_ARROW_TOP_REVERSE_DOTTED\":93,\"SOLID_ARROW_BOTTOM_REVERSE_DOTTED\":94,\"STICK_ARROW_TOP_REVERSE_DOTTED\":95,\"STICK_ARROW_BOTTOM_REVERSE_DOTTED\":96,\"BIDIRECTIONAL_SOLID_ARROW\":97,\"DOTTED_ARROW\":98,\"BIDIRECTIONAL_DOTTED_ARROW\":99,\"SOLID_CROSS\":100,\"DOTTED_CROSS\":101,\"SOLID_POINT\":102,\"DOTTED_POINT\":103,\"TXT\":104,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NEWLINE\",6:\"SD\",10:\"INVALID\",14:\"create\",15:\"box\",16:\"restOfLine\",17:\"end\",19:\"autonumber\",20:\"NUM\",21:\"off\",22:\"activate\",24:\"deactivate\",30:\"title\",31:\"legacy_title\",32:\"acc_title\",33:\"acc_title_value\",34:\"acc_descr\",35:\"acc_descr_value\",36:\"acc_descr_multiline_value\",37:\"loop\",38:\"rect\",39:\"opt\",40:\"alt\",42:\"par\",44:\"par_over\",45:\"critical\",47:\"break\",48:\"option\",49:\"and\",50:\"else\",51:\"participant\",52:\"AS\",53:\"participant_actor\",54:\"destroy\",56:\"note\",59:\"over\",61:\"links\",62:\"link\",63:\"properties\",64:\"details\",66:\",\",67:\"left_of\",68:\"right_of\",70:\"+\",71:\"-\",72:\"()\",73:\"ACTOR\",75:\"CONFIG_START\",76:\"CONFIG_CONTENT\",77:\"CONFIG_END\",78:\"SOLID_OPEN_ARROW\",79:\"DOTTED_OPEN_ARROW\",80:\"SOLID_ARROW\",81:\"SOLID_ARROW_TOP\",82:\"SOLID_ARROW_BOTTOM\",83:\"STICK_ARROW_TOP\",84:\"STICK_ARROW_BOTTOM\",85:\"SOLID_ARROW_TOP_DOTTED\",86:\"SOLID_ARROW_BOTTOM_DOTTED\",87:\"STICK_ARROW_TOP_DOTTED\",88:\"STICK_ARROW_BOTTOM_DOTTED\",89:\"SOLID_ARROW_TOP_REVERSE\",90:\"SOLID_ARROW_BOTTOM_REVERSE\",91:\"STICK_ARROW_TOP_REVERSE\",92:\"STICK_ARROW_BOTTOM_REVERSE\",93:\"SOLID_ARROW_TOP_REVERSE_DOTTED\",94:\"SOLID_ARROW_BOTTOM_REVERSE_DOTTED\",95:\"STICK_ARROW_TOP_REVERSE_DOTTED\",96:\"STICK_ARROW_BOTTOM_REVERSE_DOTTED\",97:\"BIDIRECTIONAL_SOLID_ARROW\",98:\"DOTTED_ARROW\",99:\"BIDIRECTIONAL_DOTTED_ARROW\",100:\"SOLID_CROSS\",101:\"DOTTED_CROSS\",102:\"SOLID_POINT\",103:\"DOTTED_POINT\",104:\"TXT\"},\nproductions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[8,1],[11,0],[11,2],[12,2],[12,1],[12,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[46,1],[46,4],[43,1],[43,4],[41,1],[41,4],[13,5],[13,3],[13,5],[13,3],[13,3],[13,5],[13,3],[13,5],[13,3],[25,4],[25,4],[26,3],[27,3],[28,3],[29,3],[65,2],[65,1],[60,3],[60,1],[57,1],[57,1],[18,5],[18,5],[18,5],[18,5],[18,6],[18,4],[55,2],[74,3],[23,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[69,1],[58,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 4: case 10:\n this.$ = [] \nbreak;\ncase 5: case 11:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 6: case 7: case 12: case 13:\n this.$ = $$[$0] \nbreak;\ncase 8: case 9: case 14:\n this.$=[]; \nbreak;\ncase 16:\n$$[$0].type='createParticipant'; this.$=$$[$0];\nbreak;\ncase 17:\n\n\t\t$$[$0-1].unshift({type: 'boxStart', boxData:yy.parseBoxData($$[$0-2]) });\n\t\t$$[$0-1].push({type: 'boxEnd', boxText:$$[$0-2]});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 19:\n this.$= {type:'sequenceIndex',sequenceIndex: Number($$[$0-2]), sequenceIndexStep:Number($$[$0-1]), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 20:\n this.$ = {type:'sequenceIndex',sequenceIndex: Number($$[$0-1]), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 21:\n this.$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 22:\nthis.$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; \nbreak;\ncase 23:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1].actor};\nbreak;\ncase 24:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1].actor};\nbreak;\ncase 30:\nyy.setDiagramTitle($$[$0].substring(6));this.$=$$[$0].substring(6);\nbreak;\ncase 31:\nyy.setDiagramTitle($$[$0].substring(7));this.$=$$[$0].substring(7);\nbreak;\ncase 32:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 33: case 34:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 35:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 36:\n\n\t\t$$[$0-1].unshift({type: 'rectStart', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_START });\n\t\t$$[$0-1].push({type: 'rectEnd', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_END });\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 37:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 38:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 39:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 40:\n\n\t\t// Parallel (overlapped) start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.PAR_OVER_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 41:\n\n\t\t// critical start\n\t\t$$[$0-1].unshift({type: 'criticalStart', criticalText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.CRITICAL_START});\n\t\t// Content in critical is already in $$[$0-1]\n\t\t// critical end\n\t\t$$[$0-1].push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 42:\n\n\t\t$$[$0-1].unshift({type: 'breakStart', breakText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_START});\n\t\t$$[$0-1].push({type: 'breakEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 44:\n this.$ = $$[$0-3].concat([{type: 'option', optionText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.CRITICAL_OPTION}, $$[$0]]); \nbreak;\ncase 46:\n this.$ = $$[$0-3].concat([{type: 'and', parText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 48:\n this.$ = $$[$0-3].concat([{type: 'else', altText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 49:\n$$[$0-3].draw='participant'; $$[$0-3].type='addParticipant';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 50:\n$$[$0-1].draw='participant'; $$[$0-1].type='addParticipant';this.$=$$[$0-1];\nbreak;\ncase 51:\n$$[$0-3].draw='actor'; $$[$0-3].type='addParticipant';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 52: case 57:\n$$[$0-1].draw='actor'; $$[$0-1].type='addParticipant'; this.$=$$[$0-1];\nbreak;\ncase 53:\n$$[$0-1].type='destroyParticipant'; this.$=$$[$0-1];\nbreak;\ncase 54:\n$$[$0-3].draw='participant'; $$[$0-3].type='addParticipant'; $$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 55:\n$$[$0-1].draw='participant'; $$[$0-1].type='addParticipant'; this.$=$$[$0-1];\nbreak;\ncase 56:\n$$[$0-3].draw='actor'; $$[$0-3].type='addParticipant'; $$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 58:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 59:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 60:\n\n\t\tthis.$ = [$$[$0-1], {type:'addLinks', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 61:\n\n\t\tthis.$ = [$$[$0-1], {type:'addALink', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 62:\n\n\t\tthis.$ = [$$[$0-1], {type:'addProperties', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 63:\n\n\t\tthis.$ = [$$[$0-1], {type:'addDetails', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 66:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 67:\n this.$ = $$[$0]; \nbreak;\ncase 68:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 69:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 70:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0], activate: true},\n\t {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1].actor}\n\t ]\nbreak;\ncase 71:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4].actor}\n\t ]\nbreak;\ncase 72:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0], activate: true, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION},\n\t {type: 'centralConnection', signalType: yy.LINETYPE.CENTRAL_CONNECTION, actor: $$[$0-1].actor, }\n\t ]\nbreak;\ncase 73:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0], activate: false, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE},\n\t {type: 'centralConnectionReverse', signalType: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE, actor: $$[$0-4].actor}\n\t ]\nbreak;\ncase 74:\n this.$ = [$$[$0-5],$$[$0-1],{type: 'addMessage', from:$$[$0-5].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0], activate: true, centralConnection: yy.LINETYPE.CENTRAL_CONNECTION_DUAL},\n\t \t\t\t {type: 'centralConnection', signalType: yy.LINETYPE.CENTRAL_CONNECTION, actor: $$[$0-1].actor, },\n\t\t\t\t {type: 'centralConnectionReverse', signalType: yy.LINETYPE.CENTRAL_CONNECTION_REVERSE, actor: $$[$0-5].actor}\n\t ]\nbreak;\ncase 75:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 76:\n\n this.$ = {\n type: 'addParticipant',\n actor: $$[$0-1],\n config: $$[$0]\n };\n \nbreak;\ncase 77:\n\n this.$ = $$[$0-1].trim();\n \nbreak;\ncase 78:\nthis.$={ type: 'addParticipant', actor:$$[$0]}\nbreak;\ncase 79:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 80:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 81:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 82:\n this.$ = yy.LINETYPE.SOLID_TOP; \nbreak;\ncase 83:\n this.$ = yy.LINETYPE.SOLID_BOTTOM; \nbreak;\ncase 84:\n this.$ = yy.LINETYPE.STICK_TOP; \nbreak;\ncase 85:\n this.$ = yy.LINETYPE.STICK_BOTTOM; \nbreak;\ncase 86:\n this.$ = yy.LINETYPE.SOLID_TOP_DOTTED; \nbreak;\ncase 87:\n this.$ = yy.LINETYPE.SOLID_BOTTOM_DOTTED; \nbreak;\ncase 88:\n this.$ = yy.LINETYPE.STICK_TOP_DOTTED; \nbreak;\ncase 89:\n this.$ = yy.LINETYPE.STICK_BOTTOM_DOTTED; \nbreak;\ncase 90:\n this.$ = yy.LINETYPE.SOLID_ARROW_TOP_REVERSE; \nbreak;\ncase 91:\n this.$ = yy.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE; \nbreak;\ncase 92:\n this.$ = yy.LINETYPE.STICK_ARROW_TOP_REVERSE; \nbreak;\ncase 93:\n this.$ = yy.LINETYPE.STICK_ARROW_BOTTOM_REVERSE; \nbreak;\ncase 94:\n this.$ = yy.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED; \nbreak;\ncase 95:\n this.$ = yy.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED; \nbreak;\ncase 96:\n this.$ = yy.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED; \nbreak;\ncase 97:\n this.$ = yy.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED; \nbreak;\ncase 98:\n this.$ = yy.LINETYPE.BIDIRECTIONAL_SOLID; \nbreak;\ncase 99:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 100:\n this.$ = yy.LINETYPE.BIDIRECTIONAL_DOTTED; \nbreak;\ncase 101:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 102:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 103:\n this.$ = yy.LINETYPE.SOLID_POINT; \nbreak;\ncase 104:\n this.$ = yy.LINETYPE.DOTTED_POINT; \nbreak;\ncase 105:\nthis.$ = yy.parseMessage($$[$0].trim().substring(1)) \nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:$V2},{1:[3]},{3:5,4:$V0,5:$V1,6:$V2},{3:6,4:$V0,5:$V1,6:$V2},o([1,4,5,10,14,15,19,22,24,30,31,32,34,36,37,38,39,40,42,44,45,47,51,53,54,56,61,62,63,64,73],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},o($Vy,[2,5]),{9:48,13:13,14:$V7,15:$V8,18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},o($Vy,[2,7]),o($Vy,[2,8]),o($Vy,[2,9]),o($Vy,[2,15]),{13:49,51:$Vp,53:$Vq,54:$Vr},{16:[1,50]},{5:[1,51]},{5:[1,54],20:[1,52],21:[1,53]},{23:55,73:$Vx},{23:56,73:$Vx},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},{5:[1,61]},o($Vy,[2,30]),o($Vy,[2,31]),{33:[1,62]},{35:[1,63]},o($Vy,[2,34]),{16:[1,64]},{16:[1,65]},{16:[1,66]},{16:[1,67]},{16:[1,68]},{16:[1,69]},{16:[1,70]},{16:[1,71]},{23:72,55:73,73:$Vz},{23:75,55:76,73:$Vz},{23:77,73:$Vx},{69:78,72:[1,79],78:$VA,79:$VB,80:$VC,81:$VD,82:$VE,83:$VF,84:$VG,85:$VH,86:$VI,87:$VJ,88:$VK,89:$VL,90:$VM,91:$VN,92:$VO,93:$VP,94:$VQ,95:$VR,96:$VS,97:$VT,98:$VU,99:$VV,100:$VW,101:$VX,102:$VY,103:$VZ},{57:106,59:[1,107],67:[1,108],68:[1,109]},{23:110,73:$Vx},{23:111,73:$Vx},{23:112,73:$Vx},{23:113,73:$Vx},o([5,66,72,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104],$V_),o($Vy,[2,6]),o($Vy,[2,16]),o($V$,[2,10],{11:114}),o($Vy,[2,18]),{5:[1,116],20:[1,115]},{5:[1,117]},o($Vy,[2,22]),{5:[1,118]},{5:[1,119]},o($Vy,[2,25]),o($Vy,[2,26]),o($Vy,[2,27]),o($Vy,[2,28]),o($Vy,[2,29]),o($Vy,[2,32]),o($Vy,[2,33]),o($V01,$V3,{7:120}),o($V01,$V3,{7:121}),o($V01,$V3,{7:122}),o($V11,$V3,{41:123,7:124}),o($V21,$V3,{43:125,7:126}),o($V21,$V3,{7:126,43:127}),o($V31,$V3,{46:128,7:129}),o($V01,$V3,{7:130}),{5:[1,132],52:[1,131]},{5:[1,134],52:[1,133]},o($V41,$V_,{74:135,75:[1,136]}),{5:[1,138],52:[1,137]},{5:[1,140],52:[1,139]},{5:[1,141]},{23:145,70:[1,142],71:[1,143],72:[1,144],73:$Vx},{69:146,78:$VA,79:$VB,80:$VC,81:$VD,82:$VE,83:$VF,84:$VG,85:$VH,86:$VI,87:$VJ,88:$VK,89:$VL,90:$VM,91:$VN,92:$VO,93:$VP,94:$VQ,95:$VR,96:$VS,97:$VT,98:$VU,99:$VV,100:$VW,101:$VX,102:$VY,103:$VZ},o($V51,[2,79]),o($V51,[2,80]),o($V51,[2,81]),o($V51,[2,82]),o($V51,[2,83]),o($V51,[2,84]),o($V51,[2,85]),o($V51,[2,86]),o($V51,[2,87]),o($V51,[2,88]),o($V51,[2,89]),o($V51,[2,90]),o($V51,[2,91]),o($V51,[2,92]),o($V51,[2,93]),o($V51,[2,94]),o($V51,[2,95]),o($V51,[2,96]),o($V51,[2,97]),o($V51,[2,98]),o($V51,[2,99]),o($V51,[2,100]),o($V51,[2,101]),o($V51,[2,102]),o($V51,[2,103]),o($V51,[2,104]),{23:147,73:$Vx},{23:149,60:148,73:$Vx},{73:[2,68]},{73:[2,69]},{58:150,104:$V61},{58:152,104:$V61},{58:153,104:$V61},{58:154,104:$V61},{4:[1,157],5:[1,159],12:156,13:158,17:[1,155],51:$Vp,53:$Vq,54:$Vr},{5:[1,160]},o($Vy,[2,20]),o($Vy,[2,21]),o($Vy,[2,23]),o($Vy,[2,24]),{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[1,161],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[1,162],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[1,163],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{17:[1,164]},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[2,47],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,50:[1,165],51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{17:[1,166]},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[2,45],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,49:[1,167],51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{17:[1,168]},{17:[1,169]},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[2,43],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,48:[1,170],51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{4:$V4,5:$V5,8:8,9:10,10:$V6,13:13,14:$V7,15:$V8,17:[1,171],18:16,19:$V9,22:$Va,23:41,24:$Vb,25:20,26:21,27:22,28:23,29:24,30:$Vc,31:$Vd,32:$Ve,34:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,40:$Vk,42:$Vl,44:$Vm,45:$Vn,47:$Vo,51:$Vp,53:$Vq,54:$Vr,56:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,73:$Vx},{16:[1,172]},o($Vy,[2,50]),{16:[1,173]},o($Vy,[2,55]),o($V41,[2,76]),{76:[1,174]},{16:[1,175]},o($Vy,[2,52]),{16:[1,176]},o($Vy,[2,57]),o($Vy,[2,53]),{23:177,73:$Vx},{23:178,73:$Vx},{23:179,73:$Vx},{58:180,104:$V61},{23:181,72:[1,182],73:$Vx},{58:183,104:$V61},{58:184,104:$V61},{66:[1,185],104:[2,67]},{5:[2,60]},{5:[2,105]},{5:[2,61]},{5:[2,62]},{5:[2,63]},o($Vy,[2,17]),o($V$,[2,11]),{13:186,51:$Vp,53:$Vq,54:$Vr},o($V$,[2,13]),o($V$,[2,14]),o($Vy,[2,19]),o($Vy,[2,35]),o($Vy,[2,36]),o($Vy,[2,37]),o($Vy,[2,38]),{16:[1,187]},o($Vy,[2,39]),{16:[1,188]},o($Vy,[2,40]),o($Vy,[2,41]),{16:[1,189]},o($Vy,[2,42]),{5:[1,190]},{5:[1,191]},{77:[1,192]},{5:[1,193]},{5:[1,194]},{58:195,104:$V61},{58:196,104:$V61},{58:197,104:$V61},{5:[2,75]},{58:198,104:$V61},{23:199,73:$Vx},{5:[2,58]},{5:[2,59]},{23:200,73:$Vx},o($V$,[2,12]),o($V11,$V3,{7:124,41:201}),o($V21,$V3,{7:126,43:202}),o($V31,$V3,{7:129,46:203}),o($Vy,[2,49]),o($Vy,[2,54]),o($V41,[2,77]),o($Vy,[2,51]),o($Vy,[2,56]),{5:[2,70]},{5:[2,71]},{5:[2,72]},{5:[2,73]},{58:204,104:$V61},{104:[2,66]},{17:[2,48]},{17:[2,46]},{17:[2,44]},{5:[2,74]}],\ndefaultActions: {5:[2,1],6:[2,2],108:[2,68],109:[2,69],150:[2,60],151:[2,105],152:[2,61],153:[2,62],154:[2,63],180:[2,75],183:[2,58],184:[2,59],195:[2,70],196:[2,71],197:[2,72],198:[2,73],200:[2,66],201:[2,48],202:[2,46],203:[2,44],204:[2,74]},\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:return 5;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip same-line whitespace */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6:return 20;\nbreak;\ncase 7: this.begin('CONFIG'); return 75; \nbreak;\ncase 8: return 76; \nbreak;\ncase 9: this.popState(); this.begin('ALIAS'); return 77; \nbreak;\ncase 10: this.popState(); this.popState(); return 77; \nbreak;\ncase 11: yy_.yytext = yy_.yytext.trim(); return 73; \nbreak;\ncase 12: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 73; \nbreak;\ncase 13: yy_.yytext = yy_.yytext.trim(); this.popState(); return 73; \nbreak;\ncase 14: this.popState(); return 10; \nbreak;\ncase 15: yy_.yytext = yy_.yytext.trim(); this.popState(); return 10; \nbreak;\ncase 16: this.begin('LINE'); return 15; \nbreak;\ncase 17: this.begin('ID'); return 51; \nbreak;\ncase 18: this.begin('ID'); return 53; \nbreak;\ncase 19:return 14;\nbreak;\ncase 20: this.begin('ID'); return 54; \nbreak;\ncase 21: this.popState(); this.popState(); this.begin('LINE'); return 52; \nbreak;\ncase 22: this.popState(); this.popState(); return 5; \nbreak;\ncase 23: this.begin('LINE'); return 37; \nbreak;\ncase 24: this.begin('LINE'); return 38; \nbreak;\ncase 25: this.begin('LINE'); return 39; \nbreak;\ncase 26: this.begin('LINE'); return 40; \nbreak;\ncase 27: this.begin('LINE'); return 50; \nbreak;\ncase 28: this.begin('LINE'); return 42; \nbreak;\ncase 29: this.begin('LINE'); return 44; \nbreak;\ncase 30: this.begin('LINE'); return 49; \nbreak;\ncase 31: this.begin('LINE'); return 45; \nbreak;\ncase 32: this.begin('LINE'); return 48; \nbreak;\ncase 33: this.begin('LINE'); return 47; \nbreak;\ncase 34: this.popState(); return 16; \nbreak;\ncase 35:return 17;\nbreak;\ncase 36:return 67;\nbreak;\ncase 37:return 68;\nbreak;\ncase 38:return 61;\nbreak;\ncase 39:return 62;\nbreak;\ncase 40:return 63;\nbreak;\ncase 41:return 64;\nbreak;\ncase 42:return 59;\nbreak;\ncase 43:return 56;\nbreak;\ncase 44: this.begin('ID'); return 22; \nbreak;\ncase 45: this.begin('ID'); return 24; \nbreak;\ncase 46:return 30;\nbreak;\ncase 47:return 31;\nbreak;\ncase 48: this.begin(\"acc_title\");return 32; \nbreak;\ncase 49: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 50: this.begin(\"acc_descr\");return 34; \nbreak;\ncase 51: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 52: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 53: this.popState(); \nbreak;\ncase 54:return \"acc_descr_multiline_value\";\nbreak;\ncase 55:return 6;\nbreak;\ncase 56:return 19;\nbreak;\ncase 57:return 21;\nbreak;\ncase 58:return 66;\nbreak;\ncase 59:return 5;\nbreak;\ncase 60: yy_.yytext = yy_.yytext.trim(); return 73; \nbreak;\ncase 61:return 80;\nbreak;\ncase 62:return 97;\nbreak;\ncase 63:return 98;\nbreak;\ncase 64:return 99;\nbreak;\ncase 65:return 78;\nbreak;\ncase 66:return 79;\nbreak;\ncase 67:return 100;\nbreak;\ncase 68:return 101;\nbreak;\ncase 69:return 102;\nbreak;\ncase 70:return 103;\nbreak;\ncase 71:return 85;\nbreak;\ncase 72:return 86;\nbreak;\ncase 73:return 87;\nbreak;\ncase 74:return 88;\nbreak;\ncase 75:return 93;\nbreak;\ncase 76:return 94;\nbreak;\ncase 77:return 95;\nbreak;\ncase 78:return 96;\nbreak;\ncase 79:return 81;\nbreak;\ncase 80:return 82;\nbreak;\ncase 81:return 83;\nbreak;\ncase 82:return 84;\nbreak;\ncase 83:return 89;\nbreak;\ncase 84:return 90;\nbreak;\ncase 85:return 91;\nbreak;\ncase 86:return 92;\nbreak;\ncase 87:return 104;\nbreak;\ncase 88:return 104;\nbreak;\ncase 89:return 70;\nbreak;\ncase 90:return 71;\nbreak;\ncase 91:return 72;\nbreak;\ncase 92:return 5;\nbreak;\ncase 93:return 10;\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:([0-9]+(\\.[0-9]{1,2})?|\\.[0-9]{1,2})(?=[ \\n]+))/i,/^(?:@\\{)/i,/^(?:[^\\}]+)/i,/^(?:\\}(?=\\s+as\\s))/i,/^(?:\\})/i,/^(?:[^\\<->\\->:\\n,;@\\s]+(?=@\\{))/i,/^(?:[^<>:\\n,;@\\s]+(?=\\s+as\\s))/i,/^(?:[^<>:\\n,;@]+(?=\\s*[\\n;#]|$))/i,/^(?:[^<>:\\n,;@]*<[^\\n]*)/i,/^(?:[^\\n]+)/i,/^(?:box\\b)/i,/^(?:participant\\b)/i,/^(?:actor\\b)/i,/^(?:create\\b)/i,/^(?:destroy\\b)/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:rect\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:par_over\\b)/i,/^(?:and\\b)/i,/^(?:critical\\b)/i,/^(?:option\\b)/i,/^(?:break\\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:links\\b)/i,/^(?:link\\b)/i,/^(?:properties\\b)/i,/^(?:details\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:title:\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:sequenceDiagram\\b)/i,/^(?:autonumber\\b)/i,/^(?:off\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\\/\\\\\\+\\()\\+<\\->\\->:\\n,;]+((?!(-x|--x|-\\)|--\\)|-\\|\\\\|-\\\\|-\\/|-\\/\\/|-\\|\\/|\\/\\|-|\\\\\\|-|\\/\\/-|\\\\\\\\-|\\/\\|-|--\\|\\\\|--|\\(\\)))[\\-]*[^\\+<\\->\\->:\\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\\)])/i,/^(?:--[\\)])/i,/^(?:--\\|\\\\)/i,/^(?:--\\|\\/)/i,/^(?:--\\\\\\\\)/i,/^(?:--\\/\\/)/i,/^(?:\\/\\|--)/i,/^(?:\\\\\\|--)/i,/^(?:\\/\\/--)/i,/^(?:\\\\\\\\--)/i,/^(?:-\\|\\\\)/i,/^(?:-\\|\\/)/i,/^(?:-\\\\\\\\)/i,/^(?:-\\/\\/)/i,/^(?:\\/\\|-)/i,/^(?:\\\\\\|-)/i,/^(?:\\/\\/-)/i,/^(?:\\\\\\\\-)/i,/^(?::(?:(?:no)?wrap)?[^#\\n;]*)/i,/^(?::)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:\\(\\))/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[53,54],\"inclusive\":false},\"acc_descr\":{\"rules\":[51],\"inclusive\":false},\"acc_title\":{\"rules\":[49],\"inclusive\":false},\"ID\":{\"rules\":[2,3,7,11,12,13,14,15],\"inclusive\":false},\"ALIAS\":{\"rules\":[2,3,21,22],\"inclusive\":false},\"LINE\":{\"rules\":[2,3,34],\"inclusive\":false},\"CONFIG\":{\"rules\":[8,9,10],\"inclusive\":false},\"CONFIG_DATA\":{\"rules\":[],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,4,5,6,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,52,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],\"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 { getConfig } from '../../diagram-api/diagramAPI.js';\nimport * as yaml from 'js-yaml';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { ImperativeState } from '../../utils/imperativeState.js';\nimport { sanitizeText } from '../common/common.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { Actor, AddMessageParams, Box, Message, Note } from './types.js';\nimport type { ParticipantMetaData } from '../../types.js';\n\ninterface SequenceState {\n prevActor?: string;\n actors: Map<string, Actor>;\n createdActors: Map<string, number>;\n destroyedActors: Map<string, number>;\n boxes: Box[];\n messages: Message[];\n notes: Note[];\n sequenceNumbersEnabled: boolean;\n wrapEnabled?: boolean;\n currentBox?: Box;\n lastCreated?: Actor;\n lastDestroyed?: Actor;\n}\n\nconst LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32,\n BIDIRECTIONAL_SOLID: 33,\n BIDIRECTIONAL_DOTTED: 34,\n\n SOLID_TOP: 41,\n SOLID_BOTTOM: 42,\n STICK_TOP: 43,\n STICK_BOTTOM: 44,\n\n SOLID_ARROW_TOP_REVERSE: 45,\n SOLID_ARROW_BOTTOM_REVERSE: 46,\n STICK_ARROW_TOP_REVERSE: 47,\n STICK_ARROW_BOTTOM_REVERSE: 48,\n\n SOLID_TOP_DOTTED: 51,\n SOLID_BOTTOM_DOTTED: 52,\n STICK_TOP_DOTTED: 53,\n STICK_BOTTOM_DOTTED: 54,\n\n SOLID_ARROW_TOP_REVERSE_DOTTED: 55,\n SOLID_ARROW_BOTTOM_REVERSE_DOTTED: 56,\n STICK_ARROW_TOP_REVERSE_DOTTED: 57,\n STICK_ARROW_BOTTOM_REVERSE_DOTTED: 58,\n\n CENTRAL_CONNECTION: 59,\n CENTRAL_CONNECTION_REVERSE: 60,\n CENTRAL_CONNECTION_DUAL: 61,\n} as const;\n\nconst ARROWTYPE = {\n FILLED: 0,\n OPEN: 1,\n} as const;\n\nconst PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2,\n} as const;\n\nexport const PARTICIPANT_TYPE = {\n ACTOR: 'actor',\n BOUNDARY: 'boundary',\n COLLECTIONS: 'collections',\n CONTROL: 'control',\n DATABASE: 'database',\n ENTITY: 'entity',\n PARTICIPANT: 'participant',\n QUEUE: 'queue',\n} as const;\n\nexport class SequenceDB implements DiagramDB {\n private readonly state = new ImperativeState<SequenceState>(() => ({\n prevActor: undefined,\n actors: new Map(),\n createdActors: new Map(),\n destroyedActors: new Map(),\n boxes: [],\n messages: [],\n notes: [],\n sequenceNumbersEnabled: false,\n wrapEnabled: undefined,\n currentBox: undefined,\n lastCreated: undefined,\n lastDestroyed: undefined,\n }));\n\n constructor() {\n // Needed for JISON since it only supports direct properties\n this.apply = this.apply.bind(this);\n this.parseBoxData = this.parseBoxData.bind(this);\n this.parseMessage = this.parseMessage.bind(this);\n\n this.clear();\n\n this.setWrap(getConfig().wrap);\n this.LINETYPE = LINETYPE;\n this.ARROWTYPE = ARROWTYPE;\n this.PLACEMENT = PLACEMENT;\n }\n\n public addBox(data: { text: string; color: string; wrap: boolean }) {\n this.state.records.boxes.push({\n name: data.text,\n wrap: data.wrap ?? this.autoWrap(),\n fill: data.color,\n actorKeys: [],\n });\n this.state.records.currentBox = this.state.records.boxes.slice(-1)[0];\n }\n\n public addActor(\n id: string,\n name: string,\n description: { text: string; wrap?: boolean | null; type: string },\n type: string,\n metadata?: any\n ) {\n let assignedBox = this.state.records.currentBox;\n let doc;\n if (metadata !== undefined) {\n let yamlData;\n // detect if shapeData contains a newline character\n if (!metadata.includes('\\n')) {\n yamlData = '{\\n' + metadata + '\\n}';\n } else {\n yamlData = metadata + '\\n';\n }\n doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as ParticipantMetaData;\n }\n type = doc?.type ?? type;\n\n // If alias is provided in metadata and description is not already set, use the alias\n if (doc?.alias && (!description || description.text === name)) {\n description = { text: doc.alias, wrap: description?.wrap, type };\n }\n\n const old = this.state.records.actors.get(id);\n if (old) {\n // If already set and trying to set to a new one throw error\n if (this.state.records.currentBox && old.box && this.state.records.currentBox !== old.box) {\n throw new Error(\n `A same participant should only be defined in one Box: ${old.name} can't be in '${old.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`\n );\n }\n\n // Don't change the box if already\n assignedBox = old.box ? old.box : this.state.records.currentBox;\n old.box = assignedBox;\n\n // Don't allow description nulling\n if (old && name === old.name && description == null) {\n return;\n }\n }\n\n // Don't allow null descriptions, either\n if (description?.text == null) {\n description = { text: name, type };\n }\n if (type == null || description.text == null) {\n description = { text: name, type };\n }\n\n this.state.records.actors.set(id, {\n box: assignedBox,\n name: name,\n description: description.text,\n wrap: description.wrap ?? this.autoWrap(),\n prevActor: this.state.records.prevActor,\n links: {},\n properties: {},\n actorCnt: null,\n rectData: null,\n type: type ?? 'participant',\n });\n if (this.state.records.prevActor) {\n const prevActorInRecords = this.state.records.actors.get(this.state.records.prevActor);\n if (prevActorInRecords) {\n prevActorInRecords.nextActor = id;\n }\n }\n\n if (this.state.records.currentBox) {\n this.state.records.currentBox.actorKeys.push(id);\n }\n this.state.records.prevActor = id;\n }\n\n private activationCount(part: string) {\n let i;\n let count = 0;\n if (!part) {\n return 0;\n }\n for (i = 0; i < this.state.records.messages.length; i++) {\n if (\n this.state.records.messages[i].type === this.LINETYPE.ACTIVE_START &&\n this.state.records.messages[i].from === part\n ) {\n count++;\n }\n if (\n this.state.records.messages[i].type === this.LINETYPE.ACTIVE_END &&\n this.state.records.messages[i].from === part\n ) {\n count--;\n }\n }\n return count;\n }\n\n public addMessage(\n idFrom: Message['from'],\n idTo: Message['to'],\n message: { text: string; wrap?: boolean },\n answer: Message['answer']\n ) {\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: idFrom,\n to: idTo,\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n answer: answer,\n });\n }\n\n public addSignal(\n idFrom?: Message['from'],\n idTo?: Message['to'],\n message?: { text: string; wrap: boolean },\n messageType?: number,\n activate = false,\n centralConnection?: number\n ) {\n if (messageType === this.LINETYPE.ACTIVE_END) {\n const cnt = this.activationCount(idFrom ?? '');\n if (cnt < 1) {\n // Bail out as there is an activation signal from an inactive participant\n const error = new Error('Trying to inactivate an inactive participant (' + idFrom + ')');\n\n // @ts-ignore: we are passing hash param to the error object, however we should define our own custom error class to make it type safe\n error.hash = {\n text: '->>-',\n token: '->>-',\n line: '1',\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"'ACTIVE_PARTICIPANT'\"],\n };\n throw error;\n }\n }\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: idFrom,\n to: idTo,\n message: message?.text ?? '',\n wrap: message?.wrap ?? this.autoWrap(),\n type: messageType,\n activate,\n centralConnection: centralConnection ?? 0,\n });\n return true;\n }\n\n public hasAtLeastOneBox() {\n return this.state.records.boxes.length > 0;\n }\n\n public hasAtLeastOneBoxWithTitle() {\n return this.state.records.boxes.some((b) => b.name);\n }\n\n public getMessages() {\n return this.state.records.messages;\n }\n\n public getBoxes() {\n return this.state.records.boxes;\n }\n public getActors() {\n return this.state.records.actors;\n }\n public getCreatedActors() {\n return this.state.records.createdActors;\n }\n public getDestroyedActors() {\n return this.state.records.destroyedActors;\n }\n public getActor(id: string) {\n // TODO: do we ever use this function in a way that it might return undefined?\n return this.state.records.actors.get(id)!;\n }\n public getActorKeys() {\n return [...this.state.records.actors.keys()];\n }\n public enableSequenceNumbers() {\n this.state.records.sequenceNumbersEnabled = true;\n }\n public disableSequenceNumbers() {\n this.state.records.sequenceNumbersEnabled = false;\n }\n public showSequenceNumbers() {\n return this.state.records.sequenceNumbersEnabled;\n }\n\n public setWrap(wrapSetting?: boolean) {\n this.state.records.wrapEnabled = wrapSetting;\n }\n\n private extractWrap(text?: string): { cleanedText?: string; wrap?: boolean } {\n if (text === undefined) {\n return {};\n }\n text = text.trim();\n const wrap =\n /^:?wrap:/.exec(text) !== null ? true : /^:?nowrap:/.exec(text) !== null ? false : undefined;\n const cleanedText = (wrap === undefined ? text : text.replace(/^:?(?:no)?wrap:/, '')).trim();\n return { cleanedText, wrap };\n }\n\n public autoWrap() {\n // if setWrap has been called, use that value, otherwise use the value from the config\n // TODO: refactor, always use the config value let setWrap update the config value\n if (this.state.records.wrapEnabled !== undefined) {\n return this.state.records.wrapEnabled;\n }\n return getConfig().sequence?.wrap ?? false;\n }\n\n public clear() {\n this.state.reset();\n commonClear();\n }\n\n public parseMessage(str: string) {\n const trimmedStr = str.trim();\n const { wrap, cleanedText } = this.extractWrap(trimmedStr);\n const message = {\n text: cleanedText,\n wrap,\n };\n log.debug(`parseMessage: ${JSON.stringify(message)}`);\n return message;\n }\n\n // We expect the box statement to be color first then description\n // The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled\n // We extract first segment as color, the rest of the line is considered as text\n public parseBoxData(str: string) {\n const match = /^((?:rgba?|hsla?)\\s*\\(.*\\)|\\w*)(.*)$/.exec(str);\n let color = match?.[1] ? match[1].trim() : 'transparent';\n let title = match?.[2] ? match[2].trim() : undefined;\n\n // check that the string is a color\n if (window?.CSS) {\n if (!window.CSS.supports('color', color)) {\n color = 'transparent';\n title = str.trim();\n }\n } else {\n const style = new Option().style;\n style.color = color;\n if (style.color !== color) {\n color = 'transparent';\n title = str.trim();\n }\n }\n const { wrap, cleanedText } = this.extractWrap(title);\n return {\n text: cleanedText ? sanitizeText(cleanedText, getConfig()) : undefined,\n color,\n wrap,\n };\n }\n\n public readonly LINETYPE: typeof LINETYPE;\n public readonly ARROWTYPE: typeof ARROWTYPE;\n public readonly PLACEMENT: typeof PLACEMENT;\n\n public addNote(\n actor: { actor: string },\n placement: Message['placement'],\n message: { text: string; wrap?: boolean }\n ) {\n const note: Note = {\n actor: actor,\n placement: placement,\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n };\n\n //@ts-ignore: Coerce actor into a [to, from, ...] array\n // eslint-disable-next-line unicorn/prefer-spread\n const actors = [].concat(actor, actor);\n this.state.records.notes.push(note);\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: actors[0],\n to: actors[1],\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n type: this.LINETYPE.NOTE,\n placement: placement,\n });\n }\n\n public addLinks(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n // JSON.parse the text\n try {\n let sanitizedText = sanitizeText(text.text, getConfig());\n sanitizedText = sanitizedText.replace(/=/g, '=');\n sanitizedText = sanitizedText.replace(/&/g, '&');\n const links = JSON.parse(sanitizedText);\n // add the deserialized text to the actor's links field.\n this.insertLinks(actor, links);\n } catch (e) {\n log.error('error while parsing actor link text', e);\n }\n }\n\n public addALink(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n try {\n const links: Record<string, string> = {};\n let sanitizedText = sanitizeText(text.text, getConfig());\n const sep = sanitizedText.indexOf('@');\n sanitizedText = sanitizedText.replace(/=/g, '=');\n sanitizedText = sanitizedText.replace(/&/g, '&');\n const label = sanitizedText.slice(0, sep - 1).trim();\n const link = sanitizedText.slice(sep + 1).trim();\n\n links[label] = link;\n // add the deserialized text to the actor's links field.\n this.insertLinks(actor, links);\n } catch (e) {\n log.error('error while parsing actor link text', e);\n }\n }\n\n private insertLinks(actor: Actor, links: Record<string, string>) {\n if (actor.links == null) {\n actor.links = links;\n } else {\n for (const key in links) {\n actor.links[key] = links[key];\n }\n }\n }\n\n public addProperties(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n // JSON.parse the text\n try {\n const sanitizedText = sanitizeText(text.text, getConfig());\n const properties: Record<string, unknown> = JSON.parse(sanitizedText);\n // add the deserialized text to the actor's property field.\n this.insertProperties(actor, properties);\n } catch (e) {\n log.error('error while parsing actor properties text', e);\n }\n }\n\n private insertProperties(actor: Actor, properties: Record<string, unknown>) {\n if (actor.properties == null) {\n actor.properties = properties;\n } else {\n for (const key in properties) {\n actor.properties[key] = properties[key];\n }\n }\n }\n\n private boxEnd() {\n this.state.records.currentBox = undefined;\n }\n\n public addDetails(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n const elem = document.getElementById(text.text)!;\n\n // JSON.parse the text\n try {\n const text = elem.innerHTML;\n const details = JSON.parse(text);\n // add the deserialized text to the actor's property field.\n if (details.properties) {\n this.insertProperties(actor, details.properties);\n }\n\n if (details.links) {\n this.insertLinks(actor, details.links);\n }\n } catch (e) {\n log.error('error while parsing actor details text', e);\n }\n }\n\n public getActorProperty(actor: Actor, key: string) {\n if (actor?.properties !== undefined) {\n return actor.properties[key];\n }\n\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents\n public apply(param: any | AddMessageParams | AddMessageParams[]) {\n if (Array.isArray(param)) {\n param.forEach((item) => {\n this.apply(item);\n });\n } else {\n switch (param.type) {\n case 'sequenceIndex':\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: undefined,\n to: undefined,\n message: {\n start: param.sequenceIndex,\n step: param.sequenceIndexStep,\n visible: param.sequenceVisible,\n },\n wrap: false,\n type: param.signalType,\n });\n break;\n case 'addParticipant':\n this.addActor(param.actor, param.actor, param.description, param.draw, param.config);\n break;\n case 'createParticipant':\n if (this.state.records.actors.has(param.actor)) {\n throw new Error(\n \"It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior\"\n );\n }\n this.state.records.lastCreated = param.actor;\n this.addActor(param.actor, param.actor, param.description, param.draw, param.config);\n this.state.records.createdActors.set(param.actor, this.state.records.messages.length);\n break;\n case 'destroyParticipant':\n this.state.records.lastDestroyed = param.actor;\n this.state.records.destroyedActors.set(param.actor, this.state.records.messages.length);\n break;\n case 'activeStart':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'centralConnection':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'centralConnectionReverse':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'activeEnd':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'addNote':\n this.addNote(param.actor, param.placement, param.text);\n break;\n case 'addLinks':\n this.addLinks(param.actor, param.text);\n break;\n case 'addALink':\n this.addALink(param.actor, param.text);\n break;\n case 'addProperties':\n this.addProperties(param.actor, param.text);\n break;\n case 'addDetails':\n this.addDetails(param.actor, param.text);\n break;\n case 'addMessage':\n if (this.state.records.lastCreated) {\n if (param.to !== this.state.records.lastCreated) {\n throw new Error(\n 'The created participant ' +\n this.state.records.lastCreated.name +\n ' does not have an associated creating message after its declaration. Please check the sequence diagram.'\n );\n } else {\n this.state.records.lastCreated = undefined;\n }\n } else if (this.state.records.lastDestroyed) {\n if (\n param.to !== this.state.records.lastDestroyed &&\n param.from !== this.state.records.lastDestroyed\n ) {\n throw new Error(\n 'The destroyed participant ' +\n this.state.records.lastDestroyed.name +\n ' does not have an associated destroying message after its declaration. Please check the sequence diagram.'\n );\n } else {\n this.state.records.lastDestroyed = undefined;\n }\n }\n this.addSignal(\n param.from,\n param.to,\n param.msg,\n param.signalType,\n param.activate,\n param.centralConnection\n );\n break;\n case 'boxStart':\n this.addBox(param.boxData);\n break;\n case 'boxEnd':\n this.boxEnd();\n break;\n case 'loopStart':\n this.addSignal(undefined, undefined, param.loopText, param.signalType);\n break;\n case 'loopEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'rectStart':\n this.addSignal(undefined, undefined, param.color, param.signalType);\n break;\n case 'rectEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'optStart':\n this.addSignal(undefined, undefined, param.optText, param.signalType);\n break;\n case 'optEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'altStart':\n this.addSignal(undefined, undefined, param.altText, param.signalType);\n break;\n case 'else':\n this.addSignal(undefined, undefined, param.altText, param.signalType);\n break;\n case 'altEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'setAccTitle':\n setAccTitle(param.text);\n break;\n case 'parStart':\n this.addSignal(undefined, undefined, param.parText, param.signalType);\n break;\n case 'and':\n this.addSignal(undefined, undefined, param.parText, param.signalType);\n break;\n case 'parEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'criticalStart':\n this.addSignal(undefined, undefined, param.criticalText, param.signalType);\n break;\n case 'option':\n this.addSignal(undefined, undefined, param.optionText, param.signalType);\n break;\n case 'criticalEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'breakStart':\n this.addSignal(undefined, undefined, param.breakText, param.signalType);\n break;\n case 'breakEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n }\n }\n }\n\n public setAccTitle = setAccTitle;\n public setAccDescription = setAccDescription;\n public setDiagramTitle = setDiagramTitle;\n public getAccTitle = getAccTitle;\n public getAccDescription = getAccDescription;\n public getDiagramTitle = getDiagramTitle;\n public getConfig() {\n return getConfig().sequence;\n }\n}\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\n\nconst getStyles = (options) => {\n const dropShadow = options.dropShadow ?? 'none';\n const { look } = getConfig();\n\n return `.actor {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n stroke-width: ${options.strokeWidth ?? 1};\n }\n\n rect.actor.outer-path[data-look=\"neo\"] {\n filter: ${dropShadow};\n }\n\n rect.note[data-look=\"neo\"] {\n stroke:${options.noteBorderColor};\n fill:${options.noteBkgColor};\n filter: ${dropShadow};\n }\n\n text.actor > tspan {\n fill: ${options.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${options.actorLineColor};\n }\n\n .innerArc {\n stroke-width: 1.5;\n stroke-dasharray: none;\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${options.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${options.signalColor};\n }\n\n [id$=\"-arrowhead\"] path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .sequenceNumber {\n fill: ${options.sequenceNumberColor};\n }\n\n [id$=\"-sequencenumber\"] {\n fill: ${options.signalColor};\n }\n\n [id$=\"-crosshead\"] path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .messageText {\n fill: ${options.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBkgColor};\n filter: ${look === 'neo' ? dropShadow : 'none'};\n }\n\n .labelText, .labelText > tspan {\n fill: ${options.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${options.loopTextColor};\n stroke: none;\n }\n\n .sectionTitle, .sectionTitle > tspan {\n fill: ${options.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n }\n\n /*\n * No font-weight here, deliberately. Note text renders inside tspan elements, and a weight emitted at\n * tspan level outranks the inline style drawText puts on the parent text element from the\n * sequence.noteFontWeight config key -- so that documented key would never reach the glyphs.\n * The theme variable formerly emitted here is a different value from that config key, and\n * git/styles.js reads it as its own bold-label weight under redux and neo, so it cannot be\n * lowered there either.\n */\n .noteText, .noteText > tspan {\n fill: ${options.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation1 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation2 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${options.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man circle, line {\n fill: ${options.actorBkg};\n stroke-width: 2px;\n }\n\n g rect.rect {\n filter: ${dropShadow};\n stroke: ${options.nodeBorder};\n }\n`;\n};\n\nexport default getStyles;\n", "import { sanitizeUrl } from '@braintree/sanitize-url';\nimport * as configApi from '../../config.js';\nimport { ZERO_WIDTH_SPACE, parseFontSize } from '../../utils.js';\nimport common, {\n calculateMathMLDimensions,\n hasKatex,\n renderKatexSanitized,\n} from '../common/common.js';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\nimport { GLYPH_BAND_HEIGHT, actorLabelHeight, footerBands, headerBands } from './actorBands.js';\n\nexport const ACTOR_TYPE_WIDTH = 18 * 2;\n\n/**\n * The stick figure's geometry, in unscaled units measured down from the top of its classic box:\n * the head circle reaches `TOP` and the feet reach `BOTTOM`. Under `neo` the figure is scaled to\n * fit the shared glyph band (see `actorBands.ts`); under `classic` it draws at these coordinates\n * unchanged, as it always has.\n */\nconst ACTOR_GLYPH_TOP = -5;\nconst ACTOR_GLYPH_BOTTOM = 60;\nconst ACTOR_GLYPH_HEIGHT = ACTOR_GLYPH_BOTTOM - ACTOR_GLYPH_TOP;\n\n/**\n * Band geometry for one participant under `neo`; null under every other look, which keeps each\n * shape's legacy geometry byte-for-byte. See `actorBands.ts` for the model. `actor.height` is the\n * row height here: `calculateActorMargins` gives each actor its own stack height and returns the\n * max into `conf.height`, and `addActorRenderingData` (sequenceRenderer.ts) then raises every\n * actor to that shared value via `getMax(actor.height || conf.height, conf.height)`. That second\n * step is what makes the header datum `actorY + actor.height` one line across the row -- if it is\n * ever refactored away, the datum splits per actor and the band model breaks.\n */\nconst neoBands = (actor, conf, isFooter, actorY) => {\n if (conf.look !== 'neo') {\n return null;\n }\n const textHeight = actorLabelHeight(actor, conf);\n return isFooter ? footerBands(actorY, textHeight) : headerBands(actorY, actor.height, textHeight);\n};\n\nconst TOP_ACTOR_CLASS = 'actor-top';\nconst BOTTOM_ACTOR_CLASS = 'actor-bottom';\nconst ACTOR_BOX_CLASS = 'actor-box';\nconst ACTOR_MAN_FIGURE_CLASS = 'actor-man';\n\n/** Exact set of themes that use color arrays for actor styling */\nconst COLOR_THEMES = new Set(['redux-color', 'redux-dark-color']);\n\n/**\n * Pick a colour for the nth actor from a palette, cycling within that palette's own\n * length.\n *\n * Every call site used to index `bkgColorArray` by `borderColorArray.length` -- one array\n * by the other's length. That is invisible while both ship twelve entries, and wrong the\n * moment they differ: a shorter background palette leaves the overflow actors with\n * `undefined`, so d3 strips the inline fill for some actors and not others.\n *\n * `undefined` for an absent or empty palette is deliberate rather than a fallback colour.\n * `selection.style(name, undefined)` takes d3's remove path, which lets the stylesheet\n * decide -- and that is exactly what `redux-dark-color` relies on, shipping a border\n * palette and an empty background palette so that actors are outlined but not filled.\n *\n * `drawActivation` is the one caller that does add `?? mainBkg`, and deliberately so: an\n * activation rect spans the lifeline it sits on, so it needs an opaque fill or the line\n * shows through it. That is a question of opacity rather than of palette, which is why it\n * belongs at that call site and not in here.\n */\nexport const paletteColor = (palette, index) =>\n palette?.length ? palette[index % palette.length] : undefined;\nexport const drawRect = function (elem, rectData) {\n const rectElement = svgDrawCommon.drawRect(elem, rectData);\n // Call getConfig() here (not at module level) so multi-diagram pages get fresh config\n if (configApi.getConfig().look === 'neo') {\n rectElement.attr('data-look', 'neo');\n }\n return rectElement;\n};\n\nexport const drawPopup = function (elem, actor, minMenuWidth, textAttrs, forceMenus) {\n if (actor.links === undefined || actor.links === null || Object.keys(actor.links).length === 0) {\n return { height: 0, width: 0 };\n }\n\n const links = actor.links;\n const actorCnt = actor.actorCnt;\n const rectData = actor.rectData;\n\n var displayValue = 'none';\n if (forceMenus) {\n displayValue = 'block !important';\n }\n\n const g = elem.append('g');\n g.attr('id', 'actor' + actorCnt + '_popup');\n g.attr('class', 'actorPopupMenu');\n g.attr('display', displayValue);\n var actorClass = '';\n if (rectData.class !== undefined) {\n actorClass = ' ' + rectData.class;\n }\n\n let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;\n\n const rectElem = g.append('rect');\n rectElem.attr('class', 'actorPopupMenuPanel' + actorClass);\n rectElem.attr('x', rectData.x);\n rectElem.attr('y', rectData.height);\n rectElem.attr('fill', rectData.fill);\n rectElem.attr('stroke', rectData.stroke);\n rectElem.attr('width', menuWidth);\n rectElem.attr('height', rectData.height);\n rectElem.attr('rx', rectData.rx);\n rectElem.attr('ry', rectData.ry);\n if (links != null) {\n var linkY = 20;\n for (let key in links) {\n var linkElem = g.append('a');\n var sanitizedLink = sanitizeUrl(links[key]);\n linkElem.attr('xlink:href', sanitizedLink);\n linkElem.attr('target', '_blank');\n\n _drawMenuItemTextCandidateFunc(textAttrs)(\n key,\n linkElem,\n rectData.x + 10,\n rectData.height + linkY,\n menuWidth,\n 20,\n { class: 'actor' },\n textAttrs\n );\n\n linkY += 30;\n }\n }\n\n rectElem.attr('height', linkY);\n\n return { height: rectData.height + linkY, width: menuWidth };\n};\n\nconst popupMenuToggle = function (popId) {\n return (\n \"var pu = document.getElementById('\" +\n popId +\n \"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }\"\n );\n};\n\nexport const drawKatex = async function (elem, textData, msgModel = null) {\n let textElem = elem.append('foreignObject');\n const linesSanitized = await renderKatexSanitized(textData.text, configApi.getConfig());\n\n const divElem = textElem\n .append('xhtml:div')\n .attr('style', 'width: fit-content;')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .html(linesSanitized);\n const dim = divElem.node().getBoundingClientRect();\n\n textElem.attr('height', Math.round(dim.height)).attr('width', Math.round(dim.width));\n\n if (textData.class === 'noteText') {\n const rectElem = elem.node().firstChild;\n\n rectElem.setAttribute('height', dim.height + 2 * textData.textMargin);\n const rectDim = rectElem.getBBox();\n\n textElem\n .attr('x', Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2))\n .attr('y', Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2));\n } else if (msgModel) {\n let { startx, stopx, starty } = msgModel;\n if (startx > stopx) {\n const temp = startx;\n startx = stopx;\n stopx = temp;\n }\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n textElem.attr('x', Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2));\n if (textData.class === 'loopText') {\n textElem.attr('y', Math.round(starty));\n } else {\n textElem.attr('y', Math.round(starty - dim.height));\n }\n }\n\n return [textElem];\n};\n\nexport const drawText = function (elem, textData) {\n let prevTextHeight = 0;\n let textHeight = 0;\n const lines = textData.text.split(common.lineBreakRegex);\n\n const [_textFontSize, _textFontSizePx] = parseFontSize(textData.fontSize);\n\n let textElems = [];\n let dy = 0;\n let yfunc = () => textData.y;\n if (\n textData.valign !== undefined &&\n textData.textMargin !== undefined &&\n textData.textMargin > 0\n ) {\n switch (textData.valign) {\n case 'top':\n case 'start':\n yfunc = () => Math.round(textData.y + textData.textMargin);\n break;\n case 'middle':\n case 'center':\n yfunc = () =>\n Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);\n break;\n case 'bottom':\n case 'end':\n yfunc = () =>\n Math.round(\n textData.y +\n (prevTextHeight + textHeight + 2 * textData.textMargin) -\n textData.textMargin\n );\n break;\n }\n }\n\n if (\n textData.anchor !== undefined &&\n textData.textMargin !== undefined &&\n textData.width !== undefined\n ) {\n switch (textData.anchor) {\n case 'left':\n case 'start':\n textData.x = Math.round(textData.x + textData.textMargin);\n textData.anchor = 'start';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n case 'middle':\n case 'center':\n textData.x = Math.round(textData.x + textData.width / 2);\n textData.anchor = 'middle';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n case 'right':\n case 'end':\n textData.x = Math.round(textData.x + textData.width - textData.textMargin);\n textData.anchor = 'end';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n }\n }\n\n for (let [i, line] of lines.entries()) {\n if (\n textData.textMargin !== undefined &&\n textData.textMargin === 0 &&\n _textFontSize !== undefined\n ) {\n dy = i * _textFontSize;\n }\n\n const textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', yfunc());\n if (textData.anchor !== undefined) {\n textElem\n .attr('text-anchor', textData.anchor)\n .attr('dominant-baseline', textData.dominantBaseline)\n .attr('alignment-baseline', textData.alignmentBaseline);\n }\n if (textData.fontFamily !== undefined) {\n textElem.style('font-family', textData.fontFamily);\n }\n if (_textFontSizePx !== undefined) {\n textElem.style('font-size', _textFontSizePx);\n }\n if (textData.fontWeight !== undefined) {\n textElem.style('font-weight', textData.fontWeight);\n }\n if (textData.fill !== undefined) {\n textElem.attr('fill', textData.fill);\n }\n if (textData.class !== undefined) {\n textElem.attr('class', textData.class);\n }\n if (textData.dy !== undefined) {\n textElem.attr('dy', textData.dy);\n } else if (dy !== 0) {\n textElem.attr('dy', dy);\n }\n\n const text = line || ZERO_WIDTH_SPACE;\n if (textData.tspan) {\n const span = textElem.append('tspan');\n span.attr('x', textData.x);\n if (textData.fill !== undefined) {\n span.attr('fill', textData.fill);\n }\n span.text(text);\n } else {\n textElem.text(text);\n }\n if (\n textData.valign !== undefined &&\n textData.textMargin !== undefined &&\n textData.textMargin > 0\n ) {\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height;\n prevTextHeight = textHeight;\n }\n\n textElems.push(textElem);\n }\n\n return textElems;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n /**\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} cut\n * @returns {any}\n */\n function genPoints(x, y, width, height, cut) {\n return (\n x +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n (y + height - cut) +\n ' ' +\n (x + width - cut * 1.2) +\n ',' +\n (y + height) +\n ' ' +\n x +\n ',' +\n (y + height)\n );\n }\n const polygon = elem.append('polygon');\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));\n polygon.attr('class', 'labelBox');\n\n txtObject.y = txtObject.y + txtObject.height / 2;\n\n drawText(elem, txtObject);\n return polygon;\n};\n\nlet actorCnt = -1;\n\nexport const fixLifeLineHeights = (diagram, actors, actorKeys, conf) => {\n if (!diagram.select) {\n return;\n }\n actorKeys.forEach((actorKey) => {\n const actor = actors.get(actorKey);\n const actorDOM = diagram.select('#actor' + actor.actorCnt);\n if (!conf.mirrorActors && actor.stopy) {\n actorDOM.attr('y2', actor.stopy + actor.height / 2);\n } else if (conf.mirrorActors) {\n actorDOM.attr('y2', actor.stopy);\n }\n });\n};\n\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} actor - The actor to draw.\n * @param {any} conf - DrawText implementation discriminator object\n * @param {boolean} isFooter - If the actor is the footer one\n */\nconst drawActorTypeParticipant = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray } = themeVariables;\n\n const boxplusLineGroup = elem.append('g').lower();\n var g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n if (look === 'neo') {\n g.attr('data-look', 'neo');\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n var cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.rx = 3;\n rect.ry = 3;\n rect.name = actor.name;\n\n if (look === 'neo') {\n rect.rx = 6;\n rect.ry = 6;\n }\n const rectElem = drawRect(g, rect);\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n rectElem.style('stroke', paletteColor(borderColorArray, actorCount));\n rectElem.style('fill', paletteColor(bkgColorArray, actorCount));\n }\n if (look === 'neo') {\n rectElem.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n\n actor.rectData = rect;\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n }\n }\n\n if (!isFooter) {\n g.attr('data-et', 'participant');\n g.attr('data-type', 'participant');\n g.attr('data-id', actor.name);\n // Note: drop-shadow filter is inserted globally via insertDropShadow() in sequenceRenderer.ts\n // \u2014 per-actor filter definitions are redundant and have been removed.\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n if (rectElem.node) {\n const bounds = rectElem.node().getBBox();\n if (conf.look !== 'neo') {\n actor.height = bounds.height;\n height = bounds.height;\n }\n }\n\n return height;\n};\n\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} actor - The actor to draw.\n * @param {any} conf - DrawText implementation discriminator object\n * @param {boolean} isFooter - If the actor is the footer one\n */\nconst drawActorTypeCollections = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray } = themeVariables;\n\n const boxplusLineGroup = elem.append('g').lower();\n var g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n if (look === 'neo') {\n g.attr('data-look', 'neo');\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n var cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.name = actor.name;\n\n // DRAW STACKED RECTANGLES\n const offset = 6;\n if (conf.look === 'neo') {\n // The stack must not cross the datum. Both copies are drawn `offset` shorter, so the shadow\n // copy's bottom edge lands exactly on the lifeline start instead of poking below it.\n rect.height = actor.height - offset;\n }\n const shadowRect = {\n ...rect,\n x: rect.x + (isFooter ? -offset : -offset),\n y: rect.y + (isFooter ? +offset : +offset),\n class: 'actor',\n };\n const rectElem = drawRect(g, rect); // draw main rectangle on top\n const stackedRect = drawRect(g, shadowRect);\n actor.rectData = rect;\n\n if (look === 'neo') {\n g.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n rectElem.style('stroke', paletteColor(borderColorArray, actorCount));\n rectElem.style('fill', paletteColor(bkgColorArray, actorCount));\n stackedRect.style('stroke', paletteColor(borderColorArray, actorCount));\n stackedRect.style('fill', paletteColor(bkgColorArray, actorCount));\n }\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n }\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x - offset,\n rect.y + offset,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n if (rectElem.node) {\n const bounds = rectElem.node().getBBox();\n if (conf.look !== 'neo') {\n actor.height = bounds.height;\n height = bounds.height;\n }\n }\n\n if (!isFooter) {\n g.attr('data-et', 'participant');\n g.attr('data-type', 'collections');\n g.attr('data-id', actor.name);\n }\n\n return height;\n};\n\nconst drawActorTypeQueue = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray } = themeVariables;\n\n const boxplusLineGroup = elem.append('g').lower();\n let g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n if (look === 'neo') {\n g.attr('data-look', 'neo');\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n let cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n g.attr('class', cssclass);\n\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.name = actor.name;\n\n // Cylinder dimensions\n const ry = rect.height / 2;\n const rx = ry / (2.5 + rect.height / 50);\n\n // Cylinder base group\n const cylinderGroup = g.append('g');\n const cylinderArc = g.append('g');\n\n // Main cylinder body\n const cylinderPath = `M ${rect.x},${rect.y + ry}\n a ${rx},${ry} 0 0 0 0,${rect.height}\n h ${rect.width - 2 * rx}\n a ${rx},${ry} 0 0 0 0,-${rect.height}\n Z\n `;\n cylinderGroup.append('path').attr('d', cylinderPath);\n cylinderArc.append('path').attr(\n 'd',\n `M ${rect.x},${rect.y + ry}\n a ${rx},${ry} 0 0 0 0,${rect.height}`\n );\n\n cylinderGroup.attr('transform', `translate(${rx}, ${-(rect.height / 2)})`);\n cylinderArc.attr('transform', `translate(${rect.width - rx}, ${-rect.height / 2})`);\n\n actor.rectData = rect;\n\n if (look === 'neo') {\n cylinderGroup.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n cylinderGroup.style('stroke', paletteColor(borderColorArray, actorCount));\n cylinderGroup.style('fill', paletteColor(bkgColorArray, actorCount));\n cylinderArc.style('stroke', paletteColor(borderColorArray, actorCount));\n cylinderArc.style('fill', paletteColor(bkgColorArray, actorCount));\n }\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n const iconX = rect.x + rect.width - 20;\n const iconY = rect.y + 10;\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, iconX, iconY, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, iconX, iconY, iconSrc);\n }\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n const lastPath = cylinderGroup.select('path:last-child');\n if (lastPath.node()) {\n const bounds = lastPath.node().getBBox();\n if (conf.look !== 'neo') {\n actor.height = bounds.height;\n height = bounds.height;\n }\n }\n\n if (!isFooter) {\n g.attr('data-et', 'participant');\n g.attr('data-type', 'queue');\n g.attr('data-id', actor.name);\n }\n\n return height;\n};\n\nconst drawActorTypeControl = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const bands = neoBands(actor, conf, isFooter, actorY);\n const centerY = bands ? bands.lifelineStartY : actorY + 75;\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray, actorBorder, actorBkg } = themeVariables;\n\n const line = elem.append('g').lower();\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n const cx = actor.x + actor.width / 2;\n const cy = bands ? bands.glyphBottomY - 22 : actorY + 32;\n const r = 22;\n\n actElem\n .append('defs')\n .append('marker')\n .attr('id', diagramId + '-filled-head-control')\n .attr('refX', 11)\n .attr('refY', 5.8)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', '172.5')\n .attr('stroke-width', 1.2)\n .append('path')\n .attr('d', 'M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z');\n\n // Draw the base circle\n actElem\n .append('circle')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('r', r)\n .attr('filter', `${look === 'neo' ? `url(#${dropShadowId(diagramId)})` : ''}`);\n\n // Draw looping arrow as arc path\n actElem\n .append('line')\n .attr('marker-end', 'url(#' + diagramId + '-filled-head-control)')\n .attr('transform', `translate(${cx}, ${cy - r})`);\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n actElem.style('stroke', paletteColor(borderColorArray, actorCount));\n actElem.style('fill', paletteColor(bkgColorArray, actorCount));\n } else {\n actElem.style('stroke', actorBorder);\n actElem.style('fill', actorBkg);\n }\n if (!bands) {\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + 2 * (conf?.sequence?.labelBoxHeight ?? 0);\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n bands ? bands.labelCenterY - rect.height / 2 : rect.y + r + (!isFooter ? 12 : 5),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n if (!isFooter) {\n actElem.attr('data-et', 'participant');\n actElem.attr('data-type', 'control');\n actElem.attr('data-id', actor.name);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeEntity = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const bands = neoBands(actor, conf, isFooter, actorY);\n const centerY = bands ? bands.lifelineStartY : actorY + 75;\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray } = themeVariables;\n\n const line = elem.append('g').lower();\n\n const actElem = elem.append('g');\n let cssClass = 'actor';\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n const cx = actor.x + actor.width / 2;\n const cy = bands ? bands.glyphBottomY - 22 : actorY + (!isFooter ? 25 : 10);\n const r = 22;\n\n actElem\n .append('circle')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('r', r)\n .attr('width', actor.width)\n .attr('height', actor.height);\n\n actElem\n .append('line')\n .attr('x1', cx - r)\n .attr('x2', cx + r)\n .attr('y1', cy + r)\n .attr('y2', cy + r)\n .attr('stroke-width', 2);\n\n if (look === 'neo') {\n actElem.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n actElem.style('stroke', paletteColor(borderColorArray, actorCount));\n actElem.style('fill', paletteColor(bkgColorArray, actorCount));\n }\n\n if (!bands) {\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + (conf?.sequence?.labelBoxHeight ?? 0);\n }\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n bands ? bands.labelCenterY - rect.height / 2 : rect.y + (!isFooter ? 30 : 15),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n if (!bands) {\n // Legacy nudges. Under the band model the circle is placed exactly, so any leftover translate\n // would reintroduce the stagger the model exists to remove -- getBBox does not see transforms,\n // which is how these hid from every measurement while being plainly visible on screen.\n actElem.attr('transform', `translate(${0}, ${isFooter ? r : r / 2 - 5})`);\n }\n if (!isFooter) {\n actElem.attr('data-et', 'participant');\n actElem.attr('data-type', 'entity');\n actElem.attr('data-id', actor.name);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeDatabase = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const bands = neoBands(actor, conf, isFooter, actorY);\n const centerY = bands ? bands.lifelineStartY : actorY + actor.height + 2 * conf.boxTextMargin;\n const { theme, themeVariables, look } = conf;\n const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;\n\n const boxplusLineGroup = elem.append('g').lower();\n let g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n if (look === 'neo') {\n g.attr('data-look', 'neo');\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n\n let cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.name = actor.name;\n\n // Cylinder dimensions. The width stays proportional, but under the band model the height is\n // fixed: `width / 3` let a long participant name make the icon taller, and the icon's height\n // must not be able to move anything below it.\n rect.x = actor.x;\n rect.y = actorY;\n const w = rect.width / 3;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bands ? GLYPH_BAND_HEIGHT : rect.width / 3;\n // Vertical anchor: the drawn cylinder spans cylinderY + ry .. cylinderY + h + ry after the\n // translate below, so this puts its bottom on the glyph band's bottom edge.\n const cylinderY = bands ? bands.glyphBottomY - h - ry : rect.y;\n\n // Cylinder base group\n const cylinderGroup = g.append('g');\n cylinderGroup.attr('class', cssclass);\n\n const d = `\n M ${rect.x},${cylinderY + ry}\n a ${rx},${ry} 0 0 0 ${w},0\n a ${rx},${ry} 0 0 0 -${w},0\n l 0,${h - 2 * ry}\n a ${rx},${ry} 0 0 0 ${w},0\n l 0,-${h - 2 * ry}\n`;\n // Draw the main cylinder body\n cylinderGroup.append('path').attr('d', d);\n if (look === 'neo') {\n cylinderGroup.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n cylinderGroup.style('stroke', paletteColor(borderColorArray, actorCount));\n cylinderGroup.style('fill', paletteColor(bkgColorArray, actorCount));\n } else {\n cylinderGroup.style('stroke', actorBorder);\n }\n\n // Both branches were identical \u2014 simplified to a single unconditional statement\n cylinderGroup.attr('transform', `translate(${w}, ${ry})`);\n actor.rectData = rect;\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n bands ? bands.labelCenterY - rect.height / 2 : rect.y + 35,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n if (!bands) {\n const lastPath = cylinderGroup.select('path:last-child');\n if (lastPath.node()) {\n const bounds = lastPath.node().getBBox();\n actor.height = bounds.height + (conf.sequence.labelBoxHeight ?? 0);\n }\n }\n\n if (!isFooter) {\n g.attr('data-et', 'participant');\n g.attr('data-type', 'database');\n g.attr('data-id', actor.name);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeBoundary = function (elem, actor, conf, isFooter, diagramId, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const bands = neoBands(actor, conf, isFooter, actorY);\n const centerY = bands ? bands.lifelineStartY : actorY + 80;\n const radius = 22;\n const iconCenterY = bands ? bands.glyphBottomY - radius : actorY + 12;\n const line = elem.append('g').lower();\n const { look, theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n actElem\n .append('line')\n .attr('id', 'actor-man-torso' + actorCnt)\n .attr('x1', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y1', iconCenterY)\n .attr('x2', actor.x + actor.width / 2 - 15)\n .attr('y2', iconCenterY);\n\n actElem\n .append('line')\n .attr('id', 'actor-man-arms' + actorCnt)\n .attr('x1', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y1', iconCenterY - 10) // starting Y\n .attr('x2', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y2', iconCenterY + 10); // ending Y\n\n actElem\n .append('circle')\n .attr('cx', actor.x + actor.width / 2)\n .attr('cy', iconCenterY)\n .attr('r', radius);\n\n if (look === 'neo') {\n actElem.attr('filter', `url(#${dropShadowId(diagramId)})`);\n }\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n actElem.style('stroke', paletteColor(borderColorArray, actorCount));\n actElem.style('fill', paletteColor(bkgColorArray, actorCount));\n } else {\n actElem.style('stroke', actorBorder);\n }\n if (!bands) {\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + (conf.sequence.labelBoxHeight ?? 0);\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n bands ? bands.labelCenterY - rect.height / 2 : rect.y + 15,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n if (!bands) {\n // Legacy nudge; see the note in drawActorTypeEntity.\n actElem.attr('transform', `translate(0,${radius / 2 + 10})`);\n }\n\n if (!isFooter) {\n actElem.attr('data-et', 'participant');\n actElem.attr('data-type', 'boundary');\n actElem.attr('data-id', actor.name);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeActor = function (elem, actor, conf, isFooter, actorIndexMap) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const bands = neoBands(actor, conf, isFooter, actorY);\n const centerY = bands ? bands.lifelineStartY : actorY + 80;\n const { theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray, actorBorder } = themeVariables;\n\n const line = elem.append('g').lower();\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name)\n .attr('data-et', 'life-line')\n .attr('data-id', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n if (!isFooter) {\n actElem.attr('data-et', 'participant').attr('data-type', 'actor').attr('data-id', actor.name);\n }\n\n // Under the band model the figure is scaled to fill the shared glyph band, feet on its bottom\n // edge, the same size as the round icons beside it. `classic` draws the legacy coordinates.\n const glyphScale = bands ? GLYPH_BAND_HEIGHT / ACTOR_GLYPH_HEIGHT : 1;\n const gy = (offset) =>\n bands ? bands.glyphBottomY - (ACTOR_GLYPH_BOTTOM - offset) * glyphScale : actorY + offset;\n const gx = (offset) => center + offset * glyphScale;\n\n actElem\n .append('line')\n .attr('id', 'actor-man-torso' + actorCnt)\n .attr('x1', center)\n .attr('y1', gy(25))\n .attr('x2', center)\n .attr('y2', gy(45));\n\n actElem\n .append('line')\n .attr('id', 'actor-man-arms' + actorCnt)\n .attr('x1', gx(-ACTOR_TYPE_WIDTH / 2))\n .attr('y1', gy(33))\n .attr('x2', gx(ACTOR_TYPE_WIDTH / 2))\n .attr('y2', gy(33));\n actElem\n .append('line')\n .attr('x1', gx(-ACTOR_TYPE_WIDTH / 2))\n .attr('y1', gy(60))\n .attr('x2', center)\n .attr('y2', gy(45));\n actElem\n .append('line')\n .attr('x1', center)\n .attr('y1', gy(45))\n .attr('x2', gx(ACTOR_TYPE_WIDTH / 2 - 2))\n .attr('y2', gy(60));\n\n const circle = actElem.append('circle');\n circle.attr('cx', actor.x + actor.width / 2);\n circle.attr('cy', gy(10));\n circle.attr('r', 15 * glyphScale);\n circle.attr('width', actor.width);\n circle.attr('height', actor.height);\n\n if (!bands) {\n // Classic reports the glyph's fixed extent, as it always measured out to.\n actor.height = ACTOR_GLYPH_HEIGHT;\n }\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n rect.rx = 3;\n rect.ry = 3;\n\n const actorCount = actorIndexMap.get(actor.name) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n actElem.style('stroke', paletteColor(borderColorArray, actorCount));\n actElem.style('fill', paletteColor(bkgColorArray, actorCount));\n } else {\n actElem.style('stroke', actorBorder);\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n bands ? bands.labelCenterY - rect.height / 2 : actorY + 35,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n return actor.height;\n};\n\nexport const drawActor = async function (\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n diagObj,\n actorIndexMap\n) {\n const resolvedActorIndexMap =\n actorIndexMap ??\n new Map(\n [...diagObj.db.getActors().values()].map((participant, index) => [participant.name, index])\n );\n\n switch (actor.type) {\n case 'actor':\n return await drawActorTypeActor(elem, actor, conf, isFooter, resolvedActorIndexMap);\n case 'participant':\n return await drawActorTypeParticipant(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'boundary':\n return await drawActorTypeBoundary(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'control':\n return await drawActorTypeControl(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'entity':\n return await drawActorTypeEntity(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'database':\n return await drawActorTypeDatabase(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'collections':\n return await drawActorTypeCollections(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n case 'queue':\n return await drawActorTypeQueue(\n elem,\n actor,\n conf,\n isFooter,\n diagramId,\n resolvedActorIndexMap\n );\n }\n};\n\nexport const drawBox = function (elem, box, conf) {\n const boxplusTextGroup = elem.append('g');\n const g = boxplusTextGroup;\n drawBackgroundRect(g, box);\n if (box.name) {\n _drawTextCandidateFunc(conf)(\n box.name,\n g,\n box.x,\n box.y + conf.boxTextMargin + (box.textMaxHeight || 0) / 2,\n box.width,\n 0,\n { class: 'text' },\n conf\n );\n }\n g.lower();\n};\n\nexport const anchorElement = function (elem) {\n return elem.append('g');\n};\n\n/**\n * Draws an activation in the diagram\n *\n * @param {any} elem - Element to append activation rect.\n * @param {any} bounds - Activation box bounds.\n * @param {any} verticalPos - Precise y coordinate of bottom activation box edge.\n * @param {any} conf - Sequence diagram config object.\n * @param {any} actorActivations - Number of activations on the actor.\n */\nexport const drawActivation = function (\n _elem,\n bounds,\n verticalPos,\n conf,\n actorActivations,\n diagObj,\n actorIndexMap\n) {\n const { theme, themeVariables } = conf;\n const { bkgColorArray, borderColorArray, mainBkg } = themeVariables;\n const rect = svgDrawCommon.getNoteRect();\n const g = bounds.anchored;\n const actor = bounds.actor;\n rect.x = bounds.startx;\n rect.y = bounds.starty;\n rect.class = 'activation' + (actorActivations % 3); // Will evaluate to 0, 1 or 2\n rect.width = bounds.stopx - bounds.startx;\n rect.height = verticalPos - bounds.starty;\n\n const rectElem = drawRect(g, rect);\n const resolvedActorIndexMap =\n actorIndexMap ??\n new Map(\n [...diagObj.db.getActors().values()].map((participant, index) => [participant.name, index])\n );\n const actorCount = resolvedActorIndexMap.get(actor) ?? 0;\n if (COLOR_THEMES.has(theme)) {\n rectElem.style('stroke', paletteColor(borderColorArray, actorCount));\n rectElem.style('fill', paletteColor(bkgColorArray, actorCount) ?? mainBkg);\n }\n};\n\n/**\n * Draws a loop in the diagram\n *\n * @param {any} elem - Element to append the loop to.\n * @param {any} loopModel - LoopModel of the given loop.\n * @param {any} labelText - Text within the loop.\n * @param {any} conf - Diagram configuration\n * @returns {any}\n */\nexport const drawLoop = async function (elem, loopModel, labelText, conf, msg) {\n const {\n boxMargin,\n boxTextMargin,\n labelBoxHeight,\n labelBoxWidth,\n messageFontFamily: fontFamily,\n messageFontSize: fontSize,\n messageFontWeight: fontWeight,\n } = conf;\n const g = elem\n .append('g')\n .attr('data-et', 'control-structure')\n .attr('data-id', 'i' + msg.id);\n const drawLoopLine = function (startx, starty, stopx, stopy) {\n return g\n .append('line')\n .attr('x1', startx)\n .attr('y1', starty)\n .attr('x2', stopx)\n .attr('y2', stopy)\n .attr('class', 'loopLine');\n };\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);\n drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);\n if (loopModel.sections !== undefined) {\n loopModel.sections.forEach(function (item) {\n drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(\n 'stroke-dasharray',\n '3, 3'\n );\n });\n }\n\n let txt = svgDrawCommon.getTextObj();\n txt.text = labelText;\n txt.x = loopModel.startx;\n txt.y = loopModel.starty;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.tspan = false;\n txt.width = Math.max(labelBoxWidth ?? 0, 50);\n txt.height = labelBoxHeight + (conf.look === 'neo' ? 15 : 0) || 20;\n txt.textMargin = boxTextMargin;\n txt.class = 'labelText';\n\n drawLabel(g, txt);\n txt = getTextObj();\n txt.text = loopModel.title;\n txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.starty + boxMargin + boxTextMargin;\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.textMargin = boxTextMargin;\n txt.class = 'loopText';\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = true;\n\n let textElem = hasKatex(txt.text) ? await drawKatex(g, txt, loopModel) : drawText(g, txt);\n\n if (loopModel.sectionTitles !== undefined) {\n for (const [idx, item] of Object.entries(loopModel.sectionTitles)) {\n if (item.message) {\n txt.text = item.message;\n txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;\n txt.class = 'sectionTitle';\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.tspan = false;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = loopModel.wrap;\n\n if (hasKatex(txt.text)) {\n loopModel.starty = loopModel.sections[idx].y;\n await drawKatex(g, txt, loopModel);\n } else {\n drawText(g, txt);\n }\n let sectionHeight = Math.round(\n textElem\n .map((te) => (te._groups || te)[0][0].getBBox().height)\n .reduce((acc, curr) => acc + curr)\n );\n loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);\n }\n }\n }\n\n loopModel.height = Math.round(loopModel.stopy - loopModel.starty);\n return g;\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem Diagram (reference for bounds)\n * @param {any} bounds Shape of the rectangle\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n svgDrawCommon.drawBackgroundRect(elem, bounds);\n};\n\nexport const insertDatabaseIcon = function (elem, id) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', id + '-database')\n .attr('fill-rule', 'evenodd')\n .attr('clip-rule', 'evenodd')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n 'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z'\n );\n};\n\nexport const insertComputerIcon = function (elem, id) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', id + '-computer')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n 'M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z'\n );\n};\n\nexport const insertClockIcon = function (elem, id) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', id + '-clock')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n 'M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z'\n );\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertArrowHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-arrowhead')\n .attr('refX', 7.9)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M -1 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowFilledHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-filled-head')\n .attr('refX', 15.5)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Setup node number. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertSequenceNumber = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-sequencenumber')\n .attr('refX', 15)\n .attr('refY', 15)\n .attr('markerWidth', 60)\n .attr('markerHeight', 40)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', 15)\n .attr('cy', 15)\n .attr('r', 6);\n // .style(\"fill\", '#f00');\n};\n\n/**\n * Setup cross head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowCrossHead = function (elem, id) {\n const defs = elem.append('defs');\n const marker = defs\n .append('marker')\n .attr('id', id + '-crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 4)\n .attr('refY', 4.5);\n // The cross\n marker\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', '0, 0')\n .attr('stroke-width', '1pt')\n .attr('d', 'M 1,2 L 6,7 M 6,2 L 1,7');\n // this is actual shape for arrowhead\n};\n\nexport const dropShadowId = (diagramId) => (diagramId ? `${diagramId}-drop-shadow` : 'drop-shadow');\n\nexport const insertDropShadow = function (elem, conf, diagramId) {\n const { theme } = conf;\n elem\n .append('defs')\n .append('filter')\n .attr('id', dropShadowId(diagramId))\n .attr('height', '130%')\n .attr('width', '130%')\n .append('feDropShadow')\n .attr('dx', '4')\n .attr('dy', '4')\n .attr('stdDeviation', 0)\n .attr('flood-opacity', '0.06')\n .attr('flood-color', `${theme === 'redux' || theme === 'redux-color' ? '#000000' : '#FFFFFF'}`);\n};\nexport const getTextObj = function () {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n anchor: undefined,\n style: '#666',\n width: undefined,\n height: undefined,\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true,\n valign: undefined,\n };\n};\n\nexport const getNoteRect = function () {\n return {\n x: 0,\n y: 0,\n fill: '#EDF2AE',\n stroke: '#666',\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0,\n };\n};\n\nconst _drawTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n */\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n const [_actorFontSize, _actorFontSizePx] = parseFontSize(actorFontSize);\n\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * _actorFontSize - (_actorFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y)\n .style('text-anchor', 'middle')\n .style('font-size', _actorFontSizePx)\n .style('font-weight', actorFontWeight)\n .style('font-family', actorFontFamily);\n text\n .append('tspan')\n .attr('x', x + width / 2)\n .attr('dy', dy)\n .text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n *\n * @param content\n * @param g\n * @param x\n * @param y\n * @param width\n * @param height\n * @param textAttrs\n * @param conf\n */\n async function byKatex(content, g, x, y, width, height, textAttrs, conf) {\n // TODO duplicate render calls, optimize\n\n const dim = await calculateMathMLDimensions(content, configApi.getConfig());\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x + width / 2 - dim.width / 2)\n .attr('y', y + height / 2 - dim.height / 2)\n .attr('width', dim.width)\n .attr('height', dim.height);\n\n const text = f.append('xhtml:div').style('height', '100%').style('width', '100%');\n\n text\n .append('div')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .html(await renderKatexSanitized(content, configApi.getConfig()));\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf, hasKatex = false) {\n if (hasKatex) {\n return byKatex;\n }\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nconst _drawMenuItemTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n */\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .style('text-anchor', 'start')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * actorFontSize - (actorFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .style('text-anchor', 'start')\n .style('font-size', actorFontSize)\n .style('font-weight', actorFontWeight)\n .style('font-family', actorFontFamily);\n text.append('tspan').attr('x', x).attr('dy', dy).text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertSolidTopArrowHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-solidTopArrowHead')\n .attr('refX', 7.9)\n .attr('refY', 7.25)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 10 8 L 0 8 z'); // this is actual shape for arrowhead\n};\n\nexport const insertSolidBottomArrowHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-solidBottomArrowHead')\n .attr('refX', 7.9)\n .attr('refY', 0.75)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 10 0 L 0 8 z');\n};\n\nexport const insertStickTopArrowHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-stickTopArrowHead')\n .attr('refX', 7.5)\n .attr('refY', 7)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 0 L 7 7')\n .attr('stroke', 'black')\n .attr('stroke-width', 1.5)\n .attr('fill', 'none');\n};\n\nexport const insertStickBottomArrowHead = function (elem, id) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '-stickBottomArrowHead')\n .attr('refX', 7.5)\n .attr('refY', 0)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M 0 7 L 7 0')\n .attr('stroke', 'black')\n .attr('stroke-width', 1.5)\n .attr('fill', 'none');\n};\n\nexport default {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n drawBox,\n drawPopup,\n anchorElement,\n drawActivation,\n drawLoop,\n drawBackgroundRect,\n insertArrowHead,\n insertArrowFilledHead,\n insertSequenceNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon,\n getTextObj,\n getNoteRect,\n fixLifeLineHeights,\n sanitizeUrl,\n insertDropShadow,\n insertSolidTopArrowHead,\n insertSolidBottomArrowHead,\n insertStickTopArrowHead,\n insertStickBottomArrowHead,\n};\n", "/**\n * The vertical band model for sequence participants under the `neo` look.\n *\n * Before this module, vertical geometry was the emergent output of each shape function: guess the\n * lifeline position from the incoming height, draw the glyph at hardcoded offsets, measure itself\n * with `getBBox()`, overwrite `actor.height` with the measurement plus a per-shape fudge\n * (`labelBoxHeight` once for `boundary` and `entity`, twice for `control`), then draw the label\n * with a mix of the old and new heights. The footer redrew with the corrupted heights and its own\n * separate offsets. Fixing any one shape moved another; three rounds of that preceded this file.\n *\n * The model instead states the layout once, and everything draws from it:\n *\n * ```\n * rowTop (actor.starty)\n * [ air, when this actor's stack is shorter than the row's ]\n * [ glyph band, GLYPH_BAND_HEIGHT tall, glyphs bottom-aligned ]\n * GLYPH_LABEL_GAP\n * [ label block, measured text height, bottom-anchored ]\n * LABEL_LIFELINE_GAP\n * lifelineStart = rowTop + rowHeight <- one datum line for the whole row\n * ...\n * lifelineEnd (actor.stopy) <- one datum line for the whole row\n * LABEL_LIFELINE_GAP\n * [ glyph band ]\n * GLYPH_LABEL_GAP\n * [ label block, top-anchored, growing downward ]\n * ```\n *\n * Everything is anchored at the datum lines: with one line of text -- the usual case -- every\n * outside-the-shape label sits on one baseline, and a multiline label grows away from the datum\n * (upward in the header, downward in the footer) instead of pushing the lifeline around. The box\n * shapes (`participant`, `queue`, `collections`) span the full row so their bottom edge sits on\n * the datum and their label stays centred in the box.\n *\n * The `classic` look does not use this module; its per-shape legacy values are pinned in\n * `lifelineStart.spec.ts` and must not move.\n */\nimport utils from '../../utils.js';\n\n/** Height of the glyph band. The round icons set it: a 22 unit circle plus its underline. */\nexport const GLYPH_BAND_HEIGHT = 44;\n\n/** Air between the bottom of the glyph and the top of the label block. */\nexport const GLYPH_LABEL_GAP = 6;\n\n/** Air between the bottom of the label block and the lifeline datum. */\nexport const LABEL_LIFELINE_GAP = 6;\n\ninterface ActorLike {\n description: string;\n actorTextHeight?: number;\n}\n\ninterface ActorFontConf {\n actorFontFamily?: string;\n actorFontSize?: string | number;\n actorFontWeight?: string | number;\n}\n\n/**\n * Measured height of the actor's label block. `calculateActorMargins` stashes the measurement it\n * already takes; the fallback keeps isolated `drawActor` calls (tests, external callers) working.\n */\nexport const actorLabelHeight = (actor: ActorLike, conf: ActorFontConf): number =>\n actor.actorTextHeight ??\n utils.calculateTextDimensions(actor.description ?? '', {\n fontFamily: conf.actorFontFamily,\n fontSize: conf.actorFontSize,\n fontWeight: conf.actorFontWeight,\n } as Parameters<typeof utils.calculateTextDimensions>[1]).height;\n\n/** The stack an icon-family actor needs above the datum: glyph, gap, label, gap. */\nexport const actorStackHeight = (textHeight: number): number =>\n GLYPH_BAND_HEIGHT + GLYPH_LABEL_GAP + textHeight + LABEL_LIFELINE_GAP;\n\nexport interface HeaderBands {\n /** The datum: where this row's lifelines start. */\n lifelineStartY: number;\n /** Bottom edge of the glyph band; glyphs are drawn ending here. */\n glyphBottomY: number;\n /** Vertical centre of the label block. */\n labelCenterY: number;\n}\n\nexport interface FooterBands {\n /** Top edge of the glyph band below the datum. */\n glyphTopY: number;\n /** Bottom edge of the glyph band. */\n glyphBottomY: number;\n /** Vertical centre of the label block. */\n labelCenterY: number;\n /** Total height the footer stack occupies below the datum. */\n stackHeight: number;\n}\n\n/**\n * Header geometry for one actor. `rowHeight` is the row's shared height (`conf.height` after\n * `calculateActorMargins`), which is what makes the datum one line rather than eight.\n */\nexport const headerBands = (actorY: number, rowHeight: number, textHeight: number): HeaderBands => {\n const lifelineStartY = actorY + rowHeight;\n const labelCenterY = lifelineStartY - LABEL_LIFELINE_GAP - textHeight / 2;\n return {\n lifelineStartY,\n glyphBottomY: lifelineStartY - LABEL_LIFELINE_GAP - textHeight - GLYPH_LABEL_GAP,\n labelCenterY,\n };\n};\n\n/** Footer geometry: the same stack, top-anchored at the datum, growing downward. */\nexport const footerBands = (actorY: number, textHeight: number): FooterBands => {\n const glyphTopY = actorY + LABEL_LIFELINE_GAP;\n const glyphBottomY = glyphTopY + GLYPH_BAND_HEIGHT;\n return {\n glyphTopY,\n glyphBottomY,\n labelCenterY: glyphBottomY + GLYPH_LABEL_GAP + textHeight / 2,\n stackHeight: actorStackHeight(textHeight),\n };\n};\n", "// @ts-nocheck TODO: fix file\nimport { select } from 'd3';\nimport svgDraw, { drawKatex, ACTOR_TYPE_WIDTH, drawText, fixLifeLineHeights } from './svgDraw.js';\nimport { log } from '../../logger.js';\nimport common, { calculateMathMLDimensions, hasKatex } from '../common/common.js';\nimport { getUrl } from '../common/common.js';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { actorStackHeight } from './actorBands.js';\nimport assignWithDepth from '../../assignWithDepth.js';\nimport utils from '../../utils.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { Diagram } from '../../Diagram.js';\nimport { PARTICIPANT_TYPE } from './sequenceDb.js';\n\nlet conf = {};\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n },\n verticalPos: 0,\n sequenceItems: [],\n activations: [],\n models: {\n getHeight: function () {\n return (\n Math.max.apply(\n null,\n this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)\n ) +\n (this.loops.length === 0\n ? 0\n : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n (this.messages.length === 0\n ? 0\n : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n (this.notes.length === 0\n ? 0\n : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h))\n );\n },\n clear: function () {\n this.actors = [];\n this.boxes = [];\n this.loops = [];\n this.messages = [];\n this.notes = [];\n },\n addBox: function (boxModel) {\n this.boxes.push(boxModel);\n },\n addActor: function (actorModel) {\n this.actors.push(actorModel);\n },\n addLoop: function (loopModel) {\n this.loops.push(loopModel);\n },\n addMessage: function (msgModel) {\n this.messages.push(msgModel);\n },\n addNote: function (noteModel) {\n this.notes.push(noteModel);\n },\n lastActor: function () {\n return this.actors[this.actors.length - 1];\n },\n lastLoop: function () {\n return this.loops[this.loops.length - 1];\n },\n lastMessage: function () {\n return this.messages[this.messages.length - 1];\n },\n lastNote: function () {\n return this.notes[this.notes.length - 1];\n },\n actors: [],\n boxes: [],\n loops: [],\n messages: [],\n notes: [],\n },\n init: function () {\n this.sequenceItems = [];\n this.activations = [];\n this.models.clear();\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n };\n this.verticalPos = 0;\n setConf(getConfig());\n },\n updateVal: function (obj, key, val, fun) {\n if (obj[key] === undefined) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _self = this;\n let cnt = 0;\n /** @param type - Either `activation` or `undefined` */\n function updateFn(type?: 'activation') {\n return function updateItemBounds(item) {\n cnt++;\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1;\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n }\n };\n }\n\n this.sequenceItems.forEach(updateFn());\n this.activations.forEach(updateFn('activation'));\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = common.getMin(startx, stopx);\n const _stopx = common.getMax(startx, stopx);\n const _starty = common.getMin(starty, stopy);\n const _stopy = common.getMax(starty, stopy);\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min);\n this.updateVal(bounds.data, 'starty', _starty, Math.min);\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n newActivation: function (message, diagram, actors) {\n const actorRect = actors.get(message.from);\n const stackedSize = actorActivations(message.from).length || 0;\n const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: undefined,\n actor: message.from,\n anchored: svgDraw.anchorElement(diagram),\n });\n },\n endActivation: function (message) {\n // find most recent activation for given actor\n const lastActorActivationIdx = this.activations\n .map(function (activation) {\n return activation.actor;\n })\n .lastIndexOf(message.from);\n return this.activations.splice(lastActorActivationIdx, 1)[0];\n },\n createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n return {\n startx: undefined,\n starty: this.verticalPos,\n stopx: undefined,\n stopy: undefined,\n title: title.message,\n wrap: title.wrap,\n width: title.width,\n height: 0,\n fill: fill,\n };\n },\n newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n this.sequenceItems.push(this.createLoop(title, fill));\n },\n endLoop: function () {\n return this.sequenceItems.pop();\n },\n isLoopOverlap: function () {\n return this.sequenceItems.length\n ? this.sequenceItems[this.sequenceItems.length - 1].overlap\n : false;\n },\n addSectionToLoop: function (message) {\n const loop = this.sequenceItems.pop();\n loop.sections = loop.sections || [];\n loop.sectionTitles = loop.sectionTitles || [];\n loop.sections.push({ y: bounds.getVerticalPos(), height: 0 });\n loop.sectionTitles.push(message);\n this.sequenceItems.push(loop);\n },\n saveVerticalPos: function () {\n if (this.isLoopOverlap()) {\n this.savedVerticalPos = this.verticalPos;\n }\n },\n resetVerticalPos: function () {\n if (this.isLoopOverlap()) {\n this.verticalPos = this.savedVerticalPos;\n }\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = common.getMax(this.data.stopy, this.verticalPos);\n },\n getVerticalPos: function () {\n return this.verticalPos;\n },\n getBounds: function () {\n return { bounds: this.data, models: this.models };\n },\n};\n\n/** Options for drawing a note in {@link drawNote} */\ninterface NoteModel {\n /** x axis start position */\n startx: number;\n /** y axis position */\n starty: number;\n /** the message to be shown */\n message: string;\n /** Set this with a custom width to override the default configured width. */\n width: number;\n}\n\n/**\n * Draws a note in the diagram with the attached line\n *\n * @param elem - The diagram to draw to.\n * @param noteModel - Note model options.\n */\nconst drawNote = async function (elem: any, noteModel: NoteModel, id: string) {\n bounds.bumpVerticalPos(conf.boxMargin);\n noteModel.height = conf.boxMargin;\n noteModel.starty = bounds.getVerticalPos();\n const rect = svgDrawCommon.getNoteRect();\n rect.x = noteModel.startx;\n rect.y = noteModel.starty;\n rect.width = noteModel.width || conf.width;\n rect.class = 'note';\n\n const g = elem.append('g');\n g.attr('data-et', 'note');\n g.attr('data-id', 'i' + id);\n const rectElem = svgDraw.drawRect(g, rect);\n const textObj = svgDrawCommon.getTextObj();\n textObj.x = noteModel.startx;\n textObj.y = noteModel.starty;\n textObj.width = rect.width;\n textObj.dy = '1em';\n textObj.text = noteModel.message;\n textObj.class = 'noteText';\n textObj.fontFamily = conf.noteFontFamily;\n textObj.fontSize = conf.noteFontSize;\n textObj.fontWeight = conf.noteFontWeight;\n textObj.anchor = conf.noteAlign;\n textObj.textMargin = conf.noteMargin;\n textObj.valign = 'center';\n\n const textElem = hasKatex(textObj.text) ? await drawKatex(g, textObj) : drawText(g, textObj);\n\n const textHeight = Math.round(\n textElem\n .map((te) => (te._groups || te)[0][0].getBBox().height)\n .reduce((acc, curr) => acc + curr)\n );\n\n rectElem.attr('height', textHeight + 2 * conf.noteMargin);\n noteModel.height += textHeight + 2 * conf.noteMargin;\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin);\n noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin;\n noteModel.stopx = noteModel.startx + rect.width;\n bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);\n bounds.models.addNote(noteModel);\n};\n\nconst drawCentralConnection = function (\n elem: any,\n msg: any,\n msgModel: any,\n diagObj: Diagram,\n startx: number,\n stopx: number,\n lineStartY: number\n) {\n const actors = diagObj.db.getActors();\n const fromActor = actors.get(msg.from);\n const toActor = actors.get(msg.to);\n const isAutoNumberOn = msgModel.sequenceVisible;\n let fromCenter = fromActor.x + fromActor.width / 2;\n let toCenter = toActor.x + toActor.width / 2;\n\n // Determine arrow direction: left-to-right or right-to-left\n const isLeftToRight = fromCenter <= toCenter;\n const isReverse = isReverseArrowType(msg, diagObj);\n\n const g = elem.append('g');\n\n const CENTRAL_CONNECTION_CIRCLE_OFFSET = 16.5;\n\n const getCircleOffset = (isLeftToRight: boolean, isReverse: boolean) => {\n const baseOffset = isLeftToRight\n ? CENTRAL_CONNECTION_CIRCLE_OFFSET\n : -CENTRAL_CONNECTION_CIRCLE_OFFSET;\n return isReverse ? -baseOffset : baseOffset;\n };\n\n const drawCircle = (cx: number) => {\n g.append('circle')\n .attr('cx', cx)\n .attr('cy', lineStartY)\n .attr('r', 5)\n .attr('width', 10)\n .attr('height', 10);\n };\n\n const { CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL } =\n diagObj.db.LINETYPE;\n\n // Calculate circle position adjustments when autonumber is enabled\n if (isAutoNumberOn) {\n switch (msg.centralConnection) {\n case CENTRAL_CONNECTION:\n // Pattern: actor ->>() actor - circle at destination\n if (isReverse) {\n toCenter += getCircleOffset(isLeftToRight, true);\n }\n // No adjustment for normal arrows\n break;\n\n case CENTRAL_CONNECTION_REVERSE:\n // Pattern: actor ()->> actor - circle at source\n if (!isReverse) {\n fromCenter += getCircleOffset(isLeftToRight, false);\n }\n // No adjustment for reverse arrows\n break;\n\n case CENTRAL_CONNECTION_DUAL:\n // Pattern: actor ()->>() actor - circles at both ends\n if (isReverse) {\n toCenter += getCircleOffset(isLeftToRight, true);\n } else {\n fromCenter += getCircleOffset(isLeftToRight, false);\n }\n break;\n }\n }\n\n // Draw circles based on central connection type\n switch (msg.centralConnection) {\n case CENTRAL_CONNECTION:\n drawCircle(toCenter);\n break;\n case CENTRAL_CONNECTION_REVERSE:\n drawCircle(fromCenter);\n break;\n case CENTRAL_CONNECTION_DUAL:\n drawCircle(fromCenter);\n drawCircle(toCenter);\n break;\n }\n};\n\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight,\n };\n};\nconst noteFont = (cnf) => {\n return {\n fontFamily: cnf.noteFontFamily,\n fontSize: cnf.noteFontSize,\n fontWeight: cnf.noteFontWeight,\n };\n};\nconst actorFont = (cnf) => {\n return {\n fontFamily: cnf.actorFontFamily,\n fontSize: cnf.actorFontSize,\n fontWeight: cnf.actorFontWeight,\n };\n};\n\n/**\n * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the\n * message so it can be drawn later. We do not draw the message at this point so the arrowhead can\n * be on top of the activation box.\n *\n * @param _diagram - The parent of the message element.\n * @param msgModel - The model containing fields describing a message\n * @returns `lineStartY` - The Y coordinate at which the message line starts\n */\nasync function boundMessage(_diagram, msgModel): Promise<number> {\n bounds.bumpVerticalPos(10);\n const { startx, stopx, message } = msgModel;\n const lines = common.splitBreaks(message).length;\n const isKatexMsg = hasKatex(message);\n const textDims = isKatexMsg\n ? await calculateMathMLDimensions(message, getConfig())\n : utils.calculateTextDimensions(message, messageFont(conf));\n\n if (!isKatexMsg) {\n const lineHeight = textDims.height / lines;\n msgModel.height += lineHeight;\n bounds.bumpVerticalPos(lineHeight);\n }\n\n let lineStartY;\n let totalOffset = textDims.height - 10;\n const textWidth = textDims.width;\n\n if (startx === stopx) {\n lineStartY = bounds.getVerticalPos() + totalOffset;\n if (!conf.rightAngles) {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n }\n totalOffset += 30;\n const dx = common.getMax(textWidth / 2, conf.width / 2);\n bounds.insert(\n startx - dx,\n bounds.getVerticalPos() - 10 + totalOffset,\n stopx + dx,\n bounds.getVerticalPos() + 30 + totalOffset\n );\n } else {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n bounds.insert(startx, lineStartY - 10, stopx, lineStartY);\n }\n bounds.bumpVerticalPos(totalOffset);\n msgModel.height += totalOffset;\n msgModel.stopy = msgModel.starty + msgModel.height;\n bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);\n\n return lineStartY;\n}\n\n/**\n * Draws a message. Note that the bounds have previously been updated by boundMessage.\n *\n * @param diagram - The parent of the message element\n * @param msgModel - The model containing fields describing a message\n * @param lineStartY - The Y coordinate at which the message line starts\n * @param diagObj - The diagram object.\n */\nexport const drawMessage = async function (\n diagram,\n msgModel,\n lineStartY: number,\n diagObj: Diagram,\n msg,\n diagramId: string\n) {\n const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel;\n const textDims = utils.calculateTextDimensions(message, messageFont(conf));\n const textObj = svgDrawCommon.getTextObj();\n textObj.x = Math.min(startx, stopx);\n textObj.y = starty + 10;\n textObj.width = Math.abs(stopx - startx);\n textObj.class = 'messageText';\n textObj.dy = '1em';\n textObj.text = message;\n textObj.fontFamily = conf.messageFontFamily;\n textObj.fontSize = conf.messageFontSize;\n textObj.fontWeight = conf.messageFontWeight;\n textObj.anchor = conf.messageAlign;\n textObj.valign = 'center';\n textObj.textMargin = conf.wrapPadding;\n textObj.tspan = false;\n\n if (hasKatex(textObj.text)) {\n await drawKatex(diagram, textObj, { startx, stopx, starty: lineStartY });\n } else {\n drawText(diagram, textObj);\n }\n\n const textWidth = textDims.width;\n\n let line;\n if (startx === stopx) {\n const isAutoNumberOn = sequenceVisible || conf.showSequenceNumbers;\n const isReverse = isReverseArrowType(msg, diagObj);\n const isBidirectional = isBidirectionalArrowType(msg, diagObj);\n const lineStartX = startx + (isAutoNumberOn && (isReverse || isBidirectional) ? 10 : 0);\n\n if (conf.rightAngles) {\n line = diagram\n .append('path')\n .attr(\n 'd',\n `M ${lineStartX},${lineStartY} H ${\n startx + common.getMax(conf.width / 2, textWidth / 2)\n } V ${lineStartY + 25} H ${startx}`\n );\n } else {\n line = diagram\n .append('path')\n .attr(\n 'd',\n 'M ' +\n lineStartX +\n ',' +\n lineStartY +\n ' C ' +\n (lineStartX + 60) +\n ',' +\n (lineStartY - 10) +\n ' ' +\n (startx + 60) +\n ',' +\n (lineStartY + 30) +\n ' ' +\n startx +\n ',' +\n (lineStartY + 20)\n );\n }\n // Draw central connection circles for self-connection arrows\n if (hasCentralConnection(msg, diagObj)) {\n drawCentralConnection(diagram, msg, msgModel, diagObj, startx, stopx, lineStartY);\n }\n } else {\n line = diagram.append('line');\n line.attr('x1', startx);\n line.attr('y1', lineStartY);\n line.attr('x2', stopx);\n line.attr('y2', lineStartY);\n if (hasCentralConnection(msg, diagObj)) {\n drawCentralConnection(diagram, msg, msgModel, diagObj, startx, stopx, lineStartY);\n }\n }\n // Make an SVG Container\n // Draw the line\n if (\n type === diagObj.db.LINETYPE.DOTTED ||\n type === diagObj.db.LINETYPE.DOTTED_CROSS ||\n type === diagObj.db.LINETYPE.DOTTED_POINT ||\n type === diagObj.db.LINETYPE.DOTTED_OPEN ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED ||\n type === diagObj.db.LINETYPE.SOLID_TOP_DOTTED ||\n type === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_TOP_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED\n ) {\n line.style('stroke-dasharray', '3, 3');\n line.attr('class', 'messageLine1');\n } else {\n line.attr('class', 'messageLine0');\n }\n\n line.attr('data-et', 'message');\n line.attr('data-id', 'i' + msgModel.id);\n line.attr('data-from', msgModel.from);\n line.attr('data-to', msgModel.to);\n\n let url = '';\n if (conf.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n\n line.attr('stroke-width', 2);\n line.attr('stroke', 'none'); // handled by theme/css anyway\n line.style('fill', 'none'); // remove any fill colour\n\n if (type === diagObj.db.LINETYPE.SOLID_TOP || type === diagObj.db.LINETYPE.SOLID_TOP_DOTTED) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-solidTopArrowHead)');\n }\n if (\n type === diagObj.db.LINETYPE.SOLID_BOTTOM ||\n type === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED\n ) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-solidBottomArrowHead)');\n }\n if (type === diagObj.db.LINETYPE.STICK_TOP || type === diagObj.db.LINETYPE.STICK_TOP_DOTTED) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-stickTopArrowHead)');\n }\n if (\n type === diagObj.db.LINETYPE.STICK_BOTTOM ||\n type === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED\n ) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-stickBottomArrowHead)');\n }\n\n if (\n type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#' + diagramId + '-solidBottomArrowHead)');\n }\n if (\n type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#' + diagramId + '-solidTopArrowHead)');\n }\n if (\n type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE ||\n type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#' + diagramId + '-stickBottomArrowHead)');\n }\n if (\n type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE ||\n type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#' + diagramId + '-stickTopArrowHead)');\n }\n\n if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-arrowhead)');\n }\n if (\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#' + diagramId + '-arrowhead)');\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-arrowhead)');\n }\n if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-filled-head)');\n }\n\n if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) {\n line.attr('marker-end', 'url(' + url + '#' + diagramId + '-crosshead)');\n }\n\n // add node number\n if (sequenceVisible || conf.showSequenceNumbers) {\n const isBidirectional =\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED;\n\n const isReverseArrowType =\n type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE ||\n type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE ||\n type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED ||\n type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE ||\n type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED;\n\n const SEQUENCE_NUMBER_RADIUS = 6;\n const hasCentralConn = hasCentralConnection(msg, diagObj);\n let lineStartX = startx;\n let lineStopX = stopx;\n\n if (isBidirectional) {\n // For bidirectional arrows, adjust the start position\n if (startx < stopx) {\n lineStartX = startx + SEQUENCE_NUMBER_RADIUS * 2;\n } else {\n lineStartX = startx - SEQUENCE_NUMBER_RADIUS + (hasCentralConn ? -5 : 0);\n lineStartX +=\n msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_DUAL ||\n msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE\n ? -7.5\n : 0;\n }\n line.attr('x1', lineStartX);\n } else if (isReverseArrowType) {\n // For reverse arrows, adjust the stop position (where the arrowhead is)\n if (stopx > startx) {\n lineStopX = stopx - 2 * SEQUENCE_NUMBER_RADIUS;\n } else {\n lineStopX = stopx - SEQUENCE_NUMBER_RADIUS;\n lineStartX +=\n msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_DUAL ||\n msg?.centralConnection === diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE\n ? -7.5\n : 0;\n }\n lineStopX += hasCentralConn ? 15 : 0;\n\n line.attr('x2', lineStopX);\n line.attr('x1', lineStartX);\n } else {\n line.attr('x1', startx + SEQUENCE_NUMBER_RADIUS);\n }\n\n // Calculate autonumber X position\n let autonumberX = 0;\n const isSelfMessage = startx === stopx;\n const isLeftToRight = startx <= stopx;\n\n if (isSelfMessage) {\n autonumberX = msgModel.fromBounds + 1;\n } else if (isReverseArrowType) {\n autonumberX = isLeftToRight ? msgModel.toBounds - 1 : msgModel.fromBounds + 1;\n } else {\n autonumberX = isLeftToRight ? msgModel.fromBounds + 1 : msgModel.toBounds - 1;\n }\n\n let fontSize = '12px';\n const sequenceIndexLength = sequenceIndex.toString().length;\n\n if (sequenceIndexLength > 5) {\n fontSize = '7px';\n } else if (sequenceIndexLength > 3) {\n fontSize = '9px';\n }\n\n diagram\n .append('line')\n .attr('x1', autonumberX)\n .attr('y1', lineStartY)\n .attr('x2', autonumberX)\n .attr('y2', lineStartY)\n .attr('stroke-width', 0)\n .attr('marker-start', 'url(' + url + '#' + diagramId + '-sequencenumber)');\n\n diagram\n .append('text')\n .attr('x', autonumberX)\n .attr('y', lineStartY + 4)\n .attr('font-family', 'sans-serif')\n .attr('font-size', fontSize)\n .attr('text-anchor', 'middle')\n .attr('class', 'sequenceNumber')\n .text(sequenceIndex);\n }\n};\n\nconst addActorRenderingData = function (\n diagram,\n actors,\n createdActors: Map<string, any>,\n actorKeys,\n verticalPos,\n messages,\n isFooter\n) {\n let prevWidth = 0;\n let prevMargin = 0;\n let prevBox = undefined;\n let maxHeight = 0;\n\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n const box = actor.box;\n\n // end of box\n if (prevBox && prevBox != box) {\n if (!isFooter) {\n bounds.models.addBox(prevBox);\n }\n prevMargin += conf.boxMargin + prevBox.margin;\n }\n\n // new box\n if (box && box != prevBox) {\n if (!isFooter) {\n box.x = prevWidth + prevMargin;\n box.y = verticalPos;\n }\n prevMargin += box.margin;\n }\n\n // Add some rendering data to the object\n actor.width = common.getMax(actor.width || conf.width, conf.width);\n actor.height = common.getMax(actor.height || conf.height, conf.height);\n actor.margin = actor.margin || conf.actorMargin;\n\n maxHeight = common.getMax(maxHeight, actor.height);\n\n // if the actor is created by a message, widen margin\n if (createdActors.get(actor.name)) {\n prevMargin += actor.width / 2;\n }\n\n actor.x = prevWidth + prevMargin;\n actor.starty = bounds.getVerticalPos();\n\n bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);\n\n prevWidth += actor.width + prevMargin;\n if (actor.box) {\n actor.box.width = prevWidth + box.margin - actor.box.x;\n }\n prevMargin = actor.margin;\n prevBox = actor.box;\n bounds.models.addActor(actor);\n }\n\n // end of box\n if (prevBox && !isFooter) {\n bounds.models.addBox(prevBox);\n }\n\n // Add a margin between the actor boxes and the first arrow\n bounds.bumpVerticalPos(maxHeight);\n};\n\nexport const drawActors = async function (\n diagram,\n actors,\n actorKeys,\n isFooter,\n diagramId,\n diagObj,\n actorIndexMap\n) {\n if (!isFooter) {\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n // Draw the box with the attached line\n await svgDraw.drawActor(diagram, actor, conf, false, diagramId, diagObj, actorIndexMap);\n }\n } else {\n let maxHeight = 0;\n bounds.bumpVerticalPos(conf.boxMargin * 2);\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n if (!actor.stopy) {\n actor.stopy = bounds.getVerticalPos();\n }\n const height = await svgDraw.drawActor(\n diagram,\n actor,\n conf,\n true,\n diagramId,\n diagObj,\n actorIndexMap\n );\n maxHeight = common.getMax(maxHeight, height);\n }\n bounds.bumpVerticalPos(maxHeight + conf.boxMargin);\n }\n};\n\nexport const drawActorsPopup = function (diagram, actors, actorKeys, doc) {\n let maxHeight = 0;\n let maxWidth = 0;\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n const minMenuWidth = getRequiredPopupWidth(actor);\n const menuDimensions = svgDraw.drawPopup(\n diagram,\n actor,\n minMenuWidth,\n conf,\n conf.forceMenus,\n doc\n );\n if (menuDimensions.height > maxHeight) {\n maxHeight = menuDimensions.height;\n }\n if (menuDimensions.width + actor.x > maxWidth) {\n maxWidth = menuDimensions.width + actor.x;\n }\n }\n\n return { maxHeight: maxHeight, maxWidth: maxWidth };\n};\n\nexport const setConf = function (cnf) {\n assignWithDepth(conf, cnf);\n\n if (cnf.fontFamily) {\n conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\n\nconst actorActivations = function (actor) {\n return bounds.activations.filter(function (activation) {\n return activation.actor === actor;\n });\n};\n\nconst activationBounds = function (actor, actors) {\n // handle multiple stacked activations for same actor\n const actorObj = actors.get(actor);\n const activations = actorActivations(actor);\n\n const left = activations.reduce(\n function (acc, activation) {\n return common.getMin(acc, activation.startx);\n },\n actorObj.x + actorObj.width / 2 - 1\n );\n const right = activations.reduce(\n function (acc, activation) {\n return common.getMax(acc, activation.stopx);\n },\n actorObj.x + actorObj.width / 2 + 1\n );\n return [left, right];\n};\n\nfunction adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {\n bounds.bumpVerticalPos(preMargin);\n let heightAdjust = postMargin;\n if (msg.id && msg.message && loopWidths[msg.id]) {\n const loopWidth = loopWidths[msg.id].width;\n const textConf = messageFont(conf);\n msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf);\n msg.width = loopWidth;\n msg.wrap = true;\n\n // const lines = common.splitBreaks(msg.message).length;\n const textDims = utils.calculateTextDimensions(msg.message, textConf);\n const totalOffset = common.getMax(textDims.height, conf.labelBoxHeight);\n heightAdjust = postMargin + totalOffset;\n log.debug(`${totalOffset} - ${msg.message}`);\n }\n addLoopFn(msg);\n bounds.bumpVerticalPos(heightAdjust);\n}\n\n/**\n * Adjust the msgModel and the actor for the rendering in case the latter is created or destroyed by the msg\n * @param msg - the potentially creating or destroying message\n * @param msgModel - the model associated with the message\n * @param lineStartY - the y position of the message line\n * @param index - the index of the current actor under consideration\n * @param actors - the array of all actors\n * @param createdActors - the array of actors created in the diagram\n * @param destroyedActors - the array of actors destroyed in the diagram\n */\nfunction adjustCreatedDestroyedData(\n msg,\n msgModel,\n lineStartY,\n index,\n actors,\n createdActors,\n destroyedActors\n) {\n function receiverAdjustment(actor, adjustment) {\n if (actor.x < actors.get(msg.from).x) {\n bounds.insert(\n msgModel.stopx - adjustment,\n msgModel.starty,\n msgModel.startx,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.stopx = msgModel.stopx + adjustment;\n } else {\n bounds.insert(\n msgModel.startx,\n msgModel.starty,\n msgModel.stopx + adjustment,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.stopx = msgModel.stopx - adjustment;\n }\n }\n\n function senderAdjustment(actor, adjustment) {\n if (actor.x < actors.get(msg.to).x) {\n bounds.insert(\n msgModel.startx - adjustment,\n msgModel.starty,\n msgModel.stopx,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.startx = msgModel.startx + adjustment;\n } else {\n bounds.insert(\n msgModel.stopx,\n msgModel.starty,\n msgModel.startx + adjustment,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.startx = msgModel.startx - adjustment;\n }\n }\n const actorArray = [\n PARTICIPANT_TYPE.ACTOR,\n PARTICIPANT_TYPE.CONTROL,\n PARTICIPANT_TYPE.ENTITY,\n PARTICIPANT_TYPE.DATABASE,\n ];\n\n // if it is a create message\n if (createdActors.get(msg.to) == index) {\n const actor = actors.get(msg.to);\n const adjustment = actorArray.includes(actor.type)\n ? ACTOR_TYPE_WIDTH / 2 + 3\n : actor.width / 2 + 3;\n receiverAdjustment(actor, adjustment);\n actor.starty = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n // if it is a destroy sender message\n else if (destroyedActors.get(msg.from) == index) {\n const actor = actors.get(msg.from);\n if (conf.mirrorActors) {\n const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2;\n senderAdjustment(actor, adjustment);\n }\n actor.stopy = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n // if it is a destroy receiver message\n else if (destroyedActors.get(msg.to) == index) {\n const actor = actors.get(msg.to);\n if (conf.mirrorActors) {\n const adjustment = actorArray.includes(actor.type)\n ? ACTOR_TYPE_WIDTH / 2 + 3\n : actor.width / 2 + 3;\n receiverAdjustment(actor, adjustment);\n }\n actor.stopy = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n}\n\n/**\n * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text.\n *\n * @param _text - The text of the diagram\n * @param id - The id of the diagram which will be used as a DOM element id\u00A8\n * @param _version - Mermaid version from package.json\n * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram\n */\nexport const draw = async function (_text: string, id: string, _version: string, diagObj: Diagram) {\n const { securityLevel, sequence, look, themeVariables } = getConfig();\n conf = sequence;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n bounds.init();\n log.debug(diagObj.db);\n\n const diagram =\n securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n\n // Fetch data from the parsing\n const actors = diagObj.db.getActors();\n const createdActors = diagObj.db.getCreatedActors();\n const destroyedActors = diagObj.db.getDestroyedActors();\n const boxes = diagObj.db.getBoxes();\n let actorKeys = diagObj.db.getActorKeys();\n const messages = diagObj.db.getMessages();\n const title = diagObj.db.getDiagramTitle();\n const hasBoxes = diagObj.db.hasAtLeastOneBox();\n const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();\n const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors, messages, diagObj);\n conf.height = await calculateActorMargins(actors, maxMessageWidthPerActor, boxes);\n\n svgDraw.insertComputerIcon(diagram, id);\n svgDraw.insertDatabaseIcon(diagram, id);\n svgDraw.insertClockIcon(diagram, id);\n\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n if (hasBoxTitles) {\n bounds.bumpVerticalPos(boxes[0].textMaxHeight);\n }\n }\n\n if (conf.hideUnusedParticipants === true) {\n const newActors = new Set();\n messages.forEach((message) => {\n newActors.add(message.from);\n newActors.add(message.to);\n });\n actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));\n }\n\n const actorIndexMap = new Map(\n actorKeys.map((actorKey, index) => [actors.get(actorKey)?.name ?? actorKey, index])\n );\n\n addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false);\n const loopWidths = await calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj);\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram, id);\n svgDraw.insertArrowCrossHead(diagram, id);\n svgDraw.insertArrowFilledHead(diagram, id);\n svgDraw.insertSequenceNumber(diagram, id);\n svgDraw.insertSolidTopArrowHead(diagram, id);\n svgDraw.insertSolidBottomArrowHead(diagram, id);\n svgDraw.insertStickTopArrowHead(diagram, id);\n svgDraw.insertStickBottomArrowHead(diagram, id);\n\n if (look === 'neo') {\n svgDraw.insertDropShadow(diagram, conf, id);\n }\n\n /**\n * @param msg - The message to draw.\n * @param verticalPos - The vertical position of the message.\n */\n function activeEnd(msg: any, verticalPos: number) {\n const activationData = bounds.endActivation(msg);\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6;\n verticalPos += 12;\n }\n svgDraw.drawActivation(\n diagram,\n activationData,\n verticalPos,\n conf,\n actorActivations(msg.from).length,\n diagObj,\n actorIndexMap\n );\n\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);\n }\n\n // Draw the messages/signals\n let sequenceIndex = 1;\n let sequenceIndexStep = 1;\n const messagesToDraw = [];\n const backgrounds = [];\n let index = 0;\n for (const msg of messages) {\n let loopModel, noteModel, msgModel;\n\n switch (msg.type) {\n case diagObj.db.LINETYPE.NOTE:\n bounds.resetVerticalPos();\n noteModel = msg.noteModel;\n await drawNote(diagram, noteModel, msg.id);\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram, actors);\n break;\n case diagObj.db.LINETYPE.CENTRAL_CONNECTION:\n bounds.newActivation(msg, diagram, actors);\n break;\n case diagObj.db.LINETYPE.CENTRAL_CONNECTION_REVERSE:\n bounds.newActivation(msg, diagram, actors);\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.LOOP_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'loop', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.RECT_START:\n adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) => {\n let fill = message.message;\n if (!fill) {\n // Apply a theme-aware default fill.\n // Because the rect is rendered behind actors and text, it does not obscure them.\n // Use theme background when no explicit color is given; the rect renders\n // behind all content so any semi-transparent theme color is safe.\n fill =\n themeVariables?.rectBkgColor ||\n themeVariables?.actorBkg ||\n 'rgba(128, 128, 128, 0.5)';\n }\n bounds.newLoop(undefined, fill);\n });\n break;\n case diagObj.db.LINETYPE.RECT_END:\n loopModel = bounds.endLoop();\n backgrounds.push(loopModel);\n bounds.models.addLoop(loopModel);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.OPT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.OPT_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'opt', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.ALT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'alt', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n bounds.saveVerticalPos();\n break;\n case diagObj.db.LINETYPE.PAR_AND:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.PAR_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'par', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.AUTONUMBER:\n sequenceIndex = msg.message.start || sequenceIndex;\n sequenceIndexStep = msg.message.step || sequenceIndexStep;\n if (msg.message.visible) {\n diagObj.db.enableSequenceNumbers();\n } else {\n diagObj.db.disableSequenceNumbers();\n }\n break;\n case diagObj.db.LINETYPE.CRITICAL_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'critical', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.BREAK_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.BREAK_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'break', conf, msg);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n default:\n try {\n msgModel = msg.msgModel;\n msgModel.starty = bounds.getVerticalPos();\n msgModel.sequenceIndex = sequenceIndex;\n msgModel.sequenceVisible = diagObj.db.showSequenceNumbers();\n msgModel.id = msg.id;\n msgModel.from = msg.from;\n msgModel.to = msg.to;\n const lineStartY = await boundMessage(diagram, msgModel);\n adjustCreatedDestroyedData(\n msg,\n msgModel,\n lineStartY,\n index,\n actors,\n createdActors,\n destroyedActors\n );\n messagesToDraw.push({ messageModel: msgModel, lineStartY: lineStartY, msg });\n bounds.models.addMessage(msgModel);\n } catch (e) {\n log.error('error while drawing message', e);\n }\n }\n\n // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc)\n if (\n [\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n\n diagObj.db.LINETYPE.SOLID_TOP,\n diagObj.db.LINETYPE.SOLID_BOTTOM,\n diagObj.db.LINETYPE.STICK_TOP,\n diagObj.db.LINETYPE.STICK_BOTTOM,\n\n diagObj.db.LINETYPE.SOLID_TOP_DOTTED,\n diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED,\n diagObj.db.LINETYPE.STICK_TOP_DOTTED,\n diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,\n\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT,\n diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,\n diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,\n ].includes(msg.type)\n ) {\n // hitting a floating point number error, so round to 2 decimal places\n sequenceIndex = Math.round((sequenceIndex + sequenceIndexStep) * 100) / 100;\n }\n index++;\n }\n\n log.debug('createdActors', createdActors);\n log.debug('destroyedActors', destroyedActors);\n await drawActors(diagram, actors, actorKeys, false, id, diagObj, actorIndexMap);\n\n for (const e of messagesToDraw) {\n await drawMessage(diagram, e.messageModel, e.lineStartY, diagObj, e.msg, id);\n }\n if (conf.mirrorActors) {\n await drawActors(diagram, actors, actorKeys, true, id, diagObj, actorIndexMap);\n }\n backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram, e));\n fixLifeLineHeights(diagram, actors, actorKeys, conf);\n\n for (const box of bounds.models.boxes) {\n box.height = bounds.getVerticalPos() - box.y;\n bounds.insert(box.x, box.y, box.x + box.width, box.height);\n const boxPadding = conf.boxMargin * 2;\n box.startx = box.x - boxPadding;\n box.starty = box.y - boxPadding * 0.25;\n box.stopx = box.startx + box.width + 2 * boxPadding;\n box.stopy = box.starty + box.height + boxPadding * 0.75;\n box.stroke = 'rgb(0,0,0, 0.5)';\n svgDraw.drawBox(diagram, box, conf);\n }\n\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n }\n\n // only draw popups for the top row of actors.\n const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc);\n\n const { bounds: box } = bounds.getBounds();\n\n if (box.startx === undefined) {\n box.startx = 0;\n }\n if (box.starty === undefined) {\n box.starty = 0;\n }\n if (box.stopx === undefined) {\n box.stopx = 0;\n }\n if (box.stopy === undefined) {\n box.stopy = 0;\n }\n\n // Make sure the height of the diagram supports long menus.\n let boxHeight = box.stopy - box.starty;\n if (boxHeight < requiredBoxSize.maxHeight) {\n boxHeight = requiredBoxSize.maxHeight;\n }\n\n let height = boxHeight + 2 * conf.diagramMarginY;\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj;\n }\n\n // Make sure the width of the diagram supports wide menus.\n let boxWidth = box.stopx - box.startx;\n if (boxWidth < requiredBoxSize.maxWidth) {\n boxWidth = requiredBoxSize.maxWidth;\n }\n const width = boxWidth + 2 * conf.diagramMarginX;\n\n if (title) {\n diagram\n .append('text')\n .text(title)\n .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX)\n .attr('y', -25);\n }\n\n configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n const extraVertForTitle = title ? 40 : 0;\n const extraHeightForNeoActors = actors.size && look === 'neo' ? 30 : 0;\n diagram.attr(\n 'viewBox',\n box.startx -\n conf.diagramMarginX +\n ' -' +\n (conf.diagramMarginY + extraVertForTitle) +\n ' ' +\n width +\n ' ' +\n (height + extraVertForTitle + extraHeightForNeoActors)\n );\n\n log.debug(`models:`, bounds.models);\n};\n\n/**\n * Retrieves the max message width of each actor, supports signals (messages, loops) and notes.\n *\n * It will enumerate each given message, and will determine its text width, in relation to the actor\n * it originates from, and destined to.\n *\n * @param actors - The actors map\n * @param messages - A list of message objects to iterate\n * @param diagObj - The diagram object.\n * @returns The max message width of each actor.\n */\nasync function getMaxMessageWidthPerActor(\n actors: Map<string, any>,\n messages: any[],\n diagObj: Diagram\n): Promise<Record<string, number>> {\n const maxMessageWidthPerActor = {};\n\n for (const msg of messages) {\n if (actors.get(msg.to) && actors.get(msg.from)) {\n const actor = actors.get(msg.to);\n\n // If this is the first actor, and the message is left of it, no need to calculate the margin\n if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {\n continue;\n }\n\n // If this is the last actor, and the message is right of it, no need to calculate the margin\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {\n continue;\n }\n\n const isNote = msg.placement !== undefined;\n const isMessage = !isNote;\n\n const textFont = isNote ? noteFont(conf) : messageFont(conf);\n const wrappedMessage = msg.wrap\n ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont)\n : msg.message;\n const messageDimensions = hasKatex(wrappedMessage)\n ? await calculateMathMLDimensions(msg.message, getConfig())\n : utils.calculateTextDimensions(wrappedMessage, textFont);\n const messageWidth = messageDimensions.width + 2 * conf.wrapPadding;\n\n /*\n * The following scenarios should be supported:\n *\n * - There's a message (non-note) between fromActor and toActor\n * - If fromActor is on the right and toActor is on the left, we should\n * define the toActor's margin\n * - If fromActor is on the left and toActor is on the right, we should\n * define the fromActor's margin\n * - There's a note, in which case fromActor == toActor\n * - If the note is to the left of the actor, we should define the previous actor\n * margin\n * - If the note is on the actor, we should define both the previous and next actor\n * margins, each being the half of the note size\n * - If the note is on the right of the actor, we should define the current actor\n * margin\n */\n if (isMessage && msg.from === actor.nextActor) {\n maxMessageWidthPerActor[msg.to] = common.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === actor.prevActor) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === msg.to) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n\n maxMessageWidthPerActor[msg.to] = common.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth / 2\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n maxMessageWidthPerActor[actor.prevActor] = common.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {\n if (actor.prevActor) {\n maxMessageWidthPerActor[actor.prevActor] = common.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth / 2\n );\n }\n\n if (actor.nextActor) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n }\n }\n }\n }\n\n log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor);\n return maxMessageWidthPerActor;\n}\n\nconst getRequiredPopupWidth = function (actor) {\n let requiredPopupWidth = 0;\n const textFont = actorFont(conf);\n for (const key in actor.links) {\n const labelDimensions = utils.calculateTextDimensions(key, textFont);\n const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin;\n if (requiredPopupWidth < labelWidth) {\n requiredPopupWidth = labelWidth;\n }\n }\n\n return requiredPopupWidth;\n};\n\n/**\n * This will calculate the optimal margin for each given actor,\n * for a given actor \u2192 messageWidth map.\n *\n * An actor's margin is determined by the width of the actor, the width of the largest message that\n * originates from it, and the configured conf.actorMargin.\n *\n * @param actors - The actors map to calculate margins for\n * @param actorToMessageWidth - A map of actor key \u2192 max message width it holds\n * @param boxes - The boxes around the actors if any\n */\nasync function calculateActorMargins(\n actors: Map<string, any>,\n actorToMessageWidth: Awaited<ReturnType<typeof getMaxMessageWidthPerActor>>,\n boxes\n) {\n let maxHeight = 0;\n for (const prop of actors.keys()) {\n const actor = actors.get(prop);\n if (actor.wrap) {\n actor.description = utils.wrapLabel(\n actor.description,\n conf.width - 2 * conf.wrapPadding,\n actorFont(conf)\n );\n }\n const actDims = hasKatex(actor.description)\n ? await calculateMathMLDimensions(actor.description, getConfig())\n : utils.calculateTextDimensions(actor.description, actorFont(conf));\n\n actor.width = actor.wrap\n ? conf.width\n : common.getMax(conf.width, actDims.width + 2 * conf.wrapPadding);\n\n if (getConfig().look === 'neo') {\n // The band model: the row is as tall as its tallest glyph-gap-label-gap stack, and every\n // shape anchors to the row's shared datum rather than measuring itself. The measured text\n // height travels with the actor so the shapes place the label from the same number.\n actor.actorTextHeight = actDims.height;\n actor.height = common.getMax(actorStackHeight(actDims.height), conf.height);\n } else {\n actor.height = actor.wrap ? common.getMax(actDims.height, conf.height) : conf.height;\n }\n maxHeight = common.getMax(maxHeight, actor.height);\n }\n\n for (const actorKey in actorToMessageWidth) {\n const actor = actors.get(actorKey);\n\n if (!actor) {\n continue;\n }\n\n const nextActor = actors.get(actor.nextActor);\n\n // No need to space out an actor that doesn't have a next link\n if (!nextActor) {\n const messageWidth = actorToMessageWidth[actorKey];\n const actorWidth = messageWidth + conf.actorMargin - actor.width / 2;\n actor.margin = common.getMax(actorWidth, conf.actorMargin);\n continue;\n }\n\n const messageWidth = actorToMessageWidth[actorKey];\n const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2;\n\n actor.margin = common.getMax(actorWidth, conf.actorMargin);\n }\n\n let maxBoxHeight = 0;\n boxes.forEach((box) => {\n const textFont = messageFont(conf);\n let totalWidth = box.actorKeys.reduce((total, aKey) => {\n return (total += actors.get(aKey).width + (actors.get(aKey).margin || 0));\n }, 0);\n\n const standardBoxPadding = conf.boxMargin * 8;\n totalWidth += standardBoxPadding;\n\n totalWidth -= 2 * conf.boxTextMargin;\n if (box.wrap) {\n box.name = utils.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont);\n }\n\n const boxMsgDimensions = utils.calculateTextDimensions(box.name, textFont);\n maxBoxHeight = common.getMax(boxMsgDimensions.height, maxBoxHeight);\n const minWidth = common.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding);\n box.margin = conf.boxTextMargin;\n if (totalWidth < minWidth) {\n const missing = (minWidth - totalWidth) / 2;\n box.margin += missing;\n }\n });\n boxes.forEach((box) => (box.textMaxHeight = maxBoxHeight));\n\n return common.getMax(maxHeight, conf.height);\n}\n\nconst buildNoteModel = async function (msg, actors, diagObj) {\n const fromActor = actors.get(msg.from);\n const toActor = actors.get(msg.to);\n const startx = fromActor.x;\n const stopx = toActor.x;\n const shouldWrap = msg.wrap && msg.message;\n\n let textDimensions: { width: number; height: number; lineHeight?: number } = hasKatex(msg.message)\n ? await calculateMathMLDimensions(msg.message, getConfig())\n : utils.calculateTextDimensions(\n shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message,\n noteFont(conf)\n );\n const noteModel = {\n width: shouldWrap\n ? conf.width\n : common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin),\n height: 0,\n startx: fromActor.x,\n stopx: 0,\n starty: 0,\n stopy: 0,\n message: msg.message,\n };\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, textDimensions.width)\n : common.getMax(\n fromActor.width / 2 + toActor.width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx + (fromActor.width + conf.actorMargin) / 2;\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin)\n : common.getMax(\n fromActor.width / 2 + toActor.width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx - noteModel.width + (fromActor.width - conf.actorMargin) / 2;\n } else if (msg.to === msg.from) {\n textDimensions = utils.calculateTextDimensions(\n shouldWrap\n ? utils.wrapLabel(msg.message, common.getMax(conf.width, fromActor.width), noteFont(conf))\n : msg.message,\n noteFont(conf)\n );\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, fromActor.width)\n : common.getMax(fromActor.width, conf.width, textDimensions.width + 2 * conf.noteMargin);\n noteModel.startx = startx + (fromActor.width - noteModel.width) / 2;\n } else {\n noteModel.width =\n Math.abs(startx + fromActor.width / 2 - (stopx + toActor.width / 2)) + conf.actorMargin;\n noteModel.startx =\n startx < stopx\n ? startx + fromActor.width / 2 - conf.actorMargin / 2\n : stopx + toActor.width / 2 - conf.actorMargin / 2;\n }\n if (shouldWrap) {\n noteModel.message = utils.wrapLabel(\n msg.message,\n noteModel.width - 2 * conf.wrapPadding,\n noteFont(conf)\n );\n }\n log.debug(\n `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`\n );\n return noteModel;\n};\n\n// Central connection positioning constants\nconst CENTRAL_CONNECTION_BASE_OFFSET = 4;\nconst CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET = 6;\n\n/**\n * Check if a message has central connection\n * @param msg - The message object\n * @param diagObj - The diagram object containing LINETYPE constants\n * @returns True if the message has any type of central connection\n */\nconst hasCentralConnection = function (msg, diagObj) {\n const { CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL } =\n diagObj.db.LINETYPE;\n return [CENTRAL_CONNECTION, CENTRAL_CONNECTION_REVERSE, CENTRAL_CONNECTION_DUAL].includes(\n msg.centralConnection\n );\n};\n\n/**\n * Calculate the positioning offset for central connection arrows\n * @param msg - The message object\n * @param diagObj - The diagram object containing LINETYPE constants\n * @param isArrowToRight - Whether the arrow is pointing to the right\n * @returns The offset to apply to startx position\n */\nconst calculateCentralConnectionOffset = function (msg, diagObj, isArrowToRight) {\n const {\n CENTRAL_CONNECTION_REVERSE,\n CENTRAL_CONNECTION_DUAL,\n BIDIRECTIONAL_SOLID,\n BIDIRECTIONAL_DOTTED,\n } = diagObj.db.LINETYPE;\n\n let offset = 0;\n\n if (\n msg.centralConnection === CENTRAL_CONNECTION_REVERSE ||\n msg.centralConnection === CENTRAL_CONNECTION_DUAL\n ) {\n offset += CENTRAL_CONNECTION_BASE_OFFSET;\n }\n\n if (\n (msg.centralConnection === CENTRAL_CONNECTION_REVERSE ||\n msg.centralConnection === CENTRAL_CONNECTION_DUAL) &&\n (msg.type === BIDIRECTIONAL_SOLID || msg.type === BIDIRECTIONAL_DOTTED)\n ) {\n offset += isArrowToRight ? 0 : -CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET;\n }\n\n return offset;\n};\n\n/**\n * Check if a message is a reverse arrow type\n * @param msg - The message object\n * @param diagObj - The diagram object containing LINETYPE constants\n * @returns True if the message is a reverse arrow type\n */\nconst isReverseArrowType = function (msg, diagObj) {\n const {\n SOLID_ARROW_TOP_REVERSE,\n SOLID_ARROW_TOP_REVERSE_DOTTED,\n SOLID_ARROW_BOTTOM_REVERSE,\n SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n STICK_ARROW_TOP_REVERSE,\n STICK_ARROW_TOP_REVERSE_DOTTED,\n STICK_ARROW_BOTTOM_REVERSE,\n STICK_ARROW_BOTTOM_REVERSE_DOTTED,\n } = diagObj.db.LINETYPE;\n\n return [\n SOLID_ARROW_TOP_REVERSE,\n SOLID_ARROW_TOP_REVERSE_DOTTED,\n SOLID_ARROW_BOTTOM_REVERSE,\n SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n STICK_ARROW_TOP_REVERSE,\n STICK_ARROW_TOP_REVERSE_DOTTED,\n STICK_ARROW_BOTTOM_REVERSE,\n STICK_ARROW_BOTTOM_REVERSE_DOTTED,\n ].includes(msg.type);\n};\n\n/**\n * Check if a message is a bidirectional arrow type\n * @param msg - The message object\n * @param diagObj - The diagram object containing LINETYPE constants\n * @returns True if the message is a bidirectional arrow type\n */\nconst isBidirectionalArrowType = function (msg, diagObj) {\n const { BIDIRECTIONAL_SOLID, BIDIRECTIONAL_DOTTED } = diagObj.db.LINETYPE;\n return [BIDIRECTIONAL_SOLID, BIDIRECTIONAL_DOTTED].includes(msg.type);\n};\n\nconst buildMessageModel = function (msg, actors, diagObj) {\n const { look } = getConfig();\n if (\n ![\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n\n diagObj.db.LINETYPE.SOLID_TOP,\n diagObj.db.LINETYPE.SOLID_BOTTOM,\n diagObj.db.LINETYPE.STICK_TOP,\n diagObj.db.LINETYPE.STICK_BOTTOM,\n\n diagObj.db.LINETYPE.SOLID_TOP_DOTTED,\n diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED,\n diagObj.db.LINETYPE.STICK_TOP_DOTTED,\n diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,\n\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT,\n diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,\n diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,\n ].includes(msg.type)\n ) {\n return {};\n }\n const [fromLeft, fromRight] = activationBounds(msg.from, actors);\n const [toLeft, toRight] = activationBounds(msg.to, actors);\n const isArrowToRight = fromLeft <= toLeft;\n let startx = isArrowToRight ? fromRight : fromLeft;\n let stopx = isArrowToRight ? toLeft : toRight;\n\n if (look === 'neo') {\n const offset = 3;\n if (msg.type !== diagObj.db.LINETYPE.SOLID_OPEN) {\n stopx += isArrowToRight ? -offset : offset;\n }\n if (\n msg.type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID ||\n msg.type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED\n ) {\n startx += isArrowToRight ? offset : -offset;\n }\n }\n\n // Apply central connection positioning adjustments\n startx += calculateCentralConnectionOffset(msg, diagObj, isArrowToRight);\n // As the line width is considered, the left and right values will be off by 2.\n const isArrowToActivation = Math.abs(toLeft - toRight) > 2;\n\n /**\n * Adjust the value based on the arrow direction\n * @param value - The value to adjust\n * @returns The adjustment with correct sign to be added to the actual value.\n */\n const adjustValue = (value: number) => {\n return isArrowToRight ? -value : value;\n };\n\n if (msg.from === msg.to) {\n // This is a self reference, so we need to make sure the arrow is drawn correctly\n // There are many checks in the downstream rendering that checks for equality.\n // The lines on loops will be off by few pixels, but that's fine for now.\n stopx = startx;\n } else {\n /**\n * This is an edge case for the first activation.\n * Proper fix would require significant changes.\n * So, we set an activate flag in the message, and cross check that with isToActivation\n * In cases where the message is to an activation that was properly detected, we don't want to move the arrow head\n * The activation will not be detected on the first message, so we need to move the arrow head\n */\n if (msg.activate && !isArrowToActivation) {\n stopx += adjustValue(conf.activationWidth / 2 - 1);\n }\n\n /**\n * Shorten the length of arrow at the end and move the marker forward (using refX) to have a clean arrowhead\n * This is not required for open arrows that don't have arrowheads\n */\n if (\n ![\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n\n diagObj.db.LINETYPE.STICK_TOP,\n diagObj.db.LINETYPE.STICK_BOTTOM,\n\n diagObj.db.LINETYPE.STICK_TOP_DOTTED,\n diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE,\n\n diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED,\n\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,\n ].includes(msg.type)\n ) {\n stopx += adjustValue(3);\n }\n\n /**\n * Shorten start position of bidirectional arrow to accommodate for second arrowhead\n */\n if (\n [\n diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,\n diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED,\n diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE,\n diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE,\n ].includes(msg.type)\n ) {\n startx -= adjustValue(3);\n }\n }\n\n const allBounds = [fromLeft, fromRight, toLeft, toRight];\n const boundedWidth = Math.abs(startx - stopx);\n if (msg.wrap && msg.message) {\n msg.message = utils.wrapLabel(\n msg.message,\n common.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width),\n messageFont(conf)\n );\n }\n const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf));\n\n return {\n width: common.getMax(\n msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,\n boundedWidth + 2 * conf.wrapPadding,\n conf.width\n ),\n height: 0,\n startx,\n stopx,\n starty: 0,\n stopy: 0,\n message: msg.message,\n type: msg.type,\n wrap: msg.wrap,\n fromBounds: Math.min.apply(null, allBounds),\n toBounds: Math.max.apply(null, allBounds),\n };\n};\n\nexport const adjustValueByDirection = (msg, actors, value) => {\n const [fromLeft] = activationBounds(msg.from, actors);\n const [toLeft] = activationBounds(msg.to, actors);\n const isArrowToRight = fromLeft <= toLeft;\n return isArrowToRight ? -value : value;\n};\n\nconst calculateLoopBounds = async function (messages, actors, _maxWidthPerActor, diagObj) {\n const loops = {};\n const stack = [];\n let current, noteModel, msgModel;\n\n for (const msg of messages) {\n switch (msg.type) {\n case diagObj.db.LINETYPE.LOOP_START:\n case diagObj.db.LINETYPE.ALT_START:\n case diagObj.db.LINETYPE.OPT_START:\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n case diagObj.db.LINETYPE.CRITICAL_START:\n case diagObj.db.LINETYPE.BREAK_START:\n stack.push({\n id: msg.id,\n msg: msg.message,\n from: Number.MAX_SAFE_INTEGER,\n to: Number.MIN_SAFE_INTEGER,\n width: 0,\n });\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n case diagObj.db.LINETYPE.PAR_AND:\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n if (msg.message) {\n current = stack.pop();\n loops[current.id] = current;\n loops[msg.id] = current;\n stack.push(current);\n }\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n case diagObj.db.LINETYPE.ALT_END:\n case diagObj.db.LINETYPE.OPT_END:\n case diagObj.db.LINETYPE.PAR_END:\n case diagObj.db.LINETYPE.CRITICAL_END:\n case diagObj.db.LINETYPE.BREAK_END:\n current = stack.pop();\n loops[current.id] = current;\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n {\n const actorRect = actors.get(msg.from ? msg.from : msg.to.actor);\n const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length;\n const x =\n actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n const toAdd = {\n startx: x,\n stopx: x + conf.activationWidth,\n actor: msg.from,\n enabled: true,\n };\n bounds.activations.push(toAdd);\n }\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n {\n const lastActorActivationIdx = bounds.activations\n .map((a) => a.actor)\n .lastIndexOf(msg.from);\n bounds.activations.splice(lastActorActivationIdx, 1).splice(0, 1);\n }\n break;\n }\n const isNote = msg.placement !== undefined;\n if (isNote) {\n noteModel = await buildNoteModel(msg, actors, diagObj);\n msg.noteModel = noteModel;\n stack.forEach((stk) => {\n current = stk;\n current.from = common.getMin(current.from, noteModel.startx);\n current.to = common.getMax(current.to, noteModel.startx + noteModel.width);\n current.width =\n common.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth;\n });\n } else {\n msgModel = buildMessageModel(msg, actors, diagObj);\n msg.msgModel = msgModel;\n if (msgModel.startx && msgModel.stopx && stack.length > 0) {\n stack.forEach((stk) => {\n current = stk;\n if (msgModel.startx === msgModel.stopx) {\n const from = actors.get(msg.from);\n const to = actors.get(msg.to);\n current.from = common.getMin(\n from.x - msgModel.width / 2,\n from.x - from.width / 2,\n current.from\n );\n current.to = common.getMax(\n to.x + msgModel.width / 2,\n to.x + from.width / 2,\n current.to\n );\n current.width =\n common.getMax(current.width, Math.abs(current.to - current.from)) -\n conf.labelBoxWidth;\n } else {\n current.from = common.getMin(msgModel.startx, current.from);\n current.to = common.getMax(msgModel.stopx, current.to);\n current.width = common.getMax(current.width, msgModel.width) - conf.labelBoxWidth;\n }\n });\n }\n }\n }\n bounds.activations = [];\n log.debug('Loop type widths:', loops);\n return loops;\n};\n\nexport default {\n bounds,\n drawActors,\n drawActorsPopup,\n setConf,\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/sequenceDiagram.jison';\nimport { SequenceDB } from './sequenceDb.js';\nimport styles from './styles.js';\nimport { setConfig } from '../../diagram-api/diagramAPI.js';\nimport renderer from './sequenceRenderer.js';\nimport type { MermaidConfig } from '../../config.type.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new SequenceDB();\n },\n renderer,\n styles,\n init: (cnf: MermaidConfig) => {\n if (!cnf.sequence) {\n cnf.sequence = {};\n }\n if (cnf.wrap) {\n cnf.sequence.wrap = cnf.wrap;\n setConfig({ sequence: { wrap: cnf.wrap } });\n }\n },\n};\n"],
"mappings": "oiBAyEA,IAAIA,IAAU,UAAU,CACxB,IAAIC,EAAEC,EAAA,SAASC,GAAEC,EAAEH,EAAEI,EAAE,CAAC,IAAIJ,EAAEA,GAAG,CAAC,EAAEI,EAAEF,GAAE,OAAOE,IAAIJ,EAAEE,GAAEE,CAAC,CAAC,EAAED,EAAE,CAAC,OAAOH,CAAC,EAAhE,KAAkEK,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAK,CAAC,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GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAGC,EAAI,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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", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "$VZ", "$V_", "$V$", "$V01", "$V11", "$V21", "$V31", "$V41", "$V51", "$V61", "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", "sequenceDiagram_default", "parser", "LINETYPE", "ARROWTYPE", "PLACEMENT", "PARTICIPANT_TYPE", "SequenceDB", "ImperativeState", "setAccTitle", "setAccDescription", "setDiagramTitle", "getAccTitle", "getAccDescription", "getDiagramTitle", "getConfig", "__name", "data", "id", "name", "description", "type", "metadata", "assignedBox", "doc", "yamlData", "load", "JSON_SCHEMA", "old", "prevActorInRecords", "part", "i", "count", "idFrom", "idTo", "message", "answer", "messageType", "activate", "centralConnection", "error", "b", "wrapSetting", "text", "wrap", "clear", "str", "trimmedStr", "cleanedText", "log", "match", "color", "title", "style", "sanitizeText", "actor", "placement", "note", "actors", "actorId", "sanitizedText", "links", "e", "sep", "label", "link", "key", "properties", "elem", "details", "param", "item", "getStyles", "__name", "options", "dropShadow", "look", "getConfig", "styles_default", "import_sanitize_url", "GLYPH_BAND_HEIGHT", "GLYPH_LABEL_GAP", "LABEL_LIFELINE_GAP", "actorLabelHeight", "__name", "actor", "conf", "utils_default", "actorStackHeight", "textHeight", "headerBands", "actorY", "rowHeight", "lifelineStartY", "labelCenterY", "footerBands", "glyphTopY", "glyphBottomY", "ACTOR_TYPE_WIDTH", "ACTOR_GLYPH_TOP", "ACTOR_GLYPH_BOTTOM", "ACTOR_GLYPH_HEIGHT", "neoBands", "__name", "actor", "conf", "isFooter", "actorY", "textHeight", "actorLabelHeight", "footerBands", "headerBands", "TOP_ACTOR_CLASS", "BOTTOM_ACTOR_CLASS", "ACTOR_BOX_CLASS", "ACTOR_MAN_FIGURE_CLASS", "COLOR_THEMES", "paletteColor", "palette", "index", "drawRect", "elem", "rectData", "rectElement", "getConfig", "drawPopup", "minMenuWidth", "textAttrs", "forceMenus", "links", "actorCnt", "displayValue", "g", "actorClass", "menuWidth", "rectElem", "linkY", "key", "linkElem", "sanitizedLink", "_drawMenuItemTextCandidateFunc", "popupMenuToggle", "popId", "drawKatex", "textData", "msgModel", "textElem", "linesSanitized", "renderKatexSanitized", "dim", "rectDim", "startx", "stopx", "starty", "temp", "drawText", "prevTextHeight", "lines", "common_default", "_textFontSize", "_textFontSizePx", "parseFontSize", "textElems", "dy", "yfunc", "i", "line", "text", "ZERO_WIDTH_SPACE", "span", "drawLabel", "txtObject", "genPoints", "x", "y", "width", "height", "cut", "polygon", "fixLifeLineHeights", "diagram", "actors", "actorKeys", "actorKey", "actorDOM", "drawActorTypeParticipant", "diagramId", "actorIndexMap", "center", "centerY", "look", "theme", "themeVariables", "bkgColorArray", "borderColorArray", "boxplusLineGroup", "rect", "getNoteRect", "cssclass", "actorCount", "dropShadowId", "iconSrc", "drawEmbeddedImage", "drawImage", "_drawTextCandidateFunc", "hasKatex", "bounds", "drawActorTypeCollections", "offset", "shadowRect", "stackedRect", "drawActorTypeQueue", "ry", "rx", "cylinderGroup", "cylinderArc", "cylinderPath", "iconX", "iconY", "lastPath", "drawActorTypeControl", "bands", "actorBorder", "actorBkg", "actElem", "cssClass", "cx", "cy", "r", "drawActorTypeEntity", "drawActorTypeDatabase", "w", "h", "GLYPH_BAND_HEIGHT", "cylinderY", "d", "drawActorTypeBoundary", "radius", "iconCenterY", "drawActorTypeActor", "glyphScale", "gy", "gx", "circle", "drawActor", "diagObj", "resolvedActorIndexMap", "participant", "drawBox", "box", "drawBackgroundRect", "anchorElement", "drawActivation", "_elem", "verticalPos", "actorActivations", "mainBkg", "drawLoop", "loopModel", "labelText", "msg", "boxMargin", "boxTextMargin", "labelBoxHeight", "labelBoxWidth", "fontFamily", "fontSize", "fontWeight", "drawLoopLine", "stopy", "item", "txt", "getTextObj", "idx", "sectionHeight", "te", "acc", "curr", "insertDatabaseIcon", "id", "insertComputerIcon", "insertClockIcon", "insertArrowHead", "insertArrowFilledHead", "insertSequenceNumber", "insertArrowCrossHead", "insertDropShadow", "byText", "content", "_setTextAttrs", "byTspan", "actorFontSize", "actorFontFamily", "actorFontWeight", "_actorFontSize", "_actorFontSizePx", "byFo", "s", "byKatex", "calculateMathMLDimensions", "toText", "fromTextAttrsDict", "insertSolidTopArrowHead", "insertSolidBottomArrowHead", "insertStickTopArrowHead", "insertStickBottomArrowHead", "svgDraw_default", "conf", "bounds", "__name", "actor", "it", "acc", "h", "boxModel", "actorModel", "loopModel", "msgModel", "noteModel", "setConf", "getConfig", "obj", "key", "val", "fun", "startx", "starty", "stopx", "stopy", "_self", "cnt", "updateFn", "type", "item", "n", "_startx", "common_default", "_stopx", "_starty", "_stopy", "message", "diagram", "actors", "actorRect", "stackedSize", "actorActivations", "x", "svgDraw_default", "lastActorActivationIdx", "activation", "title", "fill", "loop", "bump", "drawNote", "elem", "id", "rect", "getNoteRect", "g", "rectElem", "textObj", "getTextObj", "textElem", "hasKatex", "drawKatex", "drawText", "textHeight", "te", "curr", "drawCentralConnection", "msg", "diagObj", "lineStartY", "fromActor", "toActor", "isAutoNumberOn", "fromCenter", "toCenter", "isLeftToRight", "isReverse", "isReverseArrowType", "CENTRAL_CONNECTION_CIRCLE_OFFSET", "getCircleOffset", "baseOffset", "drawCircle", "cx", "CENTRAL_CONNECTION", "CENTRAL_CONNECTION_REVERSE", "CENTRAL_CONNECTION_DUAL", "messageFont", "cnf", "noteFont", "actorFont", "boundMessage", "_diagram", "lines", "isKatexMsg", "textDims", "calculateMathMLDimensions", "utils_default", "lineHeight", "totalOffset", "textWidth", "dx", "drawMessage", "diagramId", "sequenceIndex", "sequenceVisible", "line", "isBidirectional", "isBidirectionalArrowType", "lineStartX", "hasCentralConnection", "url", "getUrl", "SEQUENCE_NUMBER_RADIUS", "hasCentralConn", "lineStopX", "autonumberX", "isSelfMessage", "fontSize", "sequenceIndexLength", "addActorRenderingData", "createdActors", "actorKeys", "verticalPos", "messages", "isFooter", "prevWidth", "prevMargin", "prevBox", "maxHeight", "actorKey", "box", "drawActors", "actorIndexMap", "height", "drawActorsPopup", "doc", "maxWidth", "minMenuWidth", "getRequiredPopupWidth", "menuDimensions", "assignWithDepth_default", "activationBounds", "actorObj", "activations", "left", "right", "adjustLoopHeightForWrap", "loopWidths", "preMargin", "postMargin", "addLoopFn", "heightAdjust", "loopWidth", "textConf", "log", "adjustCreatedDestroyedData", "index", "destroyedActors", "receiverAdjustment", "adjustment", "senderAdjustment", "actorArray", "PARTICIPANT_TYPE", "ACTOR_TYPE_WIDTH", "draw", "_text", "_version", "securityLevel", "sequence", "look", "themeVariables", "sandboxElement", "select_default", "root", "boxes", "hasBoxes", "hasBoxTitles", "maxMessageWidthPerActor", "getMaxMessageWidthPerActor", "calculateActorMargins", "newActors", "calculateLoopBounds", "activeEnd", "activationData", "sequenceIndexStep", "messagesToDraw", "backgrounds", "e", "fixLifeLineHeights", "boxPadding", "requiredBoxSize", "boxHeight", "boxWidth", "width", "configureSvgSize", "extraVertForTitle", "extraHeightForNeoActors", "isNote", "isMessage", "textFont", "wrappedMessage", "messageWidth", "requiredPopupWidth", "labelWidth", "actorToMessageWidth", "prop", "actDims", "actorStackHeight", "nextActor", "actorWidth", "maxBoxHeight", "totalWidth", "total", "aKey", "standardBoxPadding", "boxMsgDimensions", "minWidth", "missing", "buildNoteModel", "shouldWrap", "textDimensions", "CENTRAL_CONNECTION_BASE_OFFSET", "CENTRAL_CONNECTION_BIDIRECTIONAL_OFFSET", "calculateCentralConnectionOffset", "isArrowToRight", "BIDIRECTIONAL_SOLID", "BIDIRECTIONAL_DOTTED", "offset", "SOLID_ARROW_TOP_REVERSE", "SOLID_ARROW_TOP_REVERSE_DOTTED", "SOLID_ARROW_BOTTOM_REVERSE", "SOLID_ARROW_BOTTOM_REVERSE_DOTTED", "STICK_ARROW_TOP_REVERSE", "STICK_ARROW_TOP_REVERSE_DOTTED", "STICK_ARROW_BOTTOM_REVERSE", "STICK_ARROW_BOTTOM_REVERSE_DOTTED", "buildMessageModel", "fromLeft", "fromRight", "toLeft", "toRight", "isArrowToActivation", "adjustValue", "value", "allBounds", "boundedWidth", "msgDims", "calculateLoopBounds", "__name", "messages", "actors", "_maxWidthPerActor", "diagObj", "loops", "stack", "current", "noteModel", "msgModel", "msg", "actorRect", "stackedSize", "actorActivations", "x", "conf", "toAdd", "bounds", "lastActorActivationIdx", "a", "buildNoteModel", "stk", "common_default", "buildMessageModel", "from", "to", "log", "sequenceRenderer_default", "drawActors", "drawActorsPopup", "setConf", "draw", "diagram", "sequenceDiagram_default", "SequenceDB", "sequenceRenderer_default", "styles_default", "__name", "cnf", "setConfig"]
}