diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts index 0112c5352..ff1dea393 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts @@ -62,14 +62,26 @@ const LINETYPE = { PAR_OVER_START: 32, BIDIRECTIONAL_SOLID: 33, BIDIRECTIONAL_DOTTED: 34, + SOLID_TOP: 41, SOLID_BOTTOM: 42, STICK_TOP: 43, STICK_BOTTOM: 44, + SOLID_ARROW_TOP_REVERSE: 45, SOLID_ARROW_BOTTOM_REVERSE: 46, STICK_ARROW_TOP_REVERSE: 47, STICK_ARROW_BOTTOM_REVERSE: 48, + + SOLID_TOP_DOTTED: 51, + SOLID_BOTTOM_DOTTED: 52, + STICK_TOP_DOTTED: 53, + STICK_BOTTOM_DOTTED: 54, + + SOLID_ARROW_TOP_REVERSE_DOTTED: 55, + SOLID_ARROW_BOTTOM_REVERSE_DOTTED: 56, + STICK_ARROW_TOP_REVERSE_DOTTED: 57, + STICK_ARROW_BOTTOM_REVERSE_DOTTED: 58, } as const; const ARROWTYPE = { diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts index 6b9ecc202..d902cac97 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts @@ -440,7 +440,15 @@ const drawMessage = async function (diagram, msgModel, lineStartY: number, diagO type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN || - type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED + type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED || + type === diagObj.db.LINETYPE.SOLID_TOP_DOTTED || + type === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED || + type === diagObj.db.LINETYPE.STICK_TOP_DOTTED || + type === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED || + type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED || + type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED || + type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED || + type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED ) { line.style('stroke-dasharray', '3, 3'); line.attr('class', 'messageLine1'); @@ -457,29 +465,47 @@ const drawMessage = async function (diagram, msgModel, lineStartY: number, diagO line.attr('stroke', 'none'); // handled by theme/css anyway line.style('fill', 'none'); // remove any fill colour - if (type === diagObj.db.LINETYPE.SOLID_TOP) { + if (type === diagObj.db.LINETYPE.SOLID_TOP || type === diagObj.db.LINETYPE.SOLID_TOP_DOTTED) { line.attr('marker-end', 'url(' + url + '#solidTopArrowHead)'); } - if (type === diagObj.db.LINETYPE.SOLID_BOTTOM) { + if ( + type === diagObj.db.LINETYPE.SOLID_BOTTOM || + type === diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED + ) { line.attr('marker-end', 'url(' + url + '#solidBottomArrowHead)'); } - if (type === diagObj.db.LINETYPE.STICK_TOP) { + if (type === diagObj.db.LINETYPE.STICK_TOP || type === diagObj.db.LINETYPE.STICK_TOP_DOTTED) { line.attr('marker-end', 'url(' + url + '#stickTopArrowHead)'); } - if (type === diagObj.db.LINETYPE.STICK_BOTTOM) { + if ( + type === diagObj.db.LINETYPE.STICK_BOTTOM || + type === diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED + ) { line.attr('marker-end', 'url(' + url + '#stickBottomArrowHead)'); } - if (type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE) { + if ( + type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE || + type === diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED + ) { line.attr('marker-start', 'url(' + url + '#solidBottomArrowHead)'); } - if (type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE) { + if ( + type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE || + type === diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED + ) { line.attr('marker-start', 'url(' + url + '#solidTopArrowHead)'); } - if (type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE) { + if ( + type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE || + type === diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED + ) { line.attr('marker-start', 'url(' + url + '#stickBottomArrowHead)'); } - if (type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE) { + if ( + type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE || + type === diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED + ) { line.attr('marker-start', 'url(' + url + '#stickTopArrowHead)'); } @@ -1066,14 +1092,27 @@ export const draw = async function (_text: string, id: string, _version: string, diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.SOLID_TOP, diagObj.db.LINETYPE.SOLID_BOTTOM, diagObj.db.LINETYPE.STICK_TOP, diagObj.db.LINETYPE.STICK_BOTTOM, + + diagObj.db.LINETYPE.SOLID_TOP_DOTTED, + diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED, + diagObj.db.LINETYPE.STICK_TOP_DOTTED, + diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE, diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE, diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE, diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE, + + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, @@ -1469,14 +1508,27 @@ const buildMessageModel = function (msg, actors, diagObj) { diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.SOLID_TOP, diagObj.db.LINETYPE.SOLID_BOTTOM, diagObj.db.LINETYPE.STICK_TOP, diagObj.db.LINETYPE.STICK_BOTTOM, + + diagObj.db.LINETYPE.SOLID_TOP_DOTTED, + diagObj.db.LINETYPE.SOLID_BOTTOM_DOTTED, + diagObj.db.LINETYPE.STICK_TOP_DOTTED, + diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE, diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE, diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE, diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE, + + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.DOTTED, diagObj.db.LINETYPE.SOLID_CROSS, diagObj.db.LINETYPE.DOTTED_CROSS, @@ -1531,10 +1583,24 @@ const buildMessageModel = function (msg, actors, diagObj) { ![ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.STICK_TOP, diagObj.db.LINETYPE.STICK_BOTTOM, + + diagObj.db.LINETYPE.STICK_TOP_DOTTED, + diagObj.db.LINETYPE.STICK_BOTTOM_DOTTED, + + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE, diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE, + + diagObj.db.LINETYPE.STICK_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.STICK_ARROW_BOTTOM_REVERSE_DOTTED, + + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE, ].includes(msg.type) ) { stopx += adjustValue(3); @@ -1544,9 +1610,14 @@ const buildMessageModel = function (msg, actors, diagObj) { * Shorten start position of bidirectional arrow to accommodate for second arrowhead */ if ( - [diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes( - msg.type - ) + [ + diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, + diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE_DOTTED, + diagObj.db.LINETYPE.SOLID_ARROW_TOP_REVERSE, + diagObj.db.LINETYPE.SOLID_ARROW_BOTTOM_REVERSE, + ].includes(msg.type) ) { startx -= adjustValue(3); }