{"version":3,"file":"collect-line.mjs","sources":["../../../extensions/aligning_guidelines/util/collect-line.ts"],"sourcesContent":["import type { FabricObject, Point, TOriginX, TOriginY } from 'fabric';\nimport type { AligningGuidelines } from '..';\nimport type { LineProps } from '../typedefs';\nimport { getDistanceList } from './basic';\n\nexport function collectLine(\n  this: AligningGuidelines,\n  target: FabricObject,\n  points: Point[],\n) {\n  const list = target.getCoords();\n  list.push(target.getCenterPoint());\n  const margin = this.margin / this.canvas.getZoom();\n  const opts = { target, list, points, margin };\n  const vLines = collectPoints({ ...opts, type: 'x' });\n  const hLines = collectPoints({ ...opts, type: 'y' });\n\n  return { vLines, hLines };\n}\n\ntype CollectItemLineProps = {\n  target: FabricObject;\n  list: Point[];\n  points: Point[];\n  margin: number;\n  type: 'x' | 'y';\n};\nconst originArr: [TOriginX, TOriginY][] = [\n  ['left', 'top'],\n  ['right', 'top'],\n  ['right', 'bottom'],\n  ['left', 'bottom'],\n  ['center', 'center'],\n];\nfunction collectPoints(props: CollectItemLineProps) {\n  const { target, list, points, margin, type } = props;\n  const res: LineProps[] = [];\n  const arr: ReturnType<typeof getDistanceList>[] = [];\n  let min = Infinity;\n  for (const item of list) {\n    const o = getDistanceList(item, points, type);\n    arr.push(o);\n    if (min > o.dis) min = o.dis;\n  }\n  if (min > margin) return res;\n  let b = false;\n  for (let i = 0; i < list.length; i++) {\n    if (arr[i].dis != min) continue;\n    for (const item of arr[i].arr) {\n      res.push({ origin: list[i], target: item });\n    }\n\n    if (b) continue;\n    b = true;\n    const d = arr[i].arr[0][type] - list[i][type];\n    // It will change the original data, and the next time we collect y, use the modified data.\n    list.forEach((item) => {\n      item[type] += d;\n    });\n    target.setXY(list[i], ...originArr[i]);\n    target.setCoords();\n  }\n\n  return res;\n}\n"],"names":["collectLine","target","points","list","getCoords","push","getCenterPoint","margin","canvas","getZoom","opts","vLines","collectPoints","type","hLines","originArr","props","res","arr","min","Infinity","item","o","getDistanceList","dis","b","i","length","origin","d","forEach","setXY","setCoords"],"mappings":"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"}