{"version":3,"file":"events-helper.mjs","sources":["../../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { h, inject, ref } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { addClass, hasClass, removeClass } from '@hd-front-end/utils'\nimport {\n  createTablePopper,\n  getCell,\n  getColumnByCell,\n  removePopper,\n} from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { TableBodyProps } from './defaults'\nimport type { TableOverflowTooltipOptions } from '../util'\nimport type { DefaultRow } from '../table/defaults'\n\nfunction isGreaterThan(a: number, b: number, epsilon = 0.03) {\n  return a - b > epsilon\n}\n\nfunction useEvents<T extends DefaultRow>(props: Partial<TableBodyProps<T>>) {\n  const parent = inject(TABLE_INJECTION_KEY)\n  const tooltipContent = ref('')\n  const tooltipTrigger = ref(h('div'))\n  const handleEvent = (event: Event, row: T, name: string) => {\n    const table = parent\n    const cell = getCell(event)\n    let column: TableColumnCtx<T> | null = null\n    const namespace = table?.vnode.el?.dataset.prefix\n    if (cell) {\n      column = getColumnByCell(\n        {\n          columns: props.store?.states.columns.value ?? [],\n        },\n        cell,\n        namespace\n      )\n      if (column) {\n        table?.emit(`cell-${name}`, row, column, cell, event)\n      }\n    }\n    table?.emit(`row-${name}`, row, column, event)\n  }\n  const handleDoubleClick = (event: Event, row: T) => {\n    handleEvent(event, row, 'dblclick')\n  }\n  const handleClick = (event: Event, row: T) => {\n    props.store?.commit('setCurrentRow', row)\n    handleEvent(event, row, 'click')\n  }\n  const handleContextMenu = (event: Event, row: T) => {\n    handleEvent(event, row, 'contextmenu')\n  }\n  const handleMouseEnter = debounce((index: number) => {\n    props.store?.commit('setHoverRow', index)\n  }, 30)\n  const handleMouseLeave = debounce(() => {\n    props.store?.commit('setHoverRow', null)\n  }, 30)\n  const getPadding = (el: HTMLElement) => {\n    const style = window.getComputedStyle(el, null)\n    const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0\n    const paddingRight = Number.parseInt(style.paddingRight, 10) || 0\n    const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n    const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n    return {\n      left: paddingLeft,\n      right: paddingRight,\n      top: paddingTop,\n      bottom: paddingBottom,\n    }\n  }\n\n  const toggleRowClassByCell = (\n    rowSpan: number,\n    event: MouseEvent,\n    toggle: (el: Element, cls: string) => void\n  ) => {\n    let node: Node | null | undefined = (event?.target as Element | null)\n      ?.parentNode\n    while (rowSpan > 1) {\n      node = node?.nextSibling\n      if (!node || node.nodeName !== 'TR') break\n      toggle(node as Element, 'hover-row hover-fixed-row')\n      rowSpan--\n    }\n  }\n\n  const handleCellMouseEnter = (\n    event: MouseEvent,\n    row: T,\n    tooltipOptions: TableOverflowTooltipOptions\n  ) => {\n    if (!parent) return\n    const table = parent\n    const cell = getCell(event)\n    const namespace = table?.vnode.el?.dataset.prefix\n    let column: TableColumnCtx<T> | null = null\n    if (cell) {\n      column = getColumnByCell(\n        {\n          columns: props.store?.states.columns.value ?? [],\n        },\n        cell,\n        namespace\n      )\n      if (!column) {\n        return\n      }\n      if (cell.rowSpan > 1) {\n        toggleRowClassByCell(cell.rowSpan, event, addClass)\n      }\n      const hoverState = (table.hoverState = {\n        cell,\n        column: column as any,\n        row,\n      })\n      table?.emit(\n        'cell-mouse-enter',\n        hoverState.row,\n        hoverState.column,\n        hoverState.cell,\n        event\n      )\n    }\n\n    if (!tooltipOptions) {\n      if (removePopper?.trigger === cell) {\n        removePopper?.()\n      }\n      return\n    }\n\n    // 判断是否text-overflow, 如果是就显示tooltip\n    const cellChild = (event.target as HTMLElement).querySelector(\n      '.cell'\n    ) as HTMLElement\n    if (\n      !(\n        hasClass(cellChild, `${namespace}-tooltip`) &&\n        cellChild.childNodes.length\n      )\n    ) {\n      return\n    }\n    // use range width instead of scrollWidth to determine whether the text is overflowing\n    // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n    const range = document.createRange()\n    range.setStart(cellChild, 0)\n    range.setEnd(cellChild, cellChild.childNodes.length)\n    /** detail: https://github.com/element-plus/element-plus/issues/10790\n     *  What went wrong?\n     *  UI > Browser > Zoom, In Blink/WebKit, getBoundingClientRect() sometimes returns inexact values, probably due to lost precision during internal calculations. In the example above:\n     *    - Expected: 188\n     *    - Actual: 188.00000762939453\n     */\n    const { width: rangeWidth, height: rangeHeight } =\n      range.getBoundingClientRect()\n    const { width: cellChildWidth, height: cellChildHeight } =\n      cellChild.getBoundingClientRect()\n\n    const { top, left, right, bottom } = getPadding(cellChild)\n    const horizontalPadding = left + right\n    const verticalPadding = top + bottom\n    if (\n      isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) ||\n      isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) ||\n      // When using a high-resolution screen, it is possible that a returns cellChild.scrollWidth value of 1921 and\n      // cellChildWidth returns a value of 1920.994140625. #16856 #16673\n      isGreaterThan(cellChild.scrollWidth, cellChildWidth)\n    ) {\n      createTablePopper(\n        tooltipOptions,\n        (cell?.innerText || cell?.textContent) ?? '',\n        row,\n        column,\n        cell,\n        table\n      )\n    } else if (removePopper?.trigger === cell) {\n      removePopper?.()\n    }\n  }\n  const handleCellMouseLeave = (event: MouseEvent) => {\n    const cell = getCell(event)\n    if (!cell) return\n    if (cell.rowSpan > 1) {\n      toggleRowClassByCell(cell.rowSpan, event, removeClass)\n    }\n    const oldHoverState = parent?.hoverState\n    parent?.emit(\n      'cell-mouse-leave',\n      oldHoverState?.row,\n      oldHoverState?.column,\n      oldHoverState?.cell,\n      event\n    )\n  }\n\n  return {\n    handleDoubleClick,\n    handleClick,\n    handleContextMenu,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleCellMouseEnter,\n    handleCellMouseLeave,\n    tooltipContent,\n    tooltipTrigger,\n  }\n}\n\nexport default useEvents\n"],"names":[],"mappings":"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"}