{"version":3,"file":"events.mjs","sources":["../../../../../../src/components/ivue-table/table-body/events.ts"],"sourcesContent":["import { inject } from 'vue';\r\nimport { debounce } from 'lodash-unified';\r\n\r\nimport { getCell, getColumnByCell, createTablePopper } from '../utils';\r\nimport { hasClass, getStyle } from '../../../utils/assist';\r\n\r\n// ts\r\nimport type { TableBodyProps } from './defaults';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\nimport { TableContextKey } from '../table/defaults';\r\n\r\nconst prefixCls = 'ivue-table';\r\n\r\nfunction useEvents(props: Partial<TableBodyProps>) {\r\n  // inject\r\n  const IvueTable = inject(TableContextKey);\r\n\r\n  // 触发事件\r\n  const handleEvent = (event: Event, row: TableColumnCtx, name: string) => {\r\n    // 获取单元格\r\n    const cell: HTMLElement = getCell(event);\r\n\r\n    let column: TableColumnCtx;\r\n\r\n    if (cell) {\r\n      column = getColumnByCell(\r\n        {\r\n          // 列的vm对象\r\n          columns: props.store?.states.columns.value,\r\n        },\r\n        // 单元格\r\n        cell,\r\n        prefixCls\r\n      );\r\n\r\n      if (column) {\r\n        IvueTable?.emit(`on-cell-${name}`, row, column, cell, event);\r\n      }\r\n    }\r\n\r\n    // 行点击\r\n    IvueTable?.emit(`on-row-${name}`, row, column, event);\r\n  };\r\n\r\n  // 点击行\r\n  const handleClickTr = (event: Event, row: TableColumnCtx) => {\r\n    // 当前选择的row\r\n    props.store?.commit('setCurrentRow', row);\r\n\r\n    // 点击\r\n    handleEvent(event, row, 'click');\r\n  };\r\n\r\n  // 鼠标进入\r\n  const handleCellMouseEnter = (event: MouseEvent, row: TableColumnCtx) => {\r\n    const cell = getCell(event);\r\n\r\n    // 是否有单元格\r\n    if (cell) {\r\n      const column = getColumnByCell(\r\n        {\r\n          // 列的vm对象\r\n          columns: props.store?.states.columns.value,\r\n        },\r\n        // 单元格\r\n        cell,\r\n        prefixCls\r\n      );\r\n\r\n      IvueTable.hoverState = { cell, column, row };\r\n\r\n      const hoverState = IvueTable.hoverState;\r\n\r\n      IvueTable?.emit(\r\n        'on-cell-mouse-enter',\r\n        hoverState.row,\r\n        hoverState.column,\r\n        hoverState.cell,\r\n        event\r\n      );\r\n    }\r\n\r\n    // 判断是否text-overflow, 如果是就显示tooltip\r\n\r\n    // 获取单元格dom\r\n    const cellChild = (event.target as HTMLElement).querySelector(\r\n      '.cell'\r\n    ) as HTMLElement;\r\n\r\n    // 没有tooltip && 没有内容\r\n    if (\r\n      !(\r\n        hasClass(cellChild, `${prefixCls}-tooltip`) &&\r\n        cellChild.childNodes.length\r\n      )\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    // 使用范围宽度而不是scrollWidth来判断文本是否溢出\r\n    // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\r\n\r\n    // 创建范围\r\n    const range = document.createRange();\r\n    // 开始范围\r\n    range.setStart(cellChild, 0);\r\n    // 结束范围\r\n    range.setEnd(cellChild, cellChild.childNodes.length);\r\n\r\n    // 元素的大小及其相对于视口的位置\r\n    const rangeWidth = range.getBoundingClientRect().width;\r\n\r\n    // 获取padding\r\n    const padding =\r\n      (Number.parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0) +\r\n      (Number.parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0);\r\n\r\n    // 文字内容 > 单元格dom宽度\r\n    // 元素滚动的内容宽度 > 单元格dom宽度\r\n    if (\r\n      rangeWidth + padding > cellChild.offsetWidth ||\r\n      cellChild.scrollWidth > cellChild.offsetWidth\r\n    ) {\r\n      createTablePopper(\r\n        IvueTable?.refs.tableWrapper,\r\n        cell,\r\n        cell?.innerText || cell?.textContent,\r\n        props.tooltipTheme,\r\n        {\r\n          placement: 'top',\r\n          strategy: 'fixed',\r\n        }\r\n      );\r\n    }\r\n  };\r\n\r\n  // 鼠标离开\r\n  const handleCellMouseLeave = (event: MouseEvent) => {\r\n    const cell = getCell(event);\r\n\r\n    // 是否有单元格\r\n    if (!cell) {\r\n      return;\r\n    }\r\n\r\n    const oldHoverState = IvueTable?.hoverState;\r\n\r\n    IvueTable?.emit(\r\n      'on-cell-mouse-leave',\r\n      oldHoverState?.row,\r\n      oldHoverState?.column,\r\n      oldHoverState?.cell,\r\n      event\r\n    );\r\n  };\r\n\r\n  // 行鼠标进入\r\n  const handleMouseEnter = debounce((index: number) => {\r\n    props.store?.commit('setHoverRow', index);\r\n  }, 30);\r\n\r\n  // 行鼠标离开\r\n  const handleMouseLeave = debounce(() => {\r\n    props.store?.commit('setHoverRow', null);\r\n  }, 30);\r\n\r\n  return {\r\n    handleClickTr,\r\n    handleCellMouseEnter,\r\n    handleCellMouseLeave,\r\n    handleMouseEnter,\r\n    handleMouseLeave,\r\n  };\r\n}\r\n\r\nexport default useEvents;\r\n"],"names":[],"mappings":";;;;;;AAWA,MAAM,SAAY,GAAA,YAAA,CAAA;AAElB,SAAS,UAAU,KAAgC,EAAA;AAEjD,EAAM,MAAA,SAAA,GAAY,OAAO,eAAe,CAAA,CAAA;AAGxC,EAAA,MAAM,WAAc,GAAA,CAAC,KAAc,EAAA,GAAA,EAAqB,IAAiB,KAAA;AAlB3E,IAAA,IAAA,EAAA,CAAA;AAoBI,IAAM,MAAA,IAAA,GAAoB,QAAQ,KAAK,CAAA,CAAA;AAEvC,IAAI,IAAA,MAAA,CAAA;AAEJ,IAAA,IAAI,IAAM,EAAA;AACR,MAAS,MAAA,GAAA,eAAA;AAAA,QACP;AAAA,UAEE,OAAS,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,OAAO,OAAQ,CAAA,KAAA;AAAA,SACvC;AAAA,QAEA,IAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AAEA,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAK,CAAA,CAAA,QAAA,EAAW,IAAQ,CAAA,CAAA,EAAA,GAAA,EAAK,QAAQ,IAAM,EAAA,KAAA,CAAA,CAAA;AAAA,OACxD;AAAA,KACF;AAGA,IAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAK,CAAA,CAAA,OAAA,EAAU,IAAQ,CAAA,CAAA,EAAA,GAAA,EAAK,MAAQ,EAAA,KAAA,CAAA,CAAA;AAAA,GACjD,CAAA;AAGA,EAAM,MAAA,aAAA,GAAgB,CAAC,KAAA,EAAc,GAAwB,KAAA;AA7C/D,IAAA,IAAA,EAAA,CAAA;AA+CI,IAAM,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,eAAiB,EAAA,GAAA,CAAA,CAAA;AAGrC,IAAY,WAAA,CAAA,KAAA,EAAO,KAAK,OAAO,CAAA,CAAA;AAAA,GACjC,CAAA;AAGA,EAAM,MAAA,oBAAA,GAAuB,CAAC,KAAA,EAAmB,GAAwB,KAAA;AAtD3E,IAAA,IAAA,EAAA,CAAA;AAuDI,IAAM,MAAA,IAAA,GAAO,QAAQ,KAAK,CAAA,CAAA;AAG1B,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAM,MAAS,GAAA,eAAA;AAAA,QACb;AAAA,UAEE,OAAS,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,OAAO,OAAQ,CAAA,KAAA;AAAA,SACvC;AAAA,QAEA,IAAA;AAAA,QACA,SAAA;AAAA,OACF,CAAA;AAEA,MAAA,SAAA,CAAU,UAAa,GAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,GAAI,EAAA,CAAA;AAE3C,MAAA,MAAM,aAAa,SAAU,CAAA,UAAA,CAAA;AAE7B,MAAW,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,IAAA;AAAA,QACT,qBAAA;AAAA,QACA,UAAW,CAAA,GAAA;AAAA,QACX,UAAW,CAAA,MAAA;AAAA,QACX,UAAW,CAAA,IAAA;AAAA,QACX,KAAA;AAAA,OAAA,CAAA;AAAA,KAEJ;AAKA,IAAM,MAAA,SAAA,GAAa,MAAM,MAAuB,CAAA,aAAA;AAAA,MAC9C,OAAA;AAAA,KACF,CAAA;AAGA,IACE,IAAA,EACE,SAAS,SAAW,EAAA,CAAA,EAAG,mBAAmB,CAC1C,IAAA,SAAA,CAAU,WAAW,MAEvB,CAAA,EAAA;AACA,MAAA,OAAA;AAAA,KACF;AAMA,IAAM,MAAA,KAAA,GAAQ,SAAS,WAAY,EAAA,CAAA;AAEnC,IAAM,KAAA,CAAA,QAAA,CAAS,WAAW,CAAC,CAAA,CAAA;AAE3B,IAAA,KAAA,CAAM,MAAO,CAAA,SAAA,EAAW,SAAU,CAAA,UAAA,CAAW,MAAM,CAAA,CAAA;AAGnD,IAAM,MAAA,UAAA,GAAa,KAAM,CAAA,qBAAA,EAAwB,CAAA,KAAA,CAAA;AAGjD,IAAA,MAAM,WACH,MAAO,CAAA,QAAA,CAAS,QAAS,CAAA,SAAA,EAAW,aAAa,CAAG,EAAA,EAAE,CAAK,IAAA,CAAA,KAC3D,OAAO,QAAS,CAAA,QAAA,CAAS,WAAW,cAAc,CAAA,EAAG,EAAE,CAAK,IAAA,CAAA,CAAA,CAAA;AAI/D,IAAA,IACE,aAAa,OAAU,GAAA,SAAA,CAAU,eACjC,SAAU,CAAA,WAAA,GAAc,UAAU,WAClC,EAAA;AACA,MAAA,iBAAA;AAAA,QACE,uCAAW,IAAK,CAAA,YAAA;AAAA,QAChB,IAAA;AAAA,QACA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,eAAa,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,WAAA,CAAA;AAAA,QACzB,KAAM,CAAA,YAAA;AAAA,QACN;AAAA,UACE,SAAW,EAAA,KAAA;AAAA,UACX,QAAU,EAAA,OAAA;AAAA,SACZ;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAM,MAAA,oBAAA,GAAuB,CAAC,KAAsB,KAAA;AAClD,IAAM,MAAA,IAAA,GAAO,QAAQ,KAAK,CAAA,CAAA;AAG1B,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,gBAAgB,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,UAAA,CAAA;AAEjC,IAAW,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,IAAA;AAAA,MACT,qBAAA;AAAA,MACA,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,GAAA;AAAA,MACf,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,MAAA;AAAA,MACf,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,IAAA;AAAA,MACf,KAAA;AAAA,KAAA,CAAA;AAAA,GAEJ,CAAA;AAGA,EAAM,MAAA,gBAAA,GAAmB,QAAS,CAAA,CAAC,KAAkB,KAAA;AA7JvD,IAAA,IAAA,EAAA,CAAA;AA8JI,IAAM,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,aAAe,EAAA,KAAA,CAAA,CAAA;AAAA,KAClC,EAAE,CAAA,CAAA;AAGL,EAAM,MAAA,gBAAA,GAAmB,SAAS,MAAM;AAlK1C,IAAA,IAAA,EAAA,CAAA;AAmKI,IAAM,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,aAAe,EAAA,IAAA,CAAA,CAAA;AAAA,KAClC,EAAE,CAAA,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}