{"version":3,"file":"use-resizer.mjs","sources":["../../../../../../../packages/components/simple-table/src/composables/use-resizer.ts"],"sourcesContent":["import { nextTick, onBeforeUnmount, onMounted, watch } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { ColumnType, ResizeOption } from '../simple-table'\n\nexport interface ResizerCellElement extends HTMLTableCellElement {\n  mouseDown: boolean\n  oldX: number\n  oldWidth: number\n}\n\nfunction useResizer(resize: boolean | ResizeOption, cols: Ref<ColumnType[]>, table: Ref<HTMLTableElement>) {\n  const limitation = { min: 30, max: Number.MAX_SAFE_INTEGER, ...(typeof resize === 'boolean' ? {} : resize) }\n  let tTH: ResizerCellElement\n\n  function mousedownHanlder(this: ResizerCellElement, event: MouseEvent) {\n    tTH = this\n    if (event.offsetX > tTH.offsetWidth - 10) {\n      tTH.mouseDown = true\n      tTH.oldX = event.x\n      tTH.oldWidth = tTH.offsetWidth\n    }\n  }\n  function mouseupHanlder(this: ResizerCellElement) {\n    if (!tTH) tTH = this\n    tTH.mouseDown = false\n    tTH.style.cursor = 'default'\n  }\n  function mousemoveHanlder(this: ResizerCellElement, event: MouseEvent) {\n    if (tTH?.mouseDown === true) {\n      tTH.style.cursor = 'col-resize'\n      const newWidth = tTH.oldWidth + (event.x - tTH.oldX)\n      if (newWidth >= limitation.min && newWidth <= limitation.max)\n        tTH.style.width = newWidth + 'px'\n    } else {\n      this.style.cursor = event.offsetX >= this.offsetWidth - 10 ? 'col-resize' : 'default'\n    }\n  }\n\n  const doResizer = (cb: (cell: HTMLTableCellElement) => void) => {\n    for (let i = 0; i < table.value.tHead!.rows.length; i++) {\n      for (let j = 0; j < table.value.tHead!.rows[i].cells.length; j++) {\n        const cell = table.value.tHead!.rows[i].cells[j]\n        cb(cell)\n      }\n    }\n  }\n\n  const addListener = () => {\n    resize && doResizer((cell: HTMLTableCellElement) => {\n      cell.addEventListener('mousedown', mousedownHanlder as any)\n      cell.addEventListener('mouseup', mouseupHanlder)\n      cell.addEventListener('mousemove', mousemoveHanlder as any)\n    })\n  }\n\n  const removeListener = () => {\n    resize && doResizer((cell: HTMLTableCellElement) => {\n      cell.removeEventListener('mousedown', mousedownHanlder as any)\n      cell.removeEventListener('mouseup', mouseupHanlder)\n      cell.removeEventListener('mousemove', mousemoveHanlder as any)\n    })\n  }\n\n  watch(() => cols.value.length, () => {\n    nextTick(() => {\n      removeListener()\n      addListener()\n    })\n  })\n\n  onMounted(() => {\n    addListener()\n  })\n\n  onBeforeUnmount(() => {\n    removeListener()\n  })\n}\n\nexport { useResizer }\n\n\n"],"names":[],"mappings":"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"}