{"version":3,"file":"useHoverKeyboardEvent.mjs","sources":["../../../../components/table/hooks/useHoverKeyboardEvent.ts"],"sourcesContent":["import { toRefs, Ref, ref, computed } from 'vue';\nimport { get } from 'lodash-es';\nimport { BaseTableProps } from '../types';\nimport { on, off } from '@tdesign/shared-utils';\nimport {\n  ALL_REG,\n  ARROW_DOWN_REG,\n  ARROW_UP_REG,\n  CLEAR_REG,\n  ESCAPE_REG,\n  SPACE_REG,\n  ARROW_LEFT_REG,\n  ARROW_RIGHT_REG,\n} from '@tdesign/common-js/common';\nimport { RowEventContext, TableRowData } from '../type';\n\n/**\n * 需要进行表格行操作时，则需要键盘操作的悬浮效果来表达当前的哪一行\n * 如：高亮多行、行选中、行展开等功能\n */\nexport function useHoverKeyboardEvent(props: BaseTableProps, tableRef: Ref<HTMLDivElement>) {\n  const { hover, data, activeRowType, keyboardRowHover, disableSpaceInactiveRow } = toRefs(props);\n  const hoverRow = ref<string | number>();\n  const currentHoverRowIndex = ref(-1);\n  const tableRefTabIndex = ref(0);\n\n  // 单行高亮场景，不需要键盘悬浮效果\n  const needKeyboardRowHover = computed(() => {\n    if (activeRowType.value === 'single') return false;\n    if (activeRowType.value === 'multiple') return true;\n    return hover.value || keyboardRowHover.value;\n  });\n\n  const onHoverRow = (ctx: RowEventContext<TableRowData>, extra?: { action?: 'hover' }) => {\n    const rowValue = get(ctx.row, props.rowKey);\n    if (hoverRow.value === rowValue && extra?.action !== 'hover') {\n      if (!disableSpaceInactiveRow.value) {\n        hoverRow.value = undefined;\n      }\n    } else {\n      hoverRow.value = rowValue;\n    }\n    currentHoverRowIndex.value = ctx.index;\n  };\n\n  const clearHoverRow = () => {\n    hoverRow.value = undefined;\n    currentHoverRowIndex.value = -1;\n  };\n\n  const keyboardDownListener = (e: KeyboardEvent) => {\n    if (!needKeyboardRowHover.value) return;\n    const code = e.code || e.key?.trim();\n    if (ARROW_DOWN_REG.test(code)) {\n      e.preventDefault();\n      const index = Math.min(data.value.length - 1, currentHoverRowIndex.value + 1);\n      onHoverRow({ row: data.value[index], index, e }, { action: 'hover' });\n    } else if (ARROW_UP_REG.test(code)) {\n      e.preventDefault();\n      const index = Math.max(0, currentHoverRowIndex.value - 1);\n      onHoverRow({ row: data.value[index], index, e }, { action: 'hover' });\n    } else if (SPACE_REG.test(code) && props.activeRowType !== 'multiple') {\n      const index = currentHoverRowIndex.value;\n      onHoverRow({ row: data.value[index], index, e });\n\n      if (!props.activeRowType) {\n        props.onActiveRowAction?.({\n          action: 'space-one-selection',\n          activeRowList: [{ row: data.value[index], rowIndex: index }],\n        });\n      }\n    } else if (ESCAPE_REG.test(code) && !props.activeRowType) {\n      hoverRow.value = undefined;\n      props.onActiveRowAction?.({ action: 'clear', activeRowList: [] });\n    } else if (ALL_REG.test(code) && !props.activeRowType) {\n      props.onActiveRowAction?.({ action: 'select-all', activeRowList: [] });\n      // fix: https://github.com/Tencent/tdesign-vue-next/issues/4990 ↓\n    } else if (CLEAR_REG.test(code) && !props.activeRowType && !e.ctrlKey && !e.metaKey) {\n      props.onActiveRowAction?.({ action: 'clear', activeRowList: [] });\n    }\n\n    // 用于支持键盘默认的左右滚动，左右滚动时重置为undefined，其他情况下为0，支持键盘操作\n    if (ARROW_LEFT_REG.test(code) || ARROW_RIGHT_REG.test(code)) {\n      tableRefTabIndex.value = undefined;\n    } else {\n      tableRefTabIndex.value = 0;\n    }\n  };\n\n  const addRowHoverKeyboardListener = () => {\n    on(tableRef.value, 'keydown', keyboardDownListener);\n  };\n\n  const removeRowHoverKeyboardListener = () => {\n    off(tableRef.value, 'keydown', keyboardDownListener);\n  };\n\n  return {\n    hoverRow,\n    needKeyboardRowHover,\n    clearHoverRow,\n    addRowHoverKeyboardListener,\n    removeRowHoverKeyboardListener,\n    tableRefTabIndex,\n  };\n}\n\nexport default useHoverKeyboardEvent;\n"],"names":["useHoverKeyboardEvent","props","tableRef","_toRefs","toRefs","hover","data","activeRowType","keyboardRowHover","disableSpaceInactiveRow","hoverRow","ref","currentHoverRowIndex","tableRefTabIndex","needKeyboardRowHover","computed","value","onHoverRow","ctx","extra","rowValue","get","row","rowKey","action","index","clearHoverRow","keyboardDownListener","e","_e$key","code","key","trim","ARROW_DOWN_REG","test","preventDefault","Math","min","length","ARROW_UP_REG","max","SPACE_REG","_props$onActiveRowAct","onActiveRowAction","call","activeRowList","rowIndex","ESCAPE_REG","_props$onActiveRowAct2","ALL_REG","_props$onActiveRowAct3","CLEAR_REG","ctrlKey","metaKey","_props$onActiveRowAct4","ARROW_LEFT_REG","ARROW_RIGHT_REG","addRowHoverKeyboardListener","on","removeRowHoverKeyboardListener","off"],"mappings":"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"}