{"version":3,"file":"useColumnResize.mjs","sources":["../../../../components/table/hooks/useColumnResize.ts"],"sourcesContent":["/**\n * important info: only resize happened, th width calculating allowed\n * 验证场景：多级表头调整叶子结点列宽、吸顶表头调整列宽、列数量发生变化、表格未超出、表格已超出\n * - 固定列，调整列宽，需要更新固定位置；右侧固定列，调整列宽，需特殊处理\n * - 当表格内容没有超出时，即没有出现横向滚动条时，此时认为表格有足够的列宽呈现内容，修改宽度为相邻宽度调整\n * - 当表格内容超出，出现横向滚动条时，会自动调整当前列宽和表格总列宽，不影响相邻列宽\n */\nimport { ref, Ref, reactive, onMounted } from 'vue';\nimport { isNumber } from 'lodash-es';\nimport { BaseTableCol, TableRowData, TdBaseTableProps } from '../type';\nimport { on, off } from '@tdesign/shared-utils';\n\nconst DEFAULT_MIN_WIDTH = 80;\nconst DEFAULT_MAX_WIDTH = 600;\n// 当离右边框的距离不超过 8 时，显示拖拽图标\nconst distance = 8;\n\nexport default function useColumnResize(params: {\n  isWidthOverflow: Ref<boolean>;\n  tableContentRef: Ref<HTMLDivElement>;\n  showColumnShadow: {\n    left: boolean;\n    right: boolean;\n  };\n  getThWidthList: (type?: 'default' | 'calculate') => { [colKeys: string]: number };\n  updateThWidthList: (data: { [colKey: string]: number }) => void;\n  setTableElmWidth: (width: number) => void;\n  updateTableAfterColumnResize: () => void;\n  onColumnResizeChange: TdBaseTableProps['onColumnResizeChange'];\n}) {\n  const {\n    isWidthOverflow,\n    tableContentRef,\n    showColumnShadow,\n    getThWidthList,\n    updateThWidthList,\n    setTableElmWidth,\n    updateTableAfterColumnResize,\n    onColumnResizeChange,\n  } = params;\n  const resizeLineRef = ref<HTMLDivElement>();\n  const effectColMap = ref<{ [colKey: string]: any }>({});\n  const leafColumns = ref([]);\n  let originalSelectStart: (this: GlobalEventHandlers, ev: Event) => any;\n  let originalDragStart: (this: GlobalEventHandlers, ev: Event) => any;\n\n  onMounted(() => {\n    const hasDocument = typeof document !== 'undefined';\n    originalSelectStart = hasDocument ? document.onselectstart : null;\n    originalDragStart = hasDocument ? document.ondragstart : null;\n  });\n\n  const getSiblingResizableCol = (nodes: BaseTableCol<TableRowData>[], index: number, type: 'prev' | 'next') => {\n    let i = index;\n    while (nodes[i] && nodes[i].resizable === false) {\n      if (type === 'next') {\n        i += 1;\n      } else {\n        i -= 1;\n      }\n    }\n    return nodes[i];\n  };\n\n  // 递归查找列宽度变化后，受影响的相关列。前后非禁用调整列宽的列\n  const setEffectColMap = (nodes: BaseTableCol<TableRowData>[], parent: BaseTableCol<TableRowData> | null) => {\n    if (!nodes) return;\n    leafColumns.value = nodes;\n    nodes.forEach((n, index) => {\n      const prevNode = getSiblingResizableCol(nodes, index - 1, 'prev');\n      const nextNode = getSiblingResizableCol(nodes, index + 1, 'next');\n      const parentPrevCol = parent ? effectColMap.value[parent.colKey].prev : nextNode;\n      const parentNextCol = parent ? effectColMap.value[parent.colKey].next : prevNode;\n      const prev = index === 0 ? parentPrevCol : prevNode;\n      const next = index === nodes.length - 1 ? parentNextCol : nextNode;\n      effectColMap.value[n.colKey] = {\n        prev,\n        next,\n        current: {\n          prevSibling: getSiblingResizableCol(nodes, index - 1, 'prev'),\n          nextSibling: getSiblingResizableCol(nodes, index + 1, 'next'),\n        },\n      };\n      setEffectColMap(n.children, n);\n    });\n  };\n\n  const resizeLineParams = {\n    isDragging: false,\n    draggingCol: null as HTMLElement,\n    draggingStart: 0,\n    // 列宽调整类型：影响右侧列宽度、影响左侧列宽度、或者仅影响自身\n    effectCol: 'next' as 'next' | 'prev',\n  };\n\n  const resizeLineStyle = reactive({\n    display: 'none',\n    height: '10px',\n    left: '10px',\n    bottom: '0',\n  });\n\n  // 当前列是否配置右侧固定并且处于固定激活状态\n  const isColRightFixActive = (col: BaseTableCol<TableRowData>) => col.fixed === 'right' && showColumnShadow.right;\n\n  // 频繁事件，仅用于计算是否在表头显示拖拽鼠标形态\n  const onColumnMouseover = (e: MouseEvent, col: BaseTableCol<TableRowData>) => {\n    // calculate mouse cursor before drag start\n    if (!resizeLineRef.value || resizeLineParams.isDragging || !e.target) return;\n    const target = (e.target as HTMLElement).closest('th');\n    // 判断是否为叶子阶段，仅叶子结点允许拖拽\n    const colKey = target.getAttribute('data-colkey');\n    if (!leafColumns.value.find((t) => t.colKey === colKey)) return;\n    const targetBoundRect = target.getBoundingClientRect();\n    const thRightCursor = targetBoundRect.right - e.pageX <= distance;\n    const thLeftCursor = e.pageX - targetBoundRect.left <= distance;\n    const isFixedToRight = isColRightFixActive(col);\n    if (thRightCursor || isFixedToRight) {\n      const colResizable = col.resizable ?? true;\n      if (colResizable) {\n        target.style.cursor = thRightCursor || (isFixedToRight && thLeftCursor) ? 'col-resize' : '';\n        const isCurrent = (thRightCursor && !isFixedToRight) || (isFixedToRight && thLeftCursor);\n        resizeLineParams.draggingCol = isCurrent ? target : (target.nextElementSibling as HTMLElement);\n        resizeLineParams.effectCol = 'next';\n        return;\n      }\n    } else if (thLeftCursor) {\n      const prevEl = target.previousElementSibling;\n      if (prevEl) {\n        const effectPrevCol = effectColMap.value[col.colKey]?.prev;\n        const colResizable = effectPrevCol?.resizable ?? true;\n        if (colResizable) {\n          target.style.cursor = 'col-resize';\n          resizeLineParams.draggingCol = prevEl as HTMLElement;\n          resizeLineParams.effectCol = 'prev';\n          return;\n        }\n      }\n    }\n    // 重置记录值\n    target.style.cursor = '';\n    resizeLineParams.draggingCol = null;\n    resizeLineParams.effectCol = null;\n  };\n\n  const getMinMaxColWidth = (targetCol: BaseTableCol<TableRowData>) => {\n    const propMinWidth = isNumber(targetCol.minWidth) ? targetCol.minWidth : parseInt(targetCol.minWidth || '0', 10);\n    return {\n      minColWidth: Math.max(targetCol.resize?.minWidth || DEFAULT_MIN_WIDTH, propMinWidth),\n      maxColWidth: targetCol.resize?.maxWidth || DEFAULT_MAX_WIDTH,\n    };\n  };\n\n  const getNormalResizeInfo = (\n    col: BaseTableCol,\n    effectPrevCol: BaseTableCol,\n    targetBoundRect: DOMRect,\n    tableBoundRect: DOMRect,\n  ) => {\n    const resizeLinePos = targetBoundRect.right - tableBoundRect.left;\n    const colLeft = targetBoundRect.left - tableBoundRect.left;\n    const targetCol = resizeLineParams.effectCol === 'next' ? col : effectPrevCol;\n    const { minColWidth, maxColWidth } = getMinMaxColWidth(targetCol);\n    return {\n      resizeLinePos,\n      minResizeLineLeft: colLeft + minColWidth,\n      maxResizeLineLeft: colLeft + maxColWidth,\n    };\n  };\n\n  const getFixedToRightResizeInfo = (\n    target: HTMLElement,\n    col: BaseTableCol,\n    effectPrevCol: BaseTableCol,\n    targetBoundRect: DOMRect,\n    tableBoundRect: DOMRect,\n  ) => {\n    const resizeLinePos = targetBoundRect.left - tableBoundRect.left;\n    const targetCol = target.dataset.colkey === col.colKey ? col : effectPrevCol;\n    const colLeft = targetBoundRect.left - tableBoundRect.left;\n    const { minColWidth, maxColWidth } = getMinMaxColWidth(targetCol);\n    return {\n      resizeLinePos,\n      minResizeLineLeft: colLeft + (targetBoundRect.width - maxColWidth),\n      maxResizeLineLeft: colLeft + (targetBoundRect.width - minColWidth),\n    };\n  };\n\n  const getFixedToLeftResizeInfo = (targetBoundRect: DOMRect, tableBoundRect: DOMRect) => {\n    const resizeLinePos = targetBoundRect.left - tableBoundRect.left;\n    const colLeft = targetBoundRect.left - tableBoundRect.left;\n    return {\n      resizeLinePos,\n      minResizeLineLeft: colLeft,\n      maxResizeLineLeft: colLeft,\n    };\n  };\n\n  const getTotalTableWidth = (thWidthList: { [key: string]: number }): number => {\n    let tableWidth = 0;\n    leafColumns.value.forEach((col) => {\n      tableWidth += thWidthList[col.colKey];\n    });\n    return tableWidth;\n  };\n  const getSiblingColCanResizable = (\n    newThWidthList: { [key: string]: number },\n    effectNextCol: BaseTableCol,\n    distance: number,\n    index: number,\n  ) => {\n    let isWidthAbnormal = true;\n    if (effectNextCol) {\n      const { minColWidth, maxColWidth } = getMinMaxColWidth(effectNextCol);\n      const targetNextColWidth = newThWidthList[effectNextCol.colKey] + distance;\n      isWidthAbnormal = targetNextColWidth < minColWidth || targetNextColWidth > maxColWidth;\n    }\n    return !(isWidthAbnormal || isWidthOverflow.value || index === leafColumns.value.length - 1);\n  };\n  const getOtherResizeInfo = (\n    col: BaseTableCol<TableRowData>,\n    effectPrevCol: BaseTableCol,\n    targetBoundRect: DOMRect,\n    tableBoundRect: DOMRect,\n  ) =>\n    effectPrevCol\n      ? getNormalResizeInfo(col, effectPrevCol, targetBoundRect, tableBoundRect)\n      : getFixedToLeftResizeInfo(targetBoundRect, tableBoundRect);\n\n  // 调整表格列宽\n  const onColumnMousedown = (e: MouseEvent, col: BaseTableCol<TableRowData>, index: number) => {\n    if (!resizeLineParams.draggingCol) return;\n    const target = resizeLineParams.draggingCol;\n    const targetBoundRect = target.getBoundingClientRect();\n    const tableBoundRect = tableContentRef.value?.getBoundingClientRect();\n    const effectNextCol = effectColMap.value[col.colKey]?.next;\n    const effectPrevCol = effectColMap.value[col.colKey]?.prev;\n    const { resizeLinePos, minResizeLineLeft, maxResizeLineLeft } = isColRightFixActive(col)\n      ? getFixedToRightResizeInfo(target, col, effectNextCol, targetBoundRect, tableBoundRect)\n      : getOtherResizeInfo(col, effectNextCol, targetBoundRect, tableBoundRect);\n\n    // 开始拖拽，记录下鼠标起始位置\n    resizeLineParams.isDragging = true;\n    resizeLineParams.draggingStart = e.x;\n\n    // 初始化 resizeLine 标记线\n    if (resizeLineRef?.value) {\n      resizeLineStyle.display = 'block';\n      resizeLineStyle.height = `${tableBoundRect.bottom - targetBoundRect.top}px`;\n      resizeLineStyle.left = `${resizeLinePos}px`;\n      const parent = tableContentRef.value.parentElement.getBoundingClientRect();\n      resizeLineStyle.bottom = `${parent.bottom - tableBoundRect.bottom}px`;\n    }\n\n    // 结束拖拽，更新列宽。拖拽时鼠标可能会超出 table 范围，需要给 document 绑定拖拽相关事件；\n    const onDragEnd = () => {\n      if (!resizeLineParams.isDragging) return;\n      const moveDistance = resizeLinePos - parseFloat(resizeLineStyle.left) || 0;\n      /**\n       * 计算列宽\n       *  - 若表格宽度已经超出，存在横向滚动，则直接改变当前列宽，也意味着改变表格总宽度\n       *  - 操作边框右侧，改变当前列和上一列；若上一列禁用宽度调整，则改变上一列的上一列，依次往前寻找\n       *  - 操作边框左侧，改变当前列和下一列；若下一列禁用宽度调整，则改变下一列的下一列，依次往后寻找\n       */\n      const thWidthList = getThWidthList('calculate');\n      const currentCol = effectColMap.value[col.colKey]?.current;\n      if (!currentCol) return;\n      const currentSibling = resizeLineParams.effectCol === 'next' ? currentCol.nextSibling : currentCol.prevSibling;\n      // 多行表头，列宽为最后一层的宽度，即叶子结点宽度\n      const newThWidthList = { ...thWidthList };\n      // 当前列不允许修改宽度，就调整相邻列的宽度\n      const tmpCurrentCol = col.resizable !== false ? col : currentSibling;\n      // 是否允许调整后一列的列宽：列宽未超出时，满足后一列设置的最大最小值时且并非是最后一列（最后一列的右侧拉伸会认为是表格整体宽度调整）\n      const rightCol = resizeLineParams.effectCol === 'next' ? currentCol.nextSibling : col;\n      const canResizeSiblingColWidth = getSiblingColCanResizable(newThWidthList, rightCol, moveDistance, index);\n\n      if (resizeLineParams.effectCol === 'next') {\n        // 右侧激活态的固定列，需特殊调整\n        if (isColRightFixActive(col)) {\n          // 如果不相同，则表示改变相临的右侧列宽\n          if (target.dataset.colkey !== col.colKey) {\n            newThWidthList[effectNextCol.colKey] += moveDistance;\n          } else {\n            newThWidthList[tmpCurrentCol.colKey] += moveDistance;\n          }\n        } else {\n          // 非右侧激活态的固定列\n          newThWidthList[tmpCurrentCol.colKey] -= moveDistance;\n          if (canResizeSiblingColWidth) {\n            newThWidthList[effectNextCol.colKey] += moveDistance;\n          }\n        }\n      } else if (resizeLineParams.effectCol === 'prev') {\n        if (canResizeSiblingColWidth) {\n          newThWidthList[tmpCurrentCol.colKey] += moveDistance;\n        }\n        effectPrevCol && (newThWidthList[effectPrevCol.colKey] -= moveDistance);\n      }\n      updateThWidthList(newThWidthList);\n      const tableWidth = getTotalTableWidth(newThWidthList);\n      setTableElmWidth(Math.round(tableWidth));\n      updateTableAfterColumnResize();\n\n      // 恢复设置\n      resizeLineParams.isDragging = false;\n      resizeLineParams.draggingCol = null;\n      resizeLineParams.effectCol = null;\n      target.style.cursor = '';\n      resizeLineStyle.display = 'none';\n      resizeLineStyle.left = '0';\n      off(document, 'mouseup', onDragEnd);\n      off(document, 'mousemove', onDragOver);\n      document.onselectstart = originalSelectStart;\n      document.ondragstart = originalDragStart;\n      onColumnResizeChange?.({ columnsWidth: newThWidthList });\n    };\n\n    // 注意前后两列最小和最大宽度限制\n    const onDragOver = (e: MouseEvent) => {\n      if (resizeLineParams.isDragging) {\n        const left = resizeLinePos + e.x - resizeLineParams.draggingStart;\n        resizeLineStyle.left = `${Math.min(Math.max(left, minResizeLineLeft), maxResizeLineLeft)}px`;\n      }\n    };\n\n    on(document, 'mouseup', onDragEnd);\n    on(document, 'mousemove', onDragOver);\n\n    // 禁用鼠标的选中文字和拖放\n    document.onselectstart = () => false;\n    document.ondragstart = () => false;\n  };\n\n  return {\n    resizeLineRef,\n    resizeLineStyle,\n    onColumnMouseover,\n    onColumnMousedown,\n    setEffectColMap,\n  };\n}\n"],"names":["DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","distance","useColumnResize","params","isWidthOverflow","tableContentRef","showColumnShadow","getThWidthList","updateThWidthList","setTableElmWidth","updateTableAfterColumnResize","onColumnResizeChange","resizeLineRef","ref","effectColMap","leafColumns","originalSelectStart","originalDragStart","onMounted","hasDocument","document","onselectstart","ondragstart","getSiblingResizableCol","nodes","index","type","i","resizable","setEffectColMap","parent","value","forEach","n","prevNode","nextNode","parentPrevCol","colKey","prev","parentNextCol","next","length","current","prevSibling","nextSibling","children","resizeLineParams","isDragging","draggingCol","draggingStart","effectCol","resizeLineStyle","reactive","display","height","left","bottom","isColRightFixActive","col","fixed","right","onColumnMouseover","e","target","closest","getAttribute","find","t","targetBoundRect","getBoundingClientRect","thRightCursor","pageX","thLeftCursor","isFixedToRight","_col$resizable","colResizable","style","cursor","isCurrent","nextElementSibling","prevEl","previousElementSibling","_effectColMap$value$c","_effectPrevCol$resiza","effectPrevCol","getMinMaxColWidth","targetCol","_targetCol$resize","_targetCol$resize2","propMinWidth","isNumber","minWidth","parseInt","minColWidth","Math","max","resize","maxColWidth","maxWidth","getNormalResizeInfo","tableBoundRect","resizeLinePos","colLeft","_getMinMaxColWidth","minResizeLineLeft","maxResizeLineLeft","getFixedToRightResizeInfo","dataset","colkey","_getMinMaxColWidth2","width","getFixedToLeftResizeInfo","getTotalTableWidth","thWidthList","tableWidth","getSiblingColCanResizable","newThWidthList","effectNextCol","isWidthAbnormal","_getMinMaxColWidth3","targetNextColWidth","getOtherResizeInfo","onColumnMousedown","_tableContentRef$valu","_effectColMap$value$c2","_effectColMap$value$c3","_ref","x","concat","top","parentElement","onDragEnd","_effectColMap$value$c4","moveDistance","parseFloat","currentCol","currentSibling","_objectSpread","tmpCurrentCol","rightCol","canResizeSiblingColWidth","round","off","onDragOver","columnsWidth","min","on"],"mappings":"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"}