@metadev/daga 1.3.1 → 1.4.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.
Files changed (38) hide show
  1. package/Changelog.md +31 -0
  2. package/assets/styles/_diagram-buttons.scss +71 -37
  3. package/assets/styles/_palette.scss +12 -4
  4. package/assets/styles/_property-editor.scss +0 -3
  5. package/assets/styles/daga.scss +9 -5
  6. package/fesm2022/metadev-daga.mjs +3069 -2588
  7. package/fesm2022/metadev-daga.mjs.map +1 -1
  8. package/index.d.ts +1 -1
  9. package/lib/diagram/diagram.component.d.ts +28 -3
  10. package/lib/diagram-buttons/diagram-buttons.component.d.ts +14 -3
  11. package/lib/diagram-editor/diagram/converters/daga-model.d.ts +5 -0
  12. package/lib/diagram-editor/diagram/diagram-action.d.ts +61 -10
  13. package/lib/diagram-editor/diagram/diagram-canvas.d.ts +26 -7
  14. package/lib/diagram-editor/diagram/diagram-config.d.ts +199 -41
  15. package/lib/diagram-editor/diagram/diagram-connection.d.ts +1 -0
  16. package/lib/diagram-editor/diagram/diagram-element.d.ts +10 -0
  17. package/lib/diagram-editor/diagram/diagram-field.d.ts +11 -4
  18. package/lib/diagram-editor/diagram/diagram-model.d.ts +0 -16
  19. package/lib/diagram-editor/diagram/diagram-node.d.ts +5 -4
  20. package/lib/diagram-editor/diagram/diagram-port.d.ts +1 -0
  21. package/lib/diagram-editor/diagram/diagram-section.d.ts +40 -8
  22. package/lib/diagram-editor/diagram-editor.component.d.ts +2 -1
  23. package/lib/interfaces/canvas.d.ts +48 -17
  24. package/lib/palette/palette.component.d.ts +8 -6
  25. package/lib/property-editor/property-editor.component.d.ts +9 -4
  26. package/lib/services/canvas-provider.service.d.ts +1 -1
  27. package/lib/services/daga-configuration.service.d.ts +1 -1
  28. package/lib/util/events.d.ts +5 -1
  29. package/lib/util/style.d.ts +13 -0
  30. package/lib/util/text-util.d.ts +2 -0
  31. package/package.json +1 -1
  32. package/assets/config/generic-diagram.json +0 -94
  33. package/assets/icon/connection/arrow.svg +0 -23
  34. package/assets/icon/connection/empty-arrow.svg +0 -19
  35. package/assets/icon/connection/empty-diamond.svg +0 -20
  36. package/assets/icon/connection/filled-arrow.svg +0 -19
  37. package/assets/icon/connection/filled-diamond.svg +0 -20
  38. package/assets/icon/connection/line.svg +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"metadev-daga.mjs","sources":["../../../../libs/daga/src/lib/util/svg-util.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga/src/lib/util/grid.ts","../../../../libs/daga/src/lib/util/list-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-layout.ts","../../../../libs/daga/src/lib/util/canvas-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/force-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/horizontal-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/priority-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/vertical-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/diagram-layout.ts","../../../../libs/daga/src/lib/util/events.ts","../../../../libs/daga/src/lib/util/line.ts","../../../../libs/daga/src/lib/util/shape.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-action.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-element.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-property.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-connection.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-section.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-node.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-port.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-field.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-canvas.ts","../../../../libs/daga/src/lib/services/canvas-provider.service.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga/src/lib/errors/errors.component.ts","../../../../libs/daga/src/lib/errors/errors.component.html","../../../../libs/daga/src/lib/palette/palette.component.ts","../../../../libs/daga/src/lib/palette/palette.component.html","../../../../libs/daga/src/lib/text-list-editor/text-list-editor.component.ts","../../../../libs/daga/src/lib/text-list-editor/text-list-editor.component.html","../../../../libs/daga/src/lib/text-map-editor/text-map-editor.component.ts","../../../../libs/daga/src/lib/text-map-editor/text-map-editor.component.html","../../../../libs/daga/src/lib/object-editor/object-editor.component.ts","../../../../libs/daga/src/lib/object-editor/object-editor.component.html","../../../../libs/daga/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga/src/lib/property-editor/property-editor.component.html","../../../../libs/daga/src/lib/services/daga-configuration.service.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.html","../../../../libs/daga/src/lib/diagram/diagram.component.ts","../../../../libs/daga/src/lib/daga.module.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-exporter.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-importer.ts","../../../../libs/daga/src/metadev-daga.ts"],"sourcesContent":["/**\n * An enumeration of the possible sides of a rectangle and directions parallel to the axes of coordinates.\n * @public\n */\nexport enum Side {\n /**\n * Bottom side or direction.\n * @public\n */\n Bottom = 'bottom',\n /**\n * Left side or direction.\n * @public\n */\n Left = 'left',\n /**\n * Right side or direction.\n * @public\n */\n Right = 'right',\n /**\n * Top side or direction.\n * @public\n */\n Top = 'top'\n}\n\n/**\n * An enumeration of the possible corners of a rectangle.\n * @public\n */\nexport enum Corner {\n /**\n * Bottom left corner.\n * @public\n */\n BottomLeft = 'bottom-left',\n /**\n * Bottom right corner.\n * @public\n */\n BottomRight = 'bottom-right',\n /**\n * Top left corner.\n * @public\n */\n TopLeft = 'top-left',\n /**\n * Top right corner.\n * @public\n */\n TopRight = 'top-right'\n}\n\n/**\n * An enumeration of the possible horizontal alignments within a horizontal range of coordinates.\n * @public\n */\nexport enum HorizontalAlign {\n /**\n * Start of an horizontal range of coordinates.\n * @public\n */\n Left = 'left',\n /**\n * Middle of an horizontal range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of an horizontal range of coordinates.\n * @public\n */\n Right = 'right'\n}\n\n/**\n * An enumeration of the possible vertical alignments within a vertical range of coordinates.\n * @public\n */\nexport enum VerticalAlign {\n /**\n * Start of a vertical range of coordinates.\n * @public\n */\n Top = 'top',\n /**\n * Middle of a vertical range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of a vertical range of coordinates.\n * @public\n */\n Bottom = 'bottom'\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, Input } from '@angular/core';\nimport * as d3 from 'd3';\nimport { Side } from '../util/svg-util';\n\n/**\n * Button used to collapse components that implement it.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-collapse-button',\n templateUrl: './collapse-button.component.html',\n imports: [CommonModule]\n})\nexport class CollapseButtonComponent {\n @Input()\n collapsableSelector!: string | ElementRef | HTMLElement;\n @Input()\n collapsableAdditionalSelector!: string;\n @Input()\n collapsed = false;\n @Input()\n disabled = false;\n @Input()\n direction = Side.Bottom;\n @Input()\n rule = 'visibility';\n @Input()\n collapsedValue = 'collapse';\n @Input()\n visibleValue = 'visible';\n\n Side = Side;\n\n toggleCollapse(): void {\n if (!this.disabled) {\n this.collapsed = !this.collapsed;\n let selection;\n if (this.collapsableSelector instanceof ElementRef) {\n selection = d3.select(this.collapsableSelector.nativeElement);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else if (this.collapsableSelector instanceof HTMLElement) {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n }\n selection.style(\n this.rule,\n this.collapsed ? this.collapsedValue : this.visibleValue\n );\n }\n }\n\n getClass(): string {\n switch (this.direction) {\n case Side.Right:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-right';\n } else {\n return 'horizontal-left';\n }\n case Side.Bottom:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-down';\n } else {\n return 'vertical-up';\n }\n case Side.Left:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-left';\n } else {\n return 'horizontal-right';\n }\n case Side.Top:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-up';\n } else {\n return 'vertical-down';\n }\n }\n }\n}\n","<button class=\"collapse-button {{ direction }}\" (click)=\"toggleCollapse()\">\n <div [class]=\"getClass()\"></div>\n</button>\n","import { Point } from './canvas-util';\n\n/**\n * A two dimensional array of elements of the given class that can extend infinitely in any direction, both positive and negative.\n * @private\n */\nexport class Grid<T> {\n private grid: (T | undefined)[][] = [[undefined]];\n private offsetX = 0;\n private offsetY = 0;\n\n /**\n * Get the minimum x coordinate among the elements in the grid.\n */\n minX(): number {\n return -this.offsetX;\n }\n\n /**\n * Get the maximum x coordinate among the elements in the grid.\n */\n maxX(): number {\n return this.width() - 1 - this.offsetX;\n }\n\n /**\n * Get the minimum y coordinate among the elements in the grid.\n */\n minY(): number {\n return -this.offsetY;\n }\n\n /**\n * Get the maximum y coordinate among the elements in the grid.\n */\n maxY(): number {\n return this.height() - 1 - this.offsetY;\n }\n\n /**\n * Get the total extension of the grid along the x axis.\n */\n width(): number {\n return this.grid[0].length;\n }\n\n /**\n * Get the total extension of the grid along the y axis.\n */\n height(): number {\n return this.grid.length;\n }\n\n /**\n * Add a new column at the start of the x axis.\n */\n addColumnLeft() {\n for (const row of this.grid) {\n row.splice(0, 0, undefined);\n }\n this.offsetX = this.offsetX + 1;\n }\n\n /**\n * Add a new column at the end of the x axis.\n */\n addColumnRight() {\n for (const row of this.grid) {\n row.push(undefined);\n }\n }\n\n /**\n * Add a new row at the start of the y axis.\n */\n addRowTop() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.splice(0, 0, newRow);\n this.offsetY = this.offsetY + 1;\n }\n\n /**\n * Add a new row at the end of the y axis.\n */\n addRowBottom() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.push(newRow);\n }\n\n /**\n * Get the element at the given coordinates or undefined if there is no element at the given coordinates.\n */\n get(coords: Point): T | undefined {\n if (this.grid[coords[1] + this.offsetY]) {\n return this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX];\n }\n return undefined;\n }\n\n /**\n * Set the element at the given coordinates to the given element.\n */\n set(coords: Point, value: T | undefined): void {\n while (coords[0] < -this.offsetX) {\n this.addColumnLeft();\n }\n while (coords[0] >= this.width() - this.offsetX) {\n this.addColumnRight();\n }\n while (coords[1] < -this.offsetY) {\n this.addRowTop();\n }\n while (coords[1] >= this.height() - this.offsetY) {\n this.addRowBottom();\n }\n this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX] = value;\n }\n\n /**\n * Get the closest coordinates to the given coordinates that are not set to an element.\n */\n getClosestEmptyCoordinate(coords: Point): Point {\n if (this.get(coords) === undefined) {\n return coords;\n }\n const foundCoords: Point = [...coords];\n // go in a spiral until found the closest empty coordinate\n for (let i = 1; ; ++i) {\n const increase = i % 2 > 0 ? i : -i;\n const step = increase > 0 ? 1 : -1;\n const goalCoords = [foundCoords[0] + increase, foundCoords[1] + increase];\n for (let j = foundCoords[0]; j !== goalCoords[0] + step; j += step) {\n foundCoords[0] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n for (let j = foundCoords[1]; j !== goalCoords[1] + step; j += step) {\n foundCoords[1] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n }\n }\n}\n","/**\n * Removes the given element from the array if it exists within the array.\n * @private\n * @param arr An array.\n * @param obj An element to remove from the array.\n * @returns The given array without the given element removed if it was found; otherwise the array without modifications.\n */\nexport const removeIfExists = <T>(arr: T[], obj: T): T[] => {\n const index = arr.indexOf(obj);\n if (index >= 0) {\n arr.splice(index, 1);\n }\n return arr;\n};\n\n/**\n * Adds the given element to the array if it doesn't exist within the array.\n * @private\n * @param arr An array.\n * @param obj An element to add to the array.\n * @returns The given array with the given element added it was not found; otherwise the array without modifications.\n */\nexport const addIfNotExists = <T>(arr: T[], obj: T): T[] => {\n if (!arr.includes(obj)) {\n arr.push(obj);\n }\n return arr;\n};\n","import { DiagramModel } from '../diagram-model';\nimport { DiagramNode } from '../diagram-node';\nimport { Point } from '../../../util/canvas-util';\nimport { Grid } from '../../../util/grid';\nimport { removeIfExists } from '../../../util/list-util';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which places adjacent nodes close by, placing nodes in order according to depth first search.\n * @public\n */\nexport class AdjacencyLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n model.disableRenderToCanvas();\n\n // arrange nodes\n\n const nodeArrangement = new Grid<DiagramNode>();\n const nodesToBeArranged = [...model.nodes];\n\n while (nodesToBeArranged.length > 0) {\n arrangeNode(\n nodesToBeArranged[0],\n nodeArrangement,\n [0, 0],\n nodesToBeArranged\n );\n }\n\n // place nodes according to arrangement\n\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\n const node = nodeArrangement.get([x, y]);\n if (node !== undefined) {\n node.move([\n x * (maximumWidth + gapSize),\n y * (maximumHeight + gapSize)\n ]);\n }\n }\n }\n\n model.enableRenderToCanvas();\n\n return model;\n }\n}\n\nconst arrangeNode = (\n node: DiagramNode,\n nodeArrangement: Grid<DiagramNode>,\n coords: Point,\n nodesToBeArranged: DiagramNode[]\n): void => {\n const placementCoords = nodeArrangement.getClosestEmptyCoordinate(coords);\n nodeArrangement.set(placementCoords, node);\n removeIfExists(nodesToBeArranged, node);\n for (const adjacency of node.getAdjacentNodes()) {\n if (nodesToBeArranged.includes(adjacency)) {\n arrangeNode(\n adjacency,\n nodeArrangement,\n placementCoords,\n nodesToBeArranged\n );\n }\n }\n};\n","import { DiagramModel } from '../diagram-model';\nimport { DiagramNode } from '../diagram-node';\nimport { Point } from '../../../util/canvas-util';\nimport { Grid } from '../../../util/grid';\nimport { removeIfExists } from '../../../util/list-util';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which places adjacent nodes close by, placing nodes in order according to breadth first search.\n * @public\n */\nexport class BreadthAdjacencyLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n model.disableRenderToCanvas();\n\n // arrange nodes\n\n const nodeArrangement = new Grid<DiagramNode>();\n const nodesToBeArranged = [...model.nodes];\n const nodeGridIndices: { [key: string]: Point } = {};\n const firstNode = nodesToBeArranged[0];\n\n let currentNodeLevel = [firstNode];\n nodeGridIndices[firstNode.id] = [0, 0];\n\n while (nodesToBeArranged.length > 0) {\n const nextNodeLevel: DiagramNode[] = [];\n for (const nodeInThisLevel of currentNodeLevel) {\n nodeArrangement.set(\n nodeArrangement.getClosestEmptyCoordinate(\n nodeGridIndices[nodeInThisLevel.id]\n ),\n nodeInThisLevel\n );\n removeIfExists(nodesToBeArranged, nodeInThisLevel);\n const nodesAdjacentToThisNode = nodeInThisLevel.getAdjacentNodes();\n for (const adjacentNode of nodesAdjacentToThisNode) {\n if (nodesToBeArranged.includes(adjacentNode)) {\n nextNodeLevel.push(adjacentNode);\n nodeGridIndices[adjacentNode.id] =\n nodeGridIndices[nodeInThisLevel.id];\n }\n }\n }\n if (nextNodeLevel.length > 0) {\n currentNodeLevel = nextNodeLevel;\n } else if (nodesToBeArranged.length > 0) {\n const disconnectedNode = nodesToBeArranged[0];\n currentNodeLevel = [disconnectedNode];\n nodeGridIndices[disconnectedNode.id] =\n nodeArrangement.getClosestEmptyCoordinate([0, 0]);\n }\n }\n\n // place nodes according to arrangement\n\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\n const node = nodeArrangement.get([x, y]);\n if (node !== undefined) {\n node.move([\n x * (maximumWidth + gapSize),\n y * (maximumHeight + gapSize)\n ]);\n }\n }\n }\n\n model.enableRenderToCanvas();\n\n return model;\n }\n}\n","import { DiagramModel } from '../diagram-model';\nimport { DiagramNode } from '../diagram-node';\nimport { removeIfExists } from '../../../util/list-util';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which arranges the nodes by a breadth first search system according to their distance to the first node in the list.\n * @public\n */\nexport class BreadthLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n let nodesToBeArranged = [...model.nodes];\n\n // Arrange nodes by a breadth first search\n const firstNode = nodesToBeArranged[0];\n removeIfExists(nodesToBeArranged, firstNode);\n /*\n * Node arrangement is a list of lists where:\n * the first list is the first node in the list of nodes\n * the second list is the nodes connected directly to the first node\n * the third list is the nodes connected directly to the nodes in the second list\n * and so on\n */\n const nodeArrangement = [[firstNode]];\n while (nodesToBeArranged.length > 0) {\n const lastRowOfNodes = nodeArrangement[nodeArrangement.length - 1];\n const nodesInNextRow: DiagramNode[] = [];\n for (const nodeInLastRow of lastRowOfNodes) {\n const nodesAdjacentToThisNode = nodeInLastRow.getAdjacentNodes();\n for (const adjacentNode of nodesAdjacentToThisNode) {\n if (nodesToBeArranged.includes(adjacentNode)) {\n removeIfExists(nodesToBeArranged, adjacentNode);\n nodesInNextRow.push(adjacentNode);\n }\n }\n }\n if (nodesInNextRow.length > 0) {\n nodesInNextRow.sort((a, b) => b.type.priority - a.type.priority);\n nodeArrangement.push(nodesInNextRow);\n } else {\n // what remains in nodesToBeArranged are the nodes which aren't connected to any other node\n // we add them as one last line of nodes to the node arrangement\n nodeArrangement.push(nodesToBeArranged);\n nodesToBeArranged = [];\n }\n }\n\n let widthAccumulator = 0;\n for (const nodeArrangementRow of nodeArrangement) {\n let heightAccumulator = 0;\n for (const node of nodeArrangementRow) {\n node.move([widthAccumulator, heightAccumulator]);\n heightAccumulator += gapSize + node.height;\n }\n const maximumWidth = Math.max(...nodeArrangementRow.map((n) => n.width));\n widthAccumulator += gapSize + maximumWidth;\n }\n\n for (const connection of model.connections) {\n connection.tighten();\n }\n\n return model;\n }\n}\n","import { Side } from './svg-util';\n\n/**\n * A point on a canvas defined as its coordinates along the x and y axes.\n * @see DiagramCanvas\n * @public\n */\nexport type Point = [number, number];\n/**\n * A line on a canvas defined as its start point and end point.\n * @see DiagramCanvas\n * @public\n */\nexport type Line = [Point, Point];\n/**\n * A rectangle on a canvas defined as the points of its opposite corners.\n * @see DiagramCanvas\n * @public\n */\nexport type Rectangle = [Point, Point];\n\n/**\n * Round the coordinates of the given point to the nearest whole number.\n * @public\n * @param point A point.\n * @returns A new point with whole coordinates.\n */\nexport const roundPoint = (point: Point): Point => {\n return [Math.round(point[0]), Math.round(point[1])];\n};\n\n/**\n * Checks if the given coordinate is in the range given by an starting coordinate and an ending coordinate.\n * @public\n * @param coordinate A coordinate to check its presence in the range.\n * @param start A coordinate determining one of the extremes in the range.\n * @param end A coordinate determine one of the extremes in the range.\n * @returns `true` if the given coordinate is in the given range; `false` otherwise.\n */\nexport const between = (\n coordinate: number,\n start: number,\n end: number\n): boolean => {\n if (start < end) {\n return start <= coordinate && coordinate <= end;\n } else {\n return end <= coordinate && coordinate <= start;\n }\n};\n\n/**\n * Moves the given coordinate according to the given changes in coordinates.\n * @public\n * @param oldCoordinate A coordinate.\n * @param oldCoordinates A range of coordinates.\n * @param newCoordinates A range of coordinates.\n * @returns A new coordinate.\n */\nexport const translateCoordinate = (\n oldCoordinate: number,\n oldCoordinates: [number, number],\n newCoordinates: [number, number]\n): number => {\n return (\n ((oldCoordinate - oldCoordinates[0]) /\n (oldCoordinates[1] - oldCoordinates[0])) *\n (newCoordinates[1] - newCoordinates[0]) +\n newCoordinates[0]\n );\n};\n\n/**\n * Moves the coordinates of the given point according to the given changes in coordinates.\n * @public\n * @param oldPoint A point.\n * @param oldCoordsX A range of coordinates along the x axis.\n * @param oldCoordsY A range of coordinates along the y axis.\n * @param newCoordsX A range of coordinates along the x axis.\n * @param newCoordsY A range of coordinates along the y axis.\n * @returns A new point.\n */\nexport const translatePoint = (\n oldPoint: Point,\n oldCoordsX: [number, number],\n oldCoordsY: [number, number],\n newCoordsX: [number, number],\n newCoordsY: [number, number]\n): Point => {\n return [\n translateCoordinate(oldPoint[0], oldCoordsX, newCoordsX),\n translateCoordinate(oldPoint[1], oldCoordsY, newCoordsY)\n ];\n};\n\n/**\n * Calculates the result of moving the given point by the given distance in the given direction.\n * @public\n * @param point A point.\n * @param direction A direction.\n * @param distance A distance.\n * @returns A new point which differs from the given point by the given distance in the given direction.\n */\nexport const movePoint = (\n point: Point,\n direction: Side,\n distance: number\n): Point => {\n switch (direction) {\n case Side.Right:\n return [point[0] + distance, point[1]];\n case Side.Left:\n return [point[0] - distance, point[1]];\n case Side.Bottom:\n return [point[0], point[1] + distance];\n case Side.Top:\n return [point[0], point[1] - distance];\n }\n};\n\n/**\n * Checks whether two given points are the same point, that is, they have the same coordinates and are not NaN.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns `true` if the two points have the same coordinates; `false` otherwise.\n */\nexport const equals = (point1: Point, point2: Point): boolean => {\n return point1[0] === point2[0] && point1[1] === point2[1];\n};\n\n/**\n * Calculates the euclidean distance between two points.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns The euclidean distance between the given points.\n */\nexport const distanceBetweenPoints = (point1: Point, point2: Point): number => {\n return ((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2) ** 0.5;\n};\n\n/**\n * Checks whether the given point is inside the given line.\n * @public\n * @param line A line.\n * @param point A point.\n * @returns `true` if the point is contained within the line; `false` otherwise.\n */\nexport const lineContainsPoint = (line: Line, point: Point): boolean => {\n const alphaX = (point[0] - line[0][0]) / (line[1][0] - line[0][0]);\n if (alphaX < 0 || 1 < alphaX) {\n return false;\n }\n const alphaY = (point[1] - line[0][1]) / (line[1][1] - line[0][1]);\n return alphaX === alphaY;\n};\n\n/**\n * Checks whether the given point is inside the given rectaingle.\n * @public\n * @param rectangle A rectangle.\n * @param point A point.\n * @returns `true` if the point is contained within the rectangle; `false` otherwise.\n */\nexport const rectangleContainsPoint = (\n rectangle: Rectangle,\n point: Point\n): boolean => {\n return (\n between(point[0], rectangle[0][0], rectangle[1][0]) &&\n between(point[1], rectangle[0][1], rectangle[1][1])\n );\n};\n\n/**\n * Checks whether the two given lines share at least one point.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines intersect; `false` otherwise.\n */\nexport const linesIntersect = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they intersect if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they intersect if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // if the lines share endpoints, they intersect\n if (\n equals(line1[0], line2[0]) ||\n equals(line1[0], line2[1]) ||\n equals(line2[0], line1[1]) ||\n equals(line1[1], line2[1])\n ) {\n return true;\n }\n // if both lines are lines that don't share endpoints, calculate\n const dx0 = line1[1][0] - line1[0][0];\n const dx1 = line2[1][0] - line2[0][0];\n const dy0 = line1[1][1] - line1[0][1];\n const dy1 = line2[1][1] - line2[0][1];\n const p0 =\n dy1 * (line2[1][0] - line1[0][0]) - dx1 * (line2[1][1] - line1[0][1]);\n const p1 =\n dy1 * (line2[1][0] - line1[1][0]) - dx1 * (line2[1][1] - line1[1][1]);\n const p2 =\n dy0 * (line1[1][0] - line2[0][0]) - dx0 * (line1[1][1] - line2[0][1]);\n const p3 =\n dy0 * (line1[1][0] - line2[1][0]) - dx0 * (line1[1][1] - line2[1][1]);\n return p0 * p1 <= 0 && p2 * p3 <= 0;\n};\n\n/**\n * Checks whether the two given lines share at least one point and have the same slope.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines overlap; `false` otherwise.\n */\nexport const linesOverlap = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they overlap if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they overlap if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // in order for part of the lines to overlap,\n // one of the lines must include the starting point of the other and\n // one of the lines must include the ending point of the other\n return (\n (lineContainsPoint(line1, line2[0]) ||\n lineContainsPoint(line2, line1[0])) &&\n (lineContainsPoint(line1, line2[1]) || lineContainsPoint(line2, line1[1]))\n );\n};\n\n/**\n * Checks whether the given line shares at least one point with the given rectangle.\n * @public\n * @param line A line.\n * @param rectangle A rectangle.\n * @returns `true` if the line intersects with the rectangle; `false` otherwise.\n */\nexport const lineIntersectsRectangle = (\n line: Line,\n rectangle: Rectangle\n): boolean => {\n // first corner of the rectangle\n const point1: Point = rectangle[0];\n // second corner of the rectangle\n const point2: Point = [rectangle[0][0], rectangle[1][1]];\n // third corner of the rectangle\n const point3: Point = rectangle[1];\n // fourth corner of the rectangle\n const point4: Point = [rectangle[1][0], rectangle[0][1]];\n return (\n linesIntersect(line, [point1, point2]) ||\n linesIntersect(line, [point2, point3]) ||\n linesIntersect(line, [point3, point4]) ||\n linesIntersect(line, [point4, point1])\n );\n};\n","import { Point, distanceBetweenPoints } from '../../../util/canvas-util';\nimport { DiagramModel } from '../diagram-model';\nimport { BreadthLayout } from './breadth-layout';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which attracts connected nodes and repels unconnected nodes.\n * @public\n */\nexport class ForceLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n model.disableRenderToCanvas();\n\n // as a starting point, we apply a simple layout\n new BreadthLayout().apply(model);\n\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n const coolingFactor = 0.99;\n const minimumTemperature = 1;\n const attractionFactor = 0.1;\n const repulsionFactor = 200_000;\n const gapRepulsionFactor = 0.5;\n const shiftNodeIfOverlap = 1;\n const gravityFactor = 0.002;\n let temperature = 100;\n\n while (temperature > minimumTemperature) {\n temperature = temperature * coolingFactor;\n // calculate the center of the diagram for applying gravity\n const diagramCenterCoords: Point = [0, 0];\n if (gravityFactor > 0) {\n for (const node of model.nodes) {\n diagramCenterCoords[0] =\n diagramCenterCoords[0] + node.coords[0] + node.width / 2;\n diagramCenterCoords[1] =\n diagramCenterCoords[1] + node.coords[1] + node.width / 2;\n }\n diagramCenterCoords[0] = diagramCenterCoords[0] / model.nodes.length;\n diagramCenterCoords[1] = diagramCenterCoords[1] / model.nodes.length;\n }\n\n for (const node1 of model.nodes) {\n const node1Adjacencies = node1.getAdjacentNodes();\n for (const node2 of model.nodes) {\n const node1CenterCoords: Point = [\n node1.coords[0] + node1.width / 2,\n node1.coords[1] + node1.height / 2\n ];\n const node2CenterCoords: Point = [\n node2.coords[0] + node2.width / 2,\n node2.coords[1] + node2.height / 2\n ];\n const distanceBetweenNodes = distanceBetweenPoints(\n node1.coords,\n node2.coords\n );\n const newNode2Coords: Point = [node2.coords[0], node2.coords[1]];\n // apply attraction forces between connected nodes\n if (node1Adjacencies.includes(node2)) {\n if (distanceBetweenNodes > 0) {\n if (\n distanceBetweenNodes >\n gapSize +\n (Math.max(node1.width, node1.height) +\n Math.max(node2.width, node2.height)) /\n 2\n ) {\n newNode2Coords[0] =\n newNode2Coords[0] -\n (node2CenterCoords[0] - node1CenterCoords[0]) *\n attractionFactor;\n newNode2Coords[1] =\n newNode2Coords[1] -\n (node2CenterCoords[1] - node1CenterCoords[1]) *\n attractionFactor;\n } else {\n newNode2Coords[0] =\n newNode2Coords[0] +\n (node2CenterCoords[0] - node1CenterCoords[0]) *\n gapRepulsionFactor;\n newNode2Coords[1] =\n newNode2Coords[1] +\n (node2CenterCoords[1] - node1CenterCoords[1]) *\n gapRepulsionFactor;\n }\n }\n }\n // apply repulsion forces between nodes\n if (distanceBetweenNodes > 0) {\n const force =\n repulsionFactor / (distanceBetweenNodes * distanceBetweenNodes);\n newNode2Coords[0] =\n newNode2Coords[0] +\n (force * (node2CenterCoords[0] - node1CenterCoords[0])) /\n distanceBetweenNodes;\n newNode2Coords[1] =\n newNode2Coords[1] +\n (force * (node2CenterCoords[1] - node1CenterCoords[1])) /\n distanceBetweenNodes;\n } else {\n newNode2Coords[0] =\n newNode2Coords[0] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\n newNode2Coords[1] =\n newNode2Coords[1] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\n }\n // apply gravity force\n if (gravityFactor > 0) {\n newNode2Coords[0] =\n newNode2Coords[0] -\n (node2CenterCoords[0] - diagramCenterCoords[0]) * gravityFactor;\n newNode2Coords[1] =\n newNode2Coords[1] -\n (node2CenterCoords[1] - diagramCenterCoords[1]) * gravityFactor;\n }\n // limit force\n if (newNode2Coords[0] - node2.coords[0] > temperature) {\n newNode2Coords[0] = node2.coords[0] + temperature;\n } else if (newNode2Coords[0] - node2.coords[0] < -temperature) {\n newNode2Coords[0] = node2.coords[0] - temperature;\n }\n if (newNode2Coords[1] - node2.coords[1] > temperature) {\n newNode2Coords[1] = node2.coords[1] + temperature;\n } else if (newNode2Coords[1] - node2.coords[1] < -temperature) {\n newNode2Coords[1] = node2.coords[1] - temperature;\n }\n\n node2.move(newNode2Coords);\n }\n }\n }\n\n if (model.canvas && model.canvas.snapToGrid) {\n for (const node of model.nodes) {\n const snappedCoords = model.canvas.getClosestGridPoint(node.coords);\n node.move(snappedCoords);\n }\n }\n\n for (const connection of model.connections) {\n connection.tighten();\n }\n\n model.enableRenderToCanvas();\n\n return model;\n }\n}\n","import { DiagramModel } from '../diagram-model';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which arranges all the nodes in a horizontal line.\n * @public\n */\nexport class HorizontalLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n\n const nodesToBeArranged = model.nodes.all();\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\n\n let widthAccumulator = 0;\n\n for (const node of nodesToBeArranged) {\n node.move([widthAccumulator, 0]);\n widthAccumulator += node.width + gapSize;\n }\n\n return model;\n }\n}\n","import { removeIfExists } from '../../../util/list-util';\nimport { DiagramModel } from '../diagram-model';\nimport { DiagramNode } from '../diagram-node';\nimport { BreadthLayout } from './breadth-layout';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which arranges the nodes by their priority first.\n * @public\n */\nexport class PriorityLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n const maximumPriority = Math.max(\n ...model.nodes.types.all().map((n) => n.priority)\n );\n const minimumPriority = Math.min(\n ...model.nodes.types.all().map((n) => n.priority)\n );\n if (maximumPriority === minimumPriority) {\n // if there's no disparity in priorities, just use breadth layout\n new BreadthLayout().apply(model);\n return model;\n }\n\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n const nodesToBeArranged = [...model.nodes];\n const nodeArrangement: DiagramNode[][] = [];\n\n const nodesWithMaximumPriorityToBeArranged = model.nodes.filter(\n undefined,\n maximumPriority\n );\n const nodesWithMaximumPriority: DiagramNode[] = [];\n if (nodesWithMaximumPriorityToBeArranged.length > 1) {\n // use bfs to sort nodes by distance to the first node\n const bfsRoot = nodesWithMaximumPriorityToBeArranged[0];\n nodesWithMaximumPriorityToBeArranged.splice(0, 1);\n nodesWithMaximumPriority.push(bfsRoot);\n const bfsQueue = [bfsRoot];\n const bfsExplored = [bfsRoot];\n while (bfsQueue.length > 0) {\n const bfsNode = bfsQueue[0];\n bfsQueue.splice(0, 1);\n if (nodesWithMaximumPriorityToBeArranged.includes(bfsNode)) {\n nodesWithMaximumPriority.push(bfsNode);\n removeIfExists(nodesWithMaximumPriorityToBeArranged, bfsNode);\n }\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\n if (!bfsExplored.includes(bfsAdjacentNode)) {\n bfsQueue.push(bfsAdjacentNode);\n bfsExplored.push(bfsAdjacentNode);\n }\n }\n }\n // nodes that are disconnected from other nodes\n for (const node of nodesWithMaximumPriorityToBeArranged) {\n nodesWithMaximumPriority.push(node);\n }\n } else {\n nodesWithMaximumPriority.push(nodesWithMaximumPriorityToBeArranged[0]);\n }\n for (const node of nodesWithMaximumPriority) {\n removeIfExists(nodesToBeArranged, node);\n nodeArrangement.push([node]);\n }\n // last column, for disconnected nodes\n nodeArrangement.push([]);\n\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\n while (nodesToBeArranged.length > 0) {\n // use bfs to find the closest high priority node\n const nodeToBeArranged = nodesToBeArranged[0];\n nodesToBeArranged.splice(0, 1);\n const bfsQueue = [nodeToBeArranged];\n const bfsExplored = [nodeToBeArranged];\n let bfsFound = false;\n while (bfsQueue.length > 0) {\n const bfsNode = bfsQueue[0];\n bfsQueue.splice(0, 1);\n const indexOfBfsNode = nodesWithMaximumPriority.indexOf(bfsNode);\n if (indexOfBfsNode >= 0) {\n nodeArrangement[indexOfBfsNode].push(nodeToBeArranged);\n bfsFound = true;\n break;\n } else {\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\n if (!bfsExplored.includes(bfsAdjacentNode)) {\n bfsQueue.push(bfsAdjacentNode);\n bfsExplored.push(bfsAdjacentNode);\n }\n }\n }\n }\n if (!bfsFound) {\n // node is disconnected from any of the high priority nodes\n nodeArrangement[nodeArrangement.length - 1].push(nodeToBeArranged);\n }\n }\n\n let widthAccumulator = 0;\n for (let i = 0; i < nodeArrangement.length; ++i) {\n let heightAccumulator = 0;\n for (let j = 0; j < nodeArrangement[i].length; ++j) {\n const node = nodeArrangement[i][j];\n node.move([widthAccumulator, heightAccumulator]);\n heightAccumulator += gapSize + node.height;\n }\n const maximumWidth = Math.max(...nodeArrangement[i].map((n) => n.width));\n widthAccumulator += gapSize + maximumWidth;\n }\n\n for (const connection of model.connections) {\n connection.tighten();\n }\n\n return model;\n }\n}\n","import { DiagramModel } from '../diagram-model';\nimport { DiagramLayout } from './diagram-layout';\n\n/**\n * A layout which arranges all the nodes in a vertical line.\n * @public\n */\nexport class VerticalLayout implements DiagramLayout {\n apply(model: DiagramModel): DiagramModel {\n if (model.nodes.length === 0) {\n // nothing to arrange...\n return model;\n }\n\n const gapSize = (model.canvas?.gridSize || 0) * 2;\n\n const nodesToBeArranged = model.nodes.all();\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\n\n let heightAccumulator = 0;\n\n for (const node of nodesToBeArranged) {\n node.move([0, heightAccumulator]);\n heightAccumulator += node.height + gapSize;\n }\n\n return model;\n }\n}\n","import { DiagramModel } from '../diagram-model';\nimport { AdjacencyLayout } from './adjacency-layout';\nimport { BreadthAdjacencyLayout } from './breadth-adjacency-layout';\nimport { BreadthLayout } from './breadth-layout';\nimport { ForceLayout } from './force-layout';\nimport { HorizontalLayout } from './horizontal-layout';\nimport { PriorityLayout } from './priority-layout';\nimport { VerticalLayout } from './vertical-layout';\n\n/**\n * A layout algorithm that can be applied to a diagram.\n * @public\n */\nexport interface DiagramLayout {\n /**\n * Rearranges the diagram elements of the given model according to a layout algorithm.\n * @public\n */\n apply(model: DiagramModel): DiagramModel;\n}\n\n/**\n * Mapping of available layout algorithms.\n */\nexport const layouts: { [key: string]: DiagramLayout } = {\n adjacency: new AdjacencyLayout(),\n breadth: new BreadthLayout(),\n 'breadth-adjacency': new BreadthAdjacencyLayout(),\n force: new ForceLayout(),\n horizontal: new HorizontalLayout(),\n priority: new PriorityLayout(),\n vertical: new VerticalLayout()\n};\n","/**\n * User events.\n * @private\n */\nexport enum Events {\n Blur = 'blur',\n Change = 'change',\n Click = 'click',\n DoubleClick = 'dblclick',\n Input = 'input',\n KeyUp = 'keyup',\n MouseMove = 'mousemove',\n MouseOut = 'mouseout',\n MouseOver = 'mouseover'\n}\n\n/**\n * Keys in keyboard events.\n * @private\n */\nexport enum Keys {\n Alt = 'Alt',\n AltGraph = 'AltGraph',\n ArrowDown = 'ArrowDown',\n ArrowLeft = 'ArrowLeft',\n ArrowRight = 'ArrowRight',\n ArrowUp = 'ArrowUp',\n Backspace = 'Backspace',\n Control = 'Control',\n Delete = 'Delete',\n End = 'End',\n Enter = 'Enter',\n Escape = 'Escape',\n Home = 'Home',\n OS = 'OS',\n PageDown = 'PageDown',\n PageUp = 'PageUp',\n Shift = 'Shift',\n Tab = 'Tab'\n}\n\n/**\n * Types of events used by D3's drag functionality.\n * @private\n */\nexport enum DragEvents {\n Drag = 'drag',\n Start = 'start',\n End = 'end'\n}\n\n/**\n * Types of events used by D3's zoom functionality.\n * @private\n */\nexport enum ZoomEvents {\n Zoom = 'zoom',\n Start = 'start',\n End = 'end'\n}\n","import { Point } from './canvas-util';\nimport { Side } from './svg-util';\n\n/**\n * An enumeration of the possible shapes of a line.\n * @public\n */\nexport enum LineShape {\n /**\n * A line that goes between its points taking the shortest euclidean distance.\n * @public\n */\n Straight = 'straight',\n /**\n * A line that goes between its points using bezier splines.\n * @public\n */\n Bezier = 'bezier',\n /**\n * A line that goes between its points moving parallel to the axes of coordinates.\n * @public\n */\n Square = 'square'\n}\n\n/**\n * An enumeration of the possible styles of a line.\n * @public\n */\nexport enum LineStyle {\n /**\n * A solid uninterrupted line.\n * @public\n */\n Solid = 'solid',\n /**\n * A dashed line with little separation between the dashes.\n * @public\n */\n Dashed = 'dashed',\n /**\n * A dashed line with wide gaps between the dashes.\n * @public\n */\n GappedDashes = 'gapped-dashes',\n /**\n * A dotted line.\n * @public\n */\n Dotted = 'dotted'\n}\n\n/**\n * The default minimum distance before turn used by the linePath function.\n * @private\n */\nconst MINIMUM_DISTANCE_BEFORE_TURN = 20;\n\n/**\n * Calculates the path of an SVG line with the given parameters.\n * @private\n */\nexport const linePath = (\n shape: LineShape,\n points: Point[],\n startDirection?: Side | undefined,\n endDirection?: Side | undefined,\n minimumDistanceBeforeTurn?: number\n): string => {\n if (points.length === 0) {\n return '';\n } else if (points.length === 1) {\n return `M ${points[0][0]} ${points[0][1]}`;\n } else {\n minimumDistanceBeforeTurn =\n minimumDistanceBeforeTurn || MINIMUM_DISTANCE_BEFORE_TURN;\n let result = '';\n let currentDirection: Side | undefined;\n let nextDirection: Side | undefined;\n switch (shape) {\n case LineShape.Straight:\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n break;\n case LineShape.Bezier:\n currentDirection = startDirection;\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n if (i + 1 >= points.length) {\n nextDirection = endDirection;\n } else {\n if (\n Math.abs(points[i][0] - points[i - 1][0]) <\n Math.abs(points[i][1] - points[i - 1][1])\n ) {\n if (points[i][1] > points[i - 1][1]) {\n nextDirection = Side.Bottom;\n } else {\n nextDirection = Side.Top;\n }\n } else {\n if (points[i][0] > points[i - 1][0]) {\n nextDirection = Side.Right;\n } else {\n nextDirection = Side.Left;\n }\n }\n }\n if (currentDirection !== undefined) {\n let controlPoint1 = '';\n let controlPoint2 = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (currentDirection) {\n case Side.Bottom:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint1 = `${points[i - 1][0] + controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n case Side.Left:\n controlPoint1 = `${points[i - 1][0] - controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n }\n if (nextDirection !== undefined) {\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint2 = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint2 = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` C ${controlPoint1} ${controlPoint2} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` Q ${controlPoint1} ${points[i][0]} ${points[i][1]}`;\n }\n } else {\n if (nextDirection !== undefined) {\n let controlPoint = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` Q ${controlPoint} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n }\n currentDirection = nextDirection;\n }\n break;\n case LineShape.Square:\n result += `M ${points[0][0]} ${points[0][1]}`;\n if (startDirection) {\n switch (startDirection) {\n case Side.Bottom:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(1, 0, [\n points[0][0] + minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n case Side.Left:\n points.splice(1, 0, [\n points[0][0] - minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n }\n }\n if (endDirection) {\n switch (endDirection) {\n case Side.Bottom:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] + minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n case Side.Left:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] - minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n }\n }\n for (let i = 1; i < points.length; ++i) {\n if (currentDirection !== undefined) {\n switch (currentDirection) {\n case Side.Bottom:\n if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] + minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Top:\n if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] - minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Right:\n if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] + minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n case Side.Left:\n if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] - minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n }\n } else {\n if (points[i][0] !== points[i - 1][0]) {\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n }\n if (points[i][1] !== points[i - 1][1]) {\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n }\n }\n }\n break;\n }\n return result;\n }\n};\n\n/**\n * Calculates the dasharray property of an SVG line corresponding to the given line style and width.\n * @private\n */\nexport const lineStyleDasharray = (style: LineStyle, width: number): string => {\n switch (style) {\n case LineStyle.Dotted:\n return `${width}`;\n case LineStyle.Dashed:\n return `${4 * width} ${width}`;\n case LineStyle.GappedDashes:\n return `${4 * width} ${4 * width}`;\n case LineStyle.Solid:\n default:\n return 'none';\n }\n};\n","/**\n * An enumeration of possible closed shapes.\n * @public\n */\nexport enum ClosedShape {\n /**\n * An ellipse shape.\n * @public\n */\n Ellipse = 'ellipse',\n /**\n * A nonexistent shape.\n * @public\n */\n Empty = 'empty',\n /**\n * A folder-like shape.\n * @public\n */\n Folder = 'folder',\n /**\n * An hexagon shape.\n * @public\n */\n Hexagon = 'hexagon',\n /**\n * An octagon shape.\n * @public\n */\n Octagon = 'octagon',\n /**\n * A shape delimited by curves with a fixed radius, with differences in dimensions supplemented by straight lines.\n * @public\n */\n Pill = 'pill',\n /**\n * A rectangle shape.\n * @public\n */\n Rectangle = 'rectangle',\n /**\n * A rhombus shape.\n * @public\n */\n Rhombus = 'rhombus',\n /**\n * A rectangle shape with rounded corners.\n * @public\n */\n RoundedRectangle = 'rounded-rectangle',\n /**\n * A sticky note-like shape.\n * @public\n */\n StickyNote = 'sticky-note'\n}\n\n/**\n * Get the SVG path of the correspondign closed shape, starting at the given x and y coordinates, with the given width and height.\n * @private\n */\nexport const generalClosedPath = (\n shape: ClosedShape,\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n switch (shape) {\n case ClosedShape.Ellipse:\n return ellipsePath(x, y, width, height);\n case ClosedShape.Empty:\n return emptyPath();\n case ClosedShape.Folder:\n return folderPath(x, y, width, height);\n case ClosedShape.Hexagon:\n return hexagonPath(x, y, width, height);\n case ClosedShape.Octagon:\n return octagonPath(x, y, width, height);\n case ClosedShape.Pill:\n return pillPath(x, y, width, height);\n case ClosedShape.Rectangle:\n return rectanglePath(x, y, width, height);\n case ClosedShape.Rhombus:\n return rhombusPath(x, y, width, height);\n case ClosedShape.RoundedRectangle:\n return roundedRectanglePath(x, y, width, height);\n case ClosedShape.StickyNote:\n return stickyNotePath(x, y, width, height);\n default:\n return rectanglePath(x, y, width, height);\n }\n};\n\n/**\n * Generates an ellipse SVG path.\n * @see ClosedShape\n * @private\n */\nexport const ellipsePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} A ${width / 2} ${height / 2} 0 0 0 ${\n x + width / 2\n } ${y + height} A ${width / 2} ${height / 2} 0 1 0 ${x + width / 2} ${y} Z`;\n};\n\n/**\n * Generates an empty SVG path.\n * @see ClosedShape\n * @private\n */\nexport const emptyPath = (): string => {\n return 'Z';\n};\n\n/**\n * Generates a folder SVG path.\n * @see ClosedShape\n * @private\n */\nexport const folderPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width / 3} ${y} L ${x + width / 2} ${\n y + height / 6\n } L ${x + width} ${y + height / 6} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates an hexagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const hexagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 2} L ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates an octagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const octagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 4} L ${x + width} ${y + (3 * height) / 4} L ${\n x + (3 * width) / 4\n } ${y + height} L ${x + width / 4} ${y + height} L ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} L ${x + width / 4} ${y} Z`;\n};\n\n/**\n * Generates a pill SVG path.\n * @see ClosedShape\n * @private\n */\nexport const pillPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n if (height < width) {\n return `M ${x + height / 2} ${y} L ${x + width - height / 2} ${y} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + width} ${y + height / 2} A ${height / 2} ${\n height / 2\n } 0 0 1 ${x + width - height / 2} ${y + height} L ${x + height / 2} ${\n y + height\n } A ${height / 2} ${height / 2} 0 0 1 ${x} ${y + height / 2} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + height / 2} ${y} Z`;\n } else if (height > width) {\n return `M ${x} ${y + width / 2} L ${x} ${y + height - width / 2} A ${\n width / 2\n } ${width / 2} 0 0 0 ${x + width / 2} ${y + height} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x + width} ${y + height - width / 2} L ${x + width} ${\n y + width / 2\n } A ${width / 2} ${width / 2} 0 0 0 ${x + width / 2} ${y} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x} ${y + width / 2} Z`;\n } else {\n return ellipsePath(x, y, width, height);\n }\n};\n\n/**\n * Generates a rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates a rhombus SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rhombusPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} L ${x + width} ${y + height / 2} L ${\n x + width / 2\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates a rounded rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const roundedRectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} A ${\n width / 4\n } ${height / 4} 0 0 1 ${x + width} ${y + height / 4} L ${x + width} ${\n y + (3 * height) / 4\n } A ${width / 4} ${height / 4} 0 0 1 ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} A ${width / 4} ${height / 4} 0 0 1 ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} A ${width / 4} ${height / 4} 0 0 1 ${\n x + width / 4\n } ${y} Z`;\n};\n\n/**\n * Generates a sticky note SVG path.\n * @see ClosedShape\n * @private\n */\nexport const stickyNotePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + (3 * width) / 4} ${y} L ${x + (3 * width) / 4} ${\n y + height / 4\n } L ${x + (3 * width) / 4} ${y} L ${x + width} ${y + height / 4} L ${\n x + (3 * width) / 4\n } ${y + height / 4} L ${x + width} ${y + height / 4} L ${x + width} ${\n y + height\n } L ${x} ${y + height} Z`;\n};\n","import { Canvas } from '../../interfaces/canvas';\nimport { Point } from '../../util/canvas-util';\nimport { addIfNotExists } from '../../util/list-util';\nimport { Side } from '../../util/svg-util';\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\nimport { DiagramField } from './diagram-field';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\nimport { DiagramPort } from './diagram-port';\nimport { ValueSet } from './diagram-property';\nimport { DiagramSection } from './diagram-section';\n\n/**\n * A queue of recent actions taken by the user that can be undone and redone.\n * @private\n */\nexport class ActionQueue {\n /**\n * Maximum number of actions that can be recorded simultaneously.\n * When new actions are added past this limit, older actions are removed.\n * @private\n */\n maximum: number;\n /**\n * List of recorded actions, from oldest to newest.\n * @private\n */\n history: DiagramAction[];\n /**\n * Index of the last action not counting undone actions. One-indexed. Zero if all actions are undone.\n * @private\n */\n index: number;\n\n constructor(maximum: number) {\n this.maximum = maximum;\n this.history = [];\n this.index = 0;\n }\n\n /**\n * Adds an action to the history.\n * @private\n */\n add(action: DiagramAction): void {\n if (this.index < this.history.length) {\n this.history = this.history.slice(0, this.index);\n }\n if (this.history.length >= this.maximum) {\n this.history = this.history.slice(1, this.history.length);\n this.history.push(action);\n } else {\n this.history.push(action);\n ++this.index;\n }\n }\n\n /**\n * Undoes the last action in the history, not counting undone actions.\n * @private\n */\n undo(): void {\n if (this.index > 0) {\n --this.index;\n this.history[this.index].undo();\n }\n }\n\n /**\n * Redoes the last undone action in the history.\n * @private\n */\n redo(): void {\n if (this.index < this.history.length) {\n this.history[this.index].redo();\n ++this.index;\n }\n }\n}\n\n/**\n * An action taken by the user that can be undone and redone.\n * @private\n */\nexport interface DiagramAction {\n undo(): void;\n redo(): void;\n}\n\n/**\n * Enum listing the actions that can be taken by the user.\n * @private\n */\nexport enum DiagramActions {\n AddConnectionAction = 'add-connection',\n AddNodeAction = 'add-node',\n EditFieldAction = 'edit-field',\n MoveNodeAction = 'move-node',\n RemoveAction = 'remove',\n StretchNodeAction = 'stretch-node',\n StretchSectionAction = 'stretch-section',\n UpdateValuesAction = 'update-values'\n}\n\n/**\n * Action which consists of adding a node.\n * @see DiagramNode\n * @private\n */\nexport class AddNodeAction implements DiagramAction {\n canvas: Canvas;\n type: DiagramNodeType;\n coords: Point;\n label?: string;\n values?: { [key: string]: unknown };\n id?: string | undefined;\n sectionIds?: (string | undefined)[];\n sectionPortIds?: (string | undefined)[][];\n sectionPortLabelIds?: (string | undefined)[][];\n portIds?: (string | undefined)[];\n portLabelIds?: (string | undefined)[];\n labelId?: string | undefined;\n\n constructor(\n canvas: Canvas,\n type: DiagramNodeType,\n coords: Point,\n label?: string,\n values?: { [key: string]: unknown },\n id?: string\n ) {\n this.canvas = canvas;\n this.type = type;\n this.coords = coords;\n this.label = label;\n this.values = values;\n this.id = id;\n }\n\n undo(): void {\n if (this.id) {\n this.canvas.model.nodes.remove(this.id);\n }\n }\n\n redo(): void {\n const node = this.canvas.model.nodes.new(\n this.type,\n this.coords,\n this.id,\n this.sectionIds,\n this.sectionPortIds,\n this.sectionPortLabelIds,\n this.portIds,\n this.portLabelIds,\n this.labelId\n );\n if (this.values !== undefined) {\n node.valueSet.setValues(\n structuredClone({\n ...node.valueSet.getValues(),\n ...this.values\n })\n );\n }\n if (node.label) {\n node.label.text = this.label || '';\n this.canvas.updateFieldsInView(node.label.id);\n }\n // reset our ids in case they were automatically generated\n this.id = node.id;\n this.sectionIds = node.sections.map((s) => s.id);\n this.sectionPortIds = node.sections.map((s) => s.ports.map((p) => p.id));\n this.sectionPortLabelIds = node.sections.map((s) =>\n s.ports.map((p) => p.label?.id)\n );\n this.portIds = node.ports.map((p) => p.id);\n this.portLabelIds = node.ports.map((p) => p.label?.id);\n this.labelId = node.label?.id;\n }\n}\n\n/**\n * Action which consists of moving a node.\n * @see DiagramNode\n * @private\n */\nexport class MoveNodeAction implements DiagramAction {\n canvas: Canvas;\n nodeId: string;\n from: Point;\n to: Point;\n\n constructor(canvas: Canvas, nodeId: string, from: Point, to: Point) {\n this.canvas = canvas;\n this.nodeId = nodeId;\n this.from = from;\n this.to = to;\n }\n\n undo(): void {\n this.canvas.model.nodes.get(this.nodeId)?.move(this.from);\n }\n\n redo(): void {\n this.canvas.model.nodes.get(this.nodeId)?.move(this.to);\n }\n}\n\n/**\n * Action which consists of changing the dimensions of a node in a given direction.\n * @see DiagramNode\n * @private\n */\nexport class StretchNodeAction implements DiagramAction {\n canvas: Canvas;\n nodeId: string;\n direction: Side;\n from: number;\n to: number;\n\n constructor(\n canvas: Canvas,\n nodeId: string,\n direction: Side,\n from: number,\n to: number\n ) {\n this.canvas = canvas;\n this.nodeId = nodeId;\n this.direction = direction;\n this.from = from;\n this.to = to;\n }\n\n undo(): void {\n this.canvas.model.nodes\n .get(this.nodeId)\n ?.stretch(this.direction, this.from - this.to);\n }\n\n redo(): void {\n this.canvas.model.nodes\n .get(this.nodeId)\n ?.stretch(this.direction, this.to - this.from);\n }\n}\n\n/**\n * Action which consists of changing the dimensions of a section in a given direction.\n * @see DiagramSection\n * @private\n */\nexport class StretchSectionAction implements DiagramAction {\n canvas: Canvas;\n sectionId: string;\n direction: Side;\n from: number;\n to: number;\n\n constructor(\n canvas: Canvas,\n sectionId: string,\n direction: Side,\n from: number,\n to: number\n ) {\n this.canvas = canvas;\n this.sectionId = sectionId;\n this.direction = direction;\n this.from = from;\n this.to = to;\n }\n\n undo(): void {\n const section = this.canvas.model.sections.get(this.sectionId);\n const node = section?.node;\n if (node) {\n node.stretchSections(this.direction, this.from - this.to, section.coords);\n }\n }\n\n redo(): void {\n const section = this.canvas.model.sections.get(this.sectionId);\n const node = section?.node;\n if (node) {\n node.stretchSections(this.direction, this.to - this.from, section.coords);\n }\n }\n}\n\n/**\n * Action which consists of adding a connection.\n * @see DiagramConnection\n * @private\n */\nexport class AddConnectionAction implements DiagramAction {\n canvas: Canvas;\n type: DiagramConnectionType;\n startId: string;\n endId: string;\n id?: string;\n\n constructor(\n canvas: Canvas,\n type: DiagramConnectionType,\n startId: string,\n endId: string,\n id?: string\n ) {\n this.canvas = canvas;\n this.type = type;\n this.startId = startId;\n this.endId = endId;\n this.id = id;\n }\n\n undo(): void {\n if (this.id) {\n this.canvas.model.connections.remove(this.id);\n }\n }\n\n redo(): void {\n const start = this.canvas.model.ports.get(this.startId);\n const end = this.canvas.model.ports.get(this.endId);\n if (start && end) {\n const connection = this.canvas.model.connections.new(\n this.type,\n start,\n end,\n this.id\n );\n // reset our id in case it was automatically generated\n this.id = connection.id;\n }\n }\n}\n\n/**\n * Action which consists of editing the text of a field.\n * @see DiagramField\n * @private\n */\nexport class EditFieldAction implements DiagramAction {\n canvas: Canvas;\n fieldId: string;\n from: string;\n to: string;\n\n constructor(canvas: Canvas, fieldId: string, from: string, to: string) {\n this.canvas = canvas;\n this.fieldId = fieldId;\n this.from = from;\n this.to = to;\n }\n\n undo(): void {\n const field = this.canvas.model.fields.get(this.fieldId);\n if (field) {\n field.text = this.from;\n this.canvas.updateFieldsInView(this.fieldId);\n }\n }\n\n redo(): void {\n const field = this.canvas.model.fields.get(this.fieldId);\n if (field) {\n field.text = this.to;\n this.canvas.updateFieldsInView(this.fieldId);\n }\n }\n}\n\n/**\n * Action which consists of editing the values of a value set.\n * @see ValueSet\n * @private\n */\nexport class UpdateValuesAction implements DiagramAction {\n model: DiagramModel;\n id: string | undefined;\n from: { [key: string]: unknown };\n to: { [key: string]: unknown };\n\n constructor(\n model: DiagramModel,\n id: string | undefined,\n from: { [key: string]: unknown },\n to: { [key: string]: unknown }\n ) {\n this.model = model;\n this.id = id;\n this.from = from;\n this.to = to;\n }\n\n getValueSet(): ValueSet | undefined {\n if (this.id === undefined) {\n return this.model.valueSet;\n } else {\n return (\n this.model.nodes.get(this.id) || this.model.connections.get(this.id)\n )?.valueSet;\n }\n }\n\n undo(): void {\n this.getValueSet()?.setValues(this.from);\n }\n\n redo(): void {\n this.getValueSet()?.setValues(this.to);\n }\n}\n\n/**\n * Action which consists of removing elements from a diagram.\n * @private\n */\nexport class RemoveAction implements DiagramAction {\n model: DiagramModel;\n nodes: DiagramNode[] = [];\n nodeIds: string[] = [];\n sections: DiagramSection[] = [];\n sectionIds: string[] = [];\n ports: DiagramPort[] = [];\n portIds: string[] = [];\n connections: DiagramConnection[] = [];\n connectionIds: string[] = [];\n fields: DiagramField[] = [];\n fieldIds: string[] = [];\n\n constructor(\n model: DiagramModel,\n nodes: DiagramNode[],\n sections: DiagramSection[],\n ports: DiagramPort[],\n connections: DiagramConnection[],\n fields: DiagramField[]\n ) {\n this.model = model;\n this.nodes = nodes;\n this.sections = sections;\n this.ports = ports;\n this.connections = connections;\n this.fields = fields;\n // if a node is deleted, its label, ports and sections must also be deleted\n for (const node of this.nodes) {\n if (node.label) {\n addIfNotExists(this.fields, node.label);\n }\n for (const port of node.ports) {\n addIfNotExists(this.ports, port);\n }\n for (const section of node.sections) {\n addIfNotExists(this.sections, section);\n }\n }\n // if a section is deleted, its label and ports must also be deleted\n for (const section of this.sections) {\n if (section.label) {\n addIfNotExists(this.fields, section.label);\n }\n for (const port of section.ports) {\n addIfNotExists(this.ports, port);\n }\n }\n // if a port is deleted, its label and connections must also be deleted\n for (const port of this.ports) {\n if (port.label) {\n addIfNotExists(this.fields, port.label);\n }\n for (const connection of port.outgoingConnections) {\n addIfNotExists(this.connections, connection);\n }\n for (const connection of port.incomingConnections) {\n addIfNotExists(this.connections, connection);\n }\n }\n this.nodeIds = this.nodes.map((n) => n.id);\n this.sectionIds = this.sections.map((s) => s.id);\n this.portIds = this.ports.map((p) => p.id);\n this.connectionIds = this.connections.map((c) => c.id);\n this.fieldIds = this.fields.map((f) => f.id);\n }\n\n undo(): void {\n for (const node of this.nodes) {\n this.model.nodes.add(node);\n }\n for (const section of this.sections) {\n this.model.sections.add(section);\n }\n for (const port of this.ports) {\n this.model.ports.add(port);\n }\n for (const connection of this.connections) {\n this.model.connections.add(connection);\n }\n for (const field of this.fields) {\n this.model.fields.add(field);\n }\n for (const node of this.nodes) {\n if (node.label) {\n const label = this.model.fields.get(node.label.id);\n if (label) {\n node.label = label;\n }\n }\n const ports: DiagramPort[] = [];\n for (const nodePort of node.ports) {\n const port = this.model.ports.get(nodePort.id);\n if (port) {\n ports.push(port);\n }\n }\n node.ports = ports;\n const sections: DiagramSection[] = [];\n for (const nodeSection of node.sections) {\n const section = this.model.sections.get(nodeSection.id);\n if (section) {\n sections.push(section);\n }\n }\n node.sections = sections;\n }\n for (const section of this.sections) {\n if (section.node) {\n const node = this.model.nodes.get(section.node.id);\n if (node) {\n section.node = node;\n }\n }\n if (section.label) {\n const label = this.model.fields.get(section.label.id);\n if (label) {\n section.label = label;\n }\n }\n const ports: DiagramPort[] = [];\n for (const sectionPort of section.ports) {\n const port = this.model.ports.get(sectionPort.id);\n if (port) {\n ports.push(port);\n }\n }\n section.ports = ports;\n }\n for (const port of this.ports) {\n if (port.rootElement) {\n const rootElement =\n this.model.nodes.get(port.rootElement.id) ||\n this.model.sections.get(port.rootElement.id);\n if (rootElement) {\n port.rootElement = rootElement;\n }\n }\n if (port.label) {\n const label = this.model.fields.get(port.label.id);\n if (label) {\n port.label = label;\n }\n }\n const outgoingConnections: DiagramConnection[] = [];\n for (const portOutgoingConnection of port.outgoingConnections) {\n const connection = this.model.connections.get(\n portOutgoingConnection.id\n );\n if (connection) {\n outgoingConnections.push(connection);\n }\n }\n port.outgoingConnections = outgoingConnections;\n const incomingConnections: DiagramConnection[] = [];\n for (const portIncomingConnection of port.incomingConnections) {\n const connection = this.model.connections.get(\n portIncomingConnection.id\n );\n if (connection) {\n incomingConnections.push(connection);\n }\n }\n port.incomingConnections = incomingConnections;\n }\n for (const connection of this.connections) {\n if (connection.start) {\n const start = this.model.ports.get(connection.start.id);\n if (start) {\n connection.setStart(start);\n }\n }\n if (connection.end) {\n const end = this.model.ports.get(connection.end.id);\n if (end) {\n connection.setEnd(end);\n }\n }\n }\n for (const field of this.fields) {\n if (field.rootElement) {\n const rootElement =\n this.model.nodes.get(field.rootElement.id) ||\n this.model.sections.get(field.rootElement.id) ||\n this.model.ports.get(field.rootElement.id);\n if (rootElement) {\n field.rootElement = rootElement;\n }\n }\n }\n // update view\n this.model.canvas?.updateModelInView();\n }\n\n redo(): void {\n this.nodes = [];\n this.sections = [];\n this.ports = [];\n this.connections = [];\n this.fields = [];\n // make shallow copies of the elements with their relationships\n for (const nodeId of this.nodeIds) {\n const node = this.model.nodes.get(nodeId);\n if (node) {\n const nodeCopy = clone(node);\n if (nodeCopy.label) {\n nodeCopy.label = clone(nodeCopy.label);\n }\n nodeCopy.ports = nodeCopy.ports.map((p: DiagramPort) => clone(p));\n nodeCopy.sections = nodeCopy.sections.map((s: DiagramSection) =>\n clone(s)\n );\n this.nodes.push(nodeCopy);\n }\n }\n for (const sectionId of this.sectionIds) {\n const section = this.model.sections.get(sectionId);\n if (section) {\n const sectionCopy = clone(section);\n if (sectionCopy.label) {\n sectionCopy.label = clone(sectionCopy.label);\n }\n sectionCopy.ports = sectionCopy.ports.map((p: DiagramPort) => clone(p));\n this.sections.push(sectionCopy);\n }\n }\n for (const portId of this.portIds) {\n const port = this.model.ports.get(portId);\n if (port) {\n const portCopy = clone(port);\n if (portCopy.rootElement) {\n portCopy.rootElement = clone(portCopy.rootElement);\n }\n if (portCopy.label) {\n portCopy.label = clone(portCopy.label);\n }\n portCopy.outgoingConnections = portCopy.outgoingConnections.map(\n (c: DiagramConnection) => clone(c)\n );\n portCopy.incomingConnections = portCopy.incomingConnections.map(\n (c: DiagramConnection) => clone(c)\n );\n this.ports.push(portCopy);\n }\n }\n for (const connectionId of this.connectionIds) {\n const connection = this.model.connections.get(connectionId);\n if (connection) {\n const connectionCopy = clone(connection);\n if (connectionCopy.start) {\n connectionCopy.start = clone(connectionCopy.start);\n }\n if (connectionCopy.end) {\n connectionCopy.end = clone(connectionCopy.end);\n }\n this.connections.push(connectionCopy);\n }\n }\n for (const fieldId of this.fieldIds) {\n const field = this.model.fields.get(fieldId);\n if (field) {\n const fieldCopy = clone(field);\n if (fieldCopy.rootElement) {\n fieldCopy.rootElement = clone(fieldCopy.rootElement);\n }\n this.fields.push(fieldCopy);\n }\n }\n // delete the elements\n for (const nodeId of this.nodeIds) {\n this.model.nodes.remove(nodeId);\n }\n for (const sectionId of this.sectionIds) {\n this.model.sections.remove(sectionId);\n }\n for (const portId of this.portIds) {\n this.model.ports.remove(portId);\n }\n for (const connectionId of this.connectionIds) {\n this.model.connections.remove(connectionId);\n }\n for (const fieldId of this.fieldIds) {\n this.model.fields.remove(fieldId);\n }\n }\n}\n\nconst clone = <T extends object | undefined | null>(obj: T): T => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n return Object.create(obj);\n};\n","import * as d3 from 'd3';\nimport { DiagramModel } from './diagram-model';\nimport { removeIfExists } from '../../util/list-util';\n\n/**\n * Represents an object which exists as part of a diagram model.\n * @public\n * @see DiagramModel\n */\nexport interface DiagramEntity {\n /**\n * Identifier that uniquely identifies this entity within its diagram model.\n * @public\n */\n get id(): string;\n}\n\n/**\n * Represents an object which exists as part of a specific diagram model and has a visual representation in a diagram canvas.\n * @public\n * @see DiagramModel\n * @see DiagramCanvas\n */\nexport abstract class DiagramElement implements DiagramEntity {\n /**\n * Diagram model this diagram element is part of.\n * @private\n */\n model: DiagramModel;\n private _id: string;\n get id(): string {\n return this._id;\n }\n /**\n * Whether this diagram element is currently highlighted by the user.\n * @private\n */\n highlighted = false;\n /**\n * Whether this diagram element is currently selected by the user.\n * @private\n */\n selected = false;\n\n constructor(model: DiagramModel, id: string) {\n this.model = model;\n this._id = id;\n }\n\n /**\n * Update the view of the canvas to show the current state of this element.\n * @public\n */\n abstract updateInView(): void;\n\n /**\n * Obtain the selection of this element.\n * @private\n */\n select(): d3.Selection<SVGGElement, unknown, null, unknown> | undefined {\n return this.model.canvas?.selectCanvasView()?.select(`g#${this.id}`);\n }\n}\n\n/**\n * Represents a collection of diagram entities of a type that exists as part of a diagram model.\n * @public\n * @see DiagramEntity\n * @see DiagramModel\n */\nexport class DiagramEntitySet<E extends DiagramEntity> implements Iterable<E> {\n /**\n * The list of entities contained in this set.\n * @private\n */\n protected entities: E[] = [];\n /**\n * A mapping of entity ids to their corresponding entity in this set for quickly fetching entities based on their id.\n * @private\n */\n protected entityMap: { [id: string]: E } = {};\n\n /**\n * The number of entities of this set.\n * @public\n */\n get length(): number {\n return this.entities.length;\n }\n\n /**\n * Gets all of the entities of this set.\n * @public\n * @returns An array containing all of the entities of this set.\n */\n all(): E[] {\n return [...this.entities];\n }\n\n /**\n * Adds an entity to this set if there are no entities with the same id. Has no effect if there already exists an entity with the same id as the given entity.\n * For creating entities with relationships with other entities, the new() method should be used instead. The add() method adds an entity but doesn't take care of setting that entity's relationships with other entities.\n * @private\n * @param entity An entity to be added to this set.\n */\n add(entity: E): void {\n if (this.entityMap[entity.id] === undefined) {\n this.entityMap[entity.id] = entity;\n this.entities.push(entity);\n }\n }\n\n /**\n * Removes all the entities in this set.\n * @public\n */\n clear() {\n // remove each entity individually in case classes that extend this implement their own specific cleanup\n while (this.entities.length > 0) {\n this.remove(this.entities[0].id);\n }\n }\n\n /**\n * Checks if this set contains an entity with the given id.\n * @public\n * @param id An id.\n * @returns `true` if this set contains an entity with the given id, `false` otherwise.\n */\n contains(id: string): boolean {\n return this.entityMap[id] !== undefined;\n }\n\n /**\n * Gets all of the entities of this set filtered following given criteria.\n * @public\n * @returns An array containing the entities of this set that meet the given criteria.\n */\n filter(): E[] {\n return this.all();\n }\n\n /**\n * Gets an entity of this set matching specific criteria.\n * @public\n * @returns An entity of this set.\n */\n find(): E | undefined {\n return this.entities.length > 0 ? this.entities[0] : undefined;\n }\n\n /**\n * Gets an entity from this set.\n * @public\n * @param id An id.\n * @returns An entity with the given id, or `undefined` if there are no entities with the given id.\n */\n get(id: string): E | undefined {\n return this.entityMap[id];\n }\n\n /**\n * Attempts to find and remove an entity with the given id. Has no effect if there are no entities with the given id.\n * @public\n * @param id An id.\n */\n remove(id: string) {\n const entity = this.get(id);\n if (entity !== undefined) {\n delete this.entityMap[id];\n removeIfExists(this.entities, entity);\n }\n }\n\n /**\n * Iterator to iterate over the entities of this set.\n * @public\n */\n *[Symbol.iterator](): Iterator<E> {\n let counter = 0;\n while (counter < this.entities.length) {\n yield this.entities[counter];\n ++counter;\n }\n }\n}\n","import { DataSource } from '@metadev/lux';\nimport { removeIfExists } from '../../util/list-util';\n\n/**\n * A property which is part of a property set and defines what values a value in a value set can take.\n * @see PropertySet\n * @see ValueSet\n * @private\n */\nexport class Property {\n /**\n * The name of this property. Used to distinguish this property from others.\n */\n name: string;\n /**\n * The type of this property, which indicates the possible values that this property can have.\n */\n type: Type;\n /**\n * The default value of this property.\n */\n defaultValue: unknown;\n /**\n * Whether this property should always appear in the property editor component.\n * @see PropertyEditorComponent\n */\n basic: boolean;\n /**\n * Whether the value of this property can be edited.\n */\n editable: boolean;\n /**\n * Which attribute of the parent component the value of this property is linked to. Null if none.\n */\n rootAttribute: string[] | string | null;\n /**\n * The list of possible values if the value of the property is chosen from a set of possible values. Undefined otherwise.\n * @default undefined\n */\n options?: DataSource<unknown, string>;\n /**\n * The list of properties that are part of this property if the type of this property is 'object'.\n */\n properties?: Property[];\n\n constructor(\n name: string,\n type: Type,\n defaultValue: unknown,\n basic: boolean,\n editable: boolean,\n rootAttribute: string[] | string | null\n ) {\n this.name = name;\n this.type = type;\n this.defaultValue = defaultValue;\n this.basic = basic;\n this.editable = editable;\n this.rootAttribute = rootAttribute;\n this.options = undefined;\n this.properties = undefined;\n }\n}\n\n/**\n * The type that a property can hvae..\n * @see Property\n * @private\n */\nexport enum Type {\n /**\n * A type whose value must be a boolean.\n */\n Boolean = 'boolean',\n /**\n * A type whose value must be a string representing a valid HTML color code.\n */\n Color = 'color',\n /**\n * A type whose value must be a date.\n */\n Date = 'date',\n /**\n * A type whose value must be a number.\n */\n Number = 'number',\n /**\n * A type whose value must be an object.\n */\n Object = 'object',\n /**\n * A type whose value must be one of a set of options.\n */\n Option = 'option',\n /**\n * A type whose value must be a list of values picked from a set of options.\n */\n OptionList = 'option-list',\n /**\n * A type whose value must be a string without newline characters.\n */\n Text = 'text',\n /**\n * A type whose value must be a string with newline characters.\n */\n TextArea = 'text-area',\n /**\n * A type whose value must be a list of strings.\n */\n TextList = 'text-list',\n /**\n * A type whose value must be a map with string keys and values.\n */\n TextMap = 'text-map',\n /**\n * A type whose value must be a time of day.\n */\n Time = 'time',\n /**\n * A type whose value must be a valid URL.\n */\n Url = 'url'\n}\n\n/**\n * A set of properties based on which a set of values of those properties can be created.\n * @see Property\n * @see ValueSet\n * @private\n */\nexport class PropertySet {\n propertyMap: { [key: string]: Property };\n propertyList: Property[];\n\n constructor(properties: Property[] = []) {\n this.propertyList = properties;\n this.propertyMap = {};\n for (const property of this.propertyList) {\n this.propertyMap[property.name] = property;\n }\n }\n\n getProperty(key: string): Property {\n return this.propertyMap[key];\n }\n\n hasProperties(): boolean {\n return this.propertyList.length > 0;\n }\n}\n\n/**\n * A set of values corresponding to a set of properties.\n * @see PropertySet\n * @private\n */\nexport class ValueSet {\n rootElement: { [key: string]: unknown };\n propertySet: PropertySet;\n displayedProperties: Property[] = [];\n hiddenProperties: Property[] = [];\n values: { [key: string]: unknown } = {};\n valueSets: { [key: string]: ValueSet } = {};\n\n constructor(propertySet: PropertySet, rootElement: unknown) {\n this.propertySet = propertySet;\n this.rootElement = rootElement as { [key: string]: unknown };\n this.resetValues();\n }\n\n getRootElementValue(rootAttribute: string[] | string | null): unknown {\n if (typeof rootAttribute === 'string') {\n return this.rootElement[rootAttribute];\n }\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rootSubelement: any = this.rootElement;\n for (const rootSubattribute of rootAttribute) {\n if (rootSubelement === null || rootSubelement === undefined) {\n return undefined;\n }\n rootSubelement = rootSubelement[rootSubattribute];\n }\n return rootSubelement;\n }\n return undefined;\n }\n\n setRootElementValue(rootAttribute: string[] | string | null, value: unknown) {\n if (typeof rootAttribute === 'string') {\n this.rootElement[rootAttribute] = value;\n }\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rootSubelement: any = this.rootElement;\n for (let i = 0; i < rootAttribute.length - 1; ++i) {\n const rootSubattribute = rootAttribute[i];\n if (rootSubelement === null || rootSubelement === undefined) {\n return;\n }\n rootSubelement = rootSubelement[rootSubattribute];\n }\n rootSubelement[rootAttribute[rootAttribute.length - 1]] = value;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getValue(key: string): any {\n const rootAttribute = this.propertySet.getProperty(key)?.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.values[key] = this.getRootElementValue(rootAttribute);\n }\n return this.values[key];\n }\n\n getValues(): { [key: string]: unknown } {\n const result: { [key: string]: unknown } = {};\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n if (\n property.type === Type.Object &&\n this.valueSets[key].hasAnySetValue()\n ) {\n result[key] = this.valueSets[key].getValues();\n } else if (this.hasSetValue(key)) {\n result[key] = this.getValue(key);\n }\n }\n return result;\n }\n\n hasValue(key: string): boolean {\n const value = this.getValue(key);\n return !empty(value);\n }\n\n hasSetValue(key: string): boolean {\n const value = this.getValue(key);\n const property = this.propertySet.getProperty(key);\n if (property && property.type === Type.Object) {\n return this.getSubValueSet(key).hasAnySetValue();\n }\n return !empty(value) && !equals(value, property?.defaultValue);\n }\n\n hasAnySetValue(): boolean {\n for (const property of this.propertySet.propertyList) {\n if (this.hasSetValue(property.name)) {\n return true;\n }\n }\n return false;\n }\n\n hasAnySetValueExcept(keys: string[]): boolean {\n for (const property of this.propertySet.propertyList) {\n if (!keys.includes(property.name) && this.hasSetValue(property.name)) {\n return true;\n }\n }\n return false;\n }\n\n setValue(key: string, value: unknown): void {\n this.values[key] = value;\n const property = this.propertySet.getProperty(key);\n if (property) {\n const rootAttribute = property.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.setRootElementValue(rootAttribute, value);\n if (typeof this.rootElement['updateInView'] === 'function') {\n this.rootElement['updateInView']();\n }\n }\n this.displayProperty(property);\n }\n }\n\n setValues(values: { [key: string]: unknown }): void {\n this.resetValues();\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n if (!empty(values[key])) {\n if (property.type === Type.Object) {\n this.valueSets[key].setValues(\n values[key] as { [key: string]: unknown }\n );\n } else if (!equals(values[key], property?.defaultValue)) {\n this.setValue(key, values[key]);\n }\n }\n }\n }\n\n hasValues(): boolean {\n return Object.keys(this.values).length > 0;\n }\n\n resetValues(): void {\n this.displayedProperties = [];\n this.hiddenProperties = [];\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n const rootAttribute = property.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.values[key] = this.getRootElementValue(rootAttribute);\n } else {\n this.values[key] = structuredClone(property.defaultValue);\n if (property.type === Type.Object) {\n this.valueSets[key] = this.constructSubValueSet(key);\n }\n }\n if (property.basic) {\n this.displayedProperties.push(property);\n } else {\n this.hiddenProperties.push(property);\n }\n }\n }\n\n displayProperty(property: Property) {\n if (!this.displayedProperties.includes(property)) {\n this.displayedProperties.push(property);\n removeIfExists(this.hiddenProperties, property);\n }\n }\n\n hideProperty(property: Property) {\n if (!this.hiddenProperties.includes(property)) {\n this.hiddenProperties.push(property);\n removeIfExists(this.displayedProperties, property);\n }\n }\n\n /**\n * Constructs a ValueSet with its corresponding PropertySet representing the values of the object.\n */\n constructSubValueSet(key: string): ValueSet {\n const property = this.propertySet.getProperty(key);\n const propertySet = new PropertySet(property.properties);\n const valueSet = new ValueSet(propertySet, this.rootElement);\n // initialize the default values of each property\n this.values[key] = {\n ...valueSet.values,\n ...(this.values[key] as { [key: string]: unknown })\n };\n valueSet.values = this.values[key] as { [key: string]: unknown };\n return valueSet;\n }\n\n getSubValueSet(key: string): ValueSet {\n return this.valueSets[key];\n }\n}\n\nconst empty = (a: unknown): boolean => {\n return (\n a === undefined ||\n a === null ||\n a === '' ||\n (a instanceof Array && a.length === 0) ||\n (a instanceof Object && Object.keys(a).length === 0)\n );\n};\n\nexport const equals = (a: unknown, b: unknown): boolean => {\n return a === b || JSON.stringify(a) === JSON.stringify(b);\n};\n","import { Point } from '../../util/canvas-util';\nimport { LineShape, LineStyle } from '../../util/line';\nimport { removeIfExists } from '../../util/list-util';\nimport { Side } from '../../util/svg-util';\nimport {\n ConnectionMarkerLook,\n ConnectionTypeConfig,\n FieldConfig\n} from './diagram-config';\nimport {\n DiagramElement,\n DiagramEntity,\n DiagramEntitySet\n} from './diagram-element';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramPort } from './diagram-port';\nimport { PropertySet, ValueSet } from './diagram-property';\n\nlet idTicker = 0;\n\n/**\n * Default values of the parameters of a diagram connection.\n * @see DiagramConnection\n * @private\n */\nexport const DIAGRAM_CONNECTION_TYPE_DEFAULTS = {\n name: '',\n width: 1,\n shape: LineShape.Straight,\n style: LineStyle.Solid,\n label: null,\n defaultStartMarkerLook: null,\n defaultEndMarkerLook: null,\n startTypes: [],\n endTypes: [],\n color: '#000000',\n selectedColor: '#000000',\n properties: []\n};\n\n/**\n * A connection type, which holds properties that connections of this type share in common.\n * @see ConnectionTypeConfig\n * @public\n */\nexport class DiagramConnectionType implements DiagramEntity {\n id: string;\n name: string;\n width: number;\n shape: LineShape;\n style: LineStyle;\n label: FieldConfig | null;\n defaultStartMarkerLook: ConnectionMarkerLook | null;\n defaultEndMarkerLook: ConnectionMarkerLook | null;\n startTypes: string[];\n endTypes: string[];\n color: string;\n selectedColor: string;\n propertySet: PropertySet;\n\n constructor(options: ConnectionTypeConfig) {\n const values = {\n ...DIAGRAM_CONNECTION_TYPE_DEFAULTS,\n ...options\n };\n this.id = values.id;\n this.name = values.name;\n this.width = values.width;\n this.shape = values.shape;\n this.style = values.style;\n this.label = values.label;\n this.defaultStartMarkerLook = values.defaultStartMarkerLook;\n this.defaultEndMarkerLook = values.defaultEndMarkerLook;\n this.startTypes = values.startTypes;\n this.endTypes = values.endTypes;\n this.color = values.color;\n this.selectedColor = values.selectedColor;\n this.propertySet = new PropertySet(values.properties);\n }\n\n canStartFromType(type: string) {\n return this.startTypes.indexOf(type) >= 0;\n }\n\n canFinishOnType(type: string) {\n return this.endTypes.indexOf(type) >= 0;\n }\n}\n\n/**\n * A connection which goes from one port to another.\n * @see DiagramPort\n * @public\n */\nexport class DiagramConnection extends DiagramElement {\n type: DiagramConnectionType;\n /**\n * Additional properties of this connection.\n * @public\n */\n valueSet: ValueSet;\n /**\n * Variable used to preserve the original data of a connection when importing from a different format.\n * @public\n */\n originalData: unknown;\n /**\n * Port that this connection starts from.\n * @public\n */\n start?: DiagramPort;\n /**\n * Direction that this connection follows at its start.\n * @public\n */\n startDirection?: Side;\n /**\n * Coordinates of the start point of this connection.\n * @public\n */\n startCoords: Point = [0, 0];\n /**\n * Look of the marker of this connection at the start, or `null` if the connection has no start marker.\n * @public\n */\n startMarkerLook: ConnectionMarkerLook | null;\n /**\n * Port that this connection ends at.\n * @public\n */\n end?: DiagramPort;\n /**\n * Direction that this connection follows at its end.\n * @public\n */\n endDirection?: Side;\n /**\n * Coordinates of the end point of this connection.\n * @public\n */\n endCoords: Point = [0, 0];\n /**\n * Look of the marker of this connection at the end, or `null` if the connection has no end marker.\n * @public\n */\n endMarkerLook: ConnectionMarkerLook | null;\n /**\n * Text at the start of this connection, or `''` if no text.\n * @public\n */\n startLabel = '';\n /**\n * Text at the middle of this connection, or `''` if no text.\n * @public\n */\n middleLabel = '';\n /**\n * Text at the end of this connection, or `''` if no text.\n * @public\n */\n endLabel = '';\n /**\n * Points that this connection passes through.\n * @public\n */\n points: Point[] = [];\n\n /**\n * Name of this connection. Alias for this connection's middle label.\n * @public\n */\n get name(): string {\n return this.middleLabel;\n }\n set name(name: string) {\n this.middleLabel = name;\n }\n\n constructor(\n model: DiagramModel,\n type: DiagramConnectionType,\n start?: DiagramPort,\n end?: DiagramPort,\n id?: string\n ) {\n let uniqueId: string;\n if (id !== undefined && model.connections.get(id) === undefined) {\n uniqueId = id;\n } else {\n do {\n uniqueId = `diagram-connection-${++idTicker}`;\n } while (model.connections.get(uniqueId) !== undefined);\n }\n super(model, uniqueId);\n this.type = type;\n this.valueSet = new ValueSet(type.propertySet, this);\n this.originalData = {};\n this.startMarkerLook = type.defaultStartMarkerLook;\n this.endMarkerLook = type.defaultEndMarkerLook;\n this.setStart(start);\n this.setEnd(end);\n }\n\n updateInView() {\n if (this.model.canvas && this.model.renderToCanvas) {\n this.model.canvas.updateConnectionsInView(this.id);\n }\n }\n\n setStart(start?: DiagramPort) {\n if (this.start !== start) {\n if (this.start !== undefined) {\n removeIfExists(this.start.outgoingConnections, this);\n }\n this.start = start;\n if (start !== undefined) {\n start.outgoingConnections.push(this);\n this.startDirection = start?.direction;\n this.startCoords = start?.coords || [0, 0];\n }\n } else {\n this.startDirection = start?.direction;\n this.startCoords = start?.coords || [0, 0];\n }\n this.updateInView();\n }\n\n setEnd(end?: DiagramPort) {\n if (this.end !== end) {\n if (this.end !== undefined) {\n removeIfExists(this.end.incomingConnections, this);\n }\n this.end = end;\n if (end !== undefined) {\n end.incomingConnections.push(this);\n this.endDirection = end?.direction;\n this.endCoords = end?.coords || [0, 0];\n }\n } else {\n this.endDirection = end?.direction;\n this.endCoords = end?.coords || [0, 0];\n }\n this.updateInView();\n }\n\n tighten() {\n if (this.start?.rootElement && this.end?.rootElement) {\n const tighterStartPort =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.start.rootElement as any).getClosestPortToPoint(this.end.coords);\n if (tighterStartPort && tighterStartPort !== this.start) {\n this.setStart(tighterStartPort);\n }\n const tighterEndPort =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.end.rootElement as any).getClosestPortToPoint(this.start.coords);\n if (tighterEndPort && tighterEndPort !== this.end) {\n this.setEnd(tighterEndPort);\n }\n this.updateInView();\n }\n }\n}\n\nexport class DiagramConnectionSet extends DiagramEntitySet<DiagramConnection> {\n private model: DiagramModel;\n types = new DiagramEntitySet<DiagramConnectionType>();\n\n constructor(model: DiagramModel) {\n super();\n this.model = model;\n }\n\n new(\n type: DiagramConnectionType,\n start?: DiagramPort,\n end?: DiagramPort,\n id?: string | undefined\n ): DiagramConnection {\n const connection = new DiagramConnection(this.model, type, start, end, id);\n super.add(connection);\n connection.updateInView();\n return connection;\n }\n\n override remove(id: string) {\n const connection = this.get(id);\n if (connection) {\n // remove from ports\n removeIfExists(connection.start?.outgoingConnections || [], connection);\n removeIfExists(connection.end?.incomingConnections || [], connection);\n // remove from set of connections\n super.remove(id);\n // remove from canvas\n connection.updateInView();\n }\n }\n\n override filter(type?: string, threshold?: number): DiagramConnection[] {\n return this.entities.filter(\n (e) =>\n (type ? e.type.id === type : true) &&\n (threshold\n ? (e.start?.getNode()?.type?.priority || Number.NEGATIVE_INFINITY) >=\n threshold &&\n (e.end?.getNode()?.type?.priority || Number.NEGATIVE_INFINITY) >=\n threshold\n : true)\n );\n }\n\n override find(\n type?: string,\n threshold?: number\n ): DiagramConnection | undefined {\n return this.entities.find(\n (e) =>\n (type ? e.type.id === type : true) &&\n (threshold\n ? (e.start?.getNode()?.type?.priority || Number.NEGATIVE_INFINITY) >=\n threshold &&\n (e.end?.getNode()?.type?.priority || Number.NEGATIVE_INFINITY) >=\n threshold\n : true)\n );\n }\n}\n","import { Point, translatePoint } from '../../util/canvas-util';\nimport { removeIfExists } from '../../util/list-util';\nimport { ClosedShape } from '../../util/shape';\nimport { Side } from '../../util/svg-util';\nimport { NodeShapedLook } from './diagram-config';\nimport { DiagramConnection } from './diagram-connection';\nimport { DiagramElement, DiagramEntitySet } from './diagram-element';\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramNode } from './diagram-node';\nimport { DiagramPort } from './diagram-port';\n\nlet idTicker = 0;\n\n/**\n * Default values of the look of a diagram section.\n * @see DIAGRAM_SECTION_DEFAULTS\n * @private\n */\nexport const DIAGRAM_SECTION_LOOK_DEFAULTS: NodeShapedLook = {\n lookType: 'shaped-look',\n shape: ClosedShape.Rectangle,\n color: '#FFFFFF',\n borderColor: '#000000',\n selectedColor: '#FFFFFF',\n selectedBorderColor: '#000000'\n};\n\n/**\n * Default values of the parameters of a diagram section.\n * @see DiagramSection\n * @private\n */\nexport const DIAGRAM_SECTION_DEFAULTS = {\n sectionsX: 1,\n sectionsY: 1,\n minWidth: 0,\n minHeight: 0,\n margin: 0,\n label: null,\n ports: [],\n look: DIAGRAM_SECTION_LOOK_DEFAULTS\n};\n\n/**\n * A section of a node which can have connections and display a property of the node.\n * @see DiagramConnection\n * @see DiagramNode\n * @see DiagramPort\n * @public\n */\nexport class DiagramSection extends DiagramElement {\n /**\n * Node that this section belongs to.\n * @public\n */\n node?: DiagramNode;\n /**\n * Label of this section.\n * @public\n */\n label?: DiagramField;\n /**\n * Ports of this section.\n * @public\n */\n ports: DiagramPort[] = [];\n /**\n * Coordinates of the top left corner of this section.\n * @public\n */\n coords: Point;\n /**\n * Dimension of this section along the x axis.\n * @public\n */\n width: number;\n /**\n * Dimension of this section along the y axis.\n * @public\n */\n height: number;\n\n /**\n * Name of this section. Alias for this section's label's text.\n * @public\n */\n get name(): string {\n return this.label?.text || '';\n }\n set name(name: string) {\n if (this.label) {\n this.label.text = name;\n this.label.updateInView();\n }\n }\n\n constructor(\n model: DiagramModel,\n node: DiagramNode | undefined,\n coords: Point,\n width: number,\n height: number,\n id?: string\n ) {\n let uniqueId: string;\n if (id !== undefined && model.sections.get(id) === undefined) {\n uniqueId = id;\n } else {\n do {\n uniqueId = `diagram-section-${++idTicker}`;\n } while (model.sections.get(uniqueId) !== undefined);\n }\n super(model, uniqueId);\n this.node = node;\n this.coords = coords;\n this.width = width;\n this.height = height;\n }\n\n updateInView() {\n if (this.model.canvas && this.model.renderToCanvas) {\n this.model.canvas.updateSectionsInView(this.id);\n }\n }\n\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\n if (this.ports.length === 0) {\n return undefined;\n } else if (this.ports.length === 1) {\n return this.ports[1];\n } else {\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\n const indexOfClosestPort = distanceToPorts.indexOf(\n Math.min(...distanceToPorts)\n );\n const closestPort = this.ports[indexOfClosestPort];\n return closestPort;\n }\n }\n\n getIncomingConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const incomingConnection of port.incomingConnections) {\n result.push(incomingConnection);\n }\n }\n return result;\n }\n\n getOutgoingConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const outgoingConnection of port.outgoingConnections) {\n result.push(outgoingConnection);\n }\n }\n return result;\n }\n\n getConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const incomingConnection of port.incomingConnections) {\n result.push(incomingConnection);\n }\n for (const outgoingConnection of port.outgoingConnections) {\n result.push(outgoingConnection);\n }\n }\n return result;\n }\n\n move(coords: Point): void {\n const coordDifferences = [\n coords[0] - this.coords[0],\n coords[1] - this.coords[1]\n ];\n this.coords = coords;\n for (const port of this.ports) {\n port.move([\n port.coords[0] + coordDifferences[0],\n port.coords[1] + coordDifferences[1]\n ]);\n }\n if (this.label) {\n this.label.move([\n this.label.coords[0] + coordDifferences[0],\n this.label.coords[1] + coordDifferences[1]\n ]);\n }\n this.getConnections().forEach((c) => c.tighten());\n this.updateInView();\n }\n\n stretch(direction: Side, distance: number): void {\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\n let newCoordsX: Point;\n let newCoordsY: Point;\n switch (direction) {\n case Side.Left:\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\n if (\n newCoordsX[1] - newCoordsX[0] <\n (this.node?.type?.sections?.minWidth ||\n DIAGRAM_SECTION_DEFAULTS.minWidth)\n ) {\n newCoordsX[0] =\n newCoordsX[1] -\n (this.node?.type?.sections?.minWidth ||\n DIAGRAM_SECTION_DEFAULTS.minWidth);\n }\n break;\n case Side.Top:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\n if (\n newCoordsY[1] - newCoordsY[0] <\n (this.node?.type?.sections?.minHeight ||\n DIAGRAM_SECTION_DEFAULTS.minHeight)\n ) {\n newCoordsY[0] =\n newCoordsY[1] -\n (this.node?.type?.sections?.minHeight ||\n DIAGRAM_SECTION_DEFAULTS.minHeight);\n }\n break;\n case Side.Right:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\n if (\n newCoordsX[1] - newCoordsX[0] <\n (this.node?.type?.sections?.minWidth ||\n DIAGRAM_SECTION_DEFAULTS.minWidth)\n ) {\n newCoordsX[1] =\n newCoordsX[0] +\n (this.node?.type?.sections?.minWidth ||\n DIAGRAM_SECTION_DEFAULTS.minWidth);\n }\n break;\n case Side.Bottom:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\n if (\n newCoordsY[1] - newCoordsY[0] <\n (this.node?.type?.sections?.minHeight ||\n DIAGRAM_SECTION_DEFAULTS.minHeight)\n ) {\n newCoordsY[1] =\n newCoordsY[0] +\n (this.node?.type?.sections?.minHeight ||\n DIAGRAM_SECTION_DEFAULTS.minHeight);\n }\n break;\n }\n this.coords = [newCoordsX[0], newCoordsY[0]];\n this.width = newCoordsX[1] - newCoordsX[0];\n this.height = newCoordsY[1] - newCoordsY[0];\n for (const port of this.ports) {\n port.move(\n translatePoint(\n port.coords,\n oldCoordsX,\n oldCoordsY,\n newCoordsX,\n newCoordsY\n )\n );\n }\n if (this.label) {\n this.label.coords = [\n this.coords[0] + (this.node?.type?.sections?.label?.margin || 0),\n this.coords[1] + (this.node?.type?.sections?.label?.margin || 0)\n ];\n (this.label.width =\n this.width - (this.node?.type?.sections?.label?.margin || 0) * 2),\n (this.label.height =\n this.height - (this.node?.type?.sections?.label?.margin || 0) * 2);\n }\n this.updateInView();\n }\n}\n\nexport class DiagramSectionSet extends DiagramEntitySet<DiagramSection> {\n private model: DiagramModel;\n\n constructor(model: DiagramModel) {\n super();\n this.model = model;\n }\n\n new(\n node: DiagramNode,\n coords: Point,\n width: number,\n height: number,\n id?: string | undefined,\n portIds?: (string | undefined)[],\n portLabelIds?: (string | undefined)[]\n ): DiagramSection {\n const section = new DiagramSection(\n this.model,\n node,\n coords,\n width,\n height,\n id\n );\n super.add(section);\n section.updateInView();\n // add this section to its node\n node.sections.push(section);\n node.updateInView();\n // add section ports\n if (node.type.sections?.ports && node.type.sections.ports.length > 0) {\n for (let i = 0; i < node.type.sections.ports.length; ++i) {\n const portConfig = node.type.sections.ports[i];\n const port = this.model.ports.new(\n section,\n [\n section.coords[0] + portConfig.coords[0],\n section.coords[1] + portConfig.coords[1]\n ],\n portConfig.direction,\n portIds && portIds.length > i ? portIds[i] : undefined\n );\n if (portConfig.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...portConfig.label\n };\n let labelCoords: Point;\n switch (port.direction) {\n case Side.Top:\n case Side.Left:\n labelCoords = [\n port.coords[0] - labelConfiguration.fontSize,\n port.coords[1] - labelConfiguration.fontSize\n ];\n break;\n case Side.Bottom:\n labelCoords = [\n port.coords[0] - labelConfiguration.fontSize,\n port.coords[1] + labelConfiguration.fontSize\n ];\n break;\n case Side.Right:\n labelCoords = [\n port.coords[0] + labelConfiguration.fontSize,\n port.coords[1] - labelConfiguration.fontSize\n ];\n break;\n default:\n labelCoords = port.coords;\n }\n this.model.fields.new(\n port,\n labelCoords,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable,\n portLabelIds && portLabelIds.length > i\n ? portLabelIds[i]\n : undefined\n );\n }\n }\n }\n // add section label\n if (node.type.sections?.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...node.type.sections.label\n };\n this.model.fields.new(\n section,\n [\n section.coords[0] + labelConfiguration.margin,\n section.coords[1] + labelConfiguration.margin\n ],\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n section.width - labelConfiguration.margin * 2,\n section.height - labelConfiguration.margin * 2,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable,\n id\n );\n }\n return section;\n }\n\n override remove(id: string) {\n const section = this.get(id);\n if (section) {\n // remove all ports\n while (section.ports.length > 0) {\n this.model.ports.remove(section.ports[0].id);\n }\n // remove label\n if (section.label) {\n this.model.fields.remove(section.label.id);\n }\n // remove from root element\n if (section.node) {\n removeIfExists(section.node.sections, section);\n }\n // remove from set of sections\n super.remove(id);\n // remove from canvas\n section.updateInView();\n }\n }\n\n override filter(threshold?: number): DiagramSection[] {\n return this.entities.filter((e) => {\n if (threshold) {\n const node = e.node;\n if (node) {\n return node.type.priority >= threshold;\n }\n return false;\n }\n return true;\n });\n }\n\n override find(threshold?: number): DiagramSection | undefined {\n return this.entities.find((e) => {\n if (threshold) {\n const node = e.node;\n if (node) {\n return node.type.priority >= threshold;\n }\n return false;\n }\n return true;\n });\n }\n}\n","import { Point, translatePoint } from '../../util/canvas-util';\nimport { ClosedShape } from '../../util/shape';\nimport { Side } from '../../util/svg-util';\nimport {\n FieldConfig,\n NodeImageLook,\n NodeShapedLook,\n NodeStretchableImageLook,\n NodeTypeConfig,\n PortConfig,\n SectionConfig\n} from './diagram-config';\nimport { DiagramConnection } from './diagram-connection';\nimport {\n DiagramElement,\n DiagramEntity,\n DiagramEntitySet\n} from './diagram-element';\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramPort } from './diagram-port';\nimport { PropertySet, ValueSet } from './diagram-property';\nimport { DIAGRAM_SECTION_DEFAULTS, DiagramSection } from './diagram-section';\n\nlet idTicker = 0;\n\n/**\n * Default values of the look of a diagram node.\n * @see DIAGRAM_NODE_TYPE_DEFAULTS\n * @private\n */\nexport const DIAGRAM_NODE_LOOK_DEFAULTS: NodeShapedLook = {\n lookType: 'shaped-look',\n shape: ClosedShape.Rectangle,\n color: '#FFFFFF',\n borderColor: '#000000',\n selectedColor: '#FFFFFF',\n selectedBorderColor: '#000000'\n};\n\n/**\n * Default values of the parameters of a diagram node.\n * @see DiagramNode\n * @private\n */\nexport const DIAGRAM_NODE_TYPE_DEFAULTS = {\n name: '',\n defaultWidth: 0,\n defaultHeight: 0,\n minWidth: 0,\n minHeight: 0,\n resizableX: false,\n resizableY: false,\n label: null,\n ports: [],\n sections: null,\n look: DIAGRAM_NODE_LOOK_DEFAULTS,\n isUnique: false,\n priority: 0,\n properties: []\n};\n\n/**\n * A node type, which holds properties that nodes of this type share in common.\n * @see NodeTypeConfig\n * @public\n */\nexport class DiagramNodeType implements DiagramEntity {\n id: string;\n name: string;\n defaultWidth: number;\n defaultHeight: number;\n minWidth: number;\n minHeight: number;\n resizableX: boolean;\n resizableY: boolean;\n label: FieldConfig | null;\n ports: PortConfig[];\n sections: SectionConfig | null;\n look: NodeShapedLook | NodeImageLook | NodeStretchableImageLook;\n isUnique: boolean;\n priority: number;\n propertySet: PropertySet;\n\n constructor(options: NodeTypeConfig) {\n const values = {\n ...DIAGRAM_NODE_TYPE_DEFAULTS,\n ...options\n };\n this.id = values.id;\n this.name = values.name;\n this.defaultWidth = values.defaultWidth;\n this.defaultHeight = values.defaultHeight;\n this.minWidth = values.minWidth;\n this.minHeight = values.minHeight;\n this.resizableX = values.resizableX;\n this.resizableY = values.resizableY;\n this.label = values.label;\n this.ports = values.ports;\n this.sections = values.sections;\n this.look = values.look;\n this.isUnique = values.isUnique;\n this.priority = values.priority;\n this.propertySet = new PropertySet(options?.properties || []);\n }\n}\n\n/**\n * A node, the most basic element of a diagram, which can have connections to other nodes through its ports or be divided into sections.\n * @see DiagramConnection\n * @see DiagramPort\n * @see DiagramSection\n * @public\n */\nexport class DiagramNode extends DiagramElement {\n type: DiagramNodeType;\n /**\n * Additional properties of this node.\n * @public\n */\n valueSet: ValueSet;\n /**\n * Variable used to preserve the original data of a node when importing from a different format.\n * @public\n */\n originalData: unknown;\n /**\n * Label of this node.\n * @public\n */\n label?: DiagramField;\n /**\n * Sections of this node.\n * @public\n */\n sections: DiagramSection[] = [];\n /**\n * Ports of this node.\n * @public\n */\n ports: DiagramPort[] = [];\n /**\n * Coordinates of the top left corner of this node.\n * @public\n */\n coords: Point;\n /**\n * Dimension of this node along the x axis.\n * @public\n */\n width: number;\n /**\n * Dimension of this node along the y axis.\n * @public\n */\n height: number;\n\n /**\n * Name of this node. Alias for this node's label's text.\n * @public\n */\n get name(): string {\n return this.label?.text || '';\n }\n set name(name: string) {\n if (this.label) {\n this.label.text = name;\n this.label.updateInView();\n }\n }\n\n constructor(\n model: DiagramModel,\n type: DiagramNodeType,\n coords: Point = [0, 0],\n id?: string\n ) {\n let uniqueId: string;\n if (id !== undefined && model.nodes.get(id) === undefined) {\n uniqueId = id;\n } else {\n do {\n uniqueId = `diagram-node-${++idTicker}`;\n } while (model.nodes.get(uniqueId) !== undefined);\n }\n super(model, uniqueId);\n this.type = type;\n this.valueSet = new ValueSet(type.propertySet, this);\n this.originalData = {};\n this.coords = coords;\n this.width = type.defaultWidth;\n this.height = type.defaultHeight;\n }\n\n updateInView() {\n if (this.model.canvas && this.model.renderToCanvas) {\n this.model.canvas.updateNodesInView(this.id);\n }\n }\n\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\n if (this.ports.length === 0) {\n return undefined;\n } else if (this.ports.length === 1) {\n return this.ports[1];\n } else {\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\n const indexOfClosestPort = distanceToPorts.indexOf(\n Math.min(...distanceToPorts)\n );\n const closestPort = this.ports[indexOfClosestPort];\n return closestPort;\n }\n }\n\n getIncomingConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const incomingConnection of port.incomingConnections) {\n result.push(incomingConnection);\n }\n }\n return result;\n }\n\n getOutgoingConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const outgoingConnection of port.outgoingConnections) {\n result.push(outgoingConnection);\n }\n }\n return result;\n }\n\n getConnections(): DiagramConnection[] {\n const result: DiagramConnection[] = [];\n for (const port of this.ports) {\n for (const incomingConnection of port.incomingConnections) {\n result.push(incomingConnection);\n }\n for (const outgoingConnection of port.outgoingConnections) {\n result.push(outgoingConnection);\n }\n }\n return result;\n }\n\n getAdjacentNodes(): DiagramNode[] {\n const result: DiagramNode[] = [];\n for (const port of this.ports) {\n for (const incomingConnection of port.incomingConnections) {\n const otherNode = incomingConnection.start?.getNode();\n if (otherNode) {\n result.push(otherNode);\n }\n }\n for (const outgoingConnection of port.outgoingConnections) {\n const otherNode = outgoingConnection.end?.getNode();\n if (otherNode) {\n result.push(otherNode);\n }\n }\n }\n return result;\n }\n\n move(coords: Point): void {\n const coordDifferences = [\n coords[0] - this.coords[0],\n coords[1] - this.coords[1]\n ];\n this.coords = coords;\n for (const section of this.sections) {\n section.move([\n section.coords[0] + coordDifferences[0],\n section.coords[1] + coordDifferences[1]\n ]);\n }\n for (const port of this.ports) {\n port.move([\n port.coords[0] + coordDifferences[0],\n port.coords[1] + coordDifferences[1]\n ]);\n }\n if (this.label) {\n this.label.move([\n this.label.coords[0] + coordDifferences[0],\n this.label.coords[1] + coordDifferences[1]\n ]);\n }\n this.getConnections().forEach((c) => c.tighten());\n this.updateInView();\n }\n\n stretch(direction: Side, distance: number): void {\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\n let newCoordsX: Point;\n let newCoordsY: Point;\n switch (direction) {\n case Side.Left:\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\n newCoordsX[0] = newCoordsX[1] - this.type.minWidth;\n }\n break;\n case Side.Top:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\n newCoordsY[0] = newCoordsY[1] - this.type.minHeight;\n }\n break;\n case Side.Right:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\n newCoordsX[1] = newCoordsX[0] + this.type.minWidth;\n }\n break;\n case Side.Bottom:\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\n newCoordsY[1] = newCoordsY[0] + this.type.minHeight;\n }\n break;\n }\n this.coords = [newCoordsX[0], newCoordsY[0]];\n this.width = newCoordsX[1] - newCoordsX[0];\n this.height = newCoordsY[1] - newCoordsY[0];\n for (const port of this.ports) {\n port.move(\n translatePoint(\n port.coords,\n oldCoordsX,\n oldCoordsY,\n newCoordsX,\n newCoordsY\n )\n );\n }\n if (this.label) {\n this.label.coords = [\n this.coords[0] + (this.type.label?.margin || 0),\n this.coords[1] + (this.type.label?.margin || 0)\n ];\n (this.label.width = this.width - (this.type.label?.margin || 0) * 2),\n (this.label.height = this.height - (this.type.label?.margin || 0) * 2);\n }\n // we ignore this.sections, the stretching of a node with sections is handled in the stretchSections method\n this.updateInView();\n }\n\n stretchSections(direction: Side, distance: number, point: Point) {\n switch (direction) {\n case Side.Bottom:\n for (const section of this.sections) {\n if (section.coords[1] === point[1]) {\n section.stretch(direction, distance);\n } else if (section.coords[1] > point[1]) {\n section.move([section.coords[0], section.coords[1] + distance]);\n }\n }\n break;\n case Side.Right:\n for (const section of this.sections) {\n if (section.coords[0] === point[0]) {\n section.stretch(direction, distance);\n } else if (section.coords[0] > point[0]) {\n section.move([section.coords[0] + distance, section.coords[1]]);\n }\n }\n break;\n case Side.Top:\n for (const section of this.sections) {\n if (section.coords[1] === point[1]) {\n section.stretch(direction, distance);\n } else if (section.coords[1] < point[1]) {\n section.move([section.coords[0], section.coords[1] - distance]);\n }\n }\n break;\n case Side.Left:\n for (const section of this.sections) {\n if (section.coords[0] === point[0]) {\n section.stretch(direction, distance);\n } else if (section.coords[0] < point[0]) {\n section.move([section.coords[0] - distance, section.coords[1]]);\n }\n }\n break;\n }\n this.stretch(direction, distance);\n }\n}\n\nexport class DiagramNodeSet extends DiagramEntitySet<DiagramNode> {\n private model: DiagramModel;\n types = new DiagramEntitySet<DiagramNodeType>();\n\n constructor(model: DiagramModel) {\n super();\n this.model = model;\n }\n\n new(\n type: DiagramNodeType,\n coords: Point,\n id?: string | undefined,\n sectionIds?: (string | undefined)[],\n sectionPortIds?: (string | undefined)[][],\n sectionPortLabelIds?: (string | undefined)[][],\n portIds?: (string | undefined)[],\n portLabelIds?: (string | undefined)[],\n labelId?: string | undefined\n ): DiagramNode {\n const node = new DiagramNode(this.model, type, coords, id);\n super.add(node);\n node.updateInView();\n // add node sections\n if (\n type.sections !== null &&\n (type.sections.sectionsX || 0) > 0 &&\n (type.sections.sectionsY || 0) > 0\n ) {\n const sectionConfiguration = {\n ...DIAGRAM_SECTION_DEFAULTS,\n ...type.sections\n };\n const sectionsX = sectionConfiguration.sectionsX;\n const sectionsY = sectionConfiguration.sectionsY;\n const margin = sectionConfiguration.margin;\n const widthPerSection =\n (node.width - margin * (sectionsX + 1)) / sectionsX;\n const heightPerSection =\n (node.height - margin * (sectionsY + 1)) / sectionsY;\n let sectionCount = 0;\n for (let j = 0; j < sectionsY; ++j) {\n for (let i = 0; i < sectionsX; ++i) {\n const coords: Point = [\n node.coords[0] + margin + i * (widthPerSection + margin),\n node.coords[1] + margin + j * (heightPerSection + margin)\n ];\n this.model.sections.new(\n node,\n coords,\n widthPerSection,\n heightPerSection,\n sectionIds && sectionIds.length > sectionCount\n ? sectionIds[sectionCount]\n : undefined,\n sectionPortIds && sectionPortIds.length > sectionCount\n ? sectionPortIds[sectionCount]\n : undefined,\n sectionPortLabelIds && sectionPortLabelIds.length > sectionCount\n ? sectionPortLabelIds[sectionCount]\n : undefined\n );\n ++sectionCount;\n }\n }\n }\n // add node ports\n if (type.ports.length > 0) {\n for (let i = 0; i < type.ports.length; ++i) {\n const portConfig = type.ports[i];\n const port = this.model.ports.new(\n node,\n [\n node.coords[0] + portConfig.coords[0],\n node.coords[1] + portConfig.coords[1]\n ],\n portConfig.direction,\n portIds && portIds.length > i ? portIds[i] : undefined\n );\n if (portConfig.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...portConfig.label\n };\n let labelCoords: Point;\n switch (port.direction) {\n case Side.Top:\n case Side.Left:\n labelCoords = [\n port.coords[0] - labelConfiguration.fontSize,\n port.coords[1] - labelConfiguration.fontSize\n ];\n break;\n case Side.Bottom:\n labelCoords = [\n port.coords[0] - labelConfiguration.fontSize,\n port.coords[1] + labelConfiguration.fontSize\n ];\n break;\n case Side.Right:\n labelCoords = [\n port.coords[0] + labelConfiguration.fontSize,\n port.coords[1] - labelConfiguration.fontSize\n ];\n break;\n default:\n labelCoords = port.coords;\n }\n this.model.fields.new(\n port,\n labelCoords,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable,\n portLabelIds && portLabelIds.length > i\n ? portLabelIds[i]\n : undefined\n );\n }\n }\n }\n // add node label\n if (type.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...type.label\n };\n this.model.fields.new(\n node,\n [\n node.coords[0] + labelConfiguration.margin,\n node.coords[1] + labelConfiguration.margin\n ],\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n node.width - labelConfiguration.margin * 2,\n node.height - labelConfiguration.margin * 2,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable,\n labelId\n );\n }\n return node;\n }\n\n override remove(id: string) {\n const node = this.get(id);\n if (node) {\n // remove all sections\n while (node.sections.length > 0) {\n this.model.sections.remove(node.sections[0].id);\n }\n // remove all ports\n while (node.ports.length > 0) {\n this.model.ports.remove(node.ports[0].id);\n }\n // remove label\n if (node.label) {\n this.model.fields.remove(node.label.id);\n }\n // remove from set of nodes\n super.remove(id);\n // remove from canvas\n node.updateInView();\n }\n }\n\n override filter(type?: string, threshold?: number): DiagramNode[] {\n return this.entities.filter(\n (e) =>\n (type ? e.type.id === type : true) &&\n (threshold ? e.type.priority >= threshold : true)\n );\n }\n\n override find(type?: string, threshold?: number): DiagramNode | undefined {\n return this.entities.find(\n (e) =>\n (type ? e.type.id === type : true) &&\n (threshold ? e.type.priority >= threshold : true)\n );\n }\n}\n","import { Point, distanceBetweenPoints } from '../../util/canvas-util';\nimport { removeIfExists } from '../../util/list-util';\nimport { Side } from '../../util/svg-util';\nimport { DiagramConnection } from './diagram-connection';\nimport { DiagramElement, DiagramEntitySet } from './diagram-element';\nimport { DiagramField } from './diagram-field';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramNode } from './diagram-node';\nimport { DiagramSection } from './diagram-section';\n\nlet idTicker = 0;\n\n/**\n * Default values of the parameters of a diagram port.\n * @see DiagramPort\n * @private\n */\nexport const DIAGRAM_PORT_DEFAULTS = {\n radius: 12,\n highlightedColor: 'cyan',\n selectedColor: 'violet'\n};\n\n/**\n * A port which is part of a node or section and at which connections can start or end.\n * @see DiagramConnection\n * @see DiagramNode\n * @see DiagramSection\n * @public\n */\nexport class DiagramPort extends DiagramElement {\n /**\n * Element that this port belongs to.\n * @public\n */\n rootElement?: DiagramNode | DiagramSection;\n /**\n * Label of this port.\n * @public\n */\n label?: DiagramField;\n /**\n * Direction of the connections of this port at the coordinates of this port.\n * @public\n */\n direction: Side;\n /**\n * Coordinates of this port.\n * @public\n */\n coords: Point;\n /**\n * Connections that start at this port.\n * @public\n */\n outgoingConnections: DiagramConnection[] = [];\n /**\n * Connections that end at this port.\n * @public\n */\n incomingConnections: DiagramConnection[] = [];\n\n constructor(\n model: DiagramModel,\n rootElement: DiagramNode | DiagramSection | undefined,\n coords: Point,\n direction: Side,\n id?: string\n ) {\n let uniqueId: string;\n if (id !== undefined && model.ports.get(id) === undefined) {\n uniqueId = id;\n } else {\n do {\n uniqueId = `diagram-port-${++idTicker}`;\n } while (model.ports.get(uniqueId) !== undefined);\n }\n super(model, uniqueId);\n this.rootElement = rootElement;\n this.coords = coords;\n this.direction = direction;\n }\n\n updateInView() {\n if (this.model.canvas && this.model.renderToCanvas) {\n this.model.canvas.updatePortsInView(this.id);\n }\n }\n\n startConnection(connection: DiagramConnection) {\n this.outgoingConnections.push(connection);\n }\n\n finishConnection(connection: DiagramConnection) {\n this.incomingConnections.push(connection);\n }\n\n getNode(): DiagramNode | undefined {\n if (this.rootElement instanceof DiagramNode) {\n return this.rootElement;\n } else if (this.rootElement instanceof DiagramSection) {\n return this.rootElement.node;\n }\n return undefined;\n }\n\n move(coords: Point): void {\n const coordDifferences = [\n coords[0] - this.coords[0],\n coords[1] - this.coords[1]\n ];\n this.coords = coords;\n for (const connection of this.outgoingConnections) {\n connection.setStart(this);\n }\n for (const connection of this.incomingConnections) {\n connection.setEnd(this);\n }\n if (this.label) {\n this.label.move([\n this.label.coords[0] + coordDifferences[0],\n this.label.coords[1] + coordDifferences[1]\n ]);\n }\n this.updateInView();\n }\n\n distanceTo(coords: Point): number {\n return distanceBetweenPoints(this.coords, coords);\n }\n}\n\nexport class DiagramPortSet extends DiagramEntitySet<DiagramPort> {\n private model: DiagramModel;\n\n constructor(model: DiagramModel) {\n super();\n this.model = model;\n }\n\n new(\n rootElement: DiagramNode | DiagramSection | undefined,\n coords: Point,\n direction: Side,\n id?: string | undefined\n ): DiagramPort {\n const port = new DiagramPort(\n this.model,\n rootElement,\n coords,\n direction,\n id\n );\n super.add(port);\n port.updateInView();\n // add this port to its root element\n if (rootElement !== undefined) {\n rootElement.ports.push(port);\n }\n return port;\n }\n\n override remove(id: string) {\n const port = this.get(id);\n if (port) {\n // remove all connections\n while (port.outgoingConnections.length > 0) {\n this.model.connections.remove(port.outgoingConnections[0].id);\n }\n while (port.incomingConnections.length > 0) {\n this.model.connections.remove(port.incomingConnections[0].id);\n }\n // remove label\n if (port.label) {\n this.model.fields.remove(port.label.id);\n }\n // remove from root element\n if (\n port.rootElement instanceof DiagramNode ||\n port.rootElement instanceof DiagramSection\n ) {\n removeIfExists(port.rootElement.ports, port);\n }\n // remove from set of ports\n super.remove(id);\n // remove from canvas\n port.updateInView();\n }\n }\n\n override filter(threshold?: number): DiagramPort[] {\n return this.entities.filter((e) => {\n if (threshold) {\n const node = e.getNode();\n if (node) {\n return node !== undefined && node.type.priority >= threshold;\n }\n return false;\n }\n return true;\n });\n }\n\n override find(threshold?: number): DiagramPort | undefined {\n return this.entities.find((e) => {\n if (threshold) {\n const node = e.getNode();\n if (node) {\n return node !== undefined && node.type.priority >= threshold;\n }\n return false;\n }\n return true;\n });\n }\n}\n","import { Point } from '../../util/canvas-util';\nimport { HorizontalAlign, VerticalAlign } from '../../util/svg-util';\nimport { DiagramConnection } from './diagram-connection';\nimport { DiagramElement, DiagramEntitySet } from './diagram-element';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramNode } from './diagram-node';\nimport { DiagramPort } from './diagram-port';\nimport { DiagramSection } from './diagram-section';\n\nlet idTicker = 0;\n\n/**\n * Default values of the parameters of a diagram field.\n * @see DiagramField\n * @private\n */\nexport const DIAGRAM_FIELD_DEFAULTS = {\n editable: true,\n fontSize: 0,\n margin: 0,\n padding: 0,\n fontFamily: null,\n color: '#000000',\n selectedColor: '#000000',\n horizontalAlign: HorizontalAlign.Center,\n verticalAlign: VerticalAlign.Center\n};\n\n/**\n * A field which displays text and is part of a diagram element.\n * @see DiagramNode\n * @see DiagramPort\n * @see DiagramSection\n * @public\n */\nexport class DiagramField extends DiagramElement {\n /**\n * Element that this field belongs to.\n * @public\n */\n rootElement?: DiagramNode | DiagramSection | DiagramPort;\n /**\n * Coordinates of this field.\n * @public\n */\n coords: Point;\n /**\n * Dimension of this field along the x axis.\n * @public\n */\n width: number;\n /**\n * Dimension of this field along the y axis.\n * @public\n */\n height: number;\n /**\n * Font size of this field.\n * @public\n */\n fontSize: number;\n /**\n * Font family of this field. `null` for the default one.\n * @public\n */\n fontFamily: string | null;\n /**\n * Font color of this field.\n * @public\n */\n color: string;\n /**\n * Font color of this field when selected.\n * @public\n */\n selectedColor: string;\n /**\n * Horizontal alignment of the text of this field.\n * @public\n */\n horizontalAlign: HorizontalAlign;\n /**\n * Vertical alignment of the text of this field.\n * @public\n */\n verticalAlign: VerticalAlign;\n private _text: string;\n /**\n * Default text that this field's text resets to when empty.\n * @public\n */\n defaultText: string;\n /**\n * Text contents of this field.\n * @public\n */\n get text(): string {\n return this._text;\n }\n set text(value: string) {\n if (value.trim() === '') {\n value = this.defaultText;\n }\n this._text = value;\n this.select()?.text(value);\n }\n /**\n * Whether this field's text can be edited by the user.\n * @public\n */\n editable: boolean;\n\n constructor(\n model: DiagramModel,\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\n coords: Point,\n width: number,\n height: number,\n fontSize: number,\n fontFamily: string | null,\n color: string,\n selectedColor: string,\n horizontalAlign: HorizontalAlign,\n verticalAlign: VerticalAlign,\n text: string,\n editable: boolean,\n id?: string\n ) {\n let uniqueId: string;\n if (id !== undefined && model.fields.get(id) === undefined) {\n uniqueId = id;\n } else {\n do {\n uniqueId = `diagram-field-${++idTicker}`;\n } while (model.fields.get(uniqueId) !== undefined);\n }\n super(model, uniqueId);\n this.rootElement = rootElement;\n this.coords = coords;\n this.width = width;\n this.height = height;\n this.fontSize = fontSize;\n this.fontFamily = fontFamily;\n this.color = color;\n this.selectedColor = selectedColor;\n this.horizontalAlign = horizontalAlign;\n this.verticalAlign = verticalAlign;\n this.defaultText = text;\n this._text = text;\n this.editable = editable;\n }\n\n updateInView() {\n if (this.model.canvas && this.model.renderToCanvas) {\n this.model.canvas.updateFieldsInView(this.id);\n }\n }\n\n move(coords: Point): void {\n this.coords = coords;\n this.updateInView();\n }\n\n getClosestNode(): DiagramNode | undefined {\n if (this.rootElement instanceof DiagramNode) {\n return this.rootElement;\n } else if (this.rootElement instanceof DiagramPort) {\n return this.rootElement.getNode();\n } else if (this.rootElement instanceof DiagramConnection) {\n return (\n this.rootElement.start?.getNode() || this.rootElement.end?.getNode()\n );\n }\n return undefined;\n }\n}\n\nexport class DiagramFieldSet extends DiagramEntitySet<DiagramField> {\n private model: DiagramModel;\n\n constructor(model: DiagramModel) {\n super();\n this.model = model;\n }\n\n new(\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\n coords: Point,\n fontSize: number,\n fontFamily: string | null,\n color: string,\n selectedColor: string,\n width: number,\n height: number,\n horizontalAlign: HorizontalAlign,\n verticalAlign: VerticalAlign,\n text: string,\n editable: boolean,\n id?: string | undefined\n ): DiagramField {\n const field = new DiagramField(\n this.model,\n rootElement,\n coords,\n width,\n height,\n fontSize,\n fontFamily,\n color,\n selectedColor,\n horizontalAlign,\n verticalAlign,\n text,\n editable,\n id\n );\n super.add(field);\n field.updateInView();\n // add this field to its root element\n if (rootElement !== undefined) {\n rootElement.label = field;\n }\n return field;\n }\n\n override remove(id: string) {\n const field = this.get(id);\n if (field) {\n // remove from root element\n if (\n field.rootElement instanceof DiagramNode ||\n field.rootElement instanceof DiagramSection ||\n field.rootElement instanceof DiagramPort\n ) {\n if (field.rootElement.label === field) {\n field.rootElement.label = undefined;\n }\n }\n // remove from set of fields\n super.remove(id);\n // remove from canvas\n field.updateInView();\n }\n }\n\n override filter(threshold?: number): DiagramField[] {\n return this.entities.filter((e) => {\n if (threshold) {\n const node = e.getClosestNode();\n return node !== undefined && node.type.priority >= threshold;\n }\n return true;\n });\n }\n\n override find(threshold?: number): DiagramField | undefined {\n return this.entities.find((e) => {\n if (threshold) {\n const node = e.getClosestNode();\n return node !== undefined && node.type.priority >= threshold;\n }\n return true;\n });\n }\n}\n","import { Canvas } from '../../interfaces/canvas';\nimport { DiagramConnectionSet } from './diagram-connection';\nimport { DiagramFieldSet } from './diagram-field';\nimport { DiagramNodeSet } from './diagram-node';\nimport { DiagramPortSet } from './diagram-port';\nimport { Property, PropertySet, ValueSet } from './diagram-property';\nimport { DiagramSectionSet } from './diagram-section';\n\n/**\n * Stores the data of a diagram.\n * @public\n */\nexport class DiagramModel {\n /**\n * The canvas where this model's data is being rendered.\n * @private\n */\n canvas?: Canvas;\n /**\n * Whether changes to this model are updated in the canvas in real time.\n * @private\n */\n renderToCanvas = true;\n /**\n * Nodes of this model.\n * @see DiagramNode\n * @public\n */\n nodes = new DiagramNodeSet(this);\n /**\n * Sections of this model.\n * @see DiagramSection\n * @public\n */\n sections = new DiagramSectionSet(this);\n /**\n * Ports of this model.\n * @see DiagramPort\n * @public\n */\n ports = new DiagramPortSet(this);\n /**\n * Connections of this model.\n * @see DiagramConnection\n * @public\n */\n connections = new DiagramConnectionSet(this);\n /**\n * Fields of this model.\n * @see DiagramField\n * @public\n */\n fields = new DiagramFieldSet(this);\n /**\n * Identifier of this diagram. Set by the consumer of the diagram.\n * @public\n */\n id: string | undefined;\n /**\n * Name of this diagram. Set by the consumer of the diagram.\n * @public\n */\n name: string;\n /**\n * Description of this diagram. Set by the consumer of the diagram.\n * @public\n */\n description?: string;\n /**\n * Type of this diagram. Set by the consumer of the diagram.\n * @public\n */\n type: string;\n /**\n * Date of creation of this diagram. Set at the creation of the diagram.\n * @public\n */\n createdAt: Date;\n /**\n * Date of last changes of this diagram. Set by the consumer of the diagram.\n * @public\n */\n updatedAt: Date;\n /**\n * Additional properties of this diagram.\n * @public\n */\n valueSet: ValueSet;\n\n constructor(\n canvas: Canvas | undefined,\n id: string | undefined,\n name: string,\n description: string | undefined,\n type: string,\n properties: Property[] = []\n ) {\n this.canvas = canvas;\n this.id = id;\n this.name = name;\n this.description = description;\n this.type = type;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.valueSet = new ValueSet(new PropertySet(properties), this);\n }\n\n /**\n * Enables rendering to canvas in real time and updates the view of this model in the canvas.\n * @public\n */\n enableRenderToCanvas() {\n this.renderToCanvas = true;\n this.canvas?.updateModelInView();\n }\n\n /**\n * Disables rendering to canvas in real time.\n * Used to perform batches of changes to the model without the computational cost of rendering each change to the canvas individually.\n * @public\n */\n disableRenderToCanvas() {\n this.renderToCanvas = false;\n }\n\n /**\n * Deletes everything in this diagram.\n * @public\n */\n clear(): void {\n this.id = undefined;\n this.name = '';\n this.description = undefined;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.nodes.clear();\n this.sections.clear();\n this.ports.clear();\n this.connections.clear();\n this.fields.clear();\n this.valueSet.resetValues();\n if (this.renderToCanvas) {\n this.canvas?.cancelAllUserActions();\n this.canvas?.updateModelInView();\n }\n }\n}\n","import * as d3 from 'd3';\nimport { BaseType } from 'd3';\nimport { Subject } from 'rxjs';\nimport { DiagramValidator } from '../../errors/diagram-validator';\nimport { Canvas } from '../../interfaces/canvas';\nimport { DiagramEditor } from '../../interfaces/diagram-editor';\nimport { Point } from '../../util/canvas-util';\nimport { DragEvents, Events, Keys, ZoomEvents } from '../../util/events';\nimport { linePath, lineStyleDasharray } from '../../util/line';\nimport { removeIfExists } from '../../util/list-util';\nimport { generalClosedPath, pillPath } from '../../util/shape';\nimport { HorizontalAlign, Side, VerticalAlign } from '../../util/svg-util';\nimport {\n ActionQueue,\n AddConnectionAction,\n DiagramAction,\n DiagramActions,\n EditFieldAction,\n MoveNodeAction,\n RemoveAction,\n StretchNodeAction,\n StretchSectionAction,\n UpdateValuesAction\n} from './diagram-action';\nimport {\n DiagramConfig,\n NodeImageLook,\n NodeShapedLook,\n NodeStretchableImageLook\n} from './diagram-config';\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\nimport { DiagramElement } from './diagram-element';\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\nimport { DiagramModel } from './diagram-model';\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\nimport { DIAGRAM_PORT_DEFAULTS, DiagramPort } from './diagram-port';\nimport { ValueSet, equals } from './diagram-property';\nimport { DiagramSection } from './diagram-section';\n\n/**\n * Thickness of the invisible path around a connection used to make it easier to click on, in pixels.\n * @private\n */\nexport const CONNECTION_PATH_BOX_THICKNESS = 12;\n/**\n * Thickness of the resizer line used to resize nodes and sections on drag, in pixels.\n * @private\n */\nexport const RESIZER_THICKNESS = 6;\n\n/**\n * Text to display as the title of the property editor when editing this diagram's properties.\n * @see PropertyEditorComponent\n * @private\n */\nexport const DIAGRAM_PROPERTIES_TEXT = 'Diagram properties';\n\n/**\n * Maximum number of user actions that can be recorded in the user action queue.\n * @see ActionQueue\n * @private\n */\nexport const ACTION_QUEUE_SIZE = 25;\n\nexport class DiagramCanvas implements Canvas {\n parentComponent!: DiagramEditor;\n diagramRoot!: HTMLElement;\n\n model: DiagramModel;\n color: string;\n gridSize: number;\n snapToGrid: boolean;\n guessConnectionType: boolean;\n connectionType?: DiagramConnectionType;\n priorityThreshold?: number;\n priorityThresholds: number[];\n validators: DiagramValidator[];\n layoutFormat?: string;\n userActions: { [key in DiagramActions]?: boolean };\n actionQueue: ActionQueue;\n\n private static canvasCount = 0;\n private backgroundPatternId = `daga-background-pattern-id-${DiagramCanvas.canvasCount++}`;\n\n private zoomBehavior!: d3.ZoomBehavior<SVGRectElement, unknown>;\n private zoomTransform: d3.ZoomTransform = d3.zoomIdentity;\n private mainUserHighlight?: DiagramElement = undefined;\n private userHighlight: DiagramElement[] = [];\n private userSelection: DiagramElement[] = [];\n private propertyEditorSelection?: DiagramElement & { valueSet: ValueSet };\n private propertyEditorValues?: { [key: string]: unknown };\n private unfinishedConnection?: DiagramConnection;\n private inputFieldContainer?: d3.Selection<\n SVGForeignObjectElement,\n unknown,\n null,\n unknown\n >;\n // used to distinguish drags from clicks when dragging elements\n private draggingFrom: Point = [0, 0];\n // current action that started but hasn't finished yet\n private currentAction?: DiagramAction;\n\n viewInitialized$ = new Subject<void>();\n validatorChanges$ = new Subject<void>();\n diagramChanges$ = new Subject<number>();\n diagramImportantChanges$ = new Subject<void>();\n\n constructor(parentComponent: DiagramEditor, config: DiagramConfig) {\n this.parentComponent = parentComponent;\n\n this.model = new DiagramModel(\n this,\n undefined,\n config.name || 'unnamed',\n '',\n config.type || '',\n config.properties || []\n );\n this.color = config.color || '#FFFFFF';\n this.gridSize = config.gridSize || 0;\n this.snapToGrid = config.snapToGrid || false;\n this.guessConnectionType = config.guessConnectionType || false;\n this.priorityThreshold = config.defaultPriorityThreshold;\n this.priorityThresholds = config.priorityThresholds || [];\n this.layoutFormat = config.layoutFormat;\n this.userActions = config.userActions || {};\n this.validators = [];\n this.actionQueue = new ActionQueue(ACTION_QUEUE_SIZE);\n\n // load node types\n if (config.nodeTypes) {\n for (const nodeTypeConfig of config.nodeTypes) {\n const nodeType = new DiagramNodeType({\n ...config.nodeTypeDefaults,\n ...nodeTypeConfig\n });\n this.model.nodes.types.add(nodeType);\n }\n }\n // load connection types\n if (config.connectionTypes) {\n for (const connectionTypeConfig of config.connectionTypes) {\n const connectionType = new DiagramConnectionType({\n ...config.connectionTypeDefaults,\n ...connectionTypeConfig\n });\n this.model.connections.types.add(connectionType);\n }\n this.connectionType =\n config.defaultConnection !== undefined\n ? this.model.connections.types.get(config.defaultConnection)\n : undefined;\n }\n }\n\n addValidator(validator: DiagramValidator) {\n this.validators.push(validator);\n this.validatorChanges$.next();\n }\n\n removeValidator(validator: DiagramValidator) {\n removeIfExists(this.validators, validator);\n this.validatorChanges$.next();\n }\n\n // View methods\n\n initView(appendTo: HTMLElement): void {\n this.diagramRoot = d3.select(appendTo).append('div').node() as HTMLElement;\n\n d3.select(this.diagramRoot)\n .attr('tabindex', 0) // make element focusable\n .style('width', '100%')\n .style('height', '100%')\n .append('svg')\n .style('width', '100%')\n .style('height', '100%');\n\n d3.select(this.diagramRoot)\n .on(Events.Click, () => {\n // focus on the diagram when clicking so that we can focus on the diagram\n // keyboard events only work if we're focusing on the diagram\n d3.select(this.diagramRoot).node()?.focus();\n })\n .on(Events.KeyUp, (event: KeyboardEvent) => {\n if (\n !event.ctrlKey &&\n event.key === Keys.Delete &&\n this.userActions[DiagramActions.RemoveAction] !== false\n ) {\n // delete selection\n if (this.userSelection.length > 0) {\n const nodesToBeDeleted: DiagramNode[] = [];\n const sectionsToBeDeleted: DiagramSection[] = [];\n const portsToBeDeleted: DiagramPort[] = [];\n const connectionsToBeDeleted: DiagramConnection[] = [];\n const fieldsToBeDeleted: DiagramField[] = [];\n for (const userSelectionElement of this.userSelection) {\n if (userSelectionElement instanceof DiagramNode) {\n nodesToBeDeleted.push(userSelectionElement);\n } else if (userSelectionElement instanceof DiagramSection) {\n sectionsToBeDeleted.push(userSelectionElement);\n } else if (userSelectionElement instanceof DiagramPort) {\n portsToBeDeleted.push(userSelectionElement);\n } else if (userSelectionElement instanceof DiagramConnection) {\n connectionsToBeDeleted.push(userSelectionElement);\n } else if (userSelectionElement instanceof DiagramField) {\n fieldsToBeDeleted.push(userSelectionElement);\n }\n }\n const removeAction = new RemoveAction(\n this.model,\n nodesToBeDeleted,\n sectionsToBeDeleted,\n portsToBeDeleted,\n connectionsToBeDeleted,\n fieldsToBeDeleted\n );\n removeAction.redo();\n this.actionQueue.add(removeAction);\n }\n this.cancelAllUserActions();\n }\n if (event.ctrlKey && event.key === 'y') {\n // redo\n this.actionQueue.redo();\n }\n if (event.ctrlKey && event.key === 'z') {\n // undo\n this.actionQueue.undo();\n }\n });\n\n const canvasView = this.selectRoot()\n .append('g')\n .attr('class', 'canvas-view')\n .attr('width', `100%`)\n .attr('height', `100%`);\n\n const canvasBackground = canvasView\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', `100%`)\n .attr('height', `100%`)\n .attr('fill', this.color)\n .attr('stroke-width', '0')\n .on(Events.MouseMove, (event: MouseEvent) => {\n if (this.unfinishedConnection !== undefined) {\n const pointerCoords = this.getPointerLocationRelativeToCanvas(event);\n this.unfinishedConnection.endCoords = pointerCoords;\n }\n })\n .on(Events.MouseOver, () => {\n this.unhighlight();\n })\n .on(Events.Click, () => {\n /*\n * TODO: MAKE THE setPropertyEditorSelection(undefined) CLOSE THE PROPERTY EDITOR INSTEAD\n * IN THIS LINE, INSTEAD OF clearUserSelection(), WE SHOULD DO setPropertyEditorSelection(this.model)\n */\n this.clearUserSelection();\n })\n .call(\n (this.zoomBehavior = d3\n .zoom<SVGRectElement, unknown>()\n .on(\n ZoomEvents.Zoom,\n (event: d3.D3ZoomEvent<SVGRectElement, unknown>) => {\n if (event.sourceEvent) {\n if (\n event.sourceEvent.type === 'wheel' &&\n event.sourceEvent.wheelDelta !== undefined\n ) {\n if (event.sourceEvent.wheelDelta > 0) {\n d3.select('body').style('cursor', 'zoom-in');\n }\n if (event.sourceEvent.wheelDelta < 0) {\n d3.select('body').style('cursor', 'zoom-out');\n }\n } else if (event.sourceEvent.type === 'mousemove') {\n d3.select('body').style('cursor', 'move');\n }\n }\n this.zoomTransform = event.transform;\n const transformAttribute = event.transform.toString();\n this.selectCanvas().attr('transform', transformAttribute);\n d3.select(`#${this.backgroundPatternId}`).attr(\n 'patternTransform',\n transformAttribute\n );\n }\n )\n .on(ZoomEvents.End, () => {\n d3.select('body').style('cursor', 'auto');\n }))\n );\n\n canvasView.append('g').attr('class', 'canvas');\n\n const canvasDefs = canvasView.append('defs');\n\n if (this.gridSize > 0) {\n const canvasBackgroundPattern = canvasDefs\n .append('pattern')\n .attr('id', this.backgroundPatternId)\n .attr('x', -this.gridSize / 2)\n .attr('y', -this.gridSize / 2)\n .attr('width', this.gridSize)\n .attr('height', this.gridSize)\n .attr('patternUnits', 'userSpaceOnUse');\n canvasBackgroundPattern\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', this.gridSize)\n .attr('height', this.gridSize)\n .attr('fill', this.color);\n canvasBackgroundPattern\n .append('circle')\n .attr('cx', this.gridSize / 2)\n .attr('cy', this.gridSize / 2)\n .attr('r', this.gridSize / 16)\n .attr('fill', 'black')\n .attr('fill-opacity', 0.1);\n canvasBackground.attr('fill', `url(#${this.backgroundPatternId})`);\n }\n\n this.viewInitialized$.next();\n }\n\n zoomBy(zoom: number): void {\n if (!isNaN(zoom)) {\n this.zoomBehavior.scaleBy(this.selectCanvasView().select('rect'), zoom);\n }\n }\n\n zoomTo(zoom: number): void {\n if (!isNaN(zoom)) {\n this.zoomBehavior.scaleTo(this.selectCanvasView().select('rect'), zoom);\n }\n }\n\n translateBy(x: number, y: number): void {\n if (!isNaN(x) && !isNaN(y)) {\n this.zoomBehavior.translateBy(\n this.selectCanvasView().select('rect'),\n x,\n y\n );\n }\n }\n\n translateTo(x: number, y: number): void {\n if (!isNaN(x) && !isNaN(y)) {\n this.zoomBehavior.translateTo(\n this.selectCanvasView().select('rect'),\n x,\n y\n );\n }\n }\n\n center() {\n // if there are no nodes, we have nothing to do here\n if (this.model.nodes.length > 0) {\n const canvasViewBoundingBox = (\n this.selectCanvasView().select('rect').node() as SVGGraphicsElement\n ).getBBox();\n const minimumX = Math.min(\n ...this.model.nodes.all().map((n) => n.coords[0])\n );\n const maximumX = Math.max(\n ...this.model.nodes.all().map((n) => n.coords[0] + n.width)\n );\n const averageX = (minimumX + maximumX) / 2;\n const rangeX = maximumX - minimumX;\n const windowRangeX = canvasViewBoundingBox.width;\n const minimumY = Math.min(\n ...this.model.nodes.all().map((n) => n.coords[1])\n );\n const maximumY = Math.max(\n ...this.model.nodes.all().map((n) => n.coords[1] + n.height)\n );\n const averageY = (minimumY + maximumY) / 2;\n const rangeY = maximumY - minimumY;\n const windowRangeY = canvasViewBoundingBox.height;\n /*\n * (windowRangeX / rangeX) is the zoom level to fit everything horizontally\n * (windowRangeY / rangeY) is the zoom level to fit everything vertically\n * the minimum between them is the zoom to fit everything in the screen both horizontally and vertically\n * we also add 1 to the list so that if the zoom exceeds 1 it is set to 1\n * a zoom bigger than 1 means zooming in instead of out, and we don't want to zoom in if it's not necessary\n */\n const zoom = Math.min(windowRangeX / rangeX, windowRangeY / rangeY, 1);\n this.translateTo(averageX, averageY);\n this.zoomTo(zoom);\n }\n }\n\n getClosestGridPoint(point: Point): Point {\n if (this.gridSize === 0) {\n return point;\n } else {\n return [\n Math.round(point[0] / this.gridSize) * this.gridSize,\n Math.round(point[1] / this.gridSize) * this.gridSize\n ];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getEventHoldingCoordinates(event: MouseEvent): any {\n if (\n event.type === 'drag' ||\n event.type === 'start' ||\n event.type === 'end'\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sourceEvent = (event as any).sourceEvent;\n if (\n sourceEvent &&\n (sourceEvent.type === 'touchmove' ||\n sourceEvent.type === 'touchstart' ||\n sourceEvent.type === 'touchend')\n ) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (event as any).sourceEvent.touches[0] ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (event as any).sourceEvent.changedTouches[0]\n );\n }\n }\n return event;\n }\n\n getPointerLocationRelativeToCanvas(event: MouseEvent): Point {\n return d3.pointer(\n this.getEventHoldingCoordinates(event),\n this.selectCanvas().node()\n );\n }\n\n getPointerLocationRelativeToBody(event: MouseEvent): Point {\n return d3.pointer(\n this.getEventHoldingCoordinates(event),\n d3.select('body').node()\n );\n }\n\n updateModelInView(): void {\n this.updateNodesInView();\n this.updatePortsInView();\n this.updateConnectionsInView();\n this.updateFieldsInView();\n }\n\n updateNodesInView(...ids: string[]): void {\n let updateSelection: d3.Selection<\n SVGGElement,\n DiagramNode,\n BaseType,\n unknown\n > = this.selectCanvas()\n .selectAll<SVGGElement, DiagramNode>('g.diagram-node')\n .data(\n this.model.nodes.filter(undefined, this.priorityThreshold),\n (d: DiagramNode) => d.id\n );\n const exitSelection = updateSelection.exit();\n const enterSelection = updateSelection\n .enter()\n .append('g')\n .attr('id', (d) => d.id)\n .attr(\n 'class',\n (d) =>\n `diagram-node${d.type.resizableX ? ' resizable-x' : ''}${\n d.type.resizableY ? ' resizable-y' : ''\n } ${d.type.look.lookType}`\n );\n\n if (ids.length > 0) {\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\n }\n\n const numberOfChanges =\n enterSelection.size() + updateSelection.size() + exitSelection.size();\n if (numberOfChanges === 0) {\n return;\n } else {\n this.diagramChanges$.next(numberOfChanges);\n }\n\n const mergeSelection = enterSelection.merge(updateSelection);\n\n exitSelection.remove();\n\n enterSelection\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\n this.highlight(d);\n })\n .on(Events.Click, (event: MouseEvent, d: DiagramNode) => {\n if (!event.ctrlKey) {\n this.clearUserSelection();\n }\n this.toggleUserSelection(d);\n })\n .call(\n d3\n .drag<SVGGElement, DiagramNode, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n d3.select('body').style('cursor', 'grabbing');\n this.draggingFrom = [event.x, event.y];\n this.currentAction = new MoveNodeAction(\n this,\n d.id,\n d.coords,\n [0, 0]\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n const newNodeCoords: Point = [\n event.x - d.width / 2,\n event.y - d.height / 2\n ];\n d.move(newNodeCoords);\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n // prevent drag behavior if mouse hasn't moved\n if (\n (this.draggingFrom[0] !== event.x ||\n this.draggingFrom[1] !== event.y) &&\n this.currentAction instanceof MoveNodeAction\n ) {\n let newNodeCoords: Point = [\n event.x - d.width / 2,\n event.y - d.height / 2\n ];\n if (this.snapToGrid) {\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\n }\n d.move(newNodeCoords);\n (this.currentAction as MoveNodeAction).to = newNodeCoords;\n this.actionQueue.add(this.currentAction);\n } else {\n this.currentAction = undefined;\n }\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection.filter('.shaped-look').append('path');\n enterSelection\n .filter('.image-look')\n .append('image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-right-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'center-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'right-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-right-image')\n .attr('preserveAspectRatio', 'none');\n\n enterSelection\n .filter('.resizable-x')\n .append('line')\n .attr('class', 'left-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n }\n })\n .on(Events.MouseOut, (event, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n this.currentAction = new StretchNodeAction(\n this,\n d.id,\n Side.Left,\n d.width,\n d.width\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\n (this.currentAction as StretchNodeAction).to = d.width;\n this.actionQueue.add(this.currentAction as StretchNodeAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-y')\n .append('line')\n .attr('class', 'top-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n this.currentAction = new StretchNodeAction(\n this,\n d.id,\n Side.Top,\n d.height,\n d.height\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\n (this.currentAction as StretchNodeAction).to = d.height;\n this.actionQueue.add(this.currentAction as StretchNodeAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-x')\n .append('line')\n .attr('class', 'right-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n this.currentAction = new StretchNodeAction(\n this,\n d.id,\n Side.Right,\n d.width,\n d.width\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableX\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\n (this.currentAction as StretchNodeAction).to = d.width;\n this.actionQueue.add(this.currentAction as StretchNodeAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-y')\n .append('line')\n .attr('class', 'bottom-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n this.currentAction = new StretchNodeAction(\n this,\n d.id,\n Side.Bottom,\n d.height,\n d.height\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.stretch(\n Side.Bottom,\n pointerCoords[1] - (d.coords[1] + d.height)\n );\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\n if (\n this.userActions[DiagramActions.StretchNodeAction] !== false &&\n d.type.resizableY\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.stretch(\n Side.Bottom,\n pointerCoords[1] - (d.coords[1] + d.height)\n );\n (this.currentAction as StretchNodeAction).to = d.height;\n this.actionQueue.add(this.currentAction as StretchNodeAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n\n mergeSelection.attr(\n 'transform',\n (d) => `translate(${d.coords[0]},${d.coords[1]})`\n );\n\n mergeSelection\n .filter('.shaped-look')\n .select('path')\n .attr('d', (d) =>\n generalClosedPath(\n (d.type.look as NodeShapedLook).shape,\n 0,\n 0,\n d.width,\n d.height\n )\n )\n .attr('fill', (d) =>\n d.selected\n ? (d.type.look as NodeShapedLook).selectedColor\n : (d.type.look as NodeShapedLook).color\n )\n .attr('stroke', (d) =>\n d.selected\n ? (d.type.look as NodeShapedLook).selectedBorderColor\n : (d.type.look as NodeShapedLook).borderColor\n )\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\n mergeSelection\n .filter('.image-look')\n .select('image')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', (d) => d.width)\n .attr('height', (d) => d.height)\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeImageLook).selectedBackgroundImage\n : (d.type.look as NodeImageLook).backgroundImage\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-left-image')\n .attr('x', 0)\n .attr('y', 0)\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageTopLeft\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-image')\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\n .attr('y', 0)\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.type.look as NodeStretchableImageLook).rightMargin -\n (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook).selectedBackgroundImageTop\n : (d.type.look as NodeStretchableImageLook).backgroundImageTop\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-right-image')\n .attr(\n 'x',\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr('y', 0)\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageTopRight\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopRight\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.left-image')\n .attr('x', 0)\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.type.look as NodeStretchableImageLook).bottomMargin -\n (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageLeft\n : (d.type.look as NodeStretchableImageLook).backgroundImageLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.center-image')\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.type.look as NodeStretchableImageLook).rightMargin -\n (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.type.look as NodeStretchableImageLook).bottomMargin -\n (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageCenter\n : (d.type.look as NodeStretchableImageLook).backgroundImageCenter\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.right-image')\n .attr(\n 'x',\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.type.look as NodeStretchableImageLook).bottomMargin -\n (d.type.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageRight\n : (d.type.look as NodeStretchableImageLook).backgroundImageRight\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-left-image')\n .attr('x', 0)\n .attr(\n 'y',\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottomLeft\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-image')\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\n .attr(\n 'y',\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.type.look as NodeStretchableImageLook).rightMargin -\n (d.type.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottom\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottom\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-right-image')\n .attr(\n 'x',\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'y',\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr(\n 'width',\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.type.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottomRight\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomRight\n );\n\n mergeSelection\n .filter('.resizable-x')\n .select('line.left-resizer')\n .attr('x1', RESIZER_THICKNESS / 2)\n .attr('x2', RESIZER_THICKNESS / 2)\n .attr('y1', 0)\n .attr('y2', (d) => d.height);\n mergeSelection\n .filter('.resizable-y')\n .select('line.top-resizer')\n .attr('x1', 0)\n .attr('x2', (d) => d.width)\n .attr('y1', RESIZER_THICKNESS / 2)\n .attr('y2', RESIZER_THICKNESS / 2);\n mergeSelection\n .filter('.resizable-x')\n .select('line.right-resizer')\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\n .attr('y1', 0)\n .attr('y2', (d) => d.height);\n mergeSelection\n .filter('.resizable-y')\n .select('line.bottom-resizer')\n .attr('x1', 0)\n .attr('x2', (d) => d.width)\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\n }\n\n updateSectionsInView(...ids: string[]): void {\n let updateSelection: d3.Selection<\n SVGGElement,\n DiagramSection,\n BaseType,\n unknown\n > = this.selectCanvas()\n .selectAll<SVGGElement, DiagramSection>('g.diagram-section')\n .data(\n this.model.sections.filter(this.priorityThreshold),\n (d: DiagramSection) => d.id\n );\n const exitSelection = updateSelection.exit();\n const enterSelection = updateSelection\n .enter()\n .append('g')\n .attr('id', (d) => d.id)\n .attr(\n 'class',\n (d) =>\n `diagram-section${d.node?.type?.resizableX ? ' resizable-x' : ''}${\n d.node?.type?.resizableY ? ' resizable-y' : ''\n } ${d.node?.type?.sections?.look?.lookType}`\n );\n\n if (ids.length > 0) {\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\n }\n\n const numberOfChanges =\n enterSelection.size() + updateSelection.size() + exitSelection.size();\n if (numberOfChanges === 0) {\n return;\n } else {\n this.diagramChanges$.next(numberOfChanges);\n }\n\n const mergeSelection = enterSelection.merge(updateSelection);\n\n exitSelection.remove();\n\n enterSelection\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\n this.highlight(d);\n })\n .on(Events.Click, (event: MouseEvent, d: DiagramSection) => {\n if (!event.ctrlKey) {\n this.clearUserSelection();\n }\n this.toggleUserSelection(d);\n })\n .call(\n d3\n .drag<SVGGElement, DiagramSection, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n const node = d.node as DiagramNode;\n d3.select('body').style('cursor', 'grabbing');\n this.draggingFrom = [event.x, event.y];\n this.currentAction = new MoveNodeAction(\n this,\n node.id,\n node.coords,\n [0, 0]\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n const node = d.node as DiagramNode;\n const newNodeCoords: Point = [\n event.x - node.width / 2,\n event.y - node.height / 2\n ];\n node.move(newNodeCoords);\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n const node = d.node as DiagramNode;\n // prevent drag behavior if mouse hasn't moved\n if (\n (this.draggingFrom[0] !== event.x ||\n this.draggingFrom[1] !== event.y) &&\n this.currentAction instanceof MoveNodeAction\n ) {\n let newNodeCoords: Point = [\n event.x - node.width / 2,\n event.y - node.height / 2\n ];\n if (this.snapToGrid) {\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\n }\n d.node?.move(newNodeCoords);\n (this.currentAction as MoveNodeAction).to = newNodeCoords;\n this.actionQueue.add(this.currentAction);\n } else {\n this.currentAction = undefined;\n }\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection.filter('.shaped-look').append('path');\n enterSelection\n .filter('.image-look')\n .append('image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'top-right-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'center-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'right-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-left-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .filter('.stretchable-image-look')\n .append('image')\n .attr('class', 'bottom-right-image')\n .attr('preserveAspectRatio', 'none');\n\n enterSelection\n .filter('.resizable-x')\n .append('line')\n .attr('class', 'left-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n }\n })\n .on(Events.MouseOut, (event, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n this.currentAction = new StretchSectionAction(\n this,\n d.id,\n Side.Left,\n d.width,\n d.width\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.node.stretchSections(\n Side.Left,\n d.coords[0] - pointerCoords[0],\n d.coords\n );\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.node.stretchSections(\n Side.Left,\n d.coords[0] - pointerCoords[0],\n d.coords\n );\n (this.currentAction as StretchSectionAction).to = d.width;\n this.actionQueue.add(this.currentAction as StretchSectionAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-y')\n .append('line')\n .attr('class', 'top-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n this.currentAction = new StretchSectionAction(\n this,\n d.id,\n Side.Top,\n d.height,\n d.height\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.node.stretchSections(\n Side.Top,\n d.coords[1] - pointerCoords[1],\n d.coords\n );\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.node.stretchSections(\n Side.Top,\n d.coords[1] - pointerCoords[1],\n d.coords\n );\n (this.currentAction as StretchSectionAction).to = d.height;\n this.actionQueue.add(this.currentAction as StretchSectionAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-x')\n .append('line')\n .attr('class', 'right-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n d3.select('body').style('cursor', 'ew-resize');\n this.currentAction = new StretchSectionAction(\n this,\n d.id,\n Side.Right,\n d.width,\n d.width\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.node.stretchSections(\n Side.Right,\n pointerCoords[0] - (d.coords[0] + d.width),\n d.coords\n );\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableX\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.node.stretchSections(\n Side.Right,\n pointerCoords[0] - (d.coords[0] + d.width),\n d.coords\n );\n (this.currentAction as StretchSectionAction).to = d.width;\n this.actionQueue.add(this.currentAction as StretchSectionAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n enterSelection\n .filter('.resizable-y')\n .append('line')\n .attr('class', 'bottom-resizer')\n .attr('stroke', 'transparent')\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n }\n })\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'auto');\n }\n })\n .call(\n d3\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n d3.select('body').style('cursor', 'ns-resize');\n this.currentAction = new StretchSectionAction(\n this,\n d.id,\n Side.Bottom,\n d.height,\n d.height\n );\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n const pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n d.node.stretchSections(\n Side.Bottom,\n pointerCoords[1] - (d.coords[1] + d.height),\n d.coords\n );\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\n if (\n this.userActions[DiagramActions.StretchSectionAction] !== false &&\n d.node?.type?.resizableY\n ) {\n let pointerCoords =\n this.getPointerLocationRelativeToCanvas(event);\n if (this.snapToGrid) {\n pointerCoords = this.getClosestGridPoint(pointerCoords);\n }\n d.node.stretchSections(\n Side.Bottom,\n pointerCoords[1] - (d.coords[1] + d.height),\n d.coords\n );\n (this.currentAction as StretchSectionAction).to = d.height;\n this.actionQueue.add(this.currentAction as StretchSectionAction);\n this.currentAction = undefined;\n d3.select('body').style('cursor', 'auto');\n }\n })\n );\n\n mergeSelection.attr(\n 'transform',\n (d) => `translate(${d.coords[0]},${d.coords[1]})`\n );\n\n mergeSelection\n .filter('.shaped-look')\n .select('path')\n .attr('d', (d) =>\n generalClosedPath(\n (d.node?.type?.sections?.look as NodeShapedLook).shape,\n 0,\n 0,\n d.width,\n d.height\n )\n )\n .attr('fill', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeShapedLook).selectedColor\n : (d.node?.type?.sections?.look as NodeShapedLook).color\n )\n .attr('stroke', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeShapedLook).selectedBorderColor\n : (d.node?.type?.sections?.look as NodeShapedLook).borderColor\n )\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\n mergeSelection\n .filter('.image-look')\n .select('image')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', (d) => d.width)\n .attr('height', (d) => d.height)\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeImageLook)\n .selectedBackgroundImage\n : (d.node?.type?.sections?.look as NodeImageLook).backgroundImage\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-left-image')\n .attr('x', 0)\n .attr('y', 0)\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageTopLeft\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageTopLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-image')\n .attr(\n 'x',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr('y', 0)\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .rightMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageTop\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageTop\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.top-right-image')\n .attr(\n 'x',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr('y', 0)\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageTopRight\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageTopRight\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.left-image')\n .attr('x', 0)\n .attr(\n 'y',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageLeft\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.center-image')\n .attr(\n 'x',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'y',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .rightMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageCenter\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageCenter\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.right-image')\n .attr(\n 'x',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'y',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).topMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageRight\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageRight\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-left-image')\n .attr('x', 0)\n .attr(\n 'y',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottomLeft\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageBottomLeft\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-image')\n .attr(\n 'x',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'y',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr(\n 'width',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .rightMargin -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).leftMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottom\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageBottom\n );\n mergeSelection\n .filter('.stretchable-image-look')\n .select('image.bottom-right-image')\n .attr(\n 'x',\n (d) =>\n d.width -\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'y',\n (d) =>\n d.height -\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr(\n 'width',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook).rightMargin\n )\n .attr(\n 'height',\n (d) =>\n (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .bottomMargin\n )\n .attr('href', (d) =>\n d.selected\n ? (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .selectedBackgroundImageBottomRight\n : (d.node?.type?.sections?.look as NodeStretchableImageLook)\n .backgroundImageBottomRight\n );\n\n mergeSelection\n .filter('.resizable-x')\n .select('line.left-resizer')\n .attr('x1', RESIZER_THICKNESS / 2)\n .attr('x2', RESIZER_THICKNESS / 2)\n .attr('y1', 0)\n .attr('y2', (d) => d.height);\n mergeSelection\n .filter('.resizable-y')\n .select('line.top-resizer')\n .attr('x1', 0)\n .attr('x2', (d) => d.width)\n .attr('y1', RESIZER_THICKNESS / 2)\n .attr('y2', RESIZER_THICKNESS / 2);\n mergeSelection\n .filter('.resizable-x')\n .select('line.right-resizer')\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\n .attr('y1', 0)\n .attr('y2', (d) => d.height);\n mergeSelection\n .filter('.resizable-y')\n .select('line.bottom-resizer')\n .attr('x1', 0)\n .attr('x2', (d) => d.width)\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\n }\n\n updatePortsInView(...ids: string[]): void {\n let updateSelection: d3.Selection<\n SVGGElement,\n DiagramPort,\n BaseType,\n unknown\n > = this.selectCanvas()\n .selectAll<SVGGElement, DiagramPort>('g.diagram-port')\n .data(\n this.model.ports.filter(this.priorityThreshold),\n (d: DiagramPort) => d.id\n );\n const exitSelection = updateSelection.exit();\n const enterSelection = updateSelection\n .enter()\n .append('g')\n .attr('id', (d) => d.id)\n .attr('class', 'diagram-port');\n\n if (ids.length > 0) {\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\n }\n\n const numberOfChanges =\n enterSelection.size() + updateSelection.size() + exitSelection.size();\n if (numberOfChanges === 0) {\n return;\n } else {\n this.diagramChanges$.next(numberOfChanges);\n }\n\n const mergeSelection = enterSelection.merge(updateSelection);\n\n exitSelection.remove();\n\n enterSelection\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramPort) => {\n this.highlight(d);\n })\n .on(Events.Click, (event: MouseEvent, d: DiagramPort) => {\n if (!event.ctrlKey) {\n this.clearUserSelection();\n }\n this.toggleUserSelection(d);\n })\n .call(\n d3\n .drag<SVGGElement, DiagramPort, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramPort) => {\n if (\n this.userActions[DiagramActions.AddConnectionAction] !== false\n ) {\n d3.select('body').style('cursor', 'grabbing');\n this.startConnection(d);\n }\n })\n .on(DragEvents.Drag, (event: DragEvent) => {\n if (\n this.userActions[DiagramActions.AddConnectionAction] !== false\n ) {\n if (this.unfinishedConnection !== undefined) {\n this.unfinishedConnection.endCoords = [event.x, event.y];\n this.updateConnectionsInView();\n }\n }\n })\n .on(DragEvents.End, (event: DragEvent) => {\n if (\n this.userActions[DiagramActions.AddConnectionAction] !== false\n ) {\n d3.select('body').style('cursor', 'auto');\n if (this.mainUserHighlight instanceof DiagramPort) {\n this.finishConnection(this.mainUserHighlight);\n } else if (\n this.mainUserHighlight instanceof DiagramNode ||\n this.mainUserHighlight instanceof DiagramSection ||\n this.mainUserHighlight instanceof DiagramField\n ) {\n let targetRootElement: DiagramNode | DiagramSection;\n if (\n this.mainUserHighlight instanceof DiagramNode ||\n this.mainUserHighlight instanceof DiagramSection\n ) {\n targetRootElement = this.mainUserHighlight;\n } else if (\n this.mainUserHighlight.rootElement instanceof DiagramNode ||\n this.mainUserHighlight.rootElement instanceof DiagramSection\n ) {\n targetRootElement = this.mainUserHighlight.rootElement;\n } else {\n this.dropConnection();\n return;\n }\n const closestPort = targetRootElement.getClosestPortToPoint([\n event.x,\n event.y\n ]);\n if (closestPort !== undefined) {\n this.finishConnection(closestPort);\n } else {\n this.dropConnection();\n }\n } else {\n this.dropConnection();\n }\n }\n })\n );\n enterSelection.append('circle');\n\n mergeSelection.attr(\n 'transform',\n (d) => `translate(${d.coords[0]},${d.coords[1]})`\n );\n mergeSelection\n .select('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', DIAGRAM_PORT_DEFAULTS.radius)\n .attr('fill', (d) =>\n d.selected\n ? DIAGRAM_PORT_DEFAULTS.selectedColor\n : DIAGRAM_PORT_DEFAULTS.highlightedColor\n )\n .attr('opacity', (d) => (d.highlighted || d.selected ? 0.5 : 0));\n }\n\n updateConnectionsInView(...ids: string[]): void {\n const connectionList = [\n ...this.model.connections.filter(undefined, this.priorityThreshold)\n ];\n if (this.unfinishedConnection) {\n connectionList.push(this.unfinishedConnection);\n }\n\n let updateSelection: d3.Selection<\n SVGGElement,\n DiagramConnection,\n BaseType,\n unknown\n > = this.selectCanvas()\n .selectAll<SVGGElement, DiagramConnection>('g.diagram-connection')\n .data(connectionList, (d: DiagramConnection) => d.id);\n const exitSelection = updateSelection.exit();\n const enterSelection = updateSelection\n .enter()\n .append('g')\n .attr('id', (d) => d.id)\n .attr('class', 'diagram-connection');\n\n if (ids.length > 0) {\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\n }\n\n const numberOfChanges =\n enterSelection.size() + updateSelection.size() + exitSelection.size();\n if (numberOfChanges === 0) {\n return;\n } else {\n this.diagramChanges$.next(numberOfChanges);\n }\n\n const mergeSelection = enterSelection.merge(updateSelection);\n\n exitSelection.remove();\n\n enterSelection\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramConnection) => {\n if (d.end !== undefined) {\n this.highlight(d);\n }\n })\n .on(Events.Click, (event: MouseEvent, d: DiagramConnection) => {\n if (!event.ctrlKey) {\n this.clearUserSelection();\n }\n this.toggleUserSelection(d);\n });\n\n enterSelection.append('path').attr('class', 'diagram-connection-path');\n enterSelection.append('path').attr('class', 'diagram-connection-path-box');\n enterSelection\n .append('marker')\n .attr('id', (d) => `${d.id}-start-marker`)\n .attr('class', 'diagram-connection-start-marker')\n .append('image')\n .attr('preserveAspectRatio', 'none');\n enterSelection\n .append('marker')\n .attr('id', (d) => `${d.id}-end-marker`)\n .attr('class', 'diagram-connection-end-marker')\n .append('image')\n .attr('preserveAspectRatio', 'none');\n enterSelection.append('g').attr('class', 'diagram-connection-start-label');\n enterSelection.select('g.diagram-connection-start-label').append('path');\n enterSelection\n .select('g.diagram-connection-start-label')\n .append('text')\n .style('user-select', 'none');\n enterSelection.append('g').attr('class', 'diagram-connection-middle-label');\n enterSelection.select('g.diagram-connection-middle-label').append('path');\n enterSelection\n .select('g.diagram-connection-middle-label')\n .append('text')\n .style('user-select', 'none');\n enterSelection.append('g').attr('class', 'diagram-connection-end-label');\n enterSelection.select('g.diagram-connection-end-label').append('path');\n enterSelection\n .select('g.diagram-connection-end-label')\n .append('text')\n .style('user-select', 'none');\n\n mergeSelection\n .select('path.diagram-connection-path')\n .attr('d', (d) => getConnectionPath(d))\n .attr('marker-start', (d) => `url(#${d.id}-start-marker)`)\n .attr('marker-end', (d) => `url(#${d.id}-end-marker)`)\n .attr('stroke', (d) => (d.selected ? d.type.selectedColor : d.type.color))\n .attr(\n 'stroke-width',\n (d) => `${d.highlighted ? d.type.width + 1 : d.type.width}px`\n )\n .attr('stroke-dasharray', (d) =>\n lineStyleDasharray(d.type.style, d.type.width)\n )\n .attr('fill', 'none');\n mergeSelection\n .select('path.diagram-connection-path-box')\n .attr('d', (d) => getConnectionPath(d))\n .attr('stroke', 'transparent')\n // allow generating pointer events even when it is transparent\n .attr('pointer-events', 'stroke')\n .attr(\n 'stroke-width',\n (d) => `${d.type.width + CONNECTION_PATH_BOX_THICKNESS}px`\n )\n .attr('stroke-dasharray', (d) =>\n lineStyleDasharray(d.type.style, d.type.width)\n )\n .attr('fill', 'none');\n\n mergeSelection.data().forEach((connection) => {\n this.updateConnectionLabelsInView(connection);\n this.updateConnectionMarkersInView(connection);\n });\n }\n\n updateFieldsInView(...ids: string[]): void {\n let updateSelection: d3.Selection<\n SVGForeignObjectElement,\n DiagramField,\n BaseType,\n unknown\n > = this.selectCanvas()\n .selectAll<SVGForeignObjectElement, DiagramField>(\n 'foreignObject.diagram-field'\n )\n .data(\n this.model.fields.filter(this.priorityThreshold),\n (d: DiagramField) => d.id\n );\n const exitSelection = updateSelection.exit();\n const enterSelection = updateSelection\n .enter()\n .append('foreignObject')\n .attr('id', (d) => d.id)\n .attr('class', 'diagram-field');\n\n if (ids.length > 0) {\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\n }\n\n const numberOfChanges =\n enterSelection.size() + updateSelection.size() + exitSelection.size();\n if (numberOfChanges === 0) {\n return;\n } else {\n this.diagramChanges$.next(numberOfChanges);\n }\n\n const mergeSelection = enterSelection.merge(updateSelection);\n\n exitSelection.remove();\n\n enterSelection\n .style('box-sizing', 'border-box')\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramField) => {\n this.highlight(d);\n })\n .on(Events.Click, (event: MouseEvent, d: DiagramField) => {\n if (d.rootElement) {\n if (!event.ctrlKey) {\n this.clearUserSelection();\n }\n this.toggleUserSelection(d.rootElement);\n }\n })\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramField) => {\n if (\n this.userActions[DiagramActions.EditFieldAction] !== false &&\n d.editable\n ) {\n this.currentAction = new EditFieldAction(this, d.id, d.text, '');\n this.createInputField(\n d.text,\n d.coords,\n d.width,\n d.height,\n d.fontSize,\n d.fontFamily,\n (text) => {\n d.text = text;\n },\n (text) => {\n d.text = text;\n if (this.currentAction instanceof EditFieldAction) {\n this.currentAction.to = text;\n this.actionQueue.add(this.currentAction);\n this.currentAction = undefined;\n }\n this.updateFieldsInView(d.id);\n }\n );\n }\n })\n .call(\n d3\n .drag<SVGForeignObjectElement, DiagramField, HTMLElement>()\n .on(DragEvents.Start, (event: DragEvent, d: DiagramField) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n if (\n d.rootElement instanceof DiagramNode ||\n d.rootElement instanceof DiagramSection\n ) {\n const node =\n d.rootElement instanceof DiagramNode\n ? d.rootElement\n : (d.rootElement.node as DiagramNode);\n d3.select('body').style('cursor', 'grabbing');\n this.draggingFrom = [event.x, event.y];\n this.currentAction = new MoveNodeAction(\n this,\n node.id,\n node.coords,\n [0, 0]\n );\n }\n }\n })\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramField) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n if (\n d.rootElement instanceof DiagramNode ||\n d.rootElement instanceof DiagramSection\n ) {\n const node =\n d.rootElement instanceof DiagramNode\n ? d.rootElement\n : (d.rootElement.node as DiagramNode);\n const newNodeCoords: Point = [\n event.x - node.width / 2,\n event.y - node.height / 2\n ];\n node.move(newNodeCoords);\n }\n }\n })\n .on(DragEvents.End, (event: DragEvent, d: DiagramField) => {\n if (this.userActions[DiagramActions.MoveNodeAction] !== false) {\n if (\n d.rootElement instanceof DiagramNode ||\n d.rootElement instanceof DiagramSection\n ) {\n const node =\n d.rootElement instanceof DiagramNode\n ? d.rootElement\n : (d.rootElement.node as DiagramNode);\n // prevent drag behavior if mouse hasn't moved\n if (\n (this.draggingFrom[0] !== event.x ||\n this.draggingFrom[1] !== event.y) &&\n this.currentAction instanceof MoveNodeAction\n ) {\n let newNodeCoords: Point = [\n event.x - node.width / 2,\n event.y - node.height / 2\n ];\n if (this.snapToGrid) {\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\n }\n node.move(newNodeCoords);\n (this.currentAction as MoveNodeAction).to = newNodeCoords;\n this.actionQueue.add(this.currentAction);\n } else {\n this.currentAction = undefined;\n }\n d3.select('body').style('cursor', 'auto');\n }\n }\n })\n )\n .append('xhtml:div')\n .style('width', '100%')\n .style('height', '100%')\n .style('display', 'flex')\n .append('xhtml:p')\n .style('max-width', '100%')\n .style('max-height', '100%')\n .style('box-sizing', 'border-box')\n .style('outline', 0)\n .style('margin', 0)\n .style('border', 0)\n .style('padding', 0)\n .style('overflow', 'hidden')\n .style('text-overflow', 'ellipsis')\n .style('user-select', 'none')\n .style('font-kerning', 'none');\n\n mergeSelection\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', (d) => `${d.width}px`)\n .attr('height', (d) => `${d.height}px`)\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\n .select('div')\n .style('justify-content', (d) =>\n d.horizontalAlign === HorizontalAlign.Center\n ? 'center'\n : d.horizontalAlign === HorizontalAlign.Right\n ? 'flex-end'\n : 'flex-start'\n )\n .style('align-items', (d) =>\n d.verticalAlign === VerticalAlign.Center\n ? 'center'\n : d.verticalAlign === VerticalAlign.Bottom\n ? 'bottom'\n : 'top'\n )\n .select('p')\n .style('font-size', (d) => `${d.fontSize}px`)\n .style(\n 'font-family',\n (d) => d.fontFamily || \"'Wonder Unit Sans', sans-serif\"\n )\n .style('font-weight', (d) => (d.highlighted ? 600 : 400))\n .style('color', (d) =>\n d.selected ? d.selectedColor || '#000000' : d.color || '#000000'\n )\n .html((d) => d.text.replace(/\\n/g, '<br/>'));\n }\n\n updateConnectionLabelsInView(connection: DiagramConnection) {\n const connectionSelection: d3.Selection<\n SVGGElement,\n unknown,\n null,\n unknown\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\n const pathSelection: d3.Selection<SVGPathElement, unknown, null, unknown> =\n connectionSelection.select('path');\n const pathNode = pathSelection.node();\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...connection.type.label\n };\n if (pathNode) {\n const pathLength = pathNode.getTotalLength();\n\n // bind start labels\n connectionSelection\n .select('g.diagram-connection-start-label text')\n .attr('x', 0)\n .attr('y', labelConfiguration.fontSize / 3)\n .attr('text-anchor', 'middle')\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\n .attr('font-size', labelConfiguration.fontSize)\n .attr(\n 'fill',\n connection.selected\n ? labelConfiguration.selectedColor\n : labelConfiguration.color\n )\n .style('font-kerning', 'none')\n .text(connection.startLabel);\n const startLabelBoundingRect = connectionSelection\n .select<SVGTextElement>('g.diagram-connection-start-label text')\n .node()\n ?.getBoundingClientRect();\n if (startLabelBoundingRect) {\n // don't create space for the label if the label is empty\n const boundingWidth = !connection.startLabel\n ? 0\n : startLabelBoundingRect.width / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const boundingHeight = !connection.startLabel\n ? 0\n : startLabelBoundingRect.height / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const pathStartLabelPoint = pathNode.getPointAtLength(\n labelConfiguration.margin +\n Math.max(boundingWidth / 2, boundingHeight / 2)\n );\n connectionSelection\n .select('g.diagram-connection-start-label path')\n .attr(\n 'd',\n pillPath(\n -boundingWidth / 2,\n -boundingHeight / 2,\n boundingWidth,\n boundingHeight\n )\n )\n .attr(\n 'fill',\n connection.selected\n ? connection.type.selectedColor\n : connection.type.color\n )\n .attr('stroke', 'none');\n connectionSelection\n .select('g.diagram-connection-start-label')\n .attr(\n 'transform',\n `translate(${pathStartLabelPoint.x},${pathStartLabelPoint.y})`\n );\n }\n\n // bind middle labels\n connectionSelection\n .select('g.diagram-connection-middle-label text')\n .attr('x', 0)\n .attr('y', labelConfiguration.fontSize / 3)\n .attr('text-anchor', 'middle')\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\n .attr('font-size', labelConfiguration.fontSize)\n .attr(\n 'fill',\n connection.selected\n ? labelConfiguration.selectedColor\n : labelConfiguration.color\n )\n .style('font-kerning', 'none')\n .text(connection.middleLabel);\n const middleLabelBoundingRect = connectionSelection\n .select<SVGTextElement>('g.diagram-connection-middle-label text')\n .node()\n ?.getBoundingClientRect();\n if (middleLabelBoundingRect) {\n // don't create space for the label if the label is empty\n const boundingWidth = !connection.middleLabel\n ? 0\n : middleLabelBoundingRect.width / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const boundingHeight = !connection.middleLabel\n ? 0\n : middleLabelBoundingRect.height / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const pathMiddleLabelPoint = pathNode.getPointAtLength(pathLength / 2);\n connectionSelection\n .select('g.diagram-connection-middle-label path')\n .attr(\n 'd',\n pillPath(\n -boundingWidth / 2,\n -boundingHeight / 2,\n boundingWidth,\n boundingHeight\n )\n )\n .attr(\n 'fill',\n connection.selected\n ? connection.type.selectedColor\n : connection.type.color\n )\n .attr('stroke', 'none');\n connectionSelection\n .select('g.diagram-connection-middle-label')\n .attr(\n 'transform',\n `translate(${pathMiddleLabelPoint.x},${pathMiddleLabelPoint.y})`\n );\n }\n\n // bind end labels\n connectionSelection\n .select('g.diagram-connection-end-label text')\n .attr('x', 0)\n .attr('y', labelConfiguration.fontSize / 3)\n .attr('text-anchor', 'middle')\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\n .attr('font-size', labelConfiguration.fontSize)\n .attr(\n 'fill',\n connection.selected\n ? labelConfiguration.selectedColor\n : labelConfiguration.color\n )\n .style('font-kerning', 'none')\n .text(connection.endLabel);\n const endLabelBoundingRect = connectionSelection\n .select<SVGTextElement>('g.diagram-connection-end-label text')\n .node()\n ?.getBoundingClientRect();\n if (endLabelBoundingRect) {\n // don't create space for the label if the label is empty\n const boundingWidth = !connection.endLabel\n ? 0\n : endLabelBoundingRect.width / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const boundingHeight = !connection.endLabel\n ? 0\n : endLabelBoundingRect.height / this.zoomTransform.k +\n labelConfiguration.padding * 2;\n const pathEndLabelPoint = pathNode.getPointAtLength(\n pathLength -\n labelConfiguration.margin -\n Math.max(boundingWidth / 2, boundingHeight / 2)\n );\n connectionSelection\n .select('g.diagram-connection-end-label path')\n .attr(\n 'd',\n pillPath(\n -boundingWidth / 2,\n -boundingHeight / 2,\n boundingWidth,\n boundingHeight\n )\n )\n .attr(\n 'fill',\n connection.selected\n ? connection.type.selectedColor\n : connection.type.color\n )\n .attr('stroke', 'none');\n connectionSelection\n .select('g.diagram-connection-end-label')\n .attr(\n 'transform',\n `translate(${pathEndLabelPoint.x},${pathEndLabelPoint.y})`\n );\n }\n }\n }\n\n updateConnectionMarkersInView(connection: DiagramConnection) {\n const connectionSelection: d3.Selection<\n SVGGElement,\n unknown,\n null,\n unknown\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\n const startMarkerSelection: d3.Selection<\n SVGMarkerElement,\n unknown,\n null,\n unknown\n > = connectionSelection.select('marker.diagram-connection-start-marker');\n const endMarkerSelection: d3.Selection<\n SVGMarkerElement,\n unknown,\n null,\n unknown\n > = connectionSelection.select('marker.diagram-connection-end-marker');\n\n if (connection.startMarkerLook !== null) {\n startMarkerSelection\n .attr('orient', 'auto-start-reverse')\n .attr('markerWidth', connection.startMarkerLook.markerWidth)\n .attr('markerHeight', connection.startMarkerLook.markerHeight)\n .attr('refX', connection.startMarkerLook.markerRefX)\n .attr('refY', connection.startMarkerLook.markerRefY)\n .select('image')\n .attr(\n 'href',\n connection.selected\n ? connection.startMarkerLook.selectedImage\n : connection.startMarkerLook.image\n )\n .attr('width', connection.startMarkerLook.markerWidth)\n .attr('height', connection.startMarkerLook.markerHeight);\n } else {\n startMarkerSelection\n .attr('orient', 'auto-start-reverse')\n .attr('markerWidth', 0)\n .attr('markerHeight', 0);\n }\n\n if (connection.endMarkerLook !== null) {\n endMarkerSelection\n .attr('orient', 'auto-start-reverse')\n .attr('markerWidth', connection.endMarkerLook.markerWidth)\n .attr('markerHeight', connection.endMarkerLook.markerHeight)\n .attr('refX', connection.endMarkerLook.markerRefX)\n .attr('refY', connection.endMarkerLook.markerRefY)\n .select('image')\n .attr(\n 'href',\n connection.selected\n ? connection.endMarkerLook.selectedImage\n : connection.endMarkerLook.image\n )\n .attr('width', connection.endMarkerLook.markerWidth)\n .attr('height', connection.endMarkerLook.markerHeight);\n } else {\n endMarkerSelection\n .attr('orient', 'auto-start-reverse')\n .attr('markerWidth', 0)\n .attr('markerHeight', 0);\n }\n }\n\n selectRoot(): d3.Selection<d3.BaseType, unknown, null, unknown> {\n return d3.select(this.diagramRoot).select('svg');\n }\n\n selectCanvas(): d3.Selection<SVGGElement, unknown, null, unknown> {\n return this.selectRoot().select(`.canvas`);\n }\n\n selectCanvasView(): d3.Selection<SVGGElement, unknown, null, unknown> {\n return this.selectRoot().select(`.canvas-view`);\n }\n\n // User actions\n\n startConnection(port: DiagramPort) {\n if (\n this.connectionType &&\n (this.connectionType.canStartFromType(port.getNode()?.type?.id || '') ||\n this.connectionType.canFinishOnType(port.getNode()?.type?.id || ''))\n ) {\n this.unfinishedConnection = new DiagramConnection(\n this.model,\n this.connectionType,\n port,\n undefined,\n 'diagram-connection-unfinished'\n );\n } else {\n if (this.guessConnectionType) {\n let differentConnectionType = this.model.connections.types\n .all()\n .find((t) => t.canStartFromType(port.getNode()?.type?.id || ''));\n if (differentConnectionType === undefined) {\n differentConnectionType = this.model.connections.types\n .all()\n .find((t) => t.canFinishOnType(port.getNode()?.type?.id || ''));\n }\n if (differentConnectionType !== undefined) {\n this.unfinishedConnection = new DiagramConnection(\n this.model,\n differentConnectionType,\n port,\n undefined,\n 'diagram-connection-unfinished'\n );\n } else {\n // error: connection source of wrong type and no allowed type can be found\n }\n } else {\n // error: connection source of wrong type and can't guess for a different type\n }\n }\n }\n\n finishConnection(port: DiagramPort) {\n if (this.unfinishedConnection !== undefined) {\n if (this.unfinishedConnection.start !== port) {\n if (\n this.connectionType &&\n this.connectionType.canStartFromType(\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\n ) &&\n this.connectionType.canFinishOnType(port.getNode()?.type?.id || '')\n ) {\n const addConnectionAction = new AddConnectionAction(\n this,\n this.connectionType,\n this.unfinishedConnection.start?.id as string,\n port.id\n );\n // clean up the previous unfinished connection\n this.dropConnection();\n addConnectionAction.redo();\n this.actionQueue.add(addConnectionAction);\n } else if (\n this.connectionType &&\n this.connectionType.canFinishOnType(\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\n ) &&\n this.connectionType.canStartFromType(port.getNode()?.type?.id || '')\n ) {\n const addConnectionAction = new AddConnectionAction(\n this,\n this.connectionType,\n port.id,\n this.unfinishedConnection.start?.id as string\n );\n // clean up the previous unfinished connection\n this.dropConnection();\n addConnectionAction.redo();\n this.actionQueue.add(addConnectionAction);\n } else {\n if (this.guessConnectionType) {\n let differentConnectionType = this.model.connections.types\n .all()\n .find(\n (t) =>\n t.canStartFromType(\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\n ) && t.canFinishOnType(port.getNode()?.type?.id || '')\n );\n let invertConnection = false;\n if (differentConnectionType === undefined) {\n differentConnectionType = this.model.connections.types\n .all()\n .find(\n (t) =>\n t.canFinishOnType(\n this.unfinishedConnection?.start?.getNode()?.type?.id ||\n ''\n ) && t.canStartFromType(port.getNode()?.type?.id || '')\n );\n invertConnection = true;\n }\n if (differentConnectionType !== undefined) {\n const addConnectionAction = new AddConnectionAction(\n this,\n differentConnectionType,\n invertConnection\n ? port.id\n : (this.unfinishedConnection.start?.id as string),\n invertConnection\n ? (this.unfinishedConnection.start?.id as string)\n : port.id\n );\n // clean up the previous unfinished connection\n this.dropConnection();\n addConnectionAction.redo();\n this.actionQueue.add(addConnectionAction);\n } else {\n // error: connection target of wrong type and no allowed type can be found\n this.dropConnection();\n }\n } else {\n // error: connection target of wrong type and can't guess for a different type\n this.dropConnection();\n }\n }\n } else {\n // error: start port of a connection can't also be the end port\n this.dropConnection();\n }\n }\n }\n\n dropConnection() {\n this.unfinishedConnection?.setStart(undefined);\n this.unfinishedConnection?.setEnd(undefined);\n this.unfinishedConnection?.select()?.remove();\n this.unfinishedConnection = undefined;\n }\n\n highlight(element: DiagramElement): void {\n this.unhighlight();\n element.highlighted = true;\n this.mainUserHighlight = element;\n this.userHighlight.push(element);\n if (element instanceof DiagramNode) {\n for (const port of element.ports) {\n port.highlighted = true;\n this.userHighlight.push(port);\n this.updatePortsInView(port.id);\n }\n if (element.label) {\n element.label.highlighted = true;\n this.userHighlight.push(element.label);\n this.updateFieldsInView(element.label.id);\n }\n this.updateNodesInView(element.id);\n } else if (element instanceof DiagramSection) {\n for (const port of element.ports) {\n port.highlighted = true;\n this.userHighlight.push(port);\n this.updatePortsInView(port.id);\n }\n if (element.label) {\n element.label.highlighted = true;\n this.userHighlight.push(element.label);\n this.updateFieldsInView(element.label.id);\n }\n this.updateSectionsInView(element.id);\n } else if (element instanceof DiagramPort) {\n if (element.label) {\n element.label.highlighted = true;\n this.userHighlight.push(element.label);\n this.updateFieldsInView(element.label.id);\n }\n this.updatePortsInView(element.id);\n } else if (element instanceof DiagramConnection) {\n this.updateConnectionsInView(element.id);\n } else if (element instanceof DiagramField && element.rootElement) {\n this.highlight(element.rootElement);\n }\n }\n\n unhighlight(): void {\n for (const element of this.userHighlight) {\n element.highlighted = false;\n element.updateInView();\n }\n this.mainUserHighlight = undefined;\n this.userHighlight = [];\n }\n\n setPropertyEditorSelection(\n selection?: DiagramElement & { valueSet: ValueSet }\n ): void {\n const selectedValueSet =\n selection instanceof DiagramNode || selection instanceof DiagramConnection\n ? selection.valueSet\n : this.model.valueSet;\n const previouslySelectedValueSet =\n this.propertyEditorSelection instanceof DiagramNode ||\n this.propertyEditorSelection instanceof DiagramConnection\n ? this.propertyEditorSelection.valueSet\n : this.model.valueSet;\n // check if there have been changes in the previously selected ValueSet,\n // and create an UpdateValuesAction if there have\n if (this.propertyEditorValues !== undefined) {\n if (\n !equals(\n this.propertyEditorValues,\n previouslySelectedValueSet.getValues()\n )\n ) {\n const currentAction = new UpdateValuesAction(\n this.model,\n selection?.id,\n this.propertyEditorValues,\n structuredClone(selectedValueSet.getValues())\n );\n this.actionQueue.add(currentAction);\n this.propertyEditorValues = undefined;\n }\n }\n this.propertyEditorSelection = selection;\n this.propertyEditorValues = structuredClone(selectedValueSet.getValues());\n const propertyEditor = this.parentComponent.propertyEditor;\n if (propertyEditor) {\n if (\n selection instanceof DiagramNode ||\n selection instanceof DiagramConnection\n ) {\n if (selection instanceof DiagramNode) {\n if (selection.name) {\n propertyEditor.title = `${selection.type.name}: ${selection.name}`;\n } else {\n propertyEditor.title = selection.type.name;\n }\n } else if (selection instanceof DiagramConnection) {\n propertyEditor.title = selection.type.name;\n }\n // force the update of the valueSet\n propertyEditor.valueSet = undefined;\n propertyEditor.valueSet = selectedValueSet;\n } else {\n propertyEditor.title = DIAGRAM_PROPERTIES_TEXT;\n // force the update of the valueSet\n propertyEditor.valueSet = undefined;\n propertyEditor.valueSet = selectedValueSet;\n }\n }\n }\n\n isInUserSelection(selection: DiagramElement): boolean {\n return this.userSelection.indexOf(selection) >= 0;\n }\n\n addToUserSelection(selection: DiagramElement): void {\n if (\n this.propertyEditorSelection === undefined &&\n (selection instanceof DiagramNode ||\n selection instanceof DiagramConnection)\n ) {\n this.setPropertyEditorSelection(selection);\n } else if (\n this.propertyEditorSelection === undefined &&\n selection instanceof DiagramSection\n ) {\n this.setPropertyEditorSelection(selection.node);\n } else {\n this.setPropertyEditorSelection(undefined);\n }\n this.userSelection.push(selection);\n selection.selected = true;\n selection.updateInView();\n }\n\n removeFromUserSelection(selection: DiagramElement): void {\n if (this.propertyEditorSelection === selection) {\n this.setPropertyEditorSelection(undefined);\n }\n this.userSelection.splice(this.userSelection.indexOf(selection), 1);\n selection.selected = false;\n selection.updateInView();\n }\n\n toggleUserSelection(selection: DiagramElement): void {\n if (this.isInUserSelection(selection)) {\n this.removeFromUserSelection(selection);\n } else {\n this.addToUserSelection(selection);\n }\n }\n\n clearUserSelection(): void {\n this.setPropertyEditorSelection(undefined);\n for (const userSelectionElement of this.userSelection) {\n userSelectionElement.selected = false;\n userSelectionElement.updateInView();\n }\n this.userSelection = [];\n }\n\n cancelAllUserActions(): void {\n this.dropConnection();\n this.removeInputField();\n if (this.parentComponent.propertyEditor) {\n this.clearUserSelection();\n }\n }\n\n private createInputField(\n text: string,\n coords: Point,\n width: number,\n height: number,\n fontSize: number,\n fontFamily: string | null,\n changeCallback: (text: string) => void,\n finishCallback: (text: string) => void\n ): void {\n // if we have a text input open, close it before creating a new one\n this.removeInputField();\n this.inputFieldContainer = this.selectCanvas()\n .append('foreignObject')\n .attr('x', `${coords[0]}px`)\n .attr('y', `${coords[1]}px`)\n .attr('width', `${width}px`)\n .attr('height', `${height}px`)\n .style('box-sizing', 'border-box')\n .style('border', '1px solid');\n const inputField = this.inputFieldContainer.append('xhtml:textarea');\n inputField\n .text(text)\n .style('box-sizing', 'border-box')\n .style('width', `${width}px`)\n .style('height', `${height}px`)\n .style('font-size', `${fontSize}px`)\n .style('font-family', fontFamily || 'default')\n .style('resize', 'none')\n .style('outline', 0)\n .style('border', 0)\n .style('margin', 0)\n .style('padding', 0)\n .on(Events.KeyUp, (event: KeyboardEvent) => {\n event.stopPropagation();\n })\n .on(Events.Input, () => {\n const value = inputField.property('value');\n // inputField.attr('rows', value.length + 1);\n // inputField.attr('cols', (value.match(/\\n/g)?.length || 0) + 1);\n const newHeight = `${inputField.property('scrollHeight')}px`;\n this.inputFieldContainer?.attr('height', newHeight);\n inputField.style('height', newHeight);\n changeCallback(value);\n })\n .on(Events.Blur, () => {\n const value = inputField.property('value');\n this.removeInputField();\n finishCallback(value);\n });\n (inputField.node() as unknown as HTMLElement).focus();\n }\n\n private removeInputField(): void {\n // when removing an element, a blur event is emitted\n // we remove the listener for blur so that it doesn't shoot again on element removal\n this.inputFieldContainer?.select('input')?.on(Events.Blur, null);\n this.inputFieldContainer?.remove();\n this.inputFieldContainer = undefined;\n }\n}\n\n/**\n * Get the SVG path of a diagram connection.\n * @see linePath\n * @private\n */\nconst getConnectionPath = (connection: DiagramConnection): string => {\n return linePath(\n connection.type.shape,\n [connection.startCoords, connection.endCoords],\n connection.startDirection,\n connection.endDirection,\n Math.max(\n // reasonable value for the minimumDistanceBeforeTurn relative to the line width\n 10,\n connection.startMarkerLook?.markerWidth || 0,\n connection.endMarkerLook?.markerWidth || 0\n ) * connection.type.width\n );\n};\n","import { Injectable } from '@angular/core';\nimport { DiagramCanvas } from '../diagram-editor/diagram/diagram-canvas';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\n\n/**\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class CanvasProviderService {\n private _canvas!: Canvas;\n\n /**\n * Initialize the diagram canvas object of this context.\n * @private\n * @param parentComponent A diagram editor.\n * @param config A diagram configuration.\n */\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\n this._canvas = new DiagramCanvas(parentComponent, config);\n }\n\n /**\n * Attach the canvas of this context to an HTML Element to render it there.\n * @private\n * @param appendTo An HTML Element.\n */\n initCanvasView(appendTo: HTMLElement) {\n this._canvas.initView(appendTo);\n }\n\n /**\n * Get the diagram canvas of this context.\n * @public\n * @returns A diagram canvas.\n */\n getCanvas(): Canvas {\n return this._canvas;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { layouts } from '../diagram-editor/diagram/layout/diagram-layout';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramButtons } from '../interfaces/diagram-buttons';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport * as d3 from 'd3';\n\n/**\n * Buttons used to trigger diagram functionalities by the user.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-diagram-buttons',\n templateUrl: './diagram-buttons.component.html',\n imports: [CommonModule]\n})\nexport class DiagramButtonsComponent implements DiagramButtons {\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n\n @ViewChild('collapsableButtons')\n collapsableButtons!: ElementRef<HTMLDivElement>;\n @Input()\n enableFilter = true;\n @Input()\n enableLayout = true;\n @Input()\n enableUndoRedo = true;\n @Input()\n enableZoom = true;\n @Input()\n zoomRate = 2;\n\n filterOn = false;\n collapsed = true;\n animationOngoing = false;\n\n constructor(private canvasProvider: CanvasProviderService) {}\n\n // Collapse functions\n\n async toggleCollapse() {\n if (!this.animationOngoing) {\n if (this.collapsed) {\n this.collapsed = false;\n const collapsableButtons = d3.select(\n this.collapsableButtons.nativeElement\n );\n collapsableButtons\n .classed('expanding', true)\n .classed('collapsed', false);\n this.animationOngoing = true;\n setTimeout(() => {\n collapsableButtons.classed('expanding', false);\n this.animationOngoing = false;\n }, 1000);\n } else {\n this.collapsed = true;\n const collapsableButtons = d3.select(\n this.collapsableButtons.nativeElement\n );\n collapsableButtons.classed('collapsing', true);\n this.animationOngoing = true;\n setTimeout(() => {\n collapsableButtons\n .classed('collapsing', false)\n .classed('collapsed', true);\n this.animationOngoing = false;\n }, 1000);\n }\n }\n }\n\n // Button functions\n\n zoomIn(): void {\n this.canvas.zoomBy(this.zoomRate);\n }\n\n zoomOut(): void {\n this.canvas.zoomBy(1 / this.zoomRate);\n }\n\n center(): void {\n this.canvas.center();\n }\n\n layout(): void {\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\n }\n }\n\n filter(): void {\n this.filterOn = !this.filterOn;\n let priorityThreshold;\n if (this.filterOn) {\n priorityThreshold = this.canvas.priorityThresholds[1];\n } else {\n priorityThreshold = this.canvas.priorityThresholds[0];\n }\n this.canvas.priorityThreshold = priorityThreshold;\n // update model in view to ensure elements are re-added to the canvas in the correct order\n this.canvas.updateModelInView();\n // refresh the palette\n this.canvas.parentComponent.palette?.refreshPalette();\n }\n\n undo(): void {\n this.canvas.actionQueue.undo();\n }\n\n redo(): void {\n this.canvas.actionQueue.redo();\n }\n}\n","<div class=\"diagram-buttons\">\n <button *ngIf=\"enableZoom\" class=\"zoom-in\" (click)=\"zoomIn()\">\n <span class=\"tooltip\">Zoom in</span>\n </button>\n <button *ngIf=\"enableZoom\" class=\"zoom-out\" (click)=\"zoomOut()\">\n <span class=\"tooltip\">Zoom out</span>\n </button>\n <div #collapsableButtons class=\"collapsable-buttons collapsed\">\n <button *ngIf=\"enableZoom\" class=\"center\" (click)=\"center()\">\n <span class=\"tooltip\">Fit diagram to screen</span>\n </button>\n <button *ngIf=\"enableUndoRedo\" class=\"undo\" (click)=\"undo()\">\n <span class=\"tooltip\">Undo</span>\n </button>\n <button *ngIf=\"enableUndoRedo\" class=\"redo\" (click)=\"redo()\">\n <span class=\"tooltip\">Redo</span>\n </button>\n <button\n *ngIf=\"enableLayout && canvas.layoutFormat\"\n class=\"layout\"\n (click)=\"layout()\"\n >\n <span class=\"tooltip\">Apply layout</span>\n </button>\n <button\n *ngIf=\"enableFilter && canvas.priorityThresholds.length >= 2\"\n class=\"filter\"\n [class]=\"filterOn ? 'on' : 'off'\"\n (click)=\"filter()\"\n >\n <span class=\"tooltip\">Apply filter</span>\n </button>\n </div>\n <button class=\"more-options\" (click)=\"toggleCollapse()\">\n <span *ngIf=\"!collapsed\" class=\"tooltip\">Less options</span>\n <span *ngIf=\"collapsed\" class=\"tooltip\">More options</span>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport * as d3 from 'd3';\nimport { combineLatest, delay, map } from 'rxjs';\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\nimport { Canvas } from '../interfaces/canvas';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { Side } from '../util/svg-util';\nimport { DiagramError } from './diagram-error';\n\n/**\n * Displays the errors detected by a diagram's validators.\n * @see DiagramValidator\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-errors',\n templateUrl: './errors.component.html',\n imports: [CommonModule, CollapseButtonComponent]\n})\nexport class ErrorsComponent implements AfterViewInit {\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\n\n errors: DiagramError[] = [];\n\n Side = Side;\n\n constructor(private canvasProvider: CanvasProviderService) {}\n\n ngAfterViewInit(): void {\n combineLatest([this.canvas.validatorChanges$, this.canvas.diagramChanges$])\n .pipe(\n // delay to avoid errors of variables changing right after checking\n delay(1),\n map(() => this.validate())\n )\n .subscribe();\n }\n\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\n return d3.select(this.errorsContainer.nativeElement).select('.error-panel');\n }\n\n validate() {\n this.errors = [];\n for (const validator of this.canvas.validators) {\n const newErrors = validator.validate(this.canvas.model);\n this.errors = [...this.errors, ...newErrors];\n }\n }\n\n showError(error: DiagramError): void {\n if (error.elementId && error.propertyNames) {\n this.canvas.setPropertyEditorSelection(\n this.canvas.model.nodes.get(error.elementId) ||\n this.canvas.model.connections.get(error.elementId)\n );\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\n ...error.propertyNames\n );\n } else if (!error.elementId && error.propertyNames) {\n this.canvas.setPropertyEditorSelection();\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\n ...error.propertyNames\n );\n }\n // TODO: IF ERROR IS IN AN ELEMENT BUT NOT IN A SPECIFIC PROPERTY, WE COULD HIGHLIGHT THE ELEMENT\n }\n}\n","<div #errorsContainer class=\"errors\">\n <div\n *ngIf=\"errors.length === 0\"\n class=\"errors-summary no-errors prevent-user-select\"\n >\n <span>No errors found</span>\n </div>\n <div\n *ngIf=\"errors.length > 0\"\n class=\"errors-summary with-errors prevent-user-select\"\n >\n <span>{{ errors.length }} errors found</span>\n <div class=\"collapse-button-container\">\n <daga-collapse-button\n [collapsableSelector]=\"errorsContainer\"\n [collapsableAdditionalSelector]=\"'.error-panel'\"\n [direction]=\"Side.Top\"\n [rule]=\"'display'\"\n [collapsedValue]=\"'none'\"\n [visibleValue]=\"'block'\"\n />\n </div>\n </div>\n <div *ngIf=\"errors.length > 0\" class=\"error-panel\">\n <ol>\n <li\n *ngFor=\"let error of errors; index as i\"\n (click)=\"showError(error)\"\n [innerHTML]=\"error.message\"\n ></li>\n </ol>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\nimport {\n AddNodeAction,\n DiagramActions\n} from '../diagram-editor/diagram/diagram-action';\nimport {\n ConnectionTemplateConfig,\n NodeTemplateConfig,\n PaletteConfig\n} from '../diagram-editor/diagram/diagram-config';\nimport { DiagramConnectionType } from '../diagram-editor/diagram/diagram-connection';\nimport { DiagramNodeType } from '../diagram-editor/diagram/diagram-node';\nimport { Canvas } from '../interfaces/canvas';\nimport { Palette } from '../interfaces/palette';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { Point } from '../util/canvas-util';\nimport { DragEvents, Events } from '../util/events';\nimport { ClosedShape, generalClosedPath } from '../util/shape';\nimport { Corner } from '../util/svg-util';\n\n/**\n * Palette that the user can drag and drop nodes from.\n * @see DiagramConfig\n * @see DiagramNode\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-palette',\n templateUrl: './palette.component.html',\n imports: [CommonModule, CollapseButtonComponent]\n})\nexport class PaletteComponent\n implements AfterContentInit, AfterViewInit, Palette\n{\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\n\n @Input()\n palettes!: PaletteConfig[];\n @Input()\n currentPalette!: PaletteConfig;\n @Input()\n currentCategory = '';\n @Input()\n location!: Corner;\n\n private priorityThreshold?: number;\n\n constructor(private canvasProvider: CanvasProviderService) {}\n\n ngAfterContentInit(): void {\n // we initialize the currentPalette variable if it hasn't been initalized with a proper value\n // doing this in ngAfterViewInit() would cause an ExpressionChangedAfterItHasBeenCheckedError\n this.currentPalette = this.currentPalette || this.palettes[0];\n }\n\n ngAfterViewInit(): void {\n this.refreshPalette();\n }\n\n refreshPalette(): void {\n this.switchPalette(this.currentPalette);\n }\n\n switchPalette(palette: PaletteConfig): void {\n this.currentPalette = palette;\n\n this.selectPalette().selectAll('*').remove();\n this.priorityThreshold = this.canvas.priorityThreshold;\n\n if (palette.categories) {\n this.appendCategories(palette.categories);\n }\n if (palette.templates) {\n for (const template of palette.templates) {\n this.appendTemplate(template);\n }\n }\n }\n\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\n return d3.select(this.panel.nativeElement);\n }\n\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\n return this.selectPanel().select('.palette-view');\n }\n\n private appendCategories(categories: {\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\n }): void {\n const thisComponent = this.selectPalette()\n .append('select')\n .style('width', '100%')\n .style('height', '2rem')\n .style('padding', '0.5rem')\n .style('border-radius', '0.25rem')\n .style('background-color', '#f7f8fc')\n .style('border', `1px solid #e6e6e6`);\n thisComponent.append('option').attr('value', '').text('(None selected)');\n for (const categoryKey in categories) {\n thisComponent\n .append('option')\n .attr('value', categoryKey)\n .text(categoryKey);\n }\n thisComponent.on(Events.Change, () => {\n if (this.currentCategory) {\n this.selectPalette()\n .selectAll(`.template-container.in-category`)\n .remove();\n }\n\n const selectedKey = thisComponent.property('value');\n this.currentCategory = selectedKey;\n const templatesInCategory = categories[selectedKey] || [];\n for (const template of templatesInCategory) {\n this.appendTemplate(template, 'in-category');\n }\n });\n if (this.currentCategory) {\n // if we had a category already selected, re-select it\n thisComponent.property('value', this.currentCategory);\n thisComponent.dispatch(Events.Change);\n }\n }\n\n private appendTemplate(\n template: NodeTemplateConfig | ConnectionTemplateConfig,\n classes?: string\n ): void {\n if (template.templateType === 'node') {\n const nodeType = this.canvas.model.nodes.types.get(template.type);\n if (nodeType) {\n this.appendNodeTemplate(nodeType, template, classes);\n } else {\n console.error(`Could not find a node type called '${template.type}'`);\n }\n } else if (template.templateType === 'connection') {\n {\n const connectionType = this.canvas.model.connections.types.get(\n template.type\n );\n if (connectionType) {\n this.appendConnectionTemplate(connectionType, template, classes);\n } else {\n console.error(\n `Could not find a connection type called '${template.type}'`\n );\n }\n }\n }\n }\n\n private appendNodeTemplate(\n type: DiagramNodeType,\n templateConfig: NodeTemplateConfig,\n classes?: string\n ): void {\n if (\n this.priorityThreshold !== undefined &&\n type.priority < this.priorityThreshold\n ) {\n return;\n }\n const thisComponent = this.selectPalette()\n .append('div')\n .attr(\n 'class',\n `template-container ${classes !== undefined ? classes : ''}`\n )\n .style('width', `${type.defaultWidth}px`)\n .style('height', `${type.defaultHeight}px`)\n .call(\n d3\n .drag<HTMLDivElement, unknown, HTMLElement>()\n .on(DragEvents.Drag, (event: DragEvent) => {\n const pointerCoords =\n this.canvas.getPointerLocationRelativeToBody(event);\n if (\n pointerCoords.length < 2 ||\n isNaN(pointerCoords[0]) ||\n isNaN(pointerCoords[1])\n ) {\n return;\n }\n thisComponent\n .style('position', 'fixed')\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\n .style('z-index', 1);\n })\n .on(DragEvents.Start, (event: DragEvent) => {\n d3.select('body').style('cursor', 'grabbing');\n const pointerCoords =\n this.canvas.getPointerLocationRelativeToBody(event);\n if (\n pointerCoords.length < 2 ||\n isNaN(pointerCoords[0]) ||\n isNaN(pointerCoords[1])\n ) {\n return;\n }\n thisComponent\n .style('position', 'fixed')\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\n .style('z-index', 1);\n })\n .on(DragEvents.End, (event: DragEvent) => {\n // take node back to its original position\n d3.select('body').style('cursor', 'auto');\n thisComponent\n .style('position', 'relative')\n .style('left', 0)\n .style('top', 0)\n .style('z-index', 'auto');\n // try to place node\n if (\n this.canvas.userActions[DiagramActions.AddNodeAction] === false\n ) {\n // can't place, the user isn't allowed to place nodes\n return;\n }\n if (\n type.isUnique &&\n this.canvas.model.nodes.find(type.id) !== undefined\n ) {\n // can't place, it's unique and that node is already in the model\n return;\n }\n const pointerCoordsRelativeToBody =\n this.canvas.getPointerLocationRelativeToBody(event);\n if (\n pointerCoordsRelativeToBody.length < 2 ||\n isNaN(pointerCoordsRelativeToBody[0]) ||\n isNaN(pointerCoordsRelativeToBody[1])\n ) {\n // can't place, position is incorrect\n return;\n }\n\n const element = document.elementFromPoint(\n pointerCoordsRelativeToBody[0],\n pointerCoordsRelativeToBody[1]\n );\n if (\n element &&\n !this.canvas.selectCanvasView().node()?.contains(element)\n ) {\n // can't place, node hasn't been dropped on the canvas\n return;\n }\n const pointerCoords =\n this.canvas.getPointerLocationRelativeToCanvas(event);\n if (\n pointerCoords.length < 2 ||\n isNaN(pointerCoords[0]) ||\n isNaN(pointerCoords[1])\n ) {\n // can't place, position is incorrect\n return;\n }\n let newNodeCoords: Point = [\n pointerCoords[0] - type.defaultWidth / 2,\n pointerCoords[1] - type.defaultHeight / 2\n ];\n if (this.canvas.snapToGrid) {\n newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);\n }\n const addNodeAction = new AddNodeAction(\n this.canvas,\n type,\n newNodeCoords,\n templateConfig.label,\n templateConfig.values\n );\n addNodeAction.redo();\n this.canvas.actionQueue.add(addNodeAction);\n })\n )\n .append('svg')\n .attr('class', `palette-node ${type.id}`)\n .style('position', 'relative')\n .style('left', 0)\n .style('top', 0)\n .style('width', '100%')\n .style('height', '100%');\n\n switch (type.look.lookType) {\n case 'shaped-look':\n thisComponent\n .append('path')\n .attr(\n 'd',\n generalClosedPath(\n type.look.shape,\n 0,\n 0,\n type.defaultWidth,\n type.defaultHeight\n )\n )\n .attr('fill', type.look.color)\n .attr('stroke', type.look.borderColor)\n .attr('stroke-width', '1px');\n break;\n case 'image-look':\n thisComponent\n .append('image')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', type.defaultWidth)\n .attr('height', type.defaultHeight)\n .attr('href', type.look.backgroundImage)\n .attr('preserveAspectRatio', 'none');\n break;\n case 'stretchable-image-look':\n thisComponent\n .append('image')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', type.look.leftMargin)\n .attr('height', type.look.topMargin)\n .attr('href', type.look.backgroundImageTopLeft)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.look.leftMargin)\n .attr('y', 0)\n .attr(\n 'width',\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\n )\n .attr('height', type.look.topMargin)\n .attr('href', type.look.backgroundImageTop)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.defaultWidth - type.look.rightMargin)\n .attr('y', 0)\n .attr('width', type.look.rightMargin)\n .attr('height', type.look.topMargin)\n .attr('href', type.look.backgroundImageTopRight)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', 0)\n .attr('y', type.look.topMargin)\n .attr('width', type.look.leftMargin)\n .attr(\n 'height',\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\n )\n .attr('href', type.look.backgroundImageLeft)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.look.leftMargin)\n .attr('y', type.look.topMargin)\n .attr(\n 'width',\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\n )\n .attr(\n 'height',\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\n )\n .attr('href', type.look.backgroundImageCenter)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.defaultWidth - type.look.rightMargin)\n .attr('y', type.look.topMargin)\n .attr('width', type.look.rightMargin)\n .attr(\n 'height',\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\n )\n .attr('href', type.look.backgroundImageRight)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', 0)\n .attr('y', type.defaultHeight - type.look.bottomMargin)\n .attr('width', type.look.leftMargin)\n .attr('height', type.look.bottomMargin)\n .attr('href', type.look.backgroundImageBottomLeft)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.look.leftMargin)\n .attr('y', type.defaultHeight - type.look.bottomMargin)\n .attr(\n 'width',\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\n )\n .attr('height', type.look.bottomMargin)\n .attr('href', type.look.backgroundImageBottom)\n .attr('preserveAspectRatio', 'none');\n thisComponent\n .append('image')\n .attr('x', type.defaultWidth - type.look.rightMargin)\n .attr('y', type.defaultHeight - type.look.bottomMargin)\n .attr('width', type.look.rightMargin)\n .attr('height', type.look.bottomMargin)\n .attr('href', type.look.backgroundImageBottomRight)\n .attr('preserveAspectRatio', 'none');\n }\n\n if (templateConfig.label !== '') {\n thisComponent\n .append('text')\n .attr(\n 'transform',\n `translate(${type.defaultWidth / 2},${type.defaultHeight / 2 + 5})`\n )\n .attr('x', 0)\n .attr('y', 0)\n .attr('font-size', '20px')\n .attr('text-anchor', 'middle')\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\n .attr('font-weight', 400)\n .attr('fill', '#000000') // or nodeConfig.borderColor\n .attr('stroke', 'none')\n .style('font-kerning', 'none')\n .style('user-select', 'none')\n .text(templateConfig.label);\n }\n }\n\n private appendConnectionTemplate(\n type: DiagramConnectionType,\n templateConfig: ConnectionTemplateConfig,\n classes?: string\n ): void {\n const thisComponent = this.selectPalette()\n .append('div')\n .attr(\n 'class',\n `template-container ${classes !== undefined ? classes : ''}`\n )\n .style('width', `${templateConfig.width}px`)\n .style('height', `${templateConfig.height}px`)\n .append('svg')\n .attr('class', `palette-button ${type.id}`)\n .style('position', 'relative')\n .style('left', 0)\n .style('top', 0)\n .style('width', '100%')\n .style('height', '100%')\n .on('click', () => {\n this.canvas.connectionType = type;\n });\n\n thisComponent\n .append('path')\n .attr(\n 'd',\n generalClosedPath(\n ClosedShape.Rectangle,\n 0,\n 0,\n templateConfig.width,\n templateConfig.height\n )\n )\n .attr('fill', templateConfig.color)\n .attr('stroke', 'black')\n .attr('stroke-width', '1px');\n\n if (templateConfig.icon !== '') {\n thisComponent\n .append('image')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', templateConfig.width)\n .attr('height', templateConfig.height)\n .attr('href', templateConfig.icon);\n }\n\n if (templateConfig.label !== '') {\n thisComponent\n .append('text')\n .attr(\n 'transform',\n `translate(${templateConfig.width / 2},${\n templateConfig.height / 2 + 5\n })`\n )\n .attr('x', 0)\n .attr('y', 0)\n .attr('font-size', '20px')\n .attr('text-anchor', 'middle')\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\n .attr('font-weight', 400)\n .attr('fill', '#000000')\n .attr('stroke', 'none')\n .style('font-kerning', 'none')\n .style('user-select', 'none')\n .text(templateConfig.label);\n }\n }\n}\n","<div #panel class=\"panel {{ location }}\">\n <daga-collapse-button\n #collapseButton\n [collapsableSelector]=\"panel\"\n [collapsableAdditionalSelector]=\"'.panel-content'\"\n [rule]=\"'display'\"\n [collapsedValue]=\"'none'\"\n [visibleValue]=\"'block'\"\n />\n <div class=\"panel-content\">\n <div *ngIf=\"palettes.length > 1\" class=\"panel-tabs\">\n <div\n *ngFor=\"let palette of palettes\"\n class=\"panel-tab\"\n [class]=\"palette === currentPalette ? 'current-tab' : ''\"\n (click)=\"switchPalette(palette)\"\n >\n {{ palette.name }}\n </div>\n </div>\n <div class=\"palette-view\"></div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\n/**\n * Editor of a property of text list type within a property editor.\n * @see TextList\n * @see PropertyEditor\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-text-list-editor',\n templateUrl: './text-list-editor.component.html',\n imports: [CommonModule, LuxModule, FormsModule]\n})\nexport class TextListEditorComponent {\n private _value: string[] = [];\n @Input()\n set value(val: string[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = val.length === 0 && this._value.length === 0;\n this._value = val;\n if (initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): string[] {\n return this._value;\n }\n @Input() valueInput = '';\n\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<string[]>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n getValueFromEvent(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n removeFromValue(index: number): void {\n if (this._value.length > index) {\n this._value.splice(index, 1);\n this.valueChange.emit(this._value);\n }\n this.cdr.detectChanges();\n }\n\n editFromValue(item: string, index: number): void {\n if (this._value.length > index) {\n this._value.splice(index, 1, item);\n this.valueChange.emit(this._value);\n }\n this.cdr.detectChanges();\n }\n\n addToValue(): void {\n if (this.valueInput !== '') {\n this._value.push(this.valueInput);\n this.valueChange.emit(this._value);\n this.clearInput();\n this.cdr.detectChanges();\n }\n }\n\n clearInput(): void {\n this.valueInput = '';\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.addToValue();\n }\n }\n}\n","<div *ngFor=\"let item of value; let index = index\" class=\"value-item-element\">\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item\"\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\n ></lux-input>\n <button\n *ngIf=\"!disabled\"\n class=\"property-button\"\n (click)=\"removeFromValue(index)\"\n >\n <div class=\"icon close-icon\"></div>\n </button>\n</div>\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"valueInput\"\n ></lux-input>\n <button\n *ngIf=\"valueInput !== ''\"\n class=\"clear\"\n (click)=\"clearInput()\"\n ></button>\n </div>\n <button class=\"property-button\" (click)=\"addToValue()\">\n <div class=\"icon add-icon\"></div>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\n/**\n * Editor of a property of text map type within a property editor.\n * @see TextMap\n * @see PropertyEditor\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-text-map-editor',\n templateUrl: './text-map-editor.component.html',\n imports: [CommonModule, LuxModule, FormsModule]\n})\nexport class TextMapEditorComponent {\n private _value: { [name: string]: string } = {};\n\n @Input()\n set value(val: { [name: string]: string }) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty =\n Object.keys(val).length === 0 && Object.keys(this._value).length === 0;\n this._value = val;\n if (initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): { [name: string]: string } {\n return this._value;\n }\n @Input() keyInput = '';\n @Input() valueInput = '';\n\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n getValueFromEvent(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n removeFromValue(key: string): void {\n delete this._value[key];\n this.cdr.detectChanges();\n }\n\n editKey(oldKey: string, newKey: string): void {\n if (oldKey !== newKey) {\n this._value[newKey] = this._value[oldKey];\n delete this._value[oldKey];\n this.cdr.detectChanges();\n }\n }\n\n editValue(key: string, value: string): void {\n this._value[key] = value;\n this.cdr.detectChanges();\n }\n\n addToValue(): void {\n if (this.keyInput !== '' && this.valueInput !== '') {\n this._value[this.keyInput] = this.valueInput;\n this.valueChange.emit(this._value);\n this.clearKeyInput();\n this.clearValueInput();\n this.cdr.detectChanges();\n }\n }\n\n clearKeyInput(): void {\n this.keyInput = '';\n }\n\n clearValueInput(): void {\n this.valueInput = '';\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.addToValue();\n }\n }\n}\n","<div *ngFor=\"let item of value | keyvalue\" class=\"value-item-element\">\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item.key\"\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\n ></lux-input>\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item.value\"\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\n ></lux-input>\n <button\n *ngIf=\"!disabled\"\n class=\"property-button\"\n (click)=\"removeFromValue(item.key)\"\n >\n <div class=\"icon close-icon\"></div>\n </button>\n</div>\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"keyInput\"\n ></lux-input>\n <button\n *ngIf=\"keyInput !== ''\"\n class=\"clear\"\n (click)=\"clearKeyInput()\"\n ></button>\n </div>\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"valueInput\"\n ></lux-input>\n <button\n *ngIf=\"valueInput !== ''\"\n class=\"clear\"\n (click)=\"clearValueInput()\"\n ></button>\n </div>\n <button class=\"property-button\" (click)=\"addToValue()\">\n <div class=\"icon add-icon\"></div>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule, RadioItem } from '@metadev/lux';\nimport {\n Property,\n Type,\n ValueSet,\n equals\n} from '../diagram-editor/diagram/diagram-property';\nimport { Canvas } from '../interfaces/canvas';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\nimport { DiagramActions } from '../diagram-editor/diagram/diagram-action';\n\n/**\n * Editor of a value set within a property editor.\n * @see PropertyEditor\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-object-editor',\n templateUrl: './object-editor.component.html',\n imports: [\n CommonModule,\n LuxModule,\n FormsModule,\n TextListEditorComponent,\n TextMapEditorComponent\n ]\n})\nexport class ObjectEditorComponent {\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n get userCanEdit(): boolean {\n return this.canvas.userActions[DiagramActions.UpdateValuesAction] !== false;\n }\n\n _valueSet?: ValueSet;\n @Input()\n get valueSet(): ValueSet | undefined {\n return this._valueSet;\n }\n set valueSet(valueSet: ValueSet | undefined) {\n this._valueSet = valueSet;\n // force value change detection\n this.cdr.detectChanges();\n }\n /** How many object-editors are parents of this object-editor. @private */\n @Input() depth = 0;\n\n // Attributes for the template\n Type = Type;\n booleanRadioItems: RadioItem[] = [\n { value: false, label: 'No' },\n { value: true, label: 'Yes' }\n ];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private canvasProvider: CanvasProviderService\n ) {}\n\n displayProperty(property: Property | Event | string | undefined) {\n if (this.valueSet === undefined) {\n return;\n }\n let selectedProperty: Property | undefined;\n if (property instanceof Property) {\n selectedProperty = property;\n } else if (property instanceof Event) {\n selectedProperty = this.valueSet?.propertySet.getProperty(\n (property.target as unknown as { value: string })?.value || ''\n );\n } else {\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\n }\n if (selectedProperty) {\n this.valueSet.displayProperty(selectedProperty);\n }\n this.cdr.detectChanges();\n }\n\n hideProperty(property: Property | Event | string | undefined) {\n if (this.valueSet === undefined) {\n return;\n }\n let selectedProperty: Property | undefined;\n if (property instanceof Property) {\n selectedProperty = property;\n } else if (property instanceof Event) {\n selectedProperty = this.valueSet?.propertySet.getProperty(\n (property.target as unknown as { value: string })?.value || ''\n );\n } else {\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\n }\n if (selectedProperty) {\n this.valueSet.hideProperty(selectedProperty);\n }\n this.cdr.detectChanges();\n }\n\n setValue(property: Property, value: unknown) {\n if (this.valueSet === undefined) {\n return;\n }\n if (property.editable) {\n // register a diagram change when editing a value\n if (!equals(this.valueSet.getValue(property.name), value)) {\n this.canvas.diagramChanges$?.next(1);\n }\n this.valueSet.setValue(property.name, value);\n }\n }\n\n convertDate(date: string | number | Date) {\n if (typeof date === 'string') {\n return date;\n }\n return date && !isNaN(date.valueOf()) ? new Date(date).toISOString() : '';\n }\n}\n","<div\n *ngFor=\"let property of valueSet?.displayedProperties || []\"\n class=\"property\"\n [class]=\"property.name + ' depth-' + depth\"\n>\n <p class=\"property-name\">\n {{ property.name }}\n <button class=\"property-button\" (click)=\"hideProperty(property.name)\">\n <div class=\"icon hide-icon\"></div>\n </button>\n </p>\n\n <lux-input\n *ngIf=\"property.type === Type.Text\"\n type=\"text\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <textarea\n *ngIf=\"property.type === Type.TextArea\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [ngModel]=\"valueSet?.getValue(property.name)\"\n (ngModelChange)=\"setValue(property, $event)\"\n ></textarea>\n <lux-input\n *ngIf=\"property.type === Type.Number\"\n type=\"number\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Color\"\n type=\"color\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Date\"\n type=\"date\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"convertDate(valueSet?.getValue(property.name))\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Time\"\n type=\"time\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"convertDate(valueSet?.getValue(property.name))\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Url\"\n type=\"url\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-radiogroup\n *ngIf=\"property.type === Type.Boolean\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [items]=\"booleanRadioItems\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-radiogroup>\n <lux-autocomplete\n *ngIf=\"property.type === Type.Option\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [dataSource]=\"property.options || []\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-autocomplete>\n <lux-autocomplete-list\n *ngIf=\"property.type === Type.OptionList\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [dataSource]=\"property.options || []\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-autocomplete-list>\n <daga-text-list-editor\n *ngIf=\"property.type === Type.TextList\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></daga-text-list-editor>\n <daga-text-map-editor\n *ngIf=\"property.type === Type.TextMap\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></daga-text-map-editor>\n <div *ngIf=\"property.type === Type.Object\" class=\"left-bar\">\n <daga-object-editor\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\n [depth]=\"depth + 1\"\n ></daga-object-editor>\n </div>\n</div>\n<div class=\"property\" *ngIf=\"valueSet && valueSet.hiddenProperties.length > 0\">\n <p class=\"property-name\">Add property:</p>\n <select (change)=\"displayProperty($event)\">\n <option value=\"\">Select a property</option>\n <option\n *ngFor=\"let property of valueSet?.hiddenProperties || []\"\n [value]=\"property.name\"\n >\n {{ property.name }}\n </option>\n </select>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n ViewChild\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\nimport { ValueSet } from '../diagram-editor/diagram/diagram-property';\nimport { PropertyEditor } from '../interfaces/property-editor';\nimport { ObjectEditorComponent } from '../object-editor/object-editor.component';\nimport { Corner } from '../util/svg-util';\n\n/**\n * Editor of the values of a value set.\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-property-editor',\n templateUrl: './property-editor.component.html',\n imports: [CommonModule, CollapseButtonComponent, ObjectEditorComponent]\n})\nexport class PropertyEditorComponent implements PropertyEditor {\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\n\n @Input()\n location!: Corner;\n\n title?: string;\n _valueSet!: ValueSet | undefined;\n @Input()\n get valueSet(): ValueSet | undefined {\n return this._valueSet;\n }\n set valueSet(valueSet: ValueSet | undefined) {\n this._valueSet = valueSet;\n // force value change detection\n this.cdr.detectChanges();\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n highlightProperty(...propertyNames: string[]): void {\n let selector = '';\n let depth = 0;\n for (const propertyName of propertyNames) {\n selector += ` .property.${propertyName}.depth-${depth}`;\n ++depth;\n }\n if (this.valueSet) {\n d3.select(this.panel.nativeElement)\n .select(selector)\n .transition()\n .duration(1000)\n .ease(d3.easeLinear)\n .styleTween('background-color', () => {\n const interpolator = d3.interpolate(\n 'rgba(255, 0, 0, 0)',\n 'rgba(255, 0, 0, 0.4)'\n );\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\n });\n }\n }\n}\n","<div #panel class=\"panel bottom {{ location }}\">\n <daga-collapse-button\n [collapsableSelector]=\"panel\"\n [collapsableAdditionalSelector]=\"'.panel-content'\"\n [rule]=\"'display'\"\n [collapsedValue]=\"'none'\"\n [visibleValue]=\"'block'\"\n [disabled]=\"\n !valueSet ||\n !valueSet.propertySet ||\n !valueSet.propertySet.hasProperties()\n \"\n />\n <div\n *ngIf=\"\n valueSet && valueSet.propertySet && valueSet.propertySet.hasProperties()\n \"\n class=\"panel-content\"\n >\n <p *ngIf=\"title\" class=\"title\">{{ title }}</p>\n <daga-object-editor [valueSet]=\"valueSet\"></daga-object-editor>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\n\n/**\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class DagaConfigurationService {\n private _config!: DiagramConfig;\n\n /**\n * Set the diagram configuration of this context.\n * @private\n * @param config A diagram configuration.\n */\n init(config: DiagramConfig) {\n this._config = config;\n }\n\n /**\n * Get the diagram configuration of this context.\n * @public\n * @returns A diagram configuration.\n */\n getConfig(): DiagramConfig {\n return this._config;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { ErrorsComponent } from '../errors/errors.component';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\nimport { PaletteComponent } from '../palette/palette.component';\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\nimport { Corner } from '../util/svg-util';\n\n/**\n * A diagram's user interface editor.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-diagram-editor',\n templateUrl: './diagram-editor.component.html',\n imports: [\n CommonModule,\n DiagramButtonsComponent,\n PaletteComponent,\n PropertyEditorComponent,\n ErrorsComponent\n ]\n})\nexport class DiagramEditorComponent\n implements AfterViewInit, DiagramEditor, OnInit\n{\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\n @ViewChild('palette') palette!: PaletteComponent;\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\n\n get config(): DiagramConfig {\n return this.configurationService.getConfig();\n }\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n\n Corner = Corner;\n\n constructor(\n private configurationService: DagaConfigurationService,\n private canvasProvider: CanvasProviderService\n ) {}\n\n ngOnInit(): void {\n this.canvasProvider.initCanvas(this, this.config);\n }\n\n ngAfterViewInit(): void {\n this.canvasProvider.initCanvasView(this.appendTo.nativeElement);\n }\n}\n","<div class=\"append-to\" #appendTo></div>\n<daga-diagram-buttons #diagramButtons />\n<daga-palette\n *ngIf=\"config.palettes && config.palettes.length > 0\"\n #palette\n [location]=\"Corner.TopLeft\"\n [palettes]=\"config.palettes\"\n/>\n<daga-property-editor #propertyEditor [location]=\"Corner.TopRight\" />\n<daga-errors />\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\n\n/**\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\n * @public\n */\n@Component({\n standalone: true,\n selector: 'daga-diagram',\n template: `<ng-content></ng-content>`,\n providers: [CanvasProviderService, DagaConfigurationService]\n})\nexport class DiagramComponent implements OnInit {\n @Input()\n config!: DiagramConfig;\n\n constructor(\n private configurationService: DagaConfigurationService,\n private canvasProvider: CanvasProviderService\n ) {}\n\n ngOnInit(): void {\n this.configurationService.init(this.config);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\nimport { DiagramEditorComponent } from './diagram-editor/diagram-editor.component';\nimport { DiagramComponent } from './diagram/diagram.component';\nimport { ErrorsComponent } from './errors/errors.component';\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\nimport { PaletteComponent } from './palette/palette.component';\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\nimport { CanvasProviderService } from './services/canvas-provider.service';\nimport { DagaConfigurationService } from './services/daga-configuration.service';\nimport { TextListEditorComponent } from './text-list-editor/text-list-editor.component';\nimport { TextMapEditorComponent } from './text-map-editor/text-map-editor.component';\n\n@NgModule({\n declarations: [],\n imports: [\n CollapseButtonComponent,\n DiagramButtonsComponent,\n DiagramComponent,\n DiagramEditorComponent,\n ErrorsComponent,\n ObjectEditorComponent,\n PaletteComponent,\n TextListEditorComponent,\n TextMapEditorComponent,\n PropertyEditorComponent,\n CommonModule,\n FormsModule,\n LuxModule\n ],\n exports: [DiagramComponent, DiagramEditorComponent],\n providers: [DagaConfigurationService, CanvasProviderService]\n})\nexport class DagaModule {}\n","import { Point } from '../../../util/canvas-util';\nimport { Side } from '../../../util/svg-util';\n\nexport const DAGA_FILE_VERSION = 1;\n\n/**\n * Representation of a diagram model in a serialized format.\n * @see DiagramModel\n * @public\n */\nexport interface DagaModel {\n id?: string;\n /** User version */\n version?: string;\n name: string;\n description?: string;\n type: string;\n /** Serialization file format version for tooling */\n typeVersion: number;\n createdAt: Date;\n updatedAt: Date;\n updatedDaysAgo?: string;\n nodes: {\n id: string;\n type: string;\n sections?: {\n id: string;\n ports?: {\n id: string;\n coords: Point;\n direction: Side;\n label: string;\n }[];\n label: string;\n coords: Point;\n width: number;\n height: number;\n }[];\n ports?: {\n id: string;\n coords: Point;\n direction: Side;\n label: string;\n }[];\n label: string;\n coords: Point;\n width: number;\n height: number;\n data: { [key: string]: unknown };\n }[];\n connections: {\n id: string;\n type: string;\n start: string;\n end: string;\n startLabel: string;\n middleLabel: string;\n endLabel: string;\n points: Point[];\n data: { [key: string]: unknown };\n }[];\n}\n","import { roundPoint } from '../../../util/canvas-util';\nimport { DiagramModel } from '../diagram-model';\nimport { DAGA_FILE_VERSION, DagaModel } from './daga-model';\nimport { DiagramModelExporter } from './diagram-model-exporter';\n\n/**\n * Importer which exports a diagram to its daga model representation.\n * @public\n */\nexport class DagaExporter implements DiagramModelExporter<DagaModel> {\n export(model: DiagramModel): DagaModel {\n const result: DagaModel = {\n name: model.name,\n type: model.type,\n typeVersion: DAGA_FILE_VERSION,\n createdAt: model.createdAt,\n updatedAt: model.updatedAt,\n nodes: [],\n connections: []\n };\n if (model.id) {\n result.id = model.id;\n }\n if (model.description) {\n result.description = model.description;\n }\n\n for (const node of model.nodes) {\n const sections = [];\n for (const section of node.sections) {\n const ports = [];\n for (const port of section.ports) {\n ports.push({\n id: port.id,\n coords: roundPoint(port.coords),\n direction: port.direction,\n label: port.label?.text || ''\n });\n }\n sections.push({\n id: section.id,\n ports,\n label: section.label?.text || '',\n coords: roundPoint(section.coords),\n width: section.width,\n height: section.height\n });\n }\n const ports = [];\n for (const port of node.ports) {\n ports.push({\n id: port.id,\n coords: roundPoint(port.coords),\n direction: port.direction,\n label: port.label?.text || ''\n });\n }\n result.nodes.push({\n id: node.id,\n type: node.type.id,\n sections,\n ports,\n label: node.label?.text || '',\n coords: roundPoint(node.coords),\n width: node.width,\n height: node.height,\n data: node.valueSet.getValues()\n });\n }\n for (const connection of model.connections) {\n result.connections.push({\n id: connection.id,\n type: connection.type.id,\n start: connection.start?.id || '',\n end: connection.end?.id || '',\n startLabel: connection.startLabel,\n middleLabel: connection.middleLabel,\n endLabel: connection.endLabel,\n points: connection.points,\n data: connection.valueSet.getValues()\n });\n }\n\n return result;\n }\n}\n","import { Point } from '../../../util/canvas-util';\nimport { Side } from '../../../util/svg-util';\nimport { DiagramConnection } from '../diagram-connection';\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from '../diagram-field';\nimport { DiagramModel } from '../diagram-model';\nimport { DiagramNode } from '../diagram-node';\nimport { DiagramPort } from '../diagram-port';\nimport { DiagramSection } from '../diagram-section';\nimport { DagaModel } from './daga-model';\nimport { DiagramModelImporter } from './diagram-model-importer';\n\n/**\n * Importer which imports a diagram from its daga model representation.\n * @public\n */\nexport class DagaImporter implements DiagramModelImporter<DagaModel> {\n import(model: DiagramModel, data: DagaModel): DiagramModel {\n // clear the model beforehand\n model.clear();\n\n if (data.id) {\n model.id = data.id;\n }\n model.name = data.name;\n model.description = data.description;\n model.type = data.type;\n model.createdAt = new Date(data.createdAt);\n model.updatedAt = new Date(data.updatedAt);\n for (const node of data.nodes || []) {\n const newNodeType = model.nodes.types.get(node.type);\n if (newNodeType) {\n const newNode = new DiagramNode(\n model,\n newNodeType,\n node.coords,\n node.id\n );\n model.nodes.add(newNode);\n newNode.width = node.width;\n newNode.height = node.height;\n if (node.data) {\n newNode.valueSet.setValues(node.data);\n }\n if (node.label) {\n // add node label\n if (newNodeType.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...newNodeType.label\n };\n const newField = new DiagramField(\n model,\n newNode,\n [\n newNode.coords[0] + labelConfiguration.margin,\n newNode.coords[1] + labelConfiguration.margin\n ],\n newNode.width - labelConfiguration.margin * 2,\n newNode.height - labelConfiguration.margin * 2,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable\n );\n newField.text = node.label;\n newNode.label = newField;\n model.fields.add(newField);\n }\n }\n for (const section of node.sections || []) {\n const newSection = new DiagramSection(\n model,\n newNode,\n section.coords,\n section.width,\n section.height,\n section.id\n );\n newNode.sections?.push(newSection);\n model.sections.add(newSection);\n if (section.label) {\n // add section label\n if (newNodeType.sections?.label) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...newNodeType.sections.label\n };\n const newField = new DiagramField(\n model,\n newSection,\n [\n newSection.coords[0] + labelConfiguration.margin,\n newSection.coords[1] + labelConfiguration.margin\n ],\n newSection.width - labelConfiguration.margin * 2,\n newSection.height - labelConfiguration.margin * 2,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable\n );\n newField.text = section.label;\n newSection.label = newField;\n model.fields.add(newField);\n }\n }\n let portCounter = 0;\n for (const port of section.ports || []) {\n const newPort = new DiagramPort(\n model,\n newSection,\n port.coords,\n port.direction,\n port.id\n );\n newSection.ports.push(newPort);\n model.ports.add(newPort);\n if (port.label) {\n // add port label\n if (\n newNodeType.ports.length > portCounter &&\n newNodeType.ports[portCounter].label\n ) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...newNodeType.ports[portCounter].label\n };\n let labelCoords: Point;\n switch (newPort.direction) {\n case Side.Top:\n case Side.Left:\n labelCoords = [\n newPort.coords[0] - labelConfiguration.fontSize,\n newPort.coords[1] - labelConfiguration.fontSize\n ];\n break;\n case Side.Bottom:\n labelCoords = [\n newPort.coords[0] - labelConfiguration.fontSize,\n newPort.coords[1] + labelConfiguration.fontSize\n ];\n break;\n case Side.Right:\n labelCoords = [\n newPort.coords[0] + labelConfiguration.fontSize,\n newPort.coords[1] - labelConfiguration.fontSize\n ];\n break;\n default:\n labelCoords = newPort.coords;\n }\n const newField = new DiagramField(\n model,\n newPort,\n labelCoords,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable\n );\n newField.text = port.label;\n newPort.label = newField;\n model.fields.add(newField);\n }\n ++portCounter;\n }\n }\n }\n let portCounter = 0;\n for (const port of node.ports || []) {\n const newPort = new DiagramPort(\n model,\n newNode,\n port.coords,\n port.direction,\n port.id\n );\n newNode.ports.push(newPort);\n model.ports.add(newPort);\n if (port.label) {\n // add port label\n if (\n newNodeType.ports.length > portCounter &&\n newNodeType.ports[portCounter].label\n ) {\n const labelConfiguration = {\n ...DIAGRAM_FIELD_DEFAULTS,\n ...newNodeType.ports[portCounter].label\n };\n let labelCoords: Point;\n switch (newPort.direction) {\n case Side.Top:\n case Side.Left:\n labelCoords = [\n newPort.coords[0] - labelConfiguration.fontSize,\n newPort.coords[1] - labelConfiguration.fontSize\n ];\n break;\n case Side.Bottom:\n labelCoords = [\n newPort.coords[0] - labelConfiguration.fontSize,\n newPort.coords[1] + labelConfiguration.fontSize\n ];\n break;\n case Side.Right:\n labelCoords = [\n newPort.coords[0] + labelConfiguration.fontSize,\n newPort.coords[1] - labelConfiguration.fontSize\n ];\n break;\n default:\n labelCoords = newPort.coords;\n }\n const newField = new DiagramField(\n model,\n newPort,\n labelCoords,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.fontSize,\n labelConfiguration.fontFamily,\n labelConfiguration.color,\n labelConfiguration.selectedColor,\n labelConfiguration.horizontalAlign,\n labelConfiguration.verticalAlign,\n '',\n labelConfiguration.editable\n );\n newField.text = port.label;\n newPort.label = newField;\n model.fields.add(newField);\n }\n ++portCounter;\n }\n }\n }\n }\n for (const connection of data.connections || []) {\n const newConnectionType = model.connections.types.get(connection.type);\n if (newConnectionType) {\n const newConnection = new DiagramConnection(\n model,\n newConnectionType,\n connection.start ? model.ports.get(connection.start) : undefined,\n connection.end ? model.ports.get(connection.end) : undefined,\n connection.id\n );\n model.connections.add(newConnection);\n newConnection.startLabel = connection.startLabel;\n newConnection.middleLabel = connection.middleLabel;\n newConnection.endLabel = connection.endLabel;\n newConnection.points = connection.points;\n if (connection.data) {\n newConnection.valueSet.setValues(connection.data);\n }\n }\n }\n\n model.canvas?.updateModelInView();\n\n return model;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["equals","idTicker","i1.CanvasProviderService","i1","i3","i1.DagaConfigurationService","i2.CanvasProviderService"],"mappings":"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"}
1
+ {"version":3,"file":"metadev-daga.mjs","sources":["../../../../libs/daga/src/lib/util/svg-util.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga/src/lib/util/list-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-action.ts","../../../../libs/daga/src/lib/util/grid.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-layout.ts","../../../../libs/daga/src/lib/util/canvas-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/force-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/horizontal-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/priority-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/vertical-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/diagram-layout.ts","../../../../libs/daga/src/lib/util/events.ts","../../../../libs/daga/src/lib/util/line.ts","../../../../libs/daga/src/lib/util/shape.ts","../../../../libs/daga/src/lib/util/text-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-element.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-property.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-connection.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-section.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-node.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-port.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-field.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-model.ts","../../../../libs/daga/src/lib/util/style.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-canvas.ts","../../../../libs/daga/src/lib/services/canvas-provider.service.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga/src/lib/errors/errors.component.ts","../../../../libs/daga/src/lib/errors/errors.component.html","../../../../libs/daga/src/lib/palette/palette.component.ts","../../../../libs/daga/src/lib/palette/palette.component.html","../../../../libs/daga/src/lib/text-list-editor/text-list-editor.component.ts","../../../../libs/daga/src/lib/text-list-editor/text-list-editor.component.html","../../../../libs/daga/src/lib/text-map-editor/text-map-editor.component.ts","../../../../libs/daga/src/lib/text-map-editor/text-map-editor.component.html","../../../../libs/daga/src/lib/object-editor/object-editor.component.ts","../../../../libs/daga/src/lib/object-editor/object-editor.component.html","../../../../libs/daga/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga/src/lib/property-editor/property-editor.component.html","../../../../libs/daga/src/lib/services/daga-configuration.service.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.html","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-exporter.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-importer.ts","../../../../libs/daga/src/lib/diagram/diagram.component.ts","../../../../libs/daga/src/lib/daga.module.ts","../../../../libs/daga/src/metadev-daga.ts"],"sourcesContent":["/**\n * An enumeration of the possible sides of a rectangle and directions parallel to the axes of coordinates.\n * @public\n */\nexport enum Side {\n /**\n * Bottom side or direction.\n * @public\n */\n Bottom = 'bottom',\n /**\n * Left side or direction.\n * @public\n */\n Left = 'left',\n /**\n * Right side or direction.\n * @public\n */\n Right = 'right',\n /**\n * Top side or direction.\n * @public\n */\n Top = 'top'\n}\n\n/**\n * An enumeration of the possible corners of a rectangle.\n * @public\n */\nexport enum Corner {\n /**\n * Bottom left corner.\n * @public\n */\n BottomLeft = 'bottom-left',\n /**\n * Bottom right corner.\n * @public\n */\n BottomRight = 'bottom-right',\n /**\n * Top left corner.\n * @public\n */\n TopLeft = 'top-left',\n /**\n * Top right corner.\n * @public\n */\n TopRight = 'top-right'\n}\n\n/**\n * An enumeration of the possible horizontal alignments within a horizontal range of coordinates.\n * @public\n */\nexport enum HorizontalAlign {\n /**\n * Start of an horizontal range of coordinates.\n * @public\n */\n Left = 'left',\n /**\n * Middle of an horizontal range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of an horizontal range of coordinates.\n * @public\n */\n Right = 'right'\n}\n\n/**\n * An enumeration of the possible vertical alignments within a vertical range of coordinates.\n * @public\n */\nexport enum VerticalAlign {\n /**\n * Start of a vertical range of coordinates.\n * @public\n */\n Top = 'top',\n /**\n * Middle of a vertical range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of a vertical range of coordinates.\n * @public\n */\n Bottom = 'bottom'\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, Input } from '@angular/core';\nimport * as d3 from 'd3';\nimport { Side } from '../util/svg-util';\n\n/**\n * Button used to collapse components that implement it.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-collapse-button',\n templateUrl: './collapse-button.component.html',\n imports: [CommonModule]\n})\nexport class CollapseButtonComponent {\n @Input()\n collapsableSelector!: string | ElementRef | HTMLElement;\n @Input()\n collapsableAdditionalSelector!: string;\n @Input()\n collapsed = false;\n @Input()\n disabled = false;\n @Input()\n direction = Side.Bottom;\n @Input()\n rule = 'visibility';\n @Input()\n collapsedValue = 'collapse';\n @Input()\n visibleValue = 'visible';\n\n Side = Side;\n\n toggleCollapse(): void {\n if (!this.disabled) {\n this.collapsed = !this.collapsed;\n let selection;\n if (this.collapsableSelector instanceof ElementRef) {\n selection = d3.select(this.collapsableSelector.nativeElement);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else if (this.collapsableSelector instanceof HTMLElement) {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n }\n selection.style(\n this.rule,\n this.collapsed ? this.collapsedValue : this.visibleValue\n );\n }\n }\n\n getClass(): string {\n switch (this.direction) {\n case Side.Right:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-right';\n } else {\n return 'horizontal-left';\n }\n case Side.Bottom:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-down';\n } else {\n return 'vertical-up';\n }\n case Side.Left:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-left';\n } else {\n return 'horizontal-right';\n }\n case Side.Top:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-up';\n } else {\n return 'vertical-down';\n }\n }\n }\n}\n","<button class=\"collapse-button {{ direction }}\" (click)=\"toggleCollapse()\">\n <div [class]=\"getClass()\"></div>\n</button>\n","/**\n * Removes the given element from the array if it exists within the array.\n * @private\n * @param arr An array.\n * @param obj An element to remove from the array.\n * @returns The given array without the given element removed if it was found; otherwise the array without modifications.\n */\nexport const removeIfExists = <T>(arr: T[], obj: T): T[] => {\n const index = arr.indexOf(obj);\n if (index >= 0) {\n arr.splice(index, 1);\n }\n return arr;\n};\n\n/**\n * Adds the given element to the array if it doesn't exist within the array.\n * @private\n * @param arr An array.\n * @param obj An element to add to the array.\n * @returns The given array with the given element added it was not found; otherwise the array without modifications.\n */\nexport const addIfNotExists = <T>(arr: T[], obj: T): T[] => {\n if (!arr.includes(obj)) {\n arr.push(obj);\n }\n return arr;\n};\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { Point } from '../../util/canvas-util';\r\nimport { addIfNotExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { ValueSet } from './diagram-property';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * A queue of recent actions taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport class ActionQueue {\r\n /**\r\n * Canvas that this action queue belongs to.\r\n * @private\r\n */\r\n canvas: Canvas;\r\n /**\r\n * Maximum number of actions that can be recorded simultaneously.\r\n * When new actions are added past this limit, older actions are removed.\r\n * @private\r\n */\r\n maximum: number;\r\n /**\r\n * List of recorded actions, from oldest to newest.\r\n * @private\r\n */\r\n history: DiagramAction[];\r\n /**\r\n * Index of the last action not counting undone actions. One-indexed. Zero if all actions are undone.\r\n * @private\r\n */\r\n index: number;\r\n\r\n constructor(canvas: Canvas, maximum: number) {\r\n this.canvas = canvas;\r\n this.maximum = maximum;\r\n this.history = [];\r\n this.index = 0;\r\n }\r\n\r\n /**\r\n * Adds an action to the history.\r\n * @private\r\n */\r\n add(action: DiagramAction): void {\r\n if (this.index < this.history.length) {\r\n this.history = this.history.slice(0, this.index);\r\n }\r\n if (this.history.length >= this.maximum) {\r\n this.history = this.history.slice(1, this.history.length);\r\n this.history.push(action);\r\n } else {\r\n this.history.push(action);\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Undoes the last action in the history, not counting undone actions.\r\n * @private\r\n */\r\n undo(): void {\r\n if (this.index > 0) {\r\n --this.index;\r\n this.history[this.index].undo();\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Redoes the last undone action in the history.\r\n * @private\r\n */\r\n redo(): void {\r\n if (this.index < this.history.length) {\r\n this.history[this.index].redo();\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n}\r\n\r\n/**\r\n * An action taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport interface DiagramAction {\r\n undo(): void;\r\n redo(): void;\r\n}\r\n\r\n/**\r\n * Enum listing the actions that can be taken by the user.\r\n * The actions can correspond to a DiagramAction that can be recorded in the action queue of a diagram or they may not correspond to any DiagramAction implementations.\r\n * @public\r\n */\r\nexport enum DiagramActions {\r\n /**\r\n * Action that corresponds to the addition of a connection.\r\n * @see AddConnectionAction\r\n * @public\r\n */\r\n AddConnection = 'add-connection',\r\n /**\r\n * Action that corresponds to the addition of a node.\r\n * @see AddNodeAction\r\n * @public\r\n */\r\n AddNode = 'add-node',\r\n /**\r\n * Action that corresponds to the edition of a field's text content.\r\n * @see EditFieldAction\r\n * @public\r\n */\r\n EditField = 'edit-field',\r\n /**\r\n * Action that corresponds to moving a node.\r\n * @see MoveNodeAction\r\n * @public\r\n */\r\n MoveNode = 'move-node',\r\n /**\r\n * Action that corresponds to removing elements.\r\n * @see RemoveAction\r\n * @public\r\n */\r\n Remove = 'remove',\r\n /**\r\n * Action that corresponds to altering a node's dimensions.\r\n * @see StretchNodeAction\r\n * @public\r\n */\r\n StretchNode = 'stretch-node',\r\n /**\r\n * Action that corresponds to altering a sections's dimensions.\r\n * @see StretchSectionAction\r\n * @public\r\n */\r\n StretchSection = 'stretch-section',\r\n /**\r\n * Action that corresponds to changing the values of a value set.\r\n * @see UpdateValuesAction\r\n * @public\r\n */\r\n UpdateValues = 'update-values',\r\n /**\r\n * Action that corresponds to changing the view point of a diagram by zooming or panning.\r\n * @public\r\n */\r\n Zoom = 'zoom'\r\n}\r\n\r\n/**\r\n * Action which consists of adding a node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class AddNodeAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramNodeType;\r\n coords: Point;\r\n label?: string;\r\n values?: { [key: string]: unknown };\r\n id?: string | undefined;\r\n sectionIds?: (string | undefined)[];\r\n sectionPortIds?: (string | undefined)[][];\r\n sectionPortLabelIds?: (string | undefined)[][];\r\n portIds?: (string | undefined)[];\r\n portLabelIds?: (string | undefined)[];\r\n labelId?: string | undefined;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramNodeType,\r\n coords: Point,\r\n label?: string,\r\n values?: { [key: string]: unknown },\r\n id?: string\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.coords = coords;\r\n this.label = label;\r\n this.values = values;\r\n this.id = id;\r\n }\r\n\r\n undo(): void {\r\n if (this.id) {\r\n this.canvas.model.nodes.remove(this.id);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const node = this.canvas.model.nodes.new(\r\n this.type,\r\n this.coords,\r\n this.id,\r\n this.sectionIds,\r\n this.sectionPortIds,\r\n this.sectionPortLabelIds,\r\n this.portIds,\r\n this.portLabelIds,\r\n this.labelId\r\n );\r\n if (this.values !== undefined) {\r\n node.valueSet.setValues(\r\n structuredClone({\r\n ...node.valueSet.getValues(),\r\n ...this.values\r\n })\r\n );\r\n }\r\n if (node.label) {\r\n node.label.text = this.label || '';\r\n }\r\n // reset our ids in case they were automatically generated\r\n this.id = node.id;\r\n this.sectionIds = node.sections.map((s) => s.id);\r\n this.sectionPortIds = node.sections.map((s) => s.ports.map((p) => p.id));\r\n this.sectionPortLabelIds = node.sections.map((s) =>\r\n s.ports.map((p) => p.label?.id)\r\n );\r\n this.portIds = node.ports.map((p) => p.id);\r\n this.portLabelIds = node.ports.map((p) => p.label?.id);\r\n this.labelId = node.label?.id;\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of moving a node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class MoveNodeAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodeId: string;\r\n from: Point;\r\n to: Point;\r\n\r\n constructor(canvas: Canvas, nodeId: string, from: Point, to: Point) {\r\n this.canvas = canvas;\r\n this.nodeId = nodeId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n undo(): void {\r\n this.canvas.model.nodes.get(this.nodeId)?.move(this.from);\r\n }\r\n\r\n redo(): void {\r\n this.canvas.model.nodes.get(this.nodeId)?.move(this.to);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of changing the dimensions of a node in a given direction.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class StretchNodeAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodeId: string;\r\n direction: Side;\r\n from: number;\r\n to: number;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n nodeId: string,\r\n direction: Side,\r\n from: number,\r\n to: number\r\n ) {\r\n this.canvas = canvas;\r\n this.nodeId = nodeId;\r\n this.direction = direction;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n undo(): void {\r\n this.canvas.model.nodes\r\n .get(this.nodeId)\r\n ?.stretch(this.direction, this.from - this.to);\r\n }\r\n\r\n redo(): void {\r\n this.canvas.model.nodes\r\n .get(this.nodeId)\r\n ?.stretch(this.direction, this.to - this.from);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of changing the dimensions of a section in a given direction.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport class StretchSectionAction implements DiagramAction {\r\n canvas: Canvas;\r\n sectionId: string;\r\n direction: Side;\r\n from: number;\r\n to: number;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n sectionId: string,\r\n direction: Side,\r\n from: number,\r\n to: number\r\n ) {\r\n this.canvas = canvas;\r\n this.sectionId = sectionId;\r\n this.direction = direction;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n undo(): void {\r\n const section = this.canvas.model.sections.get(this.sectionId);\r\n const node = section?.node;\r\n if (node) {\r\n node.stretchSections(\r\n this.direction,\r\n this.from - this.to,\r\n section.indexXInNode,\r\n section.indexYInNode\r\n );\r\n }\r\n }\r\n\r\n redo(): void {\r\n const section = this.canvas.model.sections.get(this.sectionId);\r\n const node = section?.node;\r\n if (node) {\r\n node.stretchSections(\r\n this.direction,\r\n this.to - this.from,\r\n section.indexXInNode,\r\n section.indexYInNode\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of adding a connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport class AddConnectionAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramConnectionType;\r\n startId: string;\r\n endId: string;\r\n id?: string;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramConnectionType,\r\n startId: string,\r\n endId: string,\r\n id?: string\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.startId = startId;\r\n this.endId = endId;\r\n this.id = id;\r\n }\r\n\r\n undo(): void {\r\n if (this.id) {\r\n this.canvas.model.connections.remove(this.id);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const start = this.canvas.model.ports.get(this.startId);\r\n const end = this.canvas.model.ports.get(this.endId);\r\n if (start && end) {\r\n const connection = this.canvas.model.connections.new(\r\n this.type,\r\n start,\r\n end,\r\n this.id\r\n );\r\n // reset our id in case it was automatically generated\r\n this.id = connection.id;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the text of a field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport class EditFieldAction implements DiagramAction {\r\n canvas: Canvas;\r\n fieldId: string;\r\n from: string;\r\n to: string;\r\n\r\n constructor(canvas: Canvas, fieldId: string, from: string, to: string) {\r\n this.canvas = canvas;\r\n this.fieldId = fieldId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n undo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n field.text = this.from;\r\n }\r\n }\r\n\r\n redo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n field.text = this.to;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the values of a value set.\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class UpdateValuesAction implements DiagramAction {\r\n model: DiagramModel;\r\n id: string | undefined;\r\n from: { [key: string]: unknown };\r\n to: { [key: string]: unknown };\r\n\r\n constructor(\r\n model: DiagramModel,\r\n id: string | undefined,\r\n from: { [key: string]: unknown },\r\n to: { [key: string]: unknown }\r\n ) {\r\n this.model = model;\r\n this.id = id;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n getValueSet(): ValueSet | undefined {\r\n if (this.id === undefined) {\r\n return this.model.valueSet;\r\n } else {\r\n return (\r\n this.model.nodes.get(this.id) || this.model.connections.get(this.id)\r\n )?.valueSet;\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.getValueSet()?.setValues(this.from);\r\n }\r\n\r\n redo(): void {\r\n this.getValueSet()?.setValues(this.to);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of removing elements from a diagram.\r\n * @private\r\n */\r\nexport class RemoveAction implements DiagramAction {\r\n model: DiagramModel;\r\n nodes: DiagramNode[] = [];\r\n nodeIds: string[] = [];\r\n sections: DiagramSection[] = [];\r\n sectionIds: string[] = [];\r\n ports: DiagramPort[] = [];\r\n portIds: string[] = [];\r\n connections: DiagramConnection[] = [];\r\n connectionIds: string[] = [];\r\n fields: DiagramField[] = [];\r\n fieldIds: string[] = [];\r\n\r\n constructor(\r\n model: DiagramModel,\r\n nodes: DiagramNode[],\r\n sections: DiagramSection[],\r\n ports: DiagramPort[],\r\n connections: DiagramConnection[],\r\n fields: DiagramField[]\r\n ) {\r\n this.model = model;\r\n this.nodes = nodes;\r\n this.sections = sections;\r\n this.ports = ports;\r\n this.connections = connections;\r\n this.fields = fields;\r\n // if a node is deleted, its label, ports and sections must also be deleted\r\n for (const node of this.nodes) {\r\n if (node.label) {\r\n addIfNotExists(this.fields, node.label);\r\n }\r\n for (const port of node.ports) {\r\n addIfNotExists(this.ports, port);\r\n }\r\n for (const section of node.sections) {\r\n addIfNotExists(this.sections, section);\r\n }\r\n }\r\n // if a section is deleted, its label and ports must also be deleted\r\n for (const section of this.sections) {\r\n if (section.label) {\r\n addIfNotExists(this.fields, section.label);\r\n }\r\n for (const port of section.ports) {\r\n addIfNotExists(this.ports, port);\r\n }\r\n }\r\n // if a port is deleted, its label and connections must also be deleted\r\n for (const port of this.ports) {\r\n if (port.label) {\r\n addIfNotExists(this.fields, port.label);\r\n }\r\n for (const connection of port.outgoingConnections) {\r\n addIfNotExists(this.connections, connection);\r\n }\r\n for (const connection of port.incomingConnections) {\r\n addIfNotExists(this.connections, connection);\r\n }\r\n }\r\n this.nodeIds = this.nodes.map((n) => n.id);\r\n this.sectionIds = this.sections.map((s) => s.id);\r\n this.portIds = this.ports.map((p) => p.id);\r\n this.connectionIds = this.connections.map((c) => c.id);\r\n this.fieldIds = this.fields.map((f) => f.id);\r\n }\r\n\r\n undo(): void {\r\n for (const node of this.nodes) {\r\n this.model.nodes.add(node);\r\n }\r\n for (const section of this.sections) {\r\n this.model.sections.add(section);\r\n }\r\n for (const port of this.ports) {\r\n this.model.ports.add(port);\r\n }\r\n for (const connection of this.connections) {\r\n this.model.connections.add(connection);\r\n }\r\n for (const field of this.fields) {\r\n this.model.fields.add(field);\r\n }\r\n for (const node of this.nodes) {\r\n if (node.label) {\r\n const label = this.model.fields.get(node.label.id);\r\n if (label) {\r\n node.label = label;\r\n }\r\n }\r\n const ports: DiagramPort[] = [];\r\n for (const nodePort of node.ports) {\r\n const port = this.model.ports.get(nodePort.id);\r\n if (port) {\r\n ports.push(port);\r\n }\r\n }\r\n node.ports = ports;\r\n const sections: DiagramSection[] = [];\r\n for (const nodeSection of node.sections) {\r\n const section = this.model.sections.get(nodeSection.id);\r\n if (section) {\r\n sections.push(section);\r\n }\r\n }\r\n node.sections = sections;\r\n }\r\n for (const section of this.sections) {\r\n if (section.node) {\r\n const node = this.model.nodes.get(section.node.id);\r\n if (node) {\r\n section.node = node;\r\n }\r\n }\r\n if (section.label) {\r\n const label = this.model.fields.get(section.label.id);\r\n if (label) {\r\n section.label = label;\r\n }\r\n }\r\n const ports: DiagramPort[] = [];\r\n for (const sectionPort of section.ports) {\r\n const port = this.model.ports.get(sectionPort.id);\r\n if (port) {\r\n ports.push(port);\r\n }\r\n }\r\n section.ports = ports;\r\n }\r\n for (const port of this.ports) {\r\n if (port.rootElement) {\r\n const rootElement =\r\n this.model.nodes.get(port.rootElement.id) ||\r\n this.model.sections.get(port.rootElement.id);\r\n if (rootElement) {\r\n port.rootElement = rootElement;\r\n }\r\n }\r\n if (port.label) {\r\n const label = this.model.fields.get(port.label.id);\r\n if (label) {\r\n port.label = label;\r\n }\r\n }\r\n const outgoingConnections: DiagramConnection[] = [];\r\n for (const portOutgoingConnection of port.outgoingConnections) {\r\n const connection = this.model.connections.get(\r\n portOutgoingConnection.id\r\n );\r\n if (connection) {\r\n outgoingConnections.push(connection);\r\n }\r\n }\r\n port.outgoingConnections = outgoingConnections;\r\n const incomingConnections: DiagramConnection[] = [];\r\n for (const portIncomingConnection of port.incomingConnections) {\r\n const connection = this.model.connections.get(\r\n portIncomingConnection.id\r\n );\r\n if (connection) {\r\n incomingConnections.push(connection);\r\n }\r\n }\r\n port.incomingConnections = incomingConnections;\r\n }\r\n for (const connection of this.connections) {\r\n if (connection.start) {\r\n const start = this.model.ports.get(connection.start.id);\r\n if (start) {\r\n connection.setStart(start);\r\n }\r\n }\r\n if (connection.end) {\r\n const end = this.model.ports.get(connection.end.id);\r\n if (end) {\r\n connection.setEnd(end);\r\n }\r\n }\r\n }\r\n for (const field of this.fields) {\r\n if (field.rootElement) {\r\n const rootElement =\r\n this.model.nodes.get(field.rootElement.id) ||\r\n this.model.sections.get(field.rootElement.id) ||\r\n this.model.ports.get(field.rootElement.id);\r\n if (rootElement) {\r\n field.rootElement = rootElement;\r\n }\r\n }\r\n }\r\n // update view\r\n this.model.canvas?.updateModelInView();\r\n }\r\n\r\n redo(): void {\r\n this.nodes = [];\r\n this.sections = [];\r\n this.ports = [];\r\n this.connections = [];\r\n this.fields = [];\r\n // make shallow copies of the elements with their relationships\r\n for (const nodeId of this.nodeIds) {\r\n const node = this.model.nodes.get(nodeId);\r\n if (node) {\r\n const nodeCopy = clone(node);\r\n if (nodeCopy.label) {\r\n nodeCopy.label = clone(nodeCopy.label);\r\n }\r\n nodeCopy.ports = nodeCopy.ports.map((p: DiagramPort) => clone(p));\r\n nodeCopy.sections = nodeCopy.sections.map((s: DiagramSection) =>\r\n clone(s)\r\n );\r\n this.nodes.push(nodeCopy);\r\n }\r\n }\r\n for (const sectionId of this.sectionIds) {\r\n const section = this.model.sections.get(sectionId);\r\n if (section) {\r\n const sectionCopy = clone(section);\r\n if (sectionCopy.label) {\r\n sectionCopy.label = clone(sectionCopy.label);\r\n }\r\n sectionCopy.ports = sectionCopy.ports.map((p: DiagramPort) => clone(p));\r\n this.sections.push(sectionCopy);\r\n }\r\n }\r\n for (const portId of this.portIds) {\r\n const port = this.model.ports.get(portId);\r\n if (port) {\r\n const portCopy = clone(port);\r\n if (portCopy.rootElement) {\r\n portCopy.rootElement = clone(portCopy.rootElement);\r\n }\r\n if (portCopy.label) {\r\n portCopy.label = clone(portCopy.label);\r\n }\r\n portCopy.outgoingConnections = portCopy.outgoingConnections.map(\r\n (c: DiagramConnection) => clone(c)\r\n );\r\n portCopy.incomingConnections = portCopy.incomingConnections.map(\r\n (c: DiagramConnection) => clone(c)\r\n );\r\n this.ports.push(portCopy);\r\n }\r\n }\r\n for (const connectionId of this.connectionIds) {\r\n const connection = this.model.connections.get(connectionId);\r\n if (connection) {\r\n const connectionCopy = clone(connection);\r\n if (connectionCopy.start) {\r\n connectionCopy.start = clone(connectionCopy.start);\r\n }\r\n if (connectionCopy.end) {\r\n connectionCopy.end = clone(connectionCopy.end);\r\n }\r\n this.connections.push(connectionCopy);\r\n }\r\n }\r\n for (const fieldId of this.fieldIds) {\r\n const field = this.model.fields.get(fieldId);\r\n if (field) {\r\n const fieldCopy = clone(field);\r\n if (fieldCopy.rootElement) {\r\n fieldCopy.rootElement = clone(fieldCopy.rootElement);\r\n }\r\n this.fields.push(fieldCopy);\r\n }\r\n }\r\n // delete the elements\r\n for (const nodeId of this.nodeIds) {\r\n this.model.nodes.remove(nodeId);\r\n }\r\n for (const sectionId of this.sectionIds) {\r\n this.model.sections.remove(sectionId);\r\n }\r\n for (const portId of this.portIds) {\r\n this.model.ports.remove(portId);\r\n }\r\n for (const connectionId of this.connectionIds) {\r\n this.model.connections.remove(connectionId);\r\n }\r\n for (const fieldId of this.fieldIds) {\r\n this.model.fields.remove(fieldId);\r\n }\r\n }\r\n}\r\n\r\nconst clone = <T extends object | undefined | null>(obj: T): T => {\r\n if (obj === undefined || obj === null) {\r\n return obj;\r\n }\r\n return Object.create(obj);\r\n};\r\n","import { Point } from './canvas-util';\n\n/**\n * A two dimensional array of elements of the given class that can extend infinitely in any direction, both positive and negative.\n * @private\n */\nexport class Grid<T> {\n private grid: (T | undefined)[][] = [[undefined]];\n private offsetX = 0;\n private offsetY = 0;\n\n /**\n * Get the minimum x coordinate among the elements in the grid.\n */\n minX(): number {\n return -this.offsetX;\n }\n\n /**\n * Get the maximum x coordinate among the elements in the grid.\n */\n maxX(): number {\n return this.width() - 1 - this.offsetX;\n }\n\n /**\n * Get the minimum y coordinate among the elements in the grid.\n */\n minY(): number {\n return -this.offsetY;\n }\n\n /**\n * Get the maximum y coordinate among the elements in the grid.\n */\n maxY(): number {\n return this.height() - 1 - this.offsetY;\n }\n\n /**\n * Get the total extension of the grid along the x axis.\n */\n width(): number {\n return this.grid[0].length;\n }\n\n /**\n * Get the total extension of the grid along the y axis.\n */\n height(): number {\n return this.grid.length;\n }\n\n /**\n * Add a new column at the start of the x axis.\n */\n addColumnLeft() {\n for (const row of this.grid) {\n row.splice(0, 0, undefined);\n }\n this.offsetX = this.offsetX + 1;\n }\n\n /**\n * Add a new column at the end of the x axis.\n */\n addColumnRight() {\n for (const row of this.grid) {\n row.push(undefined);\n }\n }\n\n /**\n * Add a new row at the start of the y axis.\n */\n addRowTop() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.splice(0, 0, newRow);\n this.offsetY = this.offsetY + 1;\n }\n\n /**\n * Add a new row at the end of the y axis.\n */\n addRowBottom() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.push(newRow);\n }\n\n /**\n * Get the element at the given coordinates or undefined if there is no element at the given coordinates.\n */\n get(coords: Point): T | undefined {\n if (this.grid[coords[1] + this.offsetY]) {\n return this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX];\n }\n return undefined;\n }\n\n /**\n * Set the element at the given coordinates to the given element.\n */\n set(coords: Point, value: T | undefined): void {\n while (coords[0] < -this.offsetX) {\n this.addColumnLeft();\n }\n while (coords[0] >= this.width() - this.offsetX) {\n this.addColumnRight();\n }\n while (coords[1] < -this.offsetY) {\n this.addRowTop();\n }\n while (coords[1] >= this.height() - this.offsetY) {\n this.addRowBottom();\n }\n this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX] = value;\n }\n\n /**\n * Get the closest coordinates to the given coordinates that are not set to an element.\n */\n getClosestEmptyCoordinate(coords: Point): Point {\n if (this.get(coords) === undefined) {\n return coords;\n }\n const foundCoords: Point = [...coords];\n // go in a spiral until found the closest empty coordinate\n for (let i = 1; ; ++i) {\n const increase = i % 2 > 0 ? i : -i;\n const step = increase > 0 ? 1 : -1;\n const goalCoords = [foundCoords[0] + increase, foundCoords[1] + increase];\n for (let j = foundCoords[0]; j !== goalCoords[0] + step; j += step) {\n foundCoords[0] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n for (let j = foundCoords[1]; j !== goalCoords[1] + step; j += step) {\n foundCoords[1] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n }\n }\n}\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to depth first search.\r\n * @public\r\n */\r\nexport class AdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = [...model.nodes];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n arrangeNode(\r\n nodesToBeArranged[0],\r\n nodeArrangement,\r\n [0, 0],\r\n nodesToBeArranged\r\n );\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n\r\nconst arrangeNode = (\r\n node: DiagramNode,\r\n nodeArrangement: Grid<DiagramNode>,\r\n coords: Point,\r\n nodesToBeArranged: DiagramNode[]\r\n): void => {\r\n const placementCoords = nodeArrangement.getClosestEmptyCoordinate(coords);\r\n nodeArrangement.set(placementCoords, node);\r\n removeIfExists(nodesToBeArranged, node);\r\n for (const adjacency of node.getAdjacentNodes()) {\r\n if (nodesToBeArranged.includes(adjacency)) {\r\n arrangeNode(\r\n adjacency,\r\n nodeArrangement,\r\n placementCoords,\r\n nodesToBeArranged\r\n );\r\n }\r\n }\r\n};\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to breadth first search.\r\n * @public\r\n */\r\nexport class BreadthAdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = [...model.nodes];\r\n const nodeGridIndices: { [key: string]: Point } = {};\r\n const firstNode = nodesToBeArranged[0];\r\n\r\n let currentNodeLevel = [firstNode];\r\n nodeGridIndices[firstNode.id] = [0, 0];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n const nextNodeLevel: DiagramNode[] = [];\r\n for (const nodeInThisLevel of currentNodeLevel) {\r\n nodeArrangement.set(\r\n nodeArrangement.getClosestEmptyCoordinate(\r\n nodeGridIndices[nodeInThisLevel.id]\r\n ),\r\n nodeInThisLevel\r\n );\r\n removeIfExists(nodesToBeArranged, nodeInThisLevel);\r\n const nodesAdjacentToThisNode = nodeInThisLevel.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n nextNodeLevel.push(adjacentNode);\r\n nodeGridIndices[adjacentNode.id] =\r\n nodeGridIndices[nodeInThisLevel.id];\r\n }\r\n }\r\n }\r\n if (nextNodeLevel.length > 0) {\r\n currentNodeLevel = nextNodeLevel;\r\n } else if (nodesToBeArranged.length > 0) {\r\n const disconnectedNode = nodesToBeArranged[0];\r\n currentNodeLevel = [disconnectedNode];\r\n nodeGridIndices[disconnectedNode.id] =\r\n nodeArrangement.getClosestEmptyCoordinate([0, 0]);\r\n }\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by a breadth first search system according to their distance to the first node in the list.\r\n * @public\r\n */\r\nexport class BreadthLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n let nodesToBeArranged = [...model.nodes];\r\n\r\n // Arrange nodes by a breadth first search\r\n const firstNode = nodesToBeArranged[0];\r\n removeIfExists(nodesToBeArranged, firstNode);\r\n /*\r\n * Node arrangement is a list of lists where:\r\n * the first list is the first node in the list of nodes\r\n * the second list is the nodes connected directly to the first node\r\n * the third list is the nodes connected directly to the nodes in the second list\r\n * and so on\r\n */\r\n const nodeArrangement = [[firstNode]];\r\n while (nodesToBeArranged.length > 0) {\r\n const lastRowOfNodes = nodeArrangement[nodeArrangement.length - 1];\r\n const nodesInNextRow: DiagramNode[] = [];\r\n for (const nodeInLastRow of lastRowOfNodes) {\r\n const nodesAdjacentToThisNode = nodeInLastRow.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n removeIfExists(nodesToBeArranged, adjacentNode);\r\n nodesInNextRow.push(adjacentNode);\r\n }\r\n }\r\n }\r\n if (nodesInNextRow.length > 0) {\r\n nodesInNextRow.sort((a, b) => b.type.priority - a.type.priority);\r\n nodeArrangement.push(nodesInNextRow);\r\n } else {\r\n // what remains in nodesToBeArranged are the nodes which aren't connected to any other node\r\n // we add them as one last line of nodes to the node arrangement\r\n nodeArrangement.push(nodesToBeArranged);\r\n nodesToBeArranged = [];\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (const nodeArrangementRow of nodeArrangement) {\r\n let heightAccumulator = 0;\r\n for (const node of nodeArrangementRow) {\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangementRow.map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { Side } from './svg-util';\n\n/**\n * A point on a canvas defined as its coordinates along the x and y axes.\n * @see DiagramCanvas\n * @public\n */\nexport type Point = [number, number];\n/**\n * A line on a canvas defined as its start point and end point.\n * @see DiagramCanvas\n * @public\n */\nexport type Line = [Point, Point];\n/**\n * A rectangle on a canvas defined as the points of its opposite corners.\n * @see DiagramCanvas\n * @public\n */\nexport type Rectangle = [Point, Point];\n\n/**\n * Round the coordinates of the given point to the nearest whole number.\n * @public\n * @param point A point.\n * @returns A new point with whole coordinates.\n */\nexport const roundPoint = (point: Point): Point => {\n return [Math.round(point[0]), Math.round(point[1])];\n};\n\n/**\n * Checks if the given coordinate is in the range given by an starting coordinate and an ending coordinate.\n * @public\n * @param coordinate A coordinate to check its presence in the range.\n * @param start A coordinate determining one of the extremes in the range.\n * @param end A coordinate determine one of the extremes in the range.\n * @returns `true` if the given coordinate is in the given range; `false` otherwise.\n */\nexport const between = (\n coordinate: number,\n start: number,\n end: number\n): boolean => {\n if (start < end) {\n return start <= coordinate && coordinate <= end;\n } else {\n return end <= coordinate && coordinate <= start;\n }\n};\n\n/**\n * Moves the given coordinate according to the given changes in coordinates.\n * @public\n * @param oldCoordinate A coordinate.\n * @param oldCoordinates A range of coordinates.\n * @param newCoordinates A range of coordinates.\n * @returns A new coordinate.\n */\nexport const translateCoordinate = (\n oldCoordinate: number,\n oldCoordinates: [number, number],\n newCoordinates: [number, number]\n): number => {\n return (\n ((oldCoordinate - oldCoordinates[0]) /\n (oldCoordinates[1] - oldCoordinates[0])) *\n (newCoordinates[1] - newCoordinates[0]) +\n newCoordinates[0]\n );\n};\n\n/**\n * Moves the coordinates of the given point according to the given changes in coordinates.\n * @public\n * @param oldPoint A point.\n * @param oldCoordsX A range of coordinates along the x axis.\n * @param oldCoordsY A range of coordinates along the y axis.\n * @param newCoordsX A range of coordinates along the x axis.\n * @param newCoordsY A range of coordinates along the y axis.\n * @returns A new point.\n */\nexport const translatePoint = (\n oldPoint: Point,\n oldCoordsX: [number, number],\n oldCoordsY: [number, number],\n newCoordsX: [number, number],\n newCoordsY: [number, number]\n): Point => {\n return [\n translateCoordinate(oldPoint[0], oldCoordsX, newCoordsX),\n translateCoordinate(oldPoint[1], oldCoordsY, newCoordsY)\n ];\n};\n\n/**\n * Calculates the result of moving the given point by the given distance in the given direction.\n * @public\n * @param point A point.\n * @param direction A direction.\n * @param distance A distance.\n * @returns A new point which differs from the given point by the given distance in the given direction.\n */\nexport const movePoint = (\n point: Point,\n direction: Side,\n distance: number\n): Point => {\n switch (direction) {\n case Side.Right:\n return [point[0] + distance, point[1]];\n case Side.Left:\n return [point[0] - distance, point[1]];\n case Side.Bottom:\n return [point[0], point[1] + distance];\n case Side.Top:\n return [point[0], point[1] - distance];\n }\n};\n\n/**\n * Checks whether two given points are the same point, that is, they have the same coordinates and are not NaN.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns `true` if the two points have the same coordinates; `false` otherwise.\n */\nexport const equals = (point1: Point, point2: Point): boolean => {\n return point1[0] === point2[0] && point1[1] === point2[1];\n};\n\n/**\n * Calculates the euclidean distance between two points.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns The euclidean distance between the given points.\n */\nexport const distanceBetweenPoints = (point1: Point, point2: Point): number => {\n return ((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2) ** 0.5;\n};\n\n/**\n * Checks whether the given point is inside the given line.\n * @public\n * @param line A line.\n * @param point A point.\n * @returns `true` if the point is contained within the line; `false` otherwise.\n */\nexport const lineContainsPoint = (line: Line, point: Point): boolean => {\n const alphaX = (point[0] - line[0][0]) / (line[1][0] - line[0][0]);\n if (alphaX < 0 || 1 < alphaX) {\n return false;\n }\n const alphaY = (point[1] - line[0][1]) / (line[1][1] - line[0][1]);\n return alphaX === alphaY;\n};\n\n/**\n * Checks whether the given point is inside the given rectaingle.\n * @public\n * @param rectangle A rectangle.\n * @param point A point.\n * @returns `true` if the point is contained within the rectangle; `false` otherwise.\n */\nexport const rectangleContainsPoint = (\n rectangle: Rectangle,\n point: Point\n): boolean => {\n return (\n between(point[0], rectangle[0][0], rectangle[1][0]) &&\n between(point[1], rectangle[0][1], rectangle[1][1])\n );\n};\n\n/**\n * Checks whether the two given lines share at least one point.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines intersect; `false` otherwise.\n */\nexport const linesIntersect = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they intersect if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they intersect if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // if the lines share endpoints, they intersect\n if (\n equals(line1[0], line2[0]) ||\n equals(line1[0], line2[1]) ||\n equals(line2[0], line1[1]) ||\n equals(line1[1], line2[1])\n ) {\n return true;\n }\n // if both lines are lines that don't share endpoints, calculate\n const dx0 = line1[1][0] - line1[0][0];\n const dx1 = line2[1][0] - line2[0][0];\n const dy0 = line1[1][1] - line1[0][1];\n const dy1 = line2[1][1] - line2[0][1];\n const p0 =\n dy1 * (line2[1][0] - line1[0][0]) - dx1 * (line2[1][1] - line1[0][1]);\n const p1 =\n dy1 * (line2[1][0] - line1[1][0]) - dx1 * (line2[1][1] - line1[1][1]);\n const p2 =\n dy0 * (line1[1][0] - line2[0][0]) - dx0 * (line1[1][1] - line2[0][1]);\n const p3 =\n dy0 * (line1[1][0] - line2[1][0]) - dx0 * (line1[1][1] - line2[1][1]);\n return p0 * p1 <= 0 && p2 * p3 <= 0;\n};\n\n/**\n * Checks whether the two given lines share at least one point and have the same slope.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines overlap; `false` otherwise.\n */\nexport const linesOverlap = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they overlap if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they overlap if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // in order for part of the lines to overlap,\n // one of the lines must include the starting point of the other and\n // one of the lines must include the ending point of the other\n return (\n (lineContainsPoint(line1, line2[0]) ||\n lineContainsPoint(line2, line1[0])) &&\n (lineContainsPoint(line1, line2[1]) || lineContainsPoint(line2, line1[1]))\n );\n};\n\n/**\n * Checks whether the given line shares at least one point with the given rectangle.\n * @public\n * @param line A line.\n * @param rectangle A rectangle.\n * @returns `true` if the line intersects with the rectangle; `false` otherwise.\n */\nexport const lineIntersectsRectangle = (\n line: Line,\n rectangle: Rectangle\n): boolean => {\n // first corner of the rectangle\n const point1: Point = rectangle[0];\n // second corner of the rectangle\n const point2: Point = [rectangle[0][0], rectangle[1][1]];\n // third corner of the rectangle\n const point3: Point = rectangle[1];\n // fourth corner of the rectangle\n const point4: Point = [rectangle[1][0], rectangle[0][1]];\n return (\n linesIntersect(line, [point1, point2]) ||\n linesIntersect(line, [point2, point3]) ||\n linesIntersect(line, [point3, point4]) ||\n linesIntersect(line, [point4, point1])\n );\n};\n","import { Point, distanceBetweenPoints } from '../../../util/canvas-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which attracts connected nodes and repels unconnected nodes.\r\n * @public\r\n */\r\nexport class ForceLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // as a starting point, we apply a simple layout\r\n new BreadthLayout().apply(model);\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const coolingFactor = 0.99;\r\n const minimumTemperature = 1;\r\n const attractionFactor = 0.1;\r\n const repulsionFactor = 200_000;\r\n const gapRepulsionFactor = 0.5;\r\n const shiftNodeIfOverlap = 1;\r\n const gravityFactor = 0.002;\r\n let temperature = 100;\r\n\r\n while (temperature > minimumTemperature) {\r\n temperature = temperature * coolingFactor;\r\n // calculate the center of the diagram for applying gravity\r\n const diagramCenterCoords: Point = [0, 0];\r\n if (gravityFactor > 0) {\r\n for (const node of model.nodes) {\r\n diagramCenterCoords[0] =\r\n diagramCenterCoords[0] + node.coords[0] + node.width / 2;\r\n diagramCenterCoords[1] =\r\n diagramCenterCoords[1] + node.coords[1] + node.width / 2;\r\n }\r\n diagramCenterCoords[0] = diagramCenterCoords[0] / model.nodes.length;\r\n diagramCenterCoords[1] = diagramCenterCoords[1] / model.nodes.length;\r\n }\r\n\r\n for (const node1 of model.nodes) {\r\n const node1Adjacencies = node1.getAdjacentNodes();\r\n for (const node2 of model.nodes) {\r\n const node1CenterCoords: Point = [\r\n node1.coords[0] + node1.width / 2,\r\n node1.coords[1] + node1.height / 2\r\n ];\r\n const node2CenterCoords: Point = [\r\n node2.coords[0] + node2.width / 2,\r\n node2.coords[1] + node2.height / 2\r\n ];\r\n const distanceBetweenNodes = distanceBetweenPoints(\r\n node1.coords,\r\n node2.coords\r\n );\r\n const newNode2Coords: Point = [node2.coords[0], node2.coords[1]];\r\n // apply attraction forces between connected nodes\r\n if (node1Adjacencies.includes(node2)) {\r\n if (distanceBetweenNodes > 0) {\r\n if (\r\n distanceBetweenNodes >\r\n gapSize +\r\n (Math.max(node1.width, node1.height) +\r\n Math.max(node2.width, node2.height)) /\r\n 2\r\n ) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n attractionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n attractionFactor;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n gapRepulsionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n gapRepulsionFactor;\r\n }\r\n }\r\n }\r\n // apply repulsion forces between nodes\r\n if (distanceBetweenNodes > 0) {\r\n const force =\r\n repulsionFactor / (distanceBetweenNodes * distanceBetweenNodes);\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (force * (node2CenterCoords[0] - node1CenterCoords[0])) /\r\n distanceBetweenNodes;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (force * (node2CenterCoords[1] - node1CenterCoords[1])) /\r\n distanceBetweenNodes;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n newNode2Coords[1] =\r\n newNode2Coords[1] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n }\r\n // apply gravity force\r\n if (gravityFactor > 0) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - diagramCenterCoords[0]) * gravityFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - diagramCenterCoords[1]) * gravityFactor;\r\n }\r\n // limit force\r\n if (newNode2Coords[0] - node2.coords[0] > temperature) {\r\n newNode2Coords[0] = node2.coords[0] + temperature;\r\n } else if (newNode2Coords[0] - node2.coords[0] < -temperature) {\r\n newNode2Coords[0] = node2.coords[0] - temperature;\r\n }\r\n if (newNode2Coords[1] - node2.coords[1] > temperature) {\r\n newNode2Coords[1] = node2.coords[1] + temperature;\r\n } else if (newNode2Coords[1] - node2.coords[1] < -temperature) {\r\n newNode2Coords[1] = node2.coords[1] - temperature;\r\n }\r\n\r\n node2.move(newNode2Coords);\r\n }\r\n }\r\n }\r\n\r\n if (model.canvas && model.canvas.snapToGrid) {\r\n for (const node of model.nodes) {\r\n const snappedCoords = model.canvas.getClosestGridPoint(node.coords);\r\n node.move(snappedCoords);\r\n }\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a horizontal line.\r\n * @public\r\n */\r\nexport class HorizontalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let widthAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([widthAccumulator, 0]);\r\n widthAccumulator += node.width + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by their priority first.\r\n * @public\r\n */\r\nexport class PriorityLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const maximumPriority = Math.max(\r\n ...model.nodes.types.all().map((n) => n.priority)\r\n );\r\n const minimumPriority = Math.min(\r\n ...model.nodes.types.all().map((n) => n.priority)\r\n );\r\n if (maximumPriority === minimumPriority) {\r\n // if there's no disparity in priorities, just use breadth layout\r\n new BreadthLayout().apply(model);\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const nodesToBeArranged = [...model.nodes];\r\n const nodeArrangement: DiagramNode[][] = [];\r\n\r\n const nodesWithMaximumPriorityToBeArranged = model.nodes.filter(\r\n undefined,\r\n maximumPriority\r\n );\r\n const nodesWithMaximumPriority: DiagramNode[] = [];\r\n if (nodesWithMaximumPriorityToBeArranged.length > 1) {\r\n // use bfs to sort nodes by distance to the first node\r\n const bfsRoot = nodesWithMaximumPriorityToBeArranged[0];\r\n nodesWithMaximumPriorityToBeArranged.splice(0, 1);\r\n nodesWithMaximumPriority.push(bfsRoot);\r\n const bfsQueue = [bfsRoot];\r\n const bfsExplored = [bfsRoot];\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n if (nodesWithMaximumPriorityToBeArranged.includes(bfsNode)) {\r\n nodesWithMaximumPriority.push(bfsNode);\r\n removeIfExists(nodesWithMaximumPriorityToBeArranged, bfsNode);\r\n }\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n // nodes that are disconnected from other nodes\r\n for (const node of nodesWithMaximumPriorityToBeArranged) {\r\n nodesWithMaximumPriority.push(node);\r\n }\r\n } else {\r\n nodesWithMaximumPriority.push(nodesWithMaximumPriorityToBeArranged[0]);\r\n }\r\n for (const node of nodesWithMaximumPriority) {\r\n removeIfExists(nodesToBeArranged, node);\r\n nodeArrangement.push([node]);\r\n }\r\n // last column, for disconnected nodes\r\n nodeArrangement.push([]);\r\n\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n while (nodesToBeArranged.length > 0) {\r\n // use bfs to find the closest high priority node\r\n const nodeToBeArranged = nodesToBeArranged[0];\r\n nodesToBeArranged.splice(0, 1);\r\n const bfsQueue = [nodeToBeArranged];\r\n const bfsExplored = [nodeToBeArranged];\r\n let bfsFound = false;\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n const indexOfBfsNode = nodesWithMaximumPriority.indexOf(bfsNode);\r\n if (indexOfBfsNode >= 0) {\r\n nodeArrangement[indexOfBfsNode].push(nodeToBeArranged);\r\n bfsFound = true;\r\n break;\r\n } else {\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n }\r\n if (!bfsFound) {\r\n // node is disconnected from any of the high priority nodes\r\n nodeArrangement[nodeArrangement.length - 1].push(nodeToBeArranged);\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (let i = 0; i < nodeArrangement.length; ++i) {\r\n let heightAccumulator = 0;\r\n for (let j = 0; j < nodeArrangement[i].length; ++j) {\r\n const node = nodeArrangement[i][j];\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangement[i].map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a vertical line.\r\n * @public\r\n */\r\nexport class VerticalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let heightAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([0, heightAccumulator]);\r\n heightAccumulator += node.height + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\nimport { AdjacencyLayout } from './adjacency-layout';\nimport { BreadthAdjacencyLayout } from './breadth-adjacency-layout';\nimport { BreadthLayout } from './breadth-layout';\nimport { ForceLayout } from './force-layout';\nimport { HorizontalLayout } from './horizontal-layout';\nimport { PriorityLayout } from './priority-layout';\nimport { VerticalLayout } from './vertical-layout';\n\n/**\n * A layout algorithm that can be applied to a diagram.\n * @public\n */\nexport interface DiagramLayout {\n /**\n * Rearranges the diagram elements of the given model according to a layout algorithm.\n * @public\n */\n apply(model: DiagramModel): DiagramModel;\n}\n\n/**\n * Mapping of available layout algorithms.\n */\nexport const layouts: { [key: string]: DiagramLayout } = {\n adjacency: new AdjacencyLayout(),\n breadth: new BreadthLayout(),\n 'breadth-adjacency': new BreadthAdjacencyLayout(),\n force: new ForceLayout(),\n horizontal: new HorizontalLayout(),\n priority: new PriorityLayout(),\n vertical: new VerticalLayout()\n};\n","/**\r\n * User events.\r\n * @private\r\n */\r\nexport enum Events {\r\n Blur = 'blur',\r\n Change = 'change',\r\n Click = 'click',\r\n DoubleClick = 'dblclick',\r\n Focus = 'focus',\r\n FocusIn = 'focusin',\r\n FocusOut = 'focusout',\r\n Input = 'input',\r\n KeyUp = 'keyup',\r\n MouseMove = 'mousemove',\r\n MouseOut = 'mouseout',\r\n MouseOver = 'mouseover',\r\n Wheel = 'wheel'\r\n}\r\n\r\n/**\r\n * Keys in keyboard events.\r\n * @private\r\n */\r\nexport enum Keys {\r\n Alt = 'Alt',\r\n AltGraph = 'AltGraph',\r\n ArrowDown = 'ArrowDown',\r\n ArrowLeft = 'ArrowLeft',\r\n ArrowRight = 'ArrowRight',\r\n ArrowUp = 'ArrowUp',\r\n Backspace = 'Backspace',\r\n Control = 'Control',\r\n Delete = 'Delete',\r\n End = 'End',\r\n Enter = 'Enter',\r\n Escape = 'Escape',\r\n Home = 'Home',\r\n OS = 'OS',\r\n PageDown = 'PageDown',\r\n PageUp = 'PageUp',\r\n Shift = 'Shift',\r\n Tab = 'Tab'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's drag functionality.\r\n * @private\r\n */\r\nexport enum DragEvents {\r\n Drag = 'drag',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's zoom functionality.\r\n * @private\r\n */\r\nexport enum ZoomEvents {\r\n Zoom = 'zoom',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n","import { Point } from './canvas-util';\nimport { Side } from './svg-util';\n\n/**\n * An enumeration of the possible shapes of a line.\n * @public\n */\nexport enum LineShape {\n /**\n * A line that goes between its points taking the shortest euclidean distance.\n * @public\n */\n Straight = 'straight',\n /**\n * A line that goes between its points using bezier splines.\n * @public\n */\n Bezier = 'bezier',\n /**\n * A line that goes between its points moving parallel to the axes of coordinates.\n * @public\n */\n Square = 'square'\n}\n\n/**\n * An enumeration of the possible styles of a line.\n * @public\n */\nexport enum LineStyle {\n /**\n * A solid uninterrupted line.\n * @public\n */\n Solid = 'solid',\n /**\n * A dashed line with little separation between the dashes.\n * @public\n */\n Dashed = 'dashed',\n /**\n * A dashed line with wide gaps between the dashes.\n * @public\n */\n GappedDashes = 'gapped-dashes',\n /**\n * A dotted line.\n * @public\n */\n Dotted = 'dotted'\n}\n\n/**\n * The default minimum distance before turn used by the linePath function.\n * @private\n */\nconst MINIMUM_DISTANCE_BEFORE_TURN = 20;\n\n/**\n * Calculates the path of an SVG line with the given parameters.\n * @private\n */\nexport const linePath = (\n shape: LineShape,\n points: Point[],\n startDirection?: Side | undefined,\n endDirection?: Side | undefined,\n minimumDistanceBeforeTurn?: number\n): string => {\n if (points.length === 0) {\n return '';\n } else if (points.length === 1) {\n return `M ${points[0][0]} ${points[0][1]}`;\n } else {\n minimumDistanceBeforeTurn =\n minimumDistanceBeforeTurn || MINIMUM_DISTANCE_BEFORE_TURN;\n let result = '';\n let currentDirection: Side | undefined;\n let nextDirection: Side | undefined;\n switch (shape) {\n case LineShape.Straight:\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n break;\n case LineShape.Bezier:\n currentDirection = startDirection;\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n if (i + 1 >= points.length) {\n nextDirection = endDirection;\n } else {\n if (\n Math.abs(points[i][0] - points[i - 1][0]) <\n Math.abs(points[i][1] - points[i - 1][1])\n ) {\n if (points[i][1] > points[i - 1][1]) {\n nextDirection = Side.Bottom;\n } else {\n nextDirection = Side.Top;\n }\n } else {\n if (points[i][0] > points[i - 1][0]) {\n nextDirection = Side.Right;\n } else {\n nextDirection = Side.Left;\n }\n }\n }\n if (currentDirection !== undefined) {\n let controlPoint1 = '';\n let controlPoint2 = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (currentDirection) {\n case Side.Bottom:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint1 = `${points[i - 1][0] + controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n case Side.Left:\n controlPoint1 = `${points[i - 1][0] - controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n }\n if (nextDirection !== undefined) {\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint2 = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint2 = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` C ${controlPoint1} ${controlPoint2} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` Q ${controlPoint1} ${points[i][0]} ${points[i][1]}`;\n }\n } else {\n if (nextDirection !== undefined) {\n let controlPoint = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` Q ${controlPoint} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n }\n currentDirection = nextDirection;\n }\n break;\n case LineShape.Square:\n result += `M ${points[0][0]} ${points[0][1]}`;\n if (startDirection) {\n switch (startDirection) {\n case Side.Bottom:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(1, 0, [\n points[0][0] + minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n case Side.Left:\n points.splice(1, 0, [\n points[0][0] - minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n }\n }\n if (endDirection) {\n switch (endDirection) {\n case Side.Bottom:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] + minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n case Side.Left:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] - minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n }\n }\n for (let i = 1; i < points.length; ++i) {\n if (currentDirection !== undefined) {\n switch (currentDirection) {\n case Side.Bottom:\n if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] + minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Top:\n if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] - minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Right:\n if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] + minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n case Side.Left:\n if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] - minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n }\n } else {\n if (points[i][0] !== points[i - 1][0]) {\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n }\n if (points[i][1] !== points[i - 1][1]) {\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n }\n }\n }\n break;\n }\n return result;\n }\n};\n\n/**\n * Calculates the dasharray property of an SVG line corresponding to the given line style and width.\n * @private\n */\nexport const lineStyleDasharray = (style: LineStyle, width: number): string => {\n switch (style) {\n case LineStyle.Dotted:\n return `${width}`;\n case LineStyle.Dashed:\n return `${4 * width} ${width}`;\n case LineStyle.GappedDashes:\n return `${4 * width} ${4 * width}`;\n case LineStyle.Solid:\n default:\n return 'none';\n }\n};\n","/**\n * An enumeration of possible closed shapes.\n * @public\n */\nexport enum ClosedShape {\n /**\n * An ellipse shape.\n * @public\n */\n Ellipse = 'ellipse',\n /**\n * A nonexistent shape.\n * @public\n */\n Empty = 'empty',\n /**\n * A folder-like shape.\n * @public\n */\n Folder = 'folder',\n /**\n * An hexagon shape.\n * @public\n */\n Hexagon = 'hexagon',\n /**\n * An octagon shape.\n * @public\n */\n Octagon = 'octagon',\n /**\n * A shape delimited by curves with a fixed radius, with differences in dimensions supplemented by straight lines.\n * @public\n */\n Pill = 'pill',\n /**\n * A rectangle shape.\n * @public\n */\n Rectangle = 'rectangle',\n /**\n * A rhombus shape.\n * @public\n */\n Rhombus = 'rhombus',\n /**\n * A rectangle shape with rounded corners.\n * @public\n */\n RoundedRectangle = 'rounded-rectangle',\n /**\n * A sticky note-like shape.\n * @public\n */\n StickyNote = 'sticky-note'\n}\n\n/**\n * Get the SVG path of the correspondign closed shape, starting at the given x and y coordinates, with the given width and height.\n * @private\n */\nexport const generalClosedPath = (\n shape: ClosedShape,\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n switch (shape) {\n case ClosedShape.Ellipse:\n return ellipsePath(x, y, width, height);\n case ClosedShape.Empty:\n return emptyPath();\n case ClosedShape.Folder:\n return folderPath(x, y, width, height);\n case ClosedShape.Hexagon:\n return hexagonPath(x, y, width, height);\n case ClosedShape.Octagon:\n return octagonPath(x, y, width, height);\n case ClosedShape.Pill:\n return pillPath(x, y, width, height);\n case ClosedShape.Rectangle:\n return rectanglePath(x, y, width, height);\n case ClosedShape.Rhombus:\n return rhombusPath(x, y, width, height);\n case ClosedShape.RoundedRectangle:\n return roundedRectanglePath(x, y, width, height);\n case ClosedShape.StickyNote:\n return stickyNotePath(x, y, width, height);\n default:\n return rectanglePath(x, y, width, height);\n }\n};\n\n/**\n * Generates an ellipse SVG path.\n * @see ClosedShape\n * @private\n */\nexport const ellipsePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} A ${width / 2} ${height / 2} 0 0 0 ${\n x + width / 2\n } ${y + height} A ${width / 2} ${height / 2} 0 1 0 ${x + width / 2} ${y} Z`;\n};\n\n/**\n * Generates an empty SVG path.\n * @see ClosedShape\n * @private\n */\nexport const emptyPath = (): string => {\n return 'Z';\n};\n\n/**\n * Generates a folder SVG path.\n * @see ClosedShape\n * @private\n */\nexport const folderPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width / 3} ${y} L ${x + width / 2} ${\n y + height / 6\n } L ${x + width} ${y + height / 6} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates an hexagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const hexagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 2} L ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates an octagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const octagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 4} L ${x + width} ${y + (3 * height) / 4} L ${\n x + (3 * width) / 4\n } ${y + height} L ${x + width / 4} ${y + height} L ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} L ${x + width / 4} ${y} Z`;\n};\n\n/**\n * Generates a pill SVG path.\n * @see ClosedShape\n * @private\n */\nexport const pillPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n if (height < width) {\n return `M ${x + height / 2} ${y} L ${x + width - height / 2} ${y} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + width} ${y + height / 2} A ${height / 2} ${\n height / 2\n } 0 0 1 ${x + width - height / 2} ${y + height} L ${x + height / 2} ${\n y + height\n } A ${height / 2} ${height / 2} 0 0 1 ${x} ${y + height / 2} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + height / 2} ${y} Z`;\n } else if (height > width) {\n return `M ${x} ${y + width / 2} L ${x} ${y + height - width / 2} A ${\n width / 2\n } ${width / 2} 0 0 0 ${x + width / 2} ${y + height} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x + width} ${y + height - width / 2} L ${x + width} ${\n y + width / 2\n } A ${width / 2} ${width / 2} 0 0 0 ${x + width / 2} ${y} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x} ${y + width / 2} Z`;\n } else {\n return ellipsePath(x, y, width, height);\n }\n};\n\n/**\n * Generates a rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates a rhombus SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rhombusPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} L ${x + width} ${y + height / 2} L ${\n x + width / 2\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates a rounded rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const roundedRectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} A ${\n width / 4\n } ${height / 4} 0 0 1 ${x + width} ${y + height / 4} L ${x + width} ${\n y + (3 * height) / 4\n } A ${width / 4} ${height / 4} 0 0 1 ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} A ${width / 4} ${height / 4} 0 0 1 ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} A ${width / 4} ${height / 4} 0 0 1 ${\n x + width / 4\n } ${y} Z`;\n};\n\n/**\n * Generates a sticky note SVG path.\n * @see ClosedShape\n * @private\n */\nexport const stickyNotePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + (3 * width) / 4} ${y} L ${x + (3 * width) / 4} ${\n y + height / 4\n } L ${x + (3 * width) / 4} ${y} L ${x + width} ${y + height / 4} L ${\n x + (3 * width) / 4\n } ${y + height / 4} L ${x + width} ${y + height / 4} L ${x + width} ${\n y + height\n } L ${x} ${y + height} Z`;\n};\n","export const numberOfColumns = (s: string): number => {\n return Math.max(...s.split('\\n').map((a) => a.length));\n};\nexport const numberOfRows = (s: string): number => {\n return s.match(/\\n/g)?.length || 0;\n};\n","import * as d3 from 'd3';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { removeIfExists } from '../../util/list-util';\r\n\r\n/**\r\n * Default priority value for diagram elements.\r\n * @private\r\n */\r\nexport const DEFAULT_PRIORITY = 0;\r\n\r\n/**\r\n * Represents an object which exists as part of a diagram model.\r\n * @public\r\n * @see DiagramModel\r\n */\r\nexport interface DiagramEntity {\r\n /**\r\n * Identifier that uniquely identifies this entity within its diagram model.\r\n * @public\r\n */\r\n get id(): string;\r\n}\r\n\r\n/**\r\n * Represents an object which exists as part of a specific diagram model and has a visual representation in a diagram canvas.\r\n * @public\r\n * @see DiagramModel\r\n * @see DiagramCanvas\r\n */\r\nexport abstract class DiagramElement implements DiagramEntity {\r\n /**\r\n * Diagram model this diagram element is part of.\r\n * @private\r\n */\r\n model: DiagramModel;\r\n private _id: string;\r\n get id(): string {\r\n return this._id;\r\n }\r\n /**\r\n * Whether this diagram element is currently highlighted by the user.\r\n * @private\r\n */\r\n highlighted = false;\r\n /**\r\n * Whether this diagram element is currently selected by the user.\r\n * @private\r\n */\r\n selected = false;\r\n\r\n constructor(model: DiagramModel, id: string) {\r\n this.model = model;\r\n this._id = id;\r\n }\r\n\r\n /**\r\n * Get the priority of this element to calculate whether it should be filtered out in the view or not.\r\n * @public\r\n */\r\n abstract getPriority(): number;\r\n\r\n /**\r\n * Update the view of the canvas to show the current state of this element.\r\n * @public\r\n */\r\n abstract updateInView(): void;\r\n\r\n /**\r\n * Obtain the selection of this element.\r\n * @private\r\n */\r\n select(): d3.Selection<SVGGElement, unknown, null, unknown> | undefined {\r\n return this.model.canvas?.selectCanvasView()?.select(`g#${this.id}`);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a collection of diagram entities of a type that exists as part of a diagram model.\r\n * @public\r\n * @see DiagramEntity\r\n * @see DiagramModel\r\n */\r\nexport class DiagramEntitySet<E extends DiagramEntity> implements Iterable<E> {\r\n /**\r\n * The list of entities contained in this set.\r\n * @private\r\n */\r\n protected entities: E[] = [];\r\n /**\r\n * A mapping of entity ids to their corresponding entity in this set for quickly fetching entities based on their id.\r\n * @private\r\n */\r\n protected entityMap: { [id: string]: E } = {};\r\n\r\n /**\r\n * The number of entities of this set.\r\n * @public\r\n */\r\n get length(): number {\r\n return this.entities.length;\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set.\r\n * @public\r\n * @returns An array containing all of the entities of this set.\r\n */\r\n all(): E[] {\r\n return [...this.entities];\r\n }\r\n\r\n /**\r\n * Adds an entity to this set if there are no entities with the same id. Has no effect if there already exists an entity with the same id as the given entity.\r\n * For creating entities with relationships with other entities, the new() method should be used instead. The add() method adds an entity but doesn't take care of setting that entity's relationships with other entities.\r\n * @private\r\n * @param entity An entity to be added to this set.\r\n */\r\n add(entity: E): void {\r\n if (this.entityMap[entity.id] === undefined) {\r\n this.entityMap[entity.id] = entity;\r\n this.entities.push(entity);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the entities in this set.\r\n * @public\r\n */\r\n clear() {\r\n // remove each entity individually in case classes that extend this implement their own specific cleanup\r\n while (this.entities.length > 0) {\r\n this.remove(this.entities[0].id);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if this set contains an entity with the given id.\r\n * @public\r\n * @param id An id.\r\n * @returns `true` if this set contains an entity with the given id, `false` otherwise.\r\n */\r\n contains(id: string): boolean {\r\n return this.entityMap[id] !== undefined;\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set filtered following given criteria.\r\n * @public\r\n * @returns An array containing the entities of this set that meet the given criteria.\r\n */\r\n filter(): E[] {\r\n return this.all();\r\n }\r\n\r\n /**\r\n * Gets an entity of this set matching specific criteria.\r\n * @public\r\n * @returns An entity of this set.\r\n */\r\n find(): E | undefined {\r\n return this.entities.length > 0 ? this.entities[0] : undefined;\r\n }\r\n\r\n /**\r\n * Gets an entity from this set.\r\n * @public\r\n * @param id An id.\r\n * @returns An entity with the given id, or `undefined` if there are no entities with the given id.\r\n */\r\n get(id: string): E | undefined {\r\n return this.entityMap[id];\r\n }\r\n\r\n /**\r\n * Attempts to find and remove an entity with the given id. Has no effect if there are no entities with the given id.\r\n * @public\r\n * @param id An id.\r\n */\r\n remove(id: string) {\r\n const entity = this.get(id);\r\n if (entity !== undefined) {\r\n delete this.entityMap[id];\r\n removeIfExists(this.entities, entity);\r\n }\r\n }\r\n\r\n /**\r\n * Iterator to iterate over the entities of this set.\r\n * @public\r\n */\r\n *[Symbol.iterator](): Iterator<E> {\r\n let counter = 0;\r\n while (counter < this.entities.length) {\r\n yield this.entities[counter];\r\n ++counter;\r\n }\r\n }\r\n}\r\n","import { DataSource } from '@metadev/lux';\nimport { removeIfExists } from '../../util/list-util';\n\n/**\n * A property which is part of a property set and defines what values a value in a value set can take.\n * @see PropertySet\n * @see ValueSet\n * @private\n */\nexport class Property {\n /**\n * The name of this property. Used to distinguish this property from others.\n */\n name: string;\n /**\n * The type of this property, which indicates the possible values that this property can have.\n */\n type: Type;\n /**\n * The default value of this property.\n */\n defaultValue: unknown;\n /**\n * Whether this property should always appear in the property editor component.\n * @see PropertyEditorComponent\n */\n basic: boolean;\n /**\n * Whether the value of this property can be edited.\n */\n editable: boolean;\n /**\n * Which attribute of the parent component the value of this property is linked to. Null if none.\n */\n rootAttribute: string[] | string | null;\n /**\n * The list of possible values if the value of the property is chosen from a set of possible values. Undefined otherwise.\n * @default undefined\n */\n options?: DataSource<unknown, string>;\n /**\n * The list of properties that are part of this property if the type of this property is 'object'.\n */\n properties?: Property[];\n\n constructor(\n name: string,\n type: Type,\n defaultValue: unknown,\n basic: boolean,\n editable: boolean,\n rootAttribute: string[] | string | null\n ) {\n this.name = name;\n this.type = type;\n this.defaultValue = defaultValue;\n this.basic = basic;\n this.editable = editable;\n this.rootAttribute = rootAttribute;\n this.options = undefined;\n this.properties = undefined;\n }\n}\n\n/**\n * The type that a property can hvae..\n * @see Property\n * @private\n */\nexport enum Type {\n /**\n * A type whose value must be a boolean.\n */\n Boolean = 'boolean',\n /**\n * A type whose value must be a string representing a valid HTML color code.\n */\n Color = 'color',\n /**\n * A type whose value must be a date.\n */\n Date = 'date',\n /**\n * A type whose value must be a number.\n */\n Number = 'number',\n /**\n * A type whose value must be an object.\n */\n Object = 'object',\n /**\n * A type whose value must be one of a set of options.\n */\n Option = 'option',\n /**\n * A type whose value must be a list of values picked from a set of options.\n */\n OptionList = 'option-list',\n /**\n * A type whose value must be a string without newline characters.\n */\n Text = 'text',\n /**\n * A type whose value must be a string with newline characters.\n */\n TextArea = 'text-area',\n /**\n * A type whose value must be a list of strings.\n */\n TextList = 'text-list',\n /**\n * A type whose value must be a map with string keys and values.\n */\n TextMap = 'text-map',\n /**\n * A type whose value must be a time of day.\n */\n Time = 'time',\n /**\n * A type whose value must be a valid URL.\n */\n Url = 'url'\n}\n\n/**\n * A set of properties based on which a set of values of those properties can be created.\n * @see Property\n * @see ValueSet\n * @private\n */\nexport class PropertySet {\n propertyMap: { [key: string]: Property };\n propertyList: Property[];\n\n constructor(properties: Property[] = []) {\n this.propertyList = properties;\n this.propertyMap = {};\n for (const property of this.propertyList) {\n this.propertyMap[property.name] = property;\n }\n }\n\n getProperty(key: string): Property {\n return this.propertyMap[key];\n }\n\n hasProperties(): boolean {\n return this.propertyList.length > 0;\n }\n}\n\n/**\n * A set of values corresponding to a set of properties.\n * @see PropertySet\n * @private\n */\nexport class ValueSet {\n rootElement: { [key: string]: unknown };\n propertySet: PropertySet;\n displayedProperties: Property[] = [];\n hiddenProperties: Property[] = [];\n values: { [key: string]: unknown } = {};\n valueSets: { [key: string]: ValueSet } = {};\n\n constructor(propertySet: PropertySet, rootElement: unknown) {\n this.propertySet = propertySet;\n this.rootElement = rootElement as { [key: string]: unknown };\n this.resetValues();\n }\n\n getRootElementValue(rootAttribute: string[] | string | null): unknown {\n if (typeof rootAttribute === 'string') {\n return this.rootElement[rootAttribute];\n }\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rootSubelement: any = this.rootElement;\n for (const rootSubattribute of rootAttribute) {\n if (rootSubelement === null || rootSubelement === undefined) {\n return undefined;\n }\n rootSubelement = rootSubelement[rootSubattribute];\n }\n return rootSubelement;\n }\n return undefined;\n }\n\n setRootElementValue(rootAttribute: string[] | string | null, value: unknown) {\n if (typeof rootAttribute === 'string') {\n this.rootElement[rootAttribute] = value;\n }\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rootSubelement: any = this.rootElement;\n for (let i = 0; i < rootAttribute.length - 1; ++i) {\n const rootSubattribute = rootAttribute[i];\n if (rootSubelement === null || rootSubelement === undefined) {\n return;\n }\n rootSubelement = rootSubelement[rootSubattribute];\n }\n rootSubelement[rootAttribute[rootAttribute.length - 1]] = value;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getValue(key: string): any {\n const rootAttribute = this.propertySet.getProperty(key)?.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.values[key] = this.getRootElementValue(rootAttribute);\n }\n return this.values[key];\n }\n\n getValues(): { [key: string]: unknown } {\n const result: { [key: string]: unknown } = {};\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n if (\n property.type === Type.Object &&\n this.valueSets[key].hasAnySetValue()\n ) {\n result[key] = this.valueSets[key].getValues();\n } else if (this.hasSetValue(key)) {\n result[key] = this.getValue(key);\n }\n }\n return result;\n }\n\n hasValue(key: string): boolean {\n const value = this.getValue(key);\n return !empty(value);\n }\n\n hasSetValue(key: string): boolean {\n const value = this.getValue(key);\n const property = this.propertySet.getProperty(key);\n if (property && property.type === Type.Object) {\n return this.getSubValueSet(key).hasAnySetValue();\n }\n return !empty(value) && !equals(value, property?.defaultValue);\n }\n\n hasAnySetValue(): boolean {\n for (const property of this.propertySet.propertyList) {\n if (this.hasSetValue(property.name)) {\n return true;\n }\n }\n return false;\n }\n\n hasAnySetValueExcept(keys: string[]): boolean {\n for (const property of this.propertySet.propertyList) {\n if (!keys.includes(property.name) && this.hasSetValue(property.name)) {\n return true;\n }\n }\n return false;\n }\n\n setValue(key: string, value: unknown): void {\n this.values[key] = value;\n const property = this.propertySet.getProperty(key);\n if (property) {\n const rootAttribute = property.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.setRootElementValue(rootAttribute, value);\n if (typeof this.rootElement['updateInView'] === 'function') {\n this.rootElement['updateInView']();\n }\n }\n this.displayProperty(property);\n }\n }\n\n setValues(values: { [key: string]: unknown }): void {\n this.resetValues();\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n if (!empty(values[key])) {\n if (property.type === Type.Object) {\n this.valueSets[key].setValues(\n values[key] as { [key: string]: unknown }\n );\n } else if (!equals(values[key], property?.defaultValue)) {\n this.setValue(key, values[key]);\n }\n }\n }\n }\n\n hasValues(): boolean {\n return Object.keys(this.values).length > 0;\n }\n\n resetValues(): void {\n this.displayedProperties = [];\n this.hiddenProperties = [];\n for (const key in this.propertySet.propertyMap) {\n const property = this.propertySet.getProperty(key);\n const rootAttribute = property.rootAttribute;\n if (rootAttribute !== undefined && rootAttribute !== null) {\n this.values[key] = this.getRootElementValue(rootAttribute);\n } else {\n this.values[key] = structuredClone(property.defaultValue);\n if (property.type === Type.Object) {\n this.valueSets[key] = this.constructSubValueSet(key);\n }\n }\n if (property.basic) {\n this.displayedProperties.push(property);\n } else {\n this.hiddenProperties.push(property);\n }\n }\n }\n\n displayProperty(property: Property) {\n if (!this.displayedProperties.includes(property)) {\n this.displayedProperties.push(property);\n removeIfExists(this.hiddenProperties, property);\n }\n }\n\n hideProperty(property: Property) {\n if (!this.hiddenProperties.includes(property)) {\n this.hiddenProperties.push(property);\n removeIfExists(this.displayedProperties, property);\n }\n }\n\n /**\n * Constructs a ValueSet with its corresponding PropertySet representing the values of the object.\n */\n constructSubValueSet(key: string): ValueSet {\n const property = this.propertySet.getProperty(key);\n const propertySet = new PropertySet(property.properties);\n const valueSet = new ValueSet(propertySet, this.rootElement);\n // initialize the default values of each property\n this.values[key] = {\n ...valueSet.values,\n ...(this.values[key] as { [key: string]: unknown })\n };\n valueSet.values = this.values[key] as { [key: string]: unknown };\n return valueSet;\n }\n\n getSubValueSet(key: string): ValueSet {\n return this.valueSets[key];\n }\n}\n\nconst empty = (a: unknown): boolean => {\n return (\n a === undefined ||\n a === null ||\n a === '' ||\n (a instanceof Array && a.length === 0) ||\n (a instanceof Object && Object.keys(a).length === 0)\n );\n};\n\nexport const equals = (a: unknown, b: unknown): boolean => {\n return a === b || JSON.stringify(a) === JSON.stringify(b);\n};\n","import { Point } from '../../util/canvas-util';\r\nimport { LineShape, LineStyle } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport {\r\n ConnectionMarkerLook,\r\n ConnectionTypeConfig,\r\n FieldConfig\r\n} from './diagram-config';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntity,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\n\r\nlet idTicker = 0;\r\n\r\n/**\r\n * Default values of the parameters of a diagram connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport const DIAGRAM_CONNECTION_TYPE_DEFAULTS = {\r\n name: '',\r\n width: 1,\r\n shape: LineShape.Straight,\r\n style: LineStyle.Solid,\r\n label: null,\r\n defaultStartMarkerLook: null,\r\n defaultEndMarkerLook: null,\r\n startTypes: [],\r\n endTypes: [],\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n properties: []\r\n};\r\n\r\n/**\r\n * A connection type, which holds properties that connections of this type share in common.\r\n * @see ConnectionTypeConfig\r\n * @public\r\n */\r\nexport class DiagramConnectionType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n width: number;\r\n shape: LineShape;\r\n style: LineStyle;\r\n label: FieldConfig | null;\r\n defaultStartMarkerLook: ConnectionMarkerLook | null;\r\n defaultEndMarkerLook: ConnectionMarkerLook | null;\r\n startTypes: string[];\r\n endTypes: string[];\r\n color: string;\r\n selectedColor: string;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: ConnectionTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_CONNECTION_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.width = values.width;\r\n this.shape = values.shape;\r\n this.style = values.style;\r\n this.label = values.label;\r\n this.defaultStartMarkerLook = values.defaultStartMarkerLook;\r\n this.defaultEndMarkerLook = values.defaultEndMarkerLook;\r\n this.startTypes = values.startTypes;\r\n this.endTypes = values.endTypes;\r\n this.color = values.color;\r\n this.selectedColor = values.selectedColor;\r\n this.propertySet = new PropertySet(values.properties);\r\n }\r\n\r\n canStartFromType(type: string) {\r\n return this.startTypes.indexOf(type) >= 0;\r\n }\r\n\r\n canFinishOnType(type: string) {\r\n return this.endTypes.indexOf(type) >= 0;\r\n }\r\n}\r\n\r\n/**\r\n * A connection which goes from one port to another.\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramConnection extends DiagramElement {\r\n type: DiagramConnectionType;\r\n /**\r\n * Additional properties of this connection.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a connection when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Port that this connection starts from.\r\n * @public\r\n */\r\n start?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its start.\r\n * @public\r\n */\r\n startDirection?: Side;\r\n /**\r\n * Coordinates of the start point of this connection.\r\n * @public\r\n */\r\n startCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the start, or `null` if the connection has no start marker.\r\n * @public\r\n */\r\n startMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Port that this connection ends at.\r\n * @public\r\n */\r\n end?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its end.\r\n * @public\r\n */\r\n endDirection?: Side;\r\n /**\r\n * Coordinates of the end point of this connection.\r\n * @public\r\n */\r\n endCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the end, or `null` if the connection has no end marker.\r\n * @public\r\n */\r\n endMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Text at the start of this connection, or `''` if no text.\r\n * @public\r\n */\r\n startLabel = '';\r\n /**\r\n * Text at the middle of this connection, or `''` if no text.\r\n * @public\r\n */\r\n middleLabel = '';\r\n /**\r\n * Text at the end of this connection, or `''` if no text.\r\n * @public\r\n */\r\n endLabel = '';\r\n /**\r\n * Points that this connection passes through.\r\n * @public\r\n */\r\n points: Point[] = [];\r\n\r\n /**\r\n * Name of this connection. Alias for this connection's middle label.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.middleLabel;\r\n }\r\n set name(name: string) {\r\n this.middleLabel = name;\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramConnectionType,\r\n start?: DiagramPort,\r\n end?: DiagramPort,\r\n id?: string\r\n ) {\r\n let uniqueId: string;\r\n if (id !== undefined && model.connections.get(id) === undefined) {\r\n uniqueId = id;\r\n } else {\r\n do {\r\n uniqueId = `diagram-connection-${++idTicker}`;\r\n } while (model.connections.get(uniqueId) !== undefined);\r\n }\r\n super(model, uniqueId);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.startMarkerLook = type.defaultStartMarkerLook;\r\n this.endMarkerLook = type.defaultEndMarkerLook;\r\n this.setStart(start);\r\n this.setEnd(end);\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateConnectionsInView(this.id);\r\n }\r\n\r\n setStart(start?: DiagramPort) {\r\n if (this.start !== start) {\r\n if (this.start !== undefined) {\r\n removeIfExists(this.start.outgoingConnections, this);\r\n }\r\n this.start = start;\r\n if (start !== undefined) {\r\n start.outgoingConnections.push(this);\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n } else {\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n setEnd(end?: DiagramPort) {\r\n if (this.end !== end) {\r\n if (this.end !== undefined) {\r\n removeIfExists(this.end.incomingConnections, this);\r\n }\r\n this.end = end;\r\n if (end !== undefined) {\r\n end.incomingConnections.push(this);\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n } else {\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n tighten() {\r\n if (this.start?.rootElement && this.end?.rootElement) {\r\n const tighterStartPort =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.start.rootElement as any).getClosestPortToPoint(this.end.coords);\r\n if (tighterStartPort && tighterStartPort !== this.start) {\r\n this.setStart(tighterStartPort);\r\n }\r\n const tighterEndPort =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.end.rootElement as any).getClosestPortToPoint(this.start.coords);\r\n if (tighterEndPort && tighterEndPort !== this.end) {\r\n this.setEnd(tighterEndPort);\r\n }\r\n this.updateInView();\r\n }\r\n }\r\n\r\n getPriority(): number {\r\n if (this.start) {\r\n if (this.end) {\r\n return Math.min(this.start.getPriority(), this.end.getPriority());\r\n } else {\r\n return this.start.getPriority();\r\n }\r\n } else {\r\n if (this.end) {\r\n return this.end.getPriority();\r\n } else {\r\n return DEFAULT_PRIORITY;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class DiagramConnectionSet extends DiagramEntitySet<DiagramConnection> {\r\n private model: DiagramModel;\r\n types = new DiagramEntitySet<DiagramConnectionType>();\r\n\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n new(\r\n type: DiagramConnectionType,\r\n start?: DiagramPort,\r\n end?: DiagramPort,\r\n id?: string | undefined\r\n ): DiagramConnection {\r\n const connection = new DiagramConnection(this.model, type, start, end, id);\r\n super.add(connection);\r\n connection.updateInView();\r\n return connection;\r\n }\r\n\r\n override remove(id: string) {\r\n const connection = this.get(id);\r\n if (connection) {\r\n // remove from ports\r\n removeIfExists(connection.start?.outgoingConnections || [], connection);\r\n removeIfExists(connection.end?.incomingConnections || [], connection);\r\n // remove from set of connections\r\n super.remove(id);\r\n // remove from canvas\r\n connection.updateInView();\r\n }\r\n }\r\n\r\n override filter(type?: string, threshold?: number): DiagramConnection[] {\r\n return this.entities.filter((e) => {\r\n let matches = true;\r\n if (type !== undefined && matches) {\r\n matches = matches && e.type.id === type;\r\n }\r\n if (threshold !== undefined && matches) {\r\n matches = matches && e.getPriority() >= threshold;\r\n }\r\n return matches;\r\n });\r\n }\r\n\r\n override find(\r\n type?: string,\r\n threshold?: number\r\n ): DiagramConnection | undefined {\r\n return this.entities.find((e) => {\r\n let matches = true;\r\n if (type !== undefined && matches) {\r\n matches = matches && e.type.id === type;\r\n }\r\n if (threshold !== undefined && matches) {\r\n matches = matches && e.getPriority() >= threshold;\r\n }\r\n return matches;\r\n });\r\n }\r\n}\r\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport { NodeShapedLook, SectionConfig } from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\n\r\nlet idTicker = 0;\r\n\r\n/**\r\n * Default values of the look of a diagram section.\r\n * @see DIAGRAM_SECTION_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULTS = {\r\n label: null,\r\n ports: [],\r\n look: DIAGRAM_SECTION_LOOK_DEFAULTS,\r\n priority: DEFAULT_PRIORITY\r\n};\r\n\r\n/**\r\n * Default value of the default width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_WIDTH = 1;\r\n/**\r\n * Default value of the default height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_HEIGHT = 1;\r\n/**\r\n * Default value of the minimum width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_WIDTH = 1;\r\n/**\r\n * Default value of the minimum height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_HEIGHT = 1;\r\n\r\n/**\r\n * A section of a node which can have connections and display a property of the node.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramSection extends DiagramElement {\r\n /**\r\n * Node that this section belongs to.\r\n * @public\r\n */\r\n node?: DiagramNode;\r\n /**\r\n * X index of this section in the parent node's section array.\r\n */\r\n indexXInNode: number;\r\n /**\r\n * Y index of this section in the parent node's section array.\r\n */\r\n indexYInNode: number;\r\n /**\r\n * Label of this section.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Ports of this section.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Coordinates of the top left corner of this section.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this section along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this section along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this section. Alias for this section's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n node: DiagramNode | undefined,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id?: string\r\n ) {\r\n let uniqueId: string;\r\n if (id !== undefined && model.sections.get(id) === undefined) {\r\n uniqueId = id;\r\n } else {\r\n do {\r\n uniqueId = `diagram-section-${++idTicker}`;\r\n } while (model.sections.get(uniqueId) !== undefined);\r\n }\r\n super(model, uniqueId);\r\n this.node = node;\r\n this.indexXInNode = indexXInNode;\r\n this.indexYInNode = indexYInNode;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateSectionsInView(this.id);\r\n }\r\n\r\n getConfig(): SectionConfig | undefined {\r\n return this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ];\r\n }\r\n\r\n getMinWidth(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minWidths?.[this.indexXInNode] ||\r\n DIAGRAM_SECTION_MIN_WIDTH\r\n );\r\n }\r\n\r\n getMinHeight(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minHeights?.[this.indexYInNode] ||\r\n DIAGRAM_SECTION_MIN_HEIGHT\r\n );\r\n }\r\n\r\n getPriority(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ]?.priority || DIAGRAM_SECTION_DEFAULTS.priority\r\n );\r\n }\r\n\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n getIncomingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getOutgoingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n this.coords = coords;\r\n for (const port of this.ports) {\r\n port.move([\r\n port.coords[0] + coordDifferences[0],\r\n port.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n if (this.label) {\r\n this.label.move([\r\n this.label.coords[0] + coordDifferences[0],\r\n this.label.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[0] = newCoordsX[1] - this.getMinWidth();\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[0] = newCoordsY[1] - this.getMinHeight();\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[1] = newCoordsX[0] + this.getMinWidth();\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[1] = newCoordsY[0] + this.getMinHeight();\r\n }\r\n break;\r\n }\r\n this.coords = [newCoordsX[0], newCoordsY[0]];\r\n this.width = newCoordsX[1] - newCoordsX[0];\r\n this.height = newCoordsY[1] - newCoordsY[0];\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + (this.getConfig()?.label?.margin || 0),\r\n this.coords[1] + (this.getConfig()?.label?.margin || 0)\r\n ];\r\n (this.label.width =\r\n this.width - (this.getConfig()?.label?.margin || 0) * 2),\r\n (this.label.height =\r\n this.height - (this.getConfig()?.label?.margin || 0) * 2);\r\n this.label.updateInView();\r\n }\r\n this.updateInView();\r\n }\r\n}\r\n\r\nexport class DiagramSectionSet extends DiagramEntitySet<DiagramSection> {\r\n private model: DiagramModel;\r\n\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n new(\r\n node: DiagramNode,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id?: string | undefined,\r\n portIds?: (string | undefined)[],\r\n portLabelIds?: (string | undefined)[]\r\n ): DiagramSection {\r\n const section = new DiagramSection(\r\n this.model,\r\n node,\r\n indexXInNode,\r\n indexYInNode,\r\n coords,\r\n width,\r\n height,\r\n id\r\n );\r\n super.add(section);\r\n section.updateInView();\r\n // add this section to its node\r\n node.sections.push(section);\r\n node.updateInView();\r\n // add section ports\r\n const sectionPorts =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.ports;\r\n if (sectionPorts && sectionPorts.length > 0) {\r\n for (let i = 0; i < sectionPorts.length; ++i) {\r\n const portConfig = sectionPorts[i];\r\n const port = this.model.ports.new(\r\n section,\r\n [\r\n section.coords[0] + (portConfig?.coords?.[0] || 0),\r\n section.coords[1] + (portConfig?.coords?.[1] || 0)\r\n ],\r\n portConfig?.direction,\r\n portIds && portIds.length > i ? portIds[i] : undefined\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit,\r\n portLabelIds && portLabelIds.length > i\r\n ? portLabelIds[i]\r\n : undefined\r\n );\r\n }\r\n }\r\n }\r\n // add section label\r\n const sectionLabel =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.label;\r\n if (sectionLabel) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...sectionLabel\r\n };\r\n this.model.fields.new(\r\n section,\r\n [\r\n section.coords[0] + labelConfiguration.margin,\r\n section.coords[1] + labelConfiguration.margin\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n section.width - labelConfiguration.margin * 2,\r\n section.height - labelConfiguration.margin * 2,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit,\r\n id\r\n );\r\n }\r\n return section;\r\n }\r\n\r\n override remove(id: string) {\r\n const section = this.get(id);\r\n if (section) {\r\n // remove all ports\r\n while (section.ports.length > 0) {\r\n this.model.ports.remove(section.ports[0].id);\r\n }\r\n // remove label\r\n if (section.label) {\r\n this.model.fields.remove(section.label.id);\r\n }\r\n // remove from root element\r\n if (section.node) {\r\n removeIfExists(section.node.sections, section);\r\n }\r\n // remove from set of sections\r\n super.remove(id);\r\n // remove from canvas\r\n section.updateInView();\r\n }\r\n }\r\n\r\n override filter(threshold?: number): DiagramSection[] {\r\n return this.entities.filter((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n override find(threshold?: number): DiagramSection | undefined {\r\n return this.entities.find((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport {\r\n FieldConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook,\r\n NodeTypeConfig,\r\n PortConfig,\r\n SectionGridConfig\r\n} from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntity,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\nimport {\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n DiagramSection\r\n} from './diagram-section';\r\n\r\nlet idTicker = 0;\r\n\r\n/**\r\n * Default values of the look of a diagram node.\r\n * @see DIAGRAM_NODE_TYPE_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_TYPE_DEFAULTS = {\r\n name: '',\r\n defaultWidth: 1,\r\n defaultHeight: 1,\r\n minWidth: 1,\r\n minHeight: 1,\r\n resizableX: false,\r\n resizableY: false,\r\n label: null,\r\n ports: [],\r\n sectionGrid: null,\r\n look: DIAGRAM_NODE_LOOK_DEFAULTS,\r\n isUnique: false,\r\n priority: DEFAULT_PRIORITY,\r\n properties: []\r\n};\r\n\r\n/**\r\n * A node type, which holds properties that nodes of this type share in common.\r\n * @see NodeTypeConfig\r\n * @public\r\n */\r\nexport class DiagramNodeType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n defaultWidth: number;\r\n defaultHeight: number;\r\n minWidth: number;\r\n minHeight: number;\r\n resizableX: boolean;\r\n resizableY: boolean;\r\n label: FieldConfig | null;\r\n ports: PortConfig[];\r\n sectionGrid: SectionGridConfig | null;\r\n look: NodeShapedLook | NodeImageLook | NodeStretchableImageLook;\r\n isUnique: boolean;\r\n priority: number;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: NodeTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_NODE_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.defaultWidth = values.defaultWidth;\r\n this.defaultHeight = values.defaultHeight;\r\n this.minWidth = values.minWidth;\r\n this.minHeight = values.minHeight;\r\n this.resizableX = values.resizableX;\r\n this.resizableY = values.resizableY;\r\n this.label = values.label;\r\n this.ports = values.ports;\r\n this.sectionGrid = values.sectionGrid;\r\n this.look = values.look;\r\n this.isUnique = values.isUnique;\r\n this.priority = values.priority;\r\n this.propertySet = new PropertySet(options?.properties || []);\r\n }\r\n}\r\n\r\n/**\r\n * A node, the most basic element of a diagram, which can have connections to other nodes through its ports or be divided into sections.\r\n * @see DiagramConnection\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramNode extends DiagramElement {\r\n type: DiagramNodeType;\r\n /**\r\n * Additional properties of this node.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a node when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Label of this node.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Sections of this node.\r\n * @public\r\n */\r\n sections: DiagramSection[] = [];\r\n /**\r\n * Ports of this node.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Coordinates of the top left corner of this node.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this node along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this node along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this node. Alias for this node's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramNodeType,\r\n coords: Point = [0, 0],\r\n id?: string\r\n ) {\r\n let uniqueId: string;\r\n if (id !== undefined && model.nodes.get(id) === undefined) {\r\n uniqueId = id;\r\n } else {\r\n do {\r\n uniqueId = `diagram-node-${++idTicker}`;\r\n } while (model.nodes.get(uniqueId) !== undefined);\r\n }\r\n super(model, uniqueId);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.coords = coords;\r\n this.width = type.defaultWidth;\r\n this.height = type.defaultHeight;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateNodesInView(this.id);\r\n }\r\n\r\n getPriority(): number {\r\n return this.type.priority;\r\n }\r\n\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n getIncomingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getOutgoingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n getAdjacentNodes(): DiagramNode[] {\r\n const result: DiagramNode[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n const otherNode = incomingConnection.start?.getNode();\r\n if (otherNode) {\r\n result.push(otherNode);\r\n }\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n const otherNode = outgoingConnection.end?.getNode();\r\n if (otherNode) {\r\n result.push(otherNode);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n this.coords = coords;\r\n for (const section of this.sections) {\r\n section.move([\r\n section.coords[0] + coordDifferences[0],\r\n section.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n for (const port of this.ports) {\r\n port.move([\r\n port.coords[0] + coordDifferences[0],\r\n port.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n if (this.label) {\r\n this.label.move([\r\n this.label.coords[0] + coordDifferences[0],\r\n this.label.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[0] = newCoordsX[1] - this.type.minWidth;\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[0] = newCoordsY[1] - this.type.minHeight;\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[1] = newCoordsX[0] + this.type.minWidth;\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[1] = newCoordsY[0] + this.type.minHeight;\r\n }\r\n break;\r\n }\r\n this.coords = [newCoordsX[0], newCoordsY[0]];\r\n this.width = newCoordsX[1] - newCoordsX[0];\r\n this.height = newCoordsY[1] - newCoordsY[0];\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + (this.type.label?.margin || 0),\r\n this.coords[1] + (this.type.label?.margin || 0)\r\n ];\r\n (this.label.width = this.width - (this.type.label?.margin || 0) * 2),\r\n (this.label.height = this.height - (this.type.label?.margin || 0) * 2);\r\n this.label.updateInView();\r\n }\r\n // we ignore this.sections, the stretching of a node with sections is handled in the stretchSections method\r\n this.updateInView();\r\n }\r\n\r\n stretchSections(\r\n direction: Side,\r\n distance: number,\r\n indexX: number,\r\n indexY: number\r\n ) {\r\n let minimumStretchableDistance = Number.NEGATIVE_INFINITY;\r\n switch (direction) {\r\n case Side.Bottom:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode > indexY) {\r\n section.move([section.coords[0], section.coords[1] + distance]);\r\n }\r\n }\r\n break;\r\n case Side.Right:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode > indexX) {\r\n section.move([section.coords[0] + distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n case Side.Top:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode < indexY) {\r\n section.move([section.coords[0], section.coords[1] - distance]);\r\n }\r\n }\r\n break;\r\n case Side.Left:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode < indexX) {\r\n section.move([section.coords[0] - distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n }\r\n this.stretch(direction, distance);\r\n }\r\n}\r\n\r\nexport class DiagramNodeSet extends DiagramEntitySet<DiagramNode> {\r\n private model: DiagramModel;\r\n types = new DiagramEntitySet<DiagramNodeType>();\r\n\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n new(\r\n type: DiagramNodeType,\r\n coords: Point,\r\n id?: string | undefined,\r\n sectionIds?: (string | undefined)[],\r\n sectionPortIds?: (string | undefined)[][],\r\n sectionPortLabelIds?: (string | undefined)[][],\r\n portIds?: (string | undefined)[],\r\n portLabelIds?: (string | undefined)[],\r\n labelId?: string | undefined\r\n ): DiagramNode {\r\n const node = new DiagramNode(this.model, type, coords, id);\r\n super.add(node);\r\n node.updateInView();\r\n // add node sections\r\n if (type.sectionGrid !== null) {\r\n // create sections\r\n let sectionCount = 0;\r\n let heightAccumulator = node.coords[1] + (type.sectionGrid.margin || 0);\r\n for (let j = 0; j < type.sectionGrid.sections.length; ++j) {\r\n let widthAccumulator = node.coords[0] + (type.sectionGrid.margin || 0);\r\n for (let i = 0; i < type.sectionGrid.sections[j].length; ++i) {\r\n this.model.sections.new(\r\n node,\r\n i,\r\n j,\r\n [widthAccumulator, heightAccumulator],\r\n type.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n type.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n sectionIds && sectionIds.length > sectionCount\r\n ? sectionIds[sectionCount]\r\n : undefined,\r\n sectionPortIds && sectionPortIds.length > sectionCount\r\n ? sectionPortIds[sectionCount]\r\n : undefined,\r\n sectionPortLabelIds && sectionPortLabelIds.length > sectionCount\r\n ? sectionPortLabelIds[sectionCount]\r\n : undefined\r\n );\r\n ++sectionCount;\r\n widthAccumulator +=\r\n (type.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH) + (type.sectionGrid.margin || 0);\r\n }\r\n heightAccumulator +=\r\n (type.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT) + (type.sectionGrid.margin || 0);\r\n }\r\n }\r\n // add node ports\r\n if (type.ports.length > 0) {\r\n for (let i = 0; i < type.ports.length; ++i) {\r\n const portConfig = type.ports[i];\r\n const port = this.model.ports.new(\r\n node,\r\n [\r\n node.coords[0] + portConfig.coords[0],\r\n node.coords[1] + portConfig.coords[1]\r\n ],\r\n portConfig.direction,\r\n portIds && portIds.length > i ? portIds[i] : undefined\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit,\r\n portLabelIds && portLabelIds.length > i\r\n ? portLabelIds[i]\r\n : undefined\r\n );\r\n }\r\n }\r\n }\r\n // add node label\r\n if (type.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label\r\n };\r\n this.model.fields.new(\r\n node,\r\n [\r\n node.coords[0] + labelConfiguration.margin,\r\n node.coords[1] + labelConfiguration.margin\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n node.width - labelConfiguration.margin * 2,\r\n node.height - labelConfiguration.margin * 2,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit,\r\n labelId\r\n );\r\n }\r\n node.model.canvas?.fitNodeInView(node.id);\r\n return node;\r\n }\r\n\r\n override remove(id: string) {\r\n const node = this.get(id);\r\n if (node) {\r\n // remove all sections\r\n while (node.sections.length > 0) {\r\n this.model.sections.remove(node.sections[0].id);\r\n }\r\n // remove all ports\r\n while (node.ports.length > 0) {\r\n this.model.ports.remove(node.ports[0].id);\r\n }\r\n // remove label\r\n if (node.label) {\r\n this.model.fields.remove(node.label.id);\r\n }\r\n // remove from set of nodes\r\n super.remove(id);\r\n // remove from canvas\r\n node.updateInView();\r\n }\r\n }\r\n\r\n override filter(type?: string, threshold?: number): DiagramNode[] {\r\n return this.entities.filter(\r\n (e) =>\r\n (type !== undefined ? e.type.id === type : true) &&\r\n (threshold !== undefined ? e.type.priority >= threshold : true)\r\n );\r\n }\r\n\r\n override find(type?: string, threshold?: number): DiagramNode | undefined {\r\n return this.entities.find(\r\n (e) =>\r\n (type !== undefined ? e.type.id === type : true) &&\r\n (threshold !== undefined ? e.type.priority >= threshold : true)\r\n );\r\n }\r\n}\r\n","import { Point, distanceBetweenPoints } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\nlet idTicker = 0;\r\n\r\n/**\r\n * Default values of the parameters of a diagram port.\r\n * @see DiagramPort\r\n * @private\r\n */\r\nexport const DIAGRAM_PORT_DEFAULTS = {\r\n radius: 12,\r\n highlightedColor: 'cyan',\r\n selectedColor: 'violet'\r\n};\r\n\r\n/**\r\n * A port which is part of a node or section and at which connections can start or end.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramPort extends DiagramElement {\r\n /**\r\n * Element that this port belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection;\r\n /**\r\n * Label of this port.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Direction of the connections of this port at the coordinates of this port.\r\n * @public\r\n */\r\n direction: Side;\r\n /**\r\n * Coordinates of this port.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Connections that start at this port.\r\n * @public\r\n */\r\n outgoingConnections: DiagramConnection[] = [];\r\n /**\r\n * Connections that end at this port.\r\n * @public\r\n */\r\n incomingConnections: DiagramConnection[] = [];\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id?: string\r\n ) {\r\n let uniqueId: string;\r\n if (id !== undefined && model.ports.get(id) === undefined) {\r\n uniqueId = id;\r\n } else {\r\n do {\r\n uniqueId = `diagram-port-${++idTicker}`;\r\n } while (model.ports.get(uniqueId) !== undefined);\r\n }\r\n super(model, uniqueId);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.direction = direction;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updatePortsInView(this.id);\r\n }\r\n\r\n startConnection(connection: DiagramConnection) {\r\n this.outgoingConnections.push(connection);\r\n }\r\n\r\n finishConnection(connection: DiagramConnection) {\r\n this.incomingConnections.push(connection);\r\n }\r\n\r\n getNode(): DiagramNode | undefined {\r\n if (this.rootElement instanceof DiagramNode) {\r\n return this.rootElement;\r\n } else if (this.rootElement instanceof DiagramSection) {\r\n return this.rootElement.node;\r\n }\r\n return undefined;\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n this.coords = coords;\r\n for (const connection of this.outgoingConnections) {\r\n connection.setStart(this);\r\n }\r\n for (const connection of this.incomingConnections) {\r\n connection.setEnd(this);\r\n }\r\n if (this.label) {\r\n this.label.move([\r\n this.label.coords[0] + coordDifferences[0],\r\n this.label.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n this.updateInView();\r\n }\r\n\r\n distanceTo(coords: Point): number {\r\n return distanceBetweenPoints(this.coords, coords);\r\n }\r\n}\r\n\r\nexport class DiagramPortSet extends DiagramEntitySet<DiagramPort> {\r\n private model: DiagramModel;\r\n\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n new(\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id?: string | undefined\r\n ): DiagramPort {\r\n const port = new DiagramPort(\r\n this.model,\r\n rootElement,\r\n coords,\r\n direction,\r\n id\r\n );\r\n super.add(port);\r\n port.updateInView();\r\n // add this port to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.ports.push(port);\r\n }\r\n return port;\r\n }\r\n\r\n override remove(id: string) {\r\n const port = this.get(id);\r\n if (port) {\r\n // remove all connections\r\n while (port.outgoingConnections.length > 0) {\r\n this.model.connections.remove(port.outgoingConnections[0].id);\r\n }\r\n while (port.incomingConnections.length > 0) {\r\n this.model.connections.remove(port.incomingConnections[0].id);\r\n }\r\n // remove label\r\n if (port.label) {\r\n this.model.fields.remove(port.label.id);\r\n }\r\n // remove from root element\r\n if (\r\n port.rootElement instanceof DiagramNode ||\r\n port.rootElement instanceof DiagramSection\r\n ) {\r\n removeIfExists(port.rootElement.ports, port);\r\n }\r\n // remove from set of ports\r\n super.remove(id);\r\n // remove from canvas\r\n port.updateInView();\r\n }\r\n }\r\n\r\n override filter(threshold?: number): DiagramPort[] {\r\n return this.entities.filter((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n override find(threshold?: number): DiagramPort | undefined {\r\n return this.entities.find((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { HorizontalAlign, VerticalAlign } from '../../util/svg-util';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\nlet idTicker = 0;\r\n\r\n/**\r\n * Default values of the parameters of a diagram field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport const DIAGRAM_FIELD_DEFAULTS = {\r\n editable: true,\r\n fontSize: 0,\r\n margin: 0,\r\n padding: 0,\r\n fontFamily: \"'Wonder Unit Sans', sans-serif\",\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n horizontalAlign: HorizontalAlign.Center,\r\n verticalAlign: VerticalAlign.Center,\r\n fit: false\r\n};\r\n\r\n/**\r\n * A field which displays text and is part of a diagram element.\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramField extends DiagramElement {\r\n /**\r\n * Element that this field belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection | DiagramPort;\r\n /**\r\n * Coordinates of this field.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this field along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this field along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n /**\r\n * Font size of this field.\r\n * @public\r\n */\r\n fontSize: number;\r\n /**\r\n * Font family of this field. `null` for the default one.\r\n * @public\r\n */\r\n fontFamily: string | null;\r\n /**\r\n * Font color of this field.\r\n * @public\r\n */\r\n color: string;\r\n /**\r\n * Font color of this field when selected.\r\n * @public\r\n */\r\n selectedColor: string;\r\n /**\r\n * Horizontal alignment of the text of this field.\r\n * @public\r\n */\r\n horizontalAlign: HorizontalAlign;\r\n /**\r\n * Vertical alignment of the text of this field.\r\n * @public\r\n */\r\n verticalAlign: VerticalAlign;\r\n private _text: string;\r\n /**\r\n * Default text that this field's text resets to when empty.\r\n * @public\r\n */\r\n defaultText: string;\r\n /**\r\n * Text contents of this field.\r\n * @public\r\n */\r\n get text(): string {\r\n return this._text;\r\n }\r\n set text(value: string) {\r\n if (value.trim() === '') {\r\n value = this.defaultText;\r\n }\r\n this._text = value;\r\n this.updateInView();\r\n if (this.fit) {\r\n this.model.canvas?.fitFieldRootInView(this.id);\r\n }\r\n }\r\n /**\r\n * Whether this field's text can be edited by the user.\r\n * @public\r\n */\r\n editable: boolean;\r\n /**\r\n * Whether this field's size can adapt to the size of the text.\r\n * @public\r\n */\r\n fit: boolean;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean,\r\n id?: string\r\n ) {\r\n let uniqueId: string;\r\n if (id !== undefined && model.fields.get(id) === undefined) {\r\n uniqueId = id;\r\n } else {\r\n do {\r\n uniqueId = `diagram-field-${++idTicker}`;\r\n } while (model.fields.get(uniqueId) !== undefined);\r\n }\r\n super(model, uniqueId);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.fontSize = fontSize;\r\n this.fontFamily = fontFamily;\r\n this.color = color;\r\n this.selectedColor = selectedColor;\r\n this.horizontalAlign = horizontalAlign;\r\n this.verticalAlign = verticalAlign;\r\n this.defaultText = text;\r\n this._text = text;\r\n this.editable = editable;\r\n this.fit = fit;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateFieldsInView(this.id);\r\n }\r\n\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n}\r\n\r\nexport class DiagramFieldSet extends DiagramEntitySet<DiagramField> {\r\n private model: DiagramModel;\r\n\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n new(\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n width: number,\r\n height: number,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean,\r\n id?: string | undefined\r\n ): DiagramField {\r\n const field = new DiagramField(\r\n this.model,\r\n rootElement,\r\n coords,\r\n width,\r\n height,\r\n fontSize,\r\n fontFamily,\r\n color,\r\n selectedColor,\r\n horizontalAlign,\r\n verticalAlign,\r\n text,\r\n editable,\r\n fit,\r\n id\r\n );\r\n super.add(field);\r\n field.updateInView();\r\n // add this field to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.label = field;\r\n }\r\n return field;\r\n }\r\n\r\n override remove(id: string) {\r\n const field = this.get(id);\r\n if (field) {\r\n // remove from root element\r\n if (\r\n field.rootElement instanceof DiagramNode ||\r\n field.rootElement instanceof DiagramSection ||\r\n field.rootElement instanceof DiagramPort\r\n ) {\r\n if (field.rootElement.label === field) {\r\n field.rootElement.label = undefined;\r\n }\r\n }\r\n // remove from set of fields\r\n super.remove(id);\r\n // remove from canvas\r\n field.updateInView();\r\n }\r\n }\r\n\r\n override filter(threshold?: number): DiagramField[] {\r\n return this.entities.filter((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n override find(threshold?: number): DiagramField | undefined {\r\n return this.entities.find((e) => {\r\n if (threshold !== undefined) {\r\n return e.getPriority() >= threshold;\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramConnectionSet } from './diagram-connection';\r\nimport { DiagramFieldSet } from './diagram-field';\r\nimport { DiagramNodeSet } from './diagram-node';\r\nimport { DiagramPortSet } from './diagram-port';\r\nimport { Property, PropertySet, ValueSet } from './diagram-property';\r\nimport { DiagramSectionSet } from './diagram-section';\r\n\r\n/**\r\n * Stores the data of a diagram.\r\n * @public\r\n */\r\nexport class DiagramModel {\r\n /**\r\n * The canvas where this model's data is being rendered.\r\n * @private\r\n */\r\n canvas?: Canvas;\r\n /**\r\n * Nodes of this model.\r\n * @see DiagramNode\r\n * @public\r\n */\r\n nodes = new DiagramNodeSet(this);\r\n /**\r\n * Sections of this model.\r\n * @see DiagramSection\r\n * @public\r\n */\r\n sections = new DiagramSectionSet(this);\r\n /**\r\n * Ports of this model.\r\n * @see DiagramPort\r\n * @public\r\n */\r\n ports = new DiagramPortSet(this);\r\n /**\r\n * Connections of this model.\r\n * @see DiagramConnection\r\n * @public\r\n */\r\n connections = new DiagramConnectionSet(this);\r\n /**\r\n * Fields of this model.\r\n * @see DiagramField\r\n * @public\r\n */\r\n fields = new DiagramFieldSet(this);\r\n /**\r\n * Identifier of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n id: string | undefined;\r\n /**\r\n * Name of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n name: string;\r\n /**\r\n * Description of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n description?: string;\r\n /**\r\n * Type of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n type: string;\r\n /**\r\n * Date of creation of this diagram. Set at the creation of the diagram.\r\n * @public\r\n */\r\n createdAt: Date;\r\n /**\r\n * Date of last changes of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n updatedAt: Date;\r\n /**\r\n * Additional properties of this diagram.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n\r\n constructor(\r\n canvas: Canvas | undefined,\r\n id: string | undefined,\r\n name: string,\r\n description: string | undefined,\r\n type: string,\r\n properties: Property[] = []\r\n ) {\r\n this.canvas = canvas;\r\n this.id = id;\r\n this.name = name;\r\n this.description = description;\r\n this.type = type;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.valueSet = new ValueSet(new PropertySet(properties), this);\r\n }\r\n\r\n /**\r\n * Deletes everything in this diagram.\r\n * @public\r\n */\r\n clear(): void {\r\n this.canvas?.cancelAllUserActions();\r\n this.id = undefined;\r\n this.name = '';\r\n this.description = undefined;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.nodes.clear();\r\n this.sections.clear();\r\n this.ports.clear();\r\n this.connections.clear();\r\n this.fields.clear();\r\n this.valueSet.resetValues();\r\n this.canvas?.updateModelInView();\r\n }\r\n}\r\n","export enum CursorStyle {\r\n AllScroll = 'all-scroll',\r\n Auto = 'auto',\r\n EWResize = 'ew-resize',\r\n Grab = 'grab',\r\n Grabbing = 'grabbing',\r\n Move = 'move',\r\n NoDrop = 'no-drop',\r\n NSResize = 'ns-resize',\r\n NotAllowed = 'not-allowed',\r\n ZoomIn = 'zoom-in',\r\n ZoomOut = 'zoom-out'\r\n}\r\n","import * as d3 from 'd3';\r\nimport { BaseType } from 'd3';\r\nimport { Subject } from 'rxjs';\r\nimport { DiagramValidator } from '../../errors/diagram-validator';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramEditor } from '../../interfaces/diagram-editor';\r\nimport { Point } from '../../util/canvas-util';\r\nimport { DragEvents, Events, Keys, ZoomEvents } from '../../util/events';\r\nimport { LineShape, linePath, lineStyleDasharray } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { generalClosedPath, pillPath } from '../../util/shape';\r\nimport { HorizontalAlign, Side, VerticalAlign } from '../../util/svg-util';\r\nimport { numberOfColumns, numberOfRows } from '../../util/text-util';\r\nimport {\r\n ActionQueue,\r\n AddConnectionAction,\r\n DiagramAction,\r\n DiagramActions,\r\n EditFieldAction,\r\n MoveNodeAction,\r\n RemoveAction,\r\n StretchNodeAction,\r\n StretchSectionAction,\r\n UpdateValuesAction\r\n} from './diagram-action';\r\nimport {\r\n DiagramConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook\r\n} from './diagram-config';\r\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramElement } from './diagram-element';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\r\nimport { DIAGRAM_PORT_DEFAULTS, DiagramPort } from './diagram-port';\r\nimport { ValueSet, equals } from './diagram-property';\r\nimport { DiagramSection } from './diagram-section';\r\nimport { CursorStyle } from '../../util/style';\r\n\r\n/**\r\n * Thickness of the invisible path around a connection used to make it easier to click on, in pixels.\r\n * @private\r\n */\r\nexport const CONNECTION_PATH_BOX_THICKNESS = 12;\r\n/**\r\n * Thickness of the resizer line used to resize nodes and sections on drag, in pixels.\r\n * @private\r\n */\r\nexport const RESIZER_THICKNESS = 6;\r\n\r\n/**\r\n * Text to display as the title of the property editor when editing this diagram's properties.\r\n * @see PropertyEditorComponent\r\n * @private\r\n */\r\nexport const DIAGRAM_PROPERTIES_TEXT = 'Diagram properties';\r\n\r\n/**\r\n * Maximum number of user actions that can be recorded in the user action queue.\r\n * @see ActionQueue\r\n * @private\r\n */\r\nexport const ACTION_QUEUE_SIZE = 25;\r\n\r\nconst UNFINISHED_CONNECTION_ID = 'diagram-connection-unfinished';\r\n\r\nexport class DiagramCanvas implements Canvas {\r\n parentComponent!: DiagramEditor;\r\n diagramRoot!: HTMLElement;\r\n\r\n model: DiagramModel;\r\n backgroundColor: string;\r\n gridSize: number;\r\n snapToGrid: boolean;\r\n guessConnectionType: boolean;\r\n connectionType?: DiagramConnectionType;\r\n validators: DiagramValidator[];\r\n layoutFormat?: string;\r\n userActions: { [key in DiagramActions]?: boolean };\r\n actionQueue: ActionQueue;\r\n\r\n private static canvasCount = 0;\r\n private backgroundPatternId = `daga-background-pattern-id-${DiagramCanvas.canvasCount++}`;\r\n\r\n private zoomBehavior!: d3.ZoomBehavior<SVGRectElement, unknown>;\r\n private zoomTransform: d3.ZoomTransform = d3.zoomIdentity;\r\n private priorityThreshold?: number;\r\n private priorityThresholds: number[];\r\n private mainUserHighlight?: DiagramElement = undefined;\r\n private userHighlight: DiagramElement[] = [];\r\n private userSelection: DiagramElement[] = [];\r\n private propertyEditorSelection?: { valueSet: ValueSet } & (\r\n | DiagramElement\r\n | DiagramModel\r\n );\r\n private propertyEditorValues?: { [key: string]: unknown };\r\n private unfinishedConnection?: DiagramConnection;\r\n /**\r\n * Invisible path followed by an unfinished connection. Used for making unfinished connections stop before the cursor rather than stopping right at the cursor.\r\n */\r\n private unfinishedConnectionTracer?: d3.Selection<\r\n SVGPathElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n private inputFieldContainer?: d3.Selection<\r\n SVGForeignObjectElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n // used to distinguish drags from clicks when dragging elements\r\n private draggingFrom: Point = [0, 0];\r\n // current action that started but hasn't finished yet\r\n private currentAction?: DiagramAction;\r\n\r\n viewInitialized$ = new Subject<void>();\r\n validatorChanges$ = new Subject<void>();\r\n diagramChanges$ = new Subject<void>();\r\n diagramImportantChanges$ = new Subject<void>();\r\n\r\n constructor(parentComponent: DiagramEditor, config: DiagramConfig) {\r\n this.parentComponent = parentComponent;\r\n\r\n this.model = new DiagramModel(\r\n this,\r\n undefined,\r\n config.name || 'unnamed',\r\n '',\r\n config.type || '',\r\n config.properties || []\r\n );\r\n this.backgroundColor = config.backgroundColor || '#FFFFFF';\r\n this.gridSize = config.gridSize || 0;\r\n this.snapToGrid = config.snapToGrid || false;\r\n this.guessConnectionType = config.guessConnectionType || false;\r\n this.priorityThresholds = config.priorityThresholds || [];\r\n this.priorityThreshold = this.priorityThresholds\r\n ? this.priorityThresholds[0]\r\n : undefined;\r\n this.layoutFormat = config.layoutFormat;\r\n this.userActions = config.userActions || {};\r\n this.validators = [];\r\n this.actionQueue = new ActionQueue(this, ACTION_QUEUE_SIZE);\r\n\r\n // load node types\r\n if (config.nodeTypes) {\r\n for (const nodeTypeConfig of config.nodeTypes) {\r\n const nodeType = new DiagramNodeType({\r\n ...config.nodeTypeDefaults,\r\n ...nodeTypeConfig\r\n });\r\n this.model.nodes.types.add(nodeType);\r\n }\r\n }\r\n // load connection types\r\n if (config.connectionTypes) {\r\n for (const connectionTypeConfig of config.connectionTypes) {\r\n const connectionType = new DiagramConnectionType({\r\n ...config.connectionTypeDefaults,\r\n ...connectionTypeConfig\r\n });\r\n this.model.connections.types.add(connectionType);\r\n }\r\n this.connectionType =\r\n config.defaultConnection !== undefined\r\n ? this.model.connections.types.get(config.defaultConnection)\r\n : undefined;\r\n }\r\n }\r\n\r\n addValidator(validator: DiagramValidator) {\r\n this.validators.push(validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n removeValidator(validator: DiagramValidator) {\r\n removeIfExists(this.validators, validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n getPriorityThresholdOptions(): number[] | undefined {\r\n return this.priorityThresholds;\r\n }\r\n\r\n getPriorityThreshold(): number | undefined {\r\n return this.priorityThreshold;\r\n }\r\n\r\n setPriorityThreshold(priority: number) {\r\n this.priorityThreshold = priority;\r\n this.updateModelInView();\r\n for (const node of this.model.nodes) {\r\n this.fitNodeInView(node.id);\r\n }\r\n this.parentComponent.palette?.refreshPalette();\r\n }\r\n\r\n // View methods\r\n\r\n initView(appendTo: HTMLElement): void {\r\n this.diagramRoot = d3.select(appendTo).append('div').node() as HTMLElement;\r\n\r\n d3.select(this.diagramRoot)\r\n .attr('tabindex', 0) // make element focusable\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .append('svg')\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n d3.select(this.diagramRoot)\r\n .on(Events.Click, () => {\r\n // focus on the diagram when clicking so that we can focus on the diagram\r\n // keyboard events only work if we're focusing on the diagram\r\n d3.select(this.diagramRoot).node()?.focus();\r\n })\r\n .on(Events.KeyUp, (event: KeyboardEvent) => {\r\n if (\r\n !event.ctrlKey &&\r\n (event.key === Keys.Delete || event.key === Keys.Backspace) &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n // delete selection\r\n if (this.userSelection.length > 0) {\r\n const nodesToBeDeleted: DiagramNode[] = [];\r\n const sectionsToBeDeleted: DiagramSection[] = [];\r\n const portsToBeDeleted: DiagramPort[] = [];\r\n const connectionsToBeDeleted: DiagramConnection[] = [];\r\n const fieldsToBeDeleted: DiagramField[] = [];\r\n for (const userSelectionElement of this.userSelection) {\r\n if (userSelectionElement instanceof DiagramNode) {\r\n nodesToBeDeleted.push(userSelectionElement);\r\n } else if (userSelectionElement instanceof DiagramSection) {\r\n sectionsToBeDeleted.push(userSelectionElement);\r\n } else if (userSelectionElement instanceof DiagramPort) {\r\n portsToBeDeleted.push(userSelectionElement);\r\n } else if (userSelectionElement instanceof DiagramConnection) {\r\n connectionsToBeDeleted.push(userSelectionElement);\r\n } else if (userSelectionElement instanceof DiagramField) {\r\n fieldsToBeDeleted.push(userSelectionElement);\r\n }\r\n }\r\n const removeAction = new RemoveAction(\r\n this.model,\r\n nodesToBeDeleted,\r\n sectionsToBeDeleted,\r\n portsToBeDeleted,\r\n connectionsToBeDeleted,\r\n fieldsToBeDeleted\r\n );\r\n removeAction.redo();\r\n this.actionQueue.add(removeAction);\r\n }\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'y') {\r\n // redo\r\n this.actionQueue.redo();\r\n }\r\n if (event.ctrlKey && event.key === 'z') {\r\n // undo\r\n this.actionQueue.undo();\r\n }\r\n });\r\n\r\n const canvasView = this.selectRoot()\r\n .append('g')\r\n .attr('class', 'canvas-view')\r\n .attr('width', `100%`)\r\n .attr('height', `100%`);\r\n\r\n const canvasBackground = canvasView\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', `100%`)\r\n .attr('height', `100%`)\r\n .attr('fill', this.backgroundColor)\r\n .attr('stroke-width', '0')\r\n .on(Events.MouseMove, (event: MouseEvent) => {\r\n if (this.unfinishedConnection !== undefined) {\r\n const pointerCoords = this.getPointerLocationRelativeToCanvas(event);\r\n this.unfinishedConnection.endCoords = pointerCoords;\r\n }\r\n })\r\n .on(Events.MouseOver, () => {\r\n this.unhighlight();\r\n })\r\n .on(Events.Click, () => {\r\n this.clearUserSelection();\r\n this.setPropertyEditorSelection(this.model);\r\n })\r\n .call(\r\n (this.zoomBehavior = d3\r\n .zoom<SVGRectElement, unknown>()\r\n .on(\r\n ZoomEvents.Zoom,\r\n (event: d3.D3ZoomEvent<SVGRectElement, unknown>) => {\r\n if (event.sourceEvent) {\r\n // zoom event was triggered by user\r\n if (!this.canUserPerformAction(DiagramActions.Zoom)) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n return;\r\n }\r\n if (\r\n event.sourceEvent.type === Events.Wheel &&\r\n event.sourceEvent.wheelDelta !== undefined\r\n ) {\r\n if (event.sourceEvent.wheelDelta > 0) {\r\n cursorStyle(CursorStyle.ZoomIn);\r\n }\r\n if (event.sourceEvent.wheelDelta < 0) {\r\n cursorStyle(CursorStyle.ZoomOut);\r\n }\r\n } else if (event.sourceEvent.type === Events.MouseMove) {\r\n cursorStyle(CursorStyle.AllScroll);\r\n }\r\n }\r\n this.zoomTransform = event.transform;\r\n const transformAttribute = event.transform.toString();\r\n this.selectCanvasElements().attr('transform', transformAttribute);\r\n d3.select(`#${this.backgroundPatternId}`).attr(\r\n 'patternTransform',\r\n transformAttribute\r\n );\r\n }\r\n )\r\n .on(ZoomEvents.End, () => {\r\n cursorStyle();\r\n }))\r\n );\r\n\r\n const canvasDefs = canvasView.append('defs');\r\n\r\n if (this.gridSize > 0) {\r\n const canvasBackgroundPattern = canvasDefs\r\n .append('pattern')\r\n .attr('id', this.backgroundPatternId)\r\n .attr('x', -this.gridSize / 2)\r\n .attr('y', -this.gridSize / 2)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('patternUnits', 'userSpaceOnUse');\r\n canvasBackgroundPattern\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('fill', this.backgroundColor);\r\n canvasBackgroundPattern\r\n .append('circle')\r\n .attr('cx', this.gridSize / 2)\r\n .attr('cy', this.gridSize / 2)\r\n .attr('r', this.gridSize / 16)\r\n .attr('fill', 'black')\r\n .attr('fill-opacity', 0.1);\r\n canvasBackground.attr('fill', `url(#${this.backgroundPatternId})`);\r\n }\r\n\r\n const canvasElements = canvasView\r\n .append('g')\r\n .attr('class', 'canvas-elements');\r\n canvasElements.append('g').attr('class', 'canvas-nodes');\r\n canvasElements.append('g').attr('class', 'canvas-sections');\r\n canvasElements.append('g').attr('class', 'canvas-ports');\r\n canvasElements.append('g').attr('class', 'canvas-connections');\r\n canvasElements.append('g').attr('class', 'canvas-fields');\r\n\r\n this.viewInitialized$.next();\r\n }\r\n\r\n zoomBy(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleBy(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n zoomTo(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleTo(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n translateBy(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateBy(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n translateTo(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateTo(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n center() {\r\n // if there are no nodes, we have nothing to do here\r\n if (this.model.nodes.length > 0) {\r\n const canvasViewBoundingBox = (\r\n this.selectCanvasView().select('rect').node() as SVGGraphicsElement\r\n ).getBBox();\r\n const minimumX = Math.min(\r\n ...this.model.nodes.all().map((n) => n.coords[0])\r\n );\r\n const maximumX = Math.max(\r\n ...this.model.nodes.all().map((n) => n.coords[0] + n.width)\r\n );\r\n const averageX = (minimumX + maximumX) / 2;\r\n const rangeX = maximumX - minimumX;\r\n const windowRangeX = canvasViewBoundingBox.width;\r\n const minimumY = Math.min(\r\n ...this.model.nodes.all().map((n) => n.coords[1])\r\n );\r\n const maximumY = Math.max(\r\n ...this.model.nodes.all().map((n) => n.coords[1] + n.height)\r\n );\r\n const averageY = (minimumY + maximumY) / 2;\r\n const rangeY = maximumY - minimumY;\r\n const windowRangeY = canvasViewBoundingBox.height;\r\n /*\r\n * (windowRangeX / rangeX) is the zoom level to fit everything horizontally\r\n * (windowRangeY / rangeY) is the zoom level to fit everything vertically\r\n * the minimum between them is the zoom to fit everything in the screen both horizontally and vertically\r\n * we also add 1 to the list so that if the zoom exceeds 1 it is set to 1\r\n * a zoom bigger than 1 means zooming in instead of out, and we don't want to zoom in if it's not necessary\r\n */\r\n const zoom = Math.min(windowRangeX / rangeX, windowRangeY / rangeY, 1);\r\n this.translateTo(averageX, averageY);\r\n this.zoomTo(zoom);\r\n }\r\n }\r\n\r\n getClosestGridPoint(point: Point): Point {\r\n if (this.gridSize === 0) {\r\n return point;\r\n } else {\r\n return [\r\n Math.round(point[0] / this.gridSize) * this.gridSize,\r\n Math.round(point[1] / this.gridSize) * this.gridSize\r\n ];\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private getEventHoldingCoordinates(event: MouseEvent): any {\r\n if (\r\n event.type === 'drag' ||\r\n event.type === 'start' ||\r\n event.type === 'end'\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const sourceEvent = (event as any).sourceEvent;\r\n if (\r\n sourceEvent &&\r\n (sourceEvent.type === 'touchmove' ||\r\n sourceEvent.type === 'touchstart' ||\r\n sourceEvent.type === 'touchend')\r\n ) {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.touches[0] ||\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.changedTouches[0]\r\n );\r\n }\r\n }\r\n return event;\r\n }\r\n\r\n getPointerLocationRelativeToCanvas(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n this.selectCanvasElements().node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToBody(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n d3.select('body').node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToScreen(event: MouseEvent): Point {\r\n const pointerLocationRelativeToBody =\r\n this.getPointerLocationRelativeToBody(event);\r\n return [\r\n pointerLocationRelativeToBody[0] - window.scrollX,\r\n pointerLocationRelativeToBody[1] - window.scrollY\r\n ];\r\n }\r\n\r\n updateModelInView(): void {\r\n this.updateNodesInView();\r\n this.updateSectionsInView();\r\n this.updatePortsInView();\r\n this.updateConnectionsInView();\r\n this.updateFieldsInView();\r\n }\r\n\r\n updateNodesInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramNode,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasNodes()\r\n .selectAll<SVGGElement, DiagramNode>('g.diagram-node')\r\n .data(\r\n this.model.nodes.filter(undefined, this.priorityThreshold),\r\n (d: DiagramNode) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-node${d.type.resizableX ? ' resizable-x' : ''}${\r\n d.type.resizableY ? ' resizable-y' : ''\r\n } ${d.type.look.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramNode) => {\r\n if (!event.ctrlKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new MoveNodeAction(\r\n this,\r\n d.id,\r\n d.coords,\r\n [0, 0]\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n const newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n d.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof MoveNodeAction\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n this.currentAction.to = newNodeCoords;\r\n this.currentAction.redo();\r\n this.actionQueue.add(this.currentAction);\r\n } else {\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new StretchNodeAction(\r\n this,\r\n d.id,\r\n Side.Left,\r\n d.width,\r\n d.width\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n (this.currentAction as StretchNodeAction).to = d.width;\r\n this.actionQueue.add(this.currentAction as StretchNodeAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new StretchNodeAction(\r\n this,\r\n d.id,\r\n Side.Top,\r\n d.height,\r\n d.height\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n (this.currentAction as StretchNodeAction).to = d.height;\r\n this.actionQueue.add(this.currentAction as StretchNodeAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new StretchNodeAction(\r\n this,\r\n d.id,\r\n Side.Right,\r\n d.width,\r\n d.width\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n (this.currentAction as StretchNodeAction).to = d.width;\r\n this.actionQueue.add(this.currentAction as StretchNodeAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new StretchNodeAction(\r\n this,\r\n d.id,\r\n Side.Bottom,\r\n d.height,\r\n d.height\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n (this.currentAction as StretchNodeAction).to = d.height;\r\n this.actionQueue.add(this.currentAction as StretchNodeAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection.attr(\r\n 'transform',\r\n (d) => `translate(${d.coords[0]},${d.coords[1]})`\r\n );\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.type.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedFillColor\r\n : (d.type.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedBorderColor\r\n : (d.type.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeImageLook).selectedBackgroundImage\r\n : (d.type.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook).selectedBackgroundImageTop\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updateSectionsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramSection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasSections()\r\n .selectAll<SVGGElement, DiagramSection>('g.diagram-section')\r\n .data(\r\n this.model.sections.filter(this.priorityThreshold),\r\n (d: DiagramSection) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-section${d.node?.type?.resizableX ? ' resizable-x' : ''}${\r\n d.node?.type?.resizableY ? ' resizable-y' : ''\r\n } ${d.getConfig()?.look?.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramSection) => {\r\n if (!event.ctrlKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n const node = d.node as DiagramNode;\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new MoveNodeAction(\r\n this,\r\n node.id,\r\n node.coords,\r\n [0, 0]\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n const node = d.node as DiagramNode;\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n const node = d.node as DiagramNode;\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof MoveNodeAction\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n this.currentAction.to = newNodeCoords;\r\n this.currentAction.redo();\r\n this.actionQueue.add(this.currentAction);\r\n } else {\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new StretchSectionAction(\r\n this,\r\n d.id,\r\n Side.Left,\r\n d.width,\r\n d.width\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n (this.currentAction as StretchSectionAction).to = d.width;\r\n this.actionQueue.add(this.currentAction as StretchSectionAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new StretchSectionAction(\r\n this,\r\n d.id,\r\n Side.Top,\r\n d.height,\r\n d.height\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n (this.currentAction as StretchSectionAction).to = d.height;\r\n this.actionQueue.add(this.currentAction as StretchSectionAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new StretchSectionAction(\r\n this,\r\n d.id,\r\n Side.Right,\r\n d.width,\r\n d.width\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n (this.currentAction as StretchSectionAction).to = d.width;\r\n this.actionQueue.add(this.currentAction as StretchSectionAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new StretchSectionAction(\r\n this,\r\n d.id,\r\n Side.Bottom,\r\n d.height,\r\n d.height\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n (this.currentAction as StretchSectionAction).to = d.height;\r\n this.actionQueue.add(this.currentAction as StretchSectionAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection.attr(\r\n 'transform',\r\n (d) => `translate(${d.coords[0]},${d.coords[1]})`\r\n );\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.getConfig()?.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedFillColor\r\n : (d.getConfig()?.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedBorderColor\r\n : (d.getConfig()?.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeImageLook).selectedBackgroundImage\r\n : (d.getConfig()?.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTop\r\n : (d.getConfig()?.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updatePortsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramPort,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasPorts()\r\n .selectAll<SVGGElement, DiagramPort>('g.diagram-port')\r\n .data(\r\n this.model.ports.filter(this.priorityThreshold),\r\n (d: DiagramPort) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-port');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramPort) => {\r\n this.highlight(d);\r\n if (this.unfinishedConnection) {\r\n const canConnectionFinishAtThisPort =\r\n (this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n d.getNode()?.type?.id || ''\r\n )) ||\r\n (this.unfinishedConnection.type.canStartFromType(\r\n d.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ));\r\n if (!canConnectionFinishAtThisPort) {\r\n cursorStyle(CursorStyle.NoDrop);\r\n }\r\n }\r\n })\r\n .on(Events.MouseOut, () => {\r\n if (this.unfinishedConnection) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramPort) => {\r\n if (!event.ctrlKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramPort, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramPort) => {\r\n if (this.canUserPerformAction(DiagramActions.AddConnection)) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.startConnection(d);\r\n // should be true after having called this.startConnection()\r\n if (this.unfinishedConnection) {\r\n this.unfinishedConnectionTracer = this.selectCanvasElements()\r\n .append('path')\r\n .attr('stroke', 'none')\r\n .attr('fill', 'none');\r\n }\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canUserPerformAction(DiagramActions.AddConnection)) {\r\n if (this.unfinishedConnection !== undefined) {\r\n const endCoords: Point = [event.x, event.y];\r\n this.unfinishedConnectionTracer?.attr(\r\n 'd',\r\n getConnectionPath(\r\n this.unfinishedConnection.type.shape,\r\n this.unfinishedConnection.startCoords,\r\n endCoords,\r\n this.unfinishedConnection.startDirection,\r\n this.unfinishedConnection.endDirection,\r\n this.unfinishedConnection.type.width,\r\n this.unfinishedConnection.startMarkerLook?.markerWidth,\r\n this.unfinishedConnection.endMarkerLook?.markerWidth\r\n )\r\n );\r\n const unfinishedConnectionGhostNode =\r\n this.unfinishedConnectionTracer?.node();\r\n if (unfinishedConnectionGhostNode) {\r\n let margin = 2;\r\n const unfinishedConnectionTotalLength =\r\n unfinishedConnectionGhostNode.getTotalLength();\r\n if (unfinishedConnectionTotalLength < margin) {\r\n margin = 0;\r\n }\r\n const beforeUnfinishedConnectionEnd =\r\n unfinishedConnectionGhostNode.getPointAtLength(\r\n unfinishedConnectionTotalLength - margin\r\n );\r\n this.unfinishedConnection.endCoords = [\r\n beforeUnfinishedConnectionEnd.x,\r\n beforeUnfinishedConnectionEnd.y\r\n ];\r\n } else {\r\n // if it fails, just use the event coordinates\r\n this.unfinishedConnection.endCoords = endCoords;\r\n }\r\n this.updateConnectionsInView(UNFINISHED_CONNECTION_ID);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canUserPerformAction(DiagramActions.AddConnection)) {\r\n cursorStyle();\r\n this.unfinishedConnectionTracer?.remove();\r\n if (this.mainUserHighlight instanceof DiagramPort) {\r\n this.finishConnection(this.mainUserHighlight);\r\n } else if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection ||\r\n this.mainUserHighlight instanceof DiagramField\r\n ) {\r\n let targetRootElement: DiagramNode | DiagramSection;\r\n if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight;\r\n } else if (\r\n this.mainUserHighlight.rootElement instanceof DiagramNode ||\r\n this.mainUserHighlight.rootElement instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight.rootElement;\r\n } else {\r\n this.dropConnection();\r\n return;\r\n }\r\n const closestPort = targetRootElement.getClosestPortToPoint([\r\n event.x,\r\n event.y\r\n ]);\r\n if (closestPort !== undefined) {\r\n this.finishConnection(closestPort);\r\n } else {\r\n this.dropConnection();\r\n }\r\n } else {\r\n this.dropConnection();\r\n }\r\n }\r\n })\r\n );\r\n enterSelection.append('circle');\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .select('circle')\r\n .attr('cx', 0)\r\n .attr('cy', 0)\r\n .attr('r', DIAGRAM_PORT_DEFAULTS.radius)\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? DIAGRAM_PORT_DEFAULTS.selectedColor\r\n : DIAGRAM_PORT_DEFAULTS.highlightedColor\r\n )\r\n .attr('opacity', (d) => (d.highlighted || d.selected ? 0.5 : 0));\r\n }\r\n\r\n updateConnectionsInView(...ids: string[]): void {\r\n const connectionList = this.model.connections.filter(\r\n undefined,\r\n this.priorityThreshold\r\n );\r\n if (this.unfinishedConnection) {\r\n connectionList.push(this.unfinishedConnection);\r\n }\r\n\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramConnection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasConnections()\r\n .selectAll<SVGGElement, DiagramConnection>('g.diagram-connection')\r\n .data(connectionList, (d: DiagramConnection) => d.id);\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-connection');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramConnection) => {\r\n if (d.end !== undefined) {\r\n this.highlight(d);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramConnection) => {\r\n if (!event.ctrlKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n });\r\n\r\n enterSelection.append('path').attr('class', 'diagram-connection-path');\r\n enterSelection.append('path').attr('class', 'diagram-connection-path-box');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-start-marker`)\r\n .attr('class', 'diagram-connection-start-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-end-marker`)\r\n .attr('class', 'diagram-connection-end-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-start-label');\r\n enterSelection.select('g.diagram-connection-start-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-start-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-middle-label');\r\n enterSelection.select('g.diagram-connection-middle-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-middle-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-end-label');\r\n enterSelection.select('g.diagram-connection-end-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-end-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n\r\n mergeSelection\r\n .select('path.diagram-connection-path')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('marker-start', (d) => `url(#${d.id}-start-marker)`)\r\n .attr('marker-end', (d) => `url(#${d.id}-end-marker)`)\r\n .attr('stroke', (d) => (d.selected ? d.type.selectedColor : d.type.color))\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.highlighted ? d.type.width + 1 : d.type.width}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n mergeSelection\r\n .select('path.diagram-connection-path-box')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('stroke', 'transparent')\r\n // allow generating pointer events even when it is transparent\r\n .attr('pointer-events', 'stroke')\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.type.width + CONNECTION_PATH_BOX_THICKNESS}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n\r\n mergeSelection.data().forEach((connection) => {\r\n this.updateConnectionLabelsInView(connection);\r\n this.updateConnectionMarkersInView(connection);\r\n });\r\n }\r\n\r\n updateFieldsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramField,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasFields()\r\n .selectAll<SVGForeignObjectElement, DiagramField>(\r\n 'foreignObject.diagram-field'\r\n )\r\n .data(\r\n this.model.fields.filter(this.priorityThreshold),\r\n (d: DiagramField) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-field');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .style('box-sizing', 'border-box')\r\n .on(Events.MouseOver, (event: MouseEvent, d: DiagramField) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramField) => {\r\n if (d.rootElement) {\r\n if (!event.ctrlKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d.rootElement);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramField) => {\r\n if (this.canUserPerformAction(DiagramActions.EditField) && d.editable) {\r\n this.currentAction = new EditFieldAction(this, d.id, d.text, '');\r\n this.createInputField(\r\n d.text,\r\n d.coords,\r\n d.width,\r\n d.height,\r\n d.fontSize,\r\n d.fontFamily || DIAGRAM_FIELD_DEFAULTS.fontFamily,\r\n (text) => {\r\n d.text = text;\r\n },\r\n (text) => {\r\n d.text = text;\r\n if (this.currentAction instanceof EditFieldAction) {\r\n this.currentAction.to = text;\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n );\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGForeignObjectElement, DiagramField, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramField) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new MoveNodeAction(\r\n this,\r\n node.id,\r\n node.coords,\r\n [0, 0]\r\n );\r\n }\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramField) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramField) => {\r\n if (this.canUserPerformAction(DiagramActions.MoveNode)) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof MoveNodeAction\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n this.currentAction.to = newNodeCoords;\r\n this.currentAction.redo();\r\n this.actionQueue.add(this.currentAction);\r\n } else {\r\n this.currentAction = undefined;\r\n }\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n )\r\n .append('xhtml:div')\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .style('display', 'flex')\r\n .append('xhtml:p')\r\n .style('box-sizing', 'border-box')\r\n .style('outline', 0)\r\n .style('margin', 0)\r\n .style('border', 0)\r\n .style('padding', 0)\r\n .style('user-select', 'none')\r\n .style('font-kerning', 'none')\r\n .style('white-space', 'nowrap');\r\n\r\n mergeSelection\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .select('div')\r\n .style('justify-content', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'flex-end'\r\n : 'flex-start'\r\n )\r\n .style('align-items', (d) =>\r\n d.verticalAlign === VerticalAlign.Center\r\n ? 'center'\r\n : d.verticalAlign === VerticalAlign.Bottom\r\n ? 'end'\r\n : 'start'\r\n )\r\n .select('p')\r\n .style('max-width', (d) => (d.fit ? 'default' : '100%'))\r\n .style('max-height', (d) => (d.fit ? 'default' : '100%'))\r\n .style('overflow', (d) => (d.fit ? 'default' : 'hidden'))\r\n .style('text-overflow', (d) => (d.fit ? 'default' : 'ellipsis'))\r\n .style('text-align', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'end'\r\n : 'start'\r\n )\r\n .style('font-size', (d) => `${d.fontSize}px`)\r\n .style(\r\n 'font-family',\r\n (d) => d.fontFamily || \"'Wonder Unit Sans', sans-serif\"\r\n )\r\n .style('font-weight', (d) => (d.highlighted ? 600 : 400))\r\n .style('color', (d) =>\r\n d.selected ? d.selectedColor || '#000000' : d.color || '#000000'\r\n )\r\n .html((d) =>\r\n d.text\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\\n/g, '<br/>')\r\n );\r\n }\r\n\r\n updateConnectionLabelsInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const pathSelection: d3.Selection<SVGPathElement, unknown, null, unknown> =\r\n connectionSelection.select('path');\r\n const pathNode = pathSelection.node();\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...connection.type.label\r\n };\r\n if (pathNode) {\r\n const pathLength = pathNode.getTotalLength();\r\n\r\n // bind start labels\r\n connectionSelection\r\n .select('g.diagram-connection-start-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.startLabel);\r\n const startLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-start-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (startLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathStartLabelPoint = pathNode.getPointAtLength(\r\n labelConfiguration.margin +\r\n Math.max(boundingWidth / 2, boundingHeight / 2)\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-start-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-start-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathStartLabelPoint.x},${pathStartLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind middle labels\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.middleLabel);\r\n const middleLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-middle-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (middleLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathMiddleLabelPoint = pathNode.getPointAtLength(pathLength / 2);\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathMiddleLabelPoint.x},${pathMiddleLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind end labels\r\n connectionSelection\r\n .select('g.diagram-connection-end-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.endLabel);\r\n const endLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-end-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (endLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathEndLabelPoint = pathNode.getPointAtLength(\r\n pathLength -\r\n labelConfiguration.margin -\r\n Math.max(boundingWidth / 2, boundingHeight / 2)\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-end-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-end-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathEndLabelPoint.x},${pathEndLabelPoint.y})`\r\n );\r\n }\r\n }\r\n }\r\n\r\n updateConnectionMarkersInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const startMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-start-marker');\r\n const endMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-end-marker');\r\n\r\n if (connection.startMarkerLook !== null) {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.startMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.startMarkerLook.markerHeight)\r\n .attr('refX', connection.startMarkerLook.markerRefX)\r\n .attr('refY', connection.startMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.startMarkerLook.selectedImage\r\n : connection.startMarkerLook.image\r\n )\r\n .attr('width', connection.startMarkerLook.markerWidth)\r\n .attr('height', connection.startMarkerLook.markerHeight);\r\n } else {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n\r\n if (connection.endMarkerLook !== null) {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.endMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.endMarkerLook.markerHeight)\r\n .attr('refX', connection.endMarkerLook.markerRefX)\r\n .attr('refY', connection.endMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.endMarkerLook.selectedImage\r\n : connection.endMarkerLook.image\r\n )\r\n .attr('width', connection.endMarkerLook.markerWidth)\r\n .attr('height', connection.endMarkerLook.markerHeight);\r\n } else {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n }\r\n\r\n fitFieldRootInView(id: string) {\r\n const field = this.model.fields.get(id);\r\n if (!field) {\r\n return;\r\n }\r\n if (field.rootElement instanceof DiagramNode && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let stretchX =\r\n fieldDimensions[0] +\r\n 2 * (field.rootElement.type.label?.margin || 0) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n 2 * (field.rootElement.type.label?.margin || 0) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure node is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n field.rootElement.type.minWidth\r\n ) {\r\n stretchX = field.rootElement.type.minWidth - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n field.rootElement.type.minHeight\r\n ) {\r\n stretchY = field.rootElement.type.minHeight - field.rootElement.height;\r\n }\r\n field.rootElement.stretch(Side.Right, stretchX);\r\n field.rootElement.stretch(Side.Bottom, stretchY);\r\n }\r\n if (field.rootElement instanceof DiagramSection && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let minimumFieldWidth = fieldDimensions[0];\r\n let minimumFieldHeight = fieldDimensions[1];\r\n for (const section of field.rootElement.node?.sections || []) {\r\n if (section.label) {\r\n if (\r\n section.indexXInNode === field.rootElement.indexXInNode &&\r\n section.indexYInNode !== field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldWidth = Math.max(\r\n minimumFieldWidth,\r\n this.minimumSizeOfField(section.label)[0]\r\n );\r\n } else if (\r\n section.indexXInNode !== field.rootElement.indexXInNode &&\r\n section.indexYInNode === field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldHeight = Math.max(\r\n minimumFieldHeight,\r\n this.minimumSizeOfField(section.label)[1]\r\n );\r\n }\r\n }\r\n }\r\n if (fieldDimensions[0] < minimumFieldWidth) {\r\n fieldDimensions[0] = minimumFieldWidth;\r\n }\r\n if (fieldDimensions[1] < minimumFieldHeight) {\r\n fieldDimensions[1] = minimumFieldHeight;\r\n }\r\n let stretchX =\r\n fieldDimensions[0] +\r\n 2 * (field.rootElement?.getConfig()?.label?.margin || 0) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n 2 * (field.rootElement?.getConfig()?.label?.margin || 0) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure section is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n (field.rootElement.getMinWidth() || 0)\r\n ) {\r\n stretchX =\r\n (field.rootElement.getMinWidth() || 0) - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n (field.rootElement.getMinHeight() || 0)\r\n ) {\r\n stretchY =\r\n (field.rootElement.getMinHeight() || 0) - field.rootElement.height;\r\n }\r\n field.rootElement.node?.stretchSections(\r\n Side.Right,\r\n stretchX,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n field.rootElement.node?.stretchSections(\r\n Side.Bottom,\r\n stretchY,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n }\r\n }\r\n\r\n fitNodeInView(id: string) {\r\n const node = this.model.nodes.get(id);\r\n if (!node) {\r\n return;\r\n }\r\n if (node.sections.length > 0 && this.priorityThreshold) {\r\n let newNodeWidth = 0;\r\n let newNodeHeight = 0;\r\n // calculate newNodeWidth, newNodeHeight as the rightmost and bottommost points of any of the sections of the node\r\n for (const section of node.sections) {\r\n if (section.getPriority() >= this.priorityThreshold) {\r\n const sectionLastXCoordRelativeToNode =\r\n section.coords[0] + section.width - node.coords[0];\r\n const sectionLastYCoordRelativeToNode =\r\n section.coords[1] + section.height - node.coords[1];\r\n newNodeWidth = Math.max(\r\n newNodeWidth,\r\n sectionLastXCoordRelativeToNode\r\n );\r\n newNodeHeight = Math.max(\r\n newNodeHeight,\r\n sectionLastYCoordRelativeToNode\r\n );\r\n }\r\n }\r\n // add the margin that goes between the rightmost and bottommost points of the sections and the edge of the node\r\n newNodeWidth += node.type.sectionGrid?.margin || 0;\r\n newNodeHeight += node.type.sectionGrid?.margin || 0;\r\n node.stretch(Side.Right, newNodeWidth - node.width);\r\n node.stretch(Side.Bottom, newNodeHeight - node.height);\r\n }\r\n }\r\n\r\n selectRoot(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3.select(this.diagramRoot).select('svg');\r\n }\r\n\r\n selectCanvasView(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-view`);\r\n }\r\n\r\n selectCanvasElements(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-elements`);\r\n }\r\n\r\n selectCanvasNodes(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-nodes`);\r\n }\r\n\r\n selectCanvasSections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-sections`);\r\n }\r\n\r\n selectCanvasPorts(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-ports`);\r\n }\r\n\r\n selectCanvasConnections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-connections`);\r\n }\r\n\r\n selectCanvasFields(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-fields`);\r\n }\r\n\r\n // User actions\r\n\r\n startConnection(port: DiagramPort) {\r\n if (\r\n this.connectionType &&\r\n (this.connectionType.canStartFromType(port.getNode()?.type?.id || '') ||\r\n this.connectionType.canFinishOnType(port.getNode()?.type?.id || ''))\r\n ) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n this.connectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canStartFromType(port.getNode()?.type?.id || ''));\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canFinishOnType(port.getNode()?.type?.id || ''));\r\n }\r\n if (differentConnectionType !== undefined) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n differentConnectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n // error: connection source of wrong type and no allowed type can be found\r\n }\r\n } else {\r\n // error: connection source of wrong type and can't guess for a different type\r\n }\r\n }\r\n }\r\n\r\n finishConnection(port: DiagramPort) {\r\n if (this.unfinishedConnection !== undefined) {\r\n if (this.unfinishedConnection.start !== port) {\r\n if (\r\n this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n this.unfinishedConnection.start?.id as string,\r\n port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.redo();\r\n this.actionQueue.add(addConnectionAction);\r\n } else if (\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canStartFromType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n port.id,\r\n this.unfinishedConnection.start?.id as string\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.redo();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) && t.canFinishOnType(port.getNode()?.type?.id || '')\r\n );\r\n let invertConnection = false;\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id ||\r\n ''\r\n ) && t.canStartFromType(port.getNode()?.type?.id || '')\r\n );\r\n invertConnection = true;\r\n }\r\n if (differentConnectionType !== undefined) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n differentConnectionType,\r\n invertConnection\r\n ? port.id\r\n : (this.unfinishedConnection.start?.id as string),\r\n invertConnection\r\n ? (this.unfinishedConnection.start?.id as string)\r\n : port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.redo();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n // error: connection target of wrong type and no allowed type can be found\r\n this.dropConnection();\r\n }\r\n } else {\r\n // error: connection target of wrong type and can't guess for a different type\r\n this.dropConnection();\r\n }\r\n }\r\n } else {\r\n // error: start port of a connection can't also be the end port\r\n this.dropConnection();\r\n }\r\n }\r\n }\r\n\r\n dropConnection() {\r\n this.unfinishedConnection?.setStart(undefined);\r\n this.unfinishedConnection?.setEnd(undefined);\r\n this.unfinishedConnection?.select()?.remove();\r\n this.unfinishedConnection = undefined;\r\n }\r\n\r\n highlight(element: DiagramElement): void {\r\n this.unhighlight();\r\n element.highlighted = true;\r\n this.mainUserHighlight = element;\r\n this.userHighlight.push(element);\r\n if (element instanceof DiagramNode) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateNodesInView(element.id);\r\n } else if (element instanceof DiagramSection) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateSectionsInView(element.id);\r\n } else if (element instanceof DiagramPort) {\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updatePortsInView(element.id);\r\n } else if (element instanceof DiagramConnection) {\r\n this.updateConnectionsInView(element.id);\r\n } else if (element instanceof DiagramField && element.rootElement) {\r\n this.highlight(element.rootElement);\r\n }\r\n }\r\n\r\n unhighlight(): void {\r\n for (const element of this.userHighlight) {\r\n element.highlighted = false;\r\n element.updateInView();\r\n }\r\n this.mainUserHighlight = undefined;\r\n this.userHighlight = [];\r\n }\r\n\r\n setPropertyEditorSelection(\r\n selection?: { valueSet: ValueSet } & (DiagramElement | DiagramModel)\r\n ): void {\r\n if (\r\n this.propertyEditorSelection !== undefined &&\r\n this.propertyEditorValues !== undefined\r\n ) {\r\n const previousSelectionId =\r\n this.propertyEditorSelection instanceof DiagramModel\r\n ? undefined\r\n : (this.propertyEditorSelection as DiagramElement).id;\r\n // check if there have been changes in the previously selected ValueSet,\r\n // and create an UpdateValuesAction if there have\r\n if (\r\n !equals(\r\n this.propertyEditorValues,\r\n this.propertyEditorSelection?.valueSet.getValues()\r\n )\r\n ) {\r\n const currentAction = new UpdateValuesAction(\r\n this.model,\r\n previousSelectionId,\r\n this.propertyEditorValues,\r\n structuredClone(this.propertyEditorSelection?.valueSet.getValues())\r\n );\r\n this.actionQueue.add(currentAction);\r\n this.propertyEditorValues = undefined;\r\n }\r\n }\r\n\r\n const propertyEditor = this.parentComponent.propertyEditor;\r\n const selectedValueSet = selection?.valueSet;\r\n if (selectedValueSet) {\r\n this.propertyEditorSelection = selection;\r\n this.propertyEditorValues = structuredClone(selectedValueSet.getValues());\r\n if (propertyEditor) {\r\n if (\r\n selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection\r\n ) {\r\n if (selection instanceof DiagramNode) {\r\n if (selection.name) {\r\n propertyEditor.title = `${selection.type.name}: ${selection.name}`;\r\n } else {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n } else if (selection instanceof DiagramConnection) {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n } else {\r\n propertyEditor.title = DIAGRAM_PROPERTIES_TEXT;\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n }\r\n }\r\n } else {\r\n this.propertyEditorSelection = undefined;\r\n this.propertyEditorValues = undefined;\r\n if (propertyEditor) {\r\n propertyEditor.title = '';\r\n propertyEditor.valueSet = undefined;\r\n }\r\n }\r\n }\r\n\r\n isInUserSelection(selection: DiagramElement): boolean {\r\n return this.userSelection.indexOf(selection) >= 0;\r\n }\r\n\r\n addToUserSelection(selection: DiagramElement): void {\r\n if (\r\n this.propertyEditorSelection === undefined &&\r\n (selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection)\r\n ) {\r\n this.setPropertyEditorSelection(selection);\r\n } else if (\r\n this.propertyEditorSelection === undefined &&\r\n selection instanceof DiagramSection\r\n ) {\r\n this.setPropertyEditorSelection(selection.node);\r\n } else {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n this.userSelection.push(selection);\r\n selection.selected = true;\r\n selection.updateInView();\r\n }\r\n\r\n removeFromUserSelection(selection: DiagramElement): void {\r\n if (this.propertyEditorSelection === selection) {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n this.userSelection.splice(this.userSelection.indexOf(selection), 1);\r\n selection.selected = false;\r\n selection.updateInView();\r\n }\r\n\r\n toggleUserSelection(selection: DiagramElement): void {\r\n if (this.isInUserSelection(selection)) {\r\n this.removeFromUserSelection(selection);\r\n } else {\r\n this.addToUserSelection(selection);\r\n }\r\n }\r\n\r\n clearUserSelection(): void {\r\n this.setPropertyEditorSelection(undefined);\r\n for (const userSelectionElement of this.userSelection) {\r\n userSelectionElement.selected = false;\r\n userSelectionElement.updateInView();\r\n }\r\n this.userSelection = [];\r\n }\r\n\r\n cancelAllUserActions(): void {\r\n this.currentAction = undefined;\r\n this.dropConnection();\r\n this.removeInputField();\r\n this.clearUserSelection();\r\n }\r\n\r\n canUserPerformAction(action: DiagramActions): boolean {\r\n return this.userActions[action] !== false;\r\n }\r\n\r\n private createInputField(\r\n text: string,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string,\r\n changeCallback?: (text: string) => void,\r\n finishCallback?: (text: string) => void\r\n ): void {\r\n // if we have a text input open, close it before creating a new one\r\n this.removeInputField();\r\n const inputFieldContainer = this.selectCanvasElements()\r\n .append('foreignObject')\r\n .attr('x', `${coords[0]}px`)\r\n .attr('y', `${coords[1]}px`)\r\n .attr('width', `${width}px`)\r\n .attr('height', `${height}px`)\r\n .style('box-sizing', 'border-box')\r\n .style('border', '1px solid');\r\n this.inputFieldContainer = inputFieldContainer;\r\n const inputField = inputFieldContainer.append('xhtml:textarea');\r\n let inputFieldWidth: number;\r\n let inputFieldHeight: number;\r\n inputField\r\n .text(text)\r\n .style('box-sizing', 'border-box')\r\n .style('width', `${width}px`)\r\n .style('height', `${height}px`)\r\n .style('font-size', `${fontSize}px`)\r\n .style('font-family', fontFamily)\r\n .style('resize', 'none')\r\n .style('outline', 0)\r\n .style('border', 0)\r\n .style('margin', 0)\r\n .style('padding', 0)\r\n .on(Events.KeyUp, (event: KeyboardEvent) => {\r\n event.stopPropagation();\r\n if (event.key === Keys.Escape) {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n }\r\n })\r\n .on(Events.Input, () => {\r\n const value = inputField.property('value');\r\n inputField.attr('cols', numberOfColumns(value) + 1);\r\n inputField.attr('rows', numberOfRows(value) + 1);\r\n // reset width and height so that later the scrollWidth and scrollHeight are fit to the size of the text\r\n inputField.style('width', '');\r\n inputField.style('height', '');\r\n // add one pixel of margin of error\r\n inputFieldWidth = inputField.property('scrollWidth') + 1;\r\n inputFieldHeight = inputField.property('scrollHeight') + 1;\r\n // keep the field from shrinking below its original size\r\n const newWidth = Math.max(inputFieldWidth, width);\r\n const newHeight = Math.max(inputFieldHeight, height);\r\n inputFieldContainer?.attr('width', `${newWidth}px`);\r\n inputField.style('width', `${newWidth}px`);\r\n inputFieldContainer?.attr('height', `${newHeight}px`);\r\n inputField.style('height', `${newHeight}px`);\r\n if (changeCallback) {\r\n changeCallback(value);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent) => {\r\n event.stopPropagation();\r\n })\r\n .on(Events.FocusOut, () => {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n });\r\n const htmlInput = inputField.node() as HTMLInputElement;\r\n htmlInput.focus();\r\n htmlInput.select();\r\n }\r\n\r\n private removeInputField(): void {\r\n // when removing an element, a blur event is emitted\r\n // we remove the listener for blur so that it doesn't shoot again on element removal\r\n this.inputFieldContainer?.select('input')?.on(Events.Blur, null);\r\n this.inputFieldContainer?.remove();\r\n this.inputFieldContainer = undefined;\r\n }\r\n\r\n private minimumSizeOfField(field: DiagramField): Point {\r\n const pNode = field.select()?.select('p')?.node() as HTMLParagraphElement;\r\n if (!pNode) {\r\n // happens when a field has been created but not updated in view yet\r\n return [0, 0];\r\n }\r\n const pBoundingBox = pNode.getBoundingClientRect();\r\n return [\r\n pBoundingBox.width / this.zoomTransform.k,\r\n pBoundingBox.height / this.zoomTransform.k\r\n ];\r\n }\r\n}\r\n\r\n/**\r\n * Get the SVG path of a diagram connection.\r\n * @see linePath\r\n * @private\r\n */\r\nconst getConnectionPath = (\r\n shape: LineShape,\r\n startCoords: Point,\r\n endCoords: Point,\r\n startDirection: Side | undefined,\r\n endDirection: Side | undefined,\r\n width: number,\r\n startMarkerWidth: number | undefined,\r\n endMarkerWidth: number | undefined\r\n): string => {\r\n return linePath(\r\n shape,\r\n [startCoords, endCoords],\r\n startDirection,\r\n endDirection,\r\n Math.max(\r\n // reasonable value for the minimumDistanceBeforeTurn relative to the line width\r\n 10,\r\n startMarkerWidth || 0,\r\n endMarkerWidth || 0\r\n ) * width\r\n );\r\n};\r\n\r\nexport const cursorStyle = (style?: CursorStyle) => {\r\n if (!style) {\r\n d3.select('body').style('cursor', CursorStyle.Auto);\r\n } else {\r\n d3.select('body').style('cursor', style);\r\n }\r\n};\r\n","import { Injectable } from '@angular/core';\nimport { DiagramCanvas } from '../diagram-editor/diagram/diagram-canvas';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\n\n/**\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class CanvasProviderService {\n private _canvas!: Canvas;\n\n /**\n * Initialize the diagram canvas object of this context.\n * @private\n * @param parentComponent A diagram editor.\n * @param config A diagram configuration.\n */\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\n this._canvas = new DiagramCanvas(parentComponent, config);\n }\n\n /**\n * Attach the canvas of this context to an HTML Element to render it there.\n * @private\n * @param appendTo An HTML Element.\n */\n initCanvasView(appendTo: HTMLElement) {\n this._canvas.initView(appendTo);\n }\n\n /**\n * Get the diagram canvas of this context. Should only be called after the view of the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram canvas.\n */\n getCanvas(): Canvas {\n return this._canvas;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { DiagramActions } from '../diagram-editor/diagram/diagram-action';\r\nimport { layouts } from '../diagram-editor/diagram/layout/diagram-layout';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { DiagramButtons } from '../interfaces/diagram-buttons';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Corner, Side } from '../util/svg-util';\r\n\r\n/**\r\n * Buttons used to trigger diagram functionalities by the user.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram-buttons',\r\n templateUrl: './diagram-buttons.component.html',\r\n imports: [CommonModule]\r\n})\r\nexport class DiagramButtonsComponent implements AfterViewInit, DiagramButtons {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('collapsableButtons')\r\n collapsableButtons!: ElementRef<HTMLDivElement>;\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n enableFilter = true;\r\n @Input()\r\n enableLayout = true;\r\n @Input()\r\n enableUndoRedo = true;\r\n @Input()\r\n enableZoom = true;\r\n @Input()\r\n zoomRate = 2;\r\n\r\n filterOn = false;\r\n collapsed = true;\r\n animationOngoing = false;\r\n private sizeAttribute!: string;\r\n private transformFunction!: string;\r\n private transformOrigin!: string;\r\n private marginSide!: string;\r\n private collapsableButtonsSize!: string;\r\n\r\n DiagramActions = DiagramActions;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit() {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'top';\r\n this.marginSide = 'bottom';\r\n break;\r\n case Side.Top:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'bottom';\r\n this.marginSide = 'top';\r\n break;\r\n case Side.Left:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'right';\r\n this.marginSide = 'left';\r\n break;\r\n case Side.Right:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'left';\r\n this.marginSide = 'right';\r\n break;\r\n }\r\n const numberOfCollapsableButtons = d3\r\n .select(this.collapsableButtons.nativeElement)\r\n .selectChildren()\r\n .size();\r\n this.collapsableButtonsSize = `${4 * numberOfCollapsableButtons}rem`;\r\n d3.select(this.collapsableButtons.nativeElement)\r\n .style(`margin-${this.marginSide}`, '-1rem')\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`)\r\n .style('transform-origin', this.transformOrigin);\r\n }\r\n\r\n // Collapse functions\r\n\r\n async toggleCollapse() {\r\n if (!this.animationOngoing) {\r\n const duration = 500;\r\n const collapsableButtons = d3.select(\r\n this.collapsableButtons.nativeElement\r\n );\r\n if (this.collapsed) {\r\n this.collapsed = false;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, this.collapsableButtonsSize)\r\n .style('transform', `${this.transformFunction}(1)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n } else {\r\n this.collapsed = true;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n }\r\n }\r\n }\r\n\r\n // Button functions\r\n\r\n zoomIn(): void {\r\n this.canvas.zoomBy(this.zoomRate);\r\n }\r\n\r\n zoomOut(): void {\r\n this.canvas.zoomBy(1 / this.zoomRate);\r\n }\r\n\r\n center(): void {\r\n this.canvas.center();\r\n }\r\n\r\n layout(): void {\r\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\r\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\r\n }\r\n }\r\n\r\n filter(): void {\r\n this.filterOn = !this.filterOn;\r\n const priorityThresholds = this.canvas.getPriorityThresholdOptions();\r\n if (priorityThresholds && priorityThresholds.length >= 2) {\r\n this.canvas.setPriorityThreshold(\r\n priorityThresholds[this.filterOn ? 1 : 0]\r\n );\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.canvas.actionQueue.undo();\r\n }\r\n\r\n redo(): void {\r\n this.canvas.actionQueue.redo();\r\n }\r\n}\r\n","<div class=\"diagram-buttons {{ location }} {{ direction }}\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"zoom-in\"\r\n (click)=\"zoomIn()\"\r\n >\r\n <span class=\"tooltip\">Zoom in</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"zoom-out\"\r\n (click)=\"zoomOut()\"\r\n >\r\n <span class=\"tooltip\">Zoom out</span>\r\n </button>\r\n <div #collapsableButtons class=\"collapsable-buttons collapsed\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"center\"\r\n (click)=\"center()\"\r\n >\r\n <span class=\"tooltip\">Fit diagram to screen</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"undo\" (click)=\"undo()\">\r\n <span class=\"tooltip\">Undo</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"redo\" (click)=\"redo()\">\r\n <span class=\"tooltip\">Redo</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableLayout && canvas.layoutFormat\"\r\n class=\"layout\"\r\n (click)=\"layout()\"\r\n >\r\n <span class=\"tooltip\">Apply layout</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableFilter\"\r\n class=\"filter\"\r\n [class]=\"filterOn ? 'on' : 'off'\"\r\n (click)=\"filter()\"\r\n >\r\n <span class=\"tooltip\">Apply filter</span>\r\n </button>\r\n </div>\r\n <button class=\"more-options\" (click)=\"toggleCollapse()\">\r\n <span *ngIf=\"!collapsed\" class=\"tooltip\">Less options</span>\r\n <span *ngIf=\"collapsed\" class=\"tooltip\">More options</span>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { merge, delay, map } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Side } from '../util/svg-util';\r\nimport { DiagramError } from './diagram-error';\r\n\r\n/**\r\n * Displays the errors detected by a diagram's validators.\r\n * @see DiagramValidator\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-errors',\r\n templateUrl: './errors.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class ErrorsComponent implements AfterViewInit {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\r\n\r\n errors: DiagramError[] = [];\r\n\r\n Side = Side;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit(): void {\r\n merge(this.canvas.validatorChanges$, this.canvas.diagramChanges$)\r\n .pipe(\r\n // delay to avoid errors of variables changing right after checking\r\n delay(1),\r\n map(() => this.validate())\r\n )\r\n .subscribe();\r\n }\r\n\r\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3.select(this.errorsContainer.nativeElement).select('.error-panel');\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n for (const validator of this.canvas.validators) {\r\n const newErrors = validator.validate(this.canvas.model);\r\n this.errors = [...this.errors, ...newErrors];\r\n }\r\n }\r\n\r\n showError(error: DiagramError): void {\r\n if (error.elementId && error.propertyNames) {\r\n this.canvas.setPropertyEditorSelection(\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId)\r\n );\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n } else if (!error.elementId && error.propertyNames) {\r\n this.canvas.setPropertyEditorSelection();\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n }\r\n // TODO: IF ERROR IS IN AN ELEMENT BUT NOT IN A SPECIFIC PROPERTY, WE COULD HIGHLIGHT THE ELEMENT\r\n }\r\n}\r\n","<div #errorsContainer class=\"errors\">\n <div\n *ngIf=\"errors.length === 0\"\n class=\"errors-summary no-errors prevent-user-select\"\n >\n <span>No errors found</span>\n </div>\n <div\n *ngIf=\"errors.length > 0\"\n class=\"errors-summary with-errors prevent-user-select\"\n >\n <span>{{ errors.length }} errors found</span>\n <div class=\"collapse-button-container\">\n <daga-collapse-button\n [collapsableSelector]=\"errorsContainer\"\n [collapsableAdditionalSelector]=\"'.error-panel'\"\n [direction]=\"Side.Top\"\n [rule]=\"'display'\"\n [collapsedValue]=\"'none'\"\n [visibleValue]=\"'block'\"\n />\n </div>\n </div>\n <div *ngIf=\"errors.length > 0\" class=\"error-panel\">\n <ol>\n <li\n *ngFor=\"let error of errors; index as i\"\n (click)=\"showError(error)\"\n [innerHTML]=\"error.message\"\n ></li>\n </ol>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport {\r\n AddNodeAction,\r\n DiagramActions\r\n} from '../diagram-editor/diagram/diagram-action';\r\nimport {\r\n ConnectionTemplateConfig,\r\n NodeTemplateConfig,\r\n PaletteSectionConfig\r\n} from '../diagram-editor/diagram/diagram-config';\r\nimport { DiagramConnectionType } from '../diagram-editor/diagram/diagram-connection';\r\nimport { DIAGRAM_FIELD_DEFAULTS } from '../diagram-editor/diagram/diagram-field';\r\nimport { DiagramNodeType } from '../diagram-editor/diagram/diagram-node';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { Palette } from '../interfaces/palette';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Point } from '../util/canvas-util';\r\nimport { DragEvents, Events } from '../util/events';\r\nimport { ClosedShape, generalClosedPath } from '../util/shape';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { cursorStyle } from '../diagram-editor/diagram/diagram-canvas';\r\nimport { CursorStyle } from '../util/style';\r\n\r\n/**\r\n * Palette that the user can drag and drop nodes from.\r\n * @see DiagramConfig\r\n * @see DiagramNode\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-palette',\r\n templateUrl: './palette.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class PaletteComponent\r\n implements AfterContentInit, AfterViewInit, Palette\r\n{\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n palettes!: PaletteSectionConfig[];\r\n @Input()\r\n currentPalette!: PaletteSectionConfig;\r\n @Input()\r\n currentCategory = '';\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n\r\n private priorityThreshold?: number;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterContentInit(): void {\r\n // we initialize the currentPalette variable if it hasn't been initalized with a proper value\r\n // doing this in ngAfterViewInit() would cause an ExpressionChangedAfterItHasBeenCheckedError\r\n this.currentPalette = this.currentPalette || this.palettes[0];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.refreshPalette();\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n break;\r\n }\r\n }\r\n\r\n refreshPalette(): void {\r\n this.switchPalette(this.currentPalette);\r\n }\r\n\r\n switchPalette(palette: PaletteSectionConfig): void {\r\n this.currentPalette = palette;\r\n\r\n this.selectPalette().selectAll('*').remove();\r\n this.priorityThreshold = this.canvas.getPriorityThreshold();\r\n\r\n if (palette.categories) {\r\n this.appendCategories(palette.categories);\r\n }\r\n if (palette.templates) {\r\n for (const template of palette.templates) {\r\n this.appendTemplate(template);\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return this.selectPanel().select('.palette-view');\r\n }\r\n\r\n private appendCategories(categories: {\r\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\r\n }): void {\r\n const thisComponent = this.selectPalette()\r\n .append('select')\r\n .style('width', '100%')\r\n .style('height', '2rem')\r\n .style('padding', '0.5rem')\r\n .style('border-radius', '0.25rem')\r\n .style('background-color', '#f7f8fc')\r\n .style('border', `1px solid #e6e6e6`);\r\n thisComponent.append('option').attr('value', '').text('(None selected)');\r\n for (const categoryKey in categories) {\r\n thisComponent\r\n .append('option')\r\n .attr('value', categoryKey)\r\n .text(categoryKey);\r\n }\r\n thisComponent.on(Events.Change, () => {\r\n if (this.currentCategory) {\r\n this.selectPalette()\r\n .selectAll(`.template-container.in-category`)\r\n .remove();\r\n }\r\n\r\n const selectedKey = thisComponent.property('value');\r\n this.currentCategory = selectedKey;\r\n const templatesInCategory = categories[selectedKey] || [];\r\n for (const template of templatesInCategory) {\r\n this.appendTemplate(template, 'in-category');\r\n }\r\n });\r\n if (this.currentCategory) {\r\n // if we had a category already selected, re-select it\r\n thisComponent.property('value', this.currentCategory);\r\n thisComponent.dispatch(Events.Change);\r\n }\r\n }\r\n\r\n private appendTemplate(\r\n template: NodeTemplateConfig | ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (template.templateType === 'node') {\r\n const nodeType = this.canvas.model.nodes.types.get(template.type);\r\n if (nodeType) {\r\n this.appendNodeTemplate(nodeType, template, classes);\r\n } else {\r\n console.error(`Could not find a node type called '${template.type}'`);\r\n }\r\n } else if (template.templateType === 'connection') {\r\n {\r\n const connectionType = this.canvas.model.connections.types.get(\r\n template.type\r\n );\r\n if (connectionType) {\r\n this.appendConnectionTemplate(connectionType, template, classes);\r\n } else {\r\n console.error(\r\n `Could not find a connection type called '${template.type}'`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private appendNodeTemplate(\r\n type: DiagramNodeType,\r\n templateConfig: NodeTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (\r\n this.priorityThreshold !== undefined &&\r\n type.priority < this.priorityThreshold\r\n ) {\r\n return;\r\n }\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${type.defaultWidth}px`)\r\n .style('height', `${type.defaultHeight}px`)\r\n .call(\r\n d3\r\n .drag<HTMLDivElement, unknown, HTMLElement>()\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n }\r\n })\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n d3.select('body').style('cursor', 'grabbing');\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n // when trying to place a unique node in a diagram that already has a node of that type, set cursor style to not allowed\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(type.id) !== undefined\r\n ) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n // take node back to its original position\r\n d3.select('body').style('cursor', 'auto');\r\n thisComponent\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 'auto');\r\n // try to place node\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(type.id) !== undefined\r\n ) {\r\n // can't place, it's unique and that node is already in the model\r\n return;\r\n }\r\n const pointerCoordsRelativeToScreen =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoordsRelativeToScreen.length < 2 ||\r\n isNaN(pointerCoordsRelativeToScreen[0]) ||\r\n isNaN(pointerCoordsRelativeToScreen[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n\r\n const element = document.elementFromPoint(\r\n pointerCoordsRelativeToScreen[0],\r\n pointerCoordsRelativeToScreen[1]\r\n );\r\n if (\r\n element &&\r\n !this.canvas.selectCanvasView().node()?.contains(element)\r\n ) {\r\n // can't place, node hasn't been dropped on the canvas\r\n return;\r\n }\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToCanvas(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n let newNodeCoords: Point = [\r\n pointerCoords[0] - type.defaultWidth / 2,\r\n pointerCoords[1] - type.defaultHeight / 2\r\n ];\r\n if (this.canvas.snapToGrid) {\r\n newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);\r\n }\r\n const addNodeAction = new AddNodeAction(\r\n this.canvas,\r\n type,\r\n newNodeCoords,\r\n templateConfig.label,\r\n templateConfig.values\r\n );\r\n addNodeAction.redo();\r\n this.canvas.actionQueue.add(addNodeAction);\r\n // reset cursor\r\n cursorStyle();\r\n }\r\n })\r\n )\r\n .append('svg')\r\n .attr('class', `palette-node ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n switch (type.look.lookType) {\r\n case 'shaped-look':\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n type.look.shape,\r\n 0,\r\n 0,\r\n type.defaultWidth,\r\n type.defaultHeight\r\n )\r\n )\r\n .attr('fill', type.look.fillColor)\r\n .attr('stroke', type.look.borderColor)\r\n .attr('stroke-width', '1px');\r\n break;\r\n case 'image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.defaultWidth)\r\n .attr('height', type.defaultHeight)\r\n .attr('href', type.look.backgroundImage)\r\n .attr('preserveAspectRatio', 'none');\r\n break;\r\n case 'stretchable-image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTop)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', 0)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageCenter)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottom)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomRight)\r\n .attr('preserveAspectRatio', 'none');\r\n }\r\n\r\n if (templateConfig.label) {\r\n const labelConfig = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label,\r\n ...templateConfig.labelLook\r\n };\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${type.defaultWidth / 2},${type.defaultHeight / 2 + 5})`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', `${labelConfig.fontSize}px`)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfig.fontFamily)\r\n .attr('font-weight', 400)\r\n .attr('fill', labelConfig.color)\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n\r\n private appendConnectionTemplate(\r\n type: DiagramConnectionType,\r\n templateConfig: ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${templateConfig.width}px`)\r\n .style('height', `${templateConfig.height}px`)\r\n .append('svg')\r\n .attr('class', `palette-button ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .on('click', () => {\r\n this.canvas.connectionType = type;\r\n });\r\n\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n ClosedShape.Rectangle,\r\n 0,\r\n 0,\r\n templateConfig.width,\r\n templateConfig.height\r\n )\r\n )\r\n .attr('fill', templateConfig.backgroundColor)\r\n .attr('stroke', 'black')\r\n .attr('stroke-width', '1px');\r\n\r\n if (templateConfig.icon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n\r\n if (templateConfig.label !== '') {\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${templateConfig.width / 2},${\r\n templateConfig.height / 2 + 5\r\n })`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', '20px')\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\r\n .attr('font-weight', 400)\r\n .attr('fill', '#000000')\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n}\r\n","<div #panel class=\"panel {{ location }} {{ direction }}\">\n <daga-collapse-button\n #collapseButton\n [direction]=\"direction\"\n [collapsableSelector]=\"panel\"\n collapsableAdditionalSelector=\".panel-content\"\n rule=\"display\"\n collapsedValue=\"none\"\n visibleValue=\"block\"\n />\n <div class=\"panel-content\">\n <div *ngIf=\"palettes.length > 1\" class=\"panel-tabs\">\n <div\n *ngFor=\"let palette of palettes\"\n class=\"panel-tab\"\n [class]=\"palette === currentPalette ? 'current-tab' : ''\"\n (click)=\"switchPalette(palette)\"\n >\n {{ palette.name }}\n </div>\n </div>\n <div class=\"palette-view\"></div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\n/**\n * Editor of a property of text list type within a property editor.\n * @see TextList\n * @see PropertyEditor\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-text-list-editor',\n templateUrl: './text-list-editor.component.html',\n imports: [CommonModule, LuxModule, FormsModule]\n})\nexport class TextListEditorComponent {\n private _value: string[] = [];\n @Input()\n set value(val: string[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = val.length === 0 && this._value.length === 0;\n this._value = val;\n if (initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): string[] {\n return this._value;\n }\n @Input() valueInput = '';\n\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<string[]>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n getValueFromEvent(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n removeFromValue(index: number): void {\n if (this._value.length > index) {\n this._value.splice(index, 1);\n this.valueChange.emit(this._value);\n }\n this.cdr.detectChanges();\n }\n\n editFromValue(item: string, index: number): void {\n if (this._value.length > index) {\n this._value.splice(index, 1, item);\n this.valueChange.emit(this._value);\n }\n this.cdr.detectChanges();\n }\n\n addToValue(): void {\n if (this.valueInput !== '') {\n this._value.push(this.valueInput);\n this.valueChange.emit(this._value);\n this.clearInput();\n this.cdr.detectChanges();\n }\n }\n\n clearInput(): void {\n this.valueInput = '';\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.addToValue();\n }\n }\n}\n","<div *ngFor=\"let item of value; let index = index\" class=\"value-item-element\">\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item\"\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\n ></lux-input>\n <button\n *ngIf=\"!disabled\"\n class=\"property-button\"\n (click)=\"removeFromValue(index)\"\n >\n <div class=\"icon close-icon\"></div>\n </button>\n</div>\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"valueInput\"\n ></lux-input>\n <button\n *ngIf=\"valueInput !== ''\"\n class=\"clear\"\n (click)=\"clearInput()\"\n ></button>\n </div>\n <button class=\"property-button\" (click)=\"addToValue()\">\n <div class=\"icon add-icon\"></div>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\n/**\n * Editor of a property of text map type within a property editor.\n * @see TextMap\n * @see PropertyEditor\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-text-map-editor',\n templateUrl: './text-map-editor.component.html',\n imports: [CommonModule, LuxModule, FormsModule]\n})\nexport class TextMapEditorComponent {\n private _value: { [name: string]: string } = {};\n\n @Input()\n set value(val: { [name: string]: string }) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty =\n Object.keys(val).length === 0 && Object.keys(this._value).length === 0;\n this._value = val;\n if (initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): { [name: string]: string } {\n return this._value;\n }\n @Input() keyInput = '';\n @Input() valueInput = '';\n\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n getValueFromEvent(event: Event): string {\n return (event.target as HTMLInputElement).value;\n }\n\n removeFromValue(key: string): void {\n delete this._value[key];\n this.cdr.detectChanges();\n }\n\n editKey(oldKey: string, newKey: string): void {\n if (oldKey !== newKey) {\n this._value[newKey] = this._value[oldKey];\n delete this._value[oldKey];\n this.cdr.detectChanges();\n }\n }\n\n editValue(key: string, value: string): void {\n this._value[key] = value;\n this.cdr.detectChanges();\n }\n\n addToValue(): void {\n if (this.keyInput !== '' && this.valueInput !== '') {\n this._value[this.keyInput] = this.valueInput;\n this.valueChange.emit(this._value);\n this.clearKeyInput();\n this.clearValueInput();\n this.cdr.detectChanges();\n }\n }\n\n clearKeyInput(): void {\n this.keyInput = '';\n }\n\n clearValueInput(): void {\n this.valueInput = '';\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.addToValue();\n }\n }\n}\n","<div *ngFor=\"let item of value | keyvalue\" class=\"value-item-element\">\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item.key\"\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\n ></lux-input>\n <lux-input\n type=\"text\"\n [disabled]=\"disabled\"\n [value]=\"item.value\"\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\n ></lux-input>\n <button\n *ngIf=\"!disabled\"\n class=\"property-button\"\n (click)=\"removeFromValue(item.key)\"\n >\n <div class=\"icon close-icon\"></div>\n </button>\n</div>\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"keyInput\"\n ></lux-input>\n <button\n *ngIf=\"keyInput !== ''\"\n class=\"clear\"\n (click)=\"clearKeyInput()\"\n ></button>\n </div>\n <div class=\"relatively-positioned\">\n <lux-input\n type=\"text\"\n (keyup)=\"onKeyUp($event)\"\n [(ngModel)]=\"valueInput\"\n ></lux-input>\n <button\n *ngIf=\"valueInput !== ''\"\n class=\"clear\"\n (click)=\"clearValueInput()\"\n ></button>\n </div>\n <button class=\"property-button\" (click)=\"addToValue()\">\n <div class=\"icon add-icon\"></div>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LuxModule, RadioItem } from '@metadev/lux';\r\nimport {\r\n Property,\r\n Type,\r\n ValueSet,\r\n equals\r\n} from '../diagram-editor/diagram/diagram-property';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\r\nimport { DiagramActions } from '../diagram-editor/diagram/diagram-action';\r\n\r\n/**\r\n * Editor of a value set within a property editor.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-object-editor',\r\n templateUrl: './object-editor.component.html',\r\n imports: [\r\n CommonModule,\r\n LuxModule,\r\n FormsModule,\r\n TextListEditorComponent,\r\n TextMapEditorComponent\r\n ]\r\n})\r\nexport class ObjectEditorComponent {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n get userCanEdit(): boolean {\r\n return this.canvas.canUserPerformAction(DiagramActions.UpdateValues);\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n /** How many object-editors are parents of this object-editor. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n booleanRadioItems: RadioItem[] = [\r\n { value: false, label: 'No' },\r\n { value: true, label: 'Yes' }\r\n ];\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n displayProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.displayProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n hideProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.hideProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setValue(property: Property, value: unknown) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n if (property.editable) {\r\n if (!equals(this.valueSet.getValue(property.name), value)) {\r\n this.valueSet.setValue(property.name, value);\r\n // register a diagram change when editing a value\r\n this.canvas.diagramChanges$?.next();\r\n }\r\n }\r\n }\r\n\r\n convertDate(date: string | number | Date) {\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n return date && !isNaN(date.valueOf()) ? new Date(date).toISOString() : '';\r\n }\r\n}\r\n","<div\n *ngFor=\"let property of valueSet?.displayedProperties || []\"\n class=\"property\"\n [class]=\"property.name + ' depth-' + depth\"\n>\n <p class=\"property-name\">\n {{ property.name }}\n <button class=\"property-button\" (click)=\"hideProperty(property.name)\">\n <div class=\"icon hide-icon\"></div>\n </button>\n </p>\n\n <lux-input\n *ngIf=\"property.type === Type.Text\"\n type=\"text\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <textarea\n *ngIf=\"property.type === Type.TextArea\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [ngModel]=\"valueSet?.getValue(property.name)\"\n (ngModelChange)=\"setValue(property, $event)\"\n ></textarea>\n <lux-input\n *ngIf=\"property.type === Type.Number\"\n type=\"number\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Color\"\n type=\"color\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Date\"\n type=\"date\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"convertDate(valueSet?.getValue(property.name))\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Time\"\n type=\"time\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"convertDate(valueSet?.getValue(property.name))\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-input\n *ngIf=\"property.type === Type.Url\"\n type=\"url\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-input>\n <lux-radiogroup\n *ngIf=\"property.type === Type.Boolean\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [items]=\"booleanRadioItems\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-radiogroup>\n <lux-autocomplete\n *ngIf=\"property.type === Type.Option\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [dataSource]=\"property.options || []\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-autocomplete>\n <lux-autocomplete-list\n *ngIf=\"property.type === Type.OptionList\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [dataSource]=\"property.options || []\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></lux-autocomplete-list>\n <daga-text-list-editor\n *ngIf=\"property.type === Type.TextList\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></daga-text-list-editor>\n <daga-text-map-editor\n *ngIf=\"property.type === Type.TextMap\"\n [disabled]=\"!property.editable || !userCanEdit\"\n [value]=\"valueSet?.getValue(property.name)\"\n (valueChange)=\"setValue(property, $event)\"\n ></daga-text-map-editor>\n <div *ngIf=\"property.type === Type.Object\" class=\"left-bar\">\n <daga-object-editor\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\n [depth]=\"depth + 1\"\n ></daga-object-editor>\n </div>\n</div>\n<div class=\"property\" *ngIf=\"valueSet && valueSet.hiddenProperties.length > 0\">\n <p class=\"property-name\">Add property:</p>\n <select (change)=\"displayProperty($event)\">\n <option value=\"\">Select a property</option>\n <option\n *ngFor=\"let property of valueSet?.hiddenProperties || []\"\n [value]=\"property.name\"\n >\n {{ property.name }}\n </option>\n </select>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n ViewChild\n} from '@angular/core';\nimport * as d3 from 'd3';\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\nimport { ValueSet } from '../diagram-editor/diagram/diagram-property';\nimport { PropertyEditor } from '../interfaces/property-editor';\nimport { ObjectEditorComponent } from '../object-editor/object-editor.component';\nimport { Corner, Side } from '../util/svg-util';\n\n/**\n * Editor of the values of a value set.\n * @see ValueSet\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-property-editor',\n templateUrl: './property-editor.component.html',\n imports: [CommonModule, CollapseButtonComponent, ObjectEditorComponent]\n})\nexport class PropertyEditorComponent implements AfterViewInit, PropertyEditor {\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\n\n @Input()\n location!: Corner;\n @Input()\n direction!: Side;\n @Input()\n width!: string;\n\n title?: string;\n _valueSet!: ValueSet | undefined;\n @Input()\n get valueSet(): ValueSet | undefined {\n return this._valueSet;\n }\n set valueSet(valueSet: ValueSet | undefined) {\n this._valueSet = valueSet;\n // force value change detection\n this.cdr.detectChanges();\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n switch (this.direction) {\n case Side.Bottom:\n case Side.Top:\n this.selectPanel().style('width', this.width);\n break;\n case Side.Left:\n case Side.Right:\n this.selectPanel().style('height', this.width);\n break;\n }\n }\n\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\n return d3.select(this.panel.nativeElement);\n }\n\n highlightProperty(...propertyNames: string[]): void {\n let selector = '';\n let depth = 0;\n for (const propertyName of propertyNames) {\n selector += ` .property.${propertyName}.depth-${depth}`;\n ++depth;\n }\n if (this.valueSet) {\n d3.select(this.panel.nativeElement)\n .select(selector)\n .transition()\n .duration(1000)\n .ease(d3.easeLinear)\n .styleTween('background-color', () => {\n const interpolator = d3.interpolate(\n 'rgba(255, 0, 0, 0)',\n 'rgba(255, 0, 0, 0.4)'\n );\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\n });\n }\n }\n}\n","<div #panel class=\"panel bottom {{ location }} {{ direction }}\">\n <daga-collapse-button\n [disabled]=\"\n !valueSet ||\n !valueSet.propertySet ||\n !valueSet.propertySet.hasProperties()\n \"\n [direction]=\"direction\"\n [collapsableSelector]=\"panel\"\n collapsableAdditionalSelector=\".panel-content\"\n rule=\"display\"\n collapsedValue=\"none\"\n visibleValue=\"block\"\n />\n <div\n *ngIf=\"\n valueSet && valueSet.propertySet && valueSet.propertySet.hasProperties()\n \"\n class=\"panel-content\"\n >\n <p *ngIf=\"title\" class=\"title\">{{ title }}</p>\n <daga-object-editor [valueSet]=\"valueSet\"></daga-object-editor>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\n\n/**\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class DagaConfigurationService {\n private _config!: DiagramConfig;\n\n /**\n * Set the diagram configuration of this context.\n * @private\n * @param config A diagram configuration.\n */\n init(config: DiagramConfig) {\n this._config = config;\n }\n\n /**\n * Get the diagram configuration of this context. Should only be called after the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram configuration.\n */\n getConfig(): DiagramConfig {\n return this._config;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { ErrorsComponent } from '../errors/errors.component';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\nimport { PaletteComponent } from '../palette/palette.component';\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\nimport { CanvasProviderService } from '../services/canvas-provider.service';\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\nimport { Corner, Side } from '../util/svg-util';\n\n/**\n * A diagram's user interface editor.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-diagram-editor',\n templateUrl: './diagram-editor.component.html',\n imports: [\n CommonModule,\n DiagramButtonsComponent,\n PaletteComponent,\n PropertyEditorComponent,\n ErrorsComponent\n ]\n})\nexport class DiagramEditorComponent\n implements AfterViewInit, DiagramEditor, OnInit\n{\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\n @ViewChild('palette') palette!: PaletteComponent;\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\n\n get config(): DiagramConfig {\n return this.configurationService.getConfig();\n }\n get canvas(): Canvas {\n return this.canvasProvider.getCanvas();\n }\n\n Corner = Corner;\n Side = Side;\n\n constructor(\n private configurationService: DagaConfigurationService,\n private canvasProvider: CanvasProviderService\n ) {}\n\n ngOnInit(): void {\n this.canvasProvider.initCanvas(this, this.config);\n }\n\n ngAfterViewInit(): void {\n this.canvasProvider.initCanvasView(this.appendTo.nativeElement);\n }\n}\n","<div class=\"append-to\" #appendTo></div>\n<daga-diagram-buttons\n *ngIf=\"config.components?.buttons?.exists !== false\"\n #diagramButtons\n [location]=\"config.components?.buttons?.location || Corner.BottomRight\"\n [direction]=\"config.components?.buttons?.direction || Side.Top\"\n [enableFilter]=\"config.components?.buttons?.enableFilter !== false\"\n [enableLayout]=\"config.components?.buttons?.enableLayout !== false\"\n [enableUndoRedo]=\"config.components?.buttons?.enableUndoRedo !== false\"\n [enableZoom]=\"config.components?.buttons?.enableZoom !== false\"\n [zoomRate]=\"config.components?.buttons?.zoomRate || 2\"\n/>\n<daga-palette\n *ngIf=\"\n config.components?.palette?.exists !== false &&\n config.components?.palette?.sections &&\n (config.components?.palette?.sections?.length || 0) > 0\n \"\n #palette\n [location]=\"config.components?.palette?.location || Corner.TopLeft\"\n [direction]=\"config.components?.palette?.direction || Side.Bottom\"\n [width]=\"config.components?.palette?.width || '12rem'\"\n [palettes]=\"config.components?.palette?.sections || []\"\n/>\n<daga-property-editor\n *ngIf=\"config.components?.propertyEditor?.exists !== false\"\n #propertyEditor\n [location]=\"config.components?.propertyEditor?.location || Corner.TopRight\"\n [direction]=\"config.components?.propertyEditor?.direction || Side.Bottom\"\n [width]=\"config.components?.propertyEditor?.width || '24rem'\"\n/>\n<daga-errors *ngIf=\"config.components?.errors?.exists !== false\" />\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\n\r\nexport const DAGA_FILE_VERSION = 1;\r\n\r\n/**\r\n * Representation of a diagram model in a serialized format.\r\n * @see DiagramModel\r\n * @public\r\n */\r\nexport interface DagaModel {\r\n id?: string;\r\n /** User version */\r\n version?: string;\r\n name: string;\r\n description?: string;\r\n type: string;\r\n /** Serialization file format version for tooling */\r\n typeVersion: number;\r\n createdAt: Date;\r\n updatedAt: Date;\r\n updatedDaysAgo?: string;\r\n nodes: {\r\n id: string;\r\n type: string;\r\n sections?: {\r\n id: string;\r\n ports?: {\r\n id: string;\r\n coords: Point;\r\n direction: Side;\r\n label: string;\r\n }[];\r\n label: string;\r\n indexXInNode: number;\r\n indexYInNode: number;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n }[];\r\n ports?: {\r\n id: string;\r\n coords: Point;\r\n direction: Side;\r\n label: string;\r\n }[];\r\n label: string;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n data: { [key: string]: unknown };\r\n }[];\r\n connections: {\r\n id: string;\r\n type: string;\r\n start: string;\r\n end: string;\r\n startLabel: string;\r\n middleLabel: string;\r\n endLabel: string;\r\n points: Point[];\r\n data: { [key: string]: unknown };\r\n }[];\r\n data: { [key: string]: unknown };\r\n}\r\n","import { roundPoint } from '../../../util/canvas-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DAGA_FILE_VERSION, DagaModel } from './daga-model';\r\nimport { DiagramModelExporter } from './diagram-model-exporter';\r\n\r\n/**\r\n * Importer which exports a diagram to its daga model representation.\r\n * @public\r\n */\r\nexport class DagaExporter implements DiagramModelExporter<DagaModel> {\r\n export(model: DiagramModel): DagaModel {\r\n const result: DagaModel = {\r\n name: model.name,\r\n type: model.type,\r\n typeVersion: DAGA_FILE_VERSION,\r\n createdAt: model.createdAt,\r\n updatedAt: model.updatedAt,\r\n nodes: [],\r\n connections: [],\r\n data: model.valueSet.getValues()\r\n };\r\n if (model.id) {\r\n result.id = model.id;\r\n }\r\n if (model.description) {\r\n result.description = model.description;\r\n }\r\n\r\n for (const node of model.nodes) {\r\n const sections = [];\r\n for (const section of node.sections) {\r\n const ports = [];\r\n for (const port of section.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || ''\r\n });\r\n }\r\n sections.push({\r\n id: section.id,\r\n ports,\r\n label: section.label?.text || '',\r\n indexXInNode: section.indexXInNode,\r\n indexYInNode: section.indexYInNode,\r\n coords: roundPoint(section.coords),\r\n width: section.width,\r\n height: section.height\r\n });\r\n }\r\n const ports = [];\r\n for (const port of node.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || ''\r\n });\r\n }\r\n result.nodes.push({\r\n id: node.id,\r\n type: node.type.id,\r\n sections,\r\n ports,\r\n label: node.label?.text || '',\r\n coords: roundPoint(node.coords),\r\n width: node.width,\r\n height: node.height,\r\n data: node.valueSet.getValues()\r\n });\r\n }\r\n for (const connection of model.connections) {\r\n result.connections.push({\r\n id: connection.id,\r\n type: connection.type.id,\r\n start: connection.start?.id || '',\r\n end: connection.end?.id || '',\r\n startLabel: connection.startLabel,\r\n middleLabel: connection.middleLabel,\r\n endLabel: connection.endLabel,\r\n points: connection.points,\r\n data: connection.valueSet.getValues()\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\nimport { DiagramConnection } from '../diagram-connection';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from '../diagram-field';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramPort } from '../diagram-port';\r\nimport { DiagramSection } from '../diagram-section';\r\nimport { DagaModel } from './daga-model';\r\nimport { DiagramModelImporter } from './diagram-model-importer';\r\n\r\n/**\r\n * Importer which imports a diagram from its daga model representation.\r\n * @public\r\n */\r\nexport class DagaImporter implements DiagramModelImporter<DagaModel> {\r\n import(model: DiagramModel, data: DagaModel): DiagramModel {\r\n // clear the model beforehand\r\n model.clear();\r\n\r\n if (data.id) {\r\n model.id = data.id;\r\n }\r\n model.name = data.name;\r\n model.description = data.description;\r\n model.type = data.type;\r\n model.createdAt = new Date(data.createdAt);\r\n model.updatedAt = new Date(data.updatedAt);\r\n for (const node of data.nodes || []) {\r\n const newNodeType = model.nodes.types.get(node.type);\r\n if (newNodeType) {\r\n const newNode = new DiagramNode(\r\n model,\r\n newNodeType,\r\n node.coords,\r\n node.id\r\n );\r\n model.nodes.add(newNode);\r\n newNode.width = node.width;\r\n newNode.height = node.height;\r\n if (node.label) {\r\n // add node label\r\n if (newNodeType.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newNode,\r\n [\r\n newNode.coords[0] + labelConfiguration.margin,\r\n newNode.coords[1] + labelConfiguration.margin\r\n ],\r\n newNode.width - labelConfiguration.margin * 2,\r\n newNode.height - labelConfiguration.margin * 2,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = node.label;\r\n newNode.label = newField;\r\n model.fields.add(newField);\r\n }\r\n }\r\n for (const section of node.sections || []) {\r\n const newSection = new DiagramSection(\r\n model,\r\n newNode,\r\n section.indexXInNode,\r\n section.indexYInNode,\r\n section.coords,\r\n section.width,\r\n section.height,\r\n section.id\r\n );\r\n newNode.sections?.push(newSection);\r\n model.sections.add(newSection);\r\n if (section.label) {\r\n // add section label\r\n if (\r\n newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newSection,\r\n [\r\n newSection.coords[0] + labelConfiguration.margin,\r\n newSection.coords[1] + labelConfiguration.margin\r\n ],\r\n newSection.width - labelConfiguration.margin * 2,\r\n newSection.height - labelConfiguration.margin * 2,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = section.label;\r\n newSection.label = newField;\r\n model.fields.add(newField);\r\n }\r\n }\r\n let portCounter = 0;\r\n for (const port of section.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newSection,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newSection.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n }\r\n ++portCounter;\r\n }\r\n }\r\n }\r\n let portCounter = 0;\r\n for (const port of node.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newNode,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newNode.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n }\r\n ++portCounter;\r\n }\r\n }\r\n if (node.data) {\r\n newNode.valueSet.setValues(node.data);\r\n }\r\n }\r\n }\r\n for (const connection of data.connections || []) {\r\n const newConnectionType = model.connections.types.get(connection.type);\r\n if (newConnectionType) {\r\n const newConnection = new DiagramConnection(\r\n model,\r\n newConnectionType,\r\n connection.start ? model.ports.get(connection.start) : undefined,\r\n connection.end ? model.ports.get(connection.end) : undefined,\r\n connection.id\r\n );\r\n model.connections.add(newConnection);\r\n newConnection.startLabel = connection.startLabel;\r\n newConnection.middleLabel = connection.middleLabel;\r\n newConnection.endLabel = connection.endLabel;\r\n newConnection.points = connection.points;\r\n if (connection.data) {\r\n newConnection.valueSet.setValues(connection.data);\r\n }\r\n }\r\n }\r\n if (data.data) {\r\n model.valueSet.setValues(data.data);\r\n }\r\n\r\n model.canvas?.updateModelInView();\r\n\r\n return model;\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { delay } from 'rxjs';\r\nimport { DagaExporter } from '../diagram-editor/diagram/converters/daga-exporter';\r\nimport { DagaImporter } from '../diagram-editor/diagram/converters/daga-importer';\r\nimport { DagaModel } from '../diagram-editor/diagram/converters/daga-model';\r\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\r\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\r\n * @public\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram',\r\n template: `<ng-content />`,\r\n providers: [CanvasProviderService, DagaConfigurationService]\r\n})\r\nexport class DiagramComponent\r\n implements AfterContentInit, AfterViewInit, OnInit\r\n{\r\n /**\r\n * Configuration for the diagram.\r\n * @public\r\n */\r\n @Input()\r\n config!: DiagramConfig;\r\n private importer = new DagaImporter();\r\n private exporter = new DagaExporter();\r\n private _model!: DagaModel;\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n get model(): DagaModel {\r\n return this._model;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n @Input()\r\n set model(model: DagaModel) {\r\n if (this._model !== model) {\r\n this._model = model;\r\n const canvas = this.canvasProvider.getCanvas();\r\n if (canvas) {\r\n this.importer.import(this.canvasProvider.getCanvas().model, model);\r\n }\r\n }\r\n }\r\n /**\r\n * Output for changes to the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelChange = new EventEmitter<DagaModel>();\r\n\r\n constructor(\r\n private configurationService: DagaConfigurationService,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.configurationService.init(this.config);\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.canvasProvider\r\n .getCanvas()\r\n .viewInitialized$.pipe(delay(1))\r\n .subscribe(() => {\r\n if (this.model) {\r\n this.importer.import(\r\n this.canvasProvider.getCanvas().model,\r\n this.model\r\n );\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasProvider.getCanvas().diagramChanges$.subscribe(() => {\r\n const exportedModel = this.exporter.export(\r\n this.canvasProvider.getCanvas().model\r\n );\r\n this._model = exportedModel;\r\n this.modelChange.emit(exportedModel);\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LuxModule } from '@metadev/lux';\n\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\nimport { DiagramEditorComponent } from './diagram-editor/diagram-editor.component';\nimport { DiagramComponent } from './diagram/diagram.component';\nimport { ErrorsComponent } from './errors/errors.component';\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\nimport { PaletteComponent } from './palette/palette.component';\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\nimport { CanvasProviderService } from './services/canvas-provider.service';\nimport { DagaConfigurationService } from './services/daga-configuration.service';\nimport { TextListEditorComponent } from './text-list-editor/text-list-editor.component';\nimport { TextMapEditorComponent } from './text-map-editor/text-map-editor.component';\n\n@NgModule({\n declarations: [],\n imports: [\n CollapseButtonComponent,\n DiagramButtonsComponent,\n DiagramComponent,\n DiagramEditorComponent,\n ErrorsComponent,\n ObjectEditorComponent,\n PaletteComponent,\n TextListEditorComponent,\n TextMapEditorComponent,\n PropertyEditorComponent,\n CommonModule,\n FormsModule,\n LuxModule\n ],\n exports: [DiagramComponent, DiagramEditorComponent],\n providers: [DagaConfigurationService, CanvasProviderService]\n})\nexport class DagaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["equals","idTicker","i1.CanvasProviderService","i1","i3","i1.DagaConfigurationService","i2.CanvasProviderService"],"mappings":"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"}