package.dist.chunks.mermaid.esm.chunk-HAXCHQOQ.mjs.map Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mermaid Show documentation
Show all versions of mermaid Show documentation
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
{
"version": 3,
"sources": ["../../../src/dagre-wrapper/createLabel.js", "../../../src/dagre-wrapper/shapes/util.js", "../../../src/dagre-wrapper/blockArrowHelper.ts", "../../../src/dagre-wrapper/intersect/intersect-node.js", "../../../src/dagre-wrapper/intersect/intersect-ellipse.js", "../../../src/dagre-wrapper/intersect/intersect-circle.js", "../../../src/dagre-wrapper/intersect/intersect-line.js", "../../../src/dagre-wrapper/intersect/intersect-polygon.js", "../../../src/dagre-wrapper/intersect/intersect-rect.js", "../../../src/dagre-wrapper/intersect/index.js", "../../../src/dagre-wrapper/shapes/note.js", "../../../src/dagre-wrapper/nodes.js"],
"sourcesContent": ["import { select } from 'd3';\nimport { log } from '../logger.js';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport { evaluate } from '../diagrams/common/common.js';\nimport { decodeEntities } from '../utils.js';\nimport { replaceIconSubstring } from '../rendering-util/createText.js';\n\n/**\n * @param dom\n * @param styleFn\n */\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\n/**\n * @param {any} node\n * @returns {SVGForeignObjectElement} Node\n */\nfunction addHtmlLabel(node) {\n const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n const div = fo.append('xhtml:div');\n\n const label = node.label;\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n const span = div.append('span');\n span.html(label);\n applyStyle(span, node.labelStyle);\n span.attr('class', labelClass);\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n return fo.node();\n}\n/**\n * @param _vertexText\n * @param style\n * @param isTitle\n * @param isNode\n * @deprecated svg-util/createText instead\n */\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || '';\n if (typeof vertexText === 'object') {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n vertexText = vertexText.replace(/\\\\n|\\n/g, '
');\n log.debug('vertexText' + vertexText);\n const node = {\n isNode,\n label: replaceIconSubstring(decodeEntities(vertexText)),\n labelStyle: style.replace('fill:', 'color:'),\n };\n let vertexNode = addHtmlLabel(node);\n // vertexNode.parentNode.removeChild(vertexNode);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n svgLabel.setAttribute('style', style.replace('color:', 'fill:'));\n let rows = [];\n if (typeof vertexText === 'string') {\n rows = vertexText.split(/\\\\n|\\n|
/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n\n for (const row of rows) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n tspan.setAttribute('dy', '1em');\n tspan.setAttribute('x', '0');\n if (isTitle) {\n tspan.setAttribute('class', 'title-row');\n } else {\n tspan.setAttribute('class', 'row');\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\n\nexport default createLabel;\n", "import createLabel from '../createLabel.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport { evaluate, sanitizeText } from '../../diagrams/common/common.js';\nimport { decodeEntities } from '../../utils.js';\n\nexport const labelHelper = async (parent, node, _classes, isNode) => {\n const config = getConfig();\n let classes;\n const useHtmlLabels = node.useHtmlLabels || evaluate(config.flowchart.htmlLabels);\n if (!_classes) {\n classes = 'node default';\n } else {\n classes = _classes;\n }\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the label and insert it after the rect\n const label = shapeSvg.insert('g').attr('class', 'label').attr('style', node.labelStyle);\n\n // Replace labelText with default value if undefined\n let labelText;\n if (node.labelText === undefined) {\n labelText = '';\n } else {\n labelText = typeof node.labelText === 'string' ? node.labelText : node.labelText[0];\n }\n\n const textNode = label.node();\n let text;\n if (node.labelType === 'markdown') {\n // text = textNode;\n text = createText(\n label,\n sanitizeText(decodeEntities(labelText), config),\n {\n useHtmlLabels,\n width: node.width || config.flowchart.wrappingWidth,\n classes: 'markdown-node-label',\n },\n config\n );\n } else {\n text = textNode.appendChild(\n createLabel(sanitizeText(decodeEntities(labelText), config), node.labelStyle, false, isNode)\n );\n }\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n\n if (evaluate(config.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n\n // if there are images, need to wait for them to load before getting the bounding box\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = labelText.replace(/]*>/g, '').trim() === '';\n\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n /**\n *\n */\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize = config.fontSize\n ? config.fontSize\n : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + 'px';\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = '100%';\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\n if (useHtmlLabels) {\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n } else {\n label.attr('transform', 'translate(' + 0 + ', ' + -bbox.height / 2 + ')');\n }\n if (node.centerLabel) {\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n }\n label.insert('rect', ':first-child');\n\n return { shapeSvg, bbox, halfPadding, label };\n};\n\nexport const updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\n\n/**\n * @param parent\n * @param w\n * @param h\n * @param points\n */\nexport function insertPolygonShape(parent, w, h, points) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n", "import type { Direction } from '../../src/diagrams/block/blockTypes.js';\n\nconst expandAndDeduplicateDirections = (directions: Direction[]) => {\n const uniqueDirections = new Set();\n\n for (const direction of directions) {\n switch (direction) {\n case 'x':\n uniqueDirections.add('right');\n uniqueDirections.add('left');\n break;\n case 'y':\n uniqueDirections.add('up');\n uniqueDirections.add('down');\n break;\n default:\n uniqueDirections.add(direction);\n break;\n }\n }\n\n return uniqueDirections;\n};\nexport const getArrowPoints = (\n duplicatedDirections: Direction[],\n bbox: { width: number; height: number },\n node: any\n) => {\n // Expand and deduplicate the provided directions.\n // for instance: x, right => right, left\n const directions = expandAndDeduplicateDirections(duplicatedDirections);\n\n // Factor to divide height for some calculations.\n const f = 2;\n\n // Calculated height of the bounding box, accounting for node padding.\n const height = bbox.height + 2 * node.padding;\n // Midpoint calculation based on height.\n const midpoint = height / f;\n // Calculated width of the bounding box, accounting for additional width and node padding.\n const width = bbox.width + 2 * midpoint + node.padding;\n // Padding to use, half of the node padding.\n const padding = node.padding / 2;\n\n if (\n directions.has('right') &&\n directions.has('left') &&\n directions.has('up') &&\n directions.has('down')\n ) {\n // SQUARE\n return [\n // Bottom\n { x: 0, y: 0 },\n { x: midpoint, y: 0 },\n { x: width / 2, y: 2 * padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: 0 },\n\n // Right\n { x: width, y: -height / 3 },\n { x: width + 2 * padding, y: -height / 2 },\n { x: width, y: (-2 * height) / 3 },\n { x: width, y: -height },\n\n // Top\n { x: width - midpoint, y: -height },\n { x: width / 2, y: -height - 2 * padding },\n { x: midpoint, y: -height },\n\n // Left\n { x: 0, y: -height },\n { x: 0, y: (-2 * height) / 3 },\n { x: -2 * padding, y: -height / 2 },\n { x: 0, y: -height / 3 },\n ];\n }\n if (directions.has('right') && directions.has('left') && directions.has('up')) {\n // RECTANGLE_VERTICAL (Top Open)\n return [\n { x: midpoint, y: 0 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('right') && directions.has('left') && directions.has('down')) {\n // RECTANGLE_VERTICAL (Bottom Open)\n return [\n { x: 0, y: 0 },\n { x: midpoint, y: -height },\n { x: width - midpoint, y: -height },\n { x: width, y: 0 },\n ];\n }\n if (directions.has('right') && directions.has('up') && directions.has('down')) {\n // RECTANGLE_HORIZONTAL (Right Open)\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: width, y: -height + midpoint },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('up') && directions.has('down')) {\n // RECTANGLE_HORIZONTAL (Left Open)\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: 0, y: -height + midpoint },\n { x: width, y: -height },\n ];\n }\n if (directions.has('right') && directions.has('left')) {\n // HORIZONTAL_LINE\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('up') && directions.has('down')) {\n // VERTICAL_LINE\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding },\n ];\n }\n if (directions.has('right') && directions.has('up')) {\n // ANGLE_RT\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('right') && directions.has('down')) {\n // ANGLE_RB\n return [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('up')) {\n // ANGLE_LT\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: width, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('down')) {\n // ANGLE_LB\n return [\n { x: width, y: 0 },\n { x: 0, y: 0 },\n { x: width, y: -height },\n ];\n }\n if (directions.has('right')) {\n // ARROW_RIGHT\n return [\n { x: midpoint, y: -padding },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n // top left corner of arrow\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n ];\n }\n if (directions.has('left')) {\n // ARROW_LEFT\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n // Two points, the right corners\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('up')) {\n // ARROW_TOP\n return [\n // Bottom center\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n ];\n }\n if (directions.has('down')) {\n // ARROW_BOTTOM\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding },\n ];\n }\n\n // POINT\n return [{ x: 0, y: 0 }];\n};\n", "/**\n * @param node\n * @param point\n */\nfunction intersectNode(node, point) {\n // console.info('Intersect Node');\n return node.intersect(point);\n}\n\nexport default intersectNode;\n", "/**\n * @param node\n * @param rx\n * @param ry\n * @param point\n */\nfunction intersectEllipse(node, rx, ry, point) {\n // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n var cx = node.x;\n var cy = node.y;\n\n var px = cx - point.x;\n var py = cy - point.y;\n\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\n var dx = Math.abs((rx * ry * px) / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs((rx * ry * py) / det);\n if (point.y < cy) {\n dy = -dy;\n }\n\n return { x: cx + dx, y: cy + dy };\n}\n\nexport default intersectEllipse;\n", "import intersectEllipse from './intersect-ellipse.js';\n\n/**\n * @param node\n * @param rx\n * @param point\n */\nfunction intersectCircle(node, rx, point) {\n return intersectEllipse(node, rx, rx, point);\n}\n\nexport default intersectCircle;\n", "/**\n * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect.\n *\n * @param p1\n * @param p2\n * @param q1\n * @param q2\n */\nfunction intersectLine(p1, p2, q1, q2) {\n // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n // p7 and p473.\n\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n\n // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n // b1 y + c1 = 0.\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n\n // Compute r3 and r4.\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n\n // Check signs of r3 and r4. If both point 3 and point 4 lie on\n // same side of line 1, the line segments do not intersect.\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n\n // Compute r1 and r2\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n\n // Check signs of r1 and r2. If both point 1 and point 2 lie\n // on same side of second line segment, the line segments do\n // not intersect.\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Line segments intersect: compute intersection point.\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return /*COLLINEAR*/;\n }\n\n offset = Math.abs(denom / 2);\n\n // The denom/2 is to get rounding instead of truncating. It\n // is added or subtracted to the numerator, depending upon the\n // sign of the numerator.\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n return { x: x, y: y };\n}\n\n/**\n * @param r1\n * @param r2\n */\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n", "/* eslint \"no-console\": off */\n\nimport intersectLine from './intersect-line.js';\n\nexport default intersectPolygon;\n\n/**\n * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming\n * that it has the shape specified by polygon.\n *\n * @param node\n * @param polyPoints\n * @param point\n */\nfunction intersectPolygon(node, polyPoints, point) {\n var x1 = node.x;\n var y1 = node.y;\n\n var intersections = [];\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === 'function') {\n polyPoints.forEach(function (entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect = intersectLine(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n\n if (!intersections.length) {\n // console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node);\n return node;\n }\n\n if (intersections.length > 1) {\n // More intersections, find the one nearest to edge end point\n intersections.sort(function (p, q) {\n var pdx = p.x - point.x;\n var pdy = p.y - point.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n var qdx = q.x - point.x;\n var qdy = q.y - point.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n", "const intersectRect = (node, point) => {\n var x = node.x;\n var y = node.y;\n\n // Rectangle intersection algorithm from:\n // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n};\n\nexport default intersectRect;\n", "/*\n * Borrowed with love from dagre-d3. Many thanks to cpettitt!\n */\n\nimport node from './intersect-node.js';\nimport circle from './intersect-circle.js';\nimport ellipse from './intersect-ellipse.js';\nimport polygon from './intersect-polygon.js';\nimport rect from './intersect-rect.js';\n\nexport default {\n node,\n circle,\n ellipse,\n polygon,\n rect,\n};\n", "import { updateNodeBounds, labelHelper } from './util.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport intersect from '../intersect/index.js';\n\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes,\n true\n );\n\n log.info('Classes = ', node.classes);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nexport default note;\n", "import { select } from 'd3';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport { evaluate } from '../diagrams/common/common.js';\nimport { log } from '../logger.js';\nimport { getArrowPoints } from './blockArrowHelper.js';\nimport createLabel from './createLabel.js';\nimport intersect from './intersect/index.js';\nimport note from './shapes/note.js';\nimport { insertPolygonShape, labelHelper, updateNodeBounds } from './shapes/util.js';\n\nconst formatClass = (str) => {\n if (str) {\n return ' ' + str;\n }\n return '';\n};\nconst getClassesFromNode = (node, otherClasses) => {\n return `${otherClasses ? otherClasses : 'node default'}${formatClass(node.classes)} ${formatClass(\n node.class\n )}`;\n};\n\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 },\n ];\n\n log.info('Question main (Circle)');\n\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr('style', node.style);\n updateNodeBounds(node, questionElem);\n\n node.intersect = function (point) {\n log.warn('Intersect called');\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst choice = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 },\n ];\n\n const choice = shapeSvg.insert('polygon', ':first-child').attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n );\n // center the circle around its coordinate\n choice.attr('class', 'state-start').attr('r', 7).attr('width', 28).attr('height', 28);\n node.width = 28;\n node.height = 28;\n\n node.intersect = function (point) {\n return intersect.circle(node, 14, point);\n };\n\n return shapeSvg;\n};\n\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 },\n ];\n\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr('style', node.style);\n updateNodeBounds(node, hex);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst block_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, undefined, true);\n\n const f = 2;\n const h = bbox.height + 2 * node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n\n const points = getArrowPoints(node.directions, bbox, node);\n\n const blockArrow = insertPolygonShape(shapeSvg, w, h, points);\n blockArrow.attr('style', node.style);\n updateNodeBounds(node, blockArrow);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n\n node.width = w + h;\n node.height = h;\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true);\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (-2 * h) / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + (2 * h) / 6, y: -h },\n { x: h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (2 * h) / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - (2 * h) / 6, y: -h },\n { x: -h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (-2 * h) / 6, y: 0 },\n { x: w + (2 * h) / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + (2 * h) / 6, y: -h },\n { x: (-2 * h) / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n\n const shape =\n 'M 0,' +\n ry +\n ' a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n w +\n ' 0 a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n -w +\n ' 0 l 0,' +\n h +\n ' a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n w +\n ' 0 l 0,' +\n -h;\n\n const el = shapeSvg\n .attr('label-offset-y', ry)\n .insert('path', ':first-child')\n .attr('style', node.style)\n .attr('d', shape)\n .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')');\n\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - node.x;\n\n if (\n rx != 0 &&\n (Math.abs(x) < node.width / 2 ||\n (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry))\n ) {\n // ellipsis equation: x*x / a*a + y*y / b*b = 1\n // solve for y to get adjusted value for pos.y\n let y = ry * ry * (1 - (x * x) / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - node.y > 0) {\n y = -y;\n }\n\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n};\n\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes + ' ' + node.class,\n true\n );\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // console.log('Rect node:', node, 'bbox:', bbox, 'halfPadding:', halfPadding, 'node.padding:', node.padding);\n // const totalWidth = bbox.width + node.padding * 2;\n // const totalHeight = bbox.height + node.padding * 2;\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect\n .attr('class', 'basic label-container')\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst composite = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes,\n true\n );\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // const totalWidth = bbox.width + node.padding * 2;\n // const totalHeight = bbox.height + node.padding * 2;\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect\n .attr('class', 'basic cluster composite label-container')\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, 'label', true);\n\n log.trace('Classes = ', node.class);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // Hide the rect we are only after the label\n const totalWidth = 0;\n const totalHeight = 0;\n rect.attr('width', totalWidth).attr('height', totalHeight);\n shapeSvg.attr('class', 'label edgeLabel');\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\n/**\n * @param rect\n * @param borders\n * @param totalWidth\n * @param totalHeight\n */\nfunction applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes('t')) {\n log.debug('add top border');\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes('r')) {\n log.debug('add right border');\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes('b')) {\n log.debug('add bottom border');\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes('l')) {\n log.debug('add left border');\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect.attr('stroke-dasharray', strokeDashArray.join(' '));\n}\n\nconst rectWithTitle = (parent, node) => {\n // const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes);\n\n let classes;\n if (!node.classes) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.classes;\n }\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n // const innerRect = shapeSvg.insert('rect');\n const innerLine = shapeSvg.insert('line');\n\n const label = shapeSvg.insert('g').attr('class', 'label');\n\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n // const text2 = typeof text2prim === 'object' ? text2prim[0] : text2prim;\n\n let title = '';\n if (typeof text2 === 'object') {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info('Label text abc79', title, text2, typeof text2 === 'object');\n\n const text = label.node().appendChild(createLabel(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n log.info('Text 2', text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label\n .node()\n .appendChild(\n createLabel(textRows.join ? textRows.join('
') : textRows, node.labelStyle, true, true)\n );\n\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n // bbox = label.getBBox();\n // log.info(descr);\n const halfPadding = node.padding / 2;\n select(descr).attr(\n 'transform',\n 'translate( ' +\n // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n ', ' +\n (titleBox.height + halfPadding + 5) +\n ')'\n );\n select(text).attr(\n 'transform',\n 'translate( ' +\n // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n ', ' +\n 0 +\n ')'\n );\n // Get the size of the label\n\n // Bounding box for title and text\n bbox = label.node().getBBox();\n\n // Center the label\n label.attr(\n 'transform',\n 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n );\n\n rect\n .attr('class', 'outer title-state')\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n innerLine\n .attr('class', 'divider')\n .attr('x1', -bbox.width / 2 - halfPadding)\n .attr('x2', bbox.width / 2 + halfPadding)\n .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n\n // add the rect\n const rect = shapeSvg\n .insert('rect', ':first-child')\n .attr('style', node.style)\n .attr('rx', h / 2)\n .attr('ry', h / 2)\n .attr('x', -w / 2)\n .attr('y', -h / 2)\n .attr('width', w)\n .attr('height', h);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n const circle = shapeSvg.insert('circle', ':first-child');\n\n // center the circle around its coordinate\n circle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n log.info('Circle main');\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, bbox.width / 2 + halfPadding, point);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point);\n };\n\n return shapeSvg;\n};\n\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n const gap = 5;\n const circleGroup = shapeSvg.insert('g', ':first-child');\n const outerCircle = circleGroup.insert('circle');\n const innerCircle = circleGroup.insert('circle');\n\n circleGroup.attr('class', node.class);\n\n // center the circle around its coordinate\n outerCircle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding + gap)\n .attr('width', bbox.width + node.padding + gap * 2)\n .attr('height', bbox.height + node.padding + gap * 2);\n\n innerCircle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n log.info('DoubleCircle main');\n\n updateNodeBounds(node, outerCircle);\n\n node.intersect = function (point) {\n log.info('DoubleCircle intersect', node, bbox.width / 2 + halfPadding + gap, point);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point);\n };\n\n return shapeSvg;\n};\n\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst start = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n const circle = shapeSvg.insert('circle', ':first-child');\n\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n};\n\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let width = 70;\n let height = 10;\n\n if (dir === 'LR') {\n width = 10;\n height = 70;\n }\n\n const shape = shapeSvg\n .append('rect')\n .attr('x', (-1 * width) / 2)\n .attr('y', (-1 * height) / 2)\n .attr('width', width)\n .attr('height', height)\n .attr('class', 'fork-join');\n\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst end = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n const innerCircle = shapeSvg.insert('circle', ':first-child');\n const circle = shapeSvg.insert('circle', ':first-child');\n\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n innerCircle.attr('class', 'state-end').attr('r', 5).attr('width', 10).attr('height', 10);\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n};\n\nconst class_box = (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n\n let classes;\n if (!node.classes) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.classes;\n }\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n const topLine = shapeSvg.insert('line');\n const bottomLine = shapeSvg.insert('line');\n let maxWidth = 0;\n let maxHeight = rowPadding;\n\n const labelContainer = shapeSvg.insert('g').attr('class', 'label');\n let verticalPos = 0;\n const hasInterface = node.classData.annotations?.[0];\n\n // 1. Create the labels\n const interfaceLabelText = node.classData.annotations[0]\n ? '\u00AB' + node.classData.annotations[0] + '\u00BB'\n : '';\n const interfaceLabel = labelContainer\n .node()\n .appendChild(createLabel(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr('width', interfaceBBox.width);\n dv.attr('height', interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n\n let classTitleString = node.classData.label;\n\n if (node.classData.type !== undefined && node.classData.type !== '') {\n if (getConfig().flowchart.htmlLabels) {\n classTitleString += '<' + node.classData.type + '>';\n } else {\n classTitleString += '<' + node.classData.type + '>';\n }\n }\n const classTitleLabel = labelContainer\n .node()\n .appendChild(createLabel(classTitleString, node.labelStyle, true, true));\n select(classTitleLabel).attr('class', 'classTitle');\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr('width', classTitleBBox.width);\n dv.attr('height', classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach((member) => {\n const parsedInfo = member.getDisplayDetails();\n let parsedText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, '>');\n }\n const lbl = labelContainer\n .node()\n .appendChild(\n createLabel(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n\n maxHeight += lineHeight;\n\n const classMethods = [];\n node.classData.methods.forEach((member) => {\n const parsedInfo = member.getDisplayDetails();\n let displayText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, '>');\n }\n const lbl = labelContainer\n .node()\n .appendChild(\n createLabel(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n\n classMethods.push(lbl);\n });\n\n maxHeight += lineHeight;\n\n // 2. Position the labels\n\n // position the interface label\n if (hasInterface) {\n let diffX = (maxWidth - interfaceBBox.width) / 2;\n select(interfaceLabel).attr(\n 'transform',\n 'translate( ' + ((-1 * maxWidth) / 2 + diffX) + ', ' + (-1 * maxHeight) / 2 + ')'\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n // Position the class title label\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select(classTitleLabel).attr(\n 'transform',\n 'translate( ' +\n ((-1 * maxWidth) / 2 + diffX) +\n ', ' +\n ((-1 * maxHeight) / 2 + verticalPos) +\n ')'\n );\n verticalPos += classTitleBBox.height + rowPadding;\n\n topLine\n .attr('class', 'divider')\n .attr('x1', -maxWidth / 2 - halfPadding)\n .attr('x2', maxWidth / 2 + halfPadding)\n .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n verticalPos += lineHeight;\n\n classAttributes.forEach((lbl) => {\n select(lbl).attr(\n 'transform',\n 'translate( ' +\n -maxWidth / 2 +\n ', ' +\n ((-1 * maxHeight) / 2 + verticalPos + lineHeight / 2) +\n ')'\n );\n //get the height of the bounding box of each member if exists\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n\n verticalPos += lineHeight;\n bottomLine\n .attr('class', 'divider')\n .attr('x1', -maxWidth / 2 - halfPadding)\n .attr('x2', maxWidth / 2 + halfPadding)\n .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n verticalPos += lineHeight;\n\n classMethods.forEach((lbl) => {\n select(lbl).attr(\n 'transform',\n 'translate( ' + -maxWidth / 2 + ', ' + ((-1 * maxHeight) / 2 + verticalPos) + ')'\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n\n rect\n .attr('style', node.style)\n .attr('class', 'outer title-state')\n .attr('x', -maxWidth / 2 - halfPadding)\n .attr('y', -(maxHeight / 2) - halfPadding)\n .attr('width', maxWidth + node.padding)\n .attr('height', maxHeight + node.padding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst shapes = {\n rhombus: question,\n composite,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n block_arrow,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box,\n};\n\nlet nodeElems = {};\n\nexport const insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n\n // Add link when appropriate\n if (node.link) {\n let target;\n if (getConfig().securityLevel === 'sandbox') {\n target = '_top';\n } else if (node.linkTarget) {\n target = node.linkTarget || '_blank';\n }\n newEl = elem.insert('svg:a').attr('xlink:href', node.link).attr('target', target);\n el = await shapes[node.shape](newEl, node, dir);\n } else {\n el = await shapes[node.shape](elem, node, dir);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr('title', node.tooltip);\n }\n if (node.class) {\n el.attr('class', 'node default ' + node.class);\n }\n\n nodeElems[node.id] = newEl;\n\n if (node.haveCallback) {\n nodeElems[node.id].attr('class', nodeElems[node.id].attr('class') + ' clickable');\n }\n return newEl;\n};\nexport const setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nexport const clear = () => {\n nodeElems = {};\n};\n\nexport const positionNode = (node) => {\n const el = nodeElems[node.id];\n log.trace(\n 'Transforming node',\n node.diff,\n node,\n 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')'\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n 'transform',\n 'translate(' +\n (node.x + diff - node.width / 2) +\n ', ' +\n (node.y - node.height / 2 - padding) +\n ')'\n );\n } else {\n el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n }\n return diff;\n};\n"],
"mappings": "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",
"names": ["rect", "choice", "rect", "circle", "diffX"]
}