{"version":3,"file":"data-table-header.vue2.mjs","sources":["../../../../../packages/components/data-table/src/data-table-header.vue"],"sourcesContent":["<template>\n  <div\n    :class=\"[ns.e('header-wrap'), ns.is('resizing', resizing)]\"\n    ref=\"headerRef\"\n  >\n    <table :class=\"ns.e('header')\">\n      <!-- 组 -->\n      <colgroup :class=\"ns.e('header-group')\">\n        <template v-for=\"item in leafColumns\">\n          <col\n            v-for=\"column of item\"\n            :key=\"column.key\"\n            :style=\"getCellStyle(column)\"\n          />\n        </template>\n      </colgroup>\n\n      <!-- 分组的表头, 因此会有多行 -->\n      <thead>\n        <tr v-for=\"(row, rowIndex) of headerRows\">\n          <template v-for=\"(columns, key) in getRowColumns(row)\">\n            <template v-if=\"key === 'left'\">\n              <LeftCell\n                v-for=\"(column, colIndex) of columns\"\n                :header=\"column\"\n                :row-index=\"rowIndex\"\n                :key=\"column.data.key\"\n                :class=\"ns.is('last', colIndex + 1 === columns.length)\"\n              />\n            </template>\n\n            <template v-else-if=\"key === 'right'\">\n              <RightCell\n                v-for=\"(column, colIndex) of columns\"\n                :header=\"column\"\n                :row-index=\"rowIndex\"\n                :key=\"column.data.key\"\n                :class=\"ns.is('first', colIndex === 0)\"\n              />\n            </template>\n\n            <template v-else>\n              <CenterCell\n                v-for=\"column of columns\"\n                :header=\"column\"\n                :key=\"column.data.key\"\n                :row-index=\"rowIndex\"\n              />\n            </template>\n          </template>\n        </tr>\n      </thead>\n    </table>\n  </div>\n\n  <!-- 对齐调节器 -->\n  <DataTableAlignAdjuster ref=\"adjusterRef\">\n    <template #default=\"scoped\">\n      <slot name=\"column-conf\" v-bind=\"scoped\" />\n    </template>\n  </DataTableAlignAdjuster>\n</template>\n\n<!-- 表格头部, 此处做列相关的操作, 比如存放列信息, 排序 -->\n<script lang=\"ts\" setup>\nimport DataTableAlignAdjuster from './data-table-align-adjuster.vue'\nimport { throttle } from 'lodash'\nimport {\n  computed,\n  inject,\n  onBeforeUnmount,\n  provide,\n  shallowRef,\n  watch\n} from 'vue'\nimport { dataHeaderToken, dataTableToken } from './token'\nimport type { TableHeader } from './utils'\nimport { LeftCell, RightCell, CenterCell } from './data-table-header-cell'\nimport { useDomRefInject } from './hooks/use-dom-ref'\n\nconst emit = defineEmits({\n  'column-resize': (position: string, visible: boolean) => true\n})\n\nconst { headerRef } = useDomRefInject()\n\nconst {\n  headerRows,\n  scrollState,\n  leafColumns,\n  ns,\n  getCellStyle,\n  computePosition\n} = inject(dataTableToken)!\n\nconst rowLength = computed(() => headerRows.value.length)\n\n/**\n * 合并行\n * @param header\n * @param rowIndex\n */\nconst getCellRowSpan = (header: TableHeader, rowIndex: number) => {\n  // 没有子元素进行合并\n  return header.children?.length ? undefined : rowLength.value - rowIndex\n}\n\n/** 是否resize中 */\nconst resizing = shallowRef(false)\n\nlet mouseStartX = 0\nlet currentColIndex = -1\nlet currentNodeOriginWidth = 0\nlet currentNode: HTMLElement | null = null\n\nlet containerLeft = 0\n\n/** 重置为初始状态 */\nconst resetResizeState = () => {\n  mouseStartX = 0\n  currentColIndex = -1\n  currentNodeOriginWidth = 0\n  currentNode = null\n}\n\n// 找到\nconst handleResizeMousedown = (e: MouseEvent, header: TableHeader) => {\n  resizing.value = true\n  mouseStartX = e.pageX\n\n  // 表头容器相对于屏幕的左偏移量(resizeline的left = mouseX - header.left)\n  const { left } = headerRef.value!.getBoundingClientRect()\n  containerLeft = left\n\n  emit('column-resize', e.pageX - containerLeft + 'px', resizing.value)\n\n  currentColIndex = header.data.index!\n  currentNode = (e.target as HTMLSpanElement).closest('th')\n  currentNodeOriginWidth = currentNode!.offsetWidth\n\n  document.addEventListener('mousemove', resizeMousemoveHandler)\n  document.addEventListener('mouseup', resizeMouseupHandler)\n}\n\nconst columns = computed(() => {\n  return Object.values(leafColumns.value).flat()\n})\n\n/** 鼠标拖动 */\nconst resizeMousemoveHandler = throttle((e: MouseEvent) => {\n  emit('column-resize', e.pageX - containerLeft + 'px', resizing.value)\n}, 0)\n\nconst resizeMouseupHandler = (e: MouseEvent) => {\n  resizing.value = false\n  emit('column-resize', e.pageX - containerLeft + 'px', resizing.value)\n  const targetWidth = currentNodeOriginWidth + e.pageX - mouseStartX\n  document.removeEventListener('mousemove', resizeMousemoveHandler)\n  document.removeEventListener('mouseup', resizeMouseupHandler)\n\n  columns.value[currentColIndex].width = targetWidth\n  columns.value[currentColIndex].minWidth = targetWidth\n\n  computePosition()\n  resetResizeState()\n}\n\nconst getRowColumns = (columns: TableHeader[]) => {\n  const left: TableHeader[] = []\n  const center: TableHeader[] = []\n  const right: TableHeader[] = []\n  columns.forEach(column => {\n    if (column.data.fixed === 'left') {\n      left.push(column)\n    } else if (column.data.fixed === 'right') {\n      right.push(column)\n    } else {\n      center.push(column)\n    }\n  })\n  return {\n    left,\n    center,\n    right\n  }\n}\n\nwatch(\n  () => scrollState.scrollLeft,\n  left => {\n    headerRef.value!.scrollLeft = left\n  }\n)\n\nconst adjusterRef = shallowRef<InstanceType<typeof DataTableAlignAdjuster>>()\n\nconst windowClickHandler = (e: MouseEvent) => {\n  const target = e.target as HTMLElement\n  const trigger = target.closest('.adjuster-trigger')\n  const adjuster = target.closest('.el-data-table__align-adjuster')\n  if (trigger || adjuster) return\n  adjusterRef.value?.close()\n}\nwindow.addEventListener('click', windowClickHandler)\n\nonBeforeUnmount(() => {\n  window.removeEventListener('click', windowClickHandler)\n})\n\nprovide(dataHeaderToken, {\n  getCellRowSpan,\n  cellClass: ns.e('header-cell'),\n  leftCellClass: ns.em('header-cell', 'left'),\n  centerCellClass: ns.em('header-cell', 'center'),\n  rightCellClass: ns.em('header-cell', 'right'),\n  resizeClass: ns.e('column-resize'),\n  handleResizeMousedown,\n  adjusterRef\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n  inheritAttrs: false\n}\n</script>\n"],"names":["columns"],"mappings":"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"}