{"version":3,"file":"XConnector.mjs","sources":["../../../../src/shapes/canvasx/XConnector.ts"],"sourcesContent":["import { Path } from '../Path';\nimport { sendPointToPlane, TSimpleParsedCommand } from '../../util';\nimport { Point, XY } from '../../Point';\nimport { classRegistry } from '../../ClassRegistry';\nimport { iMatrix } from '../../constants';\nimport { createPathControls } from '../../controls/pathControl';\nimport { XCanvas } from '../../canvas/canvasx/bx-canvas';\nimport { Transform } from '../../EventTypeDefs';\n\nimport { EntityKeys, WidgetConnectorInterface } from './type/widget.entity.connector';\nimport { WidgetType } from './type/widget.type';\n\nconst getPath = (\n  fromPoint: XY,\n  toPoint: XY,\n  control1: XY,\n  control2: XY,\n  pathType: 'curvePath' | 'straightPath' = 'curvePath'\n) => {\n  if (pathType === 'curvePath') {\n    return `M ${fromPoint.x} ${fromPoint.y} C ${control1.x}, ${control1.y}, ${control2.x} ${control2.y}, ${toPoint.x} ${toPoint.y}`;\n  } else {\n    return `M ${fromPoint.x} ${fromPoint.y} L ${toPoint.x} ${toPoint.y}`;\n  }\n};\n\nclass XConnector extends Path implements WidgetConnectorInterface {\n  static type: WidgetType = 'XConnector';\n  static objType: WidgetType = 'XConnector';\n  style: any;\n  declare fromObjectId: string;\n  declare toObjectId: string;\n  declare pathType: 'curvePath' | 'straightPath';\n  declare pathArrowTip: 'none' | 'start' | 'end' | 'both';\n  declare fromPoint: XY;\n  declare toPoint: XY;\n  declare control1: XY;\n  declare control2: XY;\n\n  /**\n   * Contains the path to draw the arrow tip start\n   */\n  declare pathStart: TSimpleParsedCommand[];\n\n  /**\n   * Contains the path to draw the arrow tip end\n   */\n  declare pathEnd: TSimpleParsedCommand[];\n\n\n  constructor(\n    fromPoint: XY,\n    toPoint: XY,\n    control1: XY,\n    control2: XY,\n    options: any = {}\n  ) {\n    const path = getPath(fromPoint, toPoint, control1, control2, options.pathType);\n\n\n\n\n    super(path, options);\n    // Object.assign(this, options);\n\n    //default values\n    this.perPixelTargetFind = true;\n    this.cornerColor = 'white';\n    this.cornerStyle = 'circle';\n    this.type = 'XConnector';\n    this.objType = 'XConnector';\n    this.transparentCorners = false;\n    this.cornerStrokeColor = 'gray';\n    this.hasBorders = false;\n    this.objectCaching = false;\n\n\n    this.pathType = options.pathType || 'curvePath';\n    this.pathArrowTip = options.pathArrowTip || 'both';\n    this.fromObjectId = options.fromObjectId;\n    this.toObjectId = options.toObjectId;\n    this.fromPoint = fromPoint;\n    this.toPoint = toPoint;\n    this.control1 = control1;\n    this.control2 = control2;\n    this.createdByName = options.createdByName;\n    this.createdBy = options.createdBy;\n    this.createdAt = options.createdAt;\n    this.boardId = options.boardId;\n    this.style = options.style;\n    this.fill = options.fill || 'transparent';\n    this.stroke = options.stroke || '#000000';\n    this.createdAt = options.createdAt;\n    this.updatedBy = options.updatedBy;\n    this.updatedByName = options.updatedByName;\n    this.version = options.version;\n    this.zIndex = options.zIndex;\n\n    // Object.assign(this, options);\n    this._setMovementLock();\n    this.calcStartEndPath();\n    this.controls = {\n      ...createPathControls(this, {\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        cursorStyle: 'crosshair',\n        pointStyle: {\n          controlFill: 'white',\n          controlStroke: 'gray',\n        },\n        controlPointStyle: {\n          controlFill: 'white',\n          connectionDashArray: [5, 5],\n          controlStroke: 'gray',\n        },\n      }),\n    };\n    this.on('modifyPath', function (this: XConnector, evtOpt) {\n      this.calcStartEndPath();\n      const { commandIndex, pointIndex } = evtOpt;\n      // commandIndex === 0 is always start,\n      // all the commandIndex === 1 are control points apart the 5\n      if (commandIndex === 1 && pointIndex !== 5) {\n        return;\n      }\n      this.dragActionEventHandler(evtOpt.commandIndex, evtOpt.pointIndex);\n    });\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  getFromPoint() {\n    const command = this.path[0];\n    return new Point(command[1]!, command[2]!);\n  }\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  getToPoint() {\n    const lastCommand = this.path[this.path.length - 1];\n    return lastCommand[0] === 'L'\n      ? new Point(lastCommand[1]!, lastCommand[2]!)\n      : new Point(lastCommand[5]!, lastCommand[6]!);\n  }\n\n  /**\n   * calculate the drawing commands for the connector tips\n   */\n  calcStartEndPath() {\n    this.pathStart = [];\n    this.pathEnd = [];\n\n    const { pathType, pathArrowTip } = this;\n    const firstCommand = this.path[0];\n    const lastCommand = this.path[this.path.length - 1];\n\n    const fromPoint = new Point(firstCommand[1]!, firstCommand[2]!);\n    const toPoint =\n      lastCommand[0] === 'L'\n        ? new Point(lastCommand[1]!, lastCommand[2]!)\n        : new Point(lastCommand[5]!, lastCommand[6]!);\n\n    /* Calculate Path START */\n    if (pathArrowTip === 'start' || pathArrowTip === 'both') {\n      const startArrowSize = 20 + this.strokeWidth; // Adjust the size of the start arrow tip\n\n      const startAngle =\n        pathType === 'straightPath'\n          ? Math.atan2(fromPoint.y - toPoint.y, fromPoint.x - toPoint.x) +\n          Math.PI\n          : Math.atan2(\n            lastCommand[2]! - fromPoint.y,\n            lastCommand[1]! - fromPoint.x\n          );\n\n      const startArrow1X =\n        fromPoint.x + startArrowSize * Math.cos(startAngle + Math.PI / 6);\n      const startArrow1Y =\n        fromPoint.y + startArrowSize * Math.sin(startAngle + Math.PI / 6);\n      const startArrow2X =\n        fromPoint.x + startArrowSize * Math.cos(startAngle - Math.PI / 6);\n      const startArrow2Y =\n        fromPoint.y + startArrowSize * Math.sin(startAngle - Math.PI / 6);\n\n      this.pathStart = [\n        ['M', startArrow1X, startArrow1Y],\n        ['L', fromPoint.x, fromPoint.y],\n        ['L', startArrow2X, startArrow2Y],\n      ];\n    }\n    /* Calculate Path End */\n    if (pathArrowTip === 'end' || pathArrowTip === 'both') {\n      const endArrowSize = 20 + this.strokeWidth; // Adjust the size of the end arrow tip\n      const endAngle =\n        pathType === 'straightPath'\n          ? Math.atan2(toPoint.y - fromPoint.y, toPoint.x - fromPoint.x)\n          : Math.atan2(\n            toPoint.y - lastCommand[4]!,\n            toPoint.x - lastCommand[3]!\n          );\n\n      const endArrow1X =\n        toPoint.x - endArrowSize * Math.cos(endAngle - Math.PI / 6);\n      const endArrow1Y =\n        toPoint.y - endArrowSize * Math.sin(endAngle - Math.PI / 6);\n      const endArrow2X =\n        toPoint.x - endArrowSize * Math.cos(endAngle + Math.PI / 6);\n      const endArrow2Y =\n        toPoint.y - endArrowSize * Math.sin(endAngle + Math.PI / 6);\n\n      this.pathEnd = [\n        ['M', endArrow1X, endArrow1Y],\n        ['L', toPoint.x, toPoint.y],\n        ['L', endArrow2X, endArrow2Y],\n      ];\n    }\n  }\n\n  calculateControlPoint(controlPointType: 'from' | 'to', point: any) {\n    let controlPoint;\n    if (controlPointType === 'from') {\n      //@ts-ignore\n      const fromObject = this.canvas?.findById(this.fromObjectId);\n      if (fromObject && fromObject.calculateControlPoint) {\n        controlPoint = fromObject.calculateControlPoint(point);\n      }\n    }\n\n    if (controlPointType === 'to') {\n      //@ts-ignore\n      const toObject = this.canvas?.findById(this.toObjectId);\n      if (toObject && toObject.calculateControlPoint) {\n        controlPoint = toObject.calculateControlPoint(point);\n      }\n    }\n\n    if (controlPoint) {\n      return controlPoint;\n    } else {\n      return point;\n    }\n  }\n\n  /**\n   * Given the points in scene coordinates, updates the path\n   * This function is called by other objects that are moving or changing properties\n   */\n  update({ fromPoint, toPoint, control1, control2, style }: any = {}) {\n    const finalCommand = this.path[this.path.length - 1];\n\n    if (!fromPoint) {\n      fromPoint = TransformPointFromPathToCanvas(\n        this,\n        new Point(this.path[0][1]!, this.path[0][2]!)\n      );\n      this.fromPoint = fromPoint;\n    }\n\n    if (!toPoint) {\n      toPoint = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? new Point(finalCommand[1]!, finalCommand[2]!)\n          : new Point(finalCommand[5]!, finalCommand[6]!)\n      );\n      finalCommand[0] === 'L' ? 1 : 5;\n      this.toPoint = toPoint;\n    }\n    let controlPoint1: Point, controlPoint2: Point;\n    if (finalCommand[0] === 'L') {\n      controlPoint1 = this.calculateControlPoint('from', fromPoint);\n      controlPoint2 = this.calculateControlPoint('to', toPoint);\n    }\n    if (!control1) {\n      control1 = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? controlPoint1!\n          : new Point(finalCommand[1]!, finalCommand[2]!)\n      );\n      this.control1 = control1;\n    }\n\n    if (!control2) {\n      control2 = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? controlPoint2!\n          : new Point(finalCommand[3]!, finalCommand[4]!)\n      );\n      this.control2 = control2;\n    }\n\n    if (style) {\n      this.style = style;\n    }\n\n    const path = getPath(fromPoint, toPoint, control1, control2, this.pathType);\n\n    const { path: newPath } = new Path(path);\n    this.path = newPath;\n    this.setBoundingBox(true);\n\n    this.calcStartEndPath();\n    this.dirty = true;\n  }\n\n  _mouseDownControl(\n    eventData: any,\n    transform: Transform,\n    x: number,\n    y: number\n  ) {\n    const target = transform.target;\n    target.objectCaching = false;\n\n    this.mouseDownHandler(eventData, transform, x, y);\n  }\n\n  mouseDownHandler(eventData: any, transform: Transform, x: number, y: number) {\n    //reserve for subclass\n  }\n\n  mouseUpHandler(eventData: any, transform: Transform, x: number, y: number) {\n    //reserve for subclass\n  }\n  /**\n   * Compared to Path, it will render the official Path + the arrow tips.\n   * @param ctx\n   */\n  _renderPathCommands(ctx: CanvasRenderingContext2D) {\n    const path = this.path;\n    this.path = [...this.pathStart, ...this.path, ...this.pathEnd];\n    super._renderPathCommands(ctx);\n    this.path = path;\n  }\n\n  _mouseUpControl(eventData: any, transform: Transform, x: number, y: number) {\n    const { target } = transform;\n    if (!target.canvas) {\n      return;\n    }\n    (target.canvas as XCanvas).dockingWidget = null;\n    target.dirty = true;\n    target.setCoords();\n    transform.target.canvas?.requestRenderAll();\n    this.mouseUpHandler(eventData, transform, x, y);\n    this._setMovementLock();\n  }\n\n  _setMovementLock() {\n    if (this.fromObjectId || this.toObjectId) {\n      this.lockMovementX = true;\n      this.lockMovementY = true;\n    } else {\n      this.lockMovementX = false;\n      this.lockMovementY = false;\n    }\n  }\n\n  getControlPointOnCanvas(obj: any, controlName: string) {\n    const controlInfo = obj.controls[controlName];\n    const x = controlInfo.x * obj.width;\n    const y = controlInfo.y * obj.height;\n    const point = new Point(x, y);\n\n    const transformedPoint = obj.transformPointToCanvas(point);\n\n    return transformedPoint;\n  }\n\n  /**\n   * Responds to the path points being moved calculating the docking.\n   * @param commandIndex The command index in the path we are dragging\n   * @param pointIndex  the index of the X coordinate of the point we are moving in .path[commandIndex]\n   * @returns\n   */\n  dragActionEventHandler(commandIndex: number, pointIndex: number) {\n    const target = this;\n    // const relevantPoint = getLocalPoint(transform, 'center', 'top', x, y);\n    //@ts-ignore\n    const currentDockingObject = target.canvas?.dockingWidget;\n\n    const property = commandIndex === 0 ? 'fromObjectId' : 'toObjectId';\n    const existingConnectionId = target[property];\n    let connectedObject: any = null;\n    if (existingConnectionId) {\n      connectedObject = (target.canvas as XCanvas).findById(\n        existingConnectionId\n      ) as any;\n    }\n\n    // Andrea, followup: currentDockingObject.hoveringControl relies on a mousemove event that gets added\n    // and removed when we start the connector drag.\n    // this logic should be resolved inside the connector.\n    const connectorType = commandIndex === 0 ? 'from' : 'to';\n    if (\n      currentDockingObject &&\n      currentDockingObject.controls[\n      currentDockingObject.canvas.hoveringControl\n      ] &&\n      currentDockingObject.calculateControlPoint\n    ) {\n      const hoverPoint = this.getControlPointOnCanvas(\n        currentDockingObject,\n        currentDockingObject.canvas.hoveringControl\n      );\n\n      const targetX = hoverPoint.x;\n      const targetY = hoverPoint.y;\n\n      if (existingConnectionId) {\n        if (connectedObject) {\n          connectedObject.connectors = connectedObject.connectors?.filter(\n            (connector: any) =>\n              !(\n                connector.connectorId === target.id &&\n                connector.connectorType === connectorType\n              )\n          );\n          if (connectedObject.calculateControlPoint) {\n            const controlPoint =\n              connectedObject.calculateControlPoint(hoverPoint);\n            if (commandIndex === 0) {\n              this.update({\n                fromPoint: { x: targetX, y: targetY },\n                control1: controlPoint,\n              });\n            } else {\n              this.update({\n                toPoint: { x: targetX, y: targetY },\n                control2: controlPoint,\n              });\n            }\n          }\n        }\n      }\n\n      target[commandIndex === 0 ? 'fromObjectId' : 'toObjectId'] =\n        currentDockingObject.id;\n\n      if (!currentDockingObject.connectors) {\n        currentDockingObject.connectors = [];\n      }\n\n      currentDockingObject.connectors.push({\n        connectorId: target.id,\n        connectorType: connectorType,\n        point: currentDockingObject.transformPointFromCanvas({\n          x: targetX,\n          y: targetY,\n        }),\n      });\n    }\n\n    if (!currentDockingObject && connectedObject) {\n      //if it is not attached to object, remove the connector from the existing connected object and clear the from/to object id\n      target[property] = '';\n      connectedObject.connectors = connectedObject.connectors?.filter(\n        (connector: any) =>\n          !(\n            connector.connectorId === target.id &&\n            connector.connectorType === connectorType\n          )\n      );\n    }\n  }\n}\n\nexport { XConnector };\n\nexport const TransformPointFromPathToCanvas = (\n  object: XConnector,\n  point: Point\n) =>\n  sendPointToPlane(\n    point.subtract(object.pathOffset),\n    object.calcOwnMatrix(),\n    iMatrix\n  );\n\nclassRegistry.setClass(XConnector);\n"],"names":["getPath","fromPoint","toPoint","control1","control2","pathType","arguments","length","undefined","concat","x","y","XConnector","Path","constructor","options","path","_defineProperty","perPixelTargetFind","cornerColor","cornerStyle","type","objType","transparentCorners","cornerStrokeColor","hasBorders","objectCaching","pathArrowTip","fromObjectId","toObjectId","createdByName","createdBy","createdAt","boardId","style","fill","stroke","updatedBy","updatedByName","version","zIndex","_setMovementLock","calcStartEndPath","controls","_objectSpread","createPathControls","mouseDownHandler","_mouseDownControl","bind","mouseUpHandler","_mouseUpControl","cursorStyle","pointStyle","controlFill","controlStroke","controlPointStyle","connectionDashArray","on","evtOpt","commandIndex","pointIndex","dragActionEventHandler","getFromPoint","command","Point","getObject","entityKeys","EntityKeys","result","forEach","key","getToPoint","lastCommand","pathStart","pathEnd","firstCommand","startArrowSize","strokeWidth","startAngle","Math","atan2","PI","startArrow1X","cos","startArrow1Y","sin","startArrow2X","startArrow2Y","endArrowSize","endAngle","endArrow1X","endArrow1Y","endArrow2X","endArrow2Y","calculateControlPoint","controlPointType","point","controlPoint","_this$canvas","fromObject","canvas","findById","_this$canvas2","toObject","update","finalCommand","TransformPointFromPathToCanvas","controlPoint1","controlPoint2","newPath","setBoundingBox","dirty","eventData","transform","target","_renderPathCommands","ctx","_transform$target$can","dockingWidget","setCoords","requestRenderAll","lockMovementX","lockMovementY","getControlPointOnCanvas","obj","controlName","controlInfo","width","height","transformedPoint","transformPointToCanvas","_target$canvas","currentDockingObject","property","existingConnectionId","connectedObject","connectorType","hoveringControl","hoverPoint","targetX","targetY","_connectedObject$conn","connectors","filter","connector","connectorId","id","push","transformPointFromCanvas","_connectedObject$conn2","object","sendPointToPlane","subtract","pathOffset","calcOwnMatrix","iMatrix","classRegistry","setClass"],"mappings":"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"}