{"version":3,"file":"collect-line.mjs","names":[],"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"],"mappings":";;AAKA,SAAgB,YAEd,QACA,QACA;CACA,MAAM,OAAO,OAAO,WAAW;AAC/B,MAAK,KAAK,OAAO,gBAAgB,CAAC;CAElC,MAAM,OAAO;EAAE;EAAQ;EAAM;EAAQ,QADtB,KAAK,SAAS,KAAK,OAAO,SAAS;EACL;AAI7C,QAAO;EAAE,QAHM,cAAc;GAAE,GAAG;GAAM,MAAM;GAAK,CAAC;EAGnC,QAFF,cAAc;GAAE,GAAG;GAAM,MAAM;GAAK,CAAC;EAE3B;;AAU3B,MAAM,YAAoC;CACxC,CAAC,QAAQ,MAAM;CACf,CAAC,SAAS,MAAM;CAChB,CAAC,SAAS,SAAS;CACnB,CAAC,QAAQ,SAAS;CAClB,CAAC,UAAU,SAAS;CACrB;AACD,SAAS,cAAc,OAA6B;CAClD,MAAM,EAAE,QAAQ,MAAM,QAAQ,QAAQ,SAAS;CAC/C,MAAM,MAAmB,EAAE;CAC3B,MAAM,MAA4C,EAAE;CACpD,IAAI,MAAM;AACV,MAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,IAAI,gBAAgB,MAAM,QAAQ,KAAK;AAC7C,MAAI,KAAK,EAAE;AACX,MAAI,MAAM,EAAE,IAAK,OAAM,EAAE;;AAE3B,KAAI,MAAM,OAAQ,QAAO;CACzB,IAAI,IAAI;AACR,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,MAAI,IAAI,GAAG,OAAO,IAAK;AACvB,OAAK,MAAM,QAAQ,IAAI,GAAG,IACxB,KAAI,KAAK;GAAE,QAAQ,KAAK;GAAI,QAAQ;GAAM,CAAC;AAG7C,MAAI,EAAG;AACP,MAAI;EACJ,MAAM,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK,GAAG;AAExC,OAAK,SAAS,SAAS;AACrB,QAAK,SAAS;IACd;AACF,SAAO,MAAM,KAAK,IAAI,GAAG,UAAU,GAAG;AACtC,SAAO,WAAW;;AAGpB,QAAO"}