package.dist.chunks.mermaid.core.chunk-5CZSE4TR.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/rendering-util/rendering-elements/clusters.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-rect.js", "../../../src/rendering-util/rendering-elements/createLabel.js", "../../../src/rendering-util/rendering-elements/shapes/roundedRectPath.ts", "../../../src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts", "../../../src/rendering-util/rendering-elements/edges.js", "../../../src/rendering-util/rendering-elements/edgeMarker.ts", "../../../src/rendering-util/rendering-elements/markers.js", "../../../src/rendering-util/rendering-elements/shapes/util.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-node.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-ellipse.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-circle.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-line.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-polygon.js", "../../../src/rendering-util/rendering-elements/intersect/index.js", "../../../src/rendering-util/rendering-elements/shapes/drawRect.ts", "../../../src/rendering-util/rendering-elements/shapes/state.ts", "../../../src/rendering-util/rendering-elements/shapes/roundedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/squareRect.ts", "../../../src/rendering-util/rendering-elements/shapes/stateStart.ts", "../../../src/rendering-util/rendering-elements/shapes/stateEnd.ts", "../../../src/rendering-util/rendering-elements/shapes/forkJoin.ts", "../../../src/rendering-util/rendering-elements/shapes/choice.ts", "../../../src/rendering-util/rendering-elements/shapes/note.ts", "../../../src/rendering-util/rendering-elements/shapes/stadium.ts", "../../../src/rendering-util/rendering-elements/shapes/rectWithTitle.ts", "../../../src/rendering-util/rendering-elements/shapes/subroutine.ts", "../../../src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts", "../../../src/rendering-util/rendering-elements/shapes/cylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/circle.ts", "../../../src/rendering-util/rendering-elements/shapes/doubleCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts", "../../../src/rendering-util/rendering-elements/shapes/question.ts", "../../../src/rendering-util/rendering-elements/shapes/hexagon.ts", "../../../src/rendering-util/rendering-elements/shapes/leanRight.ts", "../../../src/rendering-util/rendering-elements/shapes/leanLeft.ts", "../../../src/rendering-util/rendering-elements/shapes/trapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/labelRect.ts", "../../../src/rendering-util/rendering-elements/nodes.js"],
"sourcesContent": ["import { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport { evaluate } from '$root/diagrams/common/common.js';\nimport { log } from '$root/logger.js';\nimport { getSubGraphTitleMargins } from '$root/utils/subGraphTitleMargins.js';\nimport { select } from 'd3';\nimport rough from 'roughjs';\nimport { createText } from '../createText.ts';\nimport intersectRect from '../rendering-elements/intersect/intersect-rect.js';\nimport createLabel from './createLabel.js';\nimport { createRoundedRectPathD } from './shapes/roundedRectPath.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\n\nconst rect = async (parent, node) => {\n log.info('Creating subgraph rect for ', node.id, node);\n const siteConfig = getConfig();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'cluster ' + node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n const text = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n });\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.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\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n\n log.trace('Data ', node, JSON.stringify(node));\n let rect;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed,\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n // Should we affect the options instead of doing this?\n rect.select('path:nth-child(2)').attr('style', borderStyles.join(';'));\n rect.select('path').attr('style', backgroundStyles.join(';').replace('fill', 'stroke'));\n } else {\n // add the rect\n rect = shapeSvg.insert('rect', ':first-child');\n // center the rect around its coordinate\n rect\n .attr('style', nodeStyles)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n 'transform',\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n\n if (labelStyles) {\n const span = labelEl.select('span');\n if (span) {\n span.attr('style', labelStyles);\n }\n }\n // Center the label\n\n const rectBox = rect.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\n\n/**\n * Non visible cluster where the note is group with its\n *\n * @param {any} parent\n * @param {any} node\n * @returns {any} ShapeSvg\n */\nconst noteGroup = (parent, node) => {\n // Add outer g element\n const shapeSvg = parent.insert('g').attr('class', 'note-cluster').attr('id', node.id);\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n // center the rect around its coordinate\n rect\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', node.x - node.width / 2 - halfPadding)\n .attr('y', node.y - node.height / 2 - halfPadding)\n .attr('width', node.width + padding)\n .attr('height', node.height + padding)\n .attr('fill', 'none');\n\n const rectBox = rect.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n};\n\nconst roundedWithTitle = async (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } =\n themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n // Create the label and insert it after the rect\n const label = shapeSvg.insert('g').attr('class', 'cluster-label');\n let innerRect = shapeSvg.append('rect');\n\n const text = label\n .node()\n .appendChild(await createLabel(node.label, node.labelStyle, undefined, true));\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.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\n // Rounded With Title\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n const width =\n (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n\n const height = node.height + padding;\n // const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n\n // add the rect\n let rect;\n if (node.look === 'handDrawn') {\n const isAlt = node.cssClasses.includes('statediagram-cluster-alt');\n const rc = rough.svg(shapeSvg);\n const roughOuterNode =\n node.rx || node.ry\n ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: 'solid',\n stroke: nodeBorder,\n seed: handDrawnSeed,\n })\n : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? 'hachure' : 'solid',\n stroke: nodeBorder,\n seed: handDrawnSeed,\n });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'outer';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n innerRect\n .attr('class', 'inner')\n .attr('x', x)\n .attr('y', innerY)\n .attr('width', width)\n .attr('height', innerHeight);\n }\n\n label.attr(\n 'transform',\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (evaluate(siteConfig.flowchart.htmlLabels) ? 0 : 3)})`\n );\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\nconst divider = (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n const padding = 0 * node.padding;\n\n const width = node.width + padding;\n\n node.diff = -node.padding;\n\n const height = node.height + padding;\n // const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n\n // add the rect\n let rect;\n if (node.look === 'handDrawn') {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: 'lightgrey',\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed,\n });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'divider';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n }\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = 0;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: {} };\n};\n\nconst squareRect = rect;\nconst shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n};\n\nlet clusterElems = new Map();\n\nexport const insertCluster = async (elem, node) => {\n const shape = node.shape || 'rect';\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n};\n\nexport const getClusterTitleWidth = (elem, node) => {\n const label = createLabel(node.label, node.labelStyle, undefined, true);\n elem.node().appendChild(label);\n const width = label.getBBox().width;\n elem.node().removeChild(label);\n return width;\n};\n\nexport const clear = () => {\n clusterElems = new Map();\n};\n\nexport const positionCluster = (node) => {\n log.info(\n 'Position cluster (' +\n node.id +\n ', ' +\n node.x +\n ', ' +\n node.y +\n ') (' +\n node?.width +\n ', ' +\n node?.height +\n ')',\n clusterElems.get(node.id)\n );\n const el = clusterElems.get(node.id);\n el.cluster.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\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", "import { select } from 'd3';\nimport { log } from '$root/logger.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport common, { evaluate, renderKatex, hasKatex } from '$root/diagrams/common/common.js';\nimport { decodeEntities } from '$root/utils.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 {Promise} Node\n */\nasync function addHtmlLabel(node) {\n const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n const div = fo.append('xhtml:div');\n\n let label = node.label;\n if (node.label && hasKatex(node.label)) {\n label = await renderKatex(node.label.replace(common.lineBreakRegex, '\\n'), getConfig());\n }\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n div.html(\n '' +\n label +\n ''\n );\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n div.style('padding-right', '1px');\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 = async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || '';\n if (typeof vertexText === 'object') {\n vertexText = vertexText[0];\n }\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.info('vertexText' + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style ? style.replace('fill:', 'color:') : style,\n };\n let vertexNode = await 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", "export const createRoundedRectPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number,\n radius: number\n) =>\n [\n 'M',\n x + radius,\n y, // Move to the first point\n 'H',\n x + totalWidth - radius, // Draw horizontal line to the beginning of the right corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius, // Draw arc to the right top corner\n 'V',\n y + totalHeight - radius, // Draw vertical line down to the beginning of the right bottom corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight, // Draw arc to the right bottom corner\n 'H',\n x + radius, // Draw horizontal line to the beginning of the left bottom corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius, // Draw arc to the left bottom corner\n 'V',\n y + radius, // Draw vertical line up to the beginning of the left top corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y, // Draw arc to the left top corner\n 'Z', // Close the path\n ].join(' ');\n", "import { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\n\n// Striped fill like start or fork nodes in state diagrams\nexport const solidStateFill = (color: string) => {\n const { handDrawnSeed } = getConfig();\n return {\n fill: color,\n hachureAngle: 120, // angle of hachure,\n hachureGap: 4,\n fillWeight: 2,\n roughness: 0.7,\n stroke: color,\n seed: handDrawnSeed,\n };\n};\n\nexport const compileStyles = (node: Node) => {\n // node.cssCompiledStyles is an array of strings in the form of 'key: value' where jey is the css property and value is the value\n // the array is the styles of node node from the classes it is using\n // node.cssStyles is an array of styles directly set on the node\n // concat the arrays and remove duplicates such that the values from node.cssStyles are used if there are duplicates\n const stylesMap = styles2Map([...(node.cssCompiledStyles || []), ...(node.cssStyles || [])]);\n return { stylesMap, stylesArray: [...stylesMap] };\n};\n\nexport const styles2Map = (styles: string[]) => {\n const styleMap = new Map();\n styles.forEach((style) => {\n const [key, value] = style.split(':');\n styleMap.set(key.trim(), value?.trim());\n });\n return styleMap;\n};\n\nexport const styles2String = (node: Node) => {\n const { stylesArray } = compileStyles(node);\n const labelStyles: string[] = [];\n const nodeStyles: string[] = [];\n const borderStyles: string[] = [];\n const backgroundStyles: string[] = [];\n\n stylesArray.forEach((style) => {\n const key = style[0];\n if (\n key === 'color' ||\n key === 'font-size' ||\n key === 'font-family' ||\n key === 'font-weight' ||\n key === 'font-style' ||\n key === 'text-decoration' ||\n key === 'text-align' ||\n key === 'text-transform' ||\n key === 'line-height' ||\n key === 'letter-spacing' ||\n key === 'word-spacing' ||\n key === 'text-shadow' ||\n key === 'text-overflow' ||\n key === 'white-space' ||\n key === 'word-wrap' ||\n key === 'word-break' ||\n key === 'overflow-wrap' ||\n key === 'hyphens'\n ) {\n labelStyles.push(style.join(':') + ' !important');\n } else {\n nodeStyles.push(style.join(':') + ' !important');\n if (key.includes('stroke')) {\n borderStyles.push(style.join(':') + ' !important');\n }\n if (key === 'fill') {\n backgroundStyles.push(style.join(':') + ' !important');\n }\n }\n });\n\n return {\n labelStyles: labelStyles.join(';'),\n nodeStyles: nodeStyles.join(';'),\n stylesArray,\n borderStyles,\n backgroundStyles,\n };\n};\n\n// Striped fill like start or fork nodes in state diagrams\n// TODO remove any\nexport const userNodeOverrides = (node: Node, options: any) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n // index the style array to a map object\n const result = Object.assign(\n {\n roughness: 0.7,\n fill: stylesMap.get('fill') || mainBkg,\n fillStyle: 'hachure', // solid fill\n fillWeight: 4,\n stroke: stylesMap.get('stroke') || nodeBorder,\n seed: handDrawnSeed,\n strokeWidth: 1.3,\n },\n options\n );\n return result;\n};\n", "import { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport { evaluate } from '$root/diagrams/common/common.js';\nimport { log } from '$root/logger.js';\nimport { createText } from '$root/rendering-util/createText.ts';\nimport utils from '$root/utils.js';\nimport { getLineFunctionsWithOffset } from '$root/utils/lineWithOffset.js';\nimport { getSubGraphTitleMargins } from '$root/utils/subGraphTitleMargins.js';\nimport { curveBasis, line, select } from 'd3';\nimport rough from 'roughjs';\nimport createLabel from './createLabel.js';\nimport { addEdgeMarkers } from './edgeMarker.ts';\n\nconst edgeLabels = new Map();\nconst terminalLabels = new Map();\n\nexport const clear = () => {\n edgeLabels.clear();\n terminalLabels.clear();\n};\n\nexport const getLabelStyles = (styleArray) => {\n let styles = styleArray ? styleArray.reduce((acc, style) => acc + ';' + style, '') : '';\n return styles;\n};\n\nexport const insertEdgeLabel = async (elem, edge) => {\n let useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n\n const labelElement = await createText(elem, edge.label, {\n style: getLabelStyles(edge.labelStyle),\n useHtmlLabels,\n addSvgBackground: true,\n isNode: false,\n });\n log.info('abc82', edge, edge.labelType);\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');\n label.node().appendChild(labelElement);\n\n // Center the label\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\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 startLabelElement = await createLabel(\n edge.startLabelLeft,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\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 // Create the actual text element\n const startLabelElement = await createLabel(\n edge.startLabelRight,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelRight.insert('g').attr('class', 'inner');\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\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 // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelLeft, getLabelStyles(edge.labelStyle));\n const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelLeft.node().appendChild(endLabelElement);\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 // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelRight, getLabelStyles(edge.labelStyle));\n const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelRight.insert('g').attr('class', 'inner');\n\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelRight.node().appendChild(endLabelElement);\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 (getConfig().flowchart.htmlLabels && 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\nexport const insertEdge = function (elem, edge, clusterDb, diagramType, startNode, endNode, id) {\n const { handDrawnSeed } = getConfig();\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = startNode;\n var head = endNode;\n\n if (head.intersect && tail.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.debug(\n 'Last point APA12',\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 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 lineData = fixCorners(lineData);\n let lastPoint = lineData[lineData.length - 1];\n if (lineData.length > 1) {\n lastPoint = lineData[lineData.length - 1];\n const secondLastPoint = lineData[lineData.length - 2];\n const diffX = (lastPoint.x - secondLastPoint.x) / 2;\n const diffY = (lastPoint.y - secondLastPoint.y) / 2;\n const midPoint = { x: secondLastPoint.x + diffX, y: secondLastPoint.y + diffY };\n lineData.splice(-1, 0, midPoint);\n }\n let curve = curveBasis;\n if (edge.curve) {\n curve = edge.curve;\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 = lineFunction(lineData);\n const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];\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', edge.id)\n .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))\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 svgPath = elem\n .append('path')\n .attr('d', linePath)\n .attr('id', edge.id)\n .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))\n .attr('style', edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');\n }\n\n // DEBUG code, DO NOT REMOVE\n // 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 // lineData.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\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 addEdgeMarkers(svgPath, edge, url, id, diagramType);\n\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\n", "import type { SVG } from '$root/diagram-api/types.js';\nimport { log } from '$root/logger.js';\nimport type { EdgeData } from '$root/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) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType);\n }\n};\n\nconst arrowTypesMap = {\n arrow_cross: 'cross',\n arrow_point: 'point',\n arrow_barb: 'barb',\n arrow_circle: 'circle',\n aggregation: 'aggregation',\n extension: 'extension',\n composition: 'composition',\n dependency: 'dependency',\n lollipop: 'lollipop',\n} as const;\n\nconst addEdgeMarker = (\n svgPath: SVG,\n position: 'start' | 'end',\n arrowType: string,\n url: string,\n id: string,\n diagramType: string\n) => {\n const endMarkerType = arrowTypesMap[arrowType as keyof typeof arrowTypesMap];\n\n if (!endMarkerType) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return; // unknown arrow type, ignore\n }\n\n const suffix = position === 'start' ? 'Start' : 'End';\n svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);\n};\n", "/** Setup arrow head and define the marker. The result is appended to the svg. */\nimport { log } from '$root/logger.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', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\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\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};\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};\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};\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('stroke', 'black')\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('stroke', 'black')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\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};\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};\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};\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};\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};\nexport default insertMarkers;\n", "import { createText } from '$root/rendering-util/createText.ts';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport { evaluate, sanitizeText } from '$root/diagrams/common/common.js';\nimport { decodeEntities } from '$root/utils.js';\n\nexport const labelHelper = async (parent, node, _classes) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig().flowchart.htmlLabels);\n if (!_classes) {\n cssClasses = 'node default';\n } else {\n cssClasses = _classes;\n }\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'label').attr('style', node.labelStyle);\n\n // Replace label with default value if undefined\n let label;\n if (node.label === undefined) {\n label = '';\n } else {\n label = typeof node.label === 'string' ? node.label : node.label[0];\n }\n\n let text;\n text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart.wrappingWidth,\n cssClasses: 'markdown-node-label',\n style: node.labelStyle,\n });\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n\n if (evaluate(getConfig().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 = label.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 = getConfig().fontSize\n ? getConfig().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 labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n } else {\n labelEl.attr('transform', 'translate(' + 0 + ', ' + -bbox.height / 2 + ')');\n }\n if (node.centerLabel) {\n labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n }\n labelEl.insert('rect', ':first-child');\n return { shapeSvg, bbox, halfPadding, label: labelEl };\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\nexport const getNodeClasses = (node, extra) =>\n (node.look === 'handDrawn' ? 'rough-node' : 'node') + ' ' + node.cssClasses + ' ' + (extra || '');\n", "function intersectNode(node, point) {\n return node.intersect(point);\n}\n\nexport default intersectNode;\n", "function 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\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 */\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\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n", "import intersectLine from './intersect-line.js';\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 */\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n\n let intersections = [];\n\n let minX = Number.POSITIVE_INFINITY;\n let 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 let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let 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 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 let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let 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\nexport default intersectPolygon;\n", "/*\n * Borrowed with love from 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 { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, RectOptions } from '$root/rendering-util/types.d.ts';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport {\n userNodeOverrides,\n styles2String,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nexport const drawRect = async (parent: SVGAElement, node: Node, options: RectOptions) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n // console.log('IPI labelStyles:', labelStyles);\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n\n // log.info('IPI node = ', node);\n\n let rect;\n let { rx, ry } = node;\n const { cssStyles } = node;\n\n //use options rx, ry overrides if present\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const roughNode =\n rx || ry\n ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options)\n : rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', cssStyles);\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('rx', rx)\n .attr('data-id', 'abc')\n .attr('data-et', 'node')\n .attr('ry', ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\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", "import type { Node, RectOptions } from '$root/rendering-util/types.d.ts';\nimport { drawRect } from './drawRect.js';\n\nexport const state = async (parent: SVGAElement, node: Node) => {\n const options = {\n rx: 5,\n ry: 5,\n classes: 'flowchart-node',\n } as RectOptions;\n return drawRect(parent, node, options);\n};\n", "import type { Node, RectOptions } from '$root/rendering-util/types.d.ts';\nimport { drawRect } from './drawRect.js';\n\nexport const roundedRect = async (parent: SVGAElement, node: Node) => {\n const options = {\n rx: 5,\n ry: 5,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n\n return drawRect(parent, node, options);\n};\n", "import type { Node, RectOptions } from '$root/rendering-util/types.d.ts';\nimport { drawRect } from './drawRect.js';\n\nexport const squareRect = async (parent: SVGAElement, node: Node) => {\n const options = {\n rx: 0,\n ry: 0,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n return drawRect(parent, node, options);\n};\n", "import { updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport type { SVG } from '$root/diagram-api/types.js';\nimport rough from 'roughjs';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\n\nexport const stateStart = (parent: SVG, node: Node) => {\n const { themeVariables } = getConfig();\n const { lineColor } = themeVariables;\n\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let circle;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle = shapeSvg.insert(() => roughNode);\n } else {\n circle = shapeSvg.insert('circle', ':first-child');\n }\n\n // center the circle around its coordinate\n // @ts-ignore TODO: Fix typings\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", "import { updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport type { SVG } from '$root/diagram-api/types.js';\nimport rough from 'roughjs';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\n\nexport const stateEnd = (parent: SVG, node: Node) => {\n const { themeVariables } = getConfig();\n const { lineColor } = themeVariables;\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let circle;\n let innerCircle;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, { ...solidStateFill(lineColor), roughness: 0.5 });\n const roughInnerNode = rc.circle(0, 0, 5, { ...solidStateFill(lineColor), fillStyle: 'solid' });\n circle = shapeSvg.insert(() => roughNode);\n innerCircle = shapeSvg.insert(() => roughInnerNode);\n } else {\n innerCircle = shapeSvg.insert('circle', ':first-child');\n 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\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n};\n", "import { updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport type { SVG } from '$root/diagram-api/types.js';\nimport rough from 'roughjs';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\n\nexport const forkJoin = (parent: SVG, node: Node, dir: string) => {\n const { themeVariables } = getConfig();\n const { lineColor } = themeVariables;\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 const x = (-1 * width) / 2;\n const y = (-1 * height) / 2;\n\n let shape;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.rectangle(x, y, width, height, solidStateFill(lineColor));\n shape = shapeSvg.insert(() => roughNode);\n } else {\n shape = shapeSvg\n .append('rect')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('class', 'fork-join');\n }\n\n updateNodeBounds(node, shape);\n let nodeHeight = 0;\n let nodeWidth = 0;\n let nodePadding = 10;\n if (node.height) {\n nodeHeight = node.height;\n }\n if (node.width) {\n nodeWidth = node.width;\n }\n\n if (node.padding) {\n nodePadding = node.padding;\n }\n\n node.height = nodeHeight + nodePadding / 2;\n node.width = nodeWidth + nodePadding / 2;\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n", "import intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport type { SVG } from '$root/diagram-api/types.js';\n// @ts-ignore TODO: Fix rough typings\nimport rough from 'roughjs';\nimport { solidStateFill, styles2String } from './handDrawnShapeStyles.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\n\nexport const choice = (parent: SVG, node: Node) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { themeVariables } = getConfig();\n const { lineColor } = themeVariables;\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 let choice;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const pointArr = points.map(function (d) {\n return [d.x, d.y];\n });\n const roughNode = rc.polygon(pointArr, solidStateFill(lineColor));\n choice = shapeSvg.insert(() => roughNode);\n } else {\n 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 }\n\n // center the circle around its coordinate\n choice\n .attr('class', 'state-start')\n // @ts-ignore TODO: Fix rough typings\n .attr('r', 7)\n .attr('width', 28)\n .attr('height', 28)\n .attr('style', nodeStyles);\n\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", "import { log } from '$root/logger.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport rough from 'roughjs';\n\nexport const note = async (parent: SVGAElement, node: Node) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { noteBorderColor, noteBkgColor } = themeVariables;\n\n const useHtmlLabels = node.useHtmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox } = await labelHelper(parent, node, 'node ' + node.cssClasses);\n\n log.info('Classes = ', node.cssClasses);\n const { cssStyles } = node;\n let rect;\n const totalWidth = bbox.width + node.padding;\n const totalHeight = bbox.height + node.padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n\n if (node.look === 'handDrawn') {\n // add the rect\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.rectangle(x, y, totalWidth, totalHeight, {\n roughness: 0.7,\n fill: noteBkgColor,\n fillWeight: 3,\n seed: handDrawnSeed,\n // fillStyle: 'solid', // solid fill'\n stroke: noteBorderColor,\n });\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', cssStyles);\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n rect\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\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\n\nexport const createStadiumPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number\n) => {\n const radius = totalHeight / 2;\n return [\n 'M',\n x + radius,\n y, // Move to the start of the top-left arc\n 'H',\n x + totalWidth - radius, // Draw horizontal line to the start of the top-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius, // Draw top-right arc\n 'H',\n x, // Draw horizontal line to the start of the bottom-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight, // Draw bottom-right arc\n 'H',\n x + radius, // Draw horizontal line to the start of the bottom-left arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + radius, // Draw bottom-left arc\n 'Z', // Close the path\n ].join(' ');\n};\n\nexport const stadium = async (parent: SVGAElement, node: Node) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n\n let rect;\n const { cssStyles } = node;\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const pathData = createRoundedRectPathD(-w / 2, -h / 2, w, h, h / 2);\n const roughNode = rc.path(pathData, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', cssStyles);\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\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\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n", "import type { Node } from '$root/rendering-util/types.d.ts';\nimport { select } from 'd3';\nimport { evaluate } from '$root/diagrams/common/common.js';\nimport { updateNodeBounds } from './util.js';\nimport createLabel from '../createLabel.js';\nimport intersect from '../intersect/index.js';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { log } from '$root/logger.js';\n\nexport const rectWithTitle = async (parent: SVGElement, node: Node) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.cssClasses;\n }\n\n // Add outer g element\n const shapeSvg = parent\n // @ts-ignore - d3 typings are not correct\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 g = shapeSvg.insert('g');\n\n const label = shapeSvg.insert('g').attr('class', 'label').attr('style', nodeStyles);\n\n const description = node.description;\n\n const title = node.label;\n\n const text = label.node().appendChild(await 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', description);\n const textRows = description || [];\n const titleBox = text.getBBox();\n const descr = label\n .node()\n .appendChild(\n await createLabel(\n textRows.join ? textRows.join('
') : textRows,\n node.labelStyle,\n true,\n true\n )\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\n const halfPadding = (node.padding || 0) / 2;\n select(descr).attr(\n 'transform',\n 'translate( ' +\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 (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 const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect;\n let innerLine;\n if (node.look === 'handDrawn') {\n // @ts-ignore No typings for rough\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n\n innerLine = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughLine;\n }, ':first-child');\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n } else {\n rect = g.insert('rect', ':first-child');\n innerLine = g.insert('line');\n rect\n .attr('class', 'outer title-state')\n .attr('style', nodeStyles)\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + (node.padding || 0))\n .attr('height', bbox.height + (node.padding || 0));\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", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createSubroutinePathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n const offset = 8;\n return [\n `M${x - offset},${y}`,\n `H${x + width + offset}`,\n `V${y + height}`,\n `H${x - offset}`,\n `V${y}`,\n 'M',\n x,\n y,\n 'H',\n x + width,\n 'V',\n y + height,\n 'H',\n x,\n 'Z',\n ].join(' ');\n};\n\nexport const subroutine = async (parent: SVGAElement, node: Node) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n\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 if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n\n shapeSvg.insert(() => l1, ':first-child');\n shapeSvg.insert(() => l2, ':first-child');\n const rect = shapeSvg.insert(() => roughNode, ':first-child');\n const { cssStyles } = node;\n rect.attr('class', 'basic label-container').attr('style', cssStyles);\n updateNodeBounds(node, rect);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr('style', nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nexport default subroutine;\n", "export function insertPolygonShape(\n parent: any,\n w: number,\n h: number,\n points: { x: number; y: number }[]\n) {\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 { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n ].join(' ');\n};\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n ].join(' ');\n};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' ');\n};\nexport const cylinder = async (parent: SVGAElement, node: Node) => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let cylinder: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: 'none' }));\n\n cylinder = shapeSvg.insert(() => innerLine, ':first-child');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', cssStyles)\n .attr('style', nodeStyles);\n }\n\n cylinder.attr('label-offset-y', ry);\n cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n updateNodeBounds(node, cylinder);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n\n if (\n rx != 0 &&\n (Math.abs(x) < (node.width ?? 0) / 2 ||\n (Math.abs(x) == (node.width ?? 0) / 2 &&\n Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry))\n ) {\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) > 0) {\n y = -y;\n }\n\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n};\n", "import { log } from '$root/logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nexport const circle = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n\n const radius = bbox.width / 2 + halfPadding;\n let circleElem;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options);\n\n circleElem = shapeSvg.insert(() => roughNode, ':first-child');\n circleElem.attr('class', 'basic label-container').attr('style', cssStyles);\n } else {\n circleElem = shapeSvg\n .insert('circle', ':first-child')\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('r', radius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleElem);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, radius, point);\n return intersect.circle(node, radius, point);\n };\n\n return shapeSvg;\n};\n", "import { log } from '$root/logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nexport const doublecircle = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n\n let circleGroup;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n\n circleGroup = shapeSvg.insert('g', ':first-child');\n // circleGroup = circleGroup.insert(() => outerRoughNode, ':first-child');\n circleGroup.attr('class', node.cssClasses).attr('style', cssStyles);\n\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert('g', ':first-child');\n\n const outerCircle = circleGroup.insert('circle', ':first-child');\n const innerCircle = circleGroup.insert('circle');\n circleGroup.attr('class', 'basic label-container').attr('style', nodeStyles);\n\n outerCircle\n .attr('class', 'outer-circle')\n .attr('style', nodeStyles)\n .attr('r', outerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n\n innerCircle\n .attr('class', 'inner-circle')\n .attr('style', nodeStyles)\n .attr('r', innerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleGroup);\n\n node.intersect = function (point) {\n log.info('DoubleCircle intersect', node, outerRadius, point);\n return intersect.circle(node, outerRadius, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createPolygonPathD = (x: number, y: number, width: number, height: number): string => {\n return [\n `M${x - height / 2},${y}`,\n `L${x + width},${y}`,\n `L${x + width},${y - height}`,\n `L${x - height / 2},${y - height}`,\n `L${x},${y - height / 2}`,\n 'Z',\n ].join(' ');\n};\n\nexport const rect_left_inv_arrow = async (\n parent: SVGAElement,\n node: Node\n): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPolygonPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n node.width = w + h;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { log } from '$root/logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createDecisionBoxPathD = (x: number, y: number, size: number): string => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n 'Z',\n ].join(' ');\n};\n\nexport const question = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-s / 2}, ${s / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n log.debug(\n 'APA12 Intersect called SPLIT\\npoint:',\n point,\n '\\nnode:\\n',\n node,\n '\\nres:',\n intersect.polygon(node, points, point)\n );\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createHexagonPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n m: number\n): string => {\n return [\n `M${x + m},${y}`,\n `L${x + width - m},${y}`,\n `L${x + width},${y - height / 2}`,\n `L${x + width - m},${y - height}`,\n `L${x + m},${y - height}`,\n `L${x},${y - height / 2}`,\n 'Z',\n ].join(' ');\n};\n\nexport const hexagon = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createHexagonPathD(0, 0, w, h, m);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createLeanRightPathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return [\n `M${x - (2 * height) / 6},${y}`,\n `L${x + width - height / 6},${y}`,\n `L${x + width + (2 * height) / 6},${y - height}`,\n `L${x + height / 6},${y - height}`,\n 'Z',\n ].join(' ');\n};\n\nexport const lean_right = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createLeanRightPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createLeanLeftPathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return [\n `M${x + (2 * height) / 6},${y}`,\n `L${x + width + height / 6},${y}`,\n `L${x + width - (2 * height) / 6},${y - height}`,\n `L${x - height / 6},${y - height}`,\n 'Z',\n ].join(' ');\n};\n\nexport const lean_left = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createLeanLeftPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createTrapezoidPathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return [\n `M${x - (2 * height) / 6},${y}`,\n `L${x + width + (2 * height) / 6},${y}`,\n `L${x + width - height / 6},${y - height}`,\n `L${x + height / 6},${y - height}`,\n 'Z',\n ].join(' ');\n};\n\nexport const trapezoid = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createTrapezoidPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '$root/rendering-util/types.d.ts';\nimport {\n styles2String,\n userNodeOverrides,\n} from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\n\nexport const createInvertedTrapezoidPathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return [\n `M${x + height / 6},${y}`,\n `L${x + width - height / 6},${y}`,\n `L${x + width + (2 * height) / 6},${y - height}`,\n `L${x - (2 * height) / 6},${y - height}`,\n 'Z',\n ].join(' ');\n};\n\nexport const inv_trapezoid = async (parent: SVGAElement, node: Node): Promise => {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\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 let polygon: d3.Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-ignore - rough is not typed\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createInvertedTrapezoidPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n", "import type { Node, RectOptions } from '$root/rendering-util/types.d.ts';\nimport { drawRect } from './drawRect.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\n\nexport const roundedRect = async (parent: SVGAElement, node: Node) => {\n const options = {\n rx: 5,\n ry: 5,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n\n return drawRect(parent, node, options);\n};\n\nexport const labelRect = async (parent: SVGElement, node: Node) => {\n const { shapeSvg } = await labelHelper(parent, node, 'label');\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.1;\n const totalHeight = 0.1;\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.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 // node.width = 1;\n // node.height = 1;\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n", "import { log } from '$root/logger.js';\nimport { state } from './shapes/state.ts';\nimport { roundedRect } from './shapes/roundedRect.ts';\nimport { squareRect } from './shapes/squareRect.ts';\nimport { stateStart } from './shapes/stateStart.ts';\nimport { stateEnd } from './shapes/stateEnd.ts';\nimport { forkJoin } from './shapes/forkJoin.ts';\nimport { choice } from './shapes/choice.ts';\nimport { note } from './shapes/note.ts';\nimport { stadium } from './shapes/stadium.js';\nimport { rectWithTitle } from './shapes/rectWithTitle.js';\nimport { getConfig } from '$root/diagram-api/diagramAPI.js';\nimport { subroutine } from './shapes/subroutine.js';\nimport { cylinder } from './shapes/cylinder.js';\nimport { circle } from './shapes/circle.js';\nimport { doublecircle } from './shapes/doubleCircle.js';\nimport { rect_left_inv_arrow } from './shapes/rectLeftInvArrow.js';\nimport { question } from './shapes/question.js';\nimport { hexagon } from './shapes/hexagon.js';\nimport { lean_right } from './shapes/leanRight.js';\nimport { lean_left } from './shapes/leanLeft.js';\nimport { trapezoid } from './shapes/trapezoid.js';\nimport { inv_trapezoid } from './shapes/invertedTrapezoid.js';\nimport { labelRect } from './shapes/labelRect.js';\n\nconst shapes = {\n state,\n stateStart,\n stateEnd,\n fork: forkJoin,\n join: forkJoin,\n choice,\n note,\n roundedRect,\n rectWithTitle,\n squareRect,\n stadium,\n subroutine,\n cylinder,\n circle,\n doublecircle,\n odd: rect_left_inv_arrow,\n diamond: question,\n hexagon,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n labelRect,\n};\n\nconst nodeElems = new Map();\n\nexport const insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n\n //special check for rect shape (with or without rounded corners)\n if (node.shape === 'rect') {\n if (node.rx && node.ry) {\n node.shape = 'roundedRect';\n } else {\n node.shape = 'squareRect';\n }\n }\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\n nodeElems.set(node.id, newEl);\n\n if (node.haveCallback) {\n nodeElems.get(node.id).attr('class', nodeElems.get(node.id).attr('class') + ' clickable');\n }\n return newEl;\n};\nexport const setNodeElem = (elem, node) => {\n nodeElems.set(node.id, elem);\n};\nexport const clear = () => {\n nodeElems.clear();\n};\n\nexport const positionNode = (node) => {\n const el = nodeElems.get(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": ["select", "point", "select", "rect", "point", "select", "rough", "clear", "select", "point", "rough", "select", "select", "point", "point", "point", "point", "rough", "rect", "rough", "options", "point", "squareRect", "rough", "circle", "rough", "point", "rough", "circle", "rough", "point", "rough", "rough", "point", "rough", "choice", "rough", "point", "rough", "rect", "rough", "point", "rough", "rect", "rough", "point", "select", "rough", "div", "dv", "select", "rect", "rough", "point", "rough", "rough", "rect", "point", "rough", "cylinder", "rough", "point", "rough", "circle", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rough", "rough", "point", "rect", "point", "shapes", "squareRect", "circle", "clear"]
}