{
  "version": 3,
  "sources": ["../../../src/rendering-util/rendering-elements/shapes/util.ts", "../../../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/clusters.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-node.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-ellipse.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-circle.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-line.js", "../../../src/rendering-util/rendering-elements/intersect/intersect-polygon.js", "../../../src/rendering-util/rendering-elements/intersect/index.js", "../../../src/rendering-util/rendering-elements/shapes/anchor.ts", "../../../src/rendering-util/rendering-elements/shapes/bowTieRect.ts", "../../../src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts", "../../../src/rendering-util/rendering-elements/shapes/card.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/diagrams/class/shapeUtil.ts", "../../../src/rendering-util/rendering-elements/shapes/classBox.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", "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", "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", "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 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 { 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 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 { 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 { 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 { 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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,UACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,oCACd,KAAM,eACN,UAAW,SACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,iBACN,UAAW,OACX,YAAa,qBACb,QAAS,CAAC,WAAY,gBAAgB,EACtC,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,WACN,UAAW,MACX,YAAa,wBACb,QAAS,CAAC,MAAO,UAAU,EAC3B,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,yBACN,UAAW,QACX,YAAa,qBACb,QAAS,CAAC,wBAAwB,EAClC,QAASC,EACX,EACA,CACE,aAAc,wBACd,KAAM,sBACN,UAAW,QACX,YAAa,wBACb,QAAS,CAAC,MAAO,qBAAqB,EACtC,QAASC,EACX,EACA,CACE,aAAc,eACd,KAAM,iBACN,UAAW,UACX,YAAa,eACb,QAAS,CAAC,OAAQ,gBAAgB,EAClC,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,mBACN,UAAW,YACX,YAAa,uBACb,QAAS,CAAC,mBAAoB,SAAS,EACvC,QAASC,EACX,EACA,CACE,aAAc,kBACd,KAAM,oBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,WAAY,oBAAqB,iBAAiB,EAC5D,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,WACN,UAAW,MACX,YAAa,qBACb,QAAS,CAAC,UAAW,UAAU,EAC/B,QAASC,EACX,EACA,CACE,aAAc,mBACd,KAAM,cACN,UAAW,WACX,YAAa,mBACb,QAAS,CAAC,mBAAoB,aAAa,EAC3C,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,gBACN,UAAW,SACX,YAAa,iBACb,QAAS,CAAC,WAAY,eAAe,EACrC,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,uBACN,UAAW,aACX,YAAa,kBACb,QAAS,CAAC,aAAc,kBAAkB,EAC1C,QAASC,EACX,EACA,CACE,aAAc,cACd,KAAM,mBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,cAAe,kBAAkB,EAC3C,QAASC,EACX,EACA,CACE,aAAc,eACd,KA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",
  "names": ["labelHelper", "__name", "parent", "node", "_classes", "cssClasses", "useHtmlLabels", "evaluate", "getConfig", "shapeSvg", "labelEl", "handleUndefinedAttr", "label", "addBackground", "isMarkdown", "text", "createText", "sanitizeText", "decodeEntities", "bbox", "halfPadding", "div", "dv", "select_default", "configureLabelImages", "insertLabel", "options", "getEffectiveHtmlLabels", "updateNodeBounds", "element", "getNodeClasses", "__name", "node", "extra", "createPathFromPoints", "points", "pointStrings", "p", "i", "generateFullSineWavePoints", "x1", "y1", "x2", "y2", "amplitude", "numCycles", "deltaX", "deltaY", "cycleLength", "frequency", "midY", "t", "x", "y", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "startAngleRad", "angleStep", "angle", "mergePaths", "roughElement", "paths", "mergedPath", "combinedPathData", "path", "d", "fillPath", "strokePath", "getAttr", "element", "attr", "fillAttrs", "value", "strokeAttrs", "group", "intersectRect", "__name", "node", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "intersect_rect_default", "createLabel", "__name", "element", "_vertexText", "style", "isTitle", "isNode", "vertexText", "config", "getConfig", "useHtmlLabels", "getEffectiveHtmlLabels", "createText", "createLabel_default", "createRoundedRectPathD", "__name", "x", "y", "totalWidth", "totalHeight", "radius", "rect", "__name", "parent", "node", "log", "siteConfig", "getConfig", "themeVariables", "handDrawnSeed", "clusterBkg", "clusterBorder", "labelStyles", "nodeStyles", "borderStyles", "backgroundStyles", "styles2String", "shapeSvg", "useHtmlLabels", "getEffectiveHtmlLabels", "labelEl", "text", "createText", "createLabel_default", "bbox", "div", "dv", "select_default", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "subGraphTitleTopMargin", "getSubGraphTitleMargins", "span", "rectBox", "point", "intersect_rect_default", "noteGroup", "padding", "halfPadding", "roundedWithTitle", "altBackground", "compositeBackground", "compositeTitleBackground", "nodeBorder", "outerRectG", "label", "innerRect", "innerHeight", "innerY", "isAlt", "roughOuterNode", "roughInnerNode", "kanbanSection", "divider", "outerRectClass", "squareRect", "shapes", "clusterElems", "insertCluster", "elem", "shape", "cluster", "clear", "__name", "clusterElems", "intersectNode", "node", "point", "__name", "intersect_node_default", "intersectEllipse", "node", "rx", "ry", "point", "cx", "cy", "px", "py", "det", "dx", "dy", "__name", "intersect_ellipse_default", "intersectCircle", "node", "rx", "point", "intersect_ellipse_default", "__name", "intersect_circle_default", "intersectLine", "p1", "p2", "q1", "q2", "a1", "b1", "c1", "r3", "r4", "epsilon", "sameSign", "a2", "b2", "c2", "r1", "r2", "denom", "offset", "num", "x", "y", "__name", "intersect_line_default", "intersectPolygon", "node", "polyPoints", "point", "x1", "y1", "intersections", "minX", "minY", "entry", "left", "top", "i", "p1", "p2", "intersect", "intersect_line_default", "p", "q", "pdx", "pdy", "distp", "qdx", "qdy", "distq", "__name", "intersect_polygon_default", "intersect_default", "intersect_node_default", "intersect_circle_default", "intersect_ellipse_default", "intersect_polygon_default", "intersect_rect_default", "anchor", "parent", "node", "labelStyles", "styles2String", "classes", "getNodeClasses", "cssClasses", "shapeSvg", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "roughNode", "circleElem", "handleUndefinedAttr", "updateNodeBounds", "point", "log", "intersect_default", "__name", "generateArcPoints", "x1", "y1", "x2", "y2", "rx", "ry", "clockwise", "midX", "midY", "angle", "dx", "dy", "transformedX", "transformedY", "distance", "scaledCenterDistance", "centerX", "centerY", "startAngle", "angleRange", "points", "i", "t", "x", "y", "__name", "calculateArcSagitta", "chord", "radiusX", "radiusY", "semiMajorAxis", "semiMinorAxis", "a", "b", "bowTieRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "calcTotalHeight", "labelHeight", "calcEllipseRadius", "totalHeight", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "sagitta", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "bowTieRectPath", "createPathFromPoints", "bowTieRectShapePath", "bowTieRectShape", "updateNodeBounds", "point", "intersect_default", "insertPolygonShape", "parent", "w", "h", "points", "d", "__name", "NOTCH_SIZE", "card", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "left", "right", "top", "bottom", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "choice", "parent", "node", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "s", "points", "rc", "at", "options", "userNodeOverrides", "choicePath", "createPathFromPoints", "roughNode", "choiceShape", "point", "intersect_default", "__name", "circle", "parent", "node", "options", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "labelHelper", "getNodeClasses", "labelPadding", "padding", "radius", "circleElem", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "__name", "createLine", "r", "xAxis45", "yAxis45", "lineLength", "pointQ1", "pointQ2", "pointQ3", "pointQ4", "__name", "crossedCircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "circleNode", "linePath", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraceLeft", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "paddingX", "paddingY", "w", "h", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceLeftNode", "rectPath", "rectShape", "curlyBraceLeftShape", "updateNodeBounds", "point", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraceRight", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "labelPaddingX", "labelPaddingY", "w", "h", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceRightNode", "rectPath", "rectShape", "curlyBraceRightShape", "updateNodeBounds", "point", "intersect_default", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "__name", "curlyBraces", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "labelPaddingX", "labelPaddingY", "w", "h", "cssStyles", "leftCurlyBracePoints", "rightCurlyBracePoints", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newLeftCurlyBracePath", "createPathFromPoints", "leftCurlyBraceNode", "newRightCurlyBracePath", "rightCurlyBraceNode", "rectPath", "rectShape", "curlyBracesShape", "updateNodeBounds", "point", "intersect_default", "curvedTrapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "minWidth", "minHeight", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "totalWidth", "totalHeight", "rw", "tw", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "createOuterCylinderPathD", "createInnerCylinderPathD", "MIN_HEIGHT", "MIN_WIDTH", "cylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "originalWidth", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "outerPathData", "innerPathData", "options", "userNodeOverrides", "outerNode", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "dividedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "paddingX", "paddingY", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pts", "poly", "p", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "doublecircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "gap", "padding", "labelPadding", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "outerRadius", "innerRadius", "circleGroup", "cssStyles", "rc", "at", "outerOptions", "userNodeOverrides", "innerOptions", "outerRoughNode", "innerRoughNode", "handleUndefinedAttr", "outerCircle", "innerCircle", "updateNodeBounds", "point", "log", "intersect_default", "__name", "filledCircle", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "nodeBorder", "options", "userNodeOverrides", "circleNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "MIN_HEIGHT", "MIN_WIDTH", "flippedTriangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "forkJoin", "parent", "node", "dir", "state", "themeVariables", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "shape", "updateNodeBounds", "padding", "point", "intersect_default", "__name", "halfRoundedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "minWidth", "minHeight", "paddingX", "paddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "createHexagonPathD", "__name", "x", "y", "width", "height", "m", "hexagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "f", "nodePadding", "wa", "ha", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "hourglass", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "icon", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "iconCircle", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "padding", "labelPadding", "topLabel", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "rc", "at", "options", "userNodeOverrides", "fill", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "diameter", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "updateNodeBounds", "point", "log", "intersect_default", "__name", "iconRounded", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "iconSquare", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "imageSquare", "parent", "node", "flowchart", "img", "imageNaturalWidth", "imageNaturalHeight", "labelStyles", "styles2String", "defaultWidth", "imageRawWidth", "imageWidth", "imageHeight", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "imageNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "image", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "__name", "inv_trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingY", "labelPaddingX", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "drawRect", "parent", "node", "options", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "__name", "labelRect", "parent", "node", "shapeSvg", "bbox", "label", "labelHelper", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "lean_left", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingY", "labelPaddingX", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "lean_right", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingY", "labelPaddingX", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "lightningBolt", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "gap", "points", "rc", "at", "options", "userNodeOverrides", "linePath", "createPathFromPoints", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "outerOffset", "createOuterCylinderPathD", "createInnerCylinderPathD", "MIN_HEIGHT", "MIN_WIDTH", "linedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "originalWidth", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cylinder", "cssStyles", "rc", "at", "outerPathData", "innerPathData", "options", "userNodeOverrides", "outerNode", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "linedWaveEdgedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "originalWidth", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "poly", "p", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "multiRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "rectOffset", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "innerPathPoints", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "mergePaths", "updateNodeBounds", "point", "intersect_default", "__name", "multiWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "nodePadding", "labelPaddingX", "labelPaddingY", "adjustFinalHeight", "w", "h", "waveAmplitude", "finalH", "x", "y", "rectOffset", "cssStyles", "wavePoints", "generateFullSineWavePoints", "lastWavePoint", "outerPathPoints", "innerPathPoints", "rc", "at", "options", "userNodeOverrides", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "shape", "updateNodeBounds", "point", "intersect_default", "__name", "note", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "getEffectiveHtmlLabels", "getConfig", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "noteShapeNode", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "createDecisionBoxPathD", "__name", "x", "y", "size", "question", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "s", "adjustment", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "roughNode", "insertPolygonShape", "updateNodeBounds", "bounds", "point", "res", "intersect_default", "rect_left_inv_arrow", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "x", "y", "notch", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "rectWithTitle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "classes", "shapeSvg", "g", "label", "description", "title", "text", "createLabel_default", "bbox", "getEffectiveHtmlLabels", "getConfig", "div", "dv", "select_default", "log", "textRows", "titleBox", "descr", "halfPadding", "totalWidth", "totalHeight", "x", "y", "rect", "innerLine", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "roughLine", "updateNodeBounds", "point", "intersect_default", "__name", "roundedRect", "parent", "node", "themeVariables", "radius", "options", "drawRect", "__name", "FRAME_WIDTH", "shadedProcess", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "paddingX", "paddingY", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "roughNode", "p", "rect", "handleUndefinedAttr", "updateNodeBounds", "point", "intersect_default", "__name", "slopedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "squareRect", "parent", "node", "nodePadding", "labelPaddingX", "labelPaddingY", "options", "drawRect", "__name", "stadium", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "state", "parent", "node", "options", "drawRect", "__name", "stateEnd", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "cssStyles", "lineColor", "stateBorder", "nodeBorder", "nodeShadow", "shapeSvg", "rc", "at", "options", "userNodeOverrides", "roughNode", "innerFill", "innerNodeRadius", "roughInnerNode", "circle", "svgId", "filterId", "updateNodeBounds", "point", "intersect_default", "__name", "stateStart", "parent", "node", "themeVariables", "lineColor", "nodeShadow", "shapeSvg", "circle", "roughNode", "at", "solidStateFill", "svgId", "filterId", "updateNodeBounds", "point", "intersect_default", "__name", "FRAME_WIDTH", "subroutine", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "w", "h", "x", "y", "points", "rc", "at", "options", "userNodeOverrides", "roughNode", "l1", "l2", "rect", "cssStyles", "handleUndefinedAttr", "updateNodeBounds", "el", "insertPolygonShape", "point", "intersect_default", "__name", "TAG_RATIO", "taggedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalHeight", "tagWidth", "tagHeight", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "rectPoints", "tagPoints", "rectPath", "createPathFromPoints", "rectNode", "tagPath", "tagNode", "updateNodeBounds", "point", "intersect_default", "__name", "taggedWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "tagWidth", "tagHeight", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "x", "y", "tagPoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "taggedWaveEdgeRectPath", "taggedWaveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "text", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "updateNodeBounds", "point", "intersect_default", "__name", "createCylinderPathD", "__name", "x", "y", "width", "height", "rx", "ry", "createOuterCylinderPathD", "createInnerCylinderPathD", "MIN_HEIGHT", "MIN_WIDTH", "tiltedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPadding", "originalHeight", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "h", "w", "cssStyles", "cylinder", "rc", "at", "outerPathData", "innerPathData", "outerNode", "userNodeOverrides", "innerLine", "pathData", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingY", "labelPaddingX", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "__name", "trapezoidalPentagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "minWidth", "minHeight", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "__name", "MIN_HEIGHT", "MIN_WIDTH", "triangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "useHtmlLabels", "evaluate", "getConfig", "w", "h", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "__name", "waveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "adjustFinalHeight", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "finalH", "cssStyles", "widthDif", "extraW", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "__name", "waveRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "nodePadding", "labelPaddingX", "labelPaddingY", "waveAmplitude", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveRectPath", "createPathFromPoints", "waveRectNode", "waveRect", "updateNodeBounds", "point", "intersect_default", "__name", "rectOffset", "windowPane", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "paddingX", "paddingY", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "path", "no", "updateNodeBounds", "point", "intersect_default", "__name", "COLOR_THEMES", "REDUX_THEMES", "erBox", "parent", "node", "entityNode", "theme", "themeVariables", "getConfig", "rowEven", "rowOdd", "nodeBorder", "borderColorArray", "background", "backgroundNode", "config", "PADDING", "TEXT_PADDING", "cssStyles", "labelStyles", "nodeStyles", "styles2String", "options", "calculateTextWidth", "shapeSvg", "drawRect", "colorIndex", "evaluate", "textElement", "bbox", "cssClasses", "getNodeClasses", "nameBBox", "addText", "yOffset", "yOffsets", "rows", "maxTypeWidth", "maxNameWidth", "maxKeysWidth", "maxCommentWidth", "keysPresent", "commentPresent", "attribute", "typeBBox", "keysBBox", "commentBBox", "rowHeight", "totalWidthSections", "shapeBBox", "difference", "maxWidth", "rc", "at", "userNodeOverrides", "totalShapeBBoxHeight", "sum", "row", "w", "h", "x", "y", "_", "i", "nodes", "text", "select_default", "transform", "translateX", "translateY", "translate", "roughRect", "rect", "isEven", "thickness", "points", "lineToPolygon", "roughLine", "p", "xCoord", "yCoord", "updateNodeBounds", "strokeStyles", "e", "s", "point", "intersect_default", "__name", "labelText", "classes", "style", "label", "parseGenericTypes", "createText", "child", "div", "dv", "x1", "y1", "x2", "y2", "textHelper", "parent", "node", "config", "useHtmlLabels", "GAP", "TEXT_PADDING", "shapeSvg", "getNodeClasses", "annotationGroup", "labelGroup", "membersGroup", "methodsGroup", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "annotation", "addText", "labelGroupBBox", "yOffset", "member", "height", "methodsYOffset", "method", "bbox", "annotationGroupBBox", "__name", "parentGroup", "styles", "textEl", "getConfig", "evaluate", "textContent", "hasKatex", "text", "createText", "sanitizeText", "decodeEntities", "calculateTextWidth", "numberOfLines", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "width", "textChild", "classBox", "parent", "node", "config", "getConfig", "themeVariables", "useGradient", "PADDING", "GAP", "useHtmlLabels", "evaluate", "classNode", "shapeSvg", "bbox", "textHelper", "labelStyles", "nodeStyles", "styles2String", "styles", "renderExtraBox", "rc", "at", "options", "userNodeOverrides", "w", "h", "nodeHeightGreater", "x", "y", "extraHeight", "roughRect", "rect", "rectBBox", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "methodsAreaPlacement", "_", "i", "nodes", "text", "select_default", "transform", "translateY", "translate", "newTranslateY", "membersGroupHeightForMethods", "newTranslateX", "firstLineY", "roughLine", "secondLineY", "colorRegex", "match", "colorStyle", "updateNodeBounds", "point", "intersect_default", "__name", "requirementBox", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "requirementNode", "elementNode", "padding", "gap", "isRequirementNode", "classes", "getNodeClasses", "themeVariables", "getConfig", "borderColorArray", "requirementEdgeLabelBackground", "shapeSvg", "typeHeight", "addText", "accumulativeHeight", "nameHeight", "idHeight", "textHeight", "riskHeight", "totalWidth", "totalHeight", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughRect", "rect", "colorIndex", "_", "i", "nodes", "text", "select_default", "transform", "translateX", "translateY", "translate", "newTranslateY", "newTranslateX", "lineY", "roughLine", "polygonPoints", "updateNodeBounds", "point", "intersect_default", "__name", "parentGroup", "inputText", "yOffset", "style", "textEl", "config", "useHtmlLabels", "createText", "sanitizeText", "decodeEntities", "calculateTextWidth", "bbox", "div", "dv", "textChild", "child", "colorFromPriority", "__name", "priority", "kanbanItem", "parent", "kanbanNode", "config", "labelStyles", "nodeStyles", "styles2String", "labelPaddingX", "orgWidth", "shapeSvg", "bbox", "labelElTitle", "labelHelper", "getNodeClasses", "padding", "ticketUrl", "link", "options", "labelEl", "bbox2", "insertLabel", "labelElAssigned", "bboxAssigned", "labelPaddingY", "totalWidth", "heightAdj", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "line", "lineX", "y1", "y2", "updateNodeBounds", "point", "intersect_default", "bang", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "h", "r", "cssStyles", "minWidth", "minHeight", "effectiveWidth", "effectiveHeight", "bangElem", "path", "rc", "at", "options", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "__name", "cloud", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "h", "r1", "r2", "r3", "r4", "cssStyles", "cloudElem", "path", "rc", "at", "options", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "__name", "defaultMindmapNode", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "h", "rd", "rectPath", "bg", "updateNodeBounds", "bounds", "point", "intersect_default", "__name", "mindmapCircle", "parent", "node", "options", "circle", "__name", "shapesDefs", "squareRect", "roundedRect", "stadium", "subroutine", "cylinder", "circle", "bang", "cloud", "question", "hexagon", "lean_right", "lean_left", "trapezoid", "inv_trapezoid", "doublecircle", "text", "card", "shadedProcess", "stateStart", "stateEnd", "forkJoin", "hourglass", "curlyBraceLeft", "curlyBraceRight", "curlyBraces", "lightningBolt", "waveEdgedRectangle", "halfRoundedRectangle", "tiltedCylinder", "linedCylinder", "curvedTrapezoid", "dividedRectangle", "triangle", "windowPane", "filledCircle", "trapezoidalPentagon", "flippedTriangle", "slopedRect", "multiWaveEdgedRectangle", "multiRect", "bowTieRect", "crossedCircle", "taggedWaveEdgedRectangle", "taggedRect", "waveRectangle", "rect_left_inv_arrow", "linedWaveEdgedRect", "generateShapeMap", "__name", "entries", "state", "choice", "note", "rectWithTitle", "labelRect", "iconSquare", "iconCircle", "icon", "iconRounded", "imageSquare", "anchor", "kanbanItem", "mindmapCircle", "defaultMindmapNode", "classBox", "erBox", "requirementBox", "shape", "alias", "shapes", "isValidShape", "nodeElems", "insertNode", "elem", "node", "renderOptions", "newEl", "el", "shapeHandler", "shapes", "target", "handleUndefinedAttr", "__name", "setNodeElem", "clear", "positionNode", "log", "padding", "diff"]
}
