{"version":3,"file":"index.cjs","sources":["../lib/utils/elementUtils.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.js","../lib/handler/incomingHandler.js","../lib/handler/index.js","../lib/Layouter.js","../lib/index.js"],"sourcesContent":["export function isConnection(element) {\n  return !!element.sourceRef;\n}\n\nexport function isBoundaryEvent(element) {\n  return !!element.attachedToRef;\n}\n\nexport function findElementInTree(currentElement, targetElement, visited = new Set()) {\n\n  if (currentElement === targetElement) return true;\n\n  if (visited.has(currentElement)) return false;\n\n  visited.add(currentElement);\n\n  // If currentElement has no outgoing connections, return false\n  if (!currentElement.outgoing || currentElement.outgoing.length === 0) return false;\n\n  // Recursively check each outgoing element\n  for (let nextElement of currentElement.outgoing.map(out => out.targetRef)) {\n    if (findElementInTree(nextElement, targetElement, visited)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n","export const DEFAULT_TASK_HEIGHT = 80;\nexport const DEFAULT_TASK_WIDTH = 100;\n\nexport function getDefaultSize(element) {\n  if (is(element, 'bpmn:SubProcess')) {\n    return { width: DEFAULT_TASK_WIDTH, height: DEFAULT_TASK_HEIGHT };\n  }\n\n  if (is(element, 'bpmn:Task')) {\n    return { width: DEFAULT_TASK_WIDTH, height: DEFAULT_TASK_HEIGHT };\n  }\n\n  if (is(element, 'bpmn:Gateway')) {\n    return { width: 50, height: 50 };\n  }\n\n  if (is(element, 'bpmn:Event')) {\n    return { width: 36, height: 36 };\n  }\n\n  if (is(element, 'bpmn:Participant')) {\n    return { width: 400, height: 100 };\n  }\n\n  if (is(element, 'bpmn:Lane')) {\n    return { width: 400, height: 100 };\n  }\n\n  if (is(element, 'bpmn:DataObjectReference')) {\n    return { width: 36, height: 50 };\n  }\n\n  if (is(element, 'bpmn:DataStoreReference')) {\n    return { width: 50, height: 50 };\n  }\n\n  if (is(element, 'bpmn:TextAnnotation')) {\n    return { width: DEFAULT_TASK_WIDTH, height: 30 };\n  }\n\n  return { width: DEFAULT_TASK_WIDTH, height: DEFAULT_TASK_HEIGHT };\n}\n\nexport function is(element, type) {\n  return element.$instanceOf(type);\n}\n","import { DEFAULT_TASK_HEIGHT, getDefaultSize } from '../di/DiUtil.js';\n\nexport const DEFAULT_CELL_WIDTH = 150;\nexport const DEFAULT_CELL_HEIGHT = 140;\n\nexport function getMid(bounds) {\n  return {\n    x: bounds.x + bounds.width / 2,\n    y: bounds.y + bounds.height / 2\n  };\n}\n\nexport function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrientation = 'top-left') {\n\n  // ensure we end up with a specific docking direction\n  // based on the targetOrientation, if <h|v> is being passed\n  if (dockingDirection === 'h') {\n    dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';\n  }\n\n  if (dockingDirection === 'v') {\n    dockingDirection = /top/.test(targetOrientation) ? 't' : 'b';\n  }\n\n  if (dockingDirection === 't') {\n    return { original: point, x: point.x, y: rectangle.y };\n  }\n\n  if (dockingDirection === 'r') {\n    return { original: point, x: rectangle.x + rectangle.width, y: point.y };\n  }\n\n  if (dockingDirection === 'b') {\n    return { original: point, x: point.x, y: rectangle.y + rectangle.height };\n  }\n\n  if (dockingDirection === 'l') {\n    return { original: point, x: rectangle.x, y: point.y };\n  }\n\n  throw new Error('unexpected dockingDirection: <' + dockingDirection + '>');\n}\n\n/**\n * Modified Manhattan layout: Uses space between grid columns to route connections\n * if direct connection is not possible.\n * @param {*} source\n * @param {*} target\n * @param layoutGrid\n * @returns waypoints\n */\nexport function connectElements(source, target, layoutGrid) {\n  const sourceDi = source.di;\n  const targetDi = target.di;\n\n  const sourceBounds = sourceDi.get('bounds');\n  const targetBounds = targetDi.get('bounds');\n\n  const sourceMid = getMid(sourceBounds);\n  const targetMid = getMid(targetBounds);\n\n  const dX = target.gridPosition.col - source.gridPosition.col;\n  const dY = target.gridPosition.row - source.gridPosition.row;\n\n  const dockingSource = `${(dY > 0 ? 'bottom' : 'top')}-${dX > 0 ? 'right' : 'left'}`;\n  const dockingTarget = `${(dY > 0 ? 'top' : 'bottom')}-${dX > 0 ? 'left' : 'right'}`;\n\n  const baseSourceGrid = source.grid || source.attachedToRef?.grid;\n  const baseTargetGrid = target.grid;\n\n  // Source === Target ==> Build loop\n  if (dX === 0 && dY === 0) {\n    const { x, y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n    return [\n      getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n      { x: baseSourceGrid ? x + (baseSourceGrid.getGridDimensions()[1] + 1) * DEFAULT_CELL_WIDTH : x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n      { x: baseSourceGrid ? x + (baseSourceGrid.getGridDimensions()[1] + 1) * DEFAULT_CELL_WIDTH : x + DEFAULT_CELL_WIDTH, y: y },\n      { x: targetMid.x, y: y },\n      getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n    ];\n  }\n\n  // negative dX indicates connection from future to past\n  if (dX < 0) {\n\n    const { y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n\n    const offsetY = DEFAULT_CELL_HEIGHT / 2;\n\n    if (sourceMid.y >= targetMid.y) {\n\n      // edge goes below\n      const maxExpanded = getMaxExpandedBetween(source, target, layoutGrid);\n\n      if (maxExpanded) {\n        return [\n          getDockingPoint(sourceMid, sourceBounds, 'b'),\n          { x: sourceMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT + maxExpanded * DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n          { x: targetMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT + maxExpanded * DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n          getDockingPoint(targetMid, targetBounds, 'b')\n        ];\n      }\n\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 'b'),\n        { x: sourceMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n        { x: targetMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n        getDockingPoint(targetMid, targetBounds, 'b')\n      ];\n    } else {\n\n      // edge goes above\n      const bendY = sourceMid.y - offsetY;\n\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 't'),\n        { x: sourceMid.x, y: bendY },\n        { x: targetMid.x, y: bendY },\n        getDockingPoint(targetMid, targetBounds, 't')\n      ];\n    }\n  }\n\n  // connect horizontally\n  if (dY === 0) {\n    if (isDirectPathBlocked(source, target, layoutGrid)) {\n      const { y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n\n      // Route on bottom\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 'b'),\n        { x: sourceMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n        { x: targetMid.x, y: !baseSourceGrid ? y + DEFAULT_CELL_HEIGHT : y + (baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n        getDockingPoint(targetMid, targetBounds, 'b')\n      ];\n    } else {\n\n      // if space is clear, connect directly\n      const firstPoint = getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource);\n      const lastPoint = getDockingPoint(targetMid, targetBounds, 'h', dockingTarget);\n      if (baseSourceGrid) {\n        firstPoint.y = sourceBounds.y + DEFAULT_TASK_HEIGHT / 2 ;\n      }\n\n      if (baseTargetGrid) {\n        lastPoint.y = targetBounds.y + DEFAULT_TASK_HEIGHT / 2 ;\n      }\n      return [\n        firstPoint,\n        lastPoint\n      ];\n    }\n  }\n\n  // connect vertically\n  if (dX === 0) {\n    if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n      // Route parallel\n      const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 'r'),\n        { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n        { x: targetMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset },\n        { x: targetMid.x, y: targetMid.y + yOffset },\n        getDockingPoint(targetMid, targetBounds, Math.sign(yOffset) > 0 ? 'b' : 't')\n      ];\n    } else {\n\n      // if space is clear, connect directly\n      return [ getDockingPoint(sourceMid, sourceBounds, 'v', dockingSource),\n        getDockingPoint(targetMid, targetBounds, 'v', dockingTarget)\n      ];\n    }\n  }\n\n  const directManhattan = directManhattanConnect(source, target, layoutGrid);\n\n  if (directManhattan) {\n    const startPoint = getDockingPoint(sourceMid, sourceBounds, directManhattan[0], dockingSource);\n    const endPoint = getDockingPoint(targetMid, targetBounds, directManhattan[1], dockingTarget);\n\n    const midPoint = directManhattan[0] === 'h' ? { x: endPoint.x, y: startPoint.y } : { x: startPoint.x, y: endPoint.y };\n\n    return [\n      startPoint,\n      midPoint,\n      endPoint\n    ];\n  }\n  const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n\n  return [\n    getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n    { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n    { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target row\n    { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target column\n    { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y }, // to mid\n    getDockingPoint(targetMid, targetBounds, 'l', dockingTarget)\n  ];\n}\n\n// helpers /////\nexport function coordinatesToPosition(row, col) {\n  return {\n    width: DEFAULT_CELL_WIDTH,\n    height: DEFAULT_CELL_HEIGHT,\n    x: col * DEFAULT_CELL_WIDTH,\n    y: row * DEFAULT_CELL_HEIGHT\n  };\n}\n\nexport function getBounds(element, row, col, shift, attachedTo) {\n  let { width, height } = getDefaultSize(element);\n  const { x, y } = shift;\n\n  // Center in cell\n  if (!attachedTo) {\n    return {\n      width: element.isExpanded ? element.grid.getGridDimensions()[1] * DEFAULT_CELL_WIDTH + width : width,\n      height: element.isExpanded ? element.grid.getGridDimensions()[0] * DEFAULT_CELL_HEIGHT + height : height,\n      x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2 + x,\n      y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2 + y\n    };\n  }\n\n  const hostBounds = attachedTo.di.bounds;\n\n  return {\n    width, height,\n    x: Math.round(hostBounds.x + hostBounds.width / 2 - width / 2),\n    y: Math.round(hostBounds.y + hostBounds.height - height / 2)\n  };\n}\n\nfunction isDirectPathBlocked(source, target, layoutGrid) {\n  const { row: sourceRow, col: sourceCol } = source.gridPosition;\n  const { row: targetRow, col: targetCol } = target.gridPosition;\n\n  const dX = targetCol - sourceCol;\n  const dY = targetRow - sourceRow;\n\n  let totalElements = 0;\n\n  if (dX) {\n    totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, { row: sourceRow, col: targetCol }).length;\n  }\n\n  if (dY) {\n    totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: targetCol }, { row: targetRow, col: targetCol }).length;\n  }\n\n  return totalElements > 2;\n}\n\nfunction directManhattanConnect(source, target, layoutGrid) {\n  const { row: sourceRow, col: sourceCol } = source.gridPosition;\n  const { row: targetRow, col: targetCol } = target.gridPosition;\n\n  const dX = targetCol - sourceCol;\n  const dY = targetRow - sourceRow;\n\n  // Only directly connect left-to-right flow\n  if (!(dX > 0 && dY !== 0)) {\n    return;\n  }\n\n  // If below, go down then horizontal\n  if (dY > 0) {\n    let totalElements = 0;\n    const bendPoint = { row: targetRow, col: sourceCol };\n    totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n    totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n    return totalElements > 2 ? false : [ 'v', 'h' ];\n  } else {\n\n    // If above, go horizontal than vertical\n    let totalElements = 0;\n    const bendPoint = { row: sourceRow, col: targetCol };\n\n    totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n    totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n    return totalElements > 2 ? false : [ 'h', 'v' ];\n  }\n}\n\n\nfunction getMaxExpandedBetween(source, target, layoutGrid) {\n\n  const hostSource = source.attachedToRef ? source.attachedToRef : source;\n  const hostTarget = target.attachedToRef ? target.attachedToRef : target;\n\n\n  const [ sourceRow, sourceCol ] = layoutGrid.find(hostSource);\n  const [ , targetCol ] = layoutGrid.find(hostTarget);\n\n  const firstCol = sourceCol < targetCol ? sourceCol : targetCol;\n  const lastCol = sourceCol < targetCol ? targetCol : sourceCol;\n\n  const elementsInRange = layoutGrid.getAllElements().filter(element => element.gridPosition.row === sourceRow && element.gridPosition.col > firstCol && element.gridPosition.col < lastCol);\n\n  return elementsInRange.reduce((acc, cur) => {\n    if (cur.grid?.getGridDimensions()[0] > acc) return cur.grid?.getGridDimensions()[0];\n  }, 0);\n}\n","export class Grid {\n  constructor() {\n    this.grid = [];\n  }\n\n  add(element, position) {\n    if (!position) {\n      this._addStart(element);\n      return;\n    }\n\n    const [ row, col ] = position;\n    if (!row && !col) {\n      this._addStart(element);\n    }\n\n    if (!this.grid[row]) {\n      this.grid[row] = [];\n    }\n\n    if (this.grid[row][col]) {\n      throw new Error('Grid is occupied please ensure the place you insert at is not occupied');\n    }\n\n    this.grid[row][col] = element;\n  }\n\n  createRow(afterIndex) {\n    if (!afterIndex && !Number.isInteger(afterIndex)) {\n      this.grid.push([]);\n    } else {\n      this.grid.splice(afterIndex + 1, 0, []);\n    }\n  }\n\n  _addStart(element) {\n    this.grid.push([ element ]);\n  }\n\n  addAfter(element, newElement) {\n    if (!element) {\n      this._addStart(newElement);\n    }\n    const [ row, col ] = this.find(element);\n    this.grid[row].splice(col + 1, 0, newElement);\n  }\n\n  addBelow(element, newElement) {\n    if (!element) {\n      this._addStart(newElement);\n    }\n\n    const [ row, col ] = this.find(element);\n\n    // We are at the bottom of the current grid - add empty row below\n    if (!this.grid[row + 1]) {\n      this.grid[row + 1] = [];\n    }\n\n    // The element below is already occupied - insert new row\n    if (this.grid[row + 1][col]) {\n      this.grid.splice(row + 1, 0, []);\n    }\n\n    if (this.grid[row + 1][col]) {\n      throw new Error('Grid is occupied and we could not find a place - this should not happen');\n    }\n\n    this.grid[row + 1][col] = newElement;\n  }\n\n  find(element) {\n    let row, col;\n    row = this.grid.findIndex((row) => {\n      col = row.findIndex((el) => {\n        return el === element;\n      });\n\n      return col !== -1;\n    });\n\n    return [ row, col ];\n  }\n\n  get(row, col) {\n    return (this.grid[row] || [])[col];\n  }\n\n  getElementsInRange({ row: startRow, col: startCol }, { row: endRow, col: endCol }) {\n    const elements = [];\n\n    if (startRow > endRow) {\n      [ startRow, endRow ] = [ endRow, startRow ];\n    }\n\n    if (startCol > endCol) {\n      [ startCol, endCol ] = [ endCol, startCol ];\n    }\n\n    for (let row = startRow; row <= endRow; row++) {\n      for (let col = startCol; col <= endCol; col++) {\n        const element = this.get(row, col);\n\n        if (element) {\n          elements.push(element);\n        }\n      }\n    }\n\n    return elements;\n  }\n\n  adjustGridPosition(element) {\n    let [ row, col ] = this.find(element);\n    const [ , maxCol ] = this.getGridDimensions();\n\n    if (col < maxCol - 1) {\n\n      // add element in next column\n      this.grid[row].length = maxCol;\n      this.grid[row][maxCol] = element;\n      this.grid[row][col] = null;\n\n    }\n  }\n\n  adjustRowForMultipleIncoming(elements, currentElement) {\n    const results = elements.map(element => this.find(element));\n\n    // filter only rows that currently exist, excluding any future or non-existent rows\n    const lowestRow = Math.min(...results\n      .map(result => result[0])\n      .filter(row => row >= 0));\n\n    const [ row , col ] = this.find(currentElement);\n\n    // if element doesn't already exist in current row, add element\n    if (lowestRow < row && !this.grid[lowestRow][col]) {\n      this.grid[lowestRow][col] = currentElement;\n      this.grid[row][col] = null;\n    }\n  }\n\n  adjustColumnForMultipleIncoming(elements, currentElement) {\n    const results = elements.map(element => this.find(element));\n\n    // filter only col that currently exist, excluding any future or non-existent col\n    const maxCol = Math.max(...results\n      .map(result => result[1])\n      .filter(col => col >= 0));\n\n    const [ row , col ] = this.find(currentElement);\n\n    // add to the next column\n    if (maxCol + 1 > col) {\n      this.grid[row][maxCol + 1] = currentElement;\n      this.grid[row][col] = null;\n    }\n  }\n\n  getAllElements() {\n    const elements = [];\n\n    for (let row = 0; row < this.grid.length; row++) {\n      for (let col = 0; col < this.grid[row].length; col++) {\n        const element = this.get(row, col);\n\n        if (element) {\n          elements.push(element);\n        }\n      }\n    }\n\n    return elements;\n  }\n\n  getGridDimensions() {\n    const numRows = this.grid.length;\n    let maxCols = 0;\n\n    for (let i = 0; i < numRows; i++) {\n      const currentRowLength = this.grid[i].length;\n      if (currentRowLength > maxCols) {\n        maxCols = currentRowLength;\n      }\n    }\n\n    return [ numRows , maxCols ];\n  }\n\n  elementsByPosition() {\n    const elements = [];\n\n    this.grid.forEach((row, rowIndex) => {\n      row.forEach((element, colIndex) => {\n        if (!element) {\n          return;\n        }\n        elements.push({\n          element,\n          row: rowIndex,\n          col: colIndex\n        });\n      });\n    });\n\n    return elements;\n  }\n\n  getElementsTotal() {\n    const flattenedGrid = this.grid.flat();\n    const uniqueElements = new Set(flattenedGrid.filter(value => value));\n    return uniqueElements.size;\n  }\n\n  /**\n   *\n   * @param {number} afterIndex - number is integer\n   * @param {number=} colCount - number is positive integer\n   */\n  createCol(afterIndex, colCount) {\n    this.grid.forEach((row, rowIndex) => {\n      this.expandRow(rowIndex, afterIndex, colCount);\n    });\n  }\n\n  /**\n   * @param {number} rowIndex - is positive integer\n   * @param {number} afterIndex - is integer\n   * @param {number=} colCount - is positive integer\n   */\n  expandRow(rowIndex, afterIndex, colCount) {\n    if (!Number.isInteger(rowIndex) || rowIndex < 0 || rowIndex > this.rowCount - 1) return;\n\n    const placeholder = Number.isInteger(colCount) && colCount > 0 ? Array(colCount) : Array(1);\n\n    const row = this.grid[rowIndex];\n\n    if (!afterIndex && !Number.isInteger(afterIndex)) {\n      row.splice(row.length, 0, ...placeholder);\n    } else {\n      row.splice(afterIndex + 1, 0, ...placeholder);\n    }\n  }\n}","import { assign, map, pick } from 'min-dash';\n\n\nexport class DiFactory {\n  constructor(moddle) {\n    this.moddle = moddle;\n  }\n\n  create(type, attrs) {\n    return this.moddle.create(type, attrs || {});\n  }\n\n  createDiBounds(bounds) {\n    return this.create('dc:Bounds', bounds);\n  }\n\n  createDiLabel() {\n    return this.create('bpmndi:BPMNLabel', {\n      bounds: this.createDiBounds()\n    });\n  }\n\n  createDiShape(semantic, bounds, attrs) {\n    return this.create('bpmndi:BPMNShape', assign({\n      bpmnElement: semantic,\n      bounds: this.createDiBounds(bounds)\n    }, attrs));\n  }\n\n  createDiWaypoints(waypoints) {\n    var self = this;\n\n    return map(waypoints, function(pos) {\n      return self.createDiWaypoint(pos);\n    });\n  }\n\n  createDiWaypoint(point) {\n    return this.create('dc:Point', pick(point, [ 'x', 'y' ]));\n  }\n\n  createDiEdge(semantic, waypoints, attrs) {\n    return this.create('bpmndi:BPMNEdge', assign({\n      bpmnElement: semantic,\n      waypoint: this.createDiWaypoints(waypoints)\n    }, attrs));\n  }\n\n  createDiPlane(attrs) {\n    return this.create('bpmndi:BPMNPlane', attrs);\n  }\n\n  createDiDiagram(attrs) {\n    return this.create('bpmndi:BPMNDiagram', attrs);\n  }\n}","import {\n  DEFAULT_CELL_HEIGHT,\n  DEFAULT_CELL_WIDTH,\n  connectElements,\n  getBounds,\n  getDockingPoint,\n  getMid\n} from '../utils/layoutUtil.js';\n\nexport default {\n  'addToGrid': ({ element, grid, visited }) => {\n    const nextElements = [];\n\n    const attachedOutgoing = (element.attachers || [])\n      .map(attacher => (attacher.outgoing || []).reverse())\n      .flat()\n      .map(out => out.targetRef);\n\n    // handle boundary events\n    attachedOutgoing.forEach((nextElement, index, arr) => {\n      if (visited.has(nextElement)) {\n        return;\n      }\n\n      // Add below and to the right of the element\n      insertIntoGrid(nextElement, element, grid);\n      nextElements.push(nextElement);\n      visited.add(nextElement);\n    });\n\n    return nextElements;\n  },\n\n  'createElementDi': ({ element, row, col, diFactory, shift }) => {\n    const hostBounds = getBounds(element, row, col, shift);\n\n    const DIs = [];\n    (element.attachers || []).forEach((att, i, arr) => {\n      att.gridPosition = { row, col };\n      const bounds = getBounds(att, row, col, shift, element);\n\n      // distribute along lower edge\n      bounds.x = hostBounds.x + (i + 1) * (hostBounds.width / (arr.length + 1)) - bounds.width / 2;\n\n      const attacherDi = diFactory.createDiShape(att, bounds, {\n        id: att.id + '_di'\n      });\n      att.di = attacherDi;\n      att.gridPosition = { row, col };\n\n      DIs.push(attacherDi);\n    });\n\n    return DIs;\n  },\n\n  'createConnectionDi': ({ element, row, col, layoutGrid, diFactory, shift }) => {\n    const attachers = element.attachers || [];\n\n    return attachers.flatMap(att => {\n      const outgoing = att.outgoing || [];\n\n      return outgoing.map(out => {\n        const target = out.targetRef;\n        const waypoints = connectElements(att, target, layoutGrid);\n\n        // Correct waypoints if they don't automatically attach to the bottom\n        ensureExitBottom(att, waypoints, [ row, col ]);\n\n        return diFactory.createDiEdge(out, waypoints, {\n          id: out.id + '_di'\n        });\n      });\n    });\n  }\n};\n\n\nfunction insertIntoGrid(newElement, host, grid) {\n  const [ row, col ] = grid.find(host);\n\n  // Grid is occupied\n  if (grid.get(row + 1, col) || grid.get(row + 1, col + 1)) {\n    grid.createRow(row);\n  }\n\n  grid.add(newElement, [ row + 1, col + 1 ]);\n}\n\nfunction ensureExitBottom(source, waypoints, [ row, col ]) {\n\n  const sourceDi = source.di;\n  const sourceBounds = sourceDi.get('bounds');\n  const sourceMid = getMid(sourceBounds);\n\n  const dockingPoint = getDockingPoint(sourceMid, sourceBounds, 'b');\n  if (waypoints[0].x === dockingPoint.x && waypoints[0].y === dockingPoint.y) {\n    return;\n  }\n\n  const baseSourceGrid = source.grid || source.attachedToRef?.grid;\n\n  if (waypoints.length === 2) {\n    const newStart = [\n      dockingPoint,\n      { x: dockingPoint.x, y: !baseSourceGrid ? (row + 1) * DEFAULT_CELL_HEIGHT : (row + baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n      { x: !baseSourceGrid ? (col + 1) * DEFAULT_CELL_WIDTH : (col + baseSourceGrid.getGridDimensions()[1] + 1) * DEFAULT_CELL_WIDTH, y: !baseSourceGrid ? (row + 1) * DEFAULT_CELL_HEIGHT : (row + baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n      { x: !baseSourceGrid ? (col + 1) * DEFAULT_CELL_WIDTH : (col + baseSourceGrid.getGridDimensions()[1] + 1) * DEFAULT_CELL_WIDTH, y: !baseSourceGrid ? (row + 0.5) * DEFAULT_CELL_HEIGHT : row * DEFAULT_CELL_HEIGHT + DEFAULT_CELL_HEIGHT / 2 },\n    ];\n\n    waypoints.splice(0, 1, ...newStart);\n    return;\n  }\n\n  // add waypoints to exit bottom and connect to existing path\n  const newStart = [\n    dockingPoint,\n    { x: dockingPoint.x, y: !baseSourceGrid ? (row + 1) * DEFAULT_CELL_HEIGHT : (row + baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n    { x: waypoints[1].x, y: !baseSourceGrid ? (row + 1) * DEFAULT_CELL_HEIGHT : (row + baseSourceGrid.getGridDimensions()[0] + 1) * DEFAULT_CELL_HEIGHT },\n  ];\n\n  waypoints.splice(0, 1, ...newStart);\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n  'createElementDi': ({ element, row, col, diFactory, shift }) => {\n\n    const bounds = getBounds(element, row, col, shift);\n\n    const options = {\n      id: element.id + '_di'\n    };\n\n    if (is(element, 'bpmn:ExclusiveGateway')) {\n      options.isMarkerVisible = true;\n    }\n\n    if (element.isExpanded) {\n      options.isExpanded = true;\n    }\n\n    const shapeDi = diFactory.createDiShape(element, bounds, options);\n    element.di = shapeDi;\n    element.gridPosition = { row, col };\n\n    return shapeDi;\n  }\n};","import { connectElements } from '../utils/layoutUtil.js';\nimport { is } from '../di/DiUtil.js';\nimport { findElementInTree } from '../utils/elementUtils.js';\n\n\nexport default {\n  'addToGrid': ({ element, grid, visited, stack }) => {\n    let nextElements = [];\n\n    // Handle outgoing paths\n    const outgoing = (element.outgoing || [])\n      .map(out => out.targetRef)\n      .filter(el => el);\n\n    let previousElement = null;\n\n    if (outgoing.length > 1 && isNextElementTasks(outgoing)) {\n      grid.adjustGridPosition(element);\n    }\n\n    outgoing.forEach((nextElement, index, arr) => {\n      if (visited.has(nextElement)) {\n        return;\n      }\n\n      // Prevents revisiting future incoming elements and ensures proper traversal without early exit.\n      if ((previousElement || stack.length > 0) && isFutureIncoming(nextElement, visited) && !checkForLoop(nextElement, visited)) {\n        return;\n      }\n\n      if (!previousElement) {\n        grid.addAfter(element, nextElement);\n      }\n\n      else if (is(element, 'bpmn:ExclusiveGateway') && is(nextElement, 'bpmn:ExclusiveGateway')) {\n        grid.addAfter(previousElement, nextElement);\n      }\n      else {\n        grid.addBelow(arr[index - 1], nextElement);\n      }\n\n      // Is self-looping\n      if (nextElement !== element) {\n        previousElement = nextElement;\n      }\n\n      nextElements.unshift(nextElement);\n      visited.add(nextElement);\n    });\n\n    // Sort elements by priority to ensure proper stack placement\n    nextElements = sortByType(nextElements, 'bpmn:ExclusiveGateway'); // TODO: sort by priority\n    return nextElements;\n  },\n\n  'createConnectionDi': ({ element, row, col, layoutGrid, diFactory }) => {\n    const outgoing = element.outgoing || [];\n\n    return outgoing.map(out => {\n      const target = out.targetRef;\n      const waypoints = connectElements(element, target, layoutGrid);\n\n      const connectionDi = diFactory.createDiEdge(out, waypoints, {\n        id: out.id + '_di'\n      });\n\n      return connectionDi;\n    });\n\n  }\n};\n\n\n// helpers /////\n\nfunction sortByType(arr, type) {\n  const nonMatching = arr.filter(item => !is(item,type));\n  const matching = arr.filter(item => is(item,type));\n\n  return [ ...matching, ...nonMatching ];\n\n}\n\nfunction checkForLoop(element, visited) {\n  for (const incomingElement of element.incoming) {\n    if (!visited.has(incomingElement.sourceRef)) {\n      return findElementInTree(element, incomingElement.sourceRef);\n    }\n  }\n}\n\n\nfunction isFutureIncoming(element, visited) {\n  if (element.incoming.length > 1) {\n    for (const incomingElement of element.incoming) {\n      if (!visited.has(incomingElement.sourceRef)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction isNextElementTasks(elements) {\n  return elements.every(element => is(element, 'bpmn:Task'));\n}","export default {\n  'addToGrid': ({ element, grid, visited }) => {\n    const nextElements = [];\n\n    const incoming = (element.incoming || [])\n      .map(out => out.sourceRef)\n      .filter(el => el);\n\n    // adjust the row if it is empty\n    if (incoming.length > 1) {\n      grid.adjustColumnForMultipleIncoming(incoming, element);\n      grid.adjustRowForMultipleIncoming(incoming, element);\n    }\n    return nextElements;\n  },\n};","import { default as attacherHandler } from './attachersHandler.js';\nimport { default as elementHandler } from './elementHandler.js';\nimport { default as outgoingHandler } from './outgoingHandler.js';\nimport { default as incomingHandler } from './incomingHandler.js';\n\nexport const handlers = [ elementHandler, incomingHandler, outgoingHandler, attacherHandler ];","import { BpmnModdle } from 'bpmn-moddle';\nimport { isBoundaryEvent, isConnection } from './utils/elementUtils.js';\nimport { DEFAULT_CELL_HEIGHT, DEFAULT_CELL_WIDTH } from './utils/layoutUtil.js';\nimport { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is, getDefaultSize } from './di/DiUtil.js';\nimport { handlers } from './handler/index.js';\nimport { isFunction } from 'min-dash';\n\nexport class Layouter {\n  constructor() {\n    this.moddle = new BpmnModdle();\n    this.diFactory = new DiFactory(this.moddle);\n    this._handlers = handlers;\n  }\n\n  handle(operation, options) {\n    return this._handlers\n      .filter(handler => isFunction(handler[operation]))\n      .map(handler => handler[operation](options));\n\n  }\n\n  async layoutProcess(xml) {\n    const moddleObj = await this.moddle.fromXML(xml);\n    const { rootElement } = moddleObj;\n\n    this.diagram = rootElement;\n\n    const firstRootProcess = this.getProcess();\n\n    if (firstRootProcess) {\n\n      this.setExpandedPropertyToModdleElements(moddleObj);\n\n      this.setExecutedProcesses(firstRootProcess);\n\n      this.createGridsForProcesses();\n\n      this.cleanDi();\n\n      this.createRootDi(firstRootProcess);\n\n      this.drawProcesses();\n    }\n\n    return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n  }\n\n  createGridsForProcesses() {\n    const processes = this.layoutedProcesses.sort((a, b) => b.level - a.level);\n\n    // create and add grids for each process\n    // root processes should be processed last for element expanding\n    for (const process of processes) {\n\n      // add base grid with collapsed elements\n      process.grid = this.createGridLayout(process);\n\n      expandGridHorizontally(process.grid);\n      expandGridVertically(process.grid);\n\n      if (process.isExpanded) {\n        const [ rowCount, colCount ] = process.grid.getGridDimensions();\n        if (rowCount === 0) process.grid.createRow();\n        if (colCount === 0) process.grid.createCol();\n      }\n\n    }\n  }\n\n  setExpandedPropertyToModdleElements(bpmnModel) {\n    const allElements = bpmnModel.elementsById;\n    if (allElements) {\n      for (const element of Object.values(allElements)) {\n        if (element.$type === 'bpmndi:BPMNShape' && element.isExpanded === true) element.bpmnElement.isExpanded = true;\n      }\n    }\n  }\n\n  setExecutedProcesses(firstRootProcess) {\n    this.layoutedProcesses = [];\n\n    const executionStack = [ firstRootProcess ];\n\n    while (executionStack.length > 0) {\n      const executedProcess = executionStack.pop();\n      this.layoutedProcesses.push(executedProcess);\n      executedProcess.level = executedProcess.$parent === this.diagram ? 0 : executedProcess.$parent.level + 1;\n\n      const nextProcesses = executedProcess.get('flowElements').filter(flowElement => is(flowElement, 'bpmn:SubProcess'));\n\n      executionStack.splice(executionStack.length, 0, ...nextProcesses);\n    }\n  }\n\n  cleanDi() {\n    this.diagram.diagrams = [];\n  }\n\n  createGridLayout(root) {\n    const grid = new Grid();\n\n    const flowElements = root.flowElements || [];\n    const elements = flowElements.filter(el => !is(el,'bpmn:SequenceFlow'));\n\n    // check for empty process/subprocess\n    if (!flowElements) {\n      return grid;\n    }\n\n    bindBoundaryEventsWithHosts (flowElements);\n\n    // Depth-first-search\n    const visited = new Set();\n    while (visited.size < elements.filter(element => !element.attachedToRef).length) {\n      const startingElements = flowElements.filter(el => {\n        return !isConnection(el) &&\n            !isBoundaryEvent(el) &&\n            (!el.incoming || !hasOtherIncoming(el)) &&\n            !visited.has(el);\n      });\n\n      const stack = [ ...startingElements ];\n\n      startingElements.forEach(el => {\n        grid.add(el);\n        visited.add(el);\n      });\n\n      this.handleGrid(grid,visited,stack);\n\n      if (grid.getElementsTotal() !== elements.length) {\n        const gridElements = grid.getAllElements();\n        const missingElements = elements.filter(el => !gridElements.includes(el) && !isBoundaryEvent(el));\n        if (missingElements.length > 0) {\n          stack.push(missingElements[0]);\n          grid.add(missingElements[0]);\n          visited.add(missingElements[0]);\n          this.handleGrid(grid,visited,stack);\n        }\n      }\n    }\n    return grid;\n  }\n\n  generateDi(layoutGrid , shift, procDi) {\n    const diFactory = this.diFactory;\n\n    const prePlaneElement = procDi ? procDi : this.diagram.diagrams[0];\n\n    const planeElement = prePlaneElement.plane.get('planeElement');\n\n    // Step 1: Create DI for all elements\n    layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n      const dis = this\n        .handle('createElementDi', { element, row, col, layoutGrid, diFactory, shift })\n        .flat();\n\n      planeElement.push(...dis);\n    });\n\n    // Step 2: Create DI for all connections\n    layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n      const dis = this\n        .handle('createConnectionDi', { element, row, col, layoutGrid, diFactory, shift })\n        .flat();\n\n      planeElement.push(...dis);\n    });\n  }\n\n  handleGrid(grid, visited, stack) {\n    while (stack.length > 0) {\n      const currentElement = stack.pop();\n\n      const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited, stack });\n\n      nextElements.flat().forEach(el => {\n        stack.push(el);\n        visited.add(el);\n      });\n    }\n  }\n\n  getProcess() {\n    return this.diagram.get('rootElements').find(el => el.$type === 'bpmn:Process');\n  }\n\n  createRootDi(processes) {\n    this.createProcessDi(processes);\n  }\n\n  createProcessDi(element) {\n    const diFactory = this.diFactory;\n\n    const planeDi = diFactory.createDiPlane({\n      id: 'BPMNPlane_' + element.id,\n      bpmnElement: element\n    });\n    const diagramDi = diFactory.createDiDiagram({\n      id: 'BPMNDiagram_' + element.id,\n      plane: planeDi\n    });\n\n    const diagram = this.diagram;\n\n    diagram.diagrams.push(diagramDi);\n\n    return diagramDi;\n  }\n\n  /**\n   * Draw processes.\n   * Root processes should be processed first for element expanding\n   */\n  drawProcesses() {\n    const sortedProcesses = this.layoutedProcesses.sort((a, b) => a.level - b.level);\n\n    for (const process of sortedProcesses) {\n\n      // draw processes in expanded elements\n      if (process.isExpanded) {\n        const baseProcDi = this.getElementDi(process);\n        const diagram = this.getProcDi(baseProcDi);\n        let { x, y } = baseProcDi.bounds;\n        const { width, height } = getDefaultSize(process);\n        x += DEFAULT_CELL_WIDTH / 2 - width / 4;\n        y += DEFAULT_CELL_HEIGHT - height - height / 4;\n        this.generateDi(process.grid, { x, y }, diagram);\n        continue;\n      }\n\n      // draw other processes\n      const diagram = this.diagram.diagrams.find(diagram => diagram.plane.bpmnElement === process);\n      this.generateDi(process.grid, { x: 0, y: 0 }, diagram);\n    }\n  }\n\n  getElementDi(element) {\n    return this.diagram.diagrams\n      .map(diagram => diagram.plane.planeElement).flat()\n      .find(item => item.bpmnElement === element);\n  }\n\n  getProcDi(element) {\n    return this.diagram.diagrams.find(diagram => diagram.plane.planeElement.includes(element));\n  }\n}\n\nexport function bindBoundaryEventsWithHosts(elements) {\n  const boundaryEvents = elements.filter(element => isBoundaryEvent(element));\n  boundaryEvents.forEach(boundaryEvent => {\n    const attachedTask = boundaryEvent.attachedToRef;\n    const attachers = attachedTask.attachers || [];\n    attachers.push(boundaryEvent);\n    attachedTask.attachers = attachers;\n  });\n}\n\n/**\n * Check grid by columns.\n * If column has elements with isExpanded === true,\n * find the maximum size of elements grids and expand the parent grid horizontally.\n * @param grid\n */\nfunction expandGridHorizontally(grid) {\n  const [ numRows , maxCols ] = grid.getGridDimensions();\n  for (let i = maxCols - 1 ; i >= 0; i--) {\n    const elementsInCol = [];\n    for (let j = 0; j < numRows; j++) {\n      const candidate = grid.get(j, i);\n      if (candidate && candidate.isExpanded) elementsInCol.push(candidate);\n    }\n\n    if (elementsInCol.length === 0) continue;\n\n    const maxColCount = elementsInCol.reduce((acc,cur) => {\n      const [ ,curCols ] = cur.grid.getGridDimensions();\n      if (acc === undefined || curCols > acc) return curCols;\n      return acc;\n    }, undefined);\n\n    const shift = !maxColCount ? 2 : maxColCount;\n    grid.createCol(i, shift);\n  }\n}\n\n/**\n * Check grid by rows.\n * If row has elements with isExpanded === true,\n * find the maximum size of elements grids and expand the parent grid vertically.\n * @param grid\n */\nfunction expandGridVertically(grid) {\n  const [ numRows , maxCols ] = grid.getGridDimensions();\n\n  for (let i = numRows - 1 ; i >= 0; i--) {\n    const elementsInRow = [];\n    for (let j = 0; j < maxCols; j++) {\n      const candidate = grid.get(i, j);\n      if (candidate && candidate.isExpanded) elementsInRow.push(candidate);\n    }\n\n    if (elementsInRow.length === 0) continue;\n\n    const maxRowCount = elementsInRow.reduce((acc,cur) => {\n      const [ curRows ] = cur.grid.getGridDimensions();\n      if (acc === undefined || curRows > acc) return curRows;\n      return acc;\n    }, undefined);\n\n    const shift = !maxRowCount ? 1 : maxRowCount;\n\n    // expand the parent grid vertically\n    for (let index = 0; index < shift; index++) {\n      grid.createRow(i);\n    }\n  }\n}\n\nfunction hasOtherIncoming(element) {\n  const fromHost = element.incoming?.filter(edge => edge.sourceRef !== element && edge.sourceRef.attachedToRef === undefined) || [];\n\n  const fromAttached = element.incoming?.filter(edge => edge.sourceRef !== element\n      && edge.sourceRef.attachedToRef !== element);\n\n  return fromHost?.length > 0 || fromAttached?.length > 0;\n}\n","import { Layouter } from './Layouter.js';\n\nexport function layoutProcess(xml) {\n  return new Layouter().layoutProcess(xml);\n}\n"],"names":["assign","map","pick","BpmnModdle","isFunction"],"mappings":"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"}