{"version":3,"file":"index.mjs","sources":["../../extensions/aligning_guidelines/index.ts"],"sourcesContent":["import {\n  type BasicTransformEvent,\n  type Canvas,\n  type FabricObject,\n  type TPointerEvent,\n  type Point,\n  util,\n} from 'fabric';\nimport {\n  collectHorizontalPoint,\n  collectVerticalPoint,\n} from './util/collect-point';\nimport {\n  drawHorizontalLine,\n  drawLine,\n  drawPointList,\n  drawVerticalLine,\n  drawX,\n} from './util/draw';\nimport { collectLine } from './util/collect-line';\nimport type { AligningLineConfig, OriginMap } from './typedefs';\nimport { getObjectsByTarget } from './util/get-objects-by-target';\nimport { getContraryMap, getPointMap } from './util/basic';\n\ntype TransformEvent = BasicTransformEvent<TPointerEvent> & {\n  target: FabricObject;\n};\n\nexport class AligningGuidelines {\n  canvas: Canvas;\n  horizontalLines = new Set<string>();\n  verticalLines = new Set<string>();\n  cacheMap = new Map<string, Point[]>();\n  /**\n   * When we drag to resize using center points like mt, ml, mb, and mr,\n   * we do not need to draw line segments; we only need to draw the target points.\n   */\n  onlyDrawPoint = false;\n  /** Alignment method is required when customizing. */\n  contraryOriginMap: OriginMap = {\n    tl: ['right', 'bottom'],\n    tr: ['left', 'bottom'],\n    br: ['left', 'top'],\n    bl: ['right', 'top'],\n    mt: ['center', 'bottom'],\n    mr: ['left', 'center'],\n    mb: ['center', 'top'],\n    ml: ['right', 'center'],\n  };\n  xSize = 2.4;\n  lineDash: number[] | undefined;\n  /** At what distance from the shape does alignment begin? */\n  margin = 4;\n  /** Aligning line dimensions */\n  width = 1;\n  /** Aligning line color */\n  color = 'rgba(255,0,0,0.9)';\n  /** Close Vertical line, default false. */\n  closeVLine = false;\n  /** Close horizontal line, default false. */\n  closeHLine = false;\n\n  constructor(canvas: Canvas, options: Partial<AligningLineConfig> = {}) {\n    this.canvas = canvas;\n    Object.assign(this, options);\n\n    this.mouseUp = this.mouseUp.bind(this);\n    this.scalingOrResizing = this.scalingOrResizing.bind(this);\n    this.moving = this.moving.bind(this);\n    this.beforeRender = this.beforeRender.bind(this);\n    this.afterRender = this.afterRender.bind(this);\n\n    this.initBehavior();\n  }\n  initBehavior() {\n    this.canvas.on('mouse:up', this.mouseUp);\n    this.canvas.on('object:resizing', this.scalingOrResizing);\n    this.canvas.on('object:scaling', this.scalingOrResizing);\n    this.canvas.on('object:moving', this.moving);\n    this.canvas.on('before:render', this.beforeRender);\n    this.canvas.on('after:render', this.afterRender);\n  }\n  /** Returns shapes that can draw aligning lines, default returns all shapes on the canvas excluding groups. */\n  getObjectsByTarget(target: FabricObject) {\n    return getObjectsByTarget(target);\n  }\n  /** When the user customizes the controller, this property is set to enable or disable automatic alignment through point scaling/resizing. */\n  getPointMap(target: FabricObject) {\n    return getPointMap(target);\n  }\n  /** When the user customizes the controller, this property is used to enable or disable alignment positioning through points. */\n  getContraryMap(target: FabricObject) {\n    return getContraryMap(target);\n  }\n  /** Users can customize. */\n  getCaCheMapValue(object: FabricObject) {\n    const cacheKey = [\n      object.calcTransformMatrix().toString(),\n      object.width,\n      object.height,\n    ].join();\n    const cacheValue = this.cacheMap.get(cacheKey);\n    if (cacheValue) return cacheValue;\n    const value = object.getCoords();\n    value.push(object.getCenterPoint());\n    this.cacheMap.set(cacheKey, value);\n    return value;\n  }\n  drawLine(origin: Point, target: Point) {\n    drawLine.call(this, origin, target);\n  }\n  drawX(point: Point, dir: number) {\n    drawX.call(this, point, dir);\n  }\n  mouseUp() {\n    this.verticalLines.clear();\n    this.horizontalLines.clear();\n    this.cacheMap.clear();\n    this.canvas.requestRenderAll();\n  }\n\n  scalingOrResizing(e: TransformEvent) {\n    const target = e.target;\n    // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n    target.setCoords();\n    // The value of action can be scaleX, scaleY, scale, resize, etc.\n    // If it does not start with \"scale,\" it is considered a modification of size.\n    const isScale = String(e.transform.action).startsWith('scale');\n    this.verticalLines.clear();\n    this.horizontalLines.clear();\n\n    const objects = this.getObjectsByTarget(target);\n    // When the shape is flipped, the tl obtained through getCoords is actually tr,\n    // and tl is actually tr. We need to make correction adjustments.\n    // tr <-> tl、 bl <-> br、  mb <-> mt、 ml <-> mr\n    let corner = e.transform.corner;\n    if (target.flipX) {\n      if (corner.includes('l')) corner = corner.replace('l', 'r');\n      else if (corner.includes('r')) corner = corner.replace('r', 'l');\n    }\n    if (target.flipY) {\n      if (corner.includes('t')) corner = corner.replace('t', 'b');\n      else if (corner.includes('b')) corner = corner.replace('b', 't');\n    }\n\n    // Obtain the coordinates of the current operation point through the value of corner.\n    // users can be allowed to customize and pass in custom corners.\n    const pointMap = this.getPointMap(target);\n    if (!(corner in pointMap)) return;\n    this.onlyDrawPoint = corner.includes('m');\n    if (this.onlyDrawPoint) {\n      const angle = target.getTotalAngle();\n      // When the shape is rotated, it is meaningless to draw points using the center point.\n      if (angle % 90 != 0) return;\n    }\n    // If manipulating tl, then when the shape changes size, it should be positioned by br,\n    // and the same applies to others.\n    // users can be allowed to customize and pass in custom corners.\n    const contraryMap = this.getContraryMap(target);\n    const point = pointMap[corner];\n    let diagonalPoint = contraryMap[corner];\n    // When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center.\n    const isCenter =\n      e.transform.original.originX == 'center' &&\n      e.transform.original.originY == 'center';\n    if (isCenter) {\n      const p = target.group\n        ? point.transform(\n            util.invertTransform(target.group.calcTransformMatrix()),\n          )\n        : point;\n      diagonalPoint = diagonalPoint.add(p).scalarDivide(2);\n    }\n    const uniformIsToggled = e.e[this.canvas.uniScaleKey!];\n    let isUniform =\n      (this.canvas.uniformScaling && !uniformIsToggled) ||\n      (!this.canvas.uniformScaling && uniformIsToggled);\n    // When controlling through the center point,\n    // if isUniform is true, it actually changes the skew, so it is meaningless.\n    if (this.onlyDrawPoint) isUniform = false;\n\n    const list: Point[] = [];\n    for (const object of objects) {\n      const d = this.getCaCheMapValue(object);\n      list.push(...d);\n    }\n\n    const props = {\n      target,\n      point,\n      diagonalPoint,\n      corner,\n      list,\n      isScale,\n      isUniform,\n      isCenter,\n    };\n\n    // Obtain horizontal and vertical reference lines.\n    const noNeedToCollectV =\n      this.onlyDrawPoint && (corner.includes('t') || corner.includes('b'));\n    const noNeedToCollectH =\n      this.onlyDrawPoint && (corner.includes('l') || corner.includes('r'));\n    const vList = noNeedToCollectV\n      ? []\n      : collectVerticalPoint.call(this, props);\n    const hList = noNeedToCollectH\n      ? []\n      : collectHorizontalPoint.call(this, props);\n    vList.forEach((o) => {\n      // Objects cannot be deduplicated; convert them to strings for deduplication.\n      this.verticalLines.add(JSON.stringify(o));\n    });\n    hList.forEach((o) => {\n      // Objects cannot be deduplicated; convert them to strings for deduplication.\n      this.horizontalLines.add(JSON.stringify(o));\n    });\n  }\n  moving(e: TransformEvent) {\n    const target = e.target;\n    // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n    target.setCoords();\n    this.onlyDrawPoint = false;\n    this.verticalLines.clear();\n    this.horizontalLines.clear();\n\n    // Find the shapes associated with the current graphic to draw reference lines for it.\n    const objects = this.getObjectsByTarget(target);\n    const points: Point[] = [];\n    // Collect all the points to draw reference lines.\n    for (const object of objects) points.push(...this.getCaCheMapValue(object));\n\n    // Obtain horizontal and vertical reference lines.\n    const { vLines, hLines } = collectLine.call(this, target, points);\n    vLines.forEach((o) => {\n      // Objects cannot be deduplicated; convert them to strings for deduplication.\n      this.verticalLines.add(JSON.stringify(o));\n    });\n    hLines.forEach((o) => {\n      // Objects cannot be deduplicated; convert them to strings for deduplication.\n      this.horizontalLines.add(JSON.stringify(o));\n    });\n  }\n  beforeRender() {\n    this.canvas.clearContext(this.canvas.contextTop);\n  }\n  afterRender() {\n    if (this.onlyDrawPoint) {\n      drawPointList.call(this);\n    } else {\n      drawVerticalLine.call(this);\n      drawHorizontalLine.call(this);\n    }\n  }\n\n  dispose() {\n    this.canvas.off('mouse:up', this.mouseUp);\n    this.canvas.off('object:resizing', this.scalingOrResizing);\n    this.canvas.off('object:scaling', this.scalingOrResizing);\n    this.canvas.off('object:moving', this.moving);\n    this.canvas.off('before:render', this.beforeRender);\n    this.canvas.off('after:render', this.afterRender);\n  }\n}\n"],"names":["AligningGuidelines","constructor","canvas","options","arguments","length","undefined","_defineProperty","Set","Map","tl","tr","br","bl","mt","mr","mb","ml","Object","assign","mouseUp","bind","scalingOrResizing","moving","beforeRender","afterRender","initBehavior","on","getObjectsByTarget","target","getPointMap","getContraryMap","getCaCheMapValue","object","cacheKey","calcTransformMatrix","toString","width","height","join","cacheValue","cacheMap","get","value","getCoords","push","getCenterPoint","set","drawLine","origin","call","drawX","point","dir","verticalLines","clear","horizontalLines","requestRenderAll","e","setCoords","isScale","String","transform","action","startsWith","objects","corner","flipX","includes","replace","flipY","pointMap","onlyDrawPoint","angle","getTotalAngle","contraryMap","diagonalPoint","isCenter","original","originX","originY","p","group","util","invertTransform","add","scalarDivide","uniformIsToggled","uniScaleKey","isUniform","uniformScaling","list","d","props","noNeedToCollectV","noNeedToCollectH","vList","collectVerticalPoint","hList","collectHorizontalPoint","forEach","o","JSON","stringify","points","vLines","hLines","collectLine","clearContext","contextTop","drawPointList","drawVerticalLine","drawHorizontalLine","dispose","off"],"mappings":"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"}