bpmn-auto-layout 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1027,7 +1027,7 @@ class Layouter {
1027
1027
  this.layoutedProcesses.push(executedProcess);
1028
1028
  executedProcess.level = executedProcess.$parent === this.diagram ? 0 : executedProcess.$parent.level + 1;
1029
1029
 
1030
- const nextProcesses = executedProcess.flowElements?.filter(flowElement => flowElement.$type === 'bpmn:SubProcess') || [];
1030
+ const nextProcesses = executedProcess.get('flowElements').filter(flowElement => is(flowElement, 'bpmn:SubProcess'));
1031
1031
 
1032
1032
  executionStack.splice(executionStack.length, 0, ...nextProcesses);
1033
1033
  }
@@ -1 +1 @@
1
- {"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.flowElements?.filter(flowElement => flowElement.$type === '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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"}
1
+ {"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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"}
package/dist/index.js CHANGED
@@ -1025,7 +1025,7 @@ class Layouter {
1025
1025
  this.layoutedProcesses.push(executedProcess);
1026
1026
  executedProcess.level = executedProcess.$parent === this.diagram ? 0 : executedProcess.$parent.level + 1;
1027
1027
 
1028
- const nextProcesses = executedProcess.flowElements?.filter(flowElement => flowElement.$type === 'bpmn:SubProcess') || [];
1028
+ const nextProcesses = executedProcess.get('flowElements').filter(flowElement => is(flowElement, 'bpmn:SubProcess'));
1029
1029
 
1030
1030
  executionStack.splice(executionStack.length, 0, ...nextProcesses);
1031
1031
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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.flowElements?.filter(flowElement => flowElement.$type === '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":[],"mappings":";;;AAAO,SAAS,YAAY,CAAC,OAAO,EAAE;AACtC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS;AAC5B;;AAEO,SAAS,eAAe,CAAC,OAAO,EAAE;AACzC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa;AAChC;;AAEO,SAAS,iBAAiB,CAAC,cAAc,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI,GAAG,EAAE,EAAE;;AAEtF,EAAE,IAAI,cAAc,KAAK,aAAa,EAAE,OAAO,IAAI;;AAEnD,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,OAAO,KAAK;;AAE/C,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;;AAE7B;AACA,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;;AAEpF;AACA,EAAE,KAAK,IAAI,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,EAAE;AAC7E,IAAI,IAAI,iBAAiB,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE;AAChE,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,KAAK;AACd;;AC3BO,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,kBAAkB,GAAG,GAAG;;AAE9B,SAAS,cAAc,CAAC,OAAO,EAAE;AACxC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE;AACtC,IAAI,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACrE,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACrE,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;AACnC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AACpC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;AACjC,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AACpC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE;AACvC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE;AAC/C,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AACpC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,yBAAyB,CAAC,EAAE;AAC9C,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AACpC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE;AAC1C,IAAI,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE;AACpD,EAAE;;AAEF,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACnE;;AAEO,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE;AAClC,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC;;AC3CO,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,mBAAmB,GAAG,GAAG;;AAE/B,SAAS,MAAM,CAAC,MAAM,EAAE;AAC/B,EAAE,OAAO;AACT,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;AAClC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG;AAClC,GAAG;AACH;;AAEO,SAAS,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,gBAAgB,GAAG,GAAG,EAAE,iBAAiB,GAAG,UAAU,EAAE;;AAE1G;AACA;AACA,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,GAAG,GAAG;AACjE,EAAE;;AAEF,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,GAAG,GAAG;AAChE,EAAE;;AAEF,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AAC1D,EAAE;;AAEF,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAC5E,EAAE;;AAEF,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE;AAC7E,EAAE;;AAEF,EAAE,IAAI,gBAAgB,KAAK,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAC1D,EAAE;;AAEF,EAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,gBAAgB,GAAG,GAAG,CAAC;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;AAC5D,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC5B,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE;;AAE5B,EAAE,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7C,EAAE,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE7C,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AACxC,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;;AAExC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG;AAC9D,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG;;AAE9D,EAAE,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AACrF,EAAE,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;;AAErF,EAAE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI;AAClE,EAAE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI;;AAEpC;AACA,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC5B,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;AAC5F,IAAI,OAAO;AACX,MAAM,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AAClE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AAC3I,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE;AACjI,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC9B,MAAM,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa;AACjE,KAAK;AACL,EAAE;;AAEF;AACA,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;;AAEd,IAAI,MAAM,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;;AAEzF,IAAI,MAAM,OAAO,GAAG,mBAAmB,GAAG,CAAC;;AAE3C,IAAI,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE;;AAEpC;AACA,MAAM,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE3E,MAAM,IAAI,WAAW,EAAE;AACvB,QAAQ,OAAO;AACf,UAAU,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACvD,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,WAAW,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AACtL,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,WAAW,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AACtL,UAAU,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACtD,SAAS;AACT,MAAM;;AAEN,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAChJ,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAChJ,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACpD,OAAO;AACP,IAAI,CAAC,MAAM;;AAEX;AACA,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO;;AAEzC,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AACpC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;AACpC,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACpD,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;AAChB,IAAI,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;AACzD,MAAM,MAAM,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;;AAE3F;AACA,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAChJ,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAChJ,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACpD,OAAO;AACP,IAAI,CAAC,MAAM;;AAEX;AACA,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AACrF,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AACpF,MAAM,IAAI,cAAc,EAAE;AAC1B,QAAQ,UAAU,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC;AAC/D,MAAM;;AAEN,MAAM,IAAI,cAAc,EAAE;AAC1B,QAAQ,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC;AAC9D,MAAM;AACN,MAAM,OAAO;AACb,QAAQ,UAAU;AAClB,QAAQ;AACR,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;AAChB,IAAI,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;;AAEzD;AACA,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,mBAAmB,GAAG,CAAC;AAC9D,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AACnE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE;AAC7E,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE;AACpD,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;AACnF,OAAO;AACP,IAAI,CAAC,MAAM;;AAEX;AACA,MAAM,OAAO,EAAE,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AAC3E,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa;AACnE,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE5E,EAAE,IAAI,eAAe,EAAE;AACvB,IAAI,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;AAClG,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC;;AAEhG,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE;;AAEzH,IAAI,OAAO;AACX,MAAM,UAAU;AAChB,MAAM,QAAQ;AACd,MAAM;AACN,KAAK;AACL,EAAE;AACF,EAAE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,mBAAmB,GAAG,CAAC;;AAE1D,EAAE,OAAO;AACT,IAAI,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AAChE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AAC/D,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE;AACzE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE;AACzE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AAC/D,IAAI,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa;AAC/D,GAAG;AACH;;AAEA;AACO,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE;AAChD,EAAE,OAAO;AACT,IAAI,KAAK,EAAE,kBAAkB;AAC7B,IAAI,MAAM,EAAE,mBAAmB;AAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,kBAAkB;AAC/B,IAAI,CAAC,EAAE,GAAG,GAAG;AACb,GAAG;AACH;;AAEO,SAAS,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;AAChE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;AACjD,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK;;AAExB;AACA,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,kBAAkB,GAAG,KAAK,GAAG,KAAK;AAC1G,MAAM,MAAM,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,GAAG,MAAM,GAAG,MAAM;AAC9G,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,kBAAkB,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAC1E,MAAM,CAAC,EAAE,GAAG,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,GAAG;AAC1E,KAAK;AACL,EAAE;;AAEF,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM;;AAEzC,EAAE,OAAO;AACT,IAAI,KAAK,EAAE,MAAM;AACjB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAClE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;AAC/D,GAAG;AACH;;AAEA,SAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;AACzD,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY;AAChE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY;;AAEhE,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;AAClC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;;AAElC,EAAE,IAAI,aAAa,GAAG,CAAC;;AAEvB,EAAE,IAAI,EAAE,EAAE;AACV,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM;AACjI,EAAE;;AAEF,EAAE,IAAI,EAAE,EAAE;AACV,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM;AACjI,EAAE;;AAEF,EAAE,OAAO,aAAa,GAAG,CAAC;AAC1B;;AAEA,SAAS,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;AAC5D,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY;AAChE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY;;AAEhE,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;AAClC,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;;AAElC;AACA,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;AAC7B,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;AACd,IAAI,IAAI,aAAa,GAAG,CAAC;AACzB,IAAI,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;AACxD,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM;AACxG,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM;;AAExG,IAAI,OAAO,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACnD,EAAE,CAAC,MAAM;;AAET;AACA,IAAI,IAAI,aAAa,GAAG,CAAC;AACzB,IAAI,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;;AAExD,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM;AACxG,IAAI,aAAa,IAAI,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM;;AAExG,IAAI,OAAO,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACnD,EAAE;AACF;;;AAGA,SAAS,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;;AAE3D,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM;AACzE,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM;;;AAGzE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9D,EAAE,MAAM,IAAI,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;;AAErD,EAAE,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAChE,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;;AAE/D,EAAE,MAAM,eAAe,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,OAAO,CAAC;;AAE5L,EAAE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAC9C,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACvF,EAAE,CAAC,EAAE,CAAC,CAAC;AACP;;AClTO,MAAM,IAAI,CAAC;AAClB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE;AAClB,EAAE;;AAEF,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE;AACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,MAAM;AACN,IAAI;;AAEJ,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ;AACjC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACzB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACzB,IAAI;;AAEJ,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AAC7B,MAAM,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC;AAC/F,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO;AACjC,EAAE;;AAEF,EAAE,SAAS,CAAC,UAAU,EAAE;AACxB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AACtD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7C,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,CAAC,OAAO,EAAE;AACrB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AAC/B,EAAE;;AAEF,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;AAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAChC,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;AACjD,EAAE;;AAEF,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE;AAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAChC,IAAI;;AAEJ,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;AAE3C;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;AAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;AAC7B,IAAI;;AAEJ;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACtC,IAAI;;AAEJ,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACjC,MAAM,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC;AAChG,IAAI;;AAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU;AACxC,EAAE;;AAEF,EAAE,IAAI,CAAC,OAAO,EAAE;AAChB,IAAI,IAAI,GAAG,EAAE,GAAG;AAChB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK;AACvC,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK;AAClC,QAAQ,OAAO,EAAE,KAAK,OAAO;AAC7B,MAAM,CAAC,CAAC;;AAER,MAAM,OAAO,GAAG,KAAK,EAAE;AACvB,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;AACvB,EAAE;;AAEF,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;AAChB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC;AACtC,EAAE;;AAEF,EAAE,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;AACrF,IAAI,MAAM,QAAQ,GAAG,EAAE;;AAEvB,IAAI,IAAI,QAAQ,GAAG,MAAM,EAAE;AAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;AACjD,IAAI;;AAEJ,IAAI,IAAI,QAAQ,GAAG,MAAM,EAAE;AAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;AACjD,IAAI;;AAEJ,IAAI,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE;AACnD,MAAM,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE;AACrD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;;AAE1C,QAAQ,IAAI,OAAO,EAAE;AACrB,UAAU,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAChC,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF,EAAE,kBAAkB,CAAC,OAAO,EAAE;AAC9B,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACzC,IAAI,MAAM,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;;AAEjD,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE;;AAE1B;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM;AACpC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO;AACtC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;;AAEhC,IAAI;AACJ,EAAE;;AAEF,EAAE,4BAA4B,CAAC,QAAQ,EAAE,cAAc,EAAE;AACzD,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;AAE/D;AACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG;AAClC,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAC9B,OAAO,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;;AAE/B,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;AAEnD;AACA,IAAI,IAAI,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE;AACvD,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc;AAChD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AAChC,IAAI;AACJ,EAAE;;AAEF,EAAE,+BAA+B,CAAC,QAAQ,EAAE,cAAc,EAAE;AAC5D,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;AAE/D;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG;AAC/B,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAC9B,OAAO,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;;AAE/B,IAAI,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;AAEnD;AACA,IAAI,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE;AAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,cAAc;AACjD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AAChC,IAAI;AACJ,EAAE;;AAEF,EAAE,cAAc,GAAG;AACnB,IAAI,MAAM,QAAQ,GAAG,EAAE;;AAEvB,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AACrD,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAC5D,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;;AAE1C,QAAQ,IAAI,OAAO,EAAE;AACrB,UAAU,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAChC,QAAQ;AACR,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF,EAAE,iBAAiB,GAAG;AACtB,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AACpC,IAAI,IAAI,OAAO,GAAG,CAAC;;AAEnB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACtC,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;AAClD,MAAM,IAAI,gBAAgB,GAAG,OAAO,EAAE;AACtC,QAAQ,OAAO,GAAG,gBAAgB;AAClC,MAAM;AACN,IAAI;;AAEJ,IAAI,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE;AAChC,EAAE;;AAEF,EAAE,kBAAkB,GAAG;AACvB,IAAI,MAAM,QAAQ,GAAG,EAAE;;AAEvB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;AACzC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK;AACzC,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU;AACV,QAAQ;AACR,QAAQ,QAAQ,CAAC,IAAI,CAAC;AACtB,UAAU,OAAO;AACjB,UAAU,GAAG,EAAE,QAAQ;AACvB,UAAU,GAAG,EAAE;AACf,SAAS,CAAC;AACV,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,QAAQ;AACnB,EAAE;;AAEF,EAAE,gBAAgB,GAAG;AACrB,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC1C,IAAI,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;AACxE,IAAI,OAAO,cAAc,CAAC,IAAI;AAC9B,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE;AAClC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;AACzC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;AACpD,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;AAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;;AAErF,IAAI,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;;AAE/F,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAEnC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AACtD,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;AACnD,IAAI;AACJ,EAAE;AACF;;ACjPO,MAAM,SAAS,CAAC;AACvB,EAAE,WAAW,CAAC,MAAM,EAAE;AACtB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACxB,EAAE;;AAEF,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAChD,EAAE;;AAEF,EAAE,cAAc,CAAC,MAAM,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;AAC3C,EAAE;;AAEF,EAAE,aAAa,GAAG;AAClB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAC3C,MAAM,MAAM,EAAE,IAAI,CAAC,cAAc;AACjC,KAAK,CAAC;AACN,EAAE;;AAEF,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;AACzC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAClD,MAAM,WAAW,EAAE,QAAQ;AAC3B,MAAM,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;AACxC,KAAK,EAAE,KAAK,CAAC,CAAC;AACd,EAAE;;AAEF,EAAE,iBAAiB,CAAC,SAAS,EAAE;AAC/B,IAAI,IAAI,IAAI,GAAG,IAAI;;AAEnB,IAAI,OAAO,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE;AACxC,MAAM,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACvC,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF,EAAE,gBAAgB,CAAC,KAAK,EAAE;AAC1B,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7D,EAAE;;AAEF,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;AAC3C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;AACjD,MAAM,WAAW,EAAE,QAAQ;AAC3B,MAAM,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS;AAChD,KAAK,EAAE,KAAK,CAAC,CAAC;AACd,EAAE;;AAEF,EAAE,aAAa,CAAC,KAAK,EAAE;AACvB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACjD,EAAE;;AAEF,EAAE,eAAe,CAAC,KAAK,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC;AACnD,EAAE;AACF;;AC9CA,sBAAe;AACf,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;AAC/C,IAAI,MAAM,YAAY,GAAG,EAAE;;AAE3B,IAAI,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;AACrD,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE;AAC1D,OAAO,IAAI;AACX,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;;AAEhC;AACA,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK;AAC1D,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAChD,MAAM,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACpC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9B,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,YAAY;AACvB,EAAE,CAAC;;AAEH,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;AAClE,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;;AAE1D,IAAI,MAAM,GAAG,GAAG,EAAE;AAClB,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK;AACvD,MAAM,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACrC,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;;AAE7D;AACA,MAAM,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;;AAElG,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE;AAC9D,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG;AACrB,OAAO,CAAC;AACR,MAAM,GAAG,CAAC,EAAE,GAAG,UAAU;AACzB,MAAM,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AAErC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1B,IAAI,CAAC,CAAC;;AAEN,IAAI,OAAO,GAAG;AACd,EAAE,CAAC;;AAEH,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;AACjF,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE;;AAE7C,IAAI,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI;AACpC,MAAM,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE;;AAEzC,MAAM,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;AACjC,QAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS;AACpC,QAAQ,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC;;AAElE;AACA,QAAQ,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAEtD,QAAQ,OAAO,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE;AACtD,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG;AACvB,SAAS,CAAC;AACV,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC;AACN,EAAE;AACF,CAAC;;;AAGD,SAAS,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;AAChD,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEtC;AACA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE;AAC5D,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACvB,EAAE;;AAEF,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AAC5C;;AAEA,SAAS,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;;AAE3D,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC5B,EAAE,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC7C,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;;AAExC,EAAE,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACpE,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE;AAC9E,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI;;AAElE,EAAE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,YAAY;AAClB,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC3J,MAAM,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AACtQ,MAAM,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,mBAAmB,GAAG,GAAG,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,CAAC,EAAE;AACpP,KAAK;;AAEL,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;AACvC,IAAI;AACJ,EAAE;;AAEF;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,YAAY;AAChB,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AACzJ,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,mBAAmB,EAAE;AACzJ,GAAG;;AAEH,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;AACrC;;ACvHA,qBAAe;AACf,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;;AAElE,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;;AAEtD,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG;AACvB,KAAK;;AAEL,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE;AAC9C,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI;AACpC,IAAI;;AAEJ,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE;AAC5B,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI;AAC/B,IAAI;;AAEJ,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AACrE,IAAI,OAAO,CAAC,EAAE,GAAG,OAAO;AACxB,IAAI,OAAO,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AAEvC,IAAI,OAAO,OAAO;AAClB,EAAE;AACF,CAAC;;ACrBD,sBAAe;AACf,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;AACtD,IAAI,IAAI,YAAY,GAAG,EAAE;;AAEzB;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;AAC5C,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS;AAC/B,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;;AAEvB,IAAI,IAAI,eAAe,GAAG,IAAI;;AAE9B,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE;AAC7D,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AACtC,IAAI;;AAEJ,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK;AAClD,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;AAClI,QAAQ;AACR,MAAM;;AAEN,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;AAC3C,MAAM;;AAEN,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,uBAAuB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;AACjG,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC;AACnD,MAAM;AACN,WAAW;AACX,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;AAClD,MAAM;;AAEN;AACA,MAAM,IAAI,WAAW,KAAK,OAAO,EAAE;AACnC,QAAQ,eAAe,GAAG,WAAW;AACrC,MAAM;;AAEN,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AACvC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9B,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;AACrE,IAAI,OAAO,YAAY;AACvB,EAAE,CAAC;;AAEH,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK;AAC1E,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE;;AAE3C,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;AAC/B,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS;AAClC,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC;;AAEpE,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE;AAClE,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG;AACrB,OAAO,CAAC;;AAER,MAAM,OAAO,YAAY;AACzB,IAAI,CAAC,CAAC;;AAEN,EAAE;AACF,CAAC;;;AAGD;;AAEA,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE;AAC/B,EAAE,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxD,EAAE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEpD,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,EAAE;;AAExC;;AAEA,SAAS,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE;AACxC,EAAE,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AACjD,MAAM,OAAO,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC;AAClE,IAAI;AACJ,EAAE;AACF;;;AAGA,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE;AAC5C,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,IAAI,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;AACnD,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,EAAE,OAAO,KAAK;AACd;;AAEA,SAAS,kBAAkB,CAAC,QAAQ,EAAE;AACtC,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC5D;;ACzGA,sBAAe;AACf,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;AAC/C,IAAI,MAAM,YAAY,GAAG,EAAE;;AAE3B,IAAI,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;AAC5C,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS;AAC/B,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;;AAEvB;AACA,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,MAAM,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7D,MAAM,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC1D,IAAI;AACJ,IAAI,OAAO,YAAY;AACvB,EAAE,CAAC;AACH,CAAC;;ACVM,MAAM,QAAQ,GAAG,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE;;ACItF,MAAM,QAAQ,CAAC;AACtB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,EAAE;AAClC,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/C,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ;AAC7B,EAAE;;AAEF,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;AAC7B,IAAI,OAAO,IAAI,CAAC;AAChB,OAAO,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;;AAElD,EAAE;;AAEF,EAAE,MAAM,aAAa,CAAC,GAAG,EAAE;AAC3B,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACpD,IAAI,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS;;AAErC,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;;AAE9B,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE;;AAE9C,IAAI,IAAI,gBAAgB,EAAE;;AAE1B,MAAM,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC;;AAEzD,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;;AAEjD,MAAM,IAAI,CAAC,uBAAuB,EAAE;;AAEpC,MAAM,IAAI,CAAC,OAAO,EAAE;;AAEpB,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;;AAEzC,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,IAAI;;AAEJ,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG;AACxE,EAAE;;AAEF,EAAE,uBAAuB,GAAG;AAC5B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;AAE9E;AACA;AACA,IAAI,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;;AAErC;AACA,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;;AAEnD,MAAM,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;;AAExC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;AAC9B,QAAQ,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvE,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;AACpD,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;AACpD,MAAM;;AAEN,IAAI;AACJ,EAAE;;AAEF,EAAE,mCAAmC,CAAC,SAAS,EAAE;AACjD,IAAI,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY;AAC9C,IAAI,IAAI,WAAW,EAAE;AACrB,MAAM,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AACxD,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,kBAAkB,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI;AACtH,MAAM;AACN,IAAI;AACJ,EAAE;;AAEF,EAAE,oBAAoB,CAAC,gBAAgB,EAAE;AACzC,IAAI,IAAI,CAAC,iBAAiB,GAAG,EAAE;;AAE/B,IAAI,MAAM,cAAc,GAAG,EAAE,gBAAgB,EAAE;;AAE/C,IAAI,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,EAAE;AAClD,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;AAClD,MAAM,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;;AAE9G,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,iBAAiB,CAAC,IAAI,EAAE;;AAE9H,MAAM,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC;AACvE,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,GAAG;AACZ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;AAC9B,EAAE;;AAEF,EAAE,gBAAgB,CAAC,IAAI,EAAE;AACzB,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;;AAE3B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;AAChD,IAAI,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;;AAE3E;AACA,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,MAAM,OAAO,IAAI;AACjB,IAAI;;AAEJ,IAAI,2BAA2B,EAAE,YAAY,CAAC;;AAE9C;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAI,OAAO,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;AACrF,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI;AACzD,QAAQ,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;AAChC,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;AAChC,aAAa,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACnD,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,MAAM,CAAC,CAAC;;AAER,MAAM,MAAM,KAAK,GAAG,EAAE,GAAG,gBAAgB,EAAE;;AAE3C,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI;AACrC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAQ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,MAAM,CAAC,CAAC;;AAER,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAEzC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE;AACvD,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE;AAClD,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,UAAU,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACxC,UAAU,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACtC,UAAU,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACzC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7C,QAAQ;AACR,MAAM;AACN,IAAI;AACJ,IAAI,OAAO,IAAI;AACf,EAAE;;AAEF,EAAE,UAAU,CAAC,UAAU,GAAG,KAAK,EAAE,MAAM,EAAE;AACzC,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;;AAEpC,IAAI,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAEtE,IAAI,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;;AAElE;AACA,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;AACvE,MAAM,MAAM,GAAG,GAAG;AAClB,SAAS,MAAM,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AACtF,SAAS,IAAI,EAAE;;AAEf,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,CAAC,CAAC;;AAEN;AACA,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;AACvE,MAAM,MAAM,GAAG,GAAG;AAClB,SAAS,MAAM,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;AACzF,SAAS,IAAI,EAAE;;AAEf,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC/B,IAAI,CAAC,CAAC;AACN,EAAE;;AAEF,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AACnC,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,EAAE;;AAExC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;AAEtG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI;AACxC,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,QAAQ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,MAAM,CAAC,CAAC;AACR,IAAI;AACJ,EAAE;;AAEF,EAAE,UAAU,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,cAAc,CAAC;AACnF,EAAE;;AAEF,EAAE,YAAY,CAAC,SAAS,EAAE;AAC1B,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;AACnC,EAAE;;AAEF,EAAE,eAAe,CAAC,OAAO,EAAE;AAC3B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;;AAEpC,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC;AAC5C,MAAM,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE;AACnC,MAAM,WAAW,EAAE;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;AAChD,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,EAAE;AACrC,MAAM,KAAK,EAAE;AACb,KAAK,CAAC;;AAEN,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;;AAEhC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEpC,IAAI,OAAO,SAAS;AACpB,EAAE;;AAEF;AACA;AACA;AACA;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;AAEpF,IAAI,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE;;AAE3C;AACA,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;AAC9B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACrD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAClD,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM;AACxC,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;AACzD,QAAQ,CAAC,IAAI,kBAAkB,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;AAC/C,QAAQ,CAAC,IAAI,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC;AACtD,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC;AACxD,QAAQ;AACR,MAAM;;AAEN;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC;AAClG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC;AAC5D,IAAI;AACJ,EAAE;;AAEF,EAAE,YAAY,CAAC,OAAO,EAAE;AACxB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI;AACtD,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC;AACjD,EAAE;;AAEF,EAAE,SAAS,CAAC,OAAO,EAAE;AACrB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC9F,EAAE;AACF;;AAEO,SAAS,2BAA2B,CAAC,QAAQ,EAAE;AACtD,EAAE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AAC7E,EAAE,cAAc,CAAC,OAAO,CAAC,aAAa,IAAI;AAC1C,IAAI,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa;AACpD,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE;AAClD,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACjC,IAAI,YAAY,CAAC,SAAS,GAAG,SAAS;AACtC,EAAE,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,IAAI,EAAE;AACtC,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxD,EAAE,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,MAAM,aAAa,GAAG,EAAE;AAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACtC,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1E,IAAI;;AAEJ,IAAI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEpC,IAAI,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1D,MAAM,MAAM,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvD,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,GAAG,EAAE,OAAO,OAAO;AAC5D,MAAM,OAAO,GAAG;AAChB,IAAI,CAAC,EAAE,SAAS,CAAC;;AAEjB,IAAI,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW;AAChD,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;AAC5B,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE;AACpC,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;;AAExD,EAAE,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,IAAI,MAAM,aAAa,GAAG,EAAE;AAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACtC,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1E,IAAI;;AAEJ,IAAI,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEpC,IAAI,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1D,MAAM,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACtD,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,GAAG,EAAE,OAAO,OAAO;AAC5D,MAAM,OAAO,GAAG;AAChB,IAAI,CAAC,EAAE,SAAS,CAAC;;AAEjB,IAAI,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW;;AAEhD;AACA,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;AAChD,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACvB,IAAI;AACJ,EAAE;AACF;;AAEA,SAAS,gBAAgB,CAAC,OAAO,EAAE;AACnC,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,EAAE;;AAEnI,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK;AAC3E,SAAS,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,OAAO,CAAC;;AAElD,EAAE,OAAO,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,EAAE,MAAM,GAAG,CAAC;AACzD;;ACtUO,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;AAC1C;;;;"}
1
+ {"version":3,"file":"index.js","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":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpmn-auto-layout",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Layout BPMN diagrams, generating missing DI information",
5
5
  "type": "module",
6
6
  "exports": {