{
  "version": 3,
  "sources": ["../../../src/rendering-util/rendering-elements/shapes/util.ts", "../../../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/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/anchor.ts", "../../../src/rendering-util/rendering-elements/shapes/bowTieRect.ts", "../../../src/rendering-util/rendering-elements/shapes/card.ts", "../../../src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts", "../../../src/rendering-util/rendering-elements/shapes/choice.ts", "../../../src/rendering-util/rendering-elements/shapes/circle.ts", "../../../src/rendering-util/rendering-elements/shapes/crossedCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts", "../../../src/rendering-util/rendering-elements/shapes/curlyBraces.ts", "../../../src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/cylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/dividedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/doubleCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/filledCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/flippedTriangle.ts", "../../../src/rendering-util/rendering-elements/shapes/forkJoin.ts", "../../../src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/hexagon.ts", "../../../src/rendering-util/rendering-elements/shapes/hourglass.ts", "../../../src/rendering-util/rendering-elements/shapes/icon.ts", "../../../src/rendering-util/rendering-elements/shapes/iconCircle.ts", "../../../src/rendering-util/rendering-elements/shapes/iconRounded.ts", "../../../src/rendering-util/rendering-elements/shapes/iconSquare.ts", "../../../src/rendering-util/rendering-elements/shapes/imageSquare.ts", "../../../src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/drawRect.ts", "../../../src/rendering-util/rendering-elements/shapes/labelRect.ts", "../../../src/rendering-util/rendering-elements/shapes/leanLeft.ts", "../../../src/rendering-util/rendering-elements/shapes/leanRight.ts", "../../../src/rendering-util/rendering-elements/shapes/lightningBolt.ts", "../../../src/rendering-util/rendering-elements/shapes/linedCylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/multiRect.ts", "../../../src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/note.ts", "../../../src/rendering-util/rendering-elements/shapes/question.ts", "../../../src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts", "../../../src/rendering-util/rendering-elements/shapes/rectWithTitle.ts", "../../../src/rendering-util/rendering-elements/shapes/roundedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/shadedProcess.ts", "../../../src/rendering-util/rendering-elements/shapes/slopedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/squareRect.ts", "../../../src/rendering-util/rendering-elements/shapes/stadium.ts", "../../../src/rendering-util/rendering-elements/shapes/state.ts", "../../../src/rendering-util/rendering-elements/shapes/stateEnd.ts", "../../../src/rendering-util/rendering-elements/shapes/stateStart.ts", "../../../src/rendering-util/rendering-elements/shapes/subroutine.ts", "../../../src/rendering-util/rendering-elements/shapes/taggedRect.ts", "../../../src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/text.ts", "../../../src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts", "../../../src/rendering-util/rendering-elements/shapes/trapezoid.ts", "../../../src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts", "../../../src/rendering-util/rendering-elements/shapes/triangle.ts", "../../../src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/waveRectangle.ts", "../../../src/rendering-util/rendering-elements/shapes/windowPane.ts", "../../../src/rendering-util/rendering-elements/shapes/erBox.ts", "../../../src/rendering-util/rendering-elements/shapes/classBox.ts", "../../../src/diagrams/class/shapeUtil.ts", "../../../src/rendering-util/rendering-elements/shapes/requirementBox.ts", "../../../src/rendering-util/rendering-elements/shapes/kanbanItem.ts", "../../../src/rendering-util/rendering-elements/shapes/bang.ts", "../../../src/rendering-util/rendering-elements/shapes/cloud.ts", "../../../src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts", "../../../src/rendering-util/rendering-elements/shapes/mindmapCircle.ts", "../../../src/rendering-util/rendering-elements/shapes.ts", "../../../src/rendering-util/rendering-elements/nodes.ts"],
  "sourcesContent": ["import { createText } from '../../createText.js';\nimport type { Node } from '../../types.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { evaluate, getEffectiveHtmlLabels } from '../../../config.js';\nimport { select } from 'd3';\nimport { sanitizeText } from '../../../diagrams/common/common.js';\nimport { decodeEntities, handleUndefinedAttr } from '../../../utils.js';\nimport type { D3Selection, Point } from '../../../types.js';\nimport { configureLabelImages } from './labelImageUtils.js';\n\nexport const labelHelper = async <T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  _classes?: string\n) => {\n  let cssClasses;\n  const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig()?.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\n    .insert('g')\n    .attr('class', 'label')\n    .attr('style', handleUndefinedAttr(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  const addBackground = !!node.icon || !!node.img;\n  const isMarkdown = node.labelType === 'markdown';\n  const text = await createText(\n    labelEl,\n    sanitizeText(decodeEntities(label), getConfig()),\n    {\n      useHtmlLabels,\n      width: node.width || getConfig().flowchart?.wrappingWidth,\n      classes: isMarkdown ? 'markdown-node-label' : '',\n      style: node.labelStyle,\n      addSvgBackground: addBackground,\n      markdown: isMarkdown,\n    },\n    getConfig()\n  );\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n  const halfPadding = (node?.padding ?? 0) / 2;\n\n  if (useHtmlLabels) {\n    const div = text.children[0] as HTMLDivElement;\n    const dv = select(text);\n\n    // if there are images, need to wait for them to load before getting the bounding box\n    await configureLabelImages(div, label);\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};\nexport const insertLabel = async <T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  label: string,\n  options: {\n    labelStyle?: string | undefined;\n    icon?: boolean | undefined;\n    img?: string | undefined;\n    useHtmlLabels?: boolean | undefined;\n    padding: number;\n    width?: number | undefined;\n    centerLabel?: boolean | undefined;\n    addSvgBackground?: boolean | undefined;\n  }\n) => {\n  const useHtmlLabels = options.useHtmlLabels ?? getEffectiveHtmlLabels(getConfig());\n\n  // Create the label and insert it after the rect\n  const labelEl = parent\n    .insert('g')\n    .attr('class', 'label')\n    .attr('style', options.labelStyle || '');\n\n  const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n    useHtmlLabels,\n    width: options.width || getConfig()?.flowchart?.wrappingWidth,\n    style: options.labelStyle,\n    addSvgBackground: !!options.icon || !!options.img,\n  });\n  // Get the size of the label\n  let bbox = text.getBBox();\n  const halfPadding = options.padding / 2;\n\n  if (getEffectiveHtmlLabels(getConfig())) {\n    const div = text.children[0];\n    const dv = select(text);\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 (options.centerLabel) {\n    labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n  }\n  labelEl.insert('rect', ':first-child');\n  return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n};\nexport const updateNodeBounds = <T extends SVGGraphicsElement>(\n  node: Node,\n  // D3Selection<SVGGElement> is for the roughjs case, D3Selection<T> is for the non-roughjs case\n  element: D3Selection<SVGGElement> | D3Selection<T>\n) => {\n  const bbox = element.node()!.getBBox();\n  node.width = bbox.width;\n  node.height = bbox.height;\n};\n\n/**\n * @param parent - Parent element to append the polygon to\n * @param w - Width of the polygon\n * @param h - Height of the polygon\n * @param points - Array of points to create the polygon\n */\nexport function insertPolygonShape(\n  parent: D3Selection<SVGGElement>,\n  w: number,\n  h: number,\n  points: Point[]\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\nexport const getNodeClasses = (node: Node, extra?: string) =>\n  (node.look === 'handDrawn' ? 'rough-node' : 'node') + ' ' + node.cssClasses + ' ' + (extra || '');\n\nexport function createPathFromPoints(points: Point[]) {\n  const pointStrings = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`);\n  pointStrings.push('Z');\n  return pointStrings.join(' ');\n}\n\nexport function generateFullSineWavePoints(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  amplitude: number,\n  numCycles: number\n) {\n  const points = [];\n  const steps = 50; // Number of segments to create a smooth curve\n  const deltaX = x2 - x1;\n  const deltaY = y2 - y1;\n  const cycleLength = deltaX / numCycles;\n\n  // Calculate frequency and phase shift\n  const frequency = (2 * Math.PI) / cycleLength;\n  const midY = y1 + deltaY / 2;\n\n  for (let i = 0; i <= steps; i++) {\n    const t = i / steps;\n    const x = x1 + t * deltaX;\n    const y = midY + amplitude * Math.sin(frequency * (x - x1));\n\n    points.push({ x, y });\n  }\n\n  return points;\n}\n\n/**\n * @param centerX - x-coordinate of center of circle\n * @param centerY - y-coordinate of center of circle\n * @param radius - radius of circle\n * @param numPoints - total points required\n * @param startAngle - angle where arc will start\n * @param endAngle - angle where arc will end\n */\nexport function generateCirclePoints(\n  centerX: number,\n  centerY: number,\n  radius: number,\n  numPoints: number,\n  startAngle: number,\n  endAngle: number\n) {\n  const points = [];\n\n  // Convert angles to radians\n  const startAngleRad = (startAngle * Math.PI) / 180;\n  const endAngleRad = (endAngle * Math.PI) / 180;\n\n  // Calculate the angle range in radians\n  const angleRange = endAngleRad - startAngleRad;\n\n  // Calculate the angle step\n  const angleStep = angleRange / (numPoints - 1);\n\n  for (let i = 0; i < numPoints; i++) {\n    const angle = startAngleRad + i * angleStep;\n    const x = centerX + radius * Math.cos(angle);\n    const y = centerY + radius * Math.sin(angle);\n    points.push({ x: -x, y: -y });\n  }\n\n  return points;\n}\n\nexport function mergePaths(roughElement: SVGElement) {\n  // Get all paths generated by RoughJS\n  // eslint-disable-next-line unicorn/prefer-spread\n  const paths: SVGPathElement[] = Array.from(roughElement.childNodes).filter(\n    (node): node is SVGPathElement => (node as Element).tagName === 'path'\n  );\n\n  // Create a new path element\n  const mergedPath: SVGPathElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n  // Combine all path data\n  const combinedPathData: string = paths\n    .map((path) => path.getAttribute('d'))\n    .filter((d): d is string => d !== null)\n    .join(' ');\n\n  mergedPath.setAttribute('d', combinedPathData);\n\n  // Find the fill path (usually the second path)\n  const fillPath = paths.find((path) => path.getAttribute('fill') !== 'none');\n\n  // Find the stroke path (usually the first path)\n  const strokePath = paths.find((path) => path.getAttribute('stroke') !== 'none');\n\n  // Helper function to safely get attribute\n  const getAttr = (element: SVGPathElement | undefined, attr: string): string | undefined => {\n    return element?.getAttribute(attr) ?? undefined;\n  };\n\n  // Apply the correct styles from respective paths\n  if (fillPath) {\n    const fillAttrs = {\n      fill: getAttr(fillPath, 'fill'),\n      'fill-opacity': getAttr(fillPath, 'fill-opacity') ?? '1',\n    };\n\n    Object.entries(fillAttrs).forEach(([attr, value]) => {\n      if (value) {\n        mergedPath.setAttribute(attr, value);\n      }\n    });\n  }\n\n  if (strokePath) {\n    const strokeAttrs = {\n      stroke: getAttr(strokePath, 'stroke'),\n      'stroke-width': getAttr(strokePath, 'stroke-width') ?? '1',\n      'stroke-opacity': getAttr(strokePath, 'stroke-opacity') ?? '1',\n    };\n\n    Object.entries(strokeAttrs).forEach(([attr, value]) => {\n      if (value) {\n        mergedPath.setAttribute(attr, value);\n      }\n    });\n  }\n\n  // Create a group to hold our merged path\n  const group: SVGGElement = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n  group.appendChild(mergedPath);\n\n  return group;\n}\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { getEffectiveHtmlLabels } from '../../config.js';\nimport { log } from '../../logger.js';\nimport { getSubGraphTitleMargins } from '../../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 { styles2String, userNodeOverrides } from './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.domId)\n    .attr('data-look', node.look);\n\n  const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\n\n  // Create the label and insert it after the rect\n  const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n  let text;\n  if (node.labelType === 'markdown') {\n    text = await createText(labelEl, node.label, {\n      style: node.labelStyle,\n      useHtmlLabels,\n      isNode: true,\n      width: node.width,\n    });\n  } else {\n    text = await createLabel(labelEl, node.label, node.labelStyle || '', false, true);\n  }\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n\n  if (getEffectiveHtmlLabels(siteConfig)) {\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.domId);\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.domId)\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 = await createLabel(label, node.label, node.labelStyle, undefined, true);\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n\n  if (getEffectiveHtmlLabels(siteConfig)) {\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 - (getEffectiveHtmlLabels(siteConfig) ? 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 kanbanSection = 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.domId)\n    .attr('data-look', node.look);\n\n  const useHtmlLabels = getEffectiveHtmlLabels(siteConfig);\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    width: node.width,\n  });\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n\n  if (getEffectiveHtmlLabels(siteConfig)) {\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: 4,\n      seed: handDrawnSeed,\n    });\n    const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), 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};\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.domId)\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    let outerRectClass = 'outer';\n    if (node.look === 'neo') {\n      outerRectClass = 'divider';\n    } else {\n      outerRectClass = 'divider';\n    }\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  kanbanSection,\n};\n\nlet clusterElems = new Map();\n\n/**\n * @typedef {keyof typeof shapes} ClusterShapeID\n */\n\n/**\n * @param {import('../types.js').ClusterNode} node - Shape defaults to 'rect'\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  // TODO: Doesn't this need an `await`?\n  const label = createLabel(elem, node.label, node.labelStyle, undefined, true);\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 { getEffectiveHtmlLabels } from '../../config.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { createText } from '../createText.js';\n\n/**\n * @param {import('../../types.js').D3Selection<SVGGElement>} element - The parent element to which the label will be appended.\n * @param {string | [string] | undefined} _vertexText - The text content of the label.\n * @param {string} style\n * @param {boolean} [isTitle] - If `true`, style this as a title label, else as a normal label.\n * @param {boolean} [isNode] - If `true`, style this as a node label, else as an edge label.\n * @deprecated svg-util/createText instead\n *\n * @example\n *\n * If `getEffectiveHtmlLabels(getConfig())` is `true`, you must reset the width\n * and height of the created label after creation, like this:\n *\n * ```js\n * const labelElement = await createLabel(parent, ... );\n * let slBox = labelElement.getBBox();\n * if (useHtmlLabels) {\n *   const div = labelElement.children[0];\n *   const dv = select(labelElement);\n *   slBox = div.getBoundingClientRect();\n *   dv.attr('width', slBox.width);\n *   dv.attr('height', slBox.height);\n * }\n * parent.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n * ```\n */\nconst createLabel = async (element, _vertexText, style, isTitle = false, isNode = false) => {\n  let vertexText = _vertexText || '';\n  if (typeof vertexText === 'object') {\n    vertexText = vertexText[0];\n  }\n\n  const config = getConfig();\n  const useHtmlLabels = getEffectiveHtmlLabels(config);\n\n  return await createText(\n    element,\n    vertexText,\n    {\n      style,\n      isTitle,\n      useHtmlLabels,\n      markdown: false,\n      isNode,\n      width: Number.POSITIVE_INFINITY,\n    },\n    config\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", "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  {\n    // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n    // p7 and p473.\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    const a1 = p2.y - p1.y;\n    const b1 = p1.x - p2.x;\n    const c1 = p2.x * p1.y - p1.x * p2.y;\n\n    // Compute r3 and r4.\n    const r3 = a1 * q1.x + b1 * q1.y + c1;\n    const r4 = a1 * q2.x + b1 * q2.y + c1;\n\n    const epsilon = 1e-6;\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    const a2 = q2.y - q1.y;\n    const b2 = q1.x - q2.x;\n    const c2 = q2.x * q1.y - q1.x * q2.y;\n\n    // Compute r1 and r2\n    const r1 = a2 * p1.x + b2 * p1.y + c2;\n    const 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 (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n      return /*DON'T_INTERSECT*/;\n    }\n\n    // Line segments intersect: compute intersection point.\n    const denom = a1 * b2 - a2 * b1;\n    if (denom === 0) {\n      return /*COLLINEAR*/;\n    }\n\n    const 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    let num = b1 * c2 - b2 * c1;\n    const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n    num = a2 * c1 - a1 * c2;\n    const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n    return { x: x, y: y };\n  }\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 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 { log } from '../../../logger.js';\nimport { updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function anchor<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const classes = getNodeClasses(node);\n  let cssClasses = classes;\n  if (!classes) {\n    cssClasses = 'anchor';\n  }\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', cssClasses)\n    .attr('id', node.domId || node.id);\n\n  const radius = 1;\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, { fill: 'black', stroke: 'none', fillStyle: 'solid' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n  }\n  const roughNode = rc.circle(0, 0, radius * 2, options);\n  const circleElem = shapeSvg.insert(() => roughNode, ':first-child');\n  circleElem.attr('class', 'anchor').attr('style', handleUndefinedAttr(cssStyles));\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 { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateArcPoints(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  rx: number,\n  ry: number,\n  clockwise: boolean\n) {\n  const numPoints = 20;\n  // Calculate midpoint\n  const midX = (x1 + x2) / 2;\n  const midY = (y1 + y2) / 2;\n\n  // Calculate the angle of the line connecting the points\n  const angle = Math.atan2(y2 - y1, x2 - x1);\n\n  // Calculate transformed coordinates for the ellipse\n  const dx = (x2 - x1) / 2;\n  const dy = (y2 - y1) / 2;\n\n  // Scale to unit circle\n  const transformedX = dx / rx;\n  const transformedY = dy / ry;\n\n  // Calculate the distance between points on the unit circle\n  const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n\n  // Check if the ellipse can be drawn with the given radii\n  if (distance > 1) {\n    throw new Error('The given radii are too small to create an arc between the points.');\n  }\n\n  // Calculate the distance from the midpoint to the center of the ellipse\n  const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n\n  // Calculate the center of the ellipse\n  const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n  const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n\n  // Calculate the start and end angles on the ellipse\n  const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n  const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n\n  // Adjust angles for clockwise/counterclockwise\n  let angleRange = endAngle - startAngle;\n  if (clockwise && angleRange < 0) {\n    angleRange += 2 * Math.PI;\n  }\n  if (!clockwise && angleRange > 0) {\n    angleRange -= 2 * Math.PI;\n  }\n\n  // Generate points\n  const points = [];\n  for (let i = 0; i < numPoints; i++) {\n    const t = i / (numPoints - 1);\n    const angle = startAngle + t * angleRange;\n    const x = centerX + rx * Math.cos(angle);\n    const y = centerY + ry * Math.sin(angle);\n    points.push({ x, y });\n  }\n\n  return points;\n}\n\n/**\n * Calculates the sagitta of an arc of an ellipse given its chord and radii.\n *\n * @param chord - The chord of the arc (e.g. the line connecting the two points on the circle)\n * @param radiusX - The x-radius of the ellipse.\n * @param radiusY - The y-radius of the ellipse.\n */\nfunction calculateArcSagitta(chord: number, radiusX: number, radiusY: number) {\n  const [semiMajorAxis, semiMinorAxis] = [radiusX, radiusY].sort((a, b) => b - a);\n  return semiMinorAxis * (1 - Math.sqrt(1 - (chord / semiMajorAxis / 2) ** 2));\n}\n\nexport async function bowTieRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  const calcTotalHeight = (labelHeight: number) => labelHeight + labelPaddingY;\n  const calcEllipseRadius = (totalHeight: number) => {\n    const ry = totalHeight / 2;\n    const rx = ry / (2.5 + totalHeight / 50);\n    return [rx, ry];\n  };\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalHeight = calcTotalHeight(node?.height ? node?.height : bbox.height);\n  const [rx, ry] = calcEllipseRadius(totalHeight);\n  const sagitta = calculateArcSagitta(totalHeight, rx, ry);\n  const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + sagitta;\n\n  const w = totalWidth - sagitta;\n  const h = totalHeight;\n  // let shape: d3.Selection<SVGPathElement | SVGGElement, unknown, null, undefined>;\n  const { cssStyles } = node;\n\n  const points = [\n    { x: w / 2, y: -h / 2 },\n    { x: -w / 2, y: -h / 2 },\n    ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n    { x: w / 2, y: h / 2 },\n    ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true),\n  ];\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const bowTieRectPath = createPathFromPoints(points);\n  const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n  const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, ':first-child');\n\n  bowTieRectShape.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    bowTieRectShape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    bowTieRectShape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  bowTieRectShape.attr('transform', `translate(${rx / 2}, 0)`);\n\n  updateNodeBounds(node, bowTieRectShape);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\n// const createPathFromPoints = (points: { x: number; y: number }[]): string => {\n//   const pointStrings = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`);\n//   pointStrings.push('Z');\n//   return pointStrings.join(' ');\n// };\n\n/// Size of the notch on the top left corner\nconst NOTCH_SIZE = 12;\n\nexport async function card<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 28 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 24 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w =\n    (node?.width ?? bbox.width) +\n    (node.look === 'neo' ? labelPaddingX * 2 : labelPaddingX + NOTCH_SIZE);\n  const h =\n    (node?.height ?? bbox.height) + (node.look === 'neo' ? labelPaddingY * 2 : labelPaddingY);\n  const left = 0;\n  const right = w;\n  const top = -h;\n  const bottom = 0;\n  const points = [\n    { x: left + NOTCH_SIZE, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom },\n    { x: left, y: top + NOTCH_SIZE },\n    { x: left + NOTCH_SIZE, y: top },\n  ];\n\n  let polygon: D3Selection<SVGGElement> | Awaited<ReturnType<typeof insertPolygonShape>>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const pathData = createPathFromPoints(points);\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  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 { D3Selection } from '../../../types.js';\n\nexport function insertPolygonShape<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\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 intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createPathFromPoints, getNodeClasses } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function choice<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { nodeStyles } = styles2String(node);\n  node.label = '';\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId ?? node.id);\n  const { cssStyles } = node;\n\n  const s = Math.max(28, node.width ?? 0);\n\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  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const choicePath = createPathFromPoints(points);\n  const roughNode = rc.path(choicePath, options);\n  const choiceShape = shapeSvg.insert(() => roughNode, ':first-child');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    choiceShape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    choiceShape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  node.width = 28;\n  node.height = 28;\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Bounds, D3Selection, Point } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { MindmapOptions, Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function circle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  options?: MindmapOptions | ShapeRenderOptions\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n\n  // Calculate radius based on look type\n  const labelPadding = 16;\n  const padding = options?.padding ?? halfPadding;\n  const radius = node.look === 'neo' ? bbox.width / 2 + labelPadding * 2 : bbox.width / 2 + padding;\n\n  let circleElem;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\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', handleUndefinedAttr(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  node.calcIntersect = function (bounds: Bounds, point: Point) {\n    const radius = bounds.width / 2;\n    return intersect.circle(bounds, radius, point);\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 '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nfunction createLine(r: number) {\n  const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees\n  const yAxis45 = Math.sin(Math.PI / 4); // sine of 45 degrees\n  const lineLength = r * 2;\n\n  const pointQ1 = { x: (lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant I\n  const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant II\n  const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant III\n  const pointQ4 = { x: (lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant IV\n\n  return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n                   M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n\nexport function crossedCircle<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  node.label = '';\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId ?? node.id);\n  const radius = Math.max(30, node?.width ?? 0);\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const circleNode = rc.circle(0, 0, radius * 2, options);\n  const linePath = createLine(radius);\n  const lineNode = rc.path(linePath, options);\n\n  const crossedCircle = shapeSvg.insert(() => circleNode, ':first-child');\n  crossedCircle.insert(() => lineNode);\n  crossedCircle.attr('class', 'outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    crossedCircle.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    crossedCircle.selectAll('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, crossedCircle);\n\n  node.intersect = function (point) {\n    log.info('crossedCircle intersect', node, { radius, point });\n    const pos = intersect.circle(node, radius, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n  centerX: number,\n  centerY: number,\n  radius: number,\n  numPoints = 100,\n  startAngle = 0,\n  endAngle = 180\n) {\n  const points = [];\n\n  // Convert angles to radians\n  const startAngleRad = (startAngle * Math.PI) / 180;\n  const endAngleRad = (endAngle * Math.PI) / 180;\n\n  // Calculate the angle range in radians\n  const angleRange = endAngleRad - startAngleRad;\n\n  // Calculate the angle step\n  const angleStep = angleRange / (numPoints - 1);\n\n  for (let i = 0; i < numPoints; i++) {\n    const angle = startAngleRad + i * angleStep;\n    const x = centerX + radius * Math.cos(angle);\n    const y = centerY + radius * Math.sin(angle);\n    points.push({ x: -x, y: -y });\n  }\n\n  return points;\n}\n\nexport async function curlyBraceLeft<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const paddingX = node.look === 'neo' ? 18 : (node.padding ?? 0);\n  const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n  const w = bbox.width + paddingX;\n  const h = bbox.height + paddingY;\n  const radius = Math.max(5, h * 0.1);\n  const { cssStyles } = node;\n\n  const points = [\n    ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n    { x: -w / 2 - radius, y: radius },\n    ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n    { x: -w / 2 - radius, y: -h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n  ];\n\n  const rectPoints = [\n    { x: w / 2, y: -h / 2 - radius },\n    { x: -w / 2, y: -h / 2 - radius },\n    ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n    { x: -w / 2 - radius, y: -radius },\n    ...generateCirclePoints(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n    { x: -w / 2 - radius, y: h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n    { x: -w / 2, y: h / 2 + radius },\n    { x: w / 2, y: h / 2 + radius },\n  ];\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, { fill: 'none' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const curlyBraceLeftPath = createPathFromPoints(points);\n  const newCurlyBracePath = curlyBraceLeftPath.replace('Z', '');\n  const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n  const rectPath = createPathFromPoints(rectPoints);\n  const rectShape = rc.path(rectPath, { ...options });\n  const curlyBraceLeftShape = shapeSvg.insert('g', ':first-child');\n  curlyBraceLeftShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n  curlyBraceLeftShape.insert(() => curlyBraceLeftNode, ':first-child');\n  curlyBraceLeftShape.attr('class', 'text');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    curlyBraceLeftShape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    curlyBraceLeftShape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  curlyBraceLeftShape.attr('transform', `translate(${radius}, 0)`);\n\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, curlyBraceLeftShape);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, rectPoints, point);\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n  centerX: number,\n  centerY: number,\n  radius: number,\n  numPoints = 100,\n  startAngle = 0,\n  endAngle = 180\n) {\n  const points = [];\n\n  // Convert angles to radians\n  const startAngleRad = (startAngle * Math.PI) / 180;\n  const endAngleRad = (endAngle * Math.PI) / 180;\n\n  // Calculate the angle range in radians\n  const angleRange = endAngleRad - startAngleRad;\n\n  // Calculate the angle step\n  const angleStep = angleRange / (numPoints - 1);\n\n  for (let i = 0; i < numPoints; i++) {\n    const angle = startAngleRad + i * angleStep;\n    const x = centerX + radius * Math.cos(angle);\n    const y = centerY + radius * Math.sin(angle);\n    points.push({ x, y });\n  }\n\n  return points;\n}\n\nexport async function curlyBraceRight<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const labelPaddingX = node.look === 'neo' ? 18 : (node.padding ?? 0);\n  const labelPaddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n  const w = bbox.width + (node.look === 'neo' ? labelPaddingX * 2 : labelPaddingX);\n  const h = bbox.height + (node.look === 'neo' ? labelPaddingY * 2 : labelPaddingY);\n  const radius = Math.max(5, h * 0.1);\n\n  const { cssStyles } = node;\n\n  const points = [\n    ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n    { x: w / 2 + radius, y: -radius },\n    ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n    { x: w / 2 + radius, y: h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n  ];\n\n  const rectPoints = [\n    { x: -w / 2, y: -h / 2 - radius },\n    { x: w / 2, y: -h / 2 - radius },\n    ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n    { x: w / 2 + radius, y: -radius },\n    ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n    { x: w / 2 + radius, y: h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n    { x: w / 2, y: h / 2 + radius },\n    { x: -w / 2, y: h / 2 + radius },\n  ];\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, { fill: 'none' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const curlyBraceRightPath = createPathFromPoints(points);\n  const newCurlyBracePath = curlyBraceRightPath.replace('Z', '');\n  const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n  const rectPath = createPathFromPoints(rectPoints);\n  const rectShape = rc.path(rectPath, { ...options });\n  const curlyBraceRightShape = shapeSvg.insert('g', ':first-child');\n  curlyBraceRightShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n  curlyBraceRightShape.insert(() => curlyBraceRightNode, ':first-child');\n  curlyBraceRightShape.attr('class', 'text');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    curlyBraceRightShape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    curlyBraceRightShape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  curlyBraceRightShape.attr('transform', `translate(${-radius}, 0)`);\n\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, curlyBraceRightShape);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, rectPoints, point);\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n  centerX: number,\n  centerY: number,\n  radius: number,\n  numPoints = 100,\n  startAngle = 0,\n  endAngle = 180\n) {\n  const points = [];\n\n  // Convert angles to radians\n  const startAngleRad = (startAngle * Math.PI) / 180;\n  const endAngleRad = (endAngle * Math.PI) / 180;\n\n  // Calculate the angle range in radians\n  const angleRange = endAngleRad - startAngleRad;\n\n  // Calculate the angle step\n  const angleStep = angleRange / (numPoints - 1);\n\n  for (let i = 0; i < numPoints; i++) {\n    const angle = startAngleRad + i * angleStep;\n    const x = centerX + radius * Math.cos(angle);\n    const y = centerY + radius * Math.sin(angle);\n    points.push({ x: -x, y: -y });\n  }\n\n  return points;\n}\n\nexport async function curlyBraces<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const labelPaddingX = node.look === 'neo' ? 18 : (node.padding ?? 0);\n  const labelPaddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n  const w = bbox.width + (node.look === 'neo' ? labelPaddingX * 2 : labelPaddingX);\n  const h = bbox.height + (node.look === 'neo' ? labelPaddingY * 2 : labelPaddingY);\n  const radius = Math.max(5, h * 0.1);\n  const { cssStyles } = node;\n\n  const leftCurlyBracePoints = [\n    ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n    { x: -w / 2 - radius, y: radius },\n    ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n    { x: -w / 2 - radius, y: -h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n  ];\n\n  const rightCurlyBracePoints = [\n    ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n    { x: w / 2 - radius / 2, y: radius },\n    ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n    ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n    { x: w / 2 - radius / 2, y: -radius },\n    ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n  ];\n\n  const rectPoints = [\n    { x: w / 2, y: -h / 2 - radius },\n    { x: -w / 2, y: -h / 2 - radius },\n    ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n    { x: -w / 2 - radius, y: -radius },\n    ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n    ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n    { x: -w / 2 - radius, y: h / 2 },\n    ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n    { x: -w / 2, y: h / 2 + radius },\n    { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n    ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n    { x: w / 2 - radius / 2, y: radius },\n    ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n    ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n    { x: w / 2 - radius / 2, y: -radius },\n    ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n  ];\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, { fill: 'none' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n  const newLeftCurlyBracePath = leftCurlyBracePath.replace('Z', '');\n  const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n  const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n  const newRightCurlyBracePath = rightCurlyBracePath.replace('Z', '');\n  const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n  const rectPath = createPathFromPoints(rectPoints);\n  const rectShape = rc.path(rectPath, { ...options });\n  const curlyBracesShape = shapeSvg.insert('g', ':first-child');\n  curlyBracesShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n  curlyBracesShape.insert(() => leftCurlyBraceNode, ':first-child');\n  curlyBracesShape.insert(() => rightCurlyBraceNode, ':first-child');\n  curlyBracesShape.attr('class', 'text');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    curlyBracesShape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    curlyBracesShape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  curlyBracesShape.attr('transform', `translate(${radius - radius / 4}, 0)`);\n\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, curlyBracesShape);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, rectPoints, point);\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  createPathFromPoints,\n  generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function curvedTrapezoid<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  const minWidth = 20,\n    minHeight = 5;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = Math.max(minWidth, (bbox.width + labelPaddingX * 2) * 1.25, node?.width ?? 0);\n  const h = Math.max(minHeight, bbox.height + labelPaddingY * 2, node?.height ?? 0);\n  const radius = h / 2;\n\n  const { cssStyles } = node;\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const totalWidth = w,\n    totalHeight = h;\n  const rw = totalWidth - radius;\n  const tw = totalHeight / 4;\n\n  const points = [\n    { x: rw, y: 0 },\n    { x: tw, y: 0 },\n    { x: 0, y: totalHeight / 2 },\n    { x: tw, y: totalHeight },\n    { x: rw, y: totalHeight },\n    ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90),\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\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};\n\nconst MIN_HEIGHT = 8;\nconst MIN_WIDTH = 8;\n\nexport async function cylinder<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 24 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 24 : nodePadding;\n\n  if (node.width || node.height) {\n    const originalWidth = node.width ?? 0;\n    node.width = (node.width ?? 0) - labelPaddingY;\n    if (node.width < MIN_WIDTH) {\n      node.width = MIN_WIDTH;\n    }\n\n    const rx = originalWidth / 2;\n    const ry = rx / (2.5 + originalWidth / 50);\n    node.height = (node.height ?? 0) - labelPaddingX - ry * 3;\n\n    if (node.height < MIN_HEIGHT) {\n      node.height = MIN_HEIGHT;\n    }\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node.width ? node.width : bbox.width) + labelPaddingY;\n  const rx = w / 2;\n  const ry = rx / (2.5 + w / 50);\n  const h = (node.height ? node.height : bbox.height) + labelPaddingX + ry;\n\n  let cylinder: D3Selection<SVGPathElement> | D3Selection<SVGGElement>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\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 options = userNodeOverrides(node, {});\n    const outerNode = rc.path(outerPathData, options);\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 outer-path')\n      .attr('style', handleUndefinedAttr(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  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n  );\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 { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function dividedRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0);\n  const paddingY = node.look === 'neo' ? 16 : (node.padding ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = bbox.width + paddingX;\n  const h = bbox.height + paddingY;\n  const rectOffset = h * 0.2;\n\n  const x = -w / 2;\n  const y = -h / 2 - rectOffset / 2;\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const pts = [\n    { x, y: y + rectOffset },\n    { x: -x, y: y + rectOffset },\n    { x: -x, y: -y },\n    { x, y: -y },\n    { x, y },\n    { x: -x, y },\n    { x: -x, y: y + rectOffset },\n  ];\n\n  const poly = rc.polygon(\n    pts.map((p) => [p.x, p.y]),\n    options\n  );\n\n  const polygon = shapeSvg.insert(() => poly, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectAll('path').attr('style', nodeStyles);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    const pos = intersect.rect(node, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function doublecircle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  const gap = node.look === 'neo' ? 12 : 5;\n  node.labelStyle = labelStyles;\n  const padding = node.padding ?? 0;\n  const labelPadding = node.look === 'neo' ? 16 : padding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const outerRadius = (node?.width ? node?.width / 2 : bbox.width / 2) + (labelPadding ?? 0);\n  const innerRadius = outerRadius - gap;\n\n  let circleGroup;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\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\n      .attr('class', handleUndefinedAttr(node.cssClasses))\n      .attr('style', handleUndefinedAttr(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 rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function filledCircle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables } }: ShapeRenderOptions\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.label = '';\n  node.labelStyle = labelStyles;\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId ?? node.id);\n  const radius = 7;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const { nodeBorder } = themeVariables;\n  const options = userNodeOverrides(node, { fillStyle: 'solid' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n  }\n\n  const circleNode = rc.circle(0, 0, radius * 2, options);\n\n  const filledCircle = shapeSvg.insert(() => circleNode, ':first-child');\n\n  filledCircle.selectAll('path').attr('style', `fill: ${nodeBorder} !important;`);\n\n  if (cssStyles && cssStyles.length > 0 && node.look !== 'handDrawn') {\n    filledCircle.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    filledCircle.selectAll('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, filledCircle);\n\n  node.intersect = function (point) {\n    log.info('filledCircle intersect', node, { radius, point });\n    const pos = intersect.circle(node, radius, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nconst MIN_HEIGHT = 10;\nconst MIN_WIDTH = 10;\nexport async function flippedTriangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  if (node.width || node.height) {\n    node.height = node?.height ?? 0;\n    if (node.height < MIN_HEIGHT) {\n      node.height = MIN_HEIGHT;\n    }\n\n    node.width = (node?.width ?? 0) - labelPaddingX - labelPaddingX / 2;\n    if (node.width < MIN_WIDTH) {\n      node.width = MIN_WIDTH;\n    }\n  }\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0);\n  const h = node?.height ? node?.height : w + bbox.height;\n\n  const tw = h;\n\n  const points = [\n    { x: 0, y: -h },\n    { x: tw, y: -h },\n    { x: tw / 2, y: 0 },\n  ];\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const pathData = createPathFromPoints(points);\n  const roughNode = rc.path(pathData, options);\n\n  const flippedTriangle = shapeSvg\n    .insert(() => roughNode, ':first-child')\n    .attr('transform', `translate(${-h / 2}, ${h / 2})`)\n    .attr('class', 'outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    flippedTriangle.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    flippedTriangle.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  node.width = w;\n  node.height = h;\n\n  updateNodeBounds(node, flippedTriangle);\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  node.intersect = function (point) {\n    log.info('Triangle intersect', node, points, point);\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function forkJoin<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { dir, config: { state, themeVariables } }: ShapeRenderOptions\n) {\n  const { nodeStyles } = styles2String(node);\n  node.label = '';\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId ?? node.id);\n\n  const { cssStyles } = node;\n  let width = Math.max(70, node?.width ?? 0);\n  let height = Math.max(10, node?.height ?? 0);\n\n  if (dir === 'LR') {\n    width = Math.max(10, node?.width ?? 0);\n    height = Math.max(70, node?.height ?? 0);\n  }\n\n  const x = (-1 * width) / 2;\n  const y = (-1 * height) / 2;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {\n    stroke: themeVariables.lineColor,\n    fill: themeVariables.lineColor,\n  });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const roughNode = rc.rectangle(x, y, width, height, options);\n\n  const shape = shapeSvg.insert(() => roughNode, ':first-child');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    shape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    shape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, shape);\n  const padding = state?.padding ?? 0;\n  if (node.width && node.height) {\n    node.width += padding / 2 || 0;\n    node.height += padding / 2 || 0;\n  }\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n  return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  createPathFromPoints,\n  generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function halfRoundedRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const minWidth = 15,\n    minHeight = 10;\n\n  const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0);\n  const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n\n  if (node.width || node.height) {\n    node.height = (node?.height ?? 0) - paddingY * 2;\n    if (node.height < minHeight) {\n      node.height = minHeight;\n    }\n\n    node.width = (node?.width ?? 0) - paddingX * 2;\n    if (node.width < minWidth) {\n      node.width = minWidth;\n    }\n  }\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node?.width ? node?.width : Math.max(minWidth, bbox.width)) + paddingX * 2;\n  const h = (node?.height ? node?.height : Math.max(minHeight, bbox.height)) + paddingY * 2;\n  const radius = h / 2;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2, y: -h / 2 },\n    { x: w / 2 - radius, y: -h / 2 },\n    ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n    { x: w / 2 - radius, y: h / 2 },\n    { x: -w / 2, y: h / 2 },\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  // label.attr(\n  //   'transform',\n  //   `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n  // );\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    log.info('Pill intersect', node, { radius, point });\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.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 async function hexagon<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  const f = node.look === 'neo' ? 3.5 : 4;\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const wa = 70;\n  const ha = 32;\n\n  const labelPaddingX = node.look === 'neo' ? wa : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? ha : nodePadding;\n  if (node.width || node.height) {\n    const originalHeight = node.height ?? 0;\n    const m = originalHeight / f;\n    node.width = (node?.width ?? 0) - 2 * m - labelPaddingY;\n    node.height = (node.height ?? 0) - labelPaddingX;\n  }\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const h = (node?.height ? node?.height : bbox.height) + labelPaddingX;\n  const m = h / f;\n\n  const w = (node?.width ? node?.width : bbox.width) + 2 * m + labelPaddingY;\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: D3Selection<SVGGElement> | Awaited<ReturnType<typeof insertPolygonShape>>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\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 { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function hourglass<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.label = '';\n  node.labelStyle = labelStyles;\n  const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = Math.max(30, node?.width ?? 0);\n  const h = Math.max(30, node?.height ?? 0);\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: 0, y: 0 },\n    { x: w, y: 0 },\n    { x: 0, y: h },\n    { x: w, y: h },\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n  updateNodeBounds(node, polygon);\n\n  // label.attr('transform', `translate(${-bbox.width / 2}, ${(h/2)})`); // To transform text below hourglass shape\n\n  node.intersect = function (point) {\n    log.info('Pill intersect', node, { points });\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function icon<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n  const { labelStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const assetHeight = node.assetHeight ?? 48;\n  const assetWidth = node.assetWidth ?? 48;\n  const iconSize = Math.max(assetHeight, assetWidth);\n  const defaultWidth = flowchart?.wrappingWidth;\n  node.width = Math.max(iconSize, defaultWidth ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default');\n\n  const topLabel = node.pos === 't';\n\n  const height = iconSize;\n  const width = iconSize;\n  const { nodeBorder } = themeVariables;\n  const { stylesMap } = compileStyles(node);\n\n  const x = -width / 2;\n  const y = -height / 2;\n\n  const labelPadding = node.label ? 8 : 0;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, { stroke: 'none', fill: 'none' });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const iconNode = rc.rectangle(x, y, width, height, options);\n\n  const outerWidth = Math.max(width, bbox.width);\n  const outerHeight = height + bbox.height + labelPadding;\n\n  const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n    ...options,\n    fill: 'transparent',\n    stroke: 'none',\n  });\n\n  const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n  const outerShape = shapeSvg.insert(() => outerNode);\n\n  if (node.icon) {\n    const iconElem = shapeSvg.append('g');\n    iconElem.html(\n      `<g>${await getIconSVG(node.icon, {\n        height: iconSize,\n        width: iconSize,\n        fallbackPrefix: '',\n      })}</g>`\n    );\n    const iconBBox = iconElem.node()!.getBBox();\n    const iconWidth = iconBBox.width;\n    const iconHeight = iconBBox.height;\n    const iconX = iconBBox.x;\n    const iconY = iconBBox.y;\n    iconElem.attr(\n      'transform',\n      `translate(${-iconWidth / 2 - iconX},${\n        topLabel\n          ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n          : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n      })`\n    );\n    iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n      topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n    })`\n  );\n\n  iconShape.attr(\n    'transform',\n    `translate(${0},${\n      topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n    })`\n  );\n\n  updateNodeBounds(node, outerShape);\n\n  node.intersect = function (point) {\n    log.info('iconSquare intersect', node, point);\n    if (!node.label) {\n      return intersect.rect(node, point);\n    }\n    const dx = node.x ?? 0;\n    const dy = node.y ?? 0;\n    const nodeHeight = node.height ?? 0;\n    let points = [];\n    if (topLabel) {\n      points = [\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n      ];\n    } else {\n      points = [\n        { x: dx - width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n      ];\n    }\n\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconCircle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n  const { labelStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const assetHeight = node.assetHeight ?? 48;\n  const assetWidth = node.assetWidth ?? 48;\n  const iconSize = Math.max(assetHeight, assetWidth);\n  const defaultWidth = flowchart?.wrappingWidth;\n  node.width = Math.max(iconSize, defaultWidth ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default');\n\n  const padding = 20;\n  const labelPadding = node.label ? 8 : 0;\n\n  const topLabel = node.pos === 't';\n\n  const { nodeBorder, mainBkg } = themeVariables;\n  const { stylesMap } = compileStyles(node);\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const fill = stylesMap.get('fill');\n  options.stroke = fill ?? mainBkg;\n\n  const iconElem = shapeSvg.append('g');\n  if (node.icon) {\n    iconElem.html(\n      `<g>${await getIconSVG(node.icon, {\n        height: iconSize,\n        width: iconSize,\n        fallbackPrefix: '',\n      })}</g>`\n    );\n  }\n  const iconBBox = iconElem.node()!.getBBox();\n  const iconWidth = iconBBox.width;\n  const iconHeight = iconBBox.height;\n  const iconX = iconBBox.x;\n  const iconY = iconBBox.y;\n\n  const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n  const iconNode = rc.circle(0, 0, diameter, options);\n\n  const outerWidth = Math.max(diameter, bbox.width);\n  const outerHeight = diameter + bbox.height + labelPadding;\n\n  const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n    ...options,\n    fill: 'transparent',\n    stroke: 'none',\n  });\n\n  const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n  const outerShape = shapeSvg.insert(() => outerNode);\n  iconElem.attr(\n    'transform',\n    `translate(${-iconWidth / 2 - iconX},${\n      topLabel\n        ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n        : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n    })`\n  );\n  iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n      topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n    })`\n  );\n\n  iconShape.attr(\n    'transform',\n    `translate(${0},${\n      topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n    })`\n  );\n\n  updateNodeBounds(node, outerShape);\n\n  node.intersect = function (point) {\n    log.info('iconSquare intersect', node, point);\n    const pos = intersect.rect(node, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconRounded<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n  const { labelStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const assetHeight = node.assetHeight ?? 48;\n  const assetWidth = node.assetWidth ?? 48;\n  const iconSize = Math.max(assetHeight, assetWidth);\n  const defaultWidth = flowchart?.wrappingWidth;\n  node.width = Math.max(iconSize, defaultWidth ?? 0);\n  const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n    parent,\n    node,\n    'icon-shape default'\n  );\n\n  const topLabel = node.pos === 't';\n\n  const height = iconSize + halfPadding * 2;\n  const width = iconSize + halfPadding * 2;\n  const { nodeBorder, mainBkg } = themeVariables;\n  const { stylesMap } = compileStyles(node);\n\n  const x = -width / 2;\n  const y = -height / 2;\n\n  const labelPadding = node.label ? 8 : 0;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const fill = stylesMap.get('fill');\n  options.stroke = fill ?? mainBkg;\n\n  const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n\n  const outerWidth = Math.max(width, bbox.width);\n  const outerHeight = height + bbox.height + labelPadding;\n\n  const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n    ...options,\n    fill: 'transparent',\n    stroke: 'none',\n  });\n\n  const iconShape = shapeSvg.insert(() => iconNode, ':first-child').attr('class', 'icon-shape2');\n  const outerShape = shapeSvg.insert(() => outerNode);\n\n  if (node.icon) {\n    const iconElem = shapeSvg.append('g');\n    iconElem.html(\n      `<g>${await getIconSVG(node.icon, {\n        height: iconSize,\n        width: iconSize,\n        fallbackPrefix: '',\n      })}</g>`\n    );\n    const iconBBox = iconElem.node()!.getBBox();\n    const iconWidth = iconBBox.width;\n    const iconHeight = iconBBox.height;\n    const iconX = iconBBox.x;\n    const iconY = iconBBox.y;\n    iconElem.attr(\n      'transform',\n      `translate(${-iconWidth / 2 - iconX},${\n        topLabel\n          ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n          : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n      })`\n    );\n    iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n      topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n    })`\n  );\n\n  iconShape.attr(\n    'transform',\n    `translate(${0},${\n      topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n    })`\n  );\n\n  updateNodeBounds(node, outerShape);\n\n  node.intersect = function (point) {\n    log.info('iconSquare intersect', node, point);\n    if (!node.label) {\n      return intersect.rect(node, point);\n    }\n    const dx = node.x ?? 0;\n    const dy = node.y ?? 0;\n    const nodeHeight = node.height ?? 0;\n    let points = [];\n    if (topLabel) {\n      points = [\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n      ];\n    } else {\n      points = [\n        { x: dx - width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n      ];\n    }\n\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconSquare<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n  const { labelStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const assetHeight = node.assetHeight ?? 48;\n  const assetWidth = node.assetWidth ?? 48;\n  const iconSize = Math.max(assetHeight, assetWidth);\n  const defaultWidth = flowchart?.wrappingWidth;\n  node.width = Math.max(iconSize, defaultWidth ?? 0);\n  const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n    parent,\n    node,\n    'icon-shape default'\n  );\n\n  const topLabel = node.pos === 't';\n\n  const height = iconSize + halfPadding * 2;\n  const width = iconSize + halfPadding * 2;\n  const { nodeBorder, mainBkg } = themeVariables;\n  const { stylesMap } = compileStyles(node);\n\n  const x = -width / 2;\n  const y = -height / 2;\n\n  const labelPadding = node.label ? 8 : 0;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const fill = stylesMap.get('fill');\n  options.stroke = fill ?? mainBkg;\n\n  const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n\n  const outerWidth = Math.max(width, bbox.width);\n  const outerHeight = height + bbox.height + labelPadding;\n\n  const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n    ...options,\n    fill: 'transparent',\n    stroke: 'none',\n  });\n\n  const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n  const outerShape = shapeSvg.insert(() => outerNode);\n\n  if (node.icon) {\n    const iconElem = shapeSvg.append('g');\n    iconElem.html(\n      `<g>${await getIconSVG(node.icon, {\n        height: iconSize,\n        width: iconSize,\n        fallbackPrefix: '',\n      })}</g>`\n    );\n    const iconBBox = iconElem.node()!.getBBox();\n    const iconWidth = iconBBox.width;\n    const iconHeight = iconBBox.height;\n    const iconX = iconBBox.x;\n    const iconY = iconBBox.y;\n    iconElem.attr(\n      'transform',\n      `translate(${-iconWidth / 2 - iconX},${\n        topLabel\n          ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n          : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n      })`\n    );\n    iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n      topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n    })`\n  );\n\n  iconShape.attr(\n    'transform',\n    `translate(${0},${\n      topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n    })`\n  );\n\n  updateNodeBounds(node, outerShape);\n\n  node.intersect = function (point) {\n    log.info('iconSquare intersect', node, point);\n    if (!node.label) {\n      return intersect.rect(node, point);\n    }\n    const dx = node.x ?? 0;\n    const dy = node.y ?? 0;\n    const nodeHeight = node.height ?? 0;\n    let points = [];\n    if (topLabel) {\n      points = [\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n      ];\n    } else {\n      points = [\n        { x: dx - width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n        { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n      ];\n    }\n\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function imageSquare<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { flowchart } }: ShapeRenderOptions\n) {\n  const img = new Image();\n  img.src = node?.img ?? '';\n  await img.decode();\n\n  const imageNaturalWidth = Number(img.naturalWidth.toString().replace('px', ''));\n  const imageNaturalHeight = Number(img.naturalHeight.toString().replace('px', ''));\n  node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n\n  const { labelStyles } = styles2String(node);\n\n  node.labelStyle = labelStyles;\n\n  const defaultWidth = flowchart?.wrappingWidth;\n  node.defaultWidth = flowchart?.wrappingWidth;\n\n  const imageRawWidth = Math.max(\n    node.label ? (defaultWidth ?? 0) : 0,\n    node?.assetWidth ?? imageNaturalWidth\n  );\n\n  const imageWidth =\n    node.constraint === 'on'\n      ? node?.assetHeight\n        ? node.assetHeight * node.imageAspectRatio\n        : imageRawWidth\n      : imageRawWidth;\n\n  const imageHeight =\n    node.constraint === 'on'\n      ? imageWidth / node.imageAspectRatio\n      : (node?.assetHeight ?? imageNaturalHeight);\n  node.width = Math.max(imageWidth, defaultWidth ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'image-shape default');\n\n  const topLabel = node.pos === 't';\n\n  const x = -imageWidth / 2;\n  const y = -imageHeight / 2;\n\n  const labelPadding = node.label ? 8 : 0;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n\n  const outerWidth = Math.max(imageWidth, bbox.width);\n  const outerHeight = imageHeight + bbox.height + labelPadding;\n\n  const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n    ...options,\n    fill: 'none',\n    stroke: 'none',\n  });\n\n  const iconShape = shapeSvg.insert(() => imageNode, ':first-child');\n  const outerShape = shapeSvg.insert(() => outerNode);\n\n  if (node.img) {\n    const image = shapeSvg.append('image');\n\n    // Set the image attributes\n    image.attr('href', node.img);\n    image.attr('width', imageWidth);\n    image.attr('height', imageHeight);\n    image.attr('preserveAspectRatio', 'none');\n\n    image.attr(\n      'transform',\n      `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n    );\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n      topLabel\n        ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2\n        : imageHeight / 2 - bbox.height / 2 + labelPadding / 2\n    })`\n  );\n\n  iconShape.attr(\n    'transform',\n    `translate(${0},${\n      topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n    })`\n  );\n\n  updateNodeBounds(node, outerShape);\n\n  node.intersect = function (point) {\n    log.info('iconSquare intersect', node, point);\n    if (!node.label) {\n      return intersect.rect(node, point);\n    }\n    const dx = node.x ?? 0;\n    const dy = node.y ?? 0;\n    const nodeHeight = node.height ?? 0;\n    let points = [];\n    if (topLabel) {\n      points = [\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n        { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n        { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n      ];\n    } else {\n      points = [\n        { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n        { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n        { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n        { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n        { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n        { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n        { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n      ];\n    }\n\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function inv_trapezoid<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingY = nodePadding;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = Math.max(bbox.width + (labelPaddingX ?? 0) * 2, node?.width ?? 0);\n  const h = Math.max(bbox.height + (labelPaddingY ?? 0) * 2, node?.height ?? 0);\n\n  const points = [\n    { x: 0, y: 0 },\n    { x: w, y: 0 },\n    { x: w + (3 * h) / 6, y: -h },\n    { x: (-3 * h) / 6, y: -h },\n  ];\n\n  let polygon: typeof shapeSvg | ReturnType<typeof insertPolygonShape>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const pathData = createPathFromPoints(points);\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 { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, RectOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Bounds, Point } from '../../../types.js';\n\nexport async function drawRect<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  options: RectOptions\n) {\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', handleUndefinedAttr(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', handleUndefinedAttr(rx))\n      .attr('ry', handleUndefinedAttr(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.calcIntersect = function (bounds: Bounds, point: Point) {\n    return intersect.rect(bounds, point);\n  };\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport { drawRect } from './drawRect.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function roundedRect<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\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 async function labelRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { shapeSvg, bbox, label } = 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  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n  );\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 { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_left<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingY = nodePadding;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const h = (node?.height ?? bbox.height) + labelPaddingY;\n  const w = (node?.width ?? bbox.width) + labelPaddingX;\n  const points = [\n    { x: 0, y: 0 },\n    { x: w + (3 * h) / 6, y: 0 },\n    { x: w, y: -h },\n    { x: -(3 * h) / 6, y: -h },\n  ];\n\n  let polygon: typeof shapeSvg | ReturnType<typeof insertPolygonShape>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const pathData = createPathFromPoints(points);\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, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_right<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingY = nodePadding;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const h = (node?.height ?? bbox.height) + labelPaddingY;\n  const w = (node?.width ?? bbox.width) + labelPaddingX;\n\n  const points = [\n    { x: (-3 * h) / 6, y: 0 },\n    { x: w, y: 0 },\n    { x: w + (3 * h) / 6, y: -h },\n    { x: 0, y: -h },\n  ];\n\n  let polygon: typeof shapeSvg | ReturnType<typeof insertPolygonShape>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const pathData = createPathFromPoints(points);\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 { log } from '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function lightningBolt<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.label = '';\n  node.labelStyle = labelStyles;\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId ?? node.id);\n  const { cssStyles } = node;\n  const width = Math.max(35, node?.width ?? 0);\n  const height = Math.max(35, node?.height ?? 0);\n  const gap = 7;\n\n  const points = [\n    { x: width, y: 0 },\n    { x: 0, y: height + gap / 2 },\n    { x: width - 2 * gap, y: height + gap / 2 },\n    { x: 0, y: 2 * height },\n    { x: width, y: height - gap / 2 },\n    { x: 2 * gap, y: height - gap / 2 },\n  ];\n\n  // @ts-expect-error shapeSvg d3 class is incorrect?\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const linePath = createPathFromPoints(points);\n  const lineNode = rc.path(linePath, options);\n\n  const lightningBolt = shapeSvg.insert(() => lineNode, ':first-child');\n  lightningBolt.attr('class', 'outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    lightningBolt.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    lightningBolt.selectAll('path').attr('style', nodeStyles);\n  }\n\n  lightningBolt.attr('transform', `translate(-${width / 2},${-height})`);\n\n  updateNodeBounds(node, lightningBolt);\n\n  node.intersect = function (point) {\n    log.info('lightningBolt intersect', node, point);\n    const pos = intersect.polygon(node, points, point);\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n  x: number,\n  y: number,\n  width: number,\n  height: number,\n  rx: number,\n  ry: number,\n  outerOffset: 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    `M${x},${y + ry + outerOffset}`,\n    `a${rx},${ry} 0,0,0 ${width},0`,\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  outerOffset: 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    `M${x},${y + ry + outerOffset}`,\n    `a${rx},${ry} 0,0,0 ${width},0`,\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};\n\nconst MIN_HEIGHT = 10;\nconst MIN_WIDTH = 10;\n\nexport async function linedCylinder<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 24 : nodePadding;\n\n  if (node.width || node.height) {\n    const originalWidth = node.width ?? 0;\n    node.width = (node.width ?? 0) - labelPaddingX;\n    if (node.width < MIN_WIDTH) {\n      node.width = MIN_WIDTH;\n    }\n\n    const rx = originalWidth / 2;\n\n    // based on this width, height is calculated\n    const ry = rx / (2.5 + originalWidth / 50);\n    node.height = (node.height ?? 0) - labelPaddingY - ry * 3;\n    if (node.height < MIN_HEIGHT) {\n      node.height = MIN_HEIGHT;\n    }\n  }\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n  const rx = w / 2;\n  const ry = rx / (2.5 + w / 50);\n  const h = (node?.height ? node?.height : bbox.height) + ry + labelPaddingY * 2;\n  const outerOffset = h * 0.1; // 10% of height\n\n  let cylinder: typeof shapeSvg | D3Selection<SVGPathElement>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry, outerOffset);\n    const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n    const options = userNodeOverrides(node, {});\n\n    const outerNode = rc.path(outerPathData, options);\n    const innerLine = rc.path(innerPathData, options);\n\n    const innerLineEl = shapeSvg.insert(() => innerLine, ':first-child');\n    innerLineEl.attr('class', 'line');\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, outerOffset);\n    cylinder = shapeSvg\n      .insert('path', ':first-child')\n      .attr('d', pathData)\n      .attr('class', 'basic label-container outer-path')\n      .attr('style', handleUndefinedAttr(cssStyles))\n      .attr('style', nodeStyles);\n  }\n\n  // find label and move it down\n  cylinder.attr('label-offset-y', ry);\n  cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n  updateNodeBounds(node, cylinder);\n\n  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n  );\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 {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function linedWaveEdgedRect<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  if (node.width || node.height) {\n    const originalWidth = node.width;\n    node.width = ((originalWidth ?? 0) * 10) / 11 - labelPaddingX * 2;\n    if (node.width < 10) {\n      node.width = 10;\n    }\n    node.height = (node?.height ?? 0) - labelPaddingY * 2;\n    if (node.height < 10) {\n      node.height = 10;\n    }\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0) * 2;\n  const h = (node?.height ? node?.height : bbox.height) + (labelPaddingY ?? 0) * 2;\n  const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8;\n  const finalH = h + waveAmplitude;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n    { x: -w / 2 - (w / 2) * 0.1, y: finalH / 2 },\n    ...generateFullSineWavePoints(\n      -w / 2 - (w / 2) * 0.1,\n      finalH / 2,\n      w / 2 + (w / 2) * 0.1,\n      finalH / 2,\n      waveAmplitude,\n      0.8\n    ),\n    { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 },\n    { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n    { x: -w / 2, y: -finalH / 2 },\n    { x: -w / 2, y: (finalH / 2) * 1.1 },\n    { x: -w / 2, y: -finalH / 2 },\n  ];\n\n  const poly = rc.polygon(\n    points.map((p) => [p.x, p.y]),\n    options\n  );\n\n  const waveEdgeRect = shapeSvg.insert(() => poly, ':first-child');\n\n  waveEdgeRect.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) + ((w / 2) * 0.1) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, waveEdgeRect);\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  getNodeClasses,\n  updateNodeBounds,\n  createPathFromPoints,\n  mergePaths,\n} from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  const rectOffset = node.look === 'neo' ? 10 : 5;\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    node.width = Math.max((node?.width ?? 0) - labelPaddingX * 2 - 2 * rectOffset, 10);\n    node.height = Math.max((node?.height ?? 0) - labelPaddingY * 2 - 2 * rectOffset, 10);\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + 2 * rectOffset;\n  const totalHeight =\n    (node?.height ? node?.height : bbox.height) + labelPaddingY * 2 + 2 * rectOffset;\n\n  const w = totalWidth - 2 * rectOffset;\n  const h = totalHeight - 2 * rectOffset;\n\n  const x = -w / 2;\n  const y = -h / 2;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  const outerPathPoints = [\n    { x: x - rectOffset, y: y + rectOffset },\n    { x: x - rectOffset, y: y + h + rectOffset },\n    { x: x + w - rectOffset, y: y + h + rectOffset },\n    { x: x + w - rectOffset, y: y + h },\n    { x: x + w, y: y + h },\n    { x: x + w, y: y + h - rectOffset },\n    { x: x + w + rectOffset, y: y + h - rectOffset },\n    { x: x + w + rectOffset, y: y - rectOffset },\n    { x: x + rectOffset, y: y - rectOffset },\n    { x: x + rectOffset, y: y },\n    { x, y },\n    { x, y: y + rectOffset },\n  ];\n\n  const innerPathPoints = [\n    { x, y: y + rectOffset },\n    { x: x + w - rectOffset, y: y + rectOffset },\n    { x: x + w - rectOffset, y: y + h },\n    { x: x + w, y: y + h },\n    { x: x + w, y },\n    { x, y },\n  ];\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const outerPath = createPathFromPoints(outerPathPoints);\n  let outerNode = rc.path(outerPath, options);\n  const innerPath = createPathFromPoints(innerPathPoints);\n  let innerNode = rc.path(innerPath, options);\n\n  if (node.look !== 'handDrawn') {\n    outerNode = mergePaths(outerNode);\n    innerNode = mergePaths(innerNode);\n  }\n\n  const multiRect = shapeSvg.insert('g', ':first-child');\n  multiRect.insert(() => outerNode);\n  multiRect.insert(() => innerNode);\n\n  multiRect.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    multiRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    multiRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, multiRect);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, outerPathPoints, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  createPathFromPoints,\n  generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiWaveEdgedRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  let adjustFinalHeight = true;\n\n  if (node.width || node.height) {\n    adjustFinalHeight = false;\n    node.width = (node?.width ?? 0) - labelPaddingX * 2;\n    node.height = (node?.height ?? 0) - labelPaddingY * 3;\n  }\n\n  const w = Math.max(bbox.width, node?.width ?? 0) + labelPaddingX * 2;\n  const h = Math.max(bbox.height, node?.height ?? 0) + labelPaddingY * 3;\n  const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8;\n  const finalH = h + (adjustFinalHeight ? waveAmplitude / 2 : -waveAmplitude / 2);\n  const x = -w / 2;\n  const y = -finalH / 2;\n  const rectOffset = 10;\n\n  const { cssStyles } = node;\n\n  const wavePoints = generateFullSineWavePoints(\n    x - rectOffset,\n    y + finalH + rectOffset,\n    x + w - rectOffset,\n    y + finalH + rectOffset,\n    waveAmplitude,\n    0.8\n  );\n\n  const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n\n  const outerPathPoints = [\n    { x: x - rectOffset, y: y + rectOffset },\n    { x: x - rectOffset, y: y + finalH + rectOffset },\n    ...wavePoints,\n    { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n    { x: x + w, y: lastWavePoint.y - rectOffset },\n    { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n    { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n    { x: x + w + rectOffset, y: y - rectOffset },\n    { x: x + rectOffset, y: y - rectOffset },\n    { x: x + rectOffset, y: y },\n    { x, y },\n    { x, y: y + rectOffset },\n  ];\n\n  const innerPathPoints = [\n    { x, y: y + rectOffset },\n    { x: x + w - rectOffset, y: y + rectOffset },\n    { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n    { x: x + w, y: lastWavePoint.y - rectOffset },\n    { x: x + w, y },\n    { x, y },\n  ];\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const outerPath = createPathFromPoints(outerPathPoints);\n  const outerNode = rc.path(outerPath, options);\n  const innerPath = createPathFromPoints(innerPathPoints);\n  const innerNode = rc.path(innerPath, options);\n\n  const shape = shapeSvg.insert(() => outerNode, ':first-child');\n  shape.insert(() => innerNode);\n\n  shape.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    shape.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    shape.selectAll('path').attr('style', nodeStyles);\n  }\n\n  shape.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n\n  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, shape);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, outerPathPoints, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\nimport { getConfig } from '../../../config.js';\nimport { getEffectiveHtmlLabels } from '../../../config.js';\n\nexport async function note<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables } }: ShapeRenderOptions\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const useHtmlLabels = node.useHtmlLabels || getEffectiveHtmlLabels(getConfig());\n  if (!useHtmlLabels) {\n    node.centerLabel = true;\n  }\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n  const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n  const x = -totalWidth / 2;\n  const y = -totalHeight / 2;\n  const { cssStyles } = node;\n\n  // add the rect\n  // @ts-ignore TODO: Fix rough typings\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {\n    fill: themeVariables.noteBkgColor,\n    stroke: themeVariables.noteBorderColor,\n  });\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n  const rect = shapeSvg.insert(() => noteShapeNode, ':first-child');\n  rect.attr('class', 'basic label-container outer-path');\n  label.attr('class', 'label noteLabel');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    rect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    rect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\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 '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\nimport type { Bounds, Point } from '../../../types.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 async function question<T extends SVGGraphicsElement>(parent: D3Selection<T>, 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 w = bbox.width + (node.padding ?? 0);\n  const h = bbox.height + (node.padding ?? 0);\n  const s = w + h;\n  const adjustment = 0.5;\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: typeof shapeSvg | ReturnType<typeof insertPolygonShape>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\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 + adjustment}, ${s / 2})`);\n\n    if (cssStyles) {\n      polygon.attr('style', cssStyles);\n    }\n  } else {\n    polygon = insertPolygonShape(shapeSvg, s, s, points);\n    polygon.attr('transform', `translate(${-s / 2 + adjustment}, ${s / 2})`);\n  }\n\n  if (nodeStyles) {\n    polygon.attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, polygon);\n  node.calcIntersect = function (bounds: Bounds, point: Point) {\n    const s = bounds.width;\n\n    // Define polygon points\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    // Calculate the intersection point\n    const res = intersect.polygon(bounds, points, point);\n\n    return { x: res.x - 0.5, y: res.y - 0.5 }; // Adjusted result\n  };\n\n  node.intersect = function (point) {\n    // @ts-ignore TODO fix this (KNSV)\n    return this.calcIntersect(node as Bounds, point);\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function rect_left_inv_arrow<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 21 : (nodePadding ?? 0);\n  const labelPaddingY = node.look === 'neo' ? 12 : (nodePadding ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node?.width ?? bbox.width) + (node.look === 'neo' ? labelPaddingX * 2 : labelPaddingX);\n  const h =\n    (node?.height ?? bbox.height) + (node.look === 'neo' ? labelPaddingY * 2 : labelPaddingY);\n\n  const x = -w / 2;\n  const y = -h / 2;\n  const notch = y / 2;\n\n  const points = [\n    { x: x + notch, y },\n    { x: x, y: 0 },\n    { x: x + notch, y: -y },\n    { x: -x, y: -y },\n    { x: -x, y },\n  ];\n\n  const { cssStyles } = node;\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const pathData = createPathFromPoints(points);\n  const roughNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg.insert(() => roughNode, ':first-child');\n\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectAll('path').attr('style', cssStyles);\n  }\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectAll('path').attr('style', nodeStyles);\n  }\n\n  polygon.attr('transform', `translate(${-notch / 2},0)`);\n\n  label.attr(\n    'transform',\n    `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\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 } from '../../types.js';\nimport { select } from 'd3';\nimport { updateNodeBounds } from './util.js';\nimport createLabel from '../createLabel.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { log } from '../../../logger.js';\nimport type { D3Selection } from '../../../types.js';\nimport { getEffectiveHtmlLabels } from '../../../config.js';\n\nexport async function rectWithTitle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\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 = await createLabel(label, title, node.labelStyle, true, true);\n  let bbox = { width: 0, height: 0 };\n  if (getEffectiveHtmlLabels(getConfig())) {\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 = await createLabel(\n    label,\n    Array.isArray(textRows) ? textRows.join('<br/>') : textRows,\n    node.labelStyle,\n    true,\n    true\n  );\n\n  //if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n  const div = descr.children[0];\n  const dv = select(descr);\n  bbox = div.getBoundingClientRect();\n  dv.attr('width', bbox.width);\n  dv.attr('height', bbox.height);\n  // }\n\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 type { Node, RectOptions, ShapeRenderOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function roundedRect<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables } }: ShapeRenderOptions\n) {\n  const radius = themeVariables?.radius ?? 5;\n\n  const options = {\n    rx: radius,\n    ry: radius,\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 { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\n/// Width of the frame on the left of the shape\nconst FRAME_WIDTH = 8;\n\nexport async function shadedProcess<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0);\n  const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const totalWidth =\n    (node?.width ?? bbox.width) +\n    paddingX * 2 +\n    (node.look === 'neo' ? FRAME_WIDTH : FRAME_WIDTH * 2);\n  const totalHeight = (node?.height ?? bbox.height) + paddingY * 2;\n  const w = totalWidth - FRAME_WIDTH;\n  const h = totalHeight;\n  const x = FRAME_WIDTH - totalWidth / 2;\n  const y = -totalHeight / 2;\n\n  const { cssStyles } = node;\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x, y },\n    { x: x + w, y },\n    { x: x + w, y: y + h },\n    { x: x - FRAME_WIDTH, y: y + h },\n    { x: x - FRAME_WIDTH, y: y },\n    { x, y },\n    { x, y: y + h },\n  ];\n\n  const roughNode = rc.polygon(\n    points.map((p) => [p.x, p.y]),\n    options\n  );\n\n  const rect = shapeSvg.insert(() => roughNode, ':first-child');\n\n  rect\n    .attr('class', 'basic label-container outer-path')\n    .attr('style', handleUndefinedAttr(cssStyles));\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    rect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    rect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  // The inner main rect is centered at FRAME_WIDTH/2, not at 0.\n  // Shift the label right by FRAME_WIDTH/2 so it's centered inside the main rect.\n  label.attr(\n    'transform',\n    `translate(${FRAME_WIDTH / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\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, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function slopedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    node.width = Math.max((node?.width ?? 0) - labelPaddingX * 2, 10);\n    node.height = Math.max((node?.height ?? 0) / 1.5 - labelPaddingY * 2, 10);\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n  const totalHeight = ((node?.height ? node?.height : bbox.height) + labelPaddingY * 2) * 1.5;\n\n  const w = totalWidth;\n  const h = totalHeight / 1.5;\n  const x = -w / 2;\n  const y = -h / 2;\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x, y },\n    { x, y: y + h },\n    { x: x + w, y: y + h },\n    { x: x + w, y: y - h / 2 },\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container  outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  polygon.attr('transform', `translate(0, ${h / 4})`);\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function squareRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding * 2;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  const options = {\n    rx: 0,\n    ry: 0,\n    classes: '',\n    labelPaddingX: node.labelPaddingX ?? labelPaddingX,\n    labelPaddingY: labelPaddingY,\n  } as RectOptions;\n  return drawRect(parent, node, options);\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  generateCirclePoints,\n  createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.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 async function stadium<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 20 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const h = bbox.height + (node.look === 'neo' ? labelPaddingY * 2 : labelPaddingY);\n  const w = bbox.width + h / 4 + (node.look === 'neo' ? labelPaddingX * 2 : labelPaddingX);\n\n  const radius = h / 2;\n  const { cssStyles } = node;\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2 + radius, y: -h / 2 },\n    { x: w / 2 - radius, y: -h / 2 },\n    ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n    { x: w / 2 - radius, y: h / 2 },\n    ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450),\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function state<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const options = {\n    rx: node.look === 'neo' ? 3 : 5,\n    ry: node.look === 'neo' ? 3 : 5,\n    classes: 'flowchart-node',\n  } as RectOptions;\n  return drawRect(parent, node, options);\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateEnd<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables } }: ShapeRenderOptions\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { cssStyles } = node;\n  const { lineColor, stateBorder, nodeBorder, nodeShadow } = themeVariables;\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    if ((node.width ?? 0) < 14) {\n      node.width = 14;\n    }\n\n    if ((node.height ?? 0) < 14) {\n      node.height = 14;\n    }\n  }\n\n  if (!node.width) {\n    node.width = 14;\n  }\n\n  if (!node.height) {\n    node.height = 14;\n  }\n\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId ?? node.id);\n\n  // @ts-ignore TODO: Fix rough typings\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const roughNode = rc.circle(0, 0, node.width, {\n    ...options,\n    stroke: lineColor,\n    strokeWidth: 2,\n  });\n  const innerFill = stateBorder ?? nodeBorder;\n  const innerNodeRadius = ((node.width ?? 0) * 5) / 14;\n  const roughInnerNode = rc.circle(0, 0, innerNodeRadius, {\n    ...options,\n    fill: innerFill,\n    stroke: innerFill,\n    strokeWidth: 2,\n    fillStyle: 'solid',\n  });\n  const circle = shapeSvg.insert(() => roughNode, ':first-child');\n  circle.insert(() => roughInnerNode);\n\n  if (node.look !== 'handDrawn') {\n    circle.attr('class', 'outer-path');\n  }\n\n  if (cssStyles) {\n    circle.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles) {\n    circle.selectAll('path').attr('style', nodeStyles);\n  }\n\n  if (node.width < 25 && nodeShadow && node.look !== 'handDrawn') {\n    const svgId = parent.node()?.ownerSVGElement?.id ?? '';\n    const filterId = svgId ? `${svgId}-drop-shadow-small` : 'drop-shadow-small';\n    circle.attr('style', `filter:url(#${filterId})`);\n  }\n\n  updateNodeBounds(node, circle);\n\n  node.intersect = function (point) {\n    return intersect.circle(node, (node.width ?? 0) / 2, point);\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateStart<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  { config: { themeVariables } }: ShapeRenderOptions\n) {\n  const { lineColor, nodeShadow } = themeVariables;\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    if ((node.width ?? 0) < 14) {\n      node.width = 14;\n    }\n\n    if ((node.height ?? 0) < 14) {\n      node.height = 14;\n    }\n  }\n\n  if (!node.width) {\n    node.width = 14;\n  }\n\n  if (!node.height) {\n    node.height = 14;\n  }\n\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId || node.id);\n\n  let circle: D3Selection<SVGCircleElement> | D3Selection<SVGGElement>;\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, node.width, solidStateFill(lineColor));\n    // @ts-ignore TODO: Fix typings\n    circle = shapeSvg.insert(() => roughNode);\n    // center the circle around its coordinate\n    circle\n      .attr('class', 'state-start')\n      .attr('r', (node.width ?? 7) / 2)\n      .attr('width', node.width ?? 14)\n      .attr('height', node.height ?? 14);\n  } else {\n    circle = shapeSvg.insert('circle', ':first-child');\n    // center the circle around its coordinate\n    circle\n      .attr('class', 'state-start')\n      .attr('r', (node.width ?? 7) / 2)\n      .attr('width', node.width ?? 14)\n      .attr('height', node.height ?? 14);\n  }\n\n  if (node.width < 25 && nodeShadow && node.look !== 'handDrawn') {\n    const svgId = parent.node()?.ownerSVGElement?.id ?? '';\n    const filterId = svgId ? `${svgId}-drop-shadow-small` : 'drop-shadow-small';\n    circle.attr('style', `filter:url(#${filterId})`);\n  }\n\n  updateNodeBounds(node, circle);\n\n  node.intersect = function (point) {\n    return intersect.circle(node, (node.width ?? 7) / 2, 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 '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.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\n// width of the frame on the left and right side of the shape\nconst FRAME_WIDTH = 8;\n\nexport async function subroutine<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node?.padding ?? 8;\n  const labelPaddingX = node.look === 'neo' ? 28 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalWidth = (node?.width ?? bbox.width) + 2 * FRAME_WIDTH + labelPaddingX;\n  const totalHeight = (node?.height ?? bbox.height) + labelPaddingY;\n\n  const w = totalWidth - 2 * FRAME_WIDTH;\n  const h = totalHeight;\n  const x = -totalWidth / 2;\n  const y = -totalHeight / 2;\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-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n\n    const roughNode = rc.rectangle(x, y, w + 16, h, options);\n    const l1 = rc.line(x + FRAME_WIDTH, y, x + FRAME_WIDTH, y + h, options);\n    const l2 = rc.line(x + FRAME_WIDTH + w, y, x + FRAME_WIDTH + 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', handleUndefinedAttr(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", "import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\n/// The width/height of the tag in comparison to the height of the node\nconst TAG_RATIO = 0.2;\n\nexport async function taggedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    node.height = Math.max((node?.height ?? 0) - labelPaddingY * 2, 10);\n    node.width = Math.max(\n      (node?.width ?? 0) - labelPaddingX * 2 - TAG_RATIO * (node.height + labelPaddingY * 2),\n      10\n    );\n  }\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalHeight = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2;\n  const tagWidth = TAG_RATIO * totalHeight;\n  const tagHeight = TAG_RATIO * totalHeight;\n  const totalWidth = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2 + tagWidth;\n\n  const w = totalWidth - tagWidth;\n  const h = totalHeight;\n  const x = -w / 2;\n  const y = -h / 2;\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  const rectPoints = [\n    { x: x - tagWidth / 2, y },\n    { x: x + w + tagWidth / 2, y },\n    { x: x + w + tagWidth / 2, y: y + h },\n    { x: x - tagWidth / 2, y: y + h },\n  ];\n\n  const tagPoints = [\n    { x: x + w - tagWidth / 2, y: y + h },\n    { x: x + w + tagWidth / 2, y: y + h },\n    { x: x + w + tagWidth / 2, y: y + h - tagHeight },\n  ];\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const rectPath = createPathFromPoints(rectPoints);\n  const rectNode = rc.path(rectPath, options);\n\n  const tagPath = createPathFromPoints(tagPoints);\n  const tagNode = rc.path(tagPath, { ...options, fillStyle: 'solid' });\n\n  const taggedRect = shapeSvg.insert(() => tagNode, ':first-child');\n  taggedRect.insert(() => rectNode, ':first-child');\n\n  taggedRect.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    taggedRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    taggedRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, taggedRect);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, rectPoints, point);\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  generateFullSineWavePoints,\n  createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function taggedWaveEdgedRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n  const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n  const waveAmplitude = h / 8;\n  const tagWidth = 0.2 * w;\n  const tagHeight = 0.2 * h;\n  const finalH = h + waveAmplitude;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2 - (w / 2) * 0.1, y: finalH / 2 },\n    ...generateFullSineWavePoints(\n      -w / 2 - (w / 2) * 0.1,\n      finalH / 2,\n      w / 2 + (w / 2) * 0.1,\n      finalH / 2,\n      waveAmplitude,\n      0.8\n    ),\n\n    { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 },\n    { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n  ];\n\n  const x = -w / 2 + (w / 2) * 0.1;\n  const y = -finalH / 2 - tagHeight * 0.4;\n\n  const tagPoints = [\n    { x: x + w - tagWidth, y: (y + h) * 1.3 },\n    { x: x + w, y: y + h - tagHeight },\n    { x: x + w, y: (y + h) * 0.9 },\n    ...generateFullSineWavePoints(\n      x + w,\n      (y + h) * 1.25,\n      x + w - tagWidth,\n      (y + h) * 1.3,\n      -h * 0.02,\n      0.5\n    ),\n  ];\n\n  const waveEdgeRectPath = createPathFromPoints(points);\n  const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n  const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n  const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n    ...options,\n    fillStyle: 'solid',\n  });\n\n  const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ':first-child');\n  waveEdgeRect.insert(() => waveEdgeRectNode, ':first-child');\n\n  waveEdgeRect.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, waveEdgeRect);\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function text<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalWidth = Math.max(bbox.width + (node.padding ?? 0), node?.width || 0);\n  const totalHeight = Math.max(bbox.height + (node.padding ?? 0), node?.height || 0);\n  const x = -totalWidth / 2;\n  const y = -totalHeight / 2;\n\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  rect\n    .attr('class', 'text')\n    .attr('style', nodeStyles)\n    .attr('rx', 0)\n    .attr('ry', 0)\n    .attr('x', x)\n    .attr('y', y)\n    .attr('width', totalWidth)\n    .attr('height', totalHeight);\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, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\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 `M${x},${y}\n    a${rx},${ry} 0,0,1 ${0},${-height}\n    l${width},${0}\n    a${rx},${ry} 0,0,1 ${0},${height}\n    M${width},${-height}\n    a${rx},${ry} 0,0,0 ${0},${height}\n    l${-width},${0}`;\n};\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}`,\n    `M${x + width},${y}`,\n    `a${rx},${ry} 0,0,0 ${0},${-height}`,\n    `l${-width},0`,\n    `a${rx},${ry} 0,0,0 ${0},${height}`,\n    `l${width},0`,\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 0,${height}`].join(' ');\n};\n\nconst MIN_HEIGHT = 5;\nconst MIN_WIDTH = 10;\n\nexport async function tiltedCylinder<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPadding = node.look === 'neo' ? 12 : nodePadding / 2;\n  if (node.width || node.height) {\n    const originalHeight = node.height ?? 0;\n    node.height = (node.height ?? 0) - labelPadding;\n    if (node.height < MIN_HEIGHT) {\n      node.height = MIN_HEIGHT;\n    }\n    const ry = originalHeight / 2;\n    // based on this height, width is calculated\n    const rx = ry / (2.5 + originalHeight / 50);\n\n    node.width = (node.width ?? 0) - labelPadding - rx * 3;\n    if (node.width < MIN_WIDTH) {\n      node.width = MIN_WIDTH;\n    }\n  }\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const h = (node.height ? node.height : bbox.height) + labelPadding;\n  const ry = h / 2;\n  const rx = ry / (2.5 + h / 50);\n  const w = (node.width ? node.width : bbox.width) + rx + labelPadding;\n  const { cssStyles } = node;\n\n  let cylinder: D3Selection<SVGGElement> | D3Selection<SVGPathElement>;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n    const innerPathData = createInnerCylinderPathD(0, 0, w, h, rx, ry);\n    const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n    const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: 'none' }));\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', handleUndefinedAttr(cssStyles))\n      .attr('style', nodeStyles);\n    cylinder.attr('class', 'basic label-container outer-path');\n\n    if (cssStyles) {\n      cylinder.selectAll('path').attr('style', cssStyles);\n    }\n\n    if (nodeStyles) {\n      cylinder.selectAll('path').attr('style', nodeStyles);\n    }\n  }\n\n  cylinder.attr('label-offset-x', rx);\n  cylinder.attr('transform', `translate(${-w / 2}, ${h / 2} )`);\n\n  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, cylinder);\n\n  node.intersect = function (point) {\n    const pos = intersect.rect(node, point);\n    const y = pos.y - (node.y ?? 0);\n\n    if (\n      ry != 0 &&\n      (Math.abs(y) < (node.height ?? 0) / 2 ||\n        (Math.abs(y) == (node.height ?? 0) / 2 &&\n          Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx))\n    ) {\n      let x = rx * rx * (1 - (y * y) / (ry * ry));\n      if (x != 0) {\n        x = Math.sqrt(Math.abs(x));\n      }\n      x = rx - x;\n      if (point.x - (node.x ?? 0) > 0) {\n        x = -x;\n      }\n\n      pos.x += x;\n    }\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function trapezoid<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingY = node.look === 'neo' ? nodePadding : nodePadding;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const h = (node?.height ?? bbox.height) + labelPaddingY;\n  const w = (node?.width ?? bbox.width) + labelPaddingX;\n\n  const points = [\n    { x: (-3 * h) / 6, y: 0 },\n    { x: w + (3 * h) / 6, y: 0 },\n    { x: w, y: -h },\n    { x: 0, y: -h },\n  ];\n\n  let polygon: typeof shapeSvg | ReturnType<typeof insertPolygonShape>;\n  const { cssStyles } = node;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const pathData = createPathFromPoints(points);\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, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function trapezoidalPentagon<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n  const minWidth = 15,\n    minHeight = 5;\n  if (node.width || node.height) {\n    node.height = (node.height ?? 0) - labelPaddingY * 2;\n    if (node.height < minHeight) {\n      node.height = minHeight;\n    }\n\n    node.width = (node.width ?? 0) - labelPaddingX * 2;\n    if (node.width < minWidth) {\n      node.width = minWidth;\n    }\n  }\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n  const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2;\n\n  const { cssStyles } = node;\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: (-w / 2) * 0.8, y: -h / 2 },\n    { x: (w / 2) * 0.8, y: -h / 2 },\n    { x: w / 2, y: (-h / 2) * 0.6 },\n    { x: w / 2, y: h / 2 },\n    { x: -w / 2, y: h / 2 },\n    { x: -w / 2, y: (-h / 2) * 0.6 },\n  ];\n\n  const pathData = createPathFromPoints(points);\n  const shapeNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n  polygon.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, polygon);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport type { D3Selection } from '../../../types.js';\n\nconst MIN_HEIGHT = 10;\nconst MIN_WIDTH = 10;\n\nexport async function triangle<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? nodePadding * 2 : nodePadding;\n  if (node.width || node.height) {\n    node.width = ((node?.width ?? 0) - labelPaddingX) / 2;\n    if (node.width < MIN_WIDTH) {\n      node.width = MIN_WIDTH;\n    }\n    node.height = node?.height ?? 0;\n    if (node.height < MIN_HEIGHT) {\n      node.height = MIN_HEIGHT;\n    }\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const useHtmlLabels = evaluate(getConfig().flowchart?.htmlLabels);\n  const w = (node?.width ? node?.width : bbox.width) + labelPaddingX;\n  const h = node?.height ? node?.height : w + bbox.height;\n  const tw = h;\n  const points = [\n    { x: 0, y: 0 },\n    { x: tw, y: 0 },\n    { x: tw / 2, y: -h },\n  ];\n\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n  const pathData = createPathFromPoints(points);\n  const roughNode = rc.path(pathData, options);\n\n  const polygon = shapeSvg\n    .insert(() => roughNode, ':first-child')\n    .attr('transform', `translate(${-h / 2}, ${h / 2})`)\n    .attr('class', 'outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    polygon.selectChildren('path').attr('style', nodeStyles);\n  }\n\n  node.width = w;\n  node.height = h;\n\n  updateNodeBounds(node, polygon);\n\n  label.attr(\n    'transform',\n    `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n  );\n\n  node.intersect = function (point) {\n    log.info('Triangle intersect', node, points, point);\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  generateFullSineWavePoints,\n  createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveEdgedRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 12 : nodePadding;\n\n  let adjustFinalHeight = true;\n  if (node.width || node.height) {\n    adjustFinalHeight = false;\n    node.width = (node?.width ?? 0) - labelPaddingX * 2;\n    if (node.width < 10) {\n      node.width = 10;\n    }\n    node.height = (node?.height ?? 0) - labelPaddingY * 2;\n    if (node.height < 10) {\n      node.height = 10;\n    }\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n  const w = (node?.width ? node?.width : bbox.width) + (labelPaddingX ?? 0) * 2;\n  const h = (node?.height ? node?.height : bbox.height) + (labelPaddingY ?? 0) * 2;\n  const waveAmplitude = node.look === 'neo' ? h / 4 : h / 8;\n  const finalH = h + (adjustFinalHeight ? waveAmplitude : -waveAmplitude);\n  const { cssStyles } = node;\n\n  // To maintain minimum width\n  const minWidth = 14;\n  const widthDif = minWidth - w;\n  const extraW = widthDif > 0 ? widthDif / 2 : 0;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2 - extraW, y: finalH / 2 },\n    ...generateFullSineWavePoints(\n      -w / 2 - extraW,\n      finalH / 2,\n      w / 2 + extraW,\n      finalH / 2,\n      waveAmplitude,\n      0.8\n    ),\n    { x: w / 2 + extraW, y: -finalH / 2 },\n    { x: -w / 2 - extraW, y: -finalH / 2 },\n  ];\n\n  const waveEdgeRectPath = createPathFromPoints(points);\n  const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n  const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ':first-child');\n\n  waveEdgeRect.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n  label.attr(\n    'transform',\n    `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, waveEdgeRect);\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import {\n  labelHelper,\n  updateNodeBounds,\n  getNodeClasses,\n  createPathFromPoints,\n  generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveRectangle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const nodePadding = node.padding ?? 0;\n  const labelPaddingX = node.look === 'neo' ? 16 : nodePadding;\n  const labelPaddingY = node.look === 'neo' ? 20 : nodePadding;\n\n  if (node.width || node.height) {\n    node.width = node?.width ?? 0;\n    if (node.width < 20) {\n      node.width = 20;\n    }\n\n    node.height = node?.height ?? 0;\n    if (node.height < 10) {\n      node.height = 10;\n    }\n\n    // Adjust for wave amplitude\n    const waveAmplitude = Math.min(node.height * 0.2, node.height / 4);\n    node.height = Math.ceil(node.height - labelPaddingY - waveAmplitude * (20 / 9));\n    node.width = node.width - labelPaddingX * 2;\n  }\n\n  const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n  const h = (node?.height ? node?.height : bbox.height) + labelPaddingY;\n\n  const waveAmplitude = h / 8;\n  const finalH = h + waveAmplitude * 2;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const points = [\n    { x: -w / 2, y: finalH / 2 },\n    ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n    { x: w / 2, y: -finalH / 2 },\n    ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1),\n  ];\n\n  const waveRectPath = createPathFromPoints(points);\n  const waveRectNode = rc.path(waveRectPath, options);\n\n  const waveRect = shapeSvg.insert(() => waveRectNode, ':first-child');\n\n  waveRect.attr('class', 'basic label-container');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    waveRect.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    waveRect.selectAll('path').attr('style', nodeStyles);\n  }\n\n  updateNodeBounds(node, waveRect);\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, points, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\n/// Width of the frame on the top and left of the shape\nconst rectOffset = 10;\n\nexport async function windowPane<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const paddingX = node.look === 'neo' ? 16 : (node.padding ?? 0);\n  const paddingY = node.look === 'neo' ? 12 : (node.padding ?? 0);\n\n  // If incoming height & width are present, subtract the padding from them\n  // as labelHelper does not take padding into account\n  // also check if the width or height is less than minimum default values (50),\n  // if so set it to min value\n  if (node.width || node.height) {\n    node.width = Math.max((node?.width ?? 0) - paddingX * 2 - rectOffset, 10);\n    node.height = Math.max((node?.height ?? 0) - paddingY * 2 - rectOffset, 10);\n  }\n\n  const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n  const totalWidth = (node?.width ? node?.width : bbox.width) + paddingX * 2 + rectOffset;\n  const totalHeight = (node?.height ? node?.height : bbox.height) + paddingY * 2 + rectOffset;\n\n  const w = totalWidth - rectOffset;\n  const h = totalHeight - rectOffset;\n  const x = -w / 2;\n  const y = -h / 2;\n  const { cssStyles } = node;\n\n  // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  const outerPathPoints = [\n    { x: x - rectOffset, y: y - rectOffset },\n    { x: x - rectOffset, y: y + h },\n    { x: x + w, y: y + h },\n    { x: x + w, y: y - rectOffset },\n  ];\n\n  const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n                M${x - rectOffset},${y} L${x + w},${y}\n                M${x},${y - rectOffset} L${x},${y + h}`;\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const no = rc.path(path, options);\n\n  const windowPane = shapeSvg.insert(() => no, ':first-child');\n  windowPane.attr('transform', `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n\n  windowPane.attr('class', 'basic label-container outer-path');\n\n  if (cssStyles && node.look !== 'handDrawn') {\n    windowPane.selectAll('path').attr('style', cssStyles);\n  }\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    windowPane.selectAll('path').attr('style', nodeStyles);\n  }\n\n  label.attr(\n    'transform',\n    `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n  );\n\n  updateNodeBounds(node, windowPane);\n\n  node.intersect = function (point) {\n    const pos = intersect.polygon(node, outerPathPoints, point);\n    return pos;\n  };\n\n  return shapeSvg;\n}\n", "import { updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { drawRect } from './drawRect.js';\nimport { getConfig } from '../../../config.js';\nimport type { EntityNode } from '../../../diagrams/er/erTypes.js';\nimport { createText } from '../../createText.js';\nimport { evaluate, parseGenericTypes } from '../../../diagrams/common/common.js';\nimport { select } from 'd3';\nimport { calculateTextWidth } from '../../../utils.js';\nimport type { MermaidConfig } from '../../../config.type.js';\nimport type { D3Selection } from '../../../types.js';\n\nconst COLOR_THEMES = new Set(['redux-color', 'redux-dark-color']);\nconst REDUX_THEMES = new Set(['redux', 'redux-dark', 'redux-color', 'redux-dark-color']);\n\nexport async function erBox<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  // Treat node as entityNode for certain entityNode checks\n  const entityNode = node as unknown as EntityNode;\n  if (entityNode.alias) {\n    node.label = entityNode.alias;\n  }\n  const { theme, themeVariables } = getConfig();\n  const { rowEven, rowOdd, nodeBorder, borderColorArray } = themeVariables;\n\n  // Background shapes are drawn to fill in the background color and cover up the ER diagram edge markers.\n  // Draw background shape once.\n  if (node.look === 'handDrawn') {\n    const { themeVariables } = getConfig();\n    const { background } = themeVariables;\n    const backgroundNode = {\n      ...node,\n      id: node.id + '-background',\n      domId: (node.domId || node.id) + '-background',\n      look: 'default',\n      cssStyles: ['stroke: none', `fill: ${background}`],\n    };\n    await erBox(parent, backgroundNode);\n  }\n\n  const config = getConfig();\n  node.useHtmlLabels = config.htmlLabels;\n  let PADDING = config.er?.diagramPadding ?? 10;\n  let TEXT_PADDING = config.er?.entityPadding ?? 6;\n\n  const { cssStyles } = node;\n  const { labelStyles, nodeStyles } = styles2String(node);\n\n  // Draw rect if no attributes are found\n  if (entityNode.attributes.length === 0 && node.label) {\n    const options = {\n      rx: 0,\n      ry: 0,\n      labelPaddingX: PADDING,\n      labelPaddingY: PADDING * 1.5,\n      classes: '',\n    };\n    // Set minimum width\n    if (\n      calculateTextWidth(node.label, config) + options.labelPaddingX * 2 <\n      config.er!.minEntityWidth!\n    ) {\n      node.width = config.er!.minEntityWidth;\n    }\n    const shapeSvg = await drawRect(parent, node, options);\n    if (theme != null && COLOR_THEMES.has(theme)) {\n      const colorIndex = entityNode.colorIndex ?? 0;\n      shapeSvg.attr('data-color-id', `color-${colorIndex % borderColorArray.length}`);\n    }\n\n    // drawRect doesn't center non-htmlLabels correctly as of now, so translate label\n    if (!evaluate(config.htmlLabels)) {\n      const textElement = shapeSvg.select('text');\n      const bbox = (textElement.node() as SVGTextElement)?.getBBox();\n      textElement.attr('transform', `translate(${-bbox.width / 2}, 0)`);\n    }\n    return shapeSvg;\n  }\n\n  if (!config.htmlLabels) {\n    PADDING *= 1.25;\n    TEXT_PADDING *= 1.25;\n  }\n\n  let cssClasses = getNodeClasses(node);\n  if (!cssClasses) {\n    cssClasses = 'node default';\n  }\n\n  const shapeSvg = parent\n    // @ts-ignore Ignore .insert on SVGAElement\n    .insert('g')\n    .attr('class', cssClasses)\n    .attr('id', node.domId || node.id);\n\n  const nameBBox = await addText(shapeSvg, node.label ?? '', config, 0, 0, ['name'], labelStyles);\n  nameBBox.height += TEXT_PADDING;\n  let yOffset = 0;\n  const yOffsets = [];\n  const rows = [];\n  let maxTypeWidth = 0;\n  let maxNameWidth = 0;\n  let maxKeysWidth = 0;\n  let maxCommentWidth = 0;\n  let keysPresent = true;\n  let commentPresent = true;\n  for (const attribute of entityNode.attributes) {\n    const typeBBox = await addText(\n      shapeSvg,\n      attribute.type,\n      config,\n      0,\n      yOffset,\n      ['attribute-type'],\n      labelStyles\n    );\n    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n    const nameBBox = await addText(\n      shapeSvg,\n      attribute.name,\n      config,\n      0,\n      yOffset,\n      ['attribute-name'],\n      labelStyles\n    );\n    maxNameWidth = Math.max(maxNameWidth, nameBBox.width + PADDING);\n    const keysBBox = await addText(\n      shapeSvg,\n      attribute.keys.join(),\n      config,\n      0,\n      yOffset,\n      ['attribute-keys'],\n      labelStyles\n    );\n    maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n    const commentBBox = await addText(\n      shapeSvg,\n      attribute.comment,\n      config,\n      0,\n      yOffset,\n      ['attribute-comment'],\n      labelStyles\n    );\n    maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n\n    const rowHeight =\n      Math.max(typeBBox.height, nameBBox.height, keysBBox.height, commentBBox.height) +\n      TEXT_PADDING;\n    rows.push({ yOffset, rowHeight });\n    yOffset += rowHeight;\n  }\n  let totalWidthSections = 4;\n\n  if (maxKeysWidth <= PADDING) {\n    keysPresent = false;\n    maxKeysWidth = 0;\n    totalWidthSections--;\n  }\n  if (maxCommentWidth <= PADDING) {\n    commentPresent = false;\n    maxCommentWidth = 0;\n    totalWidthSections--;\n  }\n\n  const shapeBBox = shapeSvg.node()!.getBBox();\n  // Add extra padding to attribute components to accommodate for difference in width\n  if (\n    nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) >\n    0\n  ) {\n    const difference =\n      nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n    maxTypeWidth += difference / totalWidthSections;\n    maxNameWidth += difference / totalWidthSections;\n    if (maxKeysWidth > 0) {\n      maxKeysWidth += difference / totalWidthSections;\n    }\n    if (maxCommentWidth > 0) {\n      maxCommentWidth += difference / totalWidthSections;\n    }\n  }\n\n  const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n\n  // @ts-ignore TODO: Fix rough typings\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  let totalShapeBBoxHeight = 0;\n  if (rows.length > 0) {\n    totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n  }\n  const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n  const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n  const x = -w / 2;\n  const y = -h / 2;\n\n  // Translate attribute text labels\n  shapeSvg.selectAll('g:not(:first-child)').each((_: any, i: number, nodes: any) => {\n    const text = select<any, unknown>(nodes[i]);\n    const transform = text.attr('transform');\n    let translateX = 0;\n    let translateY = 0;\n\n    if (transform) {\n      const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n      const translate = regex.exec(transform);\n      if (translate) {\n        translateX = parseFloat(translate[1]);\n        translateY = parseFloat(translate[2]);\n        if (text.attr('class').includes('attribute-name')) {\n          translateX += maxTypeWidth;\n        } else if (text.attr('class').includes('attribute-keys')) {\n          translateX += maxTypeWidth + maxNameWidth;\n        } else if (text.attr('class').includes('attribute-comment')) {\n          translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n        }\n      }\n    }\n\n    text.attr(\n      'transform',\n      `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n    );\n  });\n  // Center the name\n  shapeSvg\n    .select('.name')\n    .attr('transform', 'translate(' + -nameBBox.width / 2 + ', ' + (y + TEXT_PADDING / 2) + ')');\n\n  if (theme != null && COLOR_THEMES.has(theme)) {\n    const colorIndex = entityNode.colorIndex ?? 0;\n    shapeSvg.attr('data-color-id', `color-${colorIndex % borderColorArray.length}`);\n  }\n  // Draw shape\n  const roughRect = rc.rectangle(x, y, w, h, options);\n  const rect = shapeSvg\n    .insert(() => roughRect, ':first-child')\n    .attr('class', 'outer-path')\n    .attr('style', cssStyles!.join(''));\n\n  yOffsets.push(0);\n  // Draw row rects\n  for (const [i, row] of rows.entries()) {\n    const contentRowIndex = i + 1; // Adjusted index to skip the header (name) row\n    const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n    const roughRect = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n      ...options,\n      fill: isEven ? rowEven : rowOdd,\n      stroke: nodeBorder,\n    });\n    shapeSvg\n      .insert(() => roughRect, 'g.label')\n      .attr('style', cssStyles!.join(''))\n      .attr('class', `row-rect-${isEven ? 'even' : 'odd'}`);\n  }\n\n  // Draw divider lines\n  // Name line\n  const thickness = 0.0001;\n\n  // 1. Top horizontal line\n  let points = lineToPolygon(x, nameBBox.height + y, w + x, nameBBox.height + y, thickness);\n  let roughLine = rc.polygon(\n    points.map((p) => [p.x, p.y]),\n    options\n  );\n  shapeSvg.insert(() => roughLine).attr('class', 'divider');\n  // First line\n  points = lineToPolygon(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, thickness);\n  roughLine = rc.polygon(\n    points.map((p) => [p.x, p.y]),\n    options\n  );\n  shapeSvg.insert(() => roughLine).attr('class', 'divider');\n  // Second line\n  if (keysPresent) {\n    const xCoord = maxTypeWidth + maxNameWidth + x;\n    points = lineToPolygon(xCoord, nameBBox.height + y, xCoord, h + y, thickness);\n    roughLine = rc.polygon(\n      points.map((p) => [p.x, p.y]),\n      options\n    );\n    shapeSvg.insert(() => roughLine).attr('class', 'divider');\n  }\n  // Third line\n  if (commentPresent) {\n    const xCoord = maxTypeWidth + maxNameWidth + maxKeysWidth + x;\n    points = lineToPolygon(xCoord, nameBBox.height + y, xCoord, h + y, thickness);\n    roughLine = rc.polygon(\n      points.map((p) => [p.x, p.y]),\n      options\n    );\n    shapeSvg.insert(() => roughLine).attr('class', 'divider');\n  }\n\n  // Attribute divider lines\n  for (const yOffset of yOffsets) {\n    const yCoord = nameBBox.height + y + yOffset;\n    points = lineToPolygon(x, yCoord, w + x, yCoord, thickness);\n    roughLine = rc.polygon(\n      points.map((p) => [p.x, p.y]),\n      options\n    );\n    shapeSvg.insert(() => roughLine).attr('class', 'divider');\n  }\n\n  updateNodeBounds(node, rect);\n\n  if (nodeStyles && node.look !== 'handDrawn') {\n    if (theme != null && REDUX_THEMES.has(theme)) {\n      shapeSvg.selectAll('path').attr('style', nodeStyles);\n    } else {\n      const allStyle = nodeStyles.split(';');\n      const strokeStyles = allStyle\n        ?.filter((e) => {\n          return e.includes('stroke');\n        })\n        ?.map((s) => `${s}`)\n        .join('; ');\n      shapeSvg.selectAll('path').attr('style', strokeStyles ?? '');\n      shapeSvg.selectAll('.row-rect-even path').attr('style', nodeStyles);\n    }\n  }\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n  return shapeSvg;\n}\n\n// Helper function to add label text g with translate position and style\nasync function addText<T extends SVGGraphicsElement>(\n  shapeSvg: D3Selection<T>,\n  labelText: string,\n  config: MermaidConfig,\n  translateX = 0,\n  translateY = 0,\n  classes: string[] = [],\n  style = ''\n) {\n  const label = shapeSvg\n    .insert('g')\n    .attr('class', `label ${classes.join(' ')}`)\n    .attr('transform', `translate(${translateX}, ${translateY})`)\n    .attr('style', style);\n\n  // Return types need to be parsed\n  if (labelText !== parseGenericTypes(labelText)) {\n    labelText = parseGenericTypes(labelText);\n    // Work around\n    labelText = labelText.replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n  }\n\n  const text = label.node()!.appendChild(\n    await createText(\n      label,\n      labelText,\n      {\n        width: calculateTextWidth(labelText, config) + 100,\n        style,\n        useHtmlLabels: config.htmlLabels,\n      },\n      config\n    )\n  );\n  // Undo work around now that text passed through correctly\n  if (labelText.includes('&lt;') || labelText.includes('&gt;')) {\n    let child: Element | ChildNode = text.children[0];\n    child.textContent = child.textContent!.replaceAll('&lt;', '<').replaceAll('&gt;', '>');\n    while (child.childNodes[0]) {\n      child = child.childNodes[0];\n      // Replace its text content\n      child.textContent = child.textContent!.replaceAll('&lt;', '<').replaceAll('&gt;', '>');\n    }\n  }\n\n  let bbox = text.getBBox();\n  if (evaluate(config.htmlLabels)) {\n    const div = text.children[0] as HTMLDivElement;\n    div.style.textAlign = 'start';\n    const dv = select(text);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n\n  return bbox;\n}\n\nfunction lineToPolygon(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  thickness: number\n): { x: number; y: number }[] {\n  if (x1 === x2) {\n    // Vertical line\n    return [\n      { x: x1 - thickness / 2, y: y1 },\n      { x: x1 + thickness / 2, y: y1 },\n      { x: x2 + thickness / 2, y: y2 },\n      { x: x2 - thickness / 2, y: y2 },\n    ];\n  }\n  // Horizontal line (ER dividers are always axis-aligned)\n  return [\n    { x: x1, y: y1 - thickness / 2 },\n    { x: x1, y: y1 + thickness / 2 },\n    { x: x2, y: y2 + thickness / 2 },\n    { x: x2, y: y2 - thickness / 2 },\n  ];\n}\n", "import { updateNodeBounds } from './util.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport type { Node } from '../../types.js';\nimport type { ClassNode } from '../../../diagrams/class/classTypes.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport intersect from '../intersect/index.js';\nimport { textHelper } from '../../../diagrams/class/shapeUtil.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function classBox<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const config = getConfig();\n  const { themeVariables } = config;\n  const { useGradient } = themeVariables;\n  const PADDING = config.class!.padding ?? 12;\n  const GAP = PADDING;\n  const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n  // Treat node as classNode\n  const classNode = node as unknown as ClassNode;\n  classNode.annotations = classNode.annotations ?? [];\n  classNode.members = classNode.members ?? [];\n  classNode.methods = classNode.methods ?? [];\n\n  const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  node.cssStyles = classNode.styles || '';\n\n  const styles = classNode.styles?.join(';') || nodeStyles || '';\n\n  if (!node.cssStyles) {\n    node.cssStyles = styles.replaceAll('!important', '').split(';');\n  }\n\n  const renderExtraBox =\n    classNode.members.length === 0 &&\n    classNode.methods.length === 0 &&\n    !config.class?.hideEmptyMembersBox;\n\n  // Setup roughjs\n  // @ts-ignore TODO: Fix rough typings\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  const w = Math.max(node.width ?? 0, bbox.width);\n  let h = Math.max(node.height ?? 0, bbox.height);\n  const nodeHeightGreater = (node.height ?? 0) > bbox.height;\n  if (classNode.members.length === 0 && classNode.methods.length === 0) {\n    h += GAP;\n  } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n    h += GAP * 2;\n  }\n\n  const x = -w / 2;\n  const y = -h / 2;\n  let extraHeight = renderExtraBox\n    ? PADDING * 2\n    : classNode.members.length === 0 && classNode.methods.length === 0\n      ? -PADDING\n      : 0;\n  if (nodeHeightGreater) {\n    extraHeight = PADDING * 2;\n  }\n\n  // Create and center rectangle\n  const roughRect = rc.rectangle(\n    x - PADDING,\n    y -\n      PADDING -\n      (renderExtraBox\n        ? PADDING\n        : classNode.members.length === 0 && classNode.methods.length === 0\n          ? -PADDING / 2\n          : 0),\n    w + 2 * PADDING,\n    h + 2 * PADDING + extraHeight,\n    options\n  );\n\n  const rect = shapeSvg.insert(() => roughRect, ':first-child');\n  rect.attr('class', 'basic label-container outer-path');\n  const rectBBox = rect.node()!.getBBox();\n\n  // Rect is centered so now adjust labels.\n  const annotationGroupHeight =\n    (shapeSvg.select('.annotation-group').node() as SVGGraphicsElement).getBBox().height -\n      (renderExtraBox ? PADDING / 2 : 0) || 0;\n  const labelGroupHeight =\n    (shapeSvg.select('.label-group').node() as SVGGraphicsElement).getBBox().height -\n      (renderExtraBox ? PADDING / 2 : 0) || 0;\n  const membersGroupHeight =\n    (shapeSvg.select('.members-group').node() as SVGGraphicsElement).getBBox().height -\n      (renderExtraBox ? PADDING / 2 : 0) || 0;\n\n  // Y value in the middle of the first line and remaining space.\n  const methodsAreaPlacement =\n    (annotationGroupHeight +\n      labelGroupHeight +\n      y +\n      PADDING -\n      (y -\n        PADDING -\n        (renderExtraBox\n          ? PADDING\n          : classNode.members.length === 0 && classNode.methods.length === 0\n            ? -PADDING / 2\n            : 0))) /\n    2;\n  // Rect is centered so now adjust labels.\n  // TODO: Fix types\n  shapeSvg.selectAll('.text').each((_: any, i: number, nodes: any) => {\n    const text = select<any, unknown>(nodes[i]);\n    // Get the current transform attribute\n    const transform = text.attr('transform');\n    // Initialize variables for the translation values\n    let translateY = 0;\n    // Check if the transform attribute exists\n    if (transform) {\n      const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n      const translate = regex.exec(transform);\n      if (translate) {\n        translateY = parseFloat(translate[2]);\n      }\n    }\n    // Add to the y value\n    let newTranslateY =\n      translateY +\n      y +\n      PADDING -\n      (renderExtraBox\n        ? PADDING\n        : classNode.members.length === 0 && classNode.methods.length === 0\n          ? -PADDING / 2\n          : 0);\n    if (text.attr('class').includes('methods-group')) {\n      const membersGroupHeightForMethods = Math.max(membersGroupHeight, GAP / 2);\n      if (nodeHeightGreater) {\n        newTranslateY =\n          Math.max(\n            methodsAreaPlacement,\n            annotationGroupHeight +\n              labelGroupHeight +\n              membersGroupHeightForMethods +\n              y +\n              GAP * 2 +\n              PADDING\n          ) +\n          GAP * 2;\n      } else {\n        newTranslateY =\n          annotationGroupHeight +\n          labelGroupHeight +\n          membersGroupHeightForMethods +\n          y +\n          GAP * 4 +\n          PADDING;\n      }\n    }\n    if (\n      classNode.members.length === 0 &&\n      classNode.methods.length === 0 &&\n      config.class?.hideEmptyMembersBox\n    ) {\n      if (classNode.annotations.length > 0) {\n        newTranslateY = translateY - GAP;\n      } else {\n        newTranslateY = translateY;\n      }\n    }\n    if (!useHtmlLabels) {\n      // Fix so non html labels are better centered.\n      // BBox of text seems to be slightly different when calculated so we offset\n      newTranslateY -= 4;\n    }\n    let newTranslateX = x;\n    if (\n      text.attr('class').includes('label-group') ||\n      text.attr('class').includes('annotation-group')\n    ) {\n      newTranslateX = -text.node()?.getBBox().width / 2 || 0;\n      shapeSvg.selectAll('text').each(function (_: any, i: number, nodes: any) {\n        if (window.getComputedStyle(nodes[i]).textAnchor === 'middle') {\n          newTranslateX = 0;\n        }\n      });\n    }\n    // Set the updated transform attribute\n    text.attr('transform', `translate(${newTranslateX}, ${newTranslateY})`);\n  });\n\n  // Render divider lines.\n  // Line y-values are offset by 0.001 so gradient stroke can apply.\n  // If y-values are the same then the height of the bounding box is zero and it doesn't work.\n  // First line (under label)\n  if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n    const firstLineY = annotationGroupHeight + labelGroupHeight + y + PADDING;\n    const roughLine = rc.line(\n      rectBBox.x,\n      firstLineY,\n      rectBBox.x + rectBBox.width,\n      firstLineY + 0.001,\n      options\n    );\n    const line = shapeSvg.insert(() => roughLine);\n    line\n      .attr('class', `divider${node.look === 'neo' && !useGradient ? ' neo-line' : ''}`)\n      .attr('style', styles);\n  }\n\n  // Second line (under members)\n  if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n    const secondLineY =\n      annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING;\n    const roughLine = rc.line(\n      rectBBox.x,\n      nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY,\n      rectBBox.x + rectBBox.width,\n      (nodeHeightGreater ? Math.max(methodsAreaPlacement, secondLineY) : secondLineY) + 0.001,\n      options\n    );\n    const line = shapeSvg.insert(() => roughLine);\n    line\n      .attr('class', `divider${node.look === 'neo' && !useGradient ? ' neo-line' : ''}`)\n      .attr('style', styles);\n  }\n\n  /// Apply styles ///\n  if (classNode.look !== 'handDrawn') {\n    shapeSvg.selectAll('path').attr('style', styles);\n  }\n  // Apply other styles like stroke-width and stroke-dasharray to border (not background of shape)\n  rect.select(':nth-child(2)').attr('style', styles);\n  // Divider lines\n  shapeSvg.selectAll('.divider').select('path').attr('style', styles);\n  // Text elements\n  if (node.labelStyle) {\n    shapeSvg.selectAll('span').attr('style', node.labelStyle);\n  } else {\n    shapeSvg.selectAll('span').attr('style', styles);\n  }\n  // SVG text uses fill not color\n  if (!useHtmlLabels) {\n    // We just want to apply color to the text\n    const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n    const match = colorRegex.exec(styles);\n    if (match) {\n      const colorStyle = match[0].replace('color', 'fill');\n      shapeSvg.selectAll('tspan').attr('style', colorStyle);\n    } else if (labelStyles) {\n      const match = colorRegex.exec(labelStyles);\n      if (match) {\n        const colorStyle = match[0].replace('color', 'fill');\n        shapeSvg.selectAll('tspan').attr('style', colorStyle);\n      }\n    }\n  }\n\n  updateNodeBounds(node, rect);\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n}\n", "import { select } from 'd3';\nimport { getConfig } from '../../config.js';\nimport { getNodeClasses } from '../../rendering-util/rendering-elements/shapes/util.js';\nimport { calculateTextWidth, decodeEntities } from '../../utils.js';\nimport type { ClassMember, ClassNode } from './classTypes.js';\nimport { sanitizeText } from '../../diagram-api/diagramAPI.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { evaluate, hasKatex } from '../common/common.js';\nimport type { Node } from '../../rendering-util/types.js';\nimport type { MermaidConfig } from '../../config.type.js';\nimport type { D3Selection } from '../../types.js';\n\n// Creates the shapeSvg and inserts text\nexport async function textHelper<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: any,\n  config: MermaidConfig,\n  useHtmlLabels: boolean,\n  GAP = config.class!.padding ?? 12\n) {\n  const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n  const shapeSvg = parent\n    // @ts-ignore: Ignore error for using .insert on SVGAElement\n    .insert('g')\n    .attr('class', getNodeClasses(node))\n    .attr('id', node.domId || node.id);\n\n  let annotationGroup = null;\n  let labelGroup = null;\n  let membersGroup = null;\n  let methodsGroup = null;\n\n  let annotationGroupHeight = 0;\n  let labelGroupHeight = 0;\n  let membersGroupHeight = 0;\n\n  annotationGroup = shapeSvg.insert('g').attr('class', 'annotation-group text');\n  if (node.annotations.length > 0) {\n    const annotation = node.annotations[0];\n    await addText(annotationGroup, { text: `\u00AB${annotation}\u00BB` } as unknown as ClassMember, 0);\n\n    const annotationGroupBBox = annotationGroup.node()!.getBBox();\n    annotationGroupHeight = annotationGroupBBox.height;\n  }\n\n  labelGroup = shapeSvg.insert('g').attr('class', 'label-group text');\n  await addText(labelGroup, node, 0, ['font-weight: bolder']);\n  const labelGroupBBox = labelGroup.node()!.getBBox();\n  labelGroupHeight = labelGroupBBox.height;\n\n  membersGroup = shapeSvg.insert('g').attr('class', 'members-group text');\n  let yOffset = 0;\n  for (const member of node.members) {\n    const height = await addText(membersGroup, member, yOffset, [member.parseClassifier()]);\n    yOffset += height + TEXT_PADDING;\n  }\n  membersGroupHeight = membersGroup.node()!.getBBox().height;\n  if (membersGroupHeight <= 0) {\n    membersGroupHeight = GAP / 2;\n  }\n\n  methodsGroup = shapeSvg.insert('g').attr('class', 'methods-group text');\n  let methodsYOffset = 0;\n  for (const method of node.methods) {\n    const height = await addText(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n    methodsYOffset += height + TEXT_PADDING;\n  }\n\n  let bbox = shapeSvg.node()!.getBBox();\n\n  // Center annotation\n  if (annotationGroup !== null) {\n    const annotationGroupBBox = annotationGroup.node()!.getBBox();\n    annotationGroup.attr('transform', `translate(${-annotationGroupBBox.width / 2})`);\n  }\n\n  // Adjust label\n  labelGroup.attr('transform', `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n\n  bbox = shapeSvg.node()!.getBBox();\n\n  membersGroup.attr(\n    'transform',\n    `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n  );\n  bbox = shapeSvg.node()!.getBBox();\n  methodsGroup.attr(\n    'transform',\n    `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n  );\n\n  bbox = shapeSvg.node()!.getBBox();\n\n  return { shapeSvg, bbox };\n}\n\n// Modified version of labelHelper() to help create and place text for classes\nasync function addText<T extends SVGGraphicsElement>(\n  parentGroup: D3Selection<T>,\n  node: Node | ClassNode | ClassMember,\n  yOffset: number,\n  styles: string[] = []\n) {\n  const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', styles.join('; '));\n  const config = getConfig();\n  let useHtmlLabels =\n    'useHtmlLabels' in node ? node.useHtmlLabels : (evaluate(config.htmlLabels) ?? true);\n\n  let textContent = '';\n  // Support regular node type (.label) and classNodes (.text)\n  if ('text' in node) {\n    textContent = node.text;\n  } else {\n    textContent = node.label!;\n  }\n\n  // createText() will cause unwanted behavior because of classDiagram syntax so workarounds are needed\n\n  if (!useHtmlLabels && textContent.startsWith('\\\\')) {\n    textContent = textContent.substring(1);\n  }\n\n  if (hasKatex(textContent)) {\n    useHtmlLabels = true;\n  }\n\n  const text = await createText(\n    textEl,\n    sanitizeText(decodeEntities(textContent)),\n    {\n      width: calculateTextWidth(textContent, config) + 50, // Add room for error when splitting text into multiple lines\n      classes: 'markdown-node-label',\n      useHtmlLabels,\n    },\n    config\n  );\n  let bbox;\n  let numberOfLines = 1;\n\n  if (!useHtmlLabels) {\n    // Undo font-weight normal\n    if (styles.includes('font-weight: bolder')) {\n      select(text).selectAll('tspan').attr('font-weight', '');\n    }\n\n    numberOfLines = text.children.length;\n\n    const textChild = text.children[0];\n    if (text.textContent === '' || text.textContent!.includes('&gt')) {\n      textChild.textContent =\n        textContent[0] +\n        textContent.substring(1).replaceAll('&gt;', '>').replaceAll('&lt;', '<').trim();\n\n      // Text was improperly removed due to spaces (preserve one space if present)\n      const preserveSpace = textContent[1] === ' ';\n      if (preserveSpace) {\n        textChild.textContent = textChild.textContent[0] + ' ' + textChild.textContent.substring(1);\n      }\n    }\n\n    // To support empty boxes\n    if (textChild.textContent === 'undefined') {\n      textChild.textContent = '';\n    }\n\n    // Get the bounding box after the text update\n    bbox = text.getBBox();\n  } else {\n    const div = text.children[0];\n    const dv = select(text);\n\n    numberOfLines = div.innerHTML.split('<br>').length;\n    // Katex math support\n    if (div.innerHTML.includes('</math>')) {\n      numberOfLines += div.innerHTML.split('<mrow>').length - 1;\n    }\n\n    // Support images\n    const images = div.getElementsByTagName('img');\n    if (images) {\n      const noImgText = textContent.replace(/<img[^>]*>/g, '').trim() === '';\n      await Promise.all(\n        [...images].map(\n          (img) =>\n            new Promise((res) => {\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 =\n                    config.fontSize?.toString() ?? 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 text and offset by yOffset\n  textEl.attr('transform', 'translate(0,' + (-bbox.height / (2 * numberOfLines) + yOffset) + ')');\n  return bbox.height;\n}\n", "import { getNodeClasses, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { calculateTextWidth, decodeEntities } from '../../../utils.js';\nimport { getConfig, sanitizeText } from '../../../diagram-api/diagramAPI.js';\nimport { createText } from '../../createText.js';\nimport { select } from 'd3';\nimport type { Requirement, Element } from '../../../diagrams/requirement/types.js';\n\nexport async function requirementBox<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const requirementNode = node as unknown as Requirement;\n  const elementNode = node as unknown as Element;\n  const padding = 20;\n  const gap = 20;\n  const isRequirementNode = 'verifyMethod' in node;\n  const classes = getNodeClasses(node);\n  const { themeVariables } = getConfig();\n  const { borderColorArray, requirementEdgeLabelBackground } = themeVariables;\n\n  // Add outer g element\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', classes)\n    .attr('id', node.domId ?? node.id);\n\n  let typeHeight;\n  if (isRequirementNode) {\n    typeHeight = await addText(\n      shapeSvg,\n      `&lt;&lt;${requirementNode.type}&gt;&gt;`,\n      0,\n      node.labelStyle\n    );\n  } else {\n    typeHeight = await addText(shapeSvg, '&lt;&lt;Element&gt;&gt;', 0, node.labelStyle);\n  }\n\n  let accumulativeHeight = typeHeight;\n  const nameHeight = await addText(\n    shapeSvg,\n    requirementNode.name,\n    accumulativeHeight,\n    node.labelStyle + '; font-weight: bold;'\n  );\n  accumulativeHeight += nameHeight + gap;\n\n  // Requirement\n  if (isRequirementNode) {\n    const idHeight = await addText(\n      shapeSvg,\n      `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n\n    accumulativeHeight += idHeight;\n    const textHeight = await addText(\n      shapeSvg,\n      `${requirementNode.text ? `Text: ${requirementNode.text}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n    accumulativeHeight += textHeight;\n    const riskHeight = await addText(\n      shapeSvg,\n      `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n    accumulativeHeight += riskHeight;\n    await addText(\n      shapeSvg,\n      `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n  } else {\n    // Element\n    const typeHeight = await addText(\n      shapeSvg,\n      `${elementNode.type ? `Type: ${elementNode.type}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n    accumulativeHeight += typeHeight;\n    await addText(\n      shapeSvg,\n      `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : ''}`,\n      accumulativeHeight,\n      node.labelStyle\n    );\n  }\n\n  const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n  const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n  const x = -totalWidth / 2;\n  const y = -totalHeight / 2;\n\n  // Setup roughjs\n  // @ts-ignore TODO: Fix rough typings\n  const rc = rough.svg(shapeSvg);\n  const options = userNodeOverrides(node, {});\n\n  if (node.look !== 'handDrawn') {\n    options.roughness = 0;\n    options.fillStyle = 'solid';\n  }\n\n  // Create and center rectangle\n  const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n  const rect = shapeSvg.insert(() => roughRect, ':first-child');\n  rect.attr('class', 'basic label-container outer-path').attr('style', nodeStyles);\n\n  if (borderColorArray?.length) {\n    const colorIndex = node.colorIndex ?? 0;\n    shapeSvg.attr('data-color-id', `color-${colorIndex % borderColorArray.length}`);\n  }\n\n  // Re-translate labels now that rect is centered\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  shapeSvg.selectAll('.label').each((_: any, i: number, nodes: any) => {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const text = select<any, unknown>(nodes[i]);\n\n    const transform = text.attr('transform');\n    let translateX = 0;\n    let translateY = 0;\n    if (transform) {\n      const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n      const translate = regex.exec(transform);\n      if (translate) {\n        translateX = parseFloat(translate[1]);\n        translateY = parseFloat(translate[2]);\n      }\n    }\n\n    const newTranslateY = translateY - totalHeight / 2;\n    let newTranslateX = x + padding / 2;\n\n    // Keep type and name labels centered.\n    if (i === 0 || i === 1) {\n      newTranslateX = translateX;\n    }\n    // Set the updated transform attribute\n    text.attr('transform', `translate(${newTranslateX}, ${newTranslateY + padding})`);\n  });\n\n  // Insert divider line if there is body text\n  if (accumulativeHeight > typeHeight + nameHeight + gap) {\n    const lineY = y + typeHeight + nameHeight + gap;\n    let roughLine: SVGGElement;\n    if (node.look === 'neo') {\n      const thickness = 0.001;\n      const polygonPoints: [number, number][] = [\n        [x, lineY],\n        [x + totalWidth, lineY],\n        [x + totalWidth, lineY + thickness],\n        [x, lineY + thickness],\n      ];\n      roughLine = rc.polygon(polygonPoints, options);\n    } else {\n      roughLine = rc.line(x, lineY, x + totalWidth, lineY, options);\n    }\n    const dividerLine = shapeSvg.insert(() => roughLine);\n    dividerLine.attr('class', 'divider');\n  }\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  if (\n    nodeStyles &&\n    node.look !== 'handDrawn' &&\n    (requirementEdgeLabelBackground || borderColorArray?.length)\n  ) {\n    shapeSvg.selectAll('path').attr('style', nodeStyles);\n  }\n\n  return shapeSvg;\n}\n\nasync function addText<T extends SVGGraphicsElement>(\n  parentGroup: D3Selection<T>,\n  inputText: string,\n  yOffset: number,\n  style = ''\n) {\n  if (inputText === '') {\n    return 0;\n  }\n  const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', style);\n  const config = getConfig();\n  const useHtmlLabels = config.htmlLabels ?? true;\n\n  const text = await createText(\n    textEl,\n    sanitizeText(decodeEntities(inputText)),\n    {\n      width: calculateTextWidth(inputText, config) + 50, // Add room for error when splitting text into multiple lines\n      classes: 'markdown-node-label',\n      useHtmlLabels,\n      style,\n    },\n    config\n  );\n  let bbox;\n\n  if (!useHtmlLabels) {\n    const textChild = text.children[0];\n    for (const child of textChild.children) {\n      if (style) {\n        child.setAttribute('style', style);\n      }\n    }\n    // Get the bounding box after the style update\n    bbox = text.getBBox();\n    // Add extra height so it is similar to the html labels\n    bbox.height += 6;\n  } else {\n    const div = text.children[0];\n    const dv = select(text);\n\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n\n  // Center text and offset by yOffset\n  textEl.attr('transform', `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n  return bbox.height;\n}\n", "import { labelHelper, insertLabel, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, KanbanNode, ShapeRenderOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nconst colorFromPriority = (priority: NonNullable<KanbanNode['priority']>) => {\n  switch (priority) {\n    case 'Very High':\n      return 'red';\n    case 'High':\n      return 'orange';\n    case 'Medium':\n      return null; // no stroke\n    case 'Low':\n      return 'blue';\n    case 'Very Low':\n      return 'lightblue';\n  }\n};\nexport async function kanbanItem<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  // Omit the 'shape' prop since otherwise, it causes a TypeScript circular dependency error\n  kanbanNode: Omit<Node, 'shape'> | Omit<KanbanNode, 'level' | 'shape'>,\n  { config }: ShapeRenderOptions\n) {\n  const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n  kanbanNode.labelStyle = labelStyles || '';\n\n  const labelPaddingX = 10;\n  const orgWidth = kanbanNode.width;\n  kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n\n  const {\n    shapeSvg,\n    bbox,\n    label: labelElTitle,\n  } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n  const padding = kanbanNode.padding || 10;\n\n  let ticketUrl = '';\n  let link;\n\n  if ('ticket' in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n    ticketUrl = config?.kanban?.ticketBaseUrl.replace('#TICKET#', kanbanNode.ticket);\n    link = shapeSvg\n      .insert<SVGAElement>('svg:a', ':first-child')\n      .attr('class', 'kanban-ticket-link')\n      .attr('xlink:href', ticketUrl)\n      .attr('target', '_blank');\n  }\n\n  const options = {\n    useHtmlLabels: kanbanNode.useHtmlLabels,\n    labelStyle: kanbanNode.labelStyle || '',\n    width: kanbanNode.width,\n    img: kanbanNode.img,\n    padding: kanbanNode.padding || 8,\n    centerLabel: false,\n  };\n  let labelEl, bbox2;\n  if (link) {\n    ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n      link,\n      ('ticket' in kanbanNode && kanbanNode.ticket) || '',\n      options\n    ));\n  } else {\n    ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n      shapeSvg,\n      ('ticket' in kanbanNode && kanbanNode.ticket) || '',\n      options\n    ));\n  }\n  const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n    shapeSvg,\n    ('assigned' in kanbanNode && kanbanNode.assigned) || '',\n    options\n  );\n  kanbanNode.width = orgWidth;\n  const labelPaddingY = 10;\n  const totalWidth = kanbanNode?.width || 0;\n  const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n  const totalHeight =\n    Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n  const x = -totalWidth / 2;\n  const y = -totalHeight / 2;\n  labelElTitle.attr(\n    'transform',\n    'translate(' + (padding - totalWidth / 2) + ', ' + (-heightAdj - bbox.height / 2) + ')'\n  );\n  labelEl.attr(\n    'transform',\n    'translate(' + (padding - totalWidth / 2) + ', ' + (-heightAdj + bbox.height / 2) + ')'\n  );\n  labelElAssigned.attr(\n    'transform',\n    'translate(' +\n      (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) +\n      ', ' +\n      (-heightAdj + bbox.height / 2) +\n      ')'\n  );\n\n  let rect;\n\n  const { rx, ry } = kanbanNode;\n  const { cssStyles } = kanbanNode;\n\n  if (kanbanNode.look === 'handDrawn') {\n    // @ts-ignore TODO: Fix rough typings\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(kanbanNode, {});\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 ? cssStyles : null);\n  } else {\n    rect = shapeSvg.insert('rect', ':first-child');\n\n    rect\n      .attr('class', 'basic label-container __APA__')\n      .attr('style', nodeStyles)\n      .attr('rx', rx ?? 5)\n      .attr('ry', ry ?? 5)\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', totalWidth)\n      .attr('height', totalHeight);\n\n    const priority = 'priority' in kanbanNode && kanbanNode.priority;\n    if (priority) {\n      const line = shapeSvg.append('line');\n      const lineX = x + 2;\n\n      const y1 = y + Math.floor((rx ?? 0) / 2);\n      const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n      line\n        .attr('x1', lineX)\n        .attr('y1', y1)\n        .attr('x2', lineX)\n        .attr('y2', y2)\n\n        .attr('stroke-width', '4')\n        .attr('stroke', colorFromPriority(priority));\n    }\n  }\n\n  updateNodeBounds(kanbanNode, rect);\n  kanbanNode.height = totalHeight;\n\n  kanbanNode.intersect = function (point) {\n    return intersect.rect(kanbanNode, point);\n  };\n\n  return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Bounds, Point } from '../../../types.js';\n\nexport async function bang<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n  const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n    parent,\n    node,\n    getNodeClasses(node)\n  );\n\n  const w = bbox.width + 10 * halfPadding;\n  const h = bbox.height + 8 * halfPadding;\n  const r = 0.15 * w;\n  const { cssStyles } = node;\n\n  const minWidth = bbox.width + 20;\n  const minHeight = bbox.height + 20;\n  const effectiveWidth = Math.max(w, minWidth);\n  const effectiveHeight = Math.max(h, minHeight);\n\n  label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n\n  let bangElem;\n  const path = `M0 0 \n    a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n    a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n    a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n    a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n    a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n    a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n    a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n    a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n    a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n  H0 V0 Z`;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const roughNode = rc.path(path, options);\n    bangElem = shapeSvg.insert(() => roughNode, ':first-child');\n    bangElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n  } else {\n    bangElem = shapeSvg\n      .insert('path', ':first-child')\n      .attr('class', 'basic label-container')\n      .attr('style', nodeStyles)\n      .attr('d', path);\n  }\n\n  // Translate the path (center the shape)\n  bangElem.attr('transform', `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n\n  updateNodeBounds(node, bangElem);\n  node.calcIntersect = function (bounds: Bounds, point: Point) {\n    return intersect.rect(bounds, point);\n  };\n  node.intersect = function (point) {\n    log.info('Bang intersect', node, point);\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Bounds, D3Selection, Point } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Node } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function cloud<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n    parent,\n    node,\n    getNodeClasses(node)\n  );\n\n  const w = bbox.width + 2 * halfPadding;\n  const h = bbox.height + 2 * halfPadding;\n\n  // Cloud radii\n  const r1 = 0.15 * w;\n  const r2 = 0.25 * w;\n  const r3 = 0.35 * w;\n  const r4 = 0.2 * w;\n\n  const { cssStyles } = node;\n  let cloudElem;\n\n  // Cloud path\n  const path = `M0 0 \n    a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n    a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n    a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n    a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n    a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n    a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n    a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n    a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n    a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n    a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n  H0 V0 Z`;\n\n  if (node.look === 'handDrawn') {\n    // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n    const rc = rough.svg(shapeSvg);\n    const options = userNodeOverrides(node, {});\n    const roughNode = rc.path(path, options);\n    cloudElem = shapeSvg.insert(() => roughNode, ':first-child');\n    cloudElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n  } else {\n    cloudElem = shapeSvg\n      .insert('path', ':first-child')\n      .attr('class', 'basic label-container')\n      .attr('style', nodeStyles)\n      .attr('d', path);\n  }\n\n  label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n\n  // Center the shape\n  cloudElem.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n  updateNodeBounds(node, cloudElem);\n\n  node.calcIntersect = function (bounds: Bounds, point: Point) {\n    return intersect.rect(bounds, point);\n  };\n  node.intersect = function (point) {\n    log.info('Cloud intersect', node, point);\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n}\n", "import type { Bounds, D3Selection, Point } from '../../../types.js';\nimport type { Node } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function defaultMindmapNode<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const { labelStyles, nodeStyles } = styles2String(node);\n  node.labelStyle = labelStyles;\n\n  const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n    parent,\n    node,\n    getNodeClasses(node)\n  );\n\n  const w = bbox.width + 8 * halfPadding;\n  const h = bbox.height + 2 * halfPadding;\n  const rd = 5;\n\n  // Neo look: rounded top corners only, flat bottom edge (tab-like shape).\n  const rectPath =\n    node.look === 'neo'\n      ? `\n    M${-w / 2} ${h / 2 - rd}\n    v${-h + 2 * rd}\n    q0,-${rd} ${rd},-${rd}\n    h${w - 2 * rd}\n    q${rd},0 ${rd},${rd}\n    v${h - rd}\n    H${-w / 2}\n    Z\n  `\n      : `\n    M${-w / 2} ${h / 2 - rd}\n    v${-h + 2 * rd}\n    q0,-${rd} ${rd},-${rd}\n    h${w - 2 * rd}\n    q${rd},0 ${rd},${rd}\n    v${h - 2 * rd}\n    q0,${rd} ${-rd},${rd}\n    h${-(w - 2 * rd)}\n    q${-rd},0 ${-rd},${-rd}\n    Z\n  `;\n\n  if (!node.domId) {\n    throw new Error(\n      `defaultMindmapNode: node \"${node.id}\" is missing a domId \u2014 was render.ts domId prefixing skipped?`\n    );\n  }\n\n  const bg = shapeSvg\n    .append('path')\n    .attr('id', node.domId)\n    .attr('class', 'node-bkg node-' + node.type)\n    .attr('style', nodeStyles)\n    .attr('d', rectPath);\n\n  shapeSvg\n    .append('line')\n    .attr('class', 'node-line-')\n    .attr('x1', -w / 2)\n    .attr('y1', h / 2)\n    .attr('x2', w / 2)\n    .attr('y2', h / 2);\n\n  label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n  shapeSvg.append(() => label.node());\n\n  updateNodeBounds(node, bg);\n  node.calcIntersect = function (bounds: Bounds, point: Point) {\n    return intersect.rect(bounds, point);\n  };\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n}\n", "import { circle } from './circle.js';\nimport type { Node, MindmapOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function mindmapCircle<T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node\n) {\n  const options = {\n    padding: node.padding ?? 0,\n  } as MindmapOptions;\n  return circle(parent, node, options);\n}\n", "import type { Entries } from 'type-fest';\nimport type { D3Selection, MaybePromise } from '../../types.js';\nimport type { Node, ShapeRenderOptions } from '../types.js';\nimport { anchor } from './shapes/anchor.js';\nimport { bowTieRect } from './shapes/bowTieRect.js';\nimport { card } from './shapes/card.js';\nimport { choice } from './shapes/choice.js';\nimport { circle } from './shapes/circle.js';\nimport { crossedCircle } from './shapes/crossedCircle.js';\nimport { curlyBraceLeft } from './shapes/curlyBraceLeft.js';\nimport { curlyBraceRight } from './shapes/curlyBraceRight.js';\nimport { curlyBraces } from './shapes/curlyBraces.js';\nimport { curvedTrapezoid } from './shapes/curvedTrapezoid.js';\nimport { cylinder } from './shapes/cylinder.js';\nimport { dividedRectangle } from './shapes/dividedRect.js';\nimport { doublecircle } from './shapes/doubleCircle.js';\nimport { filledCircle } from './shapes/filledCircle.js';\nimport { flippedTriangle } from './shapes/flippedTriangle.js';\nimport { forkJoin } from './shapes/forkJoin.js';\nimport { halfRoundedRectangle } from './shapes/halfRoundedRectangle.js';\nimport { hexagon } from './shapes/hexagon.js';\nimport { hourglass } from './shapes/hourglass.js';\nimport { icon } from './shapes/icon.js';\nimport { iconCircle } from './shapes/iconCircle.js';\nimport { iconRounded } from './shapes/iconRounded.js';\nimport { iconSquare } from './shapes/iconSquare.js';\nimport { imageSquare } from './shapes/imageSquare.js';\nimport { inv_trapezoid } from './shapes/invertedTrapezoid.js';\nimport { labelRect } from './shapes/labelRect.js';\nimport { lean_left } from './shapes/leanLeft.js';\nimport { lean_right } from './shapes/leanRight.js';\nimport { lightningBolt } from './shapes/lightningBolt.js';\nimport { linedCylinder } from './shapes/linedCylinder.js';\nimport { linedWaveEdgedRect } from './shapes/linedWaveEdgedRect.js';\nimport { multiRect } from './shapes/multiRect.js';\nimport { multiWaveEdgedRectangle } from './shapes/multiWaveEdgedRectangle.js';\nimport { note } from './shapes/note.js';\nimport { question } from './shapes/question.js';\nimport { rect_left_inv_arrow } from './shapes/rectLeftInvArrow.js';\nimport { rectWithTitle } from './shapes/rectWithTitle.js';\nimport { roundedRect } from './shapes/roundedRect.js';\nimport { shadedProcess } from './shapes/shadedProcess.js';\nimport { slopedRect } from './shapes/slopedRect.js';\nimport { squareRect } from './shapes/squareRect.js';\nimport { stadium } from './shapes/stadium.js';\nimport { state } from './shapes/state.js';\nimport { stateEnd } from './shapes/stateEnd.js';\nimport { stateStart } from './shapes/stateStart.js';\nimport { subroutine } from './shapes/subroutine.js';\nimport { taggedRect } from './shapes/taggedRect.js';\nimport { taggedWaveEdgedRectangle } from './shapes/taggedWaveEdgedRectangle.js';\nimport { text } from './shapes/text.js';\nimport { tiltedCylinder } from './shapes/tiltedCylinder.js';\nimport { trapezoid } from './shapes/trapezoid.js';\nimport { trapezoidalPentagon } from './shapes/trapezoidalPentagon.js';\nimport { triangle } from './shapes/triangle.js';\nimport { waveEdgedRectangle } from './shapes/waveEdgedRectangle.js';\nimport { waveRectangle } from './shapes/waveRectangle.js';\nimport { windowPane } from './shapes/windowPane.js';\nimport { erBox } from './shapes/erBox.js';\nimport { classBox } from './shapes/classBox.js';\nimport { requirementBox } from './shapes/requirementBox.js';\nimport { kanbanItem } from './shapes/kanbanItem.js';\nimport { bang } from './shapes/bang.js';\nimport { cloud } from './shapes/cloud.js';\nimport { defaultMindmapNode } from './shapes/defaultMindmapNode.js';\nimport { mindmapCircle } from './shapes/mindmapCircle.js';\n\ntype ShapeHandler = <T extends SVGGraphicsElement>(\n  parent: D3Selection<T>,\n  node: Node,\n  options: ShapeRenderOptions\n) => MaybePromise<D3Selection<SVGGElement>>;\n\nexport interface ShapeDefinition {\n  semanticName: string;\n  name: string;\n  shortName: string;\n  description: string;\n  /**\n   * Aliases can include descriptive names, other short names, etc.\n   */\n  aliases?: string[];\n  /**\n   * These are names used by mermaid before the introduction of new shapes. These will not be in standard formats, and shouldn't be used by the users\n   */\n  internalAliases?: string[];\n  handler: ShapeHandler;\n}\n\nexport const shapesDefs = [\n  {\n    semanticName: 'Process',\n    name: 'Rectangle',\n    shortName: 'rect',\n    description: 'Standard process shape',\n    aliases: ['proc', 'process', 'rectangle'],\n    internalAliases: ['squareRect'],\n    handler: squareRect,\n  },\n  {\n    semanticName: 'Event',\n    name: 'Rounded Rectangle',\n    shortName: 'rounded',\n    description: 'Represents an event',\n    aliases: ['event'],\n    internalAliases: ['roundedRect'],\n    handler: roundedRect,\n  },\n  {\n    semanticName: 'Terminal Point',\n    name: 'Stadium',\n    shortName: 'stadium',\n    description: 'Terminal point',\n    aliases: ['terminal', 'pill'],\n    handler: stadium,\n  },\n  {\n    semanticName: 'Subprocess',\n    name: 'Framed Rectangle',\n    shortName: 'fr-rect',\n    description: 'Subprocess',\n    aliases: ['subprocess', 'subproc', 'framed-rectangle', 'subroutine'],\n    handler: subroutine,\n  },\n  {\n    semanticName: 'Database',\n    name: 'Cylinder',\n    shortName: 'cyl',\n    description: 'Database storage',\n    aliases: ['db', 'database', 'cylinder'],\n    handler: cylinder,\n  },\n  {\n    semanticName: 'Start',\n    name: 'Circle',\n    shortName: 'circle',\n    description: 'Starting point',\n    aliases: ['circ'],\n    handler: circle,\n  },\n  {\n    semanticName: 'Bang',\n    name: 'Bang',\n    shortName: 'bang',\n    description: 'Bang',\n    aliases: ['bang'],\n    handler: bang,\n  },\n  {\n    semanticName: 'Cloud',\n    name: 'Cloud',\n    shortName: 'cloud',\n    description: 'cloud',\n    aliases: ['cloud'],\n    handler: cloud,\n  },\n  {\n    semanticName: 'Decision',\n    name: 'Diamond',\n    shortName: 'diam',\n    description: 'Decision-making step',\n    aliases: ['decision', 'diamond', 'question'],\n    handler: question,\n  },\n  {\n    semanticName: 'Prepare Conditional',\n    name: 'Hexagon',\n    shortName: 'hex',\n    description: 'Preparation or condition step',\n    aliases: ['hexagon', 'prepare'],\n    handler: hexagon,\n  },\n  {\n    semanticName: 'Data Input/Output',\n    name: 'Lean Right',\n    shortName: 'lean-r',\n    description: 'Represents input or output',\n    aliases: ['lean-right', 'in-out'],\n    internalAliases: ['lean_right'],\n    handler: lean_right,\n  },\n  {\n    semanticName: 'Data Input/Output',\n    name: 'Lean Left',\n    shortName: 'lean-l',\n    description: 'Represents output or input',\n    aliases: ['lean-left', 'out-in'],\n    internalAliases: ['lean_left'],\n    handler: lean_left,\n  },\n  {\n    semanticName: 'Priority Action',\n    name: 'Trapezoid Base Bottom',\n    shortName: 'trap-b',\n    description: 'Priority action',\n    aliases: ['priority', 'trapezoid-bottom', 'trapezoid'],\n    handler: trapezoid,\n  },\n  {\n    semanticName: 'Manual Operation',\n    name: 'Trapezoid Base Top',\n    shortName: 'trap-t',\n    description: 'Represents a manual task',\n    aliases: ['manual', 'trapezoid-top', 'inv-trapezoid'],\n    internalAliases: ['inv_trapezoid'],\n    handler: inv_trapezoid,\n  },\n  {\n    semanticName: 'Stop',\n    name: 'Double Circle',\n    shortName: 'dbl-circ',\n    description: 'Represents a stop point',\n    aliases: ['double-circle'],\n    internalAliases: ['doublecircle'],\n    handler: doublecircle,\n  },\n  {\n    semanticName: 'Text Block',\n    name: 'Text Block',\n    shortName: 'text',\n    description: 'Text block',\n    handler: text,\n  },\n  {\n    semanticName: 'Card',\n    name: 'Notched Rectangle',\n    shortName: 'notch-rect',\n    description: 'Represents a card',\n    aliases: ['card', 'notched-rectangle'],\n    handler: card,\n  },\n  {\n    semanticName: 'Lined/Shaded Process',\n    name: 'Lined Rectangle',\n    shortName: 'lin-rect',\n    description: 'Lined process shape',\n    aliases: ['lined-rectangle', 'lined-process', 'lin-proc', 'shaded-process'],\n    handler: shadedProcess,\n  },\n  {\n    semanticName: 'Start',\n    name: 'Small Circle',\n    shortName: 'sm-circ',\n    description: 'Small starting point',\n    aliases: ['start', 'small-circle'],\n    internalAliases: ['stateStart'],\n    handler: stateStart,\n  },\n  {\n    semanticName: 'Stop',\n    name: 'Framed Circle',\n    shortName: 'fr-circ',\n    description: 'Stop point',\n    aliases: ['stop', 'framed-circle'],\n    internalAliases: ['stateEnd'],\n    handler: stateEnd,\n  },\n  {\n    semanticName: 'Fork/Join',\n    name: 'Filled Rectangle',\n    shortName: 'fork',\n    description: 'Fork or join in process flow',\n    aliases: ['join'],\n    internalAliases: ['forkJoin'],\n    handler: forkJoin,\n  },\n  {\n    semanticName: 'Collate',\n    name: 'Hourglass',\n    shortName: 'hourglass',\n    description: 'Represents a collate operation',\n    aliases: ['hourglass', 'collate'],\n    handler: hourglass,\n  },\n  {\n    semanticName: 'Comment',\n    name: 'Curly Brace',\n    shortName: 'brace',\n    description: 'Adds a comment',\n    aliases: ['comment', 'brace-l'],\n    handler: curlyBraceLeft,\n  },\n  {\n    semanticName: 'Comment Right',\n    name: 'Curly Brace',\n    shortName: 'brace-r',\n    description: 'Adds a comment',\n    handler: curlyBraceRight,\n  },\n  {\n    semanticName: 'Comment with braces on both sides',\n    name: 'Curly Braces',\n    shortName: 'braces',\n    description: 'Adds a comment',\n    handler: curlyBraces,\n  },\n  {\n    semanticName: 'Com Link',\n    name: 'Lightning Bolt',\n    shortName: 'bolt',\n    description: 'Communication link',\n    aliases: ['com-link', 'lightning-bolt'],\n    handler: lightningBolt,\n  },\n  {\n    semanticName: 'Document',\n    name: 'Document',\n    shortName: 'doc',\n    description: 'Represents a document',\n    aliases: ['doc', 'document'],\n    handler: waveEdgedRectangle,\n  },\n  {\n    semanticName: 'Delay',\n    name: 'Half-Rounded Rectangle',\n    shortName: 'delay',\n    description: 'Represents a delay',\n    aliases: ['half-rounded-rectangle'],\n    handler: halfRoundedRectangle,\n  },\n  {\n    semanticName: 'Direct Access Storage',\n    name: 'Horizontal Cylinder',\n    shortName: 'h-cyl',\n    description: 'Direct access storage',\n    aliases: ['das', 'horizontal-cylinder'],\n    handler: tiltedCylinder,\n  },\n  {\n    semanticName: 'Disk Storage',\n    name: 'Lined Cylinder',\n    shortName: 'lin-cyl',\n    description: 'Disk storage',\n    aliases: ['disk', 'lined-cylinder'],\n    handler: linedCylinder,\n  },\n  {\n    semanticName: 'Display',\n    name: 'Curved Trapezoid',\n    shortName: 'curv-trap',\n    description: 'Represents a display',\n    aliases: ['curved-trapezoid', 'display'],\n    handler: curvedTrapezoid,\n  },\n  {\n    semanticName: 'Divided Process',\n    name: 'Divided Rectangle',\n    shortName: 'div-rect',\n    description: 'Divided process shape',\n    aliases: ['div-proc', 'divided-rectangle', 'divided-process'],\n    handler: dividedRectangle,\n  },\n  {\n    semanticName: 'Extract',\n    name: 'Triangle',\n    shortName: 'tri',\n    description: 'Extraction process',\n    aliases: ['extract', 'triangle'],\n    handler: triangle,\n  },\n  {\n    semanticName: 'Internal Storage',\n    name: 'Window Pane',\n    shortName: 'win-pane',\n    description: 'Internal storage',\n    aliases: ['internal-storage', 'window-pane'],\n    handler: windowPane,\n  },\n  {\n    semanticName: 'Junction',\n    name: 'Filled Circle',\n    shortName: 'f-circ',\n    description: 'Junction point',\n    aliases: ['junction', 'filled-circle'],\n    handler: filledCircle,\n  },\n  {\n    semanticName: 'Loop Limit',\n    name: 'Trapezoidal Pentagon',\n    shortName: 'notch-pent',\n    description: 'Loop limit step',\n    aliases: ['loop-limit', 'notched-pentagon'],\n    handler: trapezoidalPentagon,\n  },\n  {\n    semanticName: 'Manual File',\n    name: 'Flipped Triangle',\n    shortName: 'flip-tri',\n    description: 'Manual file operation',\n    aliases: ['manual-file', 'flipped-triangle'],\n    handler: flippedTriangle,\n  },\n  {\n    semanticName: 'Manual Input',\n    name: 'Sloped Rectangle',\n    shortName: 'sl-rect',\n    description: 'Manual input step',\n    aliases: ['manual-input', 'sloped-rectangle'],\n    handler: slopedRect,\n  },\n  {\n    semanticName: 'Multi-Document',\n    name: 'Stacked Document',\n    shortName: 'docs',\n    description: 'Multiple documents',\n    aliases: ['documents', 'st-doc', 'stacked-document'],\n    handler: multiWaveEdgedRectangle,\n  },\n  {\n    semanticName: 'Multi-Process',\n    name: 'Stacked Rectangle',\n    shortName: 'st-rect',\n    description: 'Multiple processes',\n    aliases: ['procs', 'processes', 'stacked-rectangle'],\n    handler: multiRect,\n  },\n  {\n    semanticName: 'Stored Data',\n    name: 'Bow Tie Rectangle',\n    shortName: 'bow-rect',\n    description: 'Stored data',\n    aliases: ['stored-data', 'bow-tie-rectangle'],\n    handler: bowTieRect,\n  },\n  {\n    semanticName: 'Summary',\n    name: 'Crossed Circle',\n    shortName: 'cross-circ',\n    description: 'Summary',\n    aliases: ['summary', 'crossed-circle'],\n    handler: crossedCircle,\n  },\n  {\n    semanticName: 'Tagged Document',\n    name: 'Tagged Document',\n    shortName: 'tag-doc',\n    description: 'Tagged document',\n    aliases: ['tag-doc', 'tagged-document'],\n    handler: taggedWaveEdgedRectangle,\n  },\n  {\n    semanticName: 'Tagged Process',\n    name: 'Tagged Rectangle',\n    shortName: 'tag-rect',\n    description: 'Tagged process',\n    aliases: ['tagged-rectangle', 'tag-proc', 'tagged-process'],\n    handler: taggedRect,\n  },\n  {\n    semanticName: 'Paper Tape',\n    name: 'Flag',\n    shortName: 'flag',\n    description: 'Paper tape',\n    aliases: ['paper-tape'],\n    handler: waveRectangle,\n  },\n  {\n    semanticName: 'Odd',\n    name: 'Odd',\n    shortName: 'odd',\n    description: 'Odd shape',\n    internalAliases: ['rect_left_inv_arrow'],\n    handler: rect_left_inv_arrow,\n  },\n  {\n    semanticName: 'Lined Document',\n    name: 'Lined Document',\n    shortName: 'lin-doc',\n    description: 'Lined document',\n    aliases: ['lined-document'],\n    handler: linedWaveEdgedRect,\n  },\n] as const satisfies ShapeDefinition[];\n\nconst generateShapeMap = () => {\n  // These are the shapes that didn't have documentation present\n  const undocumentedShapes = {\n    // States\n    state,\n    choice,\n    note,\n\n    // Rectangles\n    rectWithTitle,\n    labelRect,\n\n    // Icons\n    iconSquare,\n    iconCircle,\n    icon,\n    iconRounded,\n    imageSquare,\n    anchor,\n\n    // Kanban diagram\n    kanbanItem,\n\n    //Mindmap diagram\n    mindmapCircle,\n    defaultMindmapNode,\n    // class diagram\n    classBox,\n\n    // er diagram\n    erBox,\n\n    // Requirement diagram\n    requirementBox,\n  } as const;\n\n  const entries = [\n    ...(Object.entries(undocumentedShapes) as Entries<typeof undocumentedShapes>),\n    ...shapesDefs.flatMap((shape) => {\n      const aliases = [\n        shape.shortName,\n        ...('aliases' in shape ? shape.aliases : []),\n        ...('internalAliases' in shape ? shape.internalAliases : []),\n      ];\n      return aliases.map((alias) => [alias, shape.handler] as const);\n    }),\n  ];\n  return Object.fromEntries(entries) as Record<\n    (typeof entries)[number][0],\n    (typeof entries)[number][1]\n  > satisfies Record<string, ShapeHandler>;\n};\n\nexport const shapes = generateShapeMap();\n\nexport function isValidShape(shape: string): shape is ShapeID {\n  return shape in shapes;\n}\n\nexport type ShapeID = keyof typeof shapes;\n", "import { log } from '../../logger.js';\nimport { shapes } from './shapes.js';\nimport type { Node, NonClusterNode, ShapeRenderOptions } from '../types.js';\nimport type { SVGGroup } from '../../mermaid.js';\nimport type { D3Selection } from '../../types.js';\nimport { handleUndefinedAttr } from '../../utils.js';\nimport type { graphlib } from 'dagre-d3-es';\n\ntype ShapeHandler = (typeof shapes)[keyof typeof shapes];\ntype NodeElement = D3Selection<SVGAElement> | Awaited<ReturnType<ShapeHandler>>;\n\nconst nodeElems = new Map<string, NodeElement>();\n\nexport async function insertNode(\n  elem: SVGGroup,\n  node: NonClusterNode,\n  renderOptions: ShapeRenderOptions\n) {\n  let newEl: NodeElement | undefined;\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  const shapeHandler = node.shape ? shapes[node.shape] : undefined;\n\n  if (!shapeHandler) {\n    throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n  }\n\n  if (node.link) {\n    // Add link when appropriate\n    let target;\n    if (renderOptions.config.securityLevel === 'sandbox') {\n      target = '_top';\n    } else if (node.linkTarget) {\n      target = node.linkTarget || '_blank';\n    }\n    newEl = elem\n      .insert<SVGAElement>('svg:a')\n      .attr('xlink:href', node.link)\n      .attr('target', target ?? null);\n    el = await shapeHandler(newEl, node, renderOptions);\n  } else {\n    el = await shapeHandler(elem, node, renderOptions);\n    newEl = el;\n  }\n  // Add data attributes for neo look support\n  newEl.attr('data-look', handleUndefinedAttr(node.look));\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    newEl.attr('class', newEl.attr('class') + ' clickable');\n  }\n  return newEl;\n}\n\nexport const setNodeElem = (elem: NodeElement, node: Pick<Node, 'id'>) => {\n  nodeElems.set(node.id, elem);\n};\n\nexport const clear = () => {\n  nodeElems.clear();\n};\n\nexport const positionNode = (node: ReturnType<graphlib.Graph['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": ["getConfig", "text", "select", "getConfig", "getConfig", "text", "select", "rect", "rough", "rough", "rough", "angle", "totalHeight", "ry", "rx", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "options", "radius", "rough", "rough", "crossedCircle", "rough", "generateCirclePoints", "rough", "rough", "generateCirclePoints", "rough", "rough", "generateCirclePoints", "rough", "rough", "rough", "rough", "rx", "ry", "cylinder", "rough", "rough", "rectOffset", "rough", "rough", "rough", "rough", "rough", "filledCircle", "rough", "MIN_HEIGHT", "MIN_WIDTH", "rough", "flippedTriangle", "rough", "state", "rough", "rough", "rough", "rough", "m", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rough", "rect", "rough", "options", "rect", "rough", "rough", "rough", "rough", "rough", "rough", "lightningBolt", "rough", "createCylinderPathD", "createOuterCylinderPathD", "createInnerCylinderPathD", "MIN_HEIGHT", "MIN_WIDTH", "rx", "ry", "cylinder", "rough", "rough", "rough", "rough", "rectOffset", "rough", "multiRect", "rough", "rectOffset", "rough", "rough", "rough", "rect", "rough", "rough", "s", "points", "rough", "rough", "select", "rough", "text", "getConfig", "div", "dv", "select", "rect", "rough", "rough", "rough", "rect", "rough", "rough", "squareRect", "rough", "rough", "rough", "rough", "circle", "rough", "circle", "rough", "rough", "FRAME_WIDTH", "rough", "rect", "rough", "rough", "taggedRect", "rough", "rough", "rect", "rough", "createCylinderPathD", "createOuterCylinderPathD", "createInnerCylinderPathD", "MIN_HEIGHT", "MIN_WIDTH", "ry", "rx", "cylinder", "rough", "rough", "rough", "rough", "rough", "rough", "MIN_HEIGHT", "MIN_WIDTH", "getConfig", "rough", "rough", "rough", "rough", "waveAmplitude", "rough", "rough", "rough", "windowPane", "rough", "select", "themeVariables", "options", "shapeSvg", "nameBBox", "rough", "text", "select", "rect", "roughRect", "yOffset", "select", "rough", "select", "addText", "text", "sanitizeText", "select", "getConfig", "rough", "rect", "text", "select", "_", "i", "nodes", "match", "rough", "select", "getConfig", "addText", "typeHeight", "rough", "rect", "text", "select", "sanitizeText", "rough", "rect", "rough", "options", "rough", "rough", "rough", "rough", "squareRect", "shapes", "shapes", "clear"]
}
