bpmn-auto-layout 1.0.1 → 1.1.1

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/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  Create and layout the graphical representation of a BPMN diagram.
6
6
 
7
+ Try it out in [the example project](https://bpmn-io.github.io/bpmn-auto-layout/).
8
+
7
9
  ## Usage
8
10
 
9
11
  This library works with [Node.js](https://nodejs.org/) and in the browser.
package/dist/index.cjs CHANGED
@@ -60,11 +60,11 @@ class Grid {
60
60
  }
61
61
 
62
62
  createRow(afterIndex) {
63
- if (!afterIndex) {
63
+ if (!afterIndex && !Number.isInteger(afterIndex)) {
64
64
  this.grid.push([]);
65
+ } else {
66
+ this.grid.splice(afterIndex + 1, 0, []);
65
67
  }
66
-
67
- this.grid.splice(afterIndex + 1, 0, []);
68
68
  }
69
69
 
70
70
  _addStart(element) {
@@ -360,7 +360,6 @@ function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrienta
360
360
 
361
361
  // ensure we end up with a specific docking direction
362
362
  // based on the targetOrientation, if <h|v> is being passed
363
-
364
363
  if (dockingDirection === 'h') {
365
364
  dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';
366
365
  }
@@ -425,24 +424,24 @@ function connectElements(source, target, layoutGrid) {
425
424
 
426
425
  // negative dX indicates connection from future to past
427
426
  if (dX < 0) {
427
+
428
+ const { y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);
429
+
428
430
  const offsetY = DEFAULT_CELL_HEIGHT / 2;
429
431
 
430
- let bendY;
431
432
  if (sourceMid.y >= targetMid.y) {
432
433
 
433
434
  // edge goes below
434
- bendY = sourceMid.y + offsetY;
435
-
436
435
  return [
437
436
  getDockingPoint(sourceMid, sourceBounds, 'b'),
438
- { x: sourceMid.x, y: bendY },
439
- { x: targetMid.x, y: bendY },
437
+ { x: sourceMid.x, y: y + DEFAULT_CELL_HEIGHT },
438
+ { x: targetMid.x, y: y + DEFAULT_CELL_HEIGHT },
440
439
  getDockingPoint(targetMid, targetBounds, 'b')
441
440
  ];
442
441
  } else {
443
442
 
444
443
  // edge goes above
445
- bendY = sourceMid.y - offsetY;
444
+ const bendY = sourceMid.y - offsetY;
446
445
 
447
446
  return [
448
447
  getDockingPoint(sourceMid, sourceBounds, 't'),
@@ -624,6 +623,7 @@ var attacherHandler = {
624
623
  // Add below and to the right of the element
625
624
  insertIntoGrid(nextElement, element, grid);
626
625
  nextElements.push(nextElement);
626
+ visited.add(nextElement);
627
627
  });
628
628
 
629
629
  return nextElements;
@@ -912,10 +912,6 @@ class Layouter {
912
912
  return grid;
913
913
  }
914
914
 
915
- const startingElements = flowElements.filter(el => {
916
- return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0);
917
- });
918
-
919
915
  const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));
920
916
  boundaryEvents.forEach(boundaryEvent => {
921
917
  const attachedTask = boundaryEvent.attachedToRef;
@@ -925,27 +921,33 @@ class Layouter {
925
921
  });
926
922
 
927
923
  // Depth-first-search
928
- const stack = [ ...startingElements ];
929
924
  const visited = new Set();
925
+ while (visited.size < elements.filter(element => !element.attachedToRef).length) {
930
926
 
931
- startingElements.forEach(el => {
932
- grid.add(el);
933
- visited.add(el);
934
- });
927
+ const startingElements = flowElements.filter(el => {
928
+ return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0) && !visited.has(el);
929
+ });
935
930
 
936
- this.handleGrid(grid,visited,stack);
931
+ const stack = [ ...startingElements ];
937
932
 
938
- if (grid.getElementsTotal() != elements.length) {
939
- const gridElements = grid.getAllElements();
940
- const missingElements = elements.filter(el => !gridElements.includes(el) && !isBoundaryEvent(el));
941
- if (missingElements.length > 1) {
942
- stack.push(missingElements[0]);
943
- grid.add(missingElements[0]);
944
- visited.add(missingElements[0]);
945
- this.handleGrid(grid,visited,stack);
933
+ startingElements.forEach(el => {
934
+ grid.add(el);
935
+ visited.add(el);
936
+ });
937
+
938
+ this.handleGrid(grid,visited,stack);
939
+
940
+ if (grid.getElementsTotal() != elements.length) {
941
+ const gridElements = grid.getAllElements();
942
+ const missingElements = elements.filter(el => !gridElements.includes(el) && !isBoundaryEvent(el));
943
+ if (missingElements.length > 0) {
944
+ stack.push(missingElements[0]);
945
+ grid.add(missingElements[0]);
946
+ visited.add(missingElements[0]);
947
+ this.handleGrid(grid,visited,stack);
948
+ }
946
949
  }
947
950
  }
948
-
949
951
  return grid;
950
952
  }
951
953
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../lib/utils/elementUtils.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.js","../lib/handler/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 class Grid {\n constructor() {\n this.grid = [];\n }\n\n add(element, position) {\n if (!position) {\n this._addStart(element);\n return;\n }\n\n const [ row, col ] = position;\n if (!row && !col) {\n this._addStart(element);\n }\n\n if (!this.grid[row]) {\n this.grid[row] = [];\n }\n\n if (this.grid[row][col]) {\n throw new Error('Grid is occupied please ensure the place you insert at is not occupied');\n }\n\n this.grid[row][col] = element;\n }\n\n createRow(afterIndex) {\n if (!afterIndex) {\n this.grid.push([]);\n }\n\n this.grid.splice(afterIndex + 1, 0, []);\n }\n\n _addStart(element) {\n this.grid.push([ element ]);\n }\n\n addAfter(element, newElement) {\n if (!element) {\n this._addStart(newElement);\n }\n 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}","import { assign, map, pick } from 'min-dash';\n\n\nexport class DiFactory {\n constructor(moddle) {\n this.moddle = moddle;\n }\n\n create(type, attrs) {\n return this.moddle.create(type, attrs || {});\n }\n\n createDiBounds(bounds) {\n return this.create('dc:Bounds', bounds);\n }\n\n createDiLabel() {\n return this.create('bpmndi:BPMNLabel', {\n bounds: this.createDiBounds()\n });\n }\n\n createDiShape(semantic, bounds, attrs) {\n return this.create('bpmndi:BPMNShape', assign({\n bpmnElement: semantic,\n bounds: this.createDiBounds(bounds)\n }, attrs));\n }\n\n createDiWaypoints(waypoints) {\n var self = this;\n\n return map(waypoints, function(pos) {\n return self.createDiWaypoint(pos);\n });\n }\n\n createDiWaypoint(point) {\n return this.create('dc:Point', pick(point, [ 'x', 'y' ]));\n }\n\n createDiEdge(semantic, waypoints, attrs) {\n return this.create('bpmndi:BPMNEdge', assign({\n bpmnElement: semantic,\n waypoint: this.createDiWaypoints(waypoints)\n }, attrs));\n }\n\n createDiPlane(attrs) {\n return this.create('bpmndi:BPMNPlane', attrs);\n }\n\n createDiDiagram(attrs) {\n return this.create('bpmndi:BPMNDiagram', attrs);\n }\n}","export function getDefaultSize(element) {\n if (is(element, 'bpmn:SubProcess')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Task')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Gateway')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:Event')) {\n return { width: 36, height: 36 };\n }\n\n if (is(element, 'bpmn:Participant')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:Lane')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:DataObjectReference')) {\n return { width: 36, height: 50 };\n }\n\n if (is(element, 'bpmn:DataStoreReference')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:TextAnnotation')) {\n return { width: 100, height: 30 };\n }\n\n return { width: 100, height: 80 };\n}\n\nexport function is(element, type) {\n return element.$instanceOf(type);\n}\n","import { getDefaultSize } from '../di/DiUtil.js';\n\nexport const DEFAULT_CELL_WIDTH = 150;\nexport const DEFAULT_CELL_HEIGHT = 140;\n\nexport function getMid(bounds) {\n return {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n}\n\nexport function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrientation = 'top-left') {\n\n // ensure we end up with a specific docking direction\n // based on the targetOrientation, if <h|v> is being passed\n\n if (dockingDirection === 'h') {\n dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';\n }\n\n if (dockingDirection === 'v') {\n dockingDirection = /top/.test(targetOrientation) ? 't' : 'b';\n }\n\n if (dockingDirection === 't') {\n return { original: point, x: point.x, y: rectangle.y };\n }\n\n if (dockingDirection === 'r') {\n return { original: point, x: rectangle.x + rectangle.width, y: point.y };\n }\n\n if (dockingDirection === 'b') {\n return { original: point, x: point.x, y: rectangle.y + rectangle.height };\n }\n\n if (dockingDirection === 'l') {\n return { original: point, x: rectangle.x, y: point.y };\n }\n\n throw new Error('unexpected dockingDirection: <' + dockingDirection + '>');\n}\n\n/**\n * Modified Manhattan layout: Uses space between grid coloumns to route connections\n * if direct connection is not possible.\n * @param {*} source\n * @param {*} target\n * @returns waypoints\n */\nexport function connectElements(source, target, layoutGrid) {\n const sourceDi = source.di;\n const targetDi = target.di;\n\n const sourceBounds = sourceDi.get('bounds');\n const targetBounds = targetDi.get('bounds');\n\n const sourceMid = getMid(sourceBounds);\n const targetMid = getMid(targetBounds);\n\n const dX = target.gridPosition.col - source.gridPosition.col;\n const dY = target.gridPosition.row - source.gridPosition.row;\n\n const dockingSource = `${(dY > 0 ? 'bottom' : 'top')}-${dX > 0 ? 'right' : 'left'}`;\n const dockingTarget = `${(dY > 0 ? 'top' : 'bottom')}-${dX > 0 ? 'left' : 'right'}`;\n\n // Source === Target ==> Build loop\n if (dX === 0 && dY === 0) {\n const { x, y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n { x: x + DEFAULT_CELL_WIDTH, y: y },\n { x: targetMid.x, y: y },\n getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n ];\n }\n\n // negative dX indicates connection from future to past\n if (dX < 0) {\n const offsetY = DEFAULT_CELL_HEIGHT / 2;\n\n let bendY;\n if (sourceMid.y >= targetMid.y) {\n\n // edge goes below\n bendY = sourceMid.y + offsetY;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: bendY },\n { x: targetMid.x, y: bendY },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // edge goes above\n 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\n // Route on bottom\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n { x: targetMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // if space is clear, connect directly\n return [\n getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'h', dockingTarget)\n ];\n }\n }\n\n // connect vertically\n if (dX === 0) {\n if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n // Route parallel\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r'),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: targetMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset },\n { x: targetMid.x, y: targetMid.y + yOffset },\n getDockingPoint(targetMid, targetBounds, Math.sign(yOffset) > 0 ? 'b' : 't')\n ];\n } else {\n\n // if space is clear, connect directly\n return [ getDockingPoint(sourceMid, sourceBounds, 'v', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'v', dockingTarget)\n ];\n }\n }\n\n const directManhattan = directManhattanConnect(source, target, layoutGrid);\n\n if (directManhattan) {\n const startPoint = getDockingPoint(sourceMid, sourceBounds, directManhattan[0], dockingSource);\n const endPoint = getDockingPoint(targetMid, targetBounds, directManhattan[1], dockingTarget);\n\n const midPoint = directManhattan[0] === 'h' ? { x: endPoint.x, y: startPoint.y } : { x: startPoint.x, y: endPoint.y };\n\n return [\n startPoint,\n midPoint,\n endPoint\n ];\n }\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target row\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target column\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y }, // to mid\n getDockingPoint(targetMid, targetBounds, 'l', dockingTarget)\n ];\n}\n\n// helpers /////\nexport function coordinatesToPosition(row, col) {\n return {\n width: DEFAULT_CELL_WIDTH,\n height: DEFAULT_CELL_HEIGHT,\n x: col * DEFAULT_CELL_WIDTH,\n y: row * DEFAULT_CELL_HEIGHT\n };\n}\n\nexport function getBounds(element, row, col, attachedTo) {\n const { width, height } = getDefaultSize(element);\n\n // Center in cell\n if (!attachedTo) {\n return {\n width, height,\n x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2,\n y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2\n };\n }\n\n const hostBounds = getBounds(attachedTo, row, col);\n\n return {\n width, height,\n x: Math.round(hostBounds.x + hostBounds.width / 2 - width / 2),\n y: Math.round(hostBounds.y + hostBounds.height - height / 2)\n };\n}\n\nfunction isDirectPathBlocked(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n let totalElements = 0;\n\n if (dX) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, { row: sourceRow, col: targetCol }).length;\n }\n\n if (dY) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: targetCol }, { row: targetRow, col: targetCol }).length;\n }\n\n return totalElements > 2;\n}\n\nfunction directManhattanConnect(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n // Only directly connect left-to-right flow\n if (!(dX > 0 && dY !== 0)) {\n return;\n }\n\n // If below, go down then horizontal\n if (dY > 0) {\n let totalElements = 0;\n const bendPoint = { row: targetRow, col: sourceCol };\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'v', 'h' ];\n } else {\n\n // If above, go horizontal than vertical\n let totalElements = 0;\n const bendPoint = { row: sourceRow, col: targetCol };\n\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'h', 'v' ];\n }\n}\n","import {\n DEFAULT_CELL_HEIGHT,\n DEFAULT_CELL_WIDTH,\n connectElements,\n getBounds,\n getDockingPoint,\n getMid\n} from '../utils/layoutUtil.js';\n\nexport default {\n 'addToGrid': ({ element, grid, visited }) => {\n const nextElements = [];\n\n const attachedOutgoing = (element.attachers || [])\n .map(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 });\n\n return nextElements;\n },\n\n 'createElementDi': ({ element, row, col, diFactory }) => {\n const hostBounds = getBounds(element, row, col);\n\n const DIs = [];\n (element.attachers || []).forEach((att, i, arr) => {\n att.gridPosition = { row, col };\n const bounds = getBounds(att, row, col, element);\n\n // distribute along lower edge\n bounds.x = hostBounds.x + (i + 1) * (hostBounds.width / (arr.length + 1)) - bounds.width / 2;\n\n const attacherDi = diFactory.createDiShape(att, bounds, {\n id: att.id + '_di'\n });\n att.di = attacherDi;\n att.gridPosition = { row, col };\n\n DIs.push(attacherDi);\n });\n\n return DIs;\n },\n\n 'createConnectionDi': ({ element, row, col, layoutGrid, diFactory }) => {\n const attachers = element.attachers || [];\n\n return attachers.flatMap(att => {\n const outgoing = att.outgoing || [];\n\n return outgoing.map(out => {\n const target = out.targetRef;\n const waypoints = connectElements(att, target, layoutGrid);\n\n // Correct waypoints if they don't automatically attach to the bottom\n ensureExitBottom(att, waypoints, [ row, col ]);\n\n const connectionDi = diFactory.createDiEdge(out, waypoints, {\n id: out.id + '_di'\n });\n\n return connectionDi;\n });\n });\n }\n};\n\n\nfunction insertIntoGrid(newElement, host, grid) {\n const [ row, col ] = grid.find(host);\n\n // Grid is occupied\n if (grid.get(row + 1, col) || grid.get(row + 1, col + 1)) {\n grid.createRow(row);\n }\n\n grid.add(newElement, [ row + 1, col + 1 ]);\n}\n\nfunction ensureExitBottom(source, waypoints, [ row, col ]) {\n\n const sourceDi = source.di;\n const sourceBounds = sourceDi.get('bounds');\n const sourceMid = getMid(sourceBounds);\n\n const dockingPoint = getDockingPoint(sourceMid, sourceBounds, 'b');\n if (waypoints[0].x === dockingPoint.x && waypoints[0].y === dockingPoint.y) {\n return;\n }\n\n if (waypoints.length === 2) {\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 0.5) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n }\n\n // add waypoints to exit bottom and connect to existing path\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: waypoints[1].x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n 'createElementDi': ({ element, row, col, diFactory }) => {\n\n const bounds = getBounds(element, row, col);\n\n const options = {\n id: element.id + '_di'\n };\n\n if (is(element, 'bpmn:ExclusiveGateway')) {\n options.isMarkerVisible = true;\n }\n\n const shapeDi = diFactory.createDiShape(element, bounds, options);\n element.di = shapeDi;\n element.gridPosition = { row, col };\n\n return shapeDi;\n }\n};","import { connectElements } from '../utils/layoutUtil.js';\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 { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is } from './di/DiUtil.js';\nimport { handlers } from './handler/index.js';\nimport { isFunction } from 'min-dash';\n\nexport class Layouter {\n constructor() {\n this.moddle = new BPMNModdle();\n this.diFactory = new DiFactory(this.moddle);\n this._handlers = handlers;\n }\n\n handle(operation, options) {\n return this._handlers\n .filter(handler => isFunction(handler[operation]))\n .map(handler => handler[operation](options));\n\n }\n\n async layoutProcess(xml) {\n const { rootElement } = await this.moddle.fromXML(xml);\n\n this.diagram = rootElement;\n\n const root = this.getProcess();\n\n if (root) {\n this.cleanDi();\n this.handlePlane(root);\n }\n\n return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n }\n\n handlePlane(planeElement) {\n const layout = this.createGridLayout(planeElement);\n this.generateDi(planeElement, layout);\n }\n\n cleanDi() {\n this.diagram.diagrams = [];\n }\n\n createGridLayout(root) {\n const grid = new Grid();\n\n const flowElements = root.flowElements || [];\n 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 const startingElements = flowElements.filter(el => {\n return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0);\n });\n\n const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));\n boundaryEvents.forEach(boundaryEvent => {\n const attachedTask = boundaryEvent.attachedToRef;\n const attachers = attachedTask.attachers || [];\n attachers.push(boundaryEvent);\n attachedTask.attachers = attachers;\n });\n\n // Depth-first-search\n const stack = [ ...startingElements ];\n const visited = new Set();\n\n startingElements.forEach(el => {\n grid.add(el);\n visited.add(el);\n });\n\n 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 > 1) {\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(root, layoutGrid) {\n const diFactory = this.diFactory;\n\n // Step 0: Create Root element\n const diagram = this.diagram;\n\n var planeDi = diFactory.createDiPlane({\n id: 'BPMNPlane_' + root.id,\n bpmnElement: root\n });\n var diagramDi = diFactory.createDiDiagram({\n id: 'BPMNDiagram_' + root.id,\n plane: planeDi\n });\n\n // deepest subprocess is added first - insert at the front\n diagram.diagrams.unshift(diagramDi);\n\n const planeElement = planeDi.get('planeElement');\n\n // Step 1: Create DI for all elements\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createElementDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n\n // Step 2: Create DI for all connections\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createConnectionDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n }\n\n handleGrid(grid, visited, stack) {\n while (stack.length > 0) {\n const currentElement = stack.pop();\n\n if (is(currentElement, 'bpmn:SubProcess')) {\n this.handlePlane(currentElement);\n }\n\n const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited, 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","import { Layouter } from './Layouter.js';\n\nexport function layoutProcess(xml) {\n return new Layouter().layoutProcess(xml);\n}\n"],"names":["assign","map","pick","isFunction"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../lib/utils/elementUtils.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.js","../lib/handler/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 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}","import { assign, map, pick } from 'min-dash';\n\n\nexport class DiFactory {\n constructor(moddle) {\n this.moddle = moddle;\n }\n\n create(type, attrs) {\n return this.moddle.create(type, attrs || {});\n }\n\n createDiBounds(bounds) {\n return this.create('dc:Bounds', bounds);\n }\n\n createDiLabel() {\n return this.create('bpmndi:BPMNLabel', {\n bounds: this.createDiBounds()\n });\n }\n\n createDiShape(semantic, bounds, attrs) {\n return this.create('bpmndi:BPMNShape', assign({\n bpmnElement: semantic,\n bounds: this.createDiBounds(bounds)\n }, attrs));\n }\n\n createDiWaypoints(waypoints) {\n var self = this;\n\n return map(waypoints, function(pos) {\n return self.createDiWaypoint(pos);\n });\n }\n\n createDiWaypoint(point) {\n return this.create('dc:Point', pick(point, [ 'x', 'y' ]));\n }\n\n createDiEdge(semantic, waypoints, attrs) {\n return this.create('bpmndi:BPMNEdge', assign({\n bpmnElement: semantic,\n waypoint: this.createDiWaypoints(waypoints)\n }, attrs));\n }\n\n createDiPlane(attrs) {\n return this.create('bpmndi:BPMNPlane', attrs);\n }\n\n createDiDiagram(attrs) {\n return this.create('bpmndi:BPMNDiagram', attrs);\n }\n}","export function getDefaultSize(element) {\n if (is(element, 'bpmn:SubProcess')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Task')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Gateway')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:Event')) {\n return { width: 36, height: 36 };\n }\n\n if (is(element, 'bpmn:Participant')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:Lane')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:DataObjectReference')) {\n return { width: 36, height: 50 };\n }\n\n if (is(element, 'bpmn:DataStoreReference')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:TextAnnotation')) {\n return { width: 100, height: 30 };\n }\n\n return { width: 100, height: 80 };\n}\n\nexport function is(element, type) {\n return element.$instanceOf(type);\n}\n","import { getDefaultSize } from '../di/DiUtil.js';\n\nexport const DEFAULT_CELL_WIDTH = 150;\nexport const DEFAULT_CELL_HEIGHT = 140;\n\nexport function getMid(bounds) {\n return {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n}\n\nexport function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrientation = 'top-left') {\n\n // ensure we end up with a specific docking direction\n // based on the targetOrientation, if <h|v> is being passed\n if (dockingDirection === 'h') {\n dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';\n }\n\n if (dockingDirection === 'v') {\n dockingDirection = /top/.test(targetOrientation) ? 't' : 'b';\n }\n\n if (dockingDirection === 't') {\n return { original: point, x: point.x, y: rectangle.y };\n }\n\n if (dockingDirection === 'r') {\n return { original: point, x: rectangle.x + rectangle.width, y: point.y };\n }\n\n if (dockingDirection === 'b') {\n return { original: point, x: point.x, y: rectangle.y + rectangle.height };\n }\n\n if (dockingDirection === 'l') {\n return { original: point, x: rectangle.x, y: point.y };\n }\n\n throw new Error('unexpected dockingDirection: <' + dockingDirection + '>');\n}\n\n/**\n * Modified Manhattan layout: Uses space between grid coloumns to route connections\n * if direct connection is not possible.\n * @param {*} source\n * @param {*} target\n * @returns waypoints\n */\nexport function connectElements(source, target, layoutGrid) {\n const sourceDi = source.di;\n const targetDi = target.di;\n\n const sourceBounds = sourceDi.get('bounds');\n const targetBounds = targetDi.get('bounds');\n\n const sourceMid = getMid(sourceBounds);\n const targetMid = getMid(targetBounds);\n\n const dX = target.gridPosition.col - source.gridPosition.col;\n const dY = target.gridPosition.row - source.gridPosition.row;\n\n const dockingSource = `${(dY > 0 ? 'bottom' : 'top')}-${dX > 0 ? 'right' : 'left'}`;\n const dockingTarget = `${(dY > 0 ? 'top' : 'bottom')}-${dX > 0 ? 'left' : 'right'}`;\n\n // Source === Target ==> Build loop\n if (dX === 0 && dY === 0) {\n const { x, y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n { x: x + DEFAULT_CELL_WIDTH, y: y },\n { x: targetMid.x, y: y },\n getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n ];\n }\n\n // 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 return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: y + DEFAULT_CELL_HEIGHT },\n { x: targetMid.x, y: y + 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\n // Route on bottom\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n { x: targetMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // if space is clear, connect directly\n return [\n getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'h', dockingTarget)\n ];\n }\n }\n\n // connect vertically\n if (dX === 0) {\n if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n // Route parallel\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r'),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: targetMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset },\n { x: targetMid.x, y: targetMid.y + yOffset },\n getDockingPoint(targetMid, targetBounds, Math.sign(yOffset) > 0 ? 'b' : 't')\n ];\n } else {\n\n // if space is clear, connect directly\n return [ getDockingPoint(sourceMid, sourceBounds, 'v', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'v', dockingTarget)\n ];\n }\n }\n\n const directManhattan = directManhattanConnect(source, target, layoutGrid);\n\n if (directManhattan) {\n const startPoint = getDockingPoint(sourceMid, sourceBounds, directManhattan[0], dockingSource);\n const endPoint = getDockingPoint(targetMid, targetBounds, directManhattan[1], dockingTarget);\n\n const midPoint = directManhattan[0] === 'h' ? { x: endPoint.x, y: startPoint.y } : { x: startPoint.x, y: endPoint.y };\n\n return [\n startPoint,\n midPoint,\n endPoint\n ];\n }\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target row\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target column\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y }, // to mid\n getDockingPoint(targetMid, targetBounds, 'l', dockingTarget)\n ];\n}\n\n// helpers /////\nexport function coordinatesToPosition(row, col) {\n return {\n width: DEFAULT_CELL_WIDTH,\n height: DEFAULT_CELL_HEIGHT,\n x: col * DEFAULT_CELL_WIDTH,\n y: row * DEFAULT_CELL_HEIGHT\n };\n}\n\nexport function getBounds(element, row, col, attachedTo) {\n const { width, height } = getDefaultSize(element);\n\n // Center in cell\n if (!attachedTo) {\n return {\n width, height,\n x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2,\n y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2\n };\n }\n\n const hostBounds = getBounds(attachedTo, row, col);\n\n return {\n width, height,\n x: Math.round(hostBounds.x + hostBounds.width / 2 - width / 2),\n y: Math.round(hostBounds.y + hostBounds.height - height / 2)\n };\n}\n\nfunction isDirectPathBlocked(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n let totalElements = 0;\n\n if (dX) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, { row: sourceRow, col: targetCol }).length;\n }\n\n if (dY) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: targetCol }, { row: targetRow, col: targetCol }).length;\n }\n\n return totalElements > 2;\n}\n\nfunction directManhattanConnect(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n // Only directly connect left-to-right flow\n if (!(dX > 0 && dY !== 0)) {\n return;\n }\n\n // If below, go down then horizontal\n if (dY > 0) {\n let totalElements = 0;\n const bendPoint = { row: targetRow, col: sourceCol };\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'v', 'h' ];\n } else {\n\n // If above, go horizontal than vertical\n let totalElements = 0;\n const bendPoint = { row: sourceRow, col: targetCol };\n\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'h', 'v' ];\n }\n}\n","import {\n DEFAULT_CELL_HEIGHT,\n DEFAULT_CELL_WIDTH,\n connectElements,\n getBounds,\n getDockingPoint,\n getMid\n} from '../utils/layoutUtil.js';\n\nexport default {\n 'addToGrid': ({ element, grid, visited }) => {\n const nextElements = [];\n\n const attachedOutgoing = (element.attachers || [])\n .map(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 }) => {\n const hostBounds = getBounds(element, row, col);\n\n const DIs = [];\n (element.attachers || []).forEach((att, i, arr) => {\n att.gridPosition = { row, col };\n const bounds = getBounds(att, row, col, element);\n\n // distribute along lower edge\n bounds.x = hostBounds.x + (i + 1) * (hostBounds.width / (arr.length + 1)) - bounds.width / 2;\n\n const attacherDi = diFactory.createDiShape(att, bounds, {\n id: att.id + '_di'\n });\n att.di = attacherDi;\n att.gridPosition = { row, col };\n\n DIs.push(attacherDi);\n });\n\n return DIs;\n },\n\n 'createConnectionDi': ({ element, row, col, layoutGrid, diFactory }) => {\n const attachers = element.attachers || [];\n\n return attachers.flatMap(att => {\n const outgoing = att.outgoing || [];\n\n return outgoing.map(out => {\n const target = out.targetRef;\n const waypoints = connectElements(att, target, layoutGrid);\n\n // Correct waypoints if they don't automatically attach to the bottom\n ensureExitBottom(att, waypoints, [ row, col ]);\n\n const connectionDi = diFactory.createDiEdge(out, waypoints, {\n id: out.id + '_di'\n });\n\n return connectionDi;\n });\n });\n }\n};\n\n\nfunction insertIntoGrid(newElement, host, grid) {\n const [ row, col ] = grid.find(host);\n\n // Grid is occupied\n if (grid.get(row + 1, col) || grid.get(row + 1, col + 1)) {\n grid.createRow(row);\n }\n\n grid.add(newElement, [ row + 1, col + 1 ]);\n}\n\nfunction ensureExitBottom(source, waypoints, [ row, col ]) {\n\n const sourceDi = source.di;\n const sourceBounds = sourceDi.get('bounds');\n const sourceMid = getMid(sourceBounds);\n\n const dockingPoint = getDockingPoint(sourceMid, sourceBounds, 'b');\n if (waypoints[0].x === dockingPoint.x && waypoints[0].y === dockingPoint.y) {\n return;\n }\n\n if (waypoints.length === 2) {\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 0.5) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n }\n\n // add waypoints to exit bottom and connect to existing path\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: waypoints[1].x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n 'createElementDi': ({ element, row, col, diFactory }) => {\n\n const bounds = getBounds(element, row, col);\n\n const options = {\n id: element.id + '_di'\n };\n\n if (is(element, 'bpmn:ExclusiveGateway')) {\n options.isMarkerVisible = true;\n }\n\n const shapeDi = diFactory.createDiShape(element, bounds, options);\n element.di = shapeDi;\n element.gridPosition = { row, col };\n\n return shapeDi;\n }\n};","import { connectElements } from '../utils/layoutUtil.js';\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 { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is } from './di/DiUtil.js';\nimport { handlers } from './handler/index.js';\nimport { isFunction } from 'min-dash';\n\nexport class Layouter {\n constructor() {\n this.moddle = new BPMNModdle();\n this.diFactory = new DiFactory(this.moddle);\n this._handlers = handlers;\n }\n\n handle(operation, options) {\n return this._handlers\n .filter(handler => isFunction(handler[operation]))\n .map(handler => handler[operation](options));\n\n }\n\n async layoutProcess(xml) {\n const { rootElement } = await this.moddle.fromXML(xml);\n\n this.diagram = rootElement;\n\n const root = this.getProcess();\n\n if (root) {\n this.cleanDi();\n this.handlePlane(root);\n }\n\n return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n }\n\n handlePlane(planeElement) {\n const layout = this.createGridLayout(planeElement);\n this.generateDi(planeElement, layout);\n }\n\n cleanDi() {\n this.diagram.diagrams = [];\n }\n\n createGridLayout(root) {\n const grid = new Grid();\n\n const flowElements = root.flowElements || [];\n 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 const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));\n boundaryEvents.forEach(boundaryEvent => {\n const attachedTask = boundaryEvent.attachedToRef;\n const attachers = attachedTask.attachers || [];\n attachers.push(boundaryEvent);\n attachedTask.attachers = attachers;\n });\n\n // Depth-first-search\n const visited = new Set();\n while (visited.size < elements.filter(element => !element.attachedToRef).length) {\n\n const startingElements = flowElements.filter(el => {\n return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0) && !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(root, layoutGrid) {\n const diFactory = this.diFactory;\n\n // Step 0: Create Root element\n const diagram = this.diagram;\n\n var planeDi = diFactory.createDiPlane({\n id: 'BPMNPlane_' + root.id,\n bpmnElement: root\n });\n var diagramDi = diFactory.createDiDiagram({\n id: 'BPMNDiagram_' + root.id,\n plane: planeDi\n });\n\n // deepest subprocess is added first - insert at the front\n diagram.diagrams.unshift(diagramDi);\n\n const planeElement = planeDi.get('planeElement');\n\n // Step 1: Create DI for all elements\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createElementDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n\n // Step 2: Create DI for all connections\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createConnectionDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n }\n\n handleGrid(grid, visited, stack) {\n while (stack.length > 0) {\n const currentElement = stack.pop();\n\n if (is(currentElement, 'bpmn:SubProcess')) {\n this.handlePlane(currentElement);\n }\n\n const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited, 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","import { Layouter } from './Layouter.js';\n\nexport function layoutProcess(xml) {\n return new Layouter().layoutProcess(xml);\n}\n"],"names":["assign","map","pick","isFunction"],"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,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;AACF;;ACnNO,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,EAAEA,cAAM,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,OAAOC,WAAG,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,EAAEC,YAAI,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,EAAEF,cAAM,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;;ACvDO,SAAS,cAAc,CAAC,OAAO,EAAE;AACxC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE;AACtC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,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,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,EAAE;;AAEF,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACnC;;AAEO,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE;AAClC,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC;;ACxCO,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;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;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,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AACnD,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE;AACzC,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,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE;AACtD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE;AACtD,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;;AAEzD;AACA,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE;AACpE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE;AACpE,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACpD,OAAO;AACP,IAAI,CAAC,MAAM;;AAEX;AACA,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AACpE,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa;AACnE,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,UAAU,EAAE;AACzD,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;;AAEnD;AACA,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,MAAM;AACnB,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,kBAAkB,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,CAAC;AACtE,MAAM,CAAC,EAAE,GAAG,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,MAAM,IAAI;AACtE,KAAK;AACL,EAAE;;AAEF,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;;AAEpD,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;;AC1PA,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;AAC3D,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;;AAEnD,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,OAAO,CAAC;;AAEtD;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;AAC1E,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,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE;AACpE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG;AACvB,SAAS,CAAC;;AAEV,QAAQ,OAAO,YAAY;AAC3B,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,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,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC/D,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC/E,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,mBAAmB,EAAE;AACjF,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,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC7D,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC7D,GAAG;;AAEH,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;AACrC,EAAE;AACF;;ACxHA,qBAAe;AACf,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK;;AAE3D,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;;AAE/C,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,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;;ACjBD,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;;ACGtF,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,IAAIG,kBAAU,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,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE1D,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;;AAE9B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;;AAElC,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,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,WAAW,CAAC,YAAY,EAAE;AAC5B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACtD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;AACzC,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,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AACzE,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,IAAI;AAC5C,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa;AACtD,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE;AACpD,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACnC,MAAM,YAAY,CAAC,SAAS,GAAG,SAAS;AACxC,IAAI,CAAC,CAAC;;AAEN;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;;AAErF,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI;AACzD,QAAQ,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACjH,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,IAAI,QAAQ,CAAC,MAAM,EAAE;AACtD,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,IAAI,EAAE,UAAU,EAAE;AAC/B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;;AAEpC;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;;AAEhC,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC;AAC1C,MAAM,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC,EAAE;AAChC,MAAM,WAAW,EAAE;AACnB,KAAK,CAAC;AACN,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;AAC9C,MAAM,EAAE,EAAE,cAAc,GAAG,IAAI,CAAC,EAAE;AAClC,MAAM,KAAK,EAAE;AACb,KAAK,CAAC;;AAEN;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;;AAEvC,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;;AAEpD;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;AAC/E,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;AAClF,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,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE;AACjD,QAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACxC,MAAM;;AAEN,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;AACF;;ACzJO,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;AAC1C;;;;"}
package/dist/index.js CHANGED
@@ -58,11 +58,11 @@ class Grid {
58
58
  }
59
59
 
60
60
  createRow(afterIndex) {
61
- if (!afterIndex) {
61
+ if (!afterIndex && !Number.isInteger(afterIndex)) {
62
62
  this.grid.push([]);
63
+ } else {
64
+ this.grid.splice(afterIndex + 1, 0, []);
63
65
  }
64
-
65
- this.grid.splice(afterIndex + 1, 0, []);
66
66
  }
67
67
 
68
68
  _addStart(element) {
@@ -358,7 +358,6 @@ function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrienta
358
358
 
359
359
  // ensure we end up with a specific docking direction
360
360
  // based on the targetOrientation, if <h|v> is being passed
361
-
362
361
  if (dockingDirection === 'h') {
363
362
  dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';
364
363
  }
@@ -423,24 +422,24 @@ function connectElements(source, target, layoutGrid) {
423
422
 
424
423
  // negative dX indicates connection from future to past
425
424
  if (dX < 0) {
425
+
426
+ const { y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);
427
+
426
428
  const offsetY = DEFAULT_CELL_HEIGHT / 2;
427
429
 
428
- let bendY;
429
430
  if (sourceMid.y >= targetMid.y) {
430
431
 
431
432
  // edge goes below
432
- bendY = sourceMid.y + offsetY;
433
-
434
433
  return [
435
434
  getDockingPoint(sourceMid, sourceBounds, 'b'),
436
- { x: sourceMid.x, y: bendY },
437
- { x: targetMid.x, y: bendY },
435
+ { x: sourceMid.x, y: y + DEFAULT_CELL_HEIGHT },
436
+ { x: targetMid.x, y: y + DEFAULT_CELL_HEIGHT },
438
437
  getDockingPoint(targetMid, targetBounds, 'b')
439
438
  ];
440
439
  } else {
441
440
 
442
441
  // edge goes above
443
- bendY = sourceMid.y - offsetY;
442
+ const bendY = sourceMid.y - offsetY;
444
443
 
445
444
  return [
446
445
  getDockingPoint(sourceMid, sourceBounds, 't'),
@@ -622,6 +621,7 @@ var attacherHandler = {
622
621
  // Add below and to the right of the element
623
622
  insertIntoGrid(nextElement, element, grid);
624
623
  nextElements.push(nextElement);
624
+ visited.add(nextElement);
625
625
  });
626
626
 
627
627
  return nextElements;
@@ -910,10 +910,6 @@ class Layouter {
910
910
  return grid;
911
911
  }
912
912
 
913
- const startingElements = flowElements.filter(el => {
914
- return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0);
915
- });
916
-
917
913
  const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));
918
914
  boundaryEvents.forEach(boundaryEvent => {
919
915
  const attachedTask = boundaryEvent.attachedToRef;
@@ -923,27 +919,33 @@ class Layouter {
923
919
  });
924
920
 
925
921
  // Depth-first-search
926
- const stack = [ ...startingElements ];
927
922
  const visited = new Set();
923
+ while (visited.size < elements.filter(element => !element.attachedToRef).length) {
928
924
 
929
- startingElements.forEach(el => {
930
- grid.add(el);
931
- visited.add(el);
932
- });
925
+ const startingElements = flowElements.filter(el => {
926
+ return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0) && !visited.has(el);
927
+ });
933
928
 
934
- this.handleGrid(grid,visited,stack);
929
+ const stack = [ ...startingElements ];
935
930
 
936
- if (grid.getElementsTotal() != elements.length) {
937
- const gridElements = grid.getAllElements();
938
- const missingElements = elements.filter(el => !gridElements.includes(el) && !isBoundaryEvent(el));
939
- if (missingElements.length > 1) {
940
- stack.push(missingElements[0]);
941
- grid.add(missingElements[0]);
942
- visited.add(missingElements[0]);
943
- this.handleGrid(grid,visited,stack);
931
+ startingElements.forEach(el => {
932
+ grid.add(el);
933
+ visited.add(el);
934
+ });
935
+
936
+ this.handleGrid(grid,visited,stack);
937
+
938
+ if (grid.getElementsTotal() != elements.length) {
939
+ const gridElements = grid.getAllElements();
940
+ const missingElements = elements.filter(el => !gridElements.includes(el) && !isBoundaryEvent(el));
941
+ if (missingElements.length > 0) {
942
+ stack.push(missingElements[0]);
943
+ grid.add(missingElements[0]);
944
+ visited.add(missingElements[0]);
945
+ this.handleGrid(grid,visited,stack);
946
+ }
944
947
  }
945
948
  }
946
-
947
949
  return grid;
948
950
  }
949
951
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../lib/utils/elementUtils.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.js","../lib/handler/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 class Grid {\n constructor() {\n this.grid = [];\n }\n\n add(element, position) {\n if (!position) {\n this._addStart(element);\n return;\n }\n\n const [ row, col ] = position;\n if (!row && !col) {\n this._addStart(element);\n }\n\n if (!this.grid[row]) {\n this.grid[row] = [];\n }\n\n if (this.grid[row][col]) {\n throw new Error('Grid is occupied please ensure the place you insert at is not occupied');\n }\n\n this.grid[row][col] = element;\n }\n\n createRow(afterIndex) {\n if (!afterIndex) {\n this.grid.push([]);\n }\n\n this.grid.splice(afterIndex + 1, 0, []);\n }\n\n _addStart(element) {\n this.grid.push([ element ]);\n }\n\n addAfter(element, newElement) {\n if (!element) {\n this._addStart(newElement);\n }\n 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}","import { assign, map, pick } from 'min-dash';\n\n\nexport class DiFactory {\n constructor(moddle) {\n this.moddle = moddle;\n }\n\n create(type, attrs) {\n return this.moddle.create(type, attrs || {});\n }\n\n createDiBounds(bounds) {\n return this.create('dc:Bounds', bounds);\n }\n\n createDiLabel() {\n return this.create('bpmndi:BPMNLabel', {\n bounds: this.createDiBounds()\n });\n }\n\n createDiShape(semantic, bounds, attrs) {\n return this.create('bpmndi:BPMNShape', assign({\n bpmnElement: semantic,\n bounds: this.createDiBounds(bounds)\n }, attrs));\n }\n\n createDiWaypoints(waypoints) {\n var self = this;\n\n return map(waypoints, function(pos) {\n return self.createDiWaypoint(pos);\n });\n }\n\n createDiWaypoint(point) {\n return this.create('dc:Point', pick(point, [ 'x', 'y' ]));\n }\n\n createDiEdge(semantic, waypoints, attrs) {\n return this.create('bpmndi:BPMNEdge', assign({\n bpmnElement: semantic,\n waypoint: this.createDiWaypoints(waypoints)\n }, attrs));\n }\n\n createDiPlane(attrs) {\n return this.create('bpmndi:BPMNPlane', attrs);\n }\n\n createDiDiagram(attrs) {\n return this.create('bpmndi:BPMNDiagram', attrs);\n }\n}","export function getDefaultSize(element) {\n if (is(element, 'bpmn:SubProcess')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Task')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Gateway')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:Event')) {\n return { width: 36, height: 36 };\n }\n\n if (is(element, 'bpmn:Participant')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:Lane')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:DataObjectReference')) {\n return { width: 36, height: 50 };\n }\n\n if (is(element, 'bpmn:DataStoreReference')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:TextAnnotation')) {\n return { width: 100, height: 30 };\n }\n\n return { width: 100, height: 80 };\n}\n\nexport function is(element, type) {\n return element.$instanceOf(type);\n}\n","import { getDefaultSize } from '../di/DiUtil.js';\n\nexport const DEFAULT_CELL_WIDTH = 150;\nexport const DEFAULT_CELL_HEIGHT = 140;\n\nexport function getMid(bounds) {\n return {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n}\n\nexport function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrientation = 'top-left') {\n\n // ensure we end up with a specific docking direction\n // based on the targetOrientation, if <h|v> is being passed\n\n if (dockingDirection === 'h') {\n dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';\n }\n\n if (dockingDirection === 'v') {\n dockingDirection = /top/.test(targetOrientation) ? 't' : 'b';\n }\n\n if (dockingDirection === 't') {\n return { original: point, x: point.x, y: rectangle.y };\n }\n\n if (dockingDirection === 'r') {\n return { original: point, x: rectangle.x + rectangle.width, y: point.y };\n }\n\n if (dockingDirection === 'b') {\n return { original: point, x: point.x, y: rectangle.y + rectangle.height };\n }\n\n if (dockingDirection === 'l') {\n return { original: point, x: rectangle.x, y: point.y };\n }\n\n throw new Error('unexpected dockingDirection: <' + dockingDirection + '>');\n}\n\n/**\n * Modified Manhattan layout: Uses space between grid coloumns to route connections\n * if direct connection is not possible.\n * @param {*} source\n * @param {*} target\n * @returns waypoints\n */\nexport function connectElements(source, target, layoutGrid) {\n const sourceDi = source.di;\n const targetDi = target.di;\n\n const sourceBounds = sourceDi.get('bounds');\n const targetBounds = targetDi.get('bounds');\n\n const sourceMid = getMid(sourceBounds);\n const targetMid = getMid(targetBounds);\n\n const dX = target.gridPosition.col - source.gridPosition.col;\n const dY = target.gridPosition.row - source.gridPosition.row;\n\n const dockingSource = `${(dY > 0 ? 'bottom' : 'top')}-${dX > 0 ? 'right' : 'left'}`;\n const dockingTarget = `${(dY > 0 ? 'top' : 'bottom')}-${dX > 0 ? 'left' : 'right'}`;\n\n // Source === Target ==> Build loop\n if (dX === 0 && dY === 0) {\n const { x, y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n { x: x + DEFAULT_CELL_WIDTH, y: y },\n { x: targetMid.x, y: y },\n getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n ];\n }\n\n // negative dX indicates connection from future to past\n if (dX < 0) {\n const offsetY = DEFAULT_CELL_HEIGHT / 2;\n\n let bendY;\n if (sourceMid.y >= targetMid.y) {\n\n // edge goes below\n bendY = sourceMid.y + offsetY;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: bendY },\n { x: targetMid.x, y: bendY },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // edge goes above\n 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\n // Route on bottom\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n { x: targetMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // if space is clear, connect directly\n return [\n getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'h', dockingTarget)\n ];\n }\n }\n\n // connect vertically\n if (dX === 0) {\n if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n // Route parallel\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r'),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: targetMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset },\n { x: targetMid.x, y: targetMid.y + yOffset },\n getDockingPoint(targetMid, targetBounds, Math.sign(yOffset) > 0 ? 'b' : 't')\n ];\n } else {\n\n // if space is clear, connect directly\n return [ getDockingPoint(sourceMid, sourceBounds, 'v', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'v', dockingTarget)\n ];\n }\n }\n\n const directManhattan = directManhattanConnect(source, target, layoutGrid);\n\n if (directManhattan) {\n const startPoint = getDockingPoint(sourceMid, sourceBounds, directManhattan[0], dockingSource);\n const endPoint = getDockingPoint(targetMid, targetBounds, directManhattan[1], dockingTarget);\n\n const midPoint = directManhattan[0] === 'h' ? { x: endPoint.x, y: startPoint.y } : { x: startPoint.x, y: endPoint.y };\n\n return [\n startPoint,\n midPoint,\n endPoint\n ];\n }\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target row\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target column\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y }, // to mid\n getDockingPoint(targetMid, targetBounds, 'l', dockingTarget)\n ];\n}\n\n// helpers /////\nexport function coordinatesToPosition(row, col) {\n return {\n width: DEFAULT_CELL_WIDTH,\n height: DEFAULT_CELL_HEIGHT,\n x: col * DEFAULT_CELL_WIDTH,\n y: row * DEFAULT_CELL_HEIGHT\n };\n}\n\nexport function getBounds(element, row, col, attachedTo) {\n const { width, height } = getDefaultSize(element);\n\n // Center in cell\n if (!attachedTo) {\n return {\n width, height,\n x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2,\n y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2\n };\n }\n\n const hostBounds = getBounds(attachedTo, row, col);\n\n return {\n width, height,\n x: Math.round(hostBounds.x + hostBounds.width / 2 - width / 2),\n y: Math.round(hostBounds.y + hostBounds.height - height / 2)\n };\n}\n\nfunction isDirectPathBlocked(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n let totalElements = 0;\n\n if (dX) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, { row: sourceRow, col: targetCol }).length;\n }\n\n if (dY) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: targetCol }, { row: targetRow, col: targetCol }).length;\n }\n\n return totalElements > 2;\n}\n\nfunction directManhattanConnect(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n // Only directly connect left-to-right flow\n if (!(dX > 0 && dY !== 0)) {\n return;\n }\n\n // If below, go down then horizontal\n if (dY > 0) {\n let totalElements = 0;\n const bendPoint = { row: targetRow, col: sourceCol };\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'v', 'h' ];\n } else {\n\n // If above, go horizontal than vertical\n let totalElements = 0;\n const bendPoint = { row: sourceRow, col: targetCol };\n\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'h', 'v' ];\n }\n}\n","import {\n DEFAULT_CELL_HEIGHT,\n DEFAULT_CELL_WIDTH,\n connectElements,\n getBounds,\n getDockingPoint,\n getMid\n} from '../utils/layoutUtil.js';\n\nexport default {\n 'addToGrid': ({ element, grid, visited }) => {\n const nextElements = [];\n\n const attachedOutgoing = (element.attachers || [])\n .map(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 });\n\n return nextElements;\n },\n\n 'createElementDi': ({ element, row, col, diFactory }) => {\n const hostBounds = getBounds(element, row, col);\n\n const DIs = [];\n (element.attachers || []).forEach((att, i, arr) => {\n att.gridPosition = { row, col };\n const bounds = getBounds(att, row, col, element);\n\n // distribute along lower edge\n bounds.x = hostBounds.x + (i + 1) * (hostBounds.width / (arr.length + 1)) - bounds.width / 2;\n\n const attacherDi = diFactory.createDiShape(att, bounds, {\n id: att.id + '_di'\n });\n att.di = attacherDi;\n att.gridPosition = { row, col };\n\n DIs.push(attacherDi);\n });\n\n return DIs;\n },\n\n 'createConnectionDi': ({ element, row, col, layoutGrid, diFactory }) => {\n const attachers = element.attachers || [];\n\n return attachers.flatMap(att => {\n const outgoing = att.outgoing || [];\n\n return outgoing.map(out => {\n const target = out.targetRef;\n const waypoints = connectElements(att, target, layoutGrid);\n\n // Correct waypoints if they don't automatically attach to the bottom\n ensureExitBottom(att, waypoints, [ row, col ]);\n\n const connectionDi = diFactory.createDiEdge(out, waypoints, {\n id: out.id + '_di'\n });\n\n return connectionDi;\n });\n });\n }\n};\n\n\nfunction insertIntoGrid(newElement, host, grid) {\n const [ row, col ] = grid.find(host);\n\n // Grid is occupied\n if (grid.get(row + 1, col) || grid.get(row + 1, col + 1)) {\n grid.createRow(row);\n }\n\n grid.add(newElement, [ row + 1, col + 1 ]);\n}\n\nfunction ensureExitBottom(source, waypoints, [ row, col ]) {\n\n const sourceDi = source.di;\n const sourceBounds = sourceDi.get('bounds');\n const sourceMid = getMid(sourceBounds);\n\n const dockingPoint = getDockingPoint(sourceMid, sourceBounds, 'b');\n if (waypoints[0].x === dockingPoint.x && waypoints[0].y === dockingPoint.y) {\n return;\n }\n\n if (waypoints.length === 2) {\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 0.5) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n }\n\n // add waypoints to exit bottom and connect to existing path\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: waypoints[1].x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n 'createElementDi': ({ element, row, col, diFactory }) => {\n\n const bounds = getBounds(element, row, col);\n\n const options = {\n id: element.id + '_di'\n };\n\n if (is(element, 'bpmn:ExclusiveGateway')) {\n options.isMarkerVisible = true;\n }\n\n const shapeDi = diFactory.createDiShape(element, bounds, options);\n element.di = shapeDi;\n element.gridPosition = { row, col };\n\n return shapeDi;\n }\n};","import { connectElements } from '../utils/layoutUtil.js';\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 { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is } from './di/DiUtil.js';\nimport { handlers } from './handler/index.js';\nimport { isFunction } from 'min-dash';\n\nexport class Layouter {\n constructor() {\n this.moddle = new BPMNModdle();\n this.diFactory = new DiFactory(this.moddle);\n this._handlers = handlers;\n }\n\n handle(operation, options) {\n return this._handlers\n .filter(handler => isFunction(handler[operation]))\n .map(handler => handler[operation](options));\n\n }\n\n async layoutProcess(xml) {\n const { rootElement } = await this.moddle.fromXML(xml);\n\n this.diagram = rootElement;\n\n const root = this.getProcess();\n\n if (root) {\n this.cleanDi();\n this.handlePlane(root);\n }\n\n return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n }\n\n handlePlane(planeElement) {\n const layout = this.createGridLayout(planeElement);\n this.generateDi(planeElement, layout);\n }\n\n cleanDi() {\n this.diagram.diagrams = [];\n }\n\n createGridLayout(root) {\n const grid = new Grid();\n\n const flowElements = root.flowElements || [];\n 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 const startingElements = flowElements.filter(el => {\n return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0);\n });\n\n const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));\n boundaryEvents.forEach(boundaryEvent => {\n const attachedTask = boundaryEvent.attachedToRef;\n const attachers = attachedTask.attachers || [];\n attachers.push(boundaryEvent);\n attachedTask.attachers = attachers;\n });\n\n // Depth-first-search\n const stack = [ ...startingElements ];\n const visited = new Set();\n\n startingElements.forEach(el => {\n grid.add(el);\n visited.add(el);\n });\n\n 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 > 1) {\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(root, layoutGrid) {\n const diFactory = this.diFactory;\n\n // Step 0: Create Root element\n const diagram = this.diagram;\n\n var planeDi = diFactory.createDiPlane({\n id: 'BPMNPlane_' + root.id,\n bpmnElement: root\n });\n var diagramDi = diFactory.createDiDiagram({\n id: 'BPMNDiagram_' + root.id,\n plane: planeDi\n });\n\n // deepest subprocess is added first - insert at the front\n diagram.diagrams.unshift(diagramDi);\n\n const planeElement = planeDi.get('planeElement');\n\n // Step 1: Create DI for all elements\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createElementDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n\n // Step 2: Create DI for all connections\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createConnectionDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n }\n\n handleGrid(grid, visited, stack) {\n while (stack.length > 0) {\n const currentElement = stack.pop();\n\n if (is(currentElement, 'bpmn:SubProcess')) {\n this.handlePlane(currentElement);\n }\n\n const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited, 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","import { Layouter } from './Layouter.js';\n\nexport function layoutProcess(xml) {\n return new Layouter().layoutProcess(xml);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../lib/utils/elementUtils.js","../lib/Grid.js","../lib/di/DiFactory.js","../lib/di/DiUtil.js","../lib/utils/layoutUtil.js","../lib/handler/attachersHandler.js","../lib/handler/elementHandler.js","../lib/handler/outgoingHandler.js","../lib/handler/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 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}","import { assign, map, pick } from 'min-dash';\n\n\nexport class DiFactory {\n constructor(moddle) {\n this.moddle = moddle;\n }\n\n create(type, attrs) {\n return this.moddle.create(type, attrs || {});\n }\n\n createDiBounds(bounds) {\n return this.create('dc:Bounds', bounds);\n }\n\n createDiLabel() {\n return this.create('bpmndi:BPMNLabel', {\n bounds: this.createDiBounds()\n });\n }\n\n createDiShape(semantic, bounds, attrs) {\n return this.create('bpmndi:BPMNShape', assign({\n bpmnElement: semantic,\n bounds: this.createDiBounds(bounds)\n }, attrs));\n }\n\n createDiWaypoints(waypoints) {\n var self = this;\n\n return map(waypoints, function(pos) {\n return self.createDiWaypoint(pos);\n });\n }\n\n createDiWaypoint(point) {\n return this.create('dc:Point', pick(point, [ 'x', 'y' ]));\n }\n\n createDiEdge(semantic, waypoints, attrs) {\n return this.create('bpmndi:BPMNEdge', assign({\n bpmnElement: semantic,\n waypoint: this.createDiWaypoints(waypoints)\n }, attrs));\n }\n\n createDiPlane(attrs) {\n return this.create('bpmndi:BPMNPlane', attrs);\n }\n\n createDiDiagram(attrs) {\n return this.create('bpmndi:BPMNDiagram', attrs);\n }\n}","export function getDefaultSize(element) {\n if (is(element, 'bpmn:SubProcess')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Task')) {\n return { width: 100, height: 80 };\n }\n\n if (is(element, 'bpmn:Gateway')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:Event')) {\n return { width: 36, height: 36 };\n }\n\n if (is(element, 'bpmn:Participant')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:Lane')) {\n return { width: 400, height: 100 };\n }\n\n if (is(element, 'bpmn:DataObjectReference')) {\n return { width: 36, height: 50 };\n }\n\n if (is(element, 'bpmn:DataStoreReference')) {\n return { width: 50, height: 50 };\n }\n\n if (is(element, 'bpmn:TextAnnotation')) {\n return { width: 100, height: 30 };\n }\n\n return { width: 100, height: 80 };\n}\n\nexport function is(element, type) {\n return element.$instanceOf(type);\n}\n","import { getDefaultSize } from '../di/DiUtil.js';\n\nexport const DEFAULT_CELL_WIDTH = 150;\nexport const DEFAULT_CELL_HEIGHT = 140;\n\nexport function getMid(bounds) {\n return {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n}\n\nexport function getDockingPoint(point, rectangle, dockingDirection = 'r', targetOrientation = 'top-left') {\n\n // ensure we end up with a specific docking direction\n // based on the targetOrientation, if <h|v> is being passed\n if (dockingDirection === 'h') {\n dockingDirection = /left/.test(targetOrientation) ? 'l' : 'r';\n }\n\n if (dockingDirection === 'v') {\n dockingDirection = /top/.test(targetOrientation) ? 't' : 'b';\n }\n\n if (dockingDirection === 't') {\n return { original: point, x: point.x, y: rectangle.y };\n }\n\n if (dockingDirection === 'r') {\n return { original: point, x: rectangle.x + rectangle.width, y: point.y };\n }\n\n if (dockingDirection === 'b') {\n return { original: point, x: point.x, y: rectangle.y + rectangle.height };\n }\n\n if (dockingDirection === 'l') {\n return { original: point, x: rectangle.x, y: point.y };\n }\n\n throw new Error('unexpected dockingDirection: <' + dockingDirection + '>');\n}\n\n/**\n * Modified Manhattan layout: Uses space between grid coloumns to route connections\n * if direct connection is not possible.\n * @param {*} source\n * @param {*} target\n * @returns waypoints\n */\nexport function connectElements(source, target, layoutGrid) {\n const sourceDi = source.di;\n const targetDi = target.di;\n\n const sourceBounds = sourceDi.get('bounds');\n const targetBounds = targetDi.get('bounds');\n\n const sourceMid = getMid(sourceBounds);\n const targetMid = getMid(targetBounds);\n\n const dX = target.gridPosition.col - source.gridPosition.col;\n const dY = target.gridPosition.row - source.gridPosition.row;\n\n const dockingSource = `${(dY > 0 ? 'bottom' : 'top')}-${dX > 0 ? 'right' : 'left'}`;\n const dockingTarget = `${(dY > 0 ? 'top' : 'bottom')}-${dX > 0 ? 'left' : 'right'}`;\n\n // Source === Target ==> Build loop\n if (dX === 0 && dY === 0) {\n const { x, y } = coordinatesToPosition(source.gridPosition.row, source.gridPosition.col);\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: x + DEFAULT_CELL_WIDTH, y: sourceMid.y },\n { x: x + DEFAULT_CELL_WIDTH, y: y },\n { x: targetMid.x, y: y },\n getDockingPoint(targetMid, targetBounds, 't', dockingTarget)\n ];\n }\n\n // 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 return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: y + DEFAULT_CELL_HEIGHT },\n { x: targetMid.x, y: y + 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\n // Route on bottom\n return [\n getDockingPoint(sourceMid, sourceBounds, 'b'),\n { x: sourceMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n { x: targetMid.x, y: sourceMid.y + DEFAULT_CELL_HEIGHT / 2 },\n getDockingPoint(targetMid, targetBounds, 'b')\n ];\n } else {\n\n // if space is clear, connect directly\n return [\n getDockingPoint(sourceMid, sourceBounds, 'h', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'h', dockingTarget)\n ];\n }\n }\n\n // connect vertically\n if (dX === 0) {\n if (isDirectPathBlocked(source, target, layoutGrid)) {\n\n // Route parallel\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r'),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: targetMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset },\n { x: targetMid.x, y: targetMid.y + yOffset },\n getDockingPoint(targetMid, targetBounds, Math.sign(yOffset) > 0 ? 'b' : 't')\n ];\n } else {\n\n // if space is clear, connect directly\n return [ getDockingPoint(sourceMid, sourceBounds, 'v', dockingSource),\n getDockingPoint(targetMid, targetBounds, 'v', dockingTarget)\n ];\n }\n }\n\n const directManhattan = directManhattanConnect(source, target, layoutGrid);\n\n if (directManhattan) {\n const startPoint = getDockingPoint(sourceMid, sourceBounds, directManhattan[0], dockingSource);\n const endPoint = getDockingPoint(targetMid, targetBounds, directManhattan[1], dockingTarget);\n\n const midPoint = directManhattan[0] === 'h' ? { x: endPoint.x, y: startPoint.y } : { x: startPoint.x, y: endPoint.y };\n\n return [\n startPoint,\n midPoint,\n endPoint\n ];\n }\n const yOffset = -Math.sign(dY) * DEFAULT_CELL_HEIGHT / 2;\n\n return [\n getDockingPoint(sourceMid, sourceBounds, 'r', dockingSource),\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: sourceMid.y }, // out right\n { x: sourceMid.x + DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target row\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y + yOffset }, // to target column\n { x: targetMid.x - DEFAULT_CELL_WIDTH / 2, y: targetMid.y }, // to mid\n getDockingPoint(targetMid, targetBounds, 'l', dockingTarget)\n ];\n}\n\n// helpers /////\nexport function coordinatesToPosition(row, col) {\n return {\n width: DEFAULT_CELL_WIDTH,\n height: DEFAULT_CELL_HEIGHT,\n x: col * DEFAULT_CELL_WIDTH,\n y: row * DEFAULT_CELL_HEIGHT\n };\n}\n\nexport function getBounds(element, row, col, attachedTo) {\n const { width, height } = getDefaultSize(element);\n\n // Center in cell\n if (!attachedTo) {\n return {\n width, height,\n x: (col * DEFAULT_CELL_WIDTH) + (DEFAULT_CELL_WIDTH - width) / 2,\n y: row * DEFAULT_CELL_HEIGHT + (DEFAULT_CELL_HEIGHT - height) / 2\n };\n }\n\n const hostBounds = getBounds(attachedTo, row, col);\n\n return {\n width, height,\n x: Math.round(hostBounds.x + hostBounds.width / 2 - width / 2),\n y: Math.round(hostBounds.y + hostBounds.height - height / 2)\n };\n}\n\nfunction isDirectPathBlocked(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n let totalElements = 0;\n\n if (dX) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, { row: sourceRow, col: targetCol }).length;\n }\n\n if (dY) {\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: targetCol }, { row: targetRow, col: targetCol }).length;\n }\n\n return totalElements > 2;\n}\n\nfunction directManhattanConnect(source, target, layoutGrid) {\n const { row: sourceRow, col: sourceCol } = source.gridPosition;\n const { row: targetRow, col: targetCol } = target.gridPosition;\n\n const dX = targetCol - sourceCol;\n const dY = targetRow - sourceRow;\n\n // Only directly connect left-to-right flow\n if (!(dX > 0 && dY !== 0)) {\n return;\n }\n\n // If below, go down then horizontal\n if (dY > 0) {\n let totalElements = 0;\n const bendPoint = { row: targetRow, col: sourceCol };\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'v', 'h' ];\n } else {\n\n // If above, go horizontal than vertical\n let totalElements = 0;\n const bendPoint = { row: sourceRow, col: targetCol };\n\n totalElements += layoutGrid.getElementsInRange({ row: sourceRow, col: sourceCol }, bendPoint).length;\n totalElements += layoutGrid.getElementsInRange(bendPoint, { row: targetRow, col: targetCol }).length;\n\n return totalElements > 2 ? false : [ 'h', 'v' ];\n }\n}\n","import {\n DEFAULT_CELL_HEIGHT,\n DEFAULT_CELL_WIDTH,\n connectElements,\n getBounds,\n getDockingPoint,\n getMid\n} from '../utils/layoutUtil.js';\n\nexport default {\n 'addToGrid': ({ element, grid, visited }) => {\n const nextElements = [];\n\n const attachedOutgoing = (element.attachers || [])\n .map(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 }) => {\n const hostBounds = getBounds(element, row, col);\n\n const DIs = [];\n (element.attachers || []).forEach((att, i, arr) => {\n att.gridPosition = { row, col };\n const bounds = getBounds(att, row, col, element);\n\n // distribute along lower edge\n bounds.x = hostBounds.x + (i + 1) * (hostBounds.width / (arr.length + 1)) - bounds.width / 2;\n\n const attacherDi = diFactory.createDiShape(att, bounds, {\n id: att.id + '_di'\n });\n att.di = attacherDi;\n att.gridPosition = { row, col };\n\n DIs.push(attacherDi);\n });\n\n return DIs;\n },\n\n 'createConnectionDi': ({ element, row, col, layoutGrid, diFactory }) => {\n const attachers = element.attachers || [];\n\n return attachers.flatMap(att => {\n const outgoing = att.outgoing || [];\n\n return outgoing.map(out => {\n const target = out.targetRef;\n const waypoints = connectElements(att, target, layoutGrid);\n\n // Correct waypoints if they don't automatically attach to the bottom\n ensureExitBottom(att, waypoints, [ row, col ]);\n\n const connectionDi = diFactory.createDiEdge(out, waypoints, {\n id: out.id + '_di'\n });\n\n return connectionDi;\n });\n });\n }\n};\n\n\nfunction insertIntoGrid(newElement, host, grid) {\n const [ row, col ] = grid.find(host);\n\n // Grid is occupied\n if (grid.get(row + 1, col) || grid.get(row + 1, col + 1)) {\n grid.createRow(row);\n }\n\n grid.add(newElement, [ row + 1, col + 1 ]);\n}\n\nfunction ensureExitBottom(source, waypoints, [ row, col ]) {\n\n const sourceDi = source.di;\n const sourceBounds = sourceDi.get('bounds');\n const sourceMid = getMid(sourceBounds);\n\n const dockingPoint = getDockingPoint(sourceMid, sourceBounds, 'b');\n if (waypoints[0].x === dockingPoint.x && waypoints[0].y === dockingPoint.y) {\n return;\n }\n\n if (waypoints.length === 2) {\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: (col + 1) * DEFAULT_CELL_WIDTH, y: (row + 0.5) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n }\n\n // add waypoints to exit bottom and connect to existing path\n const newStart = [\n dockingPoint,\n { x: dockingPoint.x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n { x: waypoints[1].x, y: (row + 1) * DEFAULT_CELL_HEIGHT },\n ];\n\n waypoints.splice(0, 1, ...newStart);\n return;\n}","import { is } from '../di/DiUtil.js';\nimport { getBounds } from '../utils/layoutUtil.js';\n\nexport default {\n 'createElementDi': ({ element, row, col, diFactory }) => {\n\n const bounds = getBounds(element, row, col);\n\n const options = {\n id: element.id + '_di'\n };\n\n if (is(element, 'bpmn:ExclusiveGateway')) {\n options.isMarkerVisible = true;\n }\n\n const shapeDi = diFactory.createDiShape(element, bounds, options);\n element.di = shapeDi;\n element.gridPosition = { row, col };\n\n return shapeDi;\n }\n};","import { connectElements } from '../utils/layoutUtil.js';\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 { Grid } from './Grid.js';\nimport { DiFactory } from './di/DiFactory.js';\nimport { is } from './di/DiUtil.js';\nimport { handlers } from './handler/index.js';\nimport { isFunction } from 'min-dash';\n\nexport class Layouter {\n constructor() {\n this.moddle = new BPMNModdle();\n this.diFactory = new DiFactory(this.moddle);\n this._handlers = handlers;\n }\n\n handle(operation, options) {\n return this._handlers\n .filter(handler => isFunction(handler[operation]))\n .map(handler => handler[operation](options));\n\n }\n\n async layoutProcess(xml) {\n const { rootElement } = await this.moddle.fromXML(xml);\n\n this.diagram = rootElement;\n\n const root = this.getProcess();\n\n if (root) {\n this.cleanDi();\n this.handlePlane(root);\n }\n\n return (await this.moddle.toXML(this.diagram, { format: true })).xml;\n }\n\n handlePlane(planeElement) {\n const layout = this.createGridLayout(planeElement);\n this.generateDi(planeElement, layout);\n }\n\n cleanDi() {\n this.diagram.diagrams = [];\n }\n\n createGridLayout(root) {\n const grid = new Grid();\n\n const flowElements = root.flowElements || [];\n 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 const boundaryEvents = flowElements.filter(el => isBoundaryEvent(el));\n boundaryEvents.forEach(boundaryEvent => {\n const attachedTask = boundaryEvent.attachedToRef;\n const attachers = attachedTask.attachers || [];\n attachers.push(boundaryEvent);\n attachedTask.attachers = attachers;\n });\n\n // Depth-first-search\n const visited = new Set();\n while (visited.size < elements.filter(element => !element.attachedToRef).length) {\n\n const startingElements = flowElements.filter(el => {\n return !isConnection(el) && !isBoundaryEvent(el) && (!el.incoming || el.length === 0) && !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(root, layoutGrid) {\n const diFactory = this.diFactory;\n\n // Step 0: Create Root element\n const diagram = this.diagram;\n\n var planeDi = diFactory.createDiPlane({\n id: 'BPMNPlane_' + root.id,\n bpmnElement: root\n });\n var diagramDi = diFactory.createDiDiagram({\n id: 'BPMNDiagram_' + root.id,\n plane: planeDi\n });\n\n // deepest subprocess is added first - insert at the front\n diagram.diagrams.unshift(diagramDi);\n\n const planeElement = planeDi.get('planeElement');\n\n // Step 1: Create DI for all elements\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createElementDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n\n // Step 2: Create DI for all connections\n layoutGrid.elementsByPosition().forEach(({ element, row, col }) => {\n const dis = this\n .handle('createConnectionDi', { element, row, col, layoutGrid, diFactory })\n .flat();\n\n planeElement.push(...dis);\n });\n }\n\n handleGrid(grid, visited, stack) {\n while (stack.length > 0) {\n const currentElement = stack.pop();\n\n if (is(currentElement, 'bpmn:SubProcess')) {\n this.handlePlane(currentElement);\n }\n\n const nextElements = this.handle('addToGrid', { element: currentElement, grid, visited, 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","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,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;AACF;;ACnNO,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;;ACvDO,SAAS,cAAc,CAAC,OAAO,EAAE;AACxC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE;AACtC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,EAAE;;AAEF,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AAChC,IAAI,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,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,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACrC,EAAE;;AAEF,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;AACnC;;AAEO,SAAS,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE;AAClC,EAAE,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAClC;;ACxCO,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;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;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,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE;AACnD,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC,EAAE;AACzC,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,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE;AACtD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE;AACtD,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;;AAEzD;AACA,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC;AACrD,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE;AACpE,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE;AACpE,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG;AACpD,OAAO;AACP,IAAI,CAAC,MAAM;;AAEX;AACA,MAAM,OAAO;AACb,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,CAAC;AACpE,QAAQ,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa;AACnE,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,UAAU,EAAE;AACzD,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;;AAEnD;AACA,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,IAAI,OAAO;AACX,MAAM,KAAK,EAAE,MAAM;AACnB,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,kBAAkB,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,CAAC;AACtE,MAAM,CAAC,EAAE,GAAG,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,MAAM,IAAI;AACtE,KAAK;AACL,EAAE;;AAEF,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;;AAEpD,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;;AC1PA,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;AAC3D,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;;AAEnD,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,OAAO,CAAC;;AAEtD;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;AAC1E,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,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE;AACpE,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG;AACvB,SAAS,CAAC;;AAEV,QAAQ,OAAO,YAAY;AAC3B,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,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,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC/D,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC/E,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,mBAAmB,EAAE;AACjF,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,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC7D,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,mBAAmB,EAAE;AAC7D,GAAG;;AAEH,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;AACrC,EAAE;AACF;;ACxHA,qBAAe;AACf,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK;;AAE3D,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;;AAE/C,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,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;;ACjBD,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;;ACGtF,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,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE1D,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;;AAE9B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;;AAElC,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC5B,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,WAAW,CAAC,YAAY,EAAE;AAC5B,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACtD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;AACzC,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,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AACzE,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,IAAI;AAC5C,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa;AACtD,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE;AACpD,MAAM,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AACnC,MAAM,YAAY,CAAC,SAAS,GAAG,SAAS;AACxC,IAAI,CAAC,CAAC;;AAEN;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;;AAErF,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI;AACzD,QAAQ,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACjH,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,IAAI,QAAQ,CAAC,MAAM,EAAE;AACtD,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,IAAI,EAAE,UAAU,EAAE;AAC/B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;;AAEpC;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;;AAEhC,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC;AAC1C,MAAM,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC,EAAE;AAChC,MAAM,WAAW,EAAE;AACnB,KAAK,CAAC;AACN,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;AAC9C,MAAM,EAAE,EAAE,cAAc,GAAG,IAAI,CAAC,EAAE;AAClC,MAAM,KAAK,EAAE;AACb,KAAK,CAAC;;AAEN;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;;AAEvC,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;;AAEpD;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;AAC/E,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;AAClF,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,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE;AACjD,QAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACxC,MAAM;;AAEN,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;AACF;;ACzJO,SAAS,aAAa,CAAC,GAAG,EAAE;AACnC,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;AAC1C;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bpmn-auto-layout",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "Layout BPMN diagrams, generating missing DI information",
5
5
  "type": "module",
6
6
  "exports": {
@@ -46,14 +46,14 @@
46
46
  "min-dash": "^4.1.1"
47
47
  },
48
48
  "devDependencies": {
49
- "@rollup/plugin-node-resolve": "^15.1.0",
50
- "cross-env": "^7.0.3",
51
- "eslint": "^8.41.0",
52
- "eslint-plugin-bpmn-io": "^1.0.0",
53
- "mocha": "^10.2.0",
49
+ "@rollup/plugin-node-resolve": "^16.0.3",
50
+ "cross-env": "^10.1.0",
51
+ "eslint": "^9.39.2",
52
+ "eslint-plugin-bpmn-io": "^2.2.0",
53
+ "mocha": "^11.7.5",
54
54
  "npm-run-all": "^4.1.5",
55
55
  "open-cli": "^8.0.0",
56
- "rollup": "^4.12.1"
56
+ "rollup": "^4.53.3"
57
57
  },
58
58
  "engines": {
59
59
  "node": ">= 18"