{"version":3,"file":"symblcrowd-sc-draw2d.mjs","sources":["../../../projects/sc-draw2d/src/lib/pipes/safe-html-pipe.ts","../../../projects/sc-draw2d/src/lib/sc-draw2d/sc-draw2d.component.ts","../../../projects/sc-draw2d/src/lib/sc-draw2d/sc-draw2d.component.html","../../../projects/sc-draw2d/src/lib/basic.module.ts","../../../projects/sc-draw2d/src/lib/sc-draw2d/sc-draw2d.module.ts","../../../projects/sc-draw2d/src/lib/sc-draw2d/public-api.ts","../../../projects/sc-draw2d/src/lib/sc-draw2d/index.ts","../../../projects/sc-draw2d/src/lib/sc.module.ts","../../../projects/sc-draw2d/src/public-api.ts","../../../projects/sc-draw2d/src/symblcrowd-sc-draw2d.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\n\n@Pipe({ name: 'safeHtml' })\nexport class SafeHtmlPipe implements PipeTransform {\n  constructor(private sanitized: DomSanitizer) {}\n  transform(value: string) {\n    return this.sanitized.bypassSecurityTrustHtml(value)\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n  ViewEncapsulation,\n} from '@angular/core'\nimport { ControlValueAccessor } from '@angular/forms'\n// @ts-ignore: Unreachable code error\nimport * as draw2d from 'draw2d'\nimport { ClipboardService } from 'ngx-clipboard'\nimport * as shifty from 'shifty'\n\nexport interface SCDraw2DConnectionDefintion {\n  id: number | string\n  default_name: string\n  color: string\n  corner_radius: number\n  width: number\n  style: 'dashed' | 'solid'\n}\n\nexport type TInterfaceDirection = 'INPUT' | 'OUTPUT' | 'HYBRID'\n\nexport interface SCDraw2DPortDefintion {\n  id: number | string\n  default_name: string\n  interface_direction: TInterfaceDirection\n  type: SCDraw2DNodePortType\n  location: SCDraw2DNodePortLocation\n  default_connection_id: number | string\n  library_export: boolean\n  portSvg: string\n}\n\nexport interface SCDraw2DNode {\n  id: number | string\n  uuid?: string\n  name: string\n  type: 'default' | 'subsystem' | 'port'\n  svg: string\n  position: SCDraw2DPosition\n  size?: SCDraw2DNodeSize\n  ports?: SCDraw2DNodePort[]\n  attributes?: SCDraw2DAttribute[]\n  label?: SCDraw2DNodeLabel\n  libViewPos?: {\n    scalingFactor: number\n    offsetHeight: number\n    offsetWidth: number\n  }\n  userData?: any\n}\n\nexport interface SCDraw2DNodeLabel {\n  text: string\n  positionX: number\n  positionY: number\n  refEl: string\n  refX: number\n  refY: number\n}\n\nexport interface SCDraw2DAttribute {\n  type: 'text' | 'number'\n  key: string\n  defaultValue: string | number\n  label: string\n  value?: string | number\n  unit?: string\n}\n\nexport interface ScDraws2dGroupHelper {\n  parentId: any\n  groupElementId: string\n  groupExportJson: string\n  groupExportLabelJson: string\n  connectionJson: string\n  tabName: string\n  tabIndex: string\n}\n\nexport interface SCDraw2DPosition {\n  x: number\n  y: number\n}\n\nexport interface SCDraw2DNodeSize {\n  width: number\n  height: number\n}\n\nexport interface SCDraw2DNodePort {\n  uuid?: string\n  name?: string\n  interface_direction: TInterfaceDirection\n  type: SCDraw2DNodePortType\n  location: SCDraw2DNodePortLocation\n  oldUserData?: any\n}\n\nexport interface SCDraw2DNodePortType {\n  type_name: string\n  color: string\n  portSvg: string\n}\n\nexport interface SCDraw2DNodePortLocation {\n  location_type: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'custom'\n  position?: SCDraw2DPosition\n}\n\nexport interface SCDraw2DDragLayer {\n  x: number\n  y: number\n}\n\nexport interface SCDraw2DElement {\n  reference_id: string | number\n  attributes: SCDraw2DAttribute[]\n}\n\nexport interface SCDraw2DTab {\n  index: string\n  elements: any\n  labels: any\n  name: string\n  workspace: any\n  emitter: any\n  subSystems: Ports\n}\n\nexport interface Ports {\n  subSystems: number\n  ports: number\n}\n\nexport interface SCDraw2DColorThemeConfig {\n  light?: SCDraw2DColorTheme\n  dark?: SCDraw2DColorTheme\n  default?: SCDraw2DColorTheme\n}\n\nexport interface SCDraw2DColorTheme {\n  primary: string\n  background: string\n  cardBackground: string\n  gridBorder: string\n  text: string\n}\n\nexport class SCDraw2DTransformation {\n  private _zoomFactor = 1\n  public translateX = -4800\n  public translateY = -4800\n\n  constructor(private draw2DInstance: any) {}\n\n  public get zoomFactor() {\n    return this._zoomFactor\n  }\n  public set zoomFactor(value: number) {\n    this._zoomFactor = Math.round(value * 100) / 100\n    this.draw2DInstance.zoomFactor = 1 / this.zoomFactor\n  }\n\n  public matrix(): string {\n    const mat = [this.zoomFactor, 0, 0, this.zoomFactor, this.translateX, this.translateY]\n    return `matrix(${mat.join(',')})`\n  }\n}\n\n@Component({\n  selector: 'sc-draw2d',\n  templateUrl: 'sc-draw2d.component.html',\n  styleUrls: ['sc-draw2d.component.scss'],\n  providers: [\n    // {\n    //   provide: NG_VALUE_ACCESSOR,\n    //   useExisting: SCDraw2dComponent,\n    //   multi: true\n    // }\n  ],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SCDraw2dComponent implements ControlValueAccessor, OnInit, OnChanges {\n  @HostBinding('class.w-100') hostField: boolean = true\n\n  @ViewChild('gfxHolder') gfxHolder: ElementRef\n  @ViewChild('fileUploadInput') fileUploadInput: ElementRef\n  @ViewChildren('svgNode') svgElements: ElementRef[]\n\n  @Input('editorContent') editorContent: any\n\n  @Output('editorContentChanged') editorContentChanged: EventEmitter<any> = new EventEmitter()\n\n  console = console\n\n  static MAX_ZOOM = 7\n  static MIN_ZOOM = 0.5\n\n  private currentlyHoldCtrlKey: boolean = false\n\n  private transformation: SCDraw2DTransformation[] = []\n\n  private currentDragLayer: SCDraw2DDragLayer\n  private currentDragOverPosition: SCDraw2DDragLayer\n\n  public elements: SCDraw2DElement[] = []\n  public showAttributeMenu: boolean = false\n  public attributePopoverPosition: any = {\n    top: '-100%',\n    left: '-100%',\n  }\n  public currentAttributes: SCDraw2DAttribute[]\n  public currentAttributeElementId: string = ''\n  public groupHelper: ScDraws2dGroupHelper[] = []\n\n  public showSubSystem: boolean = false\n  public subSystemJson: string = ''\n\n  public selectedTab: number = 0\n  public tabs: SCDraw2DTab[] = [\n    {\n      index: 'main',\n      name: 'Übersicht',\n      elements: undefined,\n      labels: undefined,\n      workspace: undefined,\n      emitter: undefined,\n      subSystems: {\n        subSystems: 0,\n        ports: 0,\n      },\n    },\n  ]\n\n  public currentNumber: number = 1\n\n  public currentlyLabelEdit: boolean = false\n\n  private lastX = 4800\n  private lastY = 4800\n  private isPanning = false\n\n  private mouseX: number = 0\n  private mouseY: number = 0\n  private mouseLayerX: number = 0\n  private mouseLayerY: number = 0\n  private currentlyHover: boolean = false\n\n  private currentCopyEvent: boolean = false\n  private currentZoomEvent: boolean = false\n\n  private draw2dElements: draw2d.shape.basic[] = []\n\n  @Input() nodes: SCDraw2DNode[]\n  @Input() disableNodeMenu: boolean = false\n  @Input() initJson: string\n  @Input() containerID: string = 'gfx_holder'\n  @Input() activeColorTheme: 'light' | 'dark' | 'default' = 'default'\n  @Input() colorThemes: SCDraw2DColorThemeConfig = {\n    default: {\n      background: '#FFFFFF',\n      cardBackground: '#FAFAFA',\n      gridBorder: '#F0F0F0',\n      primary: '#6495ED',\n      text: '#000000',\n    },\n    dark: {\n      background: '#303030',\n      cardBackground: '#424242',\n      gridBorder: '#FFFFFF1F',\n      primary: '#6495ED',\n      text: '#ffffff',\n    },\n    light: {\n      background: '#FFFFFF',\n      cardBackground: '#FAFAFA',\n      gridBorder: '#F0F0F0',\n      primary: '#6495ED',\n      text: '#000000',\n    },\n  }\n\n  constructor(private clipboardService: ClipboardService) {\n    draw2d.createCommand = this.createCommand\n  }\n\n  createConnection = function (sourcePort: any, targetPort: any, callback: any, dropTarget: any) {\n    var conn = new draw2d.Connection({\n      router: new draw2d.layout.connection.InteractiveManhattanConnectionRouter(),\n      stroke: 1,\n      color: '#fb1',\n      radius: 20,\n      outlineColor: '#fb1',\n      source: sourcePort,\n      target: targetPort,\n      zOrder: 9999,\n    })\n\n    conn.on('dragEnter', function (emitter: any, event: any) {\n      conn.attr({\n        outlineStroke: 0,\n      })\n    })\n\n    conn.on('dragLeave', function (emitter: any, event: any) {\n      conn.attr({\n        outlineStroke: 0,\n      })\n    })\n\n    conn.on('onMouseUp', function (canvas: any, x: any, y: any, shiftKey: any, ctrlKey: any) {\n      console.log(this.currentDropTarget, this.mouseDraggingElement)\n      if (this.currentDropTarget instanceof draw2d.Port) {\n        var request = new draw2d.command.CommandType(draw2d.command.CommandType.CONNECT)\n        request.source = this.currentDropTarget\n        request.target = this.mouseDraggingElement\n        console.log(request.source.userData, request.target.userData.type)\n        if (\n          (request.source.userData &&\n            request.target.userData &&\n            request.target.userData.type == request.source.userData.type) ||\n          request.source.userData.type == 'universal' ||\n          request.target.userData.type == 'universal'\n        ) {\n          if (\n            (request.source.userData.interfaceDirection == 'HYBRID' && request.target.userData.interfaceDirection == 'HYBRID') ||\n            request.target.userData.interfaceDirection != request.source.userData.interfaceDirection\n          ) {\n            var command = this.mouseDraggingElement.createCommand(request)\n    \n            if (command !== null) {\n              command.setConnection(this.createConnection())\n              canvas.getCommandStack().execute(command)\n              this.currentDropTarget.onCatch(this.mouseDraggingElement, x, y, shiftKey, ctrlKey)\n            }\n          }\n        }\n      }\n    })\n    return conn\n  }\n\n  onPortDragStart = function (canvas: any, figure: any, x: number, y: number, shiftKey: boolean, ctrlKey: boolean) {\n    var allPorts = canvas.getAllPorts().clone()\n\n    allPorts.grep(function (p: any) {\n      return (\n        (p.NAME !== figure.NAME && p.parent !== figure.parent && p.getSemanticGroup() === figure.getSemanticGroup()) ||\n        p instanceof draw2d.default.HybridPort ||\n        figure instanceof draw2d.default.HybridPort\n      )\n    })\n\n    var start = 0\n    allPorts.each(function (i: any, element: any) {\n      if (typeof element.__beforeInflate === 'undefined') {\n        element.__beforeInflate = element.getWidth()\n      }\n      start = element.__beforeInflate\n    })\n\n    const growFactor = 1.5\n    this.tweenable = new shifty.Tweenable()\n    this.tweenable.tween({\n      from: { size: start },\n      to: { size: start * growFactor },\n      duration: 200,\n      easing: 'easeOutSine',\n      render: (params: any) => {\n        console.log(params)\n        allPorts.each(function (i: any, element: any) {\n          if (\n            (figure.userData &&\n              element.userData &&\n              element.userData.type == figure.userData.type) ||\n            figure.userData.type == 'universal' ||\n            element.userData.type == 'universal'\n          ) {\n            if (\n              (figure.userData.interfaceDirection == 'HYBRID' && element.userData.interfaceDirection == 'HYBRID') ||\n              element.userData.interfaceDirection != figure.userData.interfaceDirection\n            ) {\n              element.shape.attr({ rx: params.size / 2, ry: params.size / 2 })\n              element.width = element.height = params.size\n              element.fireEvent('resize')\n            }\n          }\n        })\n      },\n    })\n    this.tweenable.tween().then(() => console.log('All done!'))\n\n    this.connectionLine = new draw2d.default.shape.basic.Line()\n    this.connectionLine.setCanvas(canvas)\n    this.connectionLine.getShapeElement()\n    this.connectionLine.setDashArray('- ')\n    this.connectionLine.setColor('#30c48a')\n\n    this.onDrag(canvas, figure)\n\n    return true\n  }\n\n  createCommand(request: any) {\n    return draw2d.createCommand(request)\n  }\n\n  getSizeArrFromSvg(svg: string) {\n    const viewBoxMatch = svg.match(/\\bviewBox\\s*=\\s*['\"]([^'\"]*)['\"]/)\n\n    if (viewBoxMatch) {\n      const viewBoxAttributeValue = viewBoxMatch[1]\n\n      const numbers = viewBoxAttributeValue.split(' ').slice(-2)\n\n      return numbers.map((number: string) => {\n        return +number\n      })\n    }\n    return [100, 100]\n  }\n\n  ngAfterViewInit() {\n    this.initWorkspace()\n  }\n\n  handleScroll(event: any) {\n    const scrolledDiv = event.target\n    const canvasContainer = document.querySelector('.l__workspace-container') as HTMLElement\n    this.tabs[this.selectedTab].workspace.setDimension(canvasContainer.offsetWidth, canvasContainer.offsetHeight)\n  }\n\n  handleResize() {\n    const canvasContainer = document.querySelector('.l__workspace-container') as HTMLElement\n    this.tabs[this.selectedTab].workspace.setDimension(canvasContainer.scrollWidth, canvasContainer.scrollHeight)\n  }\n\n  initWorkspace() {\n    const canvasContainer = document.querySelector('.l__workspace-container') as HTMLElement\n    this.tabs[this.selectedTab].workspace = new draw2d.Canvas(this.tabs[this.selectedTab].index)\n    this.tabs[this.selectedTab].workspace.snapToHelper = function snapToHelper(figure: any, pos: any) {\n      var _this5 = this;\n  \n      // disable snapToPos if we have select more than one element\n      // which are currently in Drag&Drop operation\n      //\n      // if (this.getSelection().getSize() > 1) {\n      //   return pos;\n      // }\n  \n      var orig = pos.clone();\n      this.editPolicy.each(function (i: number, policy: any) {\n        if (policy instanceof draw2d.policy.canvas.SnapToEditPolicy) {\n          pos = policy.snap(_this5, figure, pos, orig);\n        }\n      });\n  \n      return pos;\n    },\n    this.transformation[this.selectedTab] = new SCDraw2DTransformation(this.getDraw2DInstance())\n\n    this.tabs[this.selectedTab].workspace.installEditPolicy(\n      new draw2d.policy.connection.DragConnectionCreatePolicy({\n        createConnection: this.createConnection,\n        onMouseDrag: function onMouseDrag(canvas: any, dx: any, dy: any, dx2: any, dy2: any, shiftKey: any, ctrlKey: any) {\n          try {\n              if (this.mouseDraggingElement !== null) {\n                  var de = this.mouseDraggingElement;\n                  var ct = this.currentTarget;\n  \n                  de.isInDragDrop = true;\n                  de.onDrag(dx, dy, dx2, dy2, shiftKey, ctrlKey);\n  \n                  var target = canvas.getBestFigure(de.getAbsoluteX(), de.getAbsoluteY(), de);\n  \n                  // the hovering element has been changed\n                  if (target !== ct) {\n                      if (ct !== null) {\n                          ct.onDragLeave(de);\n                          ct.fireEvent(\"dragLeave\", { draggingElement: de });\n                          de.editPolicy.each(function (i: any, e: any) {\n                              if (e instanceof draw2d.policy.port.PortFeedbackPolicy) {\n                                  e.onHoverLeave(canvas, de, ct);\n                              }\n                          });\n                      }\n  \n                      // possible hoverEnter event\n                      //\n                      if (target !== null) {\n                          this.currentTarget = ct = delegateTargetWithoutSame(de, target);\n                          if (ct !== null) {\n                              ct.onDragEnter(de); // legacy\n                              ct.fireEvent(\"dragEnter\", { draggingElement: de });\n                              de.editPolicy.each(function (i: any, e: any) {\n                                  if (e instanceof draw2d.policy.port.PortFeedbackPolicy) {\n                                      e.onHoverEnter(canvas, de, ct);\n                                  }\n                              });\n                          }\n                      } else {\n                          this.currentTarget = null;\n                      }\n                  }\n  \n                  var p = canvas.fromDocumentToCanvasCoordinate(canvas.mouseDownX + dx / canvas.zoomFactor, canvas.mouseDownY + dy / canvas.zoomFactor);\n                  var target = canvas.getBestFigure(p.x, p.y, this.mouseDraggingElement);\n  \n                  if (target !== this.currentDropTarget) {\n                      if (this.currentDropTarget !== null) {\n                          this.currentDropTarget.onDragLeave(this.mouseDraggingElement);\n                          this.currentDropTarget.fireEvent(\"dragLeave\", { draggingElement: this.mouseDraggingElement });\n                          this.currentDropTarget = null;\n                      }\n                      if (target !== null) {\n                          this.currentDropTarget = delegateTargetWithoutSame(this.mouseDraggingElement, target);\n                          // inform all listener that the element has accept the dragEnter event\n                          //\n                          if (this.currentDropTarget !== null) {\n                              this.currentDropTarget.onDragEnter(this.mouseDraggingElement); // legacy\n                              this.currentDropTarget.fireEvent(\"dragEnter\", { draggingElement: this.mouseDraggingElement });\n                          }\n                      }\n                  }\n              }\n          } catch (exc) {\n              console.log(exc);\n              debugger;\n          }\n\n          function delegateTargetWithoutSame(connectInquirer: any, connectIntent: any) {\n            // a composite accept any kind of figures exceptional ports\n            //\n            if (!(connectInquirer instanceof draw2d.Port) && connectIntent instanceof draw2d.shape.composite.StrongComposite) {\n              return connectIntent;\n            }\n        \n            // Ports accepts only Ports from the same semanticGroup as DropTarget\n            //\n            if (connectIntent instanceof draw2d.Port && connectInquirer instanceof draw2d.Port) {\n              if (connectIntent.getSemanticGroup() !== connectInquirer.getSemanticGroup()) {\n                return null;\n              }\n            }\n        \n            // Ports accepts only Ports as DropTarget\n            //\n            if (!(connectIntent instanceof draw2d.Port) || !(connectInquirer instanceof draw2d.Port)) {\n              return null;\n            }\n        \n            // consider the max possible connections for this port\n            //\n            if (connectIntent.getConnections().getSize() >= connectIntent.getMaxFanOut()) {\n              return null;\n            }\n        \n            // It is not allowed to connect two output ports\n            if (connectInquirer instanceof draw2d.OutputPort && connectIntent instanceof draw2d.OutputPort) {\n              return null;\n            }\n        \n            // It is not allowed to connect two input ports\n            if (connectInquirer instanceof draw2d.InputPort && connectIntent instanceof draw2d.InputPort) {\n              return null;\n            }\n        \n            // It is not possible to create a loop back connection at the moment.\n            // Reason: no connection router implemented for this case\n            // if (connectInquirer instanceof draw2d.Port && connectIntent instanceof draw2d.Port) {\n            //   if (connectInquirer.getParent() === connectIntent.getParent()) {\n            //     return null;\n            //   }\n            // }\n        \n            // redirect the dragEnter handling to the hybrid port\n            //\n            if (connectInquirer instanceof draw2d.Port && connectIntent instanceof draw2d.shape.node.Hub) {\n              return connectIntent.getHybridPort(0);\n            }\n        \n            // return the connectTarget determined by the framework or delegate it to another\n            // figure.\n            return connectIntent;\n          }\n        },\n        onMouseUp: function onMouseUp(canvas: any, x: any, y: any, shiftKey: any, ctrlKey: any) {\n          if (this.mouseDraggingElement !== null) {\n  \n              var de = this.mouseDraggingElement;\n              var ct = this.currentTarget;\n              // start CommandStack transaction\n              canvas.getCommandStack().startTransaction();\n  \n              de.onDragEnd(x, y, shiftKey, ctrlKey);\n              // notify all installed policies\n              //\n              if (ct) {\n                  de.editPolicy.each(function (i: any, e: any) {\n                      if (e instanceof draw2d.policy.port.PortFeedbackPolicy) {\n                          e.onHoverLeave(canvas, de, ct);\n                      }\n                  });\n              }\n  \n              de.editPolicy.each(function (i: any, e: any) {\n                  if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n                      e.onDragEnd(canvas, de, x, y, shiftKey, ctrlKey);\n                  }\n              });\n  \n              // Reset the drag&drop flyover information\n              //\n              this.currentTarget = null;\n              de.isInDragDrop = false;\n  \n              // fire an event\n              // @since 5.3.3\n              de.fireEvent(\"dragend\", { x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey });\n  \n              // check if we drop the port onto a valid\n              // drop target and create a connection if possible\n              //\n              if (this.currentDropTarget !== null) {\n                  this.mouseDraggingElement.onDrop(this.currentDropTarget, x, y, shiftKey, ctrlKey);\n  \n                  this.currentDropTarget.onDragLeave(this.mouseDraggingElement);\n                  this.currentDropTarget.fireEvent(\"dragLeave\", { draggingElement: this.mouseDraggingElement });\n  \n                  // Ports accepts only Ports as DropTarget\n                  //\n                  if (this.currentDropTarget instanceof draw2d.Port) {\n                      var request = new draw2d.command.CommandType(draw2d.command.CommandType.CONNECT);\n                      request.source = this.currentDropTarget;\n                      request.target = this.mouseDraggingElement;\n\n                      if (\n                        (request.source.userData &&\n                          request.target.userData &&\n                          request.target.userData.type == request.source.userData.type) ||\n                        request.source.userData.type == 'universal' ||\n                        request.target.userData.type == 'universal'\n                      ) {\n                        if (\n                          (request.source.userData.interfaceDirection == 'HYBRID' && request.target.userData.interfaceDirection == 'HYBRID') ||\n                          request.target.userData.interfaceDirection != request.source.userData.interfaceDirection\n                        ) {\n                          var command = createCommandWithoutSame(request);\n      \n                          if (command !== null) {\n                              command.setConnection(this.createConnection());\n                              canvas.getCommandStack().execute(command);\n                              this.currentDropTarget.onCatch(this.mouseDraggingElement, x, y, shiftKey, ctrlKey);\n                          }\n                        }\n                      }\n\n                  }\n              }\n  \n              // end command stack trans\n              canvas.getCommandStack().commitTransaction();\n              this.currentDropTarget = null;\n              this.mouseDraggingElement = null;\n          }\n\n          function createCommandWithoutSame(request: any) {\n            // Connect request between two ports\n            //\n            if (request.getPolicy() === draw2d.command.CommandType.CONNECT) {\n      \n              // if (request.source.getParent().getId() === request.target.getParent().getId()) {\n              //     return null;\n              // }\n      \n              if (request.source instanceof draw2d.InputPort) {\n                  // This is the difference to the InputPort implementation of createCommand.\n                  return new draw2d.command.CommandConnect(request.target, request.source, request.source);\n              } else if (request.source instanceof draw2d.OutputPort) {\n                  // This is the different to the OutputPort implementation of createCommand\n                  return new draw2d.command.CommandConnect(request.source, request.target, request.source);\n              } else if (request.source instanceof draw2d.HybridPort) {\n                  // This is the different to the OutputPort implementation of createCommand\n                  return new draw2d.command.CommandConnect(request.target, request.source, request.source);\n              }\n      \n              return null;\n            }\n      \n            // ...else call the base class\n            return this._super(request);\n          }\n        },\n      })\n    )\n\n    draw2d.policy.canvas.BoundingboxSelectionPolicy = draw2d.policy.canvas.SingleSelectionPolicy.extend(\n      /** @lends draw2d.policy.canvas.BoundingboxSelectionPolicy.prototype */\n      {\n        NAME: 'draw2d.policy.canvas.BoundingboxSelectionPolicy',\n\n        /**\n         * Creates a new selection policy for a canvas.\n         */\n        init: function init() {\n          this.isInsideMode = function (rect1: any, rect2: any) {\n            return rect1.isInside(rect2)\n          }\n          this.intersectsMode = function (rect1: any, rect2: any) {\n            return rect1.intersects(rect2)\n          }\n\n          this.decision = this.isInsideMode\n\n          this._super()\n\n          this.boundingBoxFigure1 = null\n          this.boundingBoxFigure2 = null\n          this.x = 0\n          this.y = 0\n\n          // falls ein Port getroffen wird, dann darf keine BoundingBox gezeichnet werden.\n          //\n          this.canDrawBoundingBox = false\n        },\n\n        /**\n         * @inheritdoc\n         */\n        select: function select(canvas: any, figure: any) {\n          var _this = this\n\n          if (canvas.getSelection().contains(figure)) {\n            return // nothing to to\n          }\n\n          var oldSelection = canvas.getSelection().getPrimary()\n\n          if (figure !== null) {\n            figure.select(true) // primary selection\n          }\n\n          if (oldSelection !== figure) {\n            canvas.getSelection().setPrimary(figure)\n\n            // inform all selection listeners about the new selection.\n            //\n            canvas.fireEvent('select', { figure: figure, selection: canvas.getSelection() })\n          }\n\n          // adding connections to the selection of the source and target port part of the current selection\n          //\n          var selection = canvas.getSelection()\n          canvas.getLines().each(function (i: any, line: any) {\n            if (line instanceof draw2d.Connection) {\n              if (selection.contains(line.getSource().getRoot()) && selection.contains(line.getTarget().getRoot())) {\n                _this.select(canvas, line, false)\n              }\n            }\n          })\n        },\n\n        /**\n         *\n         * Set the selection handling mode to <b>intersection</b> or to <b>isInside</b>.\n         * <ul>\n         *   <li>true = intersection, shapes must only touch the selection bounding box </li>\n         *   <li>false = isInside, shapes must complete inside the selection bounding box (default)</li>\n         * </ul>\n         *\n         * @param {Boolean} useIntersectionMode set true if the selection handle should use the alternative selection approach\n         * @since 4.9.0\n         */\n        setDecisionMode: function setDecisionMode(useIntersectionMode: any) {\n          if (useIntersectionMode === true) {\n            this.decision = this.intersectsMode\n          } else {\n            this.decision = this.isInsideMode\n          }\n\n          return this\n        },\n\n        getComponentInstance: function () {\n          return this\n        }.bind(this),\n\n        /**\n         *\n         *\n         * @param {draw2d.Canvas} canvas\n         * @param {Number} x the x-coordinate of the mouse down event\n         * @param {Number} y the y-coordinate of the mouse down event\n         * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n         * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n         */\n        onMouseDown: function onMouseDown(canvas: any, x: any, y: any, shiftKey: any, ctrlKey: any) {\n          var _this2 = this\n          var _this3 = this.getComponentInstance()\n          try {\n            this.x = x\n            this.y = y\n\n            var currentSelection = canvas.getSelection().getAll()\n\n            // COPY_PARENT\n            // this code part is copied from the parent implementation. The main problem is, that\n            // the sequence of unselect/select of elements is broken if we call the base implementation\n            // in this case wrong  events are fired if we select a figure if already a figure is selected!\n            // WRONG: selectNewFigure -> unselectOldFigure\n            // RIGHT: unselectOldFigure -> selectNewFigure\n            // To ensure this I must copy the parent code and postbound the event propagation\n            //\n            this.mouseMovedDuringMouseDown = false\n            var canDragStart = true\n\n            this.canDrawBoundingBox = false\n\n            var figure = canvas.getBestFigure(x, y)\n\n            // may the figure is assigned to a composite. In this case the composite can\n            // override the event receiver\n            while (figure !== null) {\n              var delegated = figure.getSelectionAdapter()()\n              if (delegated === figure) {\n                break\n              }\n              figure = delegated\n            }\n\n            // ignore ports since version 6.1.0. This is handled by the ConnectionCreatePolicy\n            //\n            if (figure instanceof draw2d.Port) {\n              return // silently\n            }\n\n            if (figure !== null && figure.isSelectable() === false && figure.isDraggable() === false) {\n              figure = null\n            }\n\n            this.canDrawBoundingBox = true\n\n            if (figure !== null && figure.isDraggable()) {\n              canDragStart = figure.onDragStart(\n                x - figure.getAbsoluteX(),\n                y - figure.getAbsoluteY(),\n                _this3.currentlyHoldCtrlKey,\n                ctrlKey\n              )\n              // Element send a veto about the drag&drop operation\n              this.mouseDraggingElement = canDragStart === false ? null : figure\n            }\n\n            this.mouseDownElement = figure\n\n            if (this.mouseDownElement !== null) {\n              this.mouseDownElement.fireEvent('mousedown', {\n                x: x,\n                y: y,\n                shiftKey: _this3.currentlyHoldCtrlKey,\n                ctrlKey: ctrlKey,\n              })\n            }\n\n            var previousSelected = figure === null ? false : figure.isSelected()\n\n            // we click on an element which are not part of the current selection\n            // => reset the \"old\" current selection if we didn't press the shift key\n            if (_this3.currentlyHoldCtrlKey === false) {\n              if (\n                this.mouseDownElement !== null &&\n                this.mouseDownElement.isResizeHandle === false &&\n                !currentSelection.contains(this.mouseDownElement)\n              ) {\n                currentSelection.each(function (i: any, figure: any) {\n                  _this2.unselect(canvas, figure)\n                })\n              }\n            }\n\n            if (figure !== canvas.getSelection().getPrimary() && figure !== null && figure.isSelectable() === true) {\n              _this2.select(canvas, figure)\n\n              // its a line\n              if (figure instanceof draw2d.shape.basic.Line) {\n                // you can move a line with Drag&Drop...but not a connection.\n                // A Connection is fixed linked with the corresponding ports.\n                //\n                if (!(figure instanceof draw2d.Connection)) {\n                  canvas.draggingLineCommand = figure.createCommand(\n                    new draw2d.command.CommandType(draw2d.command.CommandType.MOVE)\n                  )\n                  if (canvas.draggingLineCommand !== null) {\n                    canvas.draggingLine = figure\n                  }\n                }\n              } else if (canDragStart === false) {\n                figure.unselect()\n              }\n            }\n            if (_this3.currentlyHoldCtrlKey && figure !== null && previousSelected) {\n              figure.unselect()\n            }\n            // END_COPY FROM PARENT\n\n            // inform all figures that they have a new ox/oy position for the relative\n            // drag/drop operation\n            if (this.mouseDownElement !== null && this.mouseDownElement.isResizeHandle === false) {\n              currentSelection = canvas.getSelection().getAll()\n              currentSelection.each(function (i: any, figure: any) {\n                var fakeDragX = 1\n                var fakeDragY = 1\n\n                var handleRect = figure.getHandleBBox()\n                if (handleRect !== null) {\n                  handleRect.translate(figure.getAbsolutePosition().scale(-1))\n                  fakeDragX = handleRect.x + 1\n                  fakeDragY = handleRect.y + 1\n                }\n\n                var canDragStart = figure.onDragStart(\n                  fakeDragX,\n                  fakeDragY,\n                  _this3.currentlyHoldCtrlKey,\n                  ctrlKey,\n                  true /*fakeFlag*/\n                )\n                // its a line\n                if (figure instanceof draw2d.shape.basic.Line) {\n                  // no special handling\n                } else if (canDragStart === false) {\n                  _this2.unselect(canvas, figure)\n                }\n              })\n            }\n          } catch (exc) {\n            throw exc\n          }\n        },\n\n        /**\n         *\n         *\n         * @param {draw2d.Canvas} canvas\n         * @param {Number} dx The x diff between start of dragging and this event\n         * @param {Number} dy The y diff between start of dragging and this event\n         * @param {Number} dx2 The x diff since the last call of this dragging operation\n         * @param {Number} dy2 The y diff since the last call of this dragging operation\n         * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n         * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n         * @template\n         */\n        onMouseDrag: function onMouseDrag(\n          canvas: any,\n          dx: any,\n          dy: any,\n          dx2: any,\n          dy2: any,\n          shiftKey: any,\n          ctrlKey: any\n        ) {\n          var _this = this.getComponentInstance()\n\n          // don't drag a selection box if we drag&drop a port\n          //\n          if (this.canDrawBoundingBox === false) {\n            return\n          }\n\n          try {\n            this._super(canvas, dx, dy, dx2, dy2, shiftKey, ctrlKey)\n\n            if (\n              this.mouseDraggingElement === null &&\n              this.mouseDownElement === null &&\n              this.boundingBoxFigure1 === null\n            ) {\n              this.boundingBoxFigure1 = new draw2d.shape.basic.Rectangle({\n                width: 1,\n                height: 1,\n                x: this.x,\n                y: this.y,\n                bgColor: '#d4d1d4',\n                alpha: 0.1,\n              })\n              this.boundingBoxFigure1.setCanvas(canvas)\n\n              this.boundingBoxFigure2 = new draw2d.shape.basic.Rectangle({\n                width: 1,\n                height: 1,\n                x: this.x,\n                y: this.y,\n                dash: '--..',\n                stroke: 0.5,\n                color: '#37a8ff',\n                bgColor: null,\n              })\n              this.boundingBoxFigure2.setCanvas(canvas)\n            }\n            var abs = Math.abs\n            if (this.boundingBoxFigure1 !== null) {\n              this.boundingBoxFigure1.setDimension(abs(dx), abs(dy))\n              this.boundingBoxFigure1.setPosition(this.x + Math.min(0, dx), this.y + Math.min(0, dy))\n              this.boundingBoxFigure2.setDimension(abs(dx), abs(dy))\n              this.boundingBoxFigure2.setPosition(this.x + Math.min(0, dx), this.y + Math.min(0, dy))\n            }\n          } catch (exc) {}\n        },\n\n        /**\n         *\n         *\n         * @param {draw2d.Canvas} canvas\n         * @param {Number} x the x-coordinate of the mouse down event\n         * @param {Number} y the y-coordinate of the mouse down event\n         * @param {Boolean} shiftKey true if the shift key has been pressed during this event\n         * @param {Boolean} ctrlKey true if the ctrl key has been pressed during the event\n         */\n        onMouseUp: function onMouseUp(canvas: any, x: any, y: any, shiftKey: any, ctrlKey: any) {\n          var _this3 = this\n          var _this4 = this.getComponentInstance()\n\n          try {\n            // delete the current selection if you have clicked in the empty\n            // canvas.\n            if (this.mouseDownElement === null) {\n              canvas\n                .getSelection()\n                .getAll()\n                .each(function (i: any, figure: any) {\n                  _this3.unselect(canvas, figure)\n                })\n            } else if (\n              this.mouseDownElement instanceof draw2d.ResizeHandle ||\n              this.mouseDownElement instanceof draw2d.shape.basic.LineResizeHandle\n            ) {\n            }\n            // Do nothing\n            // A click on a resize handle didn't change the selection of the canvas\n            //\n\n            // delete the current selection if you click on another figure than the current\n            // selection and you didn't drag the complete selection.\n            else if (\n              this.mouseDownElement !== null &&\n              this.mouseMovedDuringMouseDown === false &&\n              !_this4.currentlyHoldCtrlKey\n            ) {\n              var sel = canvas.getSelection().getAll()\n              if (!sel.contains(this.mouseDownElement)) {\n                canvas\n                  .getSelection()\n                  .getAll()\n                  .each(function (i: any, figure: any) {\n                    _this3.unselect(canvas, figure)\n                  })\n              }\n            }\n            this._super(canvas, x, y, shiftKey, ctrlKey)\n\n            if (this.boundingBoxFigure1 !== null) {\n              // retrieve all figures which are inside the bounding box and select all of them\n              //\n              var selectionRect = this.boundingBoxFigure1.getBoundingBox()\n              canvas.getFigures().each(function (i: any, figure: any) {\n                if (\n                  (figure.isSelectable() === true || figure.cssClass == 'SVGFigure_1') &&\n                  figure.isVisible() === true &&\n                  _this3.decision(figure.getBoundingBox(), selectionRect)\n                ) {\n                  var fakeDragX = 1\n                  var fakeDragY = 1\n\n                  var handleRect = figure.getHandleBBox()\n                  if (handleRect !== null) {\n                    handleRect.translate(figure.getAbsolutePosition().scale(-1))\n                    fakeDragX = handleRect.x + 1\n                    fakeDragY = handleRect.y + 1\n                  }\n                  var canDragStart = figure.onDragStart(fakeDragX, fakeDragY, shiftKey, ctrlKey)\n                  if (canDragStart === true) {\n                    _this3.select(canvas, figure)\n                  }\n                }\n              })\n\n              this.boundingBoxFigure1.setCanvas(null)\n              this.boundingBoxFigure1 = null\n              this.boundingBoxFigure2.setCanvas(null)\n              this.boundingBoxFigure2 = null\n            }\n          } catch (exc) {\n            debugger\n          }\n        },\n      }\n    )\n\n    draw2d.shape.basic.Label = draw2d.shape.basic.Label.extend({\n      onDragStart: function onDragStart(x: number, y: number, shiftKey: boolean, ctrlKey: boolean) {\n        if (this.canvas && this.canvas.selection) {\n          let currentSelection = this.canvas.getSelection()\n          if (currentSelection.all.data.findIndex((haystack: any) => haystack.id = this?.userData.refEl) != -1) {\n            return false\n          }\n        }\n\n        this.isInDragDrop = false;\n    \n        // Check whenever the figures has a drag-handle. Allow drag&drop\n        // operation only if the x/y is inside this area.\n        //\n        // @since 5.6.0\n        var bbox = this.getHandleBBox();\n        if (bbox !== null && bbox.translate(this.getAbsolutePosition().scale(-1)).hitTest(x, y) === false) {\n          // design failure: we must catch the figure below the mouse to forward\n          // the panning event to this figure. Special handling to provide sliders\n          // and other UI elements which requires the panning event. Hack.\n          this.panningDelegate = this.getBestChild(this.getX() + x, this.getY() + y);\n          if (this.panningDelegate !== null) {\n            // transform x/y relative to the panning figure and request the dragStart event\n            this.panningDelegate.onDragStart(x - this.panningDelegate.x, y - this.panningDelegate.y, shiftKey, ctrlKey);\n          }\n          return false;\n        }\n    \n        this.command = this.createCommand(new draw2d.command.CommandType(draw2d.command.CommandType.MOVE));\n    \n        if (this.command !== null) {\n          this.ox = this.getX();\n          this.oy = this.getY();\n          this.isInDragDrop = true;\n    \n          // notify all installed policies\n          //\n          var _this = this;\n          var canStartDrag = true;\n    \n          this.editPolicy.each(function (i: number, e: any) {\n            if (e instanceof draw2d.policy.figure.DragDropEditPolicy) {\n              canStartDrag = canStartDrag && e.onDragStart(_this.canvas, _this, x, y, shiftKey, ctrlKey);\n            }\n          });\n    \n          if (canStartDrag) {\n            // fire an event\n            // @since 5.3.3\n            this.fireEvent(\"dragstart\", { x: x, y: y, shiftKey: shiftKey, ctrlKey: ctrlKey });\n          }\n          return canStartDrag;\n        }\n    \n        return false;\n      },\n    })\n\n    draw2d.policy.canvas.BoundingboxSelectionPolicy = draw2d.policy.canvas.BoundingboxSelectionPolicy.extend({})\n\n    this.tabs[this.selectedTab].workspace.installEditPolicy(new draw2d.policy.canvas.BoundingboxSelectionPolicy())\n\n    draw2d.policy.canvas.SnapToGridEditPolicy = draw2d.policy.canvas.SnapToGridEditPolicy.extend({\n      snap: function snap(canvas: any, figure: any, modifiedPos: any, originalPos: any) {\n        // do nothing for lines\n        if (figure instanceof draw2d.shape.basic.Line) {\n          return modifiedPos;\n        }\n\n        if (figure instanceof draw2d.shape.basic.Label) {\n          console.log(figure)\n          return originalPos;\n        }\n    \n        var snapPoint = figure.getSnapToGridAnchor();\n    \n        modifiedPos.x = modifiedPos.x + snapPoint.x;\n        modifiedPos.y = modifiedPos.y + snapPoint.y;\n    \n        modifiedPos.x = this.grid * Math.floor((modifiedPos.x + this.grid / 2.0) / this.grid);\n        modifiedPos.y = this.grid * Math.floor((modifiedPos.y + this.grid / 2.0) / this.grid);\n    \n        modifiedPos.x = modifiedPos.x - snapPoint.x;\n        modifiedPos.y = modifiedPos.y - snapPoint.y;\n    \n        return modifiedPos;\n      }\n    })\n\n    this.tabs[this.selectedTab].workspace.installEditPolicy(new draw2d.policy.canvas.SnapToGridEditPolicy(20))\n    this.tabs[this.selectedTab].workspace.installEditPolicy(new draw2d.policy.canvas.WheelZoomPolicy())\n\n    this.applyColorTheme()\n\n    if (this.tabs[this.selectedTab].elements) {\n      this.restoreWorkspace(\n        this.tabs[this.selectedTab].elements,\n        false,\n        this.tabs[this.selectedTab].labels ? this.tabs[this.selectedTab].labels : ''\n      )\n    }\n\n    document.addEventListener('keydown', (event) => {\n      if (event.metaKey || event.ctrlKey) {\n        this.currentlyHoldCtrlKey = true\n      } else {\n        this.currentlyHoldCtrlKey = false\n      }\n      if ((event.metaKey || event.ctrlKey) && event.key === '+') {\n        event.preventDefault()\n        if (this.currentZoomEvent) {\n          return\n        }\n        this.currentZoomEvent = true\n        this.zoomIn()\n        this.currentZoomEvent = false\n      } else if ((event.metaKey || event.ctrlKey) && event.key === '-') {\n        event.preventDefault()\n        if (this.currentZoomEvent) {\n          return\n        }\n        this.currentZoomEvent = true\n        this.zoomOut()\n        this.currentZoomEvent = false\n      }\n    })\n\n    document.addEventListener('keyup', () => {\n      this.currentlyHoldCtrlKey = false\n    })\n\n    this.initializePanning()\n    this.initializeMouseZoom()\n\n    document.addEventListener('keydown', (event) => {\n      if (\n        ((event.ctrlKey || event.metaKey) && event.key === 'c') ||\n        ((event.ctrlKey || event.metaKey) && event.key === 'Insert')\n      ) {\n        if (this.currentCopyEvent) {\n          return\n        }\n        this.currentCopyEvent = true\n        event.preventDefault()\n        event.stopPropagation()\n        this.copySelectedFiguresToClipboard()\n        setTimeout(() => {\n          this.currentCopyEvent = false\n        }, 300)\n      }\n\n      if ((event.ctrlKey || event.metaKey) && event.key === 'd') {\n        if (this.currentCopyEvent) {\n          return\n        }\n        this.currentCopyEvent = true\n        event.preventDefault()\n        event.stopPropagation()\n        this.copySelectedFiguresToClipboard(true)\n        setTimeout(() => {\n          this.currentCopyEvent = false\n        }, 300)\n      }\n\n      if ((event.ctrlKey || event.metaKey) && event.key === 'x') {\n        if (this.currentCopyEvent) {\n          return\n        }\n        this.currentCopyEvent = true\n        event.preventDefault()\n        event.stopPropagation()\n        this.copySelectedFiguresToClipboard(false, true)\n        setTimeout(() => {\n          this.currentCopyEvent = false\n        }, 300)\n      }\n\n      if (((event.ctrlKey || event.metaKey) && event.key === 'v') || (event.shiftKey && event.key === 'Insert')) {\n        if (this.currentCopyEvent) {\n          return\n        }\n        this.currentCopyEvent = true\n        event.preventDefault()\n        event.stopPropagation()\n        this.pasteFiguresFromClipboard()\n        setTimeout(() => {\n          this.currentCopyEvent = false\n        }, 300)\n      }\n\n      if (\n        !event.ctrlKey &&\n        !event.shiftKey &&\n        !event.metaKey &&\n        (event.key === 'Delete' || event.key === 'Backspace')\n      ) {\n        if (this.currentCopyEvent) {\n          return\n        }\n        this.currentCopyEvent = true\n        event.preventDefault()\n        event.stopPropagation()\n        this.removeSelectedElements()\n        setTimeout(() => {\n          this.currentCopyEvent = false\n        }, 300)\n      }\n    })\n\n    const canvasParentContainer = document.querySelector('.l__workspace') as HTMLElement\n    canvasParentContainer.addEventListener('mousemove', (e) => {\n      const { offsetX, offsetY } = e\n      const { clientWidth, clientHeight } = canvasParentContainer\n\n      const xPercent = (offsetX / clientWidth) * 100\n      const yPercent = (offsetY / clientHeight) * 100\n\n      const zoomLevel = 1.5 // Adjust this value for the desired zoom level\n\n      const transformValue = `translate(-${xPercent}%, -${yPercent}%) scale(${zoomLevel})`\n    })\n  }\n\n  copySelectedFiguresToClipboard(duplicate: boolean = false, removeAfterCopy: boolean = false) {\n    let selectedFigures = this.tabs[this.selectedTab].workspace.getSelection()\n    let serializedData: any[] = []\n\n    let tmpGroupExportJson = JSON.parse(JSON.stringify(this.groupHelper))\n    let newTmpGroupExportJson: any[] = []\n\n    let points = this.calculateSelectionMiddlePoint(selectedFigures)\n    if (!points) {\n      return\n    }\n\n    const writer = new draw2d.io.json.Writer()\n    writer.marshal(this.tabs[this.selectedTab].workspace, (json: any) => {\n      for (let i = 0; i < selectedFigures.all.data.length; i++) {\n        const figure = selectedFigures.all.data[i]\n\n        if (json.findIndex((haystack: any) => haystack.id == figure.id) != -1) {\n          serializedData.push(this.deepCopy(json.find((haystack: any) => haystack.id == figure.id)))\n          let timeStmp = new Date().getTime()\n          if (\n            tmpGroupExportJson.findIndex(\n              (haystack: any) => haystack.groupElementId == serializedData[serializedData.length - 1].id\n            ) != -1\n          ) {\n            let newGroupHelper = JSON.parse(\n              JSON.stringify(\n                tmpGroupExportJson.find(\n                  (haystack: any) => haystack.groupElementId == serializedData[serializedData.length - 1].id\n                )\n              )\n            )\n            newGroupHelper.groupElementId += '-' + timeStmp.toString()\n            newTmpGroupExportJson.push(newGroupHelper)\n          }\n          serializedData[serializedData.length - 1].id += '-' + timeStmp.toString()\n          // if (duplicate) {\n          //   if (serializedData[serializedData.length - 1].x) {\n          //     serializedData[serializedData.length - 1].x += (this.mouseX - points.middleX)\n          //   }\n          //   if (serializedData[serializedData.length - 1].y) {\n          //     serializedData[serializedData.length - 1].y += (this.mouseY - points.middleY)\n          //   }\n          // }\n\n          if (serializedData[serializedData.length - 1].source) {\n            serializedData[serializedData.length - 1].source.node += '-' + new Date().getTime().toString()\n          }\n\n          if (serializedData[serializedData.length - 1].target) {\n            serializedData[serializedData.length - 1].target.node += '-' + new Date().getTime().toString()\n          }\n        }\n      }\n      if (serializedData.length != 0) {\n        if (duplicate) {\n          let copyHelper: any = {\n            nodes: [...serializedData],\n            elementReferences: [],\n            subSystems: newTmpGroupExportJson,\n            points,\n          }\n          this.restoreWorkspace(JSON.stringify(copyHelper), true)\n        } else {\n          let copyHelper: any = {\n            nodes: [...serializedData],\n            elementReferences: [],\n            subSystems: newTmpGroupExportJson,\n            points,\n          }\n          this.clipboardService.copy(JSON.stringify(copyHelper))\n        }\n      }\n\n      if (removeAfterCopy) {\n        this.removeSelectedElements()\n      }\n    })\n  }\n\n  removeSelectedElements() {\n    let selectedFigures = this.tabs[this.selectedTab].workspace.getSelection()\n\n    for (let i = selectedFigures.all.data.length - 1; i >= 0; i--) {\n      this.removeElement(selectedFigures.all.data[i])\n    }\n  }\n\n  removeElement(el: any) {\n    this.tabs[this.selectedTab].workspace.remove(el)\n  }\n\n  calculateSelectionMiddlePoint(selectedFigures: any) {\n    if (!selectedFigures.all.data.filter((haystack: any) => haystack.cssClass != 'draw2d_Connection')[0]) {\n      return\n    }\n    const firstFigure = selectedFigures.all.data.filter((haystack: any) => haystack.cssClass != 'draw2d_Connection')[0]\n    let points: any = {\n      minX: firstFigure.x,\n      maxX: firstFigure.x + firstFigure.width,\n      minY: firstFigure.y,\n      maxY: firstFigure.y + firstFigure.height,\n      middleX: 0,\n      middleY: 0,\n    }\n\n    for (\n      let i = 0;\n      i < selectedFigures.all.data.filter((haystack: any) => haystack.cssClass != 'draw2d_Connection').length;\n      i++\n    ) {\n      const figure = selectedFigures.all.data.filter((haystack: any) => haystack.cssClass != 'draw2d_Connection')[i]\n\n      if (figure.x <= points.minX) {\n        points.minX = figure.x\n      }\n      if (figure.x >= points.maxX) {\n        points.maxX = figure.x\n      }\n      if (figure.y <= points.minY) {\n        points.minY = figure.y\n      }\n      if (figure.y >= points.maxY) {\n        points.maxY = figure.y\n      }\n    }\n\n    points.middleX = points.minX + (points.maxX - points.minX) / 2\n    points.middleY = points.minY + (points.maxY - points.minY) / 2\n\n    return points\n  }\n\n  pasteFiguresFromClipboard() {\n    navigator['clipboard'].readText().then((data) => {\n      this.restoreWorkspace(data, true)\n    })\n  }\n\n  applyColorTheme() {\n    // this.tabs[this.selectedTab].workspace.getElementByTagName()\n  }\n\n  private initializePanning(): void {\n    const canvasElement = this.getTransformationElement()\n    let isPanning = false\n    let startMouseX = 0\n    let startMouseY = 0\n\n    const handlePanStart = (event: PointerEvent) => {\n      if (event.button === 2) {\n        event.preventDefault()\n        canvasElement.setPointerCapture(event.pointerId)\n        canvasElement.style.cursor = 'grabbing'\n        isPanning = true\n        startMouseX = event.pageX\n        startMouseY = event.pageY\n      }\n    }\n\n    const handlePanMove = (event: PointerEvent) => {\n      if (isPanning) {\n        event.preventDefault()\n        const dx = event.pageX - startMouseX\n        const dy = event.pageY - startMouseY\n        this.pan(dx, dy)\n        startMouseX = event.pageX\n        startMouseY = event.pageY\n      }\n    }\n\n    const handlePanEnd = (event: PointerEvent) => {\n      //0 for firefox, 1 for chrome\n      if (isPanning && (event.pointerId === 1 || event.pointerId === 0)) {\n        event.preventDefault()\n        isPanning = false\n        canvasElement.releasePointerCapture(event.pointerId)\n        canvasElement.style.cursor = 'default'\n      }\n    }\n\n    canvasElement.addEventListener('contextmenu', (event) => event.preventDefault())\n    canvasElement.addEventListener('pointerdown', handlePanStart)\n    canvasElement.addEventListener('pointermove', handlePanMove)\n    canvasElement.addEventListener('pointerup', handlePanEnd)\n    canvasElement.addEventListener('pointercancel', handlePanEnd)\n\n    this.applyTransform()\n  }\n\n  private pan(dx: number, dy: number): void {\n    this.getSelectedTransformation().translateX += dx\n    this.getSelectedTransformation().translateY += dy\n    this.applyTransform()\n  }\n\n  private applyTransform(): void {\n    const canvasElement = this.getTransformationElement()\n\n    this.lastX = 4800 * Math.round(this.getSelectedTransformation().zoomFactor)\n    this.lastY = 4800 * Math.round(this.getSelectedTransformation().zoomFactor)\n\n    const tfMat = this.getSelectedTransformation().matrix()\n    canvasElement.style.transform = tfMat\n  }\n\n  private getSelectedTransformation(): SCDraw2DTransformation {\n    return this.transformation[this.selectedTab]\n  }\n\n  private getActiveCanvasElement(): HTMLElement {\n    return this.tabs[this.selectedTab].workspace.html[0].parentElement as HTMLElement\n  }\n\n  private getActiveSVGElement(): HTMLElement {\n    return this.gfxHolder.nativeElement.querySelector('svg') as HTMLElement\n  }\n\n  private getDraw2DInstance(): any {\n    return this.tabs[this.selectedTab].workspace\n  }\n\n  // dev: to switch quickly between the used element for translation\n  private getTransformationElement(): HTMLElement {\n    return this.getActiveCanvasElement()\n  }\n\n  private initializeMouseZoom(): void {\n    const canvasElement = this.getTransformationElement()\n    canvasElement.addEventListener('wheel', (event) => {\n      event.preventDefault()\n      this.onMouseZoom(event)\n    })\n  }\n\n  onMouseZoom(e: WheelEvent) {\n    let delta = Math.max(-1, Math.min(1, e.deltaY || -e.detail)) / 10\n    this.zoomAt(delta, { x: e.pageX, y: e.pageY })\n\n    this.applyTransform()\n  }\n\n  zoomOut() {\n    const el = this.getTransformationElement()\n    let parentRect = el.parentElement.getBoundingClientRect()\n\n    this.zoomAt(-0.1, { x: parentRect.width / 2, y: parentRect.height / 2 })\n\n    this.applyTransform()\n  }\n\n  zoomIn() {\n    const el = this.getTransformationElement()\n    let parentRect = el.parentElement.getBoundingClientRect()\n\n    this.zoomAt(0.1, { x: parentRect.width / 2, y: parentRect.height / 2 })\n\n    this.applyTransform()\n  }\n\n  zoomAt(zoomBy: number, at: { x: number; y: number }) {\n    const el = this.getTransformationElement()\n    el.style.transformOrigin = '0 0'\n\n    let parentRect = el.parentElement.getBoundingClientRect()\n    let rect = el.getBoundingClientRect()\n\n    let oldScale = this.getSelectedTransformation().zoomFactor\n\n    this.getSelectedTransformation().zoomFactor += zoomBy\n    if (this.getSelectedTransformation().zoomFactor < SCDraw2dComponent.MIN_ZOOM) {\n      this.getSelectedTransformation().zoomFactor = 0.5\n    }\n    if (this.getSelectedTransformation().zoomFactor > SCDraw2dComponent.MAX_ZOOM) {\n      this.getSelectedTransformation().zoomFactor = 7\n    }\n\n    if (oldScale != this.getSelectedTransformation().zoomFactor) {\n      let xPercent = +((at.x - rect.left) / rect.width).toFixed(2)\n      let yPercent = +((at.y - rect.top) / rect.height).toFixed(2)\n\n      this.getSelectedTransformation().translateX = Math.round(\n        at.x - parentRect.left - xPercent * ((rect.width * this.getSelectedTransformation().zoomFactor) / oldScale)\n      )\n      this.getSelectedTransformation().translateY = Math.round(\n        at.y - parentRect.top - yPercent * ((rect.height * this.getSelectedTransformation().zoomFactor) / oldScale)\n      )\n    }\n  }\n\n  createNodes(nodes: SCDraw2DNode[], forceSavedSize: boolean = false) {\n    if (!nodes) {\n      return\n    }\n    nodes.forEach((node: SCDraw2DNode) => {\n      if (node.type == 'subsystem') {\n        var targetElement = new draw2d.shape.basic.Rectangle({\n          x: node.position.x,\n          y: node.position.y,\n          width: node.size.width,\n          height: node.size.height,\n        })\n\n        if (node.uuid) targetElement.setId(node.uuid)\n\n        targetElement.setUserData({ type: 'subsystem' })\n\n        targetElement.on('dblclick', (emitter: any, event: any) => {\n          console.log('dblclick subsystem targetElement')\n          this.handleDoubleClickOnGroup(emitter, event)\n        })\n\n        targetElement.on('removed', (event: any) => {\n          let ports = [\n            ...targetElement.hybridPorts.data,\n            ...targetElement.outputPorts.data,\n            ...targetElement.inputPorts.data,\n          ]\n          for (let i = 0; i < ports.length; i++) {\n            const port = ports[i]\n            for (let l = 0; l < port.connections.data.length; l++) {\n              const connection = port.connections.data[l]\n              connection.canvas.remove(connection)\n            }\n          }\n\n          this.handleElementRemoval(event)\n        })\n\n        this.tabs[this.selectedTab].workspace.add(targetElement)\n\n        node.ports.forEach((port) => {\n          console.log(port)\n          let newPort = this.createPort(port, targetElement, true)\n          console.log(newPort.userData, port.oldUserData)\n          newPort.userData = { ...newPort.userData, ...port.oldUserData }\n          console.log(newPort.userData);\n          console.log(port.oldUserData);\n          \n          targetElement.setUserData({\n            type: 'subsystem',\n          })\n\n          var label = new draw2d.shape.basic.Label({ text: port.name ? port.name : newPort.getName() })\n          label.setFontColor('#000000')\n          label.setStroke(0)\n          label.setFontSize(12)\n          label.setPadding(5)\n          label.setUserData({\n            syncPort: newPort,\n          })\n\n          // label.on('dblclick', (emitter: any) => {\n          //   console.log('dblclick subsystem label')\n          //   // emitter.preventDefault()\n          //   this.enableLabelEditing(emitter)\n          // })\n          label.on('dblclick', (emitter: any, event: any) => {\n            this.enableLabelEditing(emitter, (label: any) => {\n              this.handleSubsystemLabelChange(emitter)\n            })\n          })\n\n          newPort.add(label, new draw2d.layout.locator.RightLocator())\n\n          targetElement.setPosition(targetElement.x + 1, targetElement.y + 1)\n          targetElement.setPosition(targetElement.x - 1, targetElement.y - 1)\n        })\n\n        this.checkPortPositioning(targetElement)\n\n        let newName: number = 0\n        for (let i = 0; i < this.groupHelper.length; i++) {\n          newName = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == this.groupHelper[i].parentId)\n        }\n        this.tabs[newName].subSystems.subSystems = this.tabs[newName].subSystems.subSystems + 1\n\n        setTimeout(() => {\n          let hasAlreadyGrouphelper =\n            this.groupHelper.findIndex(\n              (haystack: any) => haystack.parentId == this.tabs[this.selectedTab].emitter?.id\n            ) != -1\n\n          if (!hasAlreadyGrouphelper) {\n            let newName: number = 0\n            for (let i = 0; i < this.groupHelper.length; i++) {\n              newName = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == this.groupHelper[i].parentId)\n            }\n            this.tabs[newName].subSystems.subSystems = this.tabs[newName].subSystems.subSystems + 1\n\n            console.log(targetElement)\n            this.groupHelper.push({\n              parentId: this.tabs[this.selectedTab].emitter?.id,\n              groupElementId: targetElement.id,\n              groupExportJson: '',\n              groupExportLabelJson: '',\n              connectionJson: '[]',\n              tabIndex: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n              tabName: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n            })\n          }\n        })\n\n        targetElement.setUserData({ ...targetElement.getUserData(), ...node.userData })\n\n        // this.groupHelper.push({\n        //   parentId: this.tabs[this.selectedTab].emitter?.id,\n        //   groupElementId: nodeShape.id,\n        //   groupExportJson: '',\n        //   groupExportLabelJson: '',\n        //   connectionJson: '[]',\n        //   tabIndex: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n        //   tabName: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n        // })\n\n        // targetElement.on('dblclick', (emitter: any, event: any) => {\n        //   console.log('dblclick subsystem nodehsape')\n        //   this.handleDoubleClickOnGroup(emitter, event)\n        // })\n\n        // targetElement.on('removed', (event: any) => {\n        //   let ports = [\n        //     ...targetElement.hybridPorts.data,\n        //     ...targetElement.outputPorts.data,\n        //     ...targetElement.inputPorts.data,\n        //   ]\n        //   for (let i = 0; i < ports.length; i++) {\n        //     const port = ports[i]\n        //     for (let l = 0; l < port.connections.data.length; l++) {\n        //       const connection = port.connections.data[l]\n        //       connection.canvas.remove(connection)\n        //     }\n        //   }\n\n        //   this.handleElementRemoval(event)\n        // })\n      } else if (!node.svg) {\n        if (node.type != 'default') {\n          var nodeShape = new draw2d.shape.basic.Rectangle({\n            x: node.position.x,\n            y: node.position.y,\n            width: node.size.width,\n            height: node.size.height,\n          })\n          nodeShape.setId(node.uuid)\n          node.ports.forEach((port) => {\n            let subSystemPort = this.createPort(port, nodeShape)\n            nodeShape.setUserData({\n              type: 'subSystemPort',\n            })\n\n            subSystemPort.userData = { ...subSystemPort.userData, ...port.oldUserData }\n\n            var label = new draw2d.shape.basic.Label({ text: subSystemPort.getName() })\n            label.setFontColor('#000000')\n            label.setStroke(0)\n            label.setFontSize(12)\n            nodeShape.add(label, new draw2d.layout.locator.XYRelPortLocator(25, 35))\n\n            // label.on('dblclick', (emitter: any, event: any) => {\n            //   console.log('dblclick subsystem port')\n            //   this.enableLabelEditing(emitter)\n            //   return false\n            // })\n            label.on('dblclick', (emitter: any, event: any) => {\n              this.enableLabelEditing(emitter, (label: any) => {\n                this.handleLabelChange(emitter, true)\n              })\n              return\n            })\n\n            // label.on('change', (event: any) => {\n            //   this.handleLabelChange(event, true)\n            // })\n\n            nodeShape.on('move', function () {\n              label.repaint()\n            })\n          })\n\n          nodeShape.on('removed', (event: any) => {\n            let ports = [...nodeShape.hybridPorts.data, ...nodeShape.outputPorts.data, ...nodeShape.inputPorts.data]\n            for (let i = 0; i < ports.length; i++) {\n              const port = ports[i]\n              for (let l = 0; l < port.connections.data.length; l++) {\n                const connection = port.connections.data[l]\n                connection.canvas.remove(connection)\n              }\n            }\n            this.removeConnectedPort(event)\n            //this.handleElementRemoval(event)\n          })\n\n          nodeShape.setUserData({ ...nodeShape.getUserData(), ...node.userData })\n          this.tabs[this.selectedTab].workspace.add(nodeShape)\n        }\n      } else {\n        let NodeShapeFigure = draw2d.SVGFigure.extend({\n          NAME: 'SVGFigure.' + node.id,\n\n          init: function () {\n            this._super()\n          },\n\n          onClick: (event: any) => {},\n\n          // getSVG: () => {\n          //   return node.svg.replace('xlink:href', 'src')\n          // },\n        })\n\n        let nodeShape = new NodeShapeFigure({})\n\n        // nodeShape.setSelectable(false)\n\n        let nodeShapeImage = new draw2d.shape.basic.Image({})\n\n        if (!forceSavedSize) {\n          const sizeArr = this.getSizeArrFromSvg(node.svg)\n          nodeShape.setWidth(sizeArr[0])\n          nodeShape.setHeight(sizeArr[1])\n\n          nodeShapeImage.setWidth(sizeArr[0])\n          nodeShapeImage.setHeight(sizeArr[1])\n        } else {\n          nodeShape.setWidth(node.size.width)\n          nodeShape.setHeight(node.size.height)\n\n          nodeShapeImage.setWidth(node.size.width)\n          nodeShapeImage.setHeight(node.size.height)\n        }\n\n        var svgBlob = new Blob([node.svg], { type: 'image/svg+xml;charset=utf-8' })\n        var svgUrl = URL.createObjectURL(svgBlob)\n        nodeShapeImage.setPath(svgUrl)\n\n        nodeShape.add(nodeShapeImage, new draw2d.layout.locator.CenterLocator())\n\n        nodeShape.on('resize', () => {\n          const newSize = nodeShape.getBoundingBox().getWidth()\n          const newHeight = nodeShape.getBoundingBox().getHeight()\n          nodeShapeImage.setWidth(newSize)\n          nodeShapeImage.setHeight(newHeight)\n        })\n\n        if (node.ports) {\n          node.ports.forEach((port: SCDraw2DNodePort) => {\n            this.createPort(port, nodeShape)\n          })\n        }\n\n        // const viewBoxMatch = node.svg.match(/\\bviewBox\\s*=\\s*['\"]([^'\"]*)['\"]/);\n\n        // if (viewBoxMatch) {\n        //   const viewBoxAttributeValue = viewBoxMatch[1];\n\n        //   const numbers = viewBoxAttributeValue.split(' ').slice(-2);\n\n        //   nodeShape.setWidth(+numbers[0])\n        //   nodeShape.setHeight(+numbers[1])\n        // }\n\n        nodeShape.setUserData({\n          id: node.id,\n          name: node.name,\n          type: node.type,\n        })\n\n        if (node.uuid) {\n          nodeShape.setId(node.uuid)\n          this.currentNumber++\n        }\n\n        nodeShape.on('click', (emitter: any, event: any) => {\n          this.handleClickOnNode(emitter, event)\n        })\n\n        // nodeShape.installEditPolicy(\n        //   new draw2d.policy.figure.SelectionPolicy({\n        //     onClick: function onClick(figure: any, mouseX: number, mouseY: number, shiftkey: boolean, ctrlKey: boolean) {\n\n        //     },\n        //   })\n        // )\n\n        nodeShapeImage.on('click', (emitter: any, event: any) => {\n          if (this.currentlyHoldCtrlKey || event.shiftKey) {\n          }\n        })\n\n        nodeShapeImage.on('dblclick', (emitter: any, event: any) => {\n          console.log('dblclick nodeshape image')\n          this.handleDoubleClickOnNode(emitter.parent, event)\n        })\n\n        var label: any\n        if (node.label) {\n          label = new draw2d.shape.basic.Label({ text: node.label.text })\n          label.setFontColor('#000000')\n          label.setStroke(0)\n          label.setFontSize(14)\n          label.setUserData({\n            refEl: node.label.refEl,\n            refX: node.label.refX,\n            refY: node.label.refY,\n          })\n\n          label.on('drag', function (emitter: any, event: any) {\n            const { x, y } = emitter.getPosition()\n            const xNode = nodeShape.x\n            const yNode = nodeShape.y\n\n            label.userData.refX = xNode - x\n            label.userData.refY = yNode - y\n          })\n\n          this.tabs[this.selectedTab].workspace.add(nodeShape, node.position.x, node.position.y)\n\n          this.tabs[this.selectedTab].workspace.add(label, node.label.positionX, node.label.positionY)\n        } else {\n          label = new draw2d.shape.basic.Label({ text: this.getNewLabelText(node.name) })\n          label.setFontColor('#000000')\n          label.setStroke(0)\n          label.setFontSize(14)\n          label.setUserData({\n            refEl: nodeShape.id,\n            refX: 0,\n            refY: 30,\n          })\n\n          label.on('drag', function (emitter: any, event: any) {\n            const { x, y } = emitter.getPosition()\n            const xNode = nodeShape.x\n            const yNode = nodeShape.y\n\n            label.userData.refX = xNode - x\n            label.userData.refY = yNode - y\n          })\n\n          this.tabs[this.selectedTab].workspace.add(nodeShape, node.position.x, node.position.y)\n\n          this.tabs[this.selectedTab].workspace.add(label, node.position.x, node.position.y - 30)\n        }\n\n        nodeShape.on('drag', function (emitter: any, event: any) {\n          const { x, y } = emitter.getPosition()\n          const labelX = x - label.userData.refX\n          const labelY = y - label.userData.refY //30\n          label.setPosition(labelX, labelY)\n        })\n\n        nodeShape.on(\n          'removed',\n          function (event: any) {\n            let ports: any = this.getElementPorts(nodeShape)\n            for (let i = 0; i < ports.length; i++) {\n              const port = ports[i]\n              for (let l = 0; l < port.connections.data.length; l++) {\n                const connection = port.connections.data[l]\n                connection.canvas.remove(connection)\n              }\n            }\n            if (label.canvas) {\n              label.canvas.remove(label)\n            }\n            if (\n              this.showAttributeMenu &&\n              this.currentAttributeElementId &&\n              event.id == this.currentAttributeElementId\n            ) {\n              this.showAttributeMenu = false\n              this.currentAttributes = undefined\n              this.currentAttributeElementId = ''\n              this.attributePopoverPosition = {\n                top: -1,\n                left: -1,\n              }\n            }\n          }.bind(this)\n        )\n\n        label.on('dblclick', (emitter: any) => {\n          console.log('dblclick label')\n          event.preventDefault()\n          this.enableLabelEditing(emitter)\n        })\n\n        if (\n          !this.elements.find(\n            (haystack: SCDraw2DElement) =>\n              (!isNaN(+haystack.reference_id) && +haystack.reference_id == node.id) || haystack.reference_id == node.id\n          )\n        ) {\n          this.elements.push({\n            reference_id: nodeShape.id,\n            attributes: node.attributes,\n          })\n        }\n\n        this.draw2dElements.push(label)\n        nodeShape.setUserData({ ...nodeShape.getUserData(), ...node.userData })\n      }\n    })\n  }\n\n  stringify(obj: any) {\n    let cache: any = []\n    let str = JSON.stringify(obj, function (key, value) {\n      if (typeof value === 'object' && value !== null) {\n        if (cache.indexOf(value) !== -1) {\n          // Circular reference found, discard key\n          return\n        }\n        // Store value in our collection\n        cache.push(value)\n      }\n      return value\n    })\n    cache = null // reset the cache\n    return str\n  }\n\n  handleElementRemoval(event: any) {\n    // if (this.groupHelper.findIndex(haystack => haystack.groupElementId == event.id) != -1) {\n    //   this.groupHelper.splice(this.groupHelper.findIndex(haystack => haystack.groupElementId == event.id), 1)\n    // }\n    if (this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == event.id) != -1) {\n      this.checkAndCloseRemovesTabs(\n        this.tabs[this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == event.id)]\n      )\n      setTimeout(() => {\n        this.tabs.splice(\n          this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == event.id),\n          1\n        )\n      })\n    }\n  }\n\n  checkAndCloseRemovesTabs(tab: SCDraw2DTab) {\n    let figures = tab.workspace.getFigures()\n    figures = figures.data.filter(\n      (haystack: any) => !haystack.cssClass.startsWith('SVGFigure') && haystack.userData?.type == 'subsystem'\n    )\n    for (let index = 0; index < figures.length; index++) {\n      const figure = figures[index]\n      if (this.groupHelper.findIndex((haystack) => haystack.groupElementId == figure.id) != -1) {\n        this.groupHelper.splice(\n          this.groupHelper.findIndex((haystack) => haystack.groupElementId == figure.id),\n          1\n        )\n      }\n\n      if (this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == figure.id) != -1) {\n        this.checkAndCloseRemovesTabs(\n          this.tabs[this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == figure.id)]\n        )\n        setTimeout(() => {\n          this.tabs.splice(\n            this.tabs.findIndex((haystack) => haystack.emitter && haystack.emitter.id == figure.id),\n            1\n          )\n        })\n      }\n    }\n  }\n\n  getNewLabelText(baseText: string) {\n    let currentLabelIndex = 0\n    let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    figures = figures.data.filter(\n      (haystack: any) => haystack.cssClass.startsWith('SVGFigure') && haystack.userData.name == baseText\n    )\n    for (let index = 0; index < figures.length; index++) {\n      const figure = figures[index]\n      let labelIndex = figure.children.data.findIndex((child: any) =>\n        child.figure.cssClass.startsWith('draw2d_shape_basic_Label')\n      )\n      let labelFigures = this.tabs[this.selectedTab].workspace.getFigures()\n      labelFigures = labelFigures.data.filter(\n        (haystack: any) =>\n          haystack.cssClass.startsWith('draw2d_shape_basic_Label') && haystack.userData.refEl == figure.id\n      )\n      if (labelFigures) {\n        if (labelFigures[0].text != baseText) {\n          const matches = labelFigures[0].text.match(/\\((\\d+)\\)\\s*$/)\n          if (matches && matches[1]) {\n            let figureLabelIndex = +matches[1]\n\n            if (figureLabelIndex >= currentLabelIndex) {\n              currentLabelIndex = figureLabelIndex + 1\n            }\n          } else if (currentLabelIndex < 1) {\n            currentLabelIndex = 1\n          }\n        } else if (currentLabelIndex < 1) {\n          currentLabelIndex = 1\n        }\n      }\n    }\n\n    return currentLabelIndex == 0 ? baseText : baseText + '(' + currentLabelIndex + ')'\n  }\n\n  createPort(port: SCDraw2DNodePort, nodeShape: any, forSubsystem: boolean = false, relPortId?: string) {\n    let locator\n    switch (port.location.location_type) {\n      case 'left':\n        locator = new draw2d.layout.locator.InputPortLocator(nodeShape)\n        break\n      case 'right':\n        locator = new draw2d.layout.locator.OutputPortLocator(nodeShape)\n        break\n      case 'top':\n        locator = new draw2d.layout.locator.TopLocator(nodeShape)\n        break\n      case 'bottom':\n        locator = new draw2d.layout.locator.BottomLocator(nodeShape)\n        break\n      case 'center':\n        locator = new draw2d.layout.locator.CenterLocator(nodeShape)\n        break\n      case 'custom':\n        console.log(port.location.position.x, port.location.position.y)\n\n        locator = new draw2d.layout.locator.XYAbsPortLocator({\n          x: port.location.position.x,\n          y: port.location.position.y,\n        })\n\n        break\n    }\n\n    let portEl: any\n    if (forSubsystem) {\n      const newPort = this.newPortByTemplate(port)\n      // targetElement.addPort(newPort, new draw2d.layout.locator.InputPortLocator())\n      portEl = nodeShape.addPort(newPort, new draw2d.layout.locator.Locator())\n      console.log(relPortId)\n      if (relPortId) {\n        newPort.userData = {...newPort.userData, ...{relPort: relPortId}}\n      }\n    } else {\n      portEl = nodeShape.createPort('hybrid', locator)\n    }\n\n    if (port.type.portSvg) {\n      setTimeout(() => {\n        // portEl.shape[0].insertBefore(port.type.portSvg, portEl.shape[0].nextSibling)\n        portEl.shape[0].innerHTML += '<pattern id=\"PatternTest\">' + port.type.portSvg + '</pattern>'\n        portEl.shape[0].setAttribute('fill', 'url(#PatternTest)')\n        // document.getElementById(this.tabs[this.selectedTab].index).children[0].innerHTML += '<g>' + port.type.portSvg + '</g>'\n      })\n    }\n    portEl.setBackgroundColor(port.type.color)\n    portEl.setUserData({\n      type: port.type.type_name,\n      portSvg: port.type.portSvg,\n      positionX: port.location.position ? port.location.position.x : 0,\n      positionY: port.location.position ? port.location.position.y : 0,\n      interfaceDirection: port.interface_direction,\n      locationType: port.location.location_type,\n      relPort: relPortId,\n    })\n\n    if (port.uuid) {\n      portEl.setId(port.uuid)\n    }\n    if (port.name) {\n      portEl.setName(port.name)\n    }\n\n    portEl.installEditPolicy(\n      new draw2d.policy.port.IntrusivePortsFeedbackPolicy({\n        onDragStart: this.onPortDragStart,\n      })\n    )\n\n    portEl.on(\"dragEnd\", function (emitter: any, event: any) {\n      console.log(emitter, event)\n    }.bind(this));\n\n    let createCommand = portEl.createCommand\n    portEl.createCommand = (request: any) => {\n      if (\n        (request.source.userData &&\n          request.source.userData.type &&\n          request.target.userData.type &&\n          request.source.userData.type != request.target.userData.type &&\n          request.target.userData.type != 'universal' &&\n          request.source.userData.type != 'universal') ||\n        (request.target.userData.interfaceDirection == request.source.userData.interfaceDirection &&\n          request.target.userData.interfaceDirection != 'HYBRID')\n      ) {\n        return null\n      }\n\n      return createCommand(request)\n    }\n    return portEl\n  }\n\n  handleElementDragEnd(event: any, index: number) {\n    if (!this.currentDragLayer || !this.currentDragOverPosition) {\n      return\n    }\n    let newNode: SCDraw2DNode = JSON.parse(JSON.stringify(this.nodes[index]))\n    // newNode.position.x = this.currentDragOverPosition.x - this.gfxHolder.nativeElement.parentElement.offsetLeft - this.currentDragLayer.x + (this.lastX)\n    newNode.position.x =\n      this.currentDragOverPosition.x - this.gfxHolder.nativeElement.parentElement.offsetLeft - this.currentDragLayer.x\n    if (newNode.position.x % 20 != 0 && newNode.position.x % 20 > 10) {\n      newNode.position.x += 20 - (newNode.position.x % 20)\n    } else {\n      newNode.position.x -= newNode.position.x % 20\n    }\n    // newNode.position.y = this.currentDragOverPosition.y - this.gfxHolder.nativeElement.parentElement.offsetTop - this.currentDragLayer.y + (this.lastY)\n    newNode.position.y =\n      this.currentDragOverPosition.y -\n      this.gfxHolder.nativeElement.parentElement.offsetTop -\n      this.currentDragLayer.y +\n      48\n    if (newNode.position.y % 20 != 0 && newNode.position.y % 20 > 10) {\n      newNode.position.y += 20 - (newNode.position.y % 20)\n    } else {\n      newNode.position.y -= newNode.position.y % 20\n    }\n\n    newNode.position.y -= 40\n\n    this.createNodes([newNode])\n\n    this.currentDragLayer = undefined\n    this.currentDragOverPosition = undefined\n  }\n\n  handleElementDragStart(event: any) {\n    this.currentDragLayer = {\n      x: event.layerX,\n      y: event.layerY,\n    }\n  }\n\n  handleElementDragOver(event: any) {\n    // this.currentDragOverPosition = {\n    //   x: event.pageX,\n    //   y: event.pageY\n    // }\n    this.currentDragOverPosition = {\n      x: event.offsetX,\n      y: event.offsetY,\n    }\n  }\n\n  handleElementDrop(event: any) {\n    event.preventDefault()\n  }\n\n  allowDrop(event: any) {\n    event.preventDefault()\n  }\n\n  onMouseMove(event: any) {\n    this.currentlyHover = true\n    this.mouseX = event.offsetX\n    this.mouseY = event.offsetY\n    this.mouseLayerX = event.layerX\n    this.mouseLayerY = event.layerY\n  }\n\n  onMouseLeave(event: MouseEvent) {\n    this.currentlyHover = false\n  }\n\n  handleDoubleClickOnNode(emitter: any, event: any) {\n    if (emitter.userData?.id) {\n      this.deselectAllElements()\n      this.showAttributeMenu = true\n      this.currentAttributeElementId = emitter.id\n      let currentAttributesTmp = this.elements.find((haystack) => haystack.reference_id == emitter.id)?.attributes\n      if (currentAttributesTmp) {\n        currentAttributesTmp.forEach((attribute) => {\n          if (!attribute.value) {\n            attribute.value = attribute.defaultValue\n          }\n        })\n        this.currentAttributes = currentAttributesTmp\n      }\n      this.attributePopoverPosition = {\n        top: emitter.y - (200 + 20),\n        left: emitter.width < 300 ? emitter.x - 300 / 2 + emitter.width / 2 : emitter.x + (emitter.width / 2 - 300 / 2),\n      }\n    }\n  }\n\n  deselectAllElements() {\n    let selectedElements = this.tabs[this.selectedTab].workspace.getSelection()\n    for (let i = selectedElements.all.data.length - 1; i >= 0; i--) {\n      const element = selectedElements.all.data[i]\n      element.unselect()\n    }\n  }\n\n  handleDoubleClickOnGroup(emitter: any, event: any) {\n    let currGroupIndex = this.groupHelper.findIndex((haystack: any) => emitter.id == haystack.groupElementId)\n    if (currGroupIndex == -1) {\n      return\n    }\n\n    let currIndex = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == emitter.id)\n    emitter.unselect()\n    if (currIndex == -1) {\n      let newName: number\n      for (let i = 0; i < this.groupHelper.length; i++) {\n        newName = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == this.groupHelper[i].parentId)\n      }\n      let emitterPorts = this.getElementPorts(emitter)\n\n      this.addTab({\n        index: this.groupHelper[currGroupIndex].tabIndex,\n        name: this.groupHelper[currGroupIndex].tabName,\n        elements: this.groupHelper[currGroupIndex].groupExportJson,\n        labels: this.groupHelper[currGroupIndex].groupExportLabelJson,\n        workspace: undefined,\n        emitter: emitter,\n        subSystems: {\n          subSystems: 0,\n          ports: 1,\n        },\n      })\n\n      setTimeout(() => {\n        let emitterPortLabels: string[] = []\n        for (let index = 0; index < emitterPorts.length; index++) {\n          const port = emitterPorts[index]\n          emitterPortLabels.push(port.children.data[0].figure.text)\n        }\n        this.initWorkspace()\n        console.log(this.hasAlreadyPortElements())\n        if (!this.hasAlreadyPortElements()) {\n          const connections = JSON.parse(this.groupHelper[currGroupIndex].connectionJson)\n          connections.forEach((connection: any) => {\n            // setTimeout(() => {\n            const foundPortIndex = emitterPorts.findIndex(\n              (v: any) =>\n                v.userData.oldTargetPortId == connection.targetPortId &&\n                v.userData.oldSourcePortId == connection.sourcePortId\n            )\n            if (foundPortIndex >= 0 && emitterPorts[foundPortIndex].children.data[0]) {\n              const createdPort = this.addPort(\n                this.tabs[this.selectedTab].index == 'main' ? currGroupIndex : newName + 1,\n                undefined,\n                true,\n                connection,\n                emitterPortLabels[foundPortIndex],\n                emitterPorts[foundPortIndex].bgColor.hashString,\n                emitterPorts[foundPortIndex].userData.type,\n                emitterPorts[foundPortIndex].userData.portSvg,\n                emitterPorts[foundPortIndex].id\n              )\n              emitterPorts[foundPortIndex].userData.relPort = createdPort.id\n            }\n          })\n        } else {\n          this.checkLabelNaming(emitterPortLabels)\n        }\n      })\n    } else {\n      this.changeTab(currIndex)\n    }\n  }\n\n  checkLabelNaming(emitterPortLabels: any) {\n    let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    figures = figures.data.filter(\n      (haystack: any) =>\n        !haystack.cssClass.startsWith('SVGFigure') &&\n        haystack.width > 10 &&\n        haystack.height > 10 &&\n        haystack.userData?.type == 'subSystemPort'\n    )\n    for (let index = 0; index < figures.length; index++) {\n      const figure = figures[index]\n      if (emitterPortLabels[index]) {\n        figure.children.data[0].figure.setText(emitterPortLabels[index])\n        // figure.hybridPorts.data[0].setName(emitterPortLabels[index])\n      }\n    }\n  }\n\n  closeSubSystem() {\n    this.showSubSystem = false\n    this.subSystemJson = ''\n  }\n\n  handleClickOnNode(emitter: any, event: any) {}\n\n  handleWorkspaceClick(event: any) {\n    event.preventDefault()\n    this.showAttributeMenu = false\n    this.currentAttributes = undefined\n    this.currentAttributeElementId = ''\n    this.attributePopoverPosition = {\n      top: -1,\n      left: -1,\n    }\n  }\n\n  saveWorkspace() {\n    this.removeAllTabs()\n    var writer = new draw2d.io.json.Writer()\n    writer.marshal(this.tabs[this.selectedTab].workspace, (json: any) => {\n      let tmpGroupExportJson = JSON.parse(JSON.stringify(this.groupHelper))\n      for (let i = 0; i < tmpGroupExportJson.length; i++) {\n        tmpGroupExportJson[i].groupExportJson = tmpGroupExportJson[i].groupExportJson\n          ? JSON.parse(tmpGroupExportJson[i].groupExportJson)\n          : {}\n        tmpGroupExportJson[i].connectionJson = tmpGroupExportJson[i].connectionJson\n          ? JSON.parse(tmpGroupExportJson[i].connectionJson)\n          : {}\n      }\n      var jsonTxt = JSON.stringify(\n        { nodes: json, elementReferences: this.elements, subSystems: tmpGroupExportJson },\n        null,\n        2\n      )\n\n      this.downloadJson(jsonTxt)\n    })\n  }\n\n  handleEditorConfigChanged() {\n    var writer = new draw2d.io.json.Writer()\n    writer.marshal(this.tabs[this.selectedTab].workspace, (json: any) => {\n      let tmpGroupExportJson = JSON.parse(JSON.stringify(this.groupHelper))\n      for (let i = 0; i < tmpGroupExportJson.length; i++) {\n        tmpGroupExportJson[i].groupExportJson = tmpGroupExportJson[i].groupExportJson\n          ? JSON.parse(tmpGroupExportJson[i].groupExportJson)\n          : {}\n        tmpGroupExportJson[i].connectionJson = tmpGroupExportJson[i].connectionJson\n          ? JSON.parse(tmpGroupExportJson[i].connectionJson)\n          : {}\n      }\n      var jsonTxt = JSON.stringify(\n        { nodes: json, elementReferences: this.elements, subSystems: tmpGroupExportJson },\n        null,\n        2\n      )\n\n      this.editorContentChanged.emit(JSON.parse(jsonTxt))\n    })\n  }\n\n  loadRestoreFile() {\n    this.fileUploadInput.nativeElement.click()\n  }\n\n  isSelectionValid(selectedElements: any) {\n    if (\n      selectedElements.all.data.findIndex(\n        (haystack: any) =>\n          (haystack.userData && haystack.userData.type == 'subSystemPort') ||\n          haystack.cssClass == 'draw2d_shape_basic_Label'\n      ) != -1 &&\n      selectedElements.all.data.length == 1\n    ) {\n      return false\n    }\n\n    if (\n      !selectedElements.all.data.filter(\n        (haystack: any) => haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n      )[0]\n    ) {\n      return false\n    }\n\n    return true\n  }\n\n  createSubsystemElement(selectedElements: any) {\n    var targetElement = new draw2d.shape.basic.Rectangle({\n      x: selectedElements.all.data.filter(\n        (haystack: any) => haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n      )[0].x,\n      y: selectedElements.all.data.filter(\n        (haystack: any) => haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n      )[0].y,\n      width: 160,\n      height: 160,\n    })\n\n    targetElement.setUserData({ type: 'subsystem' })\n\n    targetElement.on('dblclick', (emitter: any, event: any) => {\n      console.log('dblclick subsystem targetElement')\n      this.handleDoubleClickOnGroup(emitter, event)\n    })\n\n    targetElement.on('removed', (event: any) => {\n      let ports = [\n        ...targetElement.hybridPorts.data,\n        ...targetElement.outputPorts.data,\n        ...targetElement.inputPorts.data,\n      ]\n      for (let i = 0; i < ports.length; i++) {\n        const port = ports[i]\n        for (let l = 0; l < port.connections.data.length; l++) {\n          const connection = port.connections.data[l]\n          connection.canvas.remove(connection)\n        }\n      }\n\n      this.handleElementRemoval(event)\n    })\n\n    targetElement.on('resize', () => {\n      this.checkPortPositioning(targetElement)\n    })\n\n    return targetElement\n  }\n\n  combineElements() {\n    let selectedElements = this.tabs[this.selectedTab].workspace.getSelection()\n    if (!this.isSelectionValid(selectedElements)) return\n\n    let targetElement = this.createSubsystemElement(selectedElements)\n    this.tabs[this.selectedTab].workspace.add(targetElement)\n\n    let smallestX = 0\n    let smallestY = 0\n    let selectedElementsIds: string[] = []\n    if (selectedElements.all.data.length != 0) {\n      for (\n        let i =\n          selectedElements.all.data.filter(\n            (haystack: any) =>\n              haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n          ).length - 1;\n        i >= 0;\n        i--\n      ) {\n        selectedElementsIds.push(\n          selectedElements.all.data.filter(\n            (haystack: any) =>\n              haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n          )[i].id\n        )\n      }\n\n      var writer = new draw2d.io.json.Writer()\n      writer.marshal(this.tabs[this.selectedTab].workspace, (json: any) => {\n        var jsonTxt = JSON.stringify({ nodes: json, elementReferences: this.elements }, null, 2)\n        let parsedTmp = JSON.parse(jsonTxt)\n        let parsedLabelTmp = JSON.parse(jsonTxt)\n        for (let i = parsedTmp.nodes.length - 1; i >= 0; i--) {\n          if (\n            selectedElements.all.data.findIndex((haystack: any) => haystack.id == parsedTmp.nodes[i].id) == -1 ||\n            parsedTmp.nodes[i].type == 'draw2d.shape.basic.Label'\n          ) {\n            parsedTmp.nodes.splice(i, 1)\n          }\n        }\n        for (let i = parsedLabelTmp.nodes.length - 1; i >= 0; i--) {\n          if (\n            parsedLabelTmp.nodes[i].type != 'draw2d.shape.basic.Label' ||\n            parsedTmp.nodes.findIndex((haystack: any) => haystack.id == parsedLabelTmp.nodes[i].userData.refEl) == -1\n          ) {\n            parsedLabelTmp.nodes.splice(i, 1)\n          }\n          // if (selectedElements.all.data.findIndex((haystack: any) => haystack.id == parsedLabelTmp.nodes[i].id) == -1 || parsedLabelTmp.nodes[i].type != 'draw2d.shape.basic.Label') {\n          //   parsedLabelTmp.nodes.splice(i, 1)\n          // }\n        }\n        jsonTxt = JSON.stringify(JSON.parse(JSON.stringify(parsedTmp)))\n        let jsonTxtLabels = JSON.stringify(JSON.parse(JSON.stringify(parsedLabelTmp)))\n\n        let newName: number = 0\n        for (let i = 0; i < this.groupHelper.length; i++) {\n          newName = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == this.groupHelper[i].parentId)\n          console.log(newName)\n        }\n        if (newName == -1) {\n          newName = 0\n        }\n        this.tabs[newName].subSystems.subSystems = this.tabs[newName].subSystems.subSystems + 1\n\n        let connections: any[] = []\n        for (\n          let i = 0;\n          i <\n          selectedElements.all.data.filter(\n            (haystack: any) =>\n              haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n          ).length;\n          i++\n        ) {\n          if (\n            selectedElements.all.data.filter(\n              (haystack: any) =>\n                haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n            )[i].cssClass != 'draw2d_Connection'\n          ) {\n            for (\n              let l = 0;\n              l <\n              selectedElements.all.data\n                .filter(\n                  (haystack: any) =>\n                    haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n                )\n                [i].getPorts().data.length;\n              l++\n            ) {\n              const port = selectedElements.all.data\n                .filter(\n                  (haystack: any) =>\n                    haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n                )\n                [i].getPorts().data[l]\n              for (let k = 0; k < port.getConnections().data.length; k++) {\n                let connection = port.getConnections().data[k]\n                if (\n                  !(\n                    selectedElements.all.data\n                      .filter(\n                        (haystack: any) =>\n                          haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n                      )\n                      .find((haystack: any) => haystack.id == connection.targetPort.parent.id) &&\n                    selectedElements.all.data\n                      .filter(\n                        (haystack: any) =>\n                          haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n                      )\n                      .find((haystack: any) => haystack.id == connection.sourcePort.parent.id)\n                  )\n                ) {\n                  connection = {\n                    sourceParentID: connection.sourcePort.parent.id,\n                    targetParentID: connection.targetPort.parent.id,\n                    sourcePortId: connection.sourcePort.id,\n                    targetPortId: connection.targetPort.id,\n                    ...connection,\n                  }\n                  if (\n                    !connections.find(\n                      (haystack: any) =>\n                        haystack.sourceParentID == connection.sourceParentID &&\n                        haystack.targetParentID == connection.targetParentID &&\n                        connection.sourcePortId == haystack.sourcePortId &&\n                        connection.targetPort == haystack.targetPort\n                    )\n                  ) {\n                    connections.push(JSON.parse(JSON.stringify(connection, getCircularReplacer())))\n                  }\n                }\n              }\n            }\n          }\n        }\n        this.groupHelper.push({\n          parentId: this.tabs[this.selectedTab].emitter?.id,\n          groupElementId: targetElement.id,\n          groupExportJson: jsonTxt,\n          groupExportLabelJson: jsonTxtLabels,\n          connectionJson: JSON.stringify(connections),\n          tabIndex: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n          tabName: this.tabs[newName].index + 'Sub-' + this.tabs[newName].subSystems.subSystems,\n        })\n      })\n\n      this.subSystemPorts(targetElement, selectedElementsIds)\n      this.checkPortPositioning(targetElement)\n\n      setTimeout(() => {\n        for (let i = selectedElements.all.data.length - 1; i >= 0; i--) {\n          if (selectedElements.all.data[i]) {\n            this.tabs[this.selectedTab].workspace.remove(selectedElements.all.data[i])\n          }\n        }\n      })\n\n      let portElements: SCDraw2DNodePort[] = []\n      for (let i = 0; i < selectedElements.all.data.length; i++) {\n        for (\n          let l = 0;\n          l < selectedElements.all.data[i].hybridPorts ? selectedElements.all.data[i].hybridPorts.data.length : 0;\n          l++\n        ) {\n          const portEl = selectedElements.all.data[i].hybridPorts.data[l]\n          let locationtype: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'custom' = portEl.userData.locationType\n          portElements.push({\n            uuid: portEl.id,\n            name: portEl.name,\n            interface_direction: portEl.userData.interfaceDirection,\n            location: {\n              location_type: locationtype,\n              position: {\n                x: portEl.userData.positionX,\n                y: portEl.userData.positionY,\n              },\n            },\n            type: {\n              type_name: portEl.userData.type,\n              color: portEl.bgColor.hashString,\n              portSvg: portEl.userData.portSvg,\n            },\n          })\n          selectedElements.all.data[i].removePort(portEl)\n        }\n      }\n\n      for (let i = 0; i < selectedElements.all.data.length; i++) {\n        selectedElements.all.data[i].select(false)\n      }\n    }\n  }\n\n  checkPortPositioning(element: any) {\n    let ports: any = this.getElementPorts(element)\n\n    if (element.height <= ports.length * 20) {\n      element.setHeight((ports.length + 1) * 20)\n    }\n\n    for (let i = 0; i < ports.length; i++) {\n      const port = ports[i]\n      port.setPosition(0, (i + 1) * 20)\n    }\n\n    element.setPosition(element.x + 1, element.y + 1)\n    element.setPosition(element.x - 1, element.y - 1)\n\n    // if (element.y % 20 != 0 && element.y % 20 > 10) {\n    //   element.setPosition(element.x, element.y + 20 - (element.y % 20))\n    // }\n    // if (element.x % 20 != 0 && element.x % 20 > 10) {\n    //   element.setPosition(element.x + 20 - (element.x % 20), element.y)\n    // }\n\n    // element.setPosition(element.x + 1, element.y + 1)\n    // element.setPosition(element.x - 1, element.y - 1)\n  }\n\n  getElementPorts(element: any): any[] {\n    let ports: any = []\n    if (element.inputPorts && element.inputPorts.data.length != 0) {\n      ports = [...ports, ...element.inputPorts.data]\n    }\n    if (element.hybridPorts && element.hybridPorts.data.length != 0) {\n      ports = [...ports, ...element.hybridPorts.data]\n    }\n    if (element.outputPorts && element.outputPorts.data.length != 0) {\n      ports = [...ports, ...element.outputPorts.data]\n    }\n    return ports\n  }\n\n  restoreWorkspace(savedWorkspace: string, withoutClear: boolean = false, savedLabels: string = '') {\n    if (!savedWorkspace) {\n      return\n    }\n    // if (duplicate) {\n    //   if (serializedData[serializedData.length - 1].x) {\n    //     serializedData[serializedData.length - 1].x += (this.mouseX - points.middleX)\n    //   }\n    //   if (serializedData[serializedData.length - 1].y) {\n    //     serializedData[serializedData.length - 1].y += (this.mouseY - points.middleY)\n    //   }\n    // }\n\n    let savedWorkspaceObj = JSON.parse(savedWorkspace)\n    if (withoutClear) {\n      savedWorkspaceObj.subSystems.forEach((subSystem: ScDraws2dGroupHelper) => {\n        this.groupHelper.push(subSystem)\n      })\n    }\n    let savedWorkspaceTmp = JSON.parse(JSON.stringify(savedWorkspaceObj))\n    let savedWorkspaceNodes: SCDraw2DNode[] = savedWorkspaceTmp.nodes\n      .filter((haystack: any) => haystack.type != 'draw2d.shape.basic.Label')\n      .map((node: any) => {\n        let label = undefined\n        let labelObj = undefined\n        if (savedLabels) {\n          label = JSON.parse(savedLabels).nodes.find((haystack: any) => haystack.userData.refEl == node.id)\n          if (label) {\n            labelObj = {\n              positionX: label.x,\n              positionY: label.y,\n              refEl: label.userData.refEl,\n              refX: label.userData.refX,\n              refY: label.userData.refY,\n              text: label.text,\n            }\n          }\n        }\n        let returnData: SCDraw2DNode = {\n          id: isNaN(+node.type.split('.')[1]) ? node.type.split('.')[1] : +node.type.split('.')[1],\n          name: node.userData.name,\n          type: node.userData.type,\n          position: {\n            x: savedWorkspaceObj.points ? node.x + (this.mouseX - savedWorkspaceObj.points.middleX) : node.x,\n            y: savedWorkspaceObj.points ? node.y + (this.mouseY - savedWorkspaceObj.points.middleY) : node.y,\n          },\n          size: {\n            height: node.height,\n            width: node.width,\n          },\n          svg: this.nodes.find((haystack: SCDraw2DNode) => haystack.id == node.type.split('.')[1])?.svg,\n          uuid: node.id,\n          ports: [],\n          attributes: [],\n          label: labelObj,\n          userData: node.userData,\n        }\n\n        if (node.ports) {\n          returnData.ports = node.ports.map((port: any) => {\n            let locationtype: 'left' | 'right' | 'top' | 'bottom' | 'center' | 'custom' = 'custom'\n            switch (port.locator) {\n              case 'draw2d.layout.locator.InputPortLocator':\n                locationtype = 'left'\n                break\n              case 'draw2d.layout.locator.OutputPortLocator':\n                locationtype = 'right'\n                break\n              case 'draw2d.layout.locator.TopLocator':\n                locationtype = 'top'\n                break\n              case 'draw2d.layout.locator.BottomLocator':\n                locationtype = 'bottom'\n                break\n              case 'draw2d.layout.locator.CenterLocator':\n                locationtype = 'center'\n                break\n            }\n            console.log(port.userData)\n            let returnPort: SCDraw2DNodePort = {\n              uuid: port.id,\n              name: port.name,\n              type: {\n                type_name: port.userData.type,\n                color: this.rgba2hex(port.bgColor),\n                portSvg: port.userData.portSvg,\n              },\n              interface_direction: port.userData.interfaceDirection,\n              oldUserData: port.userData,\n              location: {\n                location_type: locationtype,\n                position:\n                  locationtype == 'custom' ? { x: port.userData.positionX, y: port.userData.positionY } : undefined,\n              },\n            }\n\n            return returnPort\n          })\n        }\n\n        returnData.attributes = JSON.parse(savedWorkspace).elementReferences.find(\n          (haystack: SCDraw2DElement) => haystack.reference_id == returnData.id\n        )?.attributes\n\n        return returnData\n      })\n\n    if (savedWorkspaceNodes) {\n      if (!withoutClear) {\n        this.tabs[this.selectedTab].workspace.clear()\n        this.elements = JSON.parse(savedWorkspace).elementReferences ? JSON.parse(savedWorkspace).elementReferences : []\n      }\n      this.createNodes(savedWorkspaceNodes, true)\n\n      setTimeout(() => {\n        this.restoreConnections(\n          JSON.parse(savedWorkspace).nodes.filter((haystack: any) => haystack.type == 'draw2d.Connection')\n        )\n      })\n    }\n  }\n\n  restoreConnections(connections: any[]) {\n    connections.forEach((connection) => {\n      let sourceFigure = this.tabs[this.selectedTab].workspace.getFigure(connection.source.node)\n      let targetFigure = this.tabs[this.selectedTab].workspace.getFigure(connection.target.node)\n      if (sourceFigure && targetFigure) {\n        let sourcePort = sourceFigure.getPort(connection.source.port)\n        let targetPort = targetFigure.getPort(connection.target.port)\n        if (sourcePort == null) {\n          let ports = sourceFigure.getPorts()\n          for (var i = 0; i < ports.length; i++) {\n            if (ports[i].getName() === connection.source.port) {\n              sourcePort = ports[i]\n              break\n            }\n          }\n        }\n        if (targetPort == null) {\n          let ports = targetFigure.getPorts()\n          for (var i = 0; i < ports.length; i++) {\n            if (ports[i].getName() === connection.target.port) {\n              targetPort = ports[i]\n              break\n            }\n          }\n        }\n        if (sourcePort && targetPort) {\n          var c = new draw2d.Connection({\n            router: new draw2d.layout.connection.InteractiveManhattanConnectionRouter(),\n            stroke: 1,\n            color: '#fb1',\n            radius: 20,\n            outlineColor: '#fb1',\n            source: sourcePort,\n            target: targetPort,\n            zOrder: 9999,\n          })\n\n          c.setId(connection.id)\n\n          this.tabs[this.selectedTab].workspace.add(c)\n        }\n      }\n    })\n  }\n\n  downloadJson(jsonString: string) {\n    let element: HTMLAnchorElement = document.createElement('a')\n    element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(jsonString))\n    element.setAttribute('download', 'export.json')\n    element.style.display = 'none'\n    document.body.appendChild(element)\n    element.click()\n    document.body.removeChild(element)\n  }\n\n  handleRestoreFileUpload(event: any) {\n    const file: File = event.target.files[0]\n\n    let fileReader = new FileReader()\n    fileReader.onload = () => {\n      this.restoreWorkspace(<string>fileReader.result)\n      let groupHelperTmp =\n        JSON.parse(<string>fileReader.result) && JSON.parse(<string>fileReader.result).subSystems\n          ? JSON.parse(<string>fileReader.result).subSystems\n          : []\n      for (let i = 0; i < groupHelperTmp.length; i++) {\n        groupHelperTmp[i].groupExportJson = JSON.stringify(groupHelperTmp[i].groupExportJson)\n        groupHelperTmp[i].connectionJson = JSON.stringify(groupHelperTmp[i].connectionJson)\n      }\n      this.groupHelper = groupHelperTmp\n      setTimeout(() => {\n        this.fileUploadInput.nativeElement.value = ''\n      })\n    }\n    fileReader.readAsText(file)\n  }\n\n  ngOnInit(): void {\n    this.calcNodeSize()\n    // this.nodes.forEach(this.calcLibViewScalingFactor)\n  }\n\n  calcNodeSize() {\n    this.nodes.forEach((node) => {\n      let sizeArr = this.getSizeArrFromSvg(node.svg)\n      node.size = {\n        width: sizeArr[0],\n        height: sizeArr[1],\n      }\n      this.calcLibViewScalingFactor(node)\n    })\n  }\n\n  public calcLibraryNodes() {\n    this.calcNodeSize()\n  }\n\n  calcLibViewScalingFactor(node: SCDraw2DNode) {\n    if (node.size.height > node.size.width && node.size.height > 250) {\n      let sf = 250 / node.size.height\n      node.libViewPos = {\n        scalingFactor: sf,\n        offsetHeight: 0,\n        offsetWidth: (250 - node.size.width * sf) / 2,\n      }\n    } else if (node.size.width > node.size.height && node.size.width > 250) {\n      let sf = 250 / node.size.width\n      node.libViewPos = {\n        scalingFactor: sf,\n        offsetWidth: 0,\n        offsetHeight: (250 - node.size.height * sf) / 2 - 6,\n      }\n    } else if (node.size.width > 250) {\n      // height == width\n\n      node.libViewPos = {\n        scalingFactor: 250 / node.size.width,\n        offsetWidth: 0,\n        offsetHeight: 0,\n      }\n    } else {\n      node.libViewPos = {\n        scalingFactor: 1,\n        offsetWidth: 0,\n        offsetHeight: 0,\n      }\n    }\n\n    console.log(node.name)\n    console.log(node.size)\n\n    console.log(node.libViewPos)\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes && changes.editorContent) {\n      this.restoreWorkspace(JSON.stringify(changes.editorContent))\n      let groupHelperTmp =\n        JSON.parse(JSON.stringify(changes.editorContent)) &&\n        JSON.parse(JSON.stringify(changes.editorContent)).subSystems\n          ? JSON.parse(JSON.stringify(changes.editorContent)).subSystems\n          : []\n      for (let i = 0; i < groupHelperTmp.length; i++) {\n        groupHelperTmp[i].groupExportJson = JSON.stringify(groupHelperTmp[i].groupExportJson)\n        groupHelperTmp[i].connectionJson = JSON.stringify(groupHelperTmp[i].connectionJson)\n      }\n      this.groupHelper = groupHelperTmp\n      setTimeout(() => {\n        this.fileUploadInput.nativeElement.value = ''\n      })\n    } else if (changes && changes.nodes) {\n      this.calcNodeSize()\n    }\n  }\n\n  writeValue(obj: any): void {\n    throw new Error('Method not implemented.')\n  }\n  registerOnChange(fn: any): void {\n    throw new Error('Method not implemented.')\n  }\n  registerOnTouched(fn: any): void {\n    throw new Error('Method not implemented.')\n  }\n  setDisabledState?(isDisabled: boolean): void {\n    throw new Error('Method not implemented.')\n  }\n\n  rgba2hex(color: string) {\n    let rgba = color.replace(/^rgba?\\(|\\s+|\\)$/g, '').split(',')\n\n    return `#${((1 << 24) + (parseInt(rgba[0]) << 16) + (parseInt(rgba[1]) << 8) + parseInt(rgba[2]))\n      .toString(16)\n      .slice(1)}`\n  }\n\n  addTab(tab: SCDraw2DTab) {\n    this.tabs.push(tab)\n\n    this.selectedTab = this.tabs.length - 1\n  }\n\n  changeTab(tab: number) {\n    this.selectedTab = tab\n  }\n\n  removeAllTabs() {\n    this.tabs.forEach((tab, i) => {\n      if (tab.index != 'main') this.removeTab(i, false)\n    })\n  }\n\n  removeTab(index: number, removeTabInUi: boolean = true) {\n    let groupHelperIndex = this.groupHelper.findIndex((haystack) => haystack.tabIndex == this.tabs[index].index)\n\n    let figures = this.tabs[index].workspace.getFigures()\n    let connections: any[] = []\n    for (let i = 0; i < figures.data.length; i++) {\n      for (let l = 0; l < figures.data[i].getPorts().data.length; l++) {\n        const port = figures.data[i].getPorts().data[l]\n\n        for (let k = 0; k < port.getConnections().data.length; k++) {\n          let connection = port.getConnections().data[k]\n          connection = {\n            sourceParentID: connection.sourcePort.parent.id,\n            targetParentID: connection.targetPort.parent.id,\n            ...connection,\n          }\n          if (\n            connections.findIndex(\n              (haystack: any) =>\n                haystack.sourceParentID == connection.sourceParentID &&\n                haystack.targetParentID == connection.targetParentID\n            ) == -1\n          ) {\n            connections.push(JSON.parse(JSON.stringify(connection, getCircularReplacer())))\n          }\n        }\n      }\n    }\n    var writer = new draw2d.io.json.Writer()\n    writer.marshal(this.tabs[index].workspace, (json: any) => {\n      let jsonLabel = JSON.parse(JSON.stringify(json))\n      jsonLabel = jsonLabel.filter((haystack: any) => haystack.cssClass == 'draw2d_shape_basic_Label')\n      json = json.filter((haystack: any) => haystack.cssClass != 'draw2d_shape_basic_Label')\n      var jsonTxt = JSON.stringify({ nodes: json, elementReferences: this.elements }, null, 2)\n      var jsonLabelTxt = JSON.stringify({ nodes: jsonLabel, elementReferences: [] }, null, 2)\n      this.groupHelper[groupHelperIndex].groupExportJson = jsonTxt\n      this.groupHelper[groupHelperIndex].groupExportLabelJson = jsonLabelTxt\n      this.groupHelper[groupHelperIndex].connectionJson = JSON.stringify(connections)\n\n      if (removeTabInUi) this.tabs.splice(index, 1)\n    })\n  }\n\n  addPort(\n    currSub?: number,\n    button?: boolean,\n    skipEmitterPort?: boolean,\n    connection?: any,\n    defaultPortName?: string,\n    portColor: string = '#939393',\n    portType: string = 'universal',\n    portSvg: string = '',\n    relPortId: string = ''\n  ) {\n    let portCount = this.tabs[this.selectedTab].subSystems.ports - 1\n    console.log('PortCount', portCount)\n\n    var nodeShape = new draw2d.shape.basic.Rectangle({\n      x: 400 + this.lastX,\n      y: 100 + this.lastX + portCount * 80,\n      width: 160,\n      height: 80,\n    })\n\n    console.log(relPortId)\n    let subSystemPort = this.createPort(\n      {\n        interface_direction: connection?.sourcePort.userData.interfaceDirection || 'HYBRID',\n        location: { location_type: 'right' },\n        type: { type_name: portType, color: portColor, portSvg },\n      },\n      nodeShape,\n      false,\n      relPortId\n    )\n    nodeShape.setUserData({\n      type: 'subSystemPort',\n    })\n\n    let portName = this.tabs[currSub ? currSub : this.selectedTab].subSystems.ports\n\n    if (defaultPortName) {\n      subSystemPort.setName(defaultPortName)\n    } else {\n      subSystemPort.setName('Sub-Port-' + portName)\n    }\n\n    subSystemPort.on('removed', (event: any) => {\n      if (event.connections?.data && event.connections.data.length != 0) {\n        event.connections.data.forEach((connection: any) => {\n          connection.canvas.remove(connection)\n        })\n      }\n      this.tabs[this.selectedTab].subSystems.ports--\n    })\n\n    var firstlabel = new draw2d.shape.basic.Label({ text: subSystemPort.getName() })\n    firstlabel.setFontColor('#000000')\n    firstlabel.setStroke(0)\n    firstlabel.setFontSize(12)\n\n    firstlabel.on('dblclick', (emitter: any, event: any) => {\n      this.enableLabelEditing(emitter, (label: any) => {\n        console.log(emitter, event, label)\n        this.handleLabelChange(emitter)\n      })\n      return\n    })\n\n    // firstlabel.on('dblclick', (emitter: any, event: any) => {\n    //   this.enableLabelEditing(emitter)\n    //   return false\n    // })\n\n    // firstlabel.on('change', (event: any) => {\n    //   this.handleLabelChange(event)\n    // })\n\n    nodeShape.on('move', function () {\n      firstlabel.repaint()\n    })\n\n    nodeShape.on('removed', (event: any) => {\n      let ports = [...nodeShape.hybridPorts.data, ...nodeShape.outputPorts.data, ...nodeShape.inputPorts.data]\n      for (let i = 0; i < ports.length; i++) {\n        const port = ports[i]\n        for (let l = 0; l < port.connections.data.length; l++) {\n          const connection = port.connections.data[l]\n          connection.canvas.remove(connection)\n        }\n      }\n\n      this.removeConnectedPort(event)\n    })\n\n    this.tabs[this.selectedTab].workspace.add(nodeShape)\n\n    if (!button && connection) {\n      let figures = this.tabs[this.selectedTab].workspace.getFigures()\n      let figure = figures.data.filter(\n        (haystack: any) => haystack.id == connection.sourceParentID || haystack.id == connection.targetParentID\n      )[0]\n\n      // const figurePort = figure.hybridPorts.data.find(\n      //   (haystack: any) => haystack.id == connection.sourcePortId || haystack.id == connection.targetPortId\n      // )\n      const figurePort = this.getElementPorts(figure).find(\n        (haystack: any) => haystack.id == connection.sourcePortId || haystack.id == connection.targetPortId\n      )\n\n      if (figure && figurePort) {\n        var newConnection = new draw2d.Connection({\n          router: new draw2d.layout.connection.InteractiveManhattanConnectionRouter(),\n          stroke: 1,\n          color: '#fb1',\n          radius: 20,\n          outlineColor: '#fb1',\n          source: nodeShape.hybridPorts.data[0],\n          target: figurePort,\n          zOrder: 9999,\n        })\n\n        this.tabs[this.selectedTab].workspace.add(newConnection)\n      }\n    }\n\n    if (!skipEmitterPort) {\n      let newPort = this.createPort(\n        {\n          interface_direction: 'HYBRID',\n          location: { location_type: 'left' },\n          type: { type_name: 'universal', color: portColor, portSvg },\n        },\n        this.tabs[this.selectedTab].emitter,\n        true\n      )\n\n      nodeShape.setUserData({\n        type: 'subSystemPort',\n      })\n\n      newPort.setName('Sub-Port-' + this.tabs[currSub ? currSub + 1 : this.selectedTab].subSystems.ports)\n      this.tabs[this.selectedTab].emitter.setPosition(\n        this.tabs[this.selectedTab].emitter.x + 1,\n        this.tabs[this.selectedTab].emitter.y + 1\n      )\n      this.tabs[this.selectedTab].emitter.setPosition(\n        this.tabs[this.selectedTab].emitter.x - 1,\n        this.tabs[this.selectedTab].emitter.y - 1\n      )\n\n      var label = new draw2d.shape.basic.Label({ text: subSystemPort.getName() })\n      label.setFontColor('#000000')\n      label.setStroke(0)\n      label.setFontSize(12)\n      label.setUserData({\n        syncPort: newPort,\n        syncId: firstlabel.id,\n      })\n\n      label.on('dblclick', (emitter: any, event: any) => {\n        console.log('dblclick subsystem port')\n        this.enableLabelEditing(emitter)\n      })\n\n      label.on('change', (event: any) => {\n        console.log(event.text)\n        event.userData.syncPort.setName(event.text)\n        this.handleSubsystemLabelChange(event)\n      })\n\n      label.scaleX = 1\n      label.scaleY = 1\n\n      firstlabel.setUserData({\n        syncId: label.id,\n      })\n\n      nodeShape.add(firstlabel, new draw2d.layout.locator.XYRelPortLocator(25, 35))\n\n      newPort.add(label, new draw2d.layout.locator.RightLocator())\n\n      nodeShape.userData.relPort = newPort.id\n      subSystemPort.userData.relPort = newPort.id\n\n      newPort.on('removed', (event: any) => {\n        if (event.connections?.data && event.connections.data.length != 0) {\n          event.connections.data.forEach((connection: any) => {\n            connection.canvas.remove(connection)\n          })\n        }\n      })\n\n      // setTimeout(() => {\n      //   let emitterId: string\n      //   if (this.tabs[this.selectedTab].emitter) {\n      //     emitterId = this.tabs[this.selectedTab].emitter.id\n      //     const newEmitter = this.elementById(emitterId)\n      //     if (newEmitter) {\n      //       this.tabs[this.selectedTab].emitter = newEmitter\n      //     }\n      //   }\n      // })\n      this.checkPortPositioning(this.tabs[this.selectedTab].emitter)\n    } else {\n      nodeShape.add(firstlabel, new draw2d.layout.locator.XYRelPortLocator(25, 35))\n      if (relPortId) nodeShape.userData.relPort = relPortId\n    }\n\n    this.tabs[this.selectedTab].subSystems.ports++\n\n    return subSystemPort\n  }\n\n  elementById(emitterID: string) {\n    let returnValue: any\n    this.tabs.forEach((tab) => {\n      let figures = tab.workspace.getFigures()\n      let figure = figures.data.find((haystack: any) => haystack.id == emitterID)\n      if (figure) {\n        returnValue = figure\n        return returnValue\n      }\n    })\n\n    return returnValue\n  }\n\n  handleLabelChange(event: any, editPortName: boolean = false) {\n    if (!event.parent) {\n      return\n    }\n\n    if (this.tabs[this.selectedTab].emitter && event.parent.userData.relPort) {\n      const ports = this.getElementPorts(this.tabs[this.selectedTab].emitter)\n\n      let port\n      if ((port = ports.find((haystack: any) => haystack.id == event.parent.userData.relPort))) {\n        const children = port\n        if (children) {\n          // if (editPortName) {\n          children.setName(event.text)\n          // }\n\n          const emitterLabel = children.children?.data[0].figure\n          if (emitterLabel) {\n            emitterLabel.setText(event.text)\n          }\n        }\n      }\n    }\n    // Old\n    // // change selected label\n    // const parentPorts = this.getElementPorts(event.parent)\n    // const oldName = parentPorts[0].name\n\n    // // get flag if subsystem or subsystemport was set\n\n    // // change according subSytemPort or subsystem // TODO: not working properly -- ueber den selectedTab kann man doch theoretisch nicht gehen. Was ist wenn man im subtab ist\n    // if (event.canvas !== null && event.canvas !== undefined) {\n    //   const tabIndexName = event.canvas.canvasId\n    //   const tabIndex = this.tabs.findIndex((haystack: any) => haystack.index == tabIndexName)\n    //   const emitterPort = this.getElementPorts(this.tabs[tabIndex].emitter).find(\n    //     (haystack: any) => haystack.name == oldName\n    //   )\n    //   if (emitterPort) {\n    //     emitterPort.setName(event.text)\n    //   }\n    // }\n    // // let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    // // figures = figures.data.filter(\n    // //   (haystack: any) =>\n    // //     !haystack.cssClass.startsWith('SVGFigure') &&\n    // //     !haystack.cssClass.startsWith('draw2d_shape_basic_Label') &&\n    // //     (!haystack.userData || !haystack.userData.type || haystack.userData.type != 'subsystem') &&\n    // //     haystack.width > 10 &&\n    // //     haystack.height > 10\n    // // )\n    // // let figuresIndex = figures.findIndex((haystack: any) => haystack.id == event.parent.id)\n    // // if (this.tabs[this.selectedTab].emitter) {\n    // //   const emitterPorts = this.getElementPorts(this.tabs[this.selectedTab].emitter)\n\n    // //   if (emitterPorts[figuresIndex]) {\n    // //     const children = emitterPorts[figuresIndex]\n    // //     if (children.children.data[0]) {\n    // //       const emitterLabel = children.children.data[0].figure\n    // //       emitterLabel.setText(event.text)\n    // //       if (editPortName) {\n    // //         emitterPorts[figuresIndex].setName(event.text)\n    // //       }\n    // //     }\n    // //   }\n    // // }\n  }\n\n  removeConnectedPort(event: any) {\n    if (this.tabs[this.selectedTab].emitter && event.userData.relPort) {\n      const ports = [\n        ...this.tabs[this.selectedTab].emitter.inputPorts.data,\n        ...this.tabs[this.selectedTab].emitter.outputPorts.data,\n        ...this.tabs[this.selectedTab].emitter.hybridPorts.data,\n      ]\n      let port\n      if ((port = ports.find((haystack: any) => haystack.id == event.userData.relPort))) {\n        console.log(port)\n        const children = port\n        if (children) {\n          children.canvas.remove(children)\n        }\n      }\n    }\n  }\n\n  enableLabelEditing(label: any, onCommit: (label: any) => void = () => {}) {\n    label.setSelectable(false)\n    label.installEditor(\n      new draw2d.ui.LabelEditor({\n        onCommit: onCommit,\n      })\n    )\n  }\n\n  newPortByTemplate(port: any | SCDraw2DNodePort) {\n    let tmpPort = port\n    tmpPort.interfaceDirection = port.userData?.interface_direction\n    if (port.userData == undefined) {\n      tmpPort = {\n        interfaceDirection: port.interface_direction,\n        bgColor: port.type.color,\n        name: port.name,\n        maxFanOut: 1,\n      }\n    }\n\n    switch (tmpPort.interfaceDirection) {\n      case 'OUTPUT':\n        return new draw2d.OutputPort({\n          bgColor: port.bgColor,\n          name: port.name,\n          maxFanOut: port.maxFanOut,\n        })\n\n      case 'INPUT':\n        return new draw2d.InputPort({\n          bgColor: port.bgColor,\n          name: port.name,\n          maxFanOut: port.maxFanOut,\n        })\n\n      default:\n        return new draw2d.HybridPort({\n          bgColor: port.bgColor,\n          name: port.name,\n          maxFanOut: port.maxFanOut,\n        })\n    }\n  }\n\n  subSystemPorts(targetElement: any, selectedElementsIds: string[]) {\n    let selectedElements = this.tabs[this.selectedTab].workspace.getSelection()\n    let connectionCount = 0\n    let currLength = this.tabs.length\n    let currIndex = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == targetElement.id)\n    let newName: number\n    for (let i = 0; i < this.groupHelper.length; i++) {\n      newName = this.tabs.findIndex((haystack: any) => haystack.emitter?.id == this.groupHelper[i].parentId)\n    }\n\n    let selectedNodeElements = selectedElements.all.data.filter(\n      (haystack: any) => haystack.cssClass != 'draw2d_Connection' && haystack.cssClass != 'draw2d_shape_basic_Label'\n    )\n    for (let i = 0; i < selectedNodeElements.length; i++) {\n      for (let l = 0; l < selectedNodeElements[i].getPorts().data.length; l++) {\n        const port = selectedNodeElements[i].getPorts().data[l]\n\n        for (let k = 0; k < port.getConnections().data.length; k++) {\n          const connection = port.getConnections().data[k]\n          if (\n            !(\n              selectedElements.all.data.find((haystack: any) => haystack.id == connection.targetPort.parent.id) &&\n              selectedElements.all.data.find((haystack: any) => haystack.id == connection.sourcePort.parent.id)\n            )\n          ) {\n            //Rework for Port location on Subsystem\n            const newPort = this.newPortByTemplate(port)\n\n            // targetElement.addPort(newPort, new draw2d.layout.locator.InputPortLocator())\n            targetElement.addPort(newPort, new draw2d.layout.locator.Locator())\n            newPort.setUserData({\n              type: port.userData.type,\n              portSvg: port.userData.portSvg,\n              oldTargetPortId: connection.targetPort.id,\n              oldSourcePortId: connection.sourcePort.id,\n            })\n            // old version\n            // var newPort = new draw2d.InputPort({\n            //   bgColor: port.bgColor,\n            //   name: port.name,\n            //   maxFanOut: port.maxFanOut,\n            // })\n            // targetElement.addPort(newPort, new draw2d.layout.locator.InputPortLocator())\n            // newPort.setUserData({\n            //   type: port.userData.type,\n            //   portSvg: port.userData.portSvg,\n            // })\n\n            // targetElement.setPosition(targetElement.x + 1, targetElement.y + 1)\n            // until here\n\n            let mainSubSystem = this.tabs[this.selectedTab].subSystems.subSystems\n            let subSubSystem = this.tabs[newName].subSystems.subSystems + 1\n\n            if (currIndex == -1) {\n              if (this.tabs[this.selectedTab].index == 'main') {\n                newPort.setName(this.tabs[this.selectedTab].index + 'Sub-' + mainSubSystem)\n                this.tabs[this.selectedTab].subSystems.subSystems++\n              } else {\n                newPort.setName(this.tabs[newName].index + 'Sub-' + subSubSystem)\n                this.tabs[newName].subSystems.subSystems++\n              }\n            }\n            var label = new draw2d.shape.basic.Label({ text: newPort.getName() })\n            label.setFontColor('#000000')\n            label.setStroke(0)\n            label.setFontSize(12)\n            label.setUserData({\n              syncPort: newPort,\n            })\n\n            label.on('dblclick', (emitter: any, event: any) => {\n              this.enableLabelEditing(emitter, (label: any) => {\n                emitter.userData.syncPort.setName(label)\n                this.handleSubsystemLabelChange(emitter)\n              })\n            })\n\n            // label.on('change', (event: any) => {\n            //   event.userData.syncPort.setName(event.text)\n            //   this.handleSubsystemLabelChange(event)\n            // })\n\n            var newConnection = new draw2d.Connection({\n              router: new draw2d.layout.connection.InteractiveManhattanConnectionRouter(),\n              stroke: 1,\n              color: '#fb1',\n              radius: 20,\n              outlineColor: '#fb1',\n              source:\n                selectedElementsIds.findIndex((haystack: string) => haystack == connection.sourcePort.parent.id) == -1\n                  ? connection.sourcePort\n                  : connection.targetPort,\n              target: newPort,\n              zOrder: 9999,\n            })\n\n            newConnection.setUserData({\n              syncId: label.id,\n            })\n\n            this.tabs[this.selectedTab].workspace.add(newConnection)\n\n            newPort.add(label, new draw2d.layout.locator.RightLocator())\n\n            // targetElement.setPosition(targetElement.x + 1, targetElement.y + 1)\n            targetElement.setPosition(targetElement.x + 1, targetElement.y + 1)\n            targetElement.setPosition(targetElement.x - 1, targetElement.y - 1)\n\n            connectionCount++\n\n            newPort.on('removed', (event: any) => {\n              if (event.connections?.data && event.connections.data.length != 0) {\n                event.connections.data.forEach((connection: any) => {\n                  connection.canvas.remove(connection)\n                })\n              }\n\n              this.tabs[this.selectedTab].subSystems.ports--\n            })\n          }\n          setTimeout(() => {\n            this.tabs[this.selectedTab].workspace.remove(connection)\n          })\n        }\n      }\n    }\n  }\n\n  handleSubsystemLabelChange(event: any) {\n    // find tab\n    console.log(event)\n    if (event.parent && event.parent.parent && event.parent.parent.id) {\n      const tabIndexName = this.tabs.findIndex(\n        (haystack: any) => haystack.emitter != undefined && haystack.emitter.id == event.parent.parent.id\n      )\n      console.log(tabIndexName)\n      if (tabIndexName >= 0) {\n        const emitterPort = this.getElementPorts(this.tabs[tabIndexName].emitter).find(\n          (haystack: any) => haystack.id == event.userData.syncPort.id\n        )\n        console.log(emitterPort)\n        if (emitterPort) {\n          let figures = this.tabs[tabIndexName].workspace.getFigures()\n          figures = figures.data.filter(\n            (haystack: any) =>\n              !haystack.cssClass.startsWith('SVGFigure') &&\n              !haystack.cssClass.startsWith('draw2d_shape_basic_Label') &&\n              haystack.width > 10 &&\n              haystack.height > 10\n          )\n\n          console.log(figures);\n          \n          figures\n            .filter((figure: any) => figure.children !== undefined && figure.children.data.length > 0)\n            .map((figure: any) => this.getElementPorts(figure.children?.data[0].figure.parent))\n            .flat()\n            .filter((port: any) => port.userData.relPort == emitterPort.id)\n            .forEach((port: any) => port.parent?.children?.data[0].figure.setText(event.text))\n        }\n      }\n    }\n\n    // if (event.parent && event.parent.parent && event.parent.parent.id) {\n    //   let activeTab = this.tabs.find(\n    //     (haystack: SCDraw2DTab) => haystack.emitter && haystack.emitter.id == event.parent.parent.id\n    //   )\n    //   if (activeTab && activeTab.index != this.tabs[this.selectedTab].index) {\n    //     let figures = activeTab.workspace.getFigures()\n    //     figures = figures.data.filter(\n    //       (haystack: any) =>\n    //         !haystack.cssClass.startsWith('SVGFigure') &&\n    //         !haystack.cssClass.startsWith('draw2d_shape_basic_Label') &&\n    //         haystack.width > 10 &&\n    //         haystack.height > 10\n    //     )\n    //     const ports = [...event.parent.parent.inputPorts.data, ...event.parent.parent.hybridPorts.data]\n    //     const portIndex: number = ports.findIndex((haystack) => haystack.id == event.parent.id)\n    //     if (figures[portIndex] && figures[portIndex].children.data[0]) {\n    //       figures[portIndex].children.data[0].figure.setText(event.text)\n    //     }\n    //   }\n    // }\n  }\n\n  checkIfElementExists(id: string): boolean {\n    let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    let exists: boolean\n    for (let i = 0; i < figures.data.length; i++) {\n      const figure = figures.data[i]\n      if (figure.id == id) {\n        exists = true\n      }\n      for (let l = 0; l < figures.data[i].getPorts().data.length; l++) {\n        const port = figures.data[i].getPorts().data[l]\n        if (port.id == id) {\n          exists = true\n        }\n        for (let k = 0; k < port.getConnections().data.length; k++) {\n          let connection = port.getConnections().data[k]\n          if (connection.id == id) {\n            exists = true\n          }\n        }\n      }\n    }\n    return exists\n  }\n\n  deepClone(obj: any, hash = new WeakMap()): any {\n    if (Object(obj) !== obj || obj instanceof Function) return obj\n    if (hash.has(obj)) return hash.get(obj)\n    try {\n      var result = new obj.constructor()\n    } catch (e) {\n      result = Object.create(Object.getPrototypeOf(obj))\n    }\n    if (obj instanceof Map)\n      Array.from(obj, ([key, val]) => result.set(this.deepClone(key, hash), this.deepClone(val, hash)))\n    else if (obj instanceof Set) Array.from(obj, (key) => result.add(this.deepClone(key, hash)))\n    hash.set(obj, result)\n    return Object.assign(result, ...Object.keys(obj).map((key) => ({ [key]: this.deepClone(obj[key], hash) })))\n  }\n\n  deepCopy(obj: any): any {\n    return JSON.parse(JSON.stringify(obj))\n  }\n\n  isConnectionExists(sourcePortId: string, targetPortId: string) {\n    let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    let exists: boolean\n    for (let i = 0; i < figures.data.length; i++) {\n      const figure = figures.data[i]\n      for (let l = 0; l < figures.data[i].getPorts().data.length; l++) {\n        const port = figures.data[i].getPorts().data[l]\n        for (let k = 0; k < port.getConnections().data.length; k++) {\n          let connection = port.getConnections().data[k]\n          if (connection) {\n            var existingSourcePort = connection.sourcePort\n            var existingTargetPort = connection.targetPort\n            if (existingSourcePort.id === sourcePortId && existingTargetPort.id === targetPortId) {\n              exists = true\n            }\n          }\n        }\n      }\n    }\n    return exists\n  }\n\n  hasAlreadyPortElements(): boolean {\n    let figures = this.tabs[this.selectedTab].workspace.getFigures()\n    let exists: boolean = false\n    for (let i = 0; i < figures.data.length; i++) {\n      const figure = figures.data[i]\n      if (figure.userData && figure.userData.type == 'subSystemPort') {\n        exists = true\n      }\n    }\n    return exists\n  }\n}\n\nconst getCircularReplacer = () => {\n  const seen = new WeakSet()\n  return (key: any, value: any) => {\n    if (typeof value === 'object' && value !== null) {\n      if (seen.has(value)) {\n        return\n      }\n      seen.add(value)\n    }\n    return value\n  }\n}\n","<div\n  class=\"sc-draw2d\"\n  [style.--primary-color]=\"\n    this.colorThemes[this.activeColorTheme]\n      ? this.colorThemes[this.activeColorTheme].primary\n      : this.colorThemes['default'].primary\n  \"\n  [style.--background-color]=\"\n    this.colorThemes[this.activeColorTheme]\n      ? this.colorThemes[this.activeColorTheme].background\n      : this.colorThemes['default'].background\n  \"\n  [style.--card-background-color]=\"\n    this.colorThemes[this.activeColorTheme]\n      ? this.colorThemes[this.activeColorTheme].cardBackground\n      : this.colorThemes['default'].cardBackground\n  \"\n  [style.--grid-border-color]=\"\n    this.colorThemes[this.activeColorTheme]\n      ? this.colorThemes[this.activeColorTheme].gridBorder\n      : this.colorThemes['default'].gridBorder\n  \"\n  [style.--text-color]=\"\n    this.colorThemes[this.activeColorTheme]\n      ? this.colorThemes[this.activeColorTheme].text\n      : this.colorThemes['default'].text\n  \"\n>\n  <mat-tab-group\n    color=\"primary\"\n    [disableRipple]=\"true\"\n    [selectedIndex]=\"selectedTab\"\n    (selectedIndexChange)=\"selectedTab = $event\"\n    class=\"l__mat-tabs\"\n    (scroll)=\"handleScroll($event)\"\n  >\n    <mat-tab\n      *ngFor=\"let tab of tabs; let index = index\"\n      [label]=\"tab.name\"\n      bodyClass=\"l__workspace_tab\"\n    >\n      <div\n        class=\"l__workspace\"\n        style=\"width: 100vw !important; height: 100vh !important\"\n        id=\"l__workspace\"\n        (dragover)=\"handleElementDragOver($event)\"\n      >\n        <div class=\"draw2d-node-menu\" *ngIf=\"nodes && !disableNodeMenu\">\n          <div\n            class=\"draw2d-node-element\"\n            [style.height.px]=\"node.size.height > 250 ? 250 : node.size.height\"\n            [style.width.px]=\"node.size.width\"\n            draggable=\"true\"\n            (dragstart)=\"handleElementDragStart($event)\"\n            (dragend)=\"handleElementDragEnd($event, i)\"\n            (drop)=\"handleElementDrop($event)\"\n            *ngFor=\"let node of nodes; let i = index\"\n          >\n            <ng-container *ngFor=\"let port of node.ports\">\n              <ng-container *ngIf=\"port.location.location_type == 'custom'\"\n                ><ng-container\n                  *ngTemplateOutlet=\"customDot; context: { port: port }\"\n                ></ng-container\n              ></ng-container>\n              <ng-container *ngIf=\"port.location.location_type != 'custom'\"\n                ><ng-container\n                  *ngTemplateOutlet=\"definedDot; context: { port: port }\"\n                ></ng-container\n              ></ng-container>\n            </ng-container>\n            <ng-template #definedDot let-port=\"port\">\n              <span\n                class=\"port-dot\"\n                [ngClass]=\"port.location.location_type\"\n                [style.background-color]=\"port.type.color\"\n              ></span>\n              <!-- style=\"--dot-color: #2abb17\" -->\n            </ng-template>\n            <ng-template #customDot let-port=\"port\">\n              <span\n                class=\"port-dot custom\"\n                [style.background-color]=\"port.type.color\"\n                [style.left.px]=\"\n                  node.libViewPos?.offsetWidth +\n                  port.location.position.x * node.libViewPos?.scalingFactor \n                  - 6\n                \"\n                [style.top.px]=\"\n                  node.libViewPos?.offsetHeight +\n                  port.location.position.y * node.libViewPos?.scalingFactor\n                 \n                \"\n              ></span\n              ><!--Reposition-->\n            </ng-template>\n            <div [innerHtml]=\"node.svg | safeHtml\"></div>\n          </div>\n        </div>\n        <div class=\"draw2d-attribute-menu\" [ngClass]=\"{ show: showAttributeMenu }\">\n          <div *ngFor=\"let attribute of currentAttributes; let i = index\">\n            <label [for]=\"'attribute' + i\">{{ attribute.label }}</label>\n            <div class=\"draw2d-attribute-menu-field\">\n              <input\n                [id]=\"'attribute' + i\"\n                [type]=\"attribute.type\"\n                [(ngModel)]=\"attribute.value\"\n              />\n              <div class=\"draw2d-attribute-menu-unit\" *ngIf=\"attribute.unit\">\n                <span>{{ attribute.unit }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n        <button\n          class=\"draw2d-add-port\"\n          (click)=\"addPort(undefined, true)\"\n          *ngIf=\"tab.index != tabs[0].index\"\n        >\n          Port hinzufügen\n        </button>\n        <button\n          class=\"draw2d-close\"\n          (click)=\"removeTab(selectedTab)\"\n          *ngIf=\"tab.index != tabs[0].index\"\n        >\n          Schließen\n        </button>\n        <button class=\"draw2d-combine\" (click)=\"combineElements()\">Kombinieren</button>\n        <button\n          *ngIf=\"tab.index == tabs[0].index\"\n          class=\"draw2d-restore\"\n          (click)=\"loadRestoreFile()\"\n        >\n          Laden\n        </button>\n        <button\n          *ngIf=\"tab.index == tabs[0].index\"\n          class=\"draw2d-save\"\n          (click)=\"saveWorkspace()\"\n        >\n          Speichern\n        </button>\n        <input\n          type=\"file\"\n          class=\"restore-file-upload\"\n          accept=\".json\"\n          multiple=\"false\"\n          (change)=\"handleRestoreFileUpload($event)\"\n          #fileUploadInput\n        />\n        <div class=\"l__workspace-container\">\n          <div\n            [attr.id]=\"tab.index\"\n            #gfxHolder\n            class=\"l__workspace\"\n            (dragover)=\"allowDrop($event)\"\n            (mousemove)=\"onMouseMove($event)\"\n            (mouseleave)=\"onMouseLeave($event)\"\n            (click)=\"handleWorkspaceClick($event)\"\n          ></div>\n        </div>\n      </div>\n      <input type=\"hidden\" id=\"copyData\" style=\"position: absolute; top: -9999px\" />\n      <input type=\"hidden\" id=\"pasteData\" style=\"position: absolute; top: -9999px\" />\n    </mat-tab>\n  </mat-tab-group>\n</div>\n","/*\n * This module imports and re-exports all Angular Material modules for convenience,\n * so only 1 module import is needed in your feature modules.\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\n *\n * To optimize your production builds, you should only import the components used in your app.\n */\n\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { RouterModule } from '@angular/router'\n\n@NgModule({\n  exports: [CommonModule, FormsModule, ReactiveFormsModule, RouterModule],\n})\nexport class BasicModule {}\n","import { NgModule } from '@angular/core'\nimport { MatLegacyTabsModule as MatTabsModule } from '@angular/material/legacy-tabs'\nimport { TranslateModule } from '@ngx-translate/core'\n\nimport { ClipboardModule } from 'ngx-clipboard'\nimport { BasicModule } from '../basic.module'\nimport { SafeHtmlPipe } from '../pipes/safe-html-pipe'\nimport { SCDraw2dComponent } from './sc-draw2d.component'\n\n\n@NgModule({\n  imports: [BasicModule, TranslateModule, MatTabsModule, ClipboardModule],\n  declarations: [SCDraw2dComponent, SafeHtmlPipe],\n  exports: [SCDraw2dComponent],\n  providers: [],\n})\nexport class SCDraw2dModule {}\n","/*\n * Public API Surface of sc-draw2d\n */\n\n//export * from './lib/scmodule.service';\n//export * from './lib/scmodule.component';\nexport * from './sc-draw2d.component'\nexport * from './sc-draw2d.module'\n","/*\n * Public API Surface of sc-draw2d\n */\n\n//export * from './lib/scmodule.service';\n//export * from './lib/scmodule.component';\nexport * from './public-api'\n","import { NgModule } from '@angular/core'\nimport { BasicModule } from './basic.module'\nimport { SCDraw2dModule } from './sc-draw2d/sc-draw2d.module'\n\n@NgModule({\n  imports: [\n    BasicModule,\n    //Modules\n    SCDraw2dModule,\n  ],\n  declarations: [\n    //Components\n    //Pipes\n    //Directives\n  ],\n  exports: [\n    //Modules\n    SCDraw2dModule,\n    //Components\n    //Pipes\n  ],\n  providers: [],\n})\nexport class SCModule {}\n","/*\n * Public API Surface of sc-draw2d\n */\n\nexport * from './lib/sc-draw2d'\nexport * from './lib/sc.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5.SafeHtmlPipe","MatTabsModule"],"mappings":"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"}