{ "version": 3, "sources": ["../../../src/rendering-util/rendering-elements/edgeMarker.ts", "../../../src/rendering-util/rendering-elements/edges.js", "../../../src/rendering-util/rendering-elements/markers.js"], "sourcesContent": ["import type { SVG } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport type { EdgeData } from '../../types.js';\n/**\n * Adds SVG markers to a path element based on the arrow types specified in the edge.\n *\n * @param svgPath - The SVG path element to add markers to.\n * @param edge - The edge data object containing the arrow types.\n * @param url - The URL of the SVG marker definitions.\n * @param id - The ID prefix for the SVG marker definitions.\n * @param diagramType - The type of diagram being rendered.\n */\nexport const addEdgeMarkers = (\n svgPath: SVG,\n edge: Pick,\n url: string,\n id: string,\n diagramType: string,\n useMargin = false,\n strokeColor?: string\n) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(\n svgPath,\n 'start',\n edge.arrowTypeStart,\n url,\n id,\n diagramType,\n useMargin,\n strokeColor\n );\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType, useMargin, strokeColor);\n }\n};\n\nconst arrowTypesMap = {\n arrow_cross: { type: 'cross', fill: false },\n arrow_point: { type: 'point', fill: true },\n arrow_barb: { type: 'barb', fill: true },\n arrow_barb_neo: { type: 'barb', fill: true },\n arrow_circle: { type: 'circle', fill: false },\n aggregation: { type: 'aggregation', fill: false },\n extension: { type: 'extension', fill: false },\n composition: { type: 'composition', fill: true },\n dependency: { type: 'dependency', fill: true },\n lollipop: { type: 'lollipop', fill: false },\n only_one: { type: 'onlyOne', fill: false },\n zero_or_one: { type: 'zeroOrOne', fill: false },\n one_or_more: { type: 'oneOrMore', fill: false },\n zero_or_more: { type: 'zeroOrMore', fill: false },\n requirement_arrow: { type: 'requirement_arrow', fill: false },\n requirement_contains: { type: 'requirement_contains', fill: false },\n} as const;\n\nconst arrowTypesWithMarginSupport = [\n 'cross',\n 'point',\n 'circle',\n 'lollipop',\n 'aggregation',\n 'extension',\n 'composition',\n 'dependency',\n 'barb',\n];\n\nconst addEdgeMarker = (\n svgPath: SVG,\n position: 'start' | 'end',\n arrowType: string,\n url: string,\n id: string,\n diagramType: string,\n useMargin = false,\n strokeColor?: string\n) => {\n const arrowTypeInfo = arrowTypesMap[arrowType as keyof typeof arrowTypesMap];\n const marginSupport = arrowTypeInfo && arrowTypesWithMarginSupport.includes(arrowTypeInfo.type);\n\n if (!arrowTypeInfo) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return; // unknown arrow type, ignore\n }\n\n const endMarkerType = arrowTypeInfo.type;\n const suffix = position === 'start' ? 'Start' : 'End';\n\n const offset = useMargin && marginSupport ? '-margin' : '';\n const originalMarkerId = `${id}_${diagramType}-${endMarkerType}${suffix}${offset}`;\n\n // If stroke color is specified and non-empty, create or use a colored variant of the marker\n if (strokeColor && strokeColor.trim() !== '') {\n // Create a sanitized color value for use in IDs\n const colorId = strokeColor.replace(/[^\\dA-Za-z]/g, '_');\n const coloredMarkerId = `${originalMarkerId}_${colorId}`;\n\n // Check if the colored marker already exists\n if (!document.getElementById(coloredMarkerId)) {\n // Get the original marker\n const originalMarker = document.getElementById(originalMarkerId);\n if (originalMarker) {\n // Clone the marker and create colored version\n const coloredMarker = originalMarker.cloneNode(true) as Element;\n coloredMarker.id = coloredMarkerId;\n\n // Apply colors to the paths inside the marker\n const paths = coloredMarker.querySelectorAll('path, circle, line');\n paths.forEach((path) => {\n path.setAttribute('stroke', strokeColor);\n\n // Apply fill only to markers that should be filled\n if (arrowTypeInfo.fill) {\n path.setAttribute('fill', strokeColor);\n }\n });\n\n // Add the new colored marker to the defs section\n originalMarker.parentNode?.appendChild(coloredMarker);\n }\n }\n\n // Use the colored marker\n svgPath.attr(`marker-${position}`, `url(${url}#${coloredMarkerId})`);\n } else {\n // Always use the original marker for unstyled edges\n svgPath.attr(`marker-${position}`, `url(${url}#${originalMarkerId})`);\n }\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { getEffectiveHtmlLabels } from '../../config.js';\nimport { log } from '../../logger.js';\nimport { createText } from '../createText.js';\nimport { computeLabelTransform } from '../labelTransform.js';\nimport utils, { handleUndefinedAttr } from '../../utils.js';\nimport {\n getLineFunctionsWithOffset,\n markerOffsets,\n markerOffsets2,\n} from '../../utils/lineWithOffset.js';\nimport { getSubGraphTitleMargins } from '../../utils/subGraphTitleMargins.js';\n\nimport {\n curveBasis,\n curveLinear,\n curveCardinal,\n curveBumpX,\n curveBumpY,\n curveCatmullRom,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n line,\n select,\n} from 'd3';\nimport rough from 'roughjs';\nimport createLabel from './createLabel.js';\nimport { addEdgeMarkers } from './edgeMarker.ts';\nimport { isLabelStyle, styles2String } from './shapes/handDrawnShapeStyles.js';\n\n/**\n * Resolve the effective curve type for an edge.\n * If edge.curve is a string (e.g. 'rounded', 'linear'), use it directly.\n * Otherwise (undefined, null, or a D3 CurveFactory function), fall back to config.\n * @param {*} edgeCurve - The edge.curve value (string, function, or undefined/null)\n * @returns {string|undefined} - The resolved curve type string\n */\nexport const resolveEdgeCurveType = (edgeCurve) => {\n return typeof edgeCurve === 'string' ? edgeCurve : getConfig()?.flowchart?.curve;\n};\n\nexport const edgeLabels = new Map();\nexport const terminalLabels = new Map();\n\nexport const clear = () => {\n edgeLabels.clear();\n terminalLabels.clear();\n};\n\nexport const getLabelStyles = (styleArray) => {\n if (!styleArray) {\n return '';\n }\n if (typeof styleArray === 'string') {\n return styleArray;\n }\n return styleArray.reduce((acc, style) => acc + ';' + style, '');\n};\n\nexport const insertEdgeLabel = async (elem, edge) => {\n const config = getConfig();\n let useHtmlLabels = getEffectiveHtmlLabels(config);\n const { labelStyles } = styles2String(edge);\n edge.labelStyle = labelStyles;\n\n // Create outer g, edgeLabel, this will be positioned after graph layout\n const edgeLabel = elem.insert('g').attr('class', 'edgeLabel');\n\n // Create inner g, label, this will be positioned now for centering the text\n const label = edgeLabel.insert('g').attr('class', 'label').attr('data-id', edge.id);\n\n const isMarkdown = edge.labelType === 'markdown';\n const markdownWidth = undefined; // Use default width for markdown labels\n const labelElement = await createText(\n elem,\n edge.label,\n {\n style: getLabelStyles(edge.labelStyle),\n useHtmlLabels,\n addSvgBackground: true,\n isNode: false,\n markdown: isMarkdown,\n // Plain text edge labels should auto-wrap, markdown edge labels respect markdownAutoWrap config\n width: isMarkdown ? markdownWidth : undefined,\n },\n config\n );\n\n label.node().appendChild(labelElement);\n log.info('abc82', edge, edge.labelType);\n\n // Center the label\n let bbox = labelElement.getBBox();\n let transformBbox = bbox;\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n transformBbox = bbox;\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n } else {\n // For SVG labels, use text element's bbox so the text is centered on the edge\n const textEl = select(labelElement).select('text').node();\n if (textEl && typeof textEl.getBBox === 'function') {\n transformBbox = textEl.getBBox();\n }\n }\n label.attr('transform', computeLabelTransform(transformBbox, useHtmlLabels));\n\n // Make element accessible by id for positioning\n edgeLabels.set(edge.id, edgeLabel);\n\n // Update the abstract data of the edge with the new information about its width and height\n edge.width = bbox.width;\n edge.height = bbox.height;\n\n let fo;\n if (edge.startLabelLeft) {\n // Create the actual text element\n const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner');\n const startLabelElement = await createLabel(\n inner,\n edge.startLabelLeft,\n getLabelStyles(edge.labelStyle) || '',\n false,\n false\n );\n fo = startLabelElement;\n let slBox = startLabelElement.getBBox();\n if (useHtmlLabels) {\n const div = startLabelElement.children[0];\n const dv = select(startLabelElement);\n slBox = div.getBoundingClientRect();\n dv.attr('width', slBox.width);\n dv.attr('height', slBox.height);\n }\n inner.attr('transform', computeLabelTransform(slBox, useHtmlLabels));\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelRight.insert('g').attr('class', 'inner');\n const startLabelElement = await createLabel(\n inner,\n edge.startLabelRight,\n getLabelStyles(edge.labelStyle) || '',\n false,\n false\n );\n fo = startLabelElement;\n let slBox = startLabelElement.getBBox();\n if (useHtmlLabels) {\n const div = startLabelElement.children[0];\n const dv = select(startLabelElement);\n slBox = div.getBoundingClientRect();\n dv.attr('width', slBox.width);\n dv.attr('height', slBox.height);\n }\n inner.attr('transform', computeLabelTransform(slBox, useHtmlLabels));\n\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n // TODO: Remove? `inner` is not used\n const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner');\n const endLabelElement = await createLabel(\n endEdgeLabelLeft,\n edge.endLabelLeft,\n getLabelStyles(edge.labelStyle) || '',\n false,\n false\n );\n fo = endLabelElement;\n let slBox = endLabelElement.getBBox();\n if (useHtmlLabels) {\n const div = endLabelElement.children[0];\n const dv = select(endLabelElement);\n slBox = div.getBoundingClientRect();\n dv.attr('width', slBox.width);\n dv.attr('height', slBox.height);\n }\n inner.attr('transform', computeLabelTransform(slBox, useHtmlLabels));\n\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n // TODO: Remove? `inner` is not used\n const inner = endEdgeLabelRight.insert('g').attr('class', 'inner');\n const endLabelElement = await createLabel(\n endEdgeLabelRight,\n edge.endLabelRight,\n getLabelStyles(edge.labelStyle) || '',\n false,\n false\n );\n fo = endLabelElement;\n let slBox = endLabelElement.getBBox();\n if (useHtmlLabels) {\n const div = endLabelElement.children[0];\n const dv = select(endLabelElement);\n slBox = div.getBoundingClientRect();\n dv.attr('width', slBox.width);\n dv.attr('height', slBox.height);\n }\n inner.attr('transform', computeLabelTransform(slBox, useHtmlLabels));\n\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\n\n/**\n * @param {any} fo\n * @param {any} value\n */\nfunction setTerminalWidth(fo, value) {\n if (getEffectiveHtmlLabels(getConfig()) && fo) {\n fo.style.width = value.length * 9 + 'px';\n fo.style.height = '12px';\n }\n}\n\nexport const positionEdgeLabel = (edge, paths) => {\n log.debug('Moving label abc88 ', edge.id, edge.label, edgeLabels.get(edge.id), paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcLabelPosition(path);\n log.debug(\n 'Moving label ' + edge.label + ' from (',\n x,\n ',',\n y,\n ') to (',\n pos.x,\n ',',\n pos.y,\n ') abc88'\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr('transform', `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n\n if (edge.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, 'start_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n 'start_right',\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_right', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n};\n\nconst outsideNode = (node, point) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point.x - x);\n const dy = Math.abs(point.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n return dx >= w || dy >= h;\n};\n\nexport const intersection = (node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n // Intersection is top or bottom of rect.\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = (R * q) / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q,\n };\n\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n\n log.debug(`abc89 top/bottom calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n\n return res;\n } else {\n // Intersection on sides of rect\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = (Q * r) / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n\n return { x: _x, y: _y };\n }\n};\n\nconst cutPathAtIntersect = (_points, boundaryNode) => {\n log.warn('abc88 cutPathAtIntersect', _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point) => {\n log.info('abc88 checking point', point, boundaryNode);\n\n if (!outsideNode(boundaryNode, point) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point);\n log.debug('abc88 inside', point, lastPointOutside, inter);\n log.debug('abc88 intersection', inter, boundaryNode);\n\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y);\n });\n\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn('abc88 no intersect', inter, points);\n }\n isInside = true;\n } else {\n log.warn('abc88 outside', point, lastPointOutside);\n lastPointOutside = point;\n if (!isInside) {\n points.push(point);\n }\n }\n });\n log.debug('returning points', points);\n return points;\n};\n\nfunction extractCornerPoints(points) {\n const cornerPoints = [];\n const cornerPointPositions = [];\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n if (\n prev.x === curr.x &&\n curr.y === next.y &&\n Math.abs(curr.x - next.x) > 5 &&\n Math.abs(curr.y - prev.y) > 5\n ) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n } else if (\n prev.y === curr.y &&\n curr.x === next.x &&\n Math.abs(curr.x - prev.x) > 5 &&\n Math.abs(curr.y - next.y) > 5\n ) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n }\n }\n return { cornerPoints, cornerPointPositions };\n}\n\nconst findAdjacentPoint = function (pointA, pointB, distance) {\n const xDiff = pointB.x - pointA.x;\n const yDiff = pointB.y - pointA.y;\n const length = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n const ratio = distance / length;\n return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff };\n};\n\nconst fixCorners = function (lineData) {\n const { cornerPointPositions } = extractCornerPoints(lineData);\n const newLineData = [];\n for (let i = 0; i < lineData.length; i++) {\n if (cornerPointPositions.includes(i)) {\n const prevPoint = lineData[i - 1];\n const nextPoint = lineData[i + 1];\n const cornerPoint = lineData[i];\n\n const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5);\n const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5);\n\n const xDiff = newNextPoint.x - newPrevPoint.x;\n const yDiff = newNextPoint.y - newPrevPoint.y;\n newLineData.push(newPrevPoint);\n\n const a = Math.sqrt(2) * 2;\n let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y };\n if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) {\n log.debug(\n 'Corner point fixing',\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n const r = 5;\n if (cornerPoint.x === newPrevPoint.x) {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - r + a : newPrevPoint.x + r - a,\n y: yDiff < 0 ? newPrevPoint.y - a : newPrevPoint.y + a,\n };\n } else {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - a : newPrevPoint.x + a,\n y: yDiff < 0 ? newPrevPoint.y - r + a : newPrevPoint.y + r - a,\n };\n }\n } else {\n log.debug(\n 'Corner point skipping fixing',\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n }\n newLineData.push(newCornerPoint, newNextPoint);\n } else {\n newLineData.push(lineData[i]);\n }\n }\n return newLineData;\n};\n\nconst generateDashArray = (len, oValueS, oValueE) => {\n const middleLength = len - oValueS - oValueE;\n const dashLength = 2; // Length of each dash\n const gapLength = 2; // Length of each gap\n const dashGapPairLength = dashLength + gapLength;\n\n // Calculate number of complete dash-gap pairs that can fit\n const numberOfPairs = Math.floor(middleLength / dashGapPairLength);\n\n // Generate the middle pattern array\n const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(' ');\n\n // Combine all parts\n const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`;\n\n return dashArray;\n};\nexport const insertEdge = function (\n elem,\n edge,\n clusterDb,\n diagramType,\n startNode,\n endNode,\n diagramId,\n skipIntersect = false\n) {\n if (!diagramId) {\n throw new Error(\n `insertEdge: missing diagramId for edge \"${edge.id}\" \u2014 edge IDs require a diagram prefix for uniqueness`\n );\n }\n const { handDrawnSeed } = getConfig();\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = startNode;\n var head = endNode;\n const edgeClassStyles = [];\n for (const key in edge.cssCompiledStyles) {\n if (isLabelStyle(key)) {\n continue;\n }\n edgeClassStyles.push(edge.cssCompiledStyles[key]);\n }\n\n log.debug('UIO intersect check', edge.points, head.x, tail.x);\n if (head.intersect && tail.intersect && !skipIntersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.debug(\n 'Last point UIO',\n edge.start,\n '-->',\n edge.end,\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n const pointsStr = btoa(JSON.stringify(points));\n if (edge.toCluster) {\n log.info('to cluster abc88', clusterDb.get(edge.toCluster));\n points = cutPathAtIntersect(edge.points, clusterDb.get(edge.toCluster).node);\n\n pointsHasChanged = true;\n }\n\n if (edge.fromCluster) {\n log.debug(\n 'from cluster abc88',\n clusterDb.get(edge.fromCluster),\n JSON.stringify(points, null, 2)\n );\n points = cutPathAtIntersect(points.reverse(), clusterDb.get(edge.fromCluster).node).reverse();\n\n pointsHasChanged = true;\n }\n\n let lineData = points.filter((p) => !Number.isNaN(p.y));\n // Resolve curve type: use edge.curve if it's a string, otherwise fall back to config default\n const edgeCurveType = resolveEdgeCurveType(edge.curve);\n // Apply fixCorners for non-rounded curves to pre-round right-angle corners\n // (rounded curve type uses generateRoundedPath instead)\n if (edgeCurveType !== 'rounded') {\n lineData = fixCorners(lineData);\n }\n let curve = curveLinear;\n switch (edgeCurveType) {\n case 'linear':\n curve = curveLinear;\n break;\n case 'basis':\n curve = curveBasis;\n break;\n case 'cardinal':\n curve = curveCardinal;\n break;\n case 'bumpX':\n curve = curveBumpX;\n break;\n case 'bumpY':\n curve = curveBumpY;\n break;\n case 'catmullRom':\n curve = curveCatmullRom;\n break;\n case 'monotoneX':\n curve = curveMonotoneX;\n break;\n case 'monotoneY':\n curve = curveMonotoneY;\n break;\n case 'natural':\n curve = curveNatural;\n break;\n case 'step':\n curve = curveStep;\n break;\n case 'stepAfter':\n curve = curveStepAfter;\n break;\n case 'stepBefore':\n curve = curveStepBefore;\n break;\n case 'rounded':\n curve = curveLinear;\n break;\n default:\n curve = curveBasis;\n }\n\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n\n let strokeClasses;\n switch (edge.thickness) {\n case 'normal':\n strokeClasses = 'edge-thickness-normal';\n break;\n case 'thick':\n strokeClasses = 'edge-thickness-thick';\n break;\n case 'invisible':\n strokeClasses = 'edge-thickness-invisible';\n break;\n default:\n strokeClasses = 'edge-thickness-normal';\n }\n switch (edge.pattern) {\n case 'solid':\n strokeClasses += ' edge-pattern-solid';\n break;\n case 'dotted':\n strokeClasses += ' edge-pattern-dotted';\n break;\n case 'dashed':\n strokeClasses += ' edge-pattern-dashed';\n break;\n default:\n strokeClasses += ' edge-pattern-solid';\n }\n let svgPath;\n let linePath =\n edgeCurveType === 'rounded'\n ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5)\n : lineFunction(lineData);\n const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];\n let strokeColor = edgeStyles.find((style) => style?.startsWith('stroke:'));\n\n let animationClass = '';\n if (edge.animate) {\n animationClass = 'edge-animation-fast';\n }\n if (edge.animation) {\n animationClass = 'edge-animation-' + edge.animation;\n }\n\n let animatedEdge = false;\n if (edge.look === 'handDrawn') {\n const rc = rough.svg(elem);\n Object.assign([], lineData);\n\n const svgPathNode = rc.path(linePath, {\n roughness: 0.3,\n seed: handDrawnSeed,\n });\n\n strokeClasses += ' transition';\n\n svgPath = select(svgPathNode)\n .select('path')\n .attr('id', `${diagramId}-${edge.id}`)\n .attr(\n 'class',\n ' ' +\n strokeClasses +\n (edge.classes ? ' ' + edge.classes : '') +\n (animationClass ? ' ' + animationClass : '')\n )\n .attr('style', edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');\n let d = svgPath.attr('d');\n svgPath.attr('d', d);\n elem.node().appendChild(svgPath.node());\n } else {\n const stylesFromClasses = edgeClassStyles.join(';');\n const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + ';', '') : '';\n\n const pathStyle =\n (stylesFromClasses ? stylesFromClasses + ';' + styles + ';' : styles) +\n ';' +\n (edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');\n svgPath = elem\n .append('path')\n .attr('d', linePath)\n .attr('id', `${diagramId}-${edge.id}`)\n .attr(\n 'class',\n ' ' +\n strokeClasses +\n (edge.classes ? ' ' + edge.classes : '') +\n (animationClass ? ' ' + animationClass : '')\n )\n .attr('style', pathStyle);\n\n //eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n strokeColor = pathStyle.match(/stroke:([^;]+)/)?.[1];\n\n // Possible fix to remove eslint-disable-next-line\n //strokeColor = /stroke:([^;]+)/.exec(pathStyle)?.[1];\n\n animatedEdge =\n edge.animate === true || !!edge.animation || stylesFromClasses.includes('animation');\n const pathNode = svgPath.node();\n const len = typeof pathNode.getTotalLength === 'function' ? pathNode.getTotalLength() : 0;\n const oValueS = markerOffsets2[edge.arrowTypeStart] || 0;\n const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0;\n\n if (edge.look === 'neo' && !animatedEdge) {\n const dashArray =\n edge.pattern === 'dotted' || edge.pattern === 'dashed'\n ? generateDashArray(len, oValueS, oValueE)\n : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`;\n\n // No offset needed because we already start with a zero-length dash that effectively sets us up for a gap at the start.\n const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`;\n svgPath.attr('style', mOffset + svgPath.attr('style'));\n }\n }\n\n // MC Special\n svgPath.attr('data-edge', true);\n svgPath.attr('data-et', 'edge');\n svgPath.attr('data-id', edge.id);\n svgPath.attr('data-points', pointsStr);\n // Add data attributes for neo look support\n svgPath.attr('data-look', handleUndefinedAttr(edge.look));\n // DEBUG code, adds a red circle at each edge coordinate\n // cornerPoints.forEach((point) => {\n // elem\n // .append('circle')\n // .style('stroke', 'blue')\n // .style('fill', 'blue')\n // .attr('r', 3)\n // .attr('cx', point.x)\n // .attr('cy', point.y);\n // });\n if (edge.showPoints) {\n lineData.forEach((point) => {\n elem\n .append('circle')\n .style('stroke', 'red')\n .style('fill', 'red')\n .attr('r', 1)\n .attr('cx', point.x)\n .attr('cy', point.y);\n });\n }\n\n let url = '';\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search;\n url = url.replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\n }\n log.info('arrowTypeStart', edge.arrowTypeStart);\n log.info('arrowTypeEnd', edge.arrowTypeEnd);\n\n const useMargin = !animatedEdge && edge?.look === 'neo';\n addEdgeMarkers(svgPath, edge, url, diagramId, diagramType, useMargin, strokeColor);\n const midIndex = Math.floor(points.length / 2);\n const point = points[midIndex];\n if (!utils.isLabelCoordinateInPath(point, svgPath.attr('d'))) {\n pointsHasChanged = true;\n }\n\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\n\n/**\n * Generates SVG path data with rounded corners from an array of points.\n * @param {Array} points - Array of points in the format [{x: Number, y: Number}, ...]\n * @param {Number} radius - The radius of the rounded corners\n * @returns {String} - SVG path data string\n */\nfunction generateRoundedPath(points, radius) {\n if (points.length < 2) {\n return '';\n }\n\n let path = '';\n const size = points.length;\n const epsilon = 1e-5;\n\n for (let i = 0; i < size; i++) {\n const currPoint = points[i];\n const prevPoint = points[i - 1];\n const nextPoint = points[i + 1];\n\n if (i === 0) {\n // Move to the first point\n path += `M${currPoint.x},${currPoint.y}`;\n } else if (i === size - 1) {\n // Last point, draw a straight line to the final point\n path += `L${currPoint.x},${currPoint.y}`;\n } else {\n // Calculate vectors for incoming and outgoing segments\n const dx1 = currPoint.x - prevPoint.x;\n const dy1 = currPoint.y - prevPoint.y;\n const dx2 = nextPoint.x - currPoint.x;\n const dy2 = nextPoint.y - currPoint.y;\n\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n\n // Prevent division by zero\n if (len1 < epsilon || len2 < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n\n // Normalize the vectors\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n\n // Calculate the angle between the vectors\n const dot = nx1 * nx2 + ny1 * ny2;\n // Clamp the dot product to avoid numerical issues with acos\n const clampedDot = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clampedDot);\n\n // Skip rounding if the angle is too small or too close to 180 degrees\n if (angle < epsilon || Math.abs(Math.PI - angle) < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n\n // Calculate the distance to offset the control point\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n\n // Calculate the start and end points of the curve\n const startX = currPoint.x - nx1 * cutLen;\n const startY = currPoint.y - ny1 * cutLen;\n const endX = currPoint.x + nx2 * cutLen;\n const endY = currPoint.y + ny2 * cutLen;\n\n // Draw the line to the start of the curve\n path += `L${startX},${startY}`;\n\n // Draw the quadratic Bezier curve\n path += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`;\n }\n }\n\n return path;\n}\n// Helper function to calculate delta and angle between two points\nfunction calculateDeltaAndAngle(point1, point2) {\n if (!point1 || !point2) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n const deltaX = point2.x - point1.x;\n const deltaY = point2.y - point1.y;\n const angle = Math.atan2(deltaY, deltaX);\n return { angle, deltaX, deltaY };\n}\n\n// Function to adjust the first and last points of the points array\nfunction applyMarkerOffsetsToPoints(points, edge) {\n // Copy the points array to avoid mutating the original data\n const newPoints = points.map((point) => ({ ...point }));\n\n // Handle the first point (start of the edge)\n if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) {\n const offsetValue = markerOffsets[edge.arrowTypeStart];\n\n const point1 = points[0];\n const point2 = points[1];\n\n const { angle } = calculateDeltaAndAngle(point1, point2);\n\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n\n newPoints[0].x = point1.x + offsetX;\n newPoints[0].y = point1.y + offsetY;\n }\n\n // Handle the last point (end of the edge)\n const n = points.length;\n if (n >= 2 && markerOffsets[edge.arrowTypeEnd]) {\n const offsetValue = markerOffsets[edge.arrowTypeEnd];\n\n const point1 = points[n - 1];\n const point2 = points[n - 2];\n\n const { angle } = calculateDeltaAndAngle(point2, point1);\n\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n\n newPoints[n - 1].x = point1.x - offsetX;\n newPoints[n - 1].y = point1.y - offsetY;\n }\n\n return newPoints;\n}\n", "/** Setup arrow head and define the marker. The result is appended to the svg. */\nimport { log } from '../../logger.js';\nimport * as configApi from '../../config.js';\n\n// Only add the number of markers that the diagram needs\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\n\nconst extension = (elem, type, id) => {\n log.trace('Making markers for ', id);\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionStart')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionEnd')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-extensionStart-margin')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '0 0 20 14')\n .append('polygon')\n .attr('points', '10,7 18,13 18,1')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '0');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionEnd-margin')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 9)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('viewBox', '0 0 20 14')\n .append('polygon')\n .attr('points', '10,1 10,13 18,7')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '0');\n};\n\nconst composition = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionStart')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionEnd')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 1)\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 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionStart-margin')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 15)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 0)\n .attr('viewBox', '0 0 15 15')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionEnd-margin')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 3.5)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 0)\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst aggregation = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationStart')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationEnd')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 1)\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 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationStart-margin')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 15)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 2)\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationEnd-margin')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 2)\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst dependency = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyStart')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 6)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyEnd')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 13)\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 elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyStart-margin')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 4)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 0)\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyEnd-margin')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 16)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .style('stroke-width', 0)\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\nconst lollipop = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopStart')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopEnd')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopStart-margin')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('circle')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6)\n .attr('stroke-width', 2);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopEnd-margin')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('circle')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6)\n .attr('stroke-width', 2);\n};\nconst point = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 5)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 4.5)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 5 L 10 10 L 10 0 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointEnd-margin') //arrows with gap(offset)\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 11.5 14')\n .attr('refX', 11.5) // Adjust to position the arrowhead relative to the line\n .attr('refY', 7) // Half of 14 for vertical center\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 10.5)\n .attr('markerHeight', 14)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 0 L 11.5 7 L 0 14 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 0)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointStart-margin')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 11.5 14')\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11.5)\n .attr('markerHeight', 14)\n .attr('orient', 'auto')\n .append('polygon')\n .attr('points', '0,7 11.5,14 11.5,0')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 0)\n .style('stroke-dasharray', '1,0');\n};\nconst circle = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 11)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', -1)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleEnd-margin')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refY', 5) // Vertical center of viewBox (0 0 10 10)\n .attr('refX', 12.25)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 14)\n .attr('markerHeight', 14)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 0)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleStart-margin')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', -2)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 14)\n .attr('markerHeight', 14)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 0)\n .style('stroke-dasharray', '1,0');\n};\nconst cross = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossEnd')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', 12)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossStart')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', -1)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossEnd-margin')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 15 15')\n .attr('refX', 17.7)\n .attr('refY', 7.5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2.5);\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossStart-margin')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 15 15')\n .attr('refX', -3.5)\n .attr('refY', 7.5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 L 14,14 M 1,14 L 14,1')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2.5)\n .style('stroke-dasharray', '1,0');\n};\nconst barb = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-barbEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 14)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\nconst barbNeo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { transitionColor } = themeVariables;\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-barbEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 14)\n .attr('markerUnits', 'strokeWidth')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L11,14 L13,7 L11,0 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-barbEnd-margin')\n .attr('refX', 17)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 14)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L11,14 L13,7 L11,0 Z')\n .attr('fill', `${transitionColor}`);\n};\n// erDiagram specific markers\nconst only_one = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneStart')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneEnd')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 18)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n};\n\nconst zero_or_one = (elem, type, id) => {\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneStart')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n startMarker\n .append('circle')\n .attr('fill', 'white') // Fill white for now?\n .attr('cx', 21)\n .attr('cy', 9)\n .attr('r', 6);\n startMarker.append('path').attr('d', 'M9,0 L9,18');\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneEnd')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 30)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n endMarker\n .append('circle')\n .attr('fill', 'white') // Fill white for now?\n .attr('cx', 9)\n .attr('cy', 9)\n .attr('r', 6);\n endMarker.append('path').attr('d', 'M21,0 L21,18');\n};\n\nconst one_or_more = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreStart')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreEnd')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 27)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n};\n\nconst zero_or_more = (elem, type, id) => {\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreStart')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n startMarker.append('circle').attr('fill', 'white').attr('cx', 48).attr('cy', 18).attr('r', 6);\n startMarker.append('path').attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreEnd')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 39)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n endMarker.append('circle').attr('fill', 'white').attr('cx', 9).attr('cy', 18).attr('r', 6);\n endMarker.append('path').attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n};\n\nconst only_one_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth } = themeVariables;\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneStart')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .attr('d', 'M9,0 L9,18 M15,0 L15,18')\n .attr('stroke-width', `${strokeWidth}`);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneEnd')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 18)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .attr('d', 'M3,0 L3,18 M9,0 L9,18')\n .attr('stroke-width', `${strokeWidth}`);\n};\n\nconst zero_or_one_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth, mainBkg } = themeVariables;\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneStart')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse');\n startMarker\n .append('circle')\n .attr('fill', mainBkg ?? 'white')\n .attr('cx', 21)\n .attr('cy', 9)\n .attr('stroke-width', `${strokeWidth}`)\n .attr('r', 6);\n startMarker.append('path').attr('d', 'M9,0 L9,18').attr('stroke-width', `${strokeWidth}`);\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneEnd')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 30)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto');\n endMarker\n .append('circle')\n .attr('fill', mainBkg ?? 'white')\n .attr('cx', 9)\n .attr('cy', 9)\n .attr('stroke-width', `${strokeWidth}`)\n .attr('r', 6);\n endMarker.append('path').attr('d', 'M21,0 L21,18').attr('stroke-width', `${strokeWidth}`);\n};\n\nconst one_or_more_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth } = themeVariables;\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreStart')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('path')\n .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27')\n .attr('stroke-width', `${strokeWidth}`);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreEnd')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 27)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18')\n .attr('stroke-width', `${strokeWidth}`);\n};\n\nconst zero_or_more_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth, mainBkg } = themeVariables;\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreStart')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto');\n startMarker\n .append('circle')\n .attr('fill', mainBkg ?? 'white')\n .attr('cx', 45.5)\n .attr('cy', 18)\n .attr('r', 6)\n .attr('stroke-width', `${strokeWidth}`);\n startMarker\n .append('path')\n .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18')\n .attr('stroke-width', `${strokeWidth}`);\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreEnd')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 39)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse');\n endMarker\n .append('circle')\n .attr('fill', mainBkg ?? 'white')\n .attr('cx', 11)\n .attr('cy', 18)\n .attr('r', 6)\n .attr('stroke-width', `${strokeWidth}`);\n endMarker\n .append('path')\n .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18')\n .attr('stroke-width', `${strokeWidth}`);\n};\n\nconst requirement_arrow = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_arrowEnd')\n .attr('refX', 20)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .append('path')\n .attr(\n 'd',\n `M0,0\n L20,10\n M20,10\n L0,20`\n );\n};\n\nconst requirement_arrow_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth } = themeVariables;\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_arrowEnd')\n .attr('refX', 20)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('stroke-width', `${strokeWidth}`)\n .attr('viewBox', '0 0 25 20')\n .append('path')\n .attr(\n 'd',\n `M0,0\n L20,10\n M20,10\n L0,20`\n )\n .attr('stroke-linejoin', 'miter');\n};\n\nconst requirement_contains = (elem, type, id) => {\n const containsNode = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_containsStart')\n .attr('refX', 0)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .append('g');\n\n containsNode.append('circle').attr('cx', 10).attr('cy', 10).attr('r', 9).attr('fill', 'none');\n\n containsNode.append('line').attr('x1', 1).attr('x2', 19).attr('y1', 10).attr('y2', 10);\n\n containsNode.append('line').attr('y1', 1).attr('y2', 19).attr('x1', 10).attr('x2', 10);\n};\n\nconst requirement_contains_neo = (elem, type, id) => {\n const config = configApi.getConfig();\n const { themeVariables } = config;\n const { strokeWidth } = themeVariables;\n const containsNode = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_containsStart')\n .attr('refX', 0)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .attr('markerUnits', 'userSpaceOnUse')\n .append('g');\n\n containsNode.append('circle').attr('cx', 10).attr('cy', 10).attr('r', 9).attr('fill', 'none');\n\n containsNode.append('line').attr('x1', 1).attr('x2', 19).attr('y1', 10).attr('y2', 10);\n\n containsNode.append('line').attr('y1', 1).attr('y2', 19).attr('x1', 10).attr('x2', 10);\n containsNode.selectAll('*').attr('stroke-width', `${strokeWidth}`);\n};\n\n// TODO rename the class diagram markers to something shape descriptive and semantic free\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb,\n barbNeo,\n only_one,\n zero_or_one,\n one_or_more,\n zero_or_more,\n only_one_neo,\n zero_or_one_neo,\n one_or_more_neo,\n zero_or_more_neo,\n requirement_arrow,\n requirement_contains,\n requirement_arrow_neo,\n requirement_contains_neo,\n};\nexport default insertMarkers;\n"], "mappings": "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", "names": ["addEdgeMarkers", "__name", "svgPath", "edge", "url", "id", "diagramType", "useMargin", "strokeColor", "addEdgeMarker", "arrowTypesMap", "arrowTypesWithMarginSupport", "position", "arrowType", "arrowTypeInfo", "marginSupport", "log", "endMarkerType", "originalMarkerId", "colorId", "coloredMarkerId", "originalMarker", "coloredMarker", "path", "resolveEdgeCurveType", "__name", "edgeCurve", "getConfig", "edgeLabels", "terminalLabels", "clear", "getLabelStyles", "styleArray", "acc", "style", "insertEdgeLabel", "elem", "edge", "config", "useHtmlLabels", "getEffectiveHtmlLabels", "labelStyles", "styles2String", "edgeLabel", "label", "isMarkdown", "labelElement", "createText", "log", "bbox", "transformBbox", "div", "dv", "select_default", "textEl", "computeLabelTransform", "fo", "startEdgeLabelLeft", "inner", "startLabelElement", "createLabel_default", "slBox", "setTerminalWidth", "startEdgeLabelRight", "endEdgeLabelLeft", "endLabelElement", "endEdgeLabelRight", "value", "positionEdgeLabel", "paths", "path", "siteConfig", "subGraphTitleTotalMargin", "getSubGraphTitleMargins", "el", "x", "y", "pos", "utils_default", "outsideNode", "node", "point", "dx", "dy", "w", "h", "intersection", "outsidePoint", "insidePoint", "r", "Q", "R", "q", "res", "_x", "_y", "cutPathAtIntersect", "_points", "boundaryNode", "points", "lastPointOutside", "isInside", "inter", "pointPresent", "p", "e", "extractCornerPoints", "cornerPoints", "cornerPointPositions", "i", "prev", "curr", "next", "findAdjacentPoint", "pointA", "pointB", "distance", "xDiff", "yDiff", "length", "ratio", "fixCorners", "lineData", "newLineData", "prevPoint", "nextPoint", "cornerPoint", "newPrevPoint", "newNextPoint", "a", "newCornerPoint", "generateDashArray", "len", "oValueS", "oValueE", "middleLength", "dashLength", "gapLength", "dashGapPairLength", "numberOfPairs", "middlePattern", "insertEdge", "clusterDb", "diagramType", "startNode", "endNode", "diagramId", "skipIntersect", "handDrawnSeed", "pointsHasChanged", "tail", "head", "edgeClassStyles", "key", "isLabelStyle", "pointsStr", "edgeCurveType", "curve", "linear_default", "basis_default", "cardinal_default", "bumpX", "bumpY", "catmullRom_default", "monotoneX", "monotoneY", "natural_default", "step_default", "stepAfter", "stepBefore", "getLineFunctionsWithOffset", "lineFunction", "line_default", "strokeClasses", "svgPath", "linePath", "generateRoundedPath", "applyMarkerOffsetsToPoints", "edgeStyles", "strokeColor", "animationClass", "animatedEdge", "rc", "at", "svgPathNode", "d", "stylesFromClasses", "styles", "pathStyle", "pathNode", "markerOffsets2", "mOffset", "handleUndefinedAttr", "url", "useMargin", "addEdgeMarkers", "midIndex", "radius", "size", "epsilon", "currPoint", "dx1", "dy1", "dx2", "dy2", "len1", "len2", "nx1", "ny1", "nx2", "ny2", "dot", "clampedDot", "angle", "cutLen", "startX", "startY", "endX", "endY", "calculateDeltaAndAngle", "point1", "point2", "deltaX", "deltaY", "newPoints", "markerOffsets", "offsetValue", "offsetX", "offsetY", "n", "insertMarkers", "__name", "elem", "markerArray", "type", "id", "markerName", "markers", "extension", "log", "composition", "aggregation", "dependency", "lollipop", "point", "circle", "cross", "barb", "barbNeo", "config", "getConfig", "themeVariables", "transitionColor", "only_one", "zero_or_one", "startMarker", "endMarker", "one_or_more", "zero_or_more", "only_one_neo", "strokeWidth", "zero_or_one_neo", "mainBkg", "one_or_more_neo", "zero_or_more_neo", "requirement_arrow", "requirement_arrow_neo", "requirement_contains", "containsNode", "requirement_contains_neo", "markers_default"] }