{"version":3,"file":"index.cjs","sources":["../lib/utils/elementUtils.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.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}","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) {\n      this.grid.push([]);\n    }\n\n    this.grid.splice(afterIndex + 1, 0, []);\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\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  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\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}","export function getDefaultSize(element) {\n  if (is(element, 'bpmn:SubProcess')) {\n    return { width: 100, height: 80 };\n  }\n\n  if (is(element, 'bpmn:Task')) {\n    return { width: 100, height: 80 };\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: 100, height: 30 };\n  }\n\n  return { width: 100, height: 80 };\n}\n\nexport function is(element, type) {\n  return element.$instanceOf(type);\n}\n","import { 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\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 coloumns to route connections\n     * if direct connection is not possible.\n     * @param {*} source\n     * @param {*} target\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  // 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: x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n      { x: x + DEFAULT_CELL_WIDTH, y: y },\n      { x: targetMid.x, y: y },\n      getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n    ];\n  }\n\n  // connect horizontally\n  if (dY === 0) {\n    if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n      // Route on top\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 't'),\n        { x: sourceMid.x, y: sourceMid.y - DEFAULT_CELL_HEIGHT / 2 },\n        { x: targetMid.x, y: sourceMid.y - DEFAULT_CELL_HEIGHT / 2 },\n        getDockingPoint(targetMid, targetBounds, 't')\n      ];\n    } else {\n\n      // if space is clear, connect directly\n      return [\n        getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource),\n        getDockingPoint(targetMid, targetBounds, 'h', dockingTarget)\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, attachedTo) {\n  const { width, height } = getDefaultSize(element);\n\n  // Center in cell\n  if (!attachedTo) {\n    return {\n      width, height,\n      x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2,\n      y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2\n    };\n  }\n\n  const hostBounds = getBounds(attachedTo, row, col);\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","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(att => att.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    });\n\n    return nextElements;\n  },\n\n  'createElementDi': ({ element, row, col, diFactory }) => {\n    const hostBounds = getBounds(element, row, col);\n\n    const DIs = [];\n    (element.attachers || []).forEach((att, i, arr) => {\n      att.gridPosition = { row, col };\n      const bounds = getBounds(att, row, col, 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 }) => {\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        const connectionDi = diFactory.createDiEdge(out, waypoints, {\n          id: out.id + '_di'\n        });\n\n        return connectionDi;\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  // Host has element directly after, add space\n  if (grid.get(row, col + 1)) {\n    grid.addAfter(host, null);\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  if (waypoints.length === 2) {\n    const newStart = [\n      dockingPoint,\n      { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n      { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n      { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 0.5) * DEFAULT_CELL_HEIGHT },\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: (row + 1) * DEFAULT_CELL_HEIGHT },\n    { x: waypoints[1].x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n  ];\n\n  waypoints.splice(0, 1, ...newStart);\n  return;\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n  'createElementDi': ({ element, row, col, diFactory }) => {\n\n    const bounds = getBounds(element, row, col);\n\n    const options = {\n      id: element.id + '_di'\n    };\n\n    if (is(element, 'bpmn:ExclusiveGateway')) {\n      options.isMarkerVisible = 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';\n\nexport default {\n  'addToGrid': ({ element, grid, visited }) => {\n    const 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    outgoing.forEach((nextElement, index, arr) => {\n      if (visited.has(nextElement)) {\n        return;\n      }\n\n      if (!previousElement) {\n        grid.addAfter(element, 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    return nextElements;\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};","import { default as attacherHandler } from './attachersHandler.js';\nimport { default as elementHandler } from './elementHandler.js';\nimport { default as outgoingHandler } from './outgoingHandler.js';\n\nexport const handlers = [ elementHandler, outgoingHandler, attacherHandler ];","import BPMNModdle from 'bpmn-moddle';\nimport { isBoundaryEvent, isConnection } from './utils/elementUtils.js';\nimport { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is } 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 { rootElement } = await this.moddle.fromXML(xml);\n\n    this.diagram = rootElement;\n\n    const root = this.getProcess();\n\n    this.cleanDi();\n    this.handlePlane(root);\n\n    return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n  }\n\n  handlePlane(planeElement) {\n    const layout = this.createGridLayout(planeElement);\n    this.generateDi(planeElement, layout);\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\n    const startingElements = flowElements.filter(el => {\n      return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0);\n    });\n\n    const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));\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    // Depth-first-search\n    const stack = [ ...startingElements ];\n    const visited = new Set();\n\n    startingElements.forEach(el => {\n      grid.add(el);\n      visited.add(el);\n    });\n\n    while (stack.length > 0) {\n      const currentElement = stack.pop();\n\n      if (is(currentElement, 'bpmn:SubProcess')) {\n        this.handlePlane(currentElement);\n      }\n\n      const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited });\n\n      nextElements.flat().forEach(el => {\n        stack.push(el);\n        visited.add(el);\n      });\n    }\n\n    return grid;\n  }\n\n  generateDi(root, layoutGrid) {\n    const diFactory = this.diFactory;\n\n    // Step 0: Create Root element\n    const diagram = this.diagram;\n\n    var planeDi = diFactory.createDiPlane({\n      id: 'BPMNPlane_' + root.id,\n      bpmnElement: root\n    });\n    var diagramDi = diFactory.createDiDiagram({\n      id: 'BPMNDiagram_' + root.id,\n      plane: planeDi\n    });\n\n    // deepest subprocess is added first - insert at the front\n    diagram.diagrams.unshift(diagramDi);\n\n    const planeElement = planeDi.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 })\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 })\n        .flat();\n\n      planeElement.push(...dis);\n    });\n  }\n\n\n  getProcess() {\n    return this.diagram.get('rootElements').find(el => el.$type === 'bpmn:Process');\n  }\n}\n","import { Layouter } from './Layouter.js';\n\nexport function layoutProcess(xml) {\n  return new Layouter().layoutProcess(xml);\n}\n"],"names":["assign","map","pick","isFunction"],"mappings":"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"}