{"version":3,"file":"events-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { getCurrentInstance, ref, h } from 'vue'\nimport debounce from 'lodash/debounce'\nimport { getStyle, hasClass } from '@element-plus/utils/dom'\nimport { createTablePopper, getCell, getColumnByCell } from '../util'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { Table } from '../table/defaults'\nimport type { TableBodyProps } from './defaults'\n\nfunction useEvents<T>(props: Partial<TableBodyProps<T>>) {\n  const instance = getCurrentInstance()\n  const parent = instance.parent as Table<T>\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>\n    if (cell) {\n      column = getColumnByCell(\n        {\n          columns: props.store.states.columns.value,\n        },\n        cell\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(function (index: number) {\n    props.store.commit('setHoverRow', index)\n  }, 30)\n  const handleMouseLeave = debounce(function () {\n    props.store.commit('setHoverRow', null)\n  }, 30)\n  const handleCellMouseEnter = (\n    event: MouseEvent,\n    row: T & { tooltipEffect: string }\n  ) => {\n    const table = parent\n    const cell = getCell(event)\n\n    if (cell) {\n      const column = getColumnByCell(\n        {\n          columns: props.store.states.columns.value,\n        },\n        cell\n      )\n      const hoverState = (table.hoverState = { cell, column, row })\n      table.emit(\n        'cell-mouse-enter',\n        hoverState.row,\n        hoverState.column,\n        hoverState.cell,\n        event\n      )\n    }\n\n    // 判断是否text-overflow, 如果是就显示tooltip\n    const cellChild = (event.target as HTMLElement).querySelector(\n      '.cell'\n    ) as HTMLElement\n    if (!(hasClass(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {\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    const rangeWidth = range.getBoundingClientRect().width\n    const padding =\n      (parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0) +\n      (parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0)\n    if (\n      rangeWidth + padding > cellChild.offsetWidth ||\n      cellChild.scrollWidth > cellChild.offsetWidth\n    ) {\n      createTablePopper(\n        cell,\n        cell.innerText || cell.textContent,\n        {\n          placement: 'top',\n          strategy: 'fixed',\n        },\n        row.tooltipEffect\n      )\n    }\n  }\n  const handleCellMouseLeave = (event) => {\n    const cell = getCell(event)\n    if (!cell) return\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":";;;;;AASA,mBAAsB,OAAmC;AACvD,QAAM,WAAW;AACjB,QAAM,SAAS,SAAS;AACxB,QAAM,iBAAiB,IAAI;AAC3B,QAAM,iBAAiB,IAAI,EAAE;AAC7B,QAAM,cAAc,CAAC,OAAc,KAAQ,SAAiB;AAC1D,UAAM,QAAQ;AACd,UAAM,OAAO,QAAQ;AACrB,QAAI;AACJ,QAAI,MAAM;AACR,eAAS,gBACP;AAAA,QACE,SAAS,MAAM,MAAM,OAAO,QAAQ;AAAA,SAEtC;AAEF,UAAI,QAAQ;AACV,cAAM,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM;AAAA;AAAA;AAGlD,UAAM,KAAK,OAAO,QAAQ,KAAK,QAAQ;AAAA;AAEzC,QAAM,oBAAoB,CAAC,OAAc,QAAW;AAClD,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,cAAc,CAAC,OAAc,QAAW;AAC5C,UAAM,MAAM,OAAO,iBAAiB;AACpC,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,oBAAoB,CAAC,OAAc,QAAW;AAClD,gBAAY,OAAO,KAAK;AAAA;AAE1B,QAAM,mBAAmB,SAAS,SAAU,OAAe;AACzD,UAAM,MAAM,OAAO,eAAe;AAAA,KACjC;AACH,QAAM,mBAAmB,SAAS,WAAY;AAC5C,UAAM,MAAM,OAAO,eAAe;AAAA,KACjC;AACH,QAAM,uBAAuB,CAC3B,OACA,QACG;AACH,UAAM,QAAQ;AACd,UAAM,OAAO,QAAQ;AAErB,QAAI,MAAM;AACR,YAAM,SAAS,gBACb;AAAA,QACE,SAAS,MAAM,MAAM,OAAO,QAAQ;AAAA,SAEtC;AAEF,YAAM,aAAc,MAAM,aAAa,EAAE,MAAM,QAAQ;AACvD,YAAM,KACJ,oBACA,WAAW,KACX,WAAW,QACX,WAAW,MACX;AAAA;AAKJ,UAAM,YAAa,MAAM,OAAuB,cAC9C;AAEF,QAAI,WAAW,WAAW,iBAAiB,UAAU,WAAW,SAAS;AACvE;AAAA;AAIF,UAAM,QAAQ,SAAS;AACvB,UAAM,SAAS,WAAW;AAC1B,UAAM,OAAO,WAAW,UAAU,WAAW;AAC7C,UAAM,aAAa,MAAM,wBAAwB;AACjD,UAAM,UACH,UAAS,SAAS,WAAW,gBAAgB,OAAO,eAC3C,SAAS,WAAW,iBAAiB,OAAO;AACxD,QACE,aAAa,UAAU,UAAU,eACjC,UAAU,cAAc,UAAU,aAClC;AACA,wBACE,MACA,KAAK,aAAa,KAAK,aACvB;AAAA,QACE,WAAW;AAAA,QACX,UAAU;AAAA,SAEZ,IAAI;AAAA;AAAA;AAIV,QAAM,uBAAuB,CAAC,UAAU;AACtC,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC;AAAM;AAEX,UAAM,gBAAgB,OAAO;AAC7B,WAAO,KACL,oBACA,+CAAe,KACf,+CAAe,QACf,+CAAe,MACf;AAAA;AAIJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}