{"version":3,"file":"store.mjs","sources":["../../../components/table/store.ts"],"sourcesContent":["import { useCascadedChecked } from '@/components/tree/hooks'\n\nimport { computed, reactive, watchEffect } from 'vue'\n\nimport {\n  boundRange,\n  createBITree,\n  debounceMinor,\n  deepClone,\n  getLast,\n  isNull,\n  mapTree,\n  sortByProps,\n  toFalse,\n  toFixed,\n  toNumber,\n  walkTree\n} from '@vexip-ui/utils'\nimport { DEFAULT_KEY_FIELD, TABLE_FOOT_PREFIX, TABLE_HEAD_PREFIX, columnTypes } from './symbol'\n\nimport type { ClassType, LocaleConfig, StyleType } from '@vexip-ui/config'\nimport type { TooltipTheme } from '@/components/tooltip'\nimport type {\n  CellSpanResult,\n  ColumnCellSpanFn,\n  ColumnGroupWithKey,\n  ColumnRawWithKey,\n  ColumnWithKey,\n  Data,\n  ExpandRenderFn,\n  Key,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  StoreOptions,\n  StoreState,\n  SummaryCellSpanFn,\n  SummaryWithKey,\n  TableCellPropFn,\n  TableCellSpanFn,\n  TableColResizeType,\n  TableColumnOptions,\n  TableColumnRawOptions,\n  TableColumnType,\n  TableDragColumn,\n  TableExpandColumn,\n  TableFilterOptions,\n  TableFootPropFn,\n  TableHeadPropFn,\n  TableKeyConfig,\n  TableRowPropFn,\n  TableRowState,\n  TableSelectionColumn,\n  TableSorterOptions,\n  TableSummaryData,\n  TableSummaryOptions\n} from './symbol'\n\nconst defaultSummaryData = Object.freeze<TableSummaryData>({\n  sum: NaN,\n  min: NaN,\n  max: NaN\n})\n\nlet indexId = 1\n\nfunction getIndexId() {\n  return `__vxp-table-key-${indexId++}`\n}\n\nfunction defaultIndexLabel(index: number) {\n  return index + 1\n}\n\nexport function useStore(options: StoreOptions) {\n  const state = reactive({\n    ...options,\n    columns: [],\n    normalColumns: [],\n    allColumns: [],\n    summaries: [],\n    data: [],\n    dataKey: options.dataKey ?? DEFAULT_KEY_FIELD,\n    rowData: [],\n    treeRowData: [],\n    width: 0,\n    rightFixedColumns: [],\n    leftFixedColumns: [],\n    aboveSummaries: [],\n    belowSummaries: [],\n    rowMinHeight: options.rowMinHeight || 36,\n    rowDraggable: !!options.rowDraggable,\n    columnMap: new Map(),\n    rowMap: new Map(),\n    summaryMap: new Map(),\n    idMaps: new WeakMap(),\n    checkedAll: false,\n    partial: false,\n    widths: new Map(),\n    sorters: new Map(),\n    filters: new Map(),\n    resized: new Set(),\n    bodyYScroll: 0,\n    bodyXScroll: 0,\n    padTop: 0,\n    startRow: 0,\n    endRow: 0,\n    dragging: false,\n    heightBITree: null!,\n    virtualData: [],\n    totalHeight: options.rowMinHeight * options.data.length,\n    colResizing: false,\n    resizeLeft: 0,\n    cellSpanMap: new Map(),\n    collapseMap: new Map(),\n    sidePadding: options.sidePadding || [0, 0],\n    locked: false,\n    barScrolling: false,\n    heightTrigger: 0\n  }) as StoreState\n\n  setColumns(options.columns)\n  setSummaries(options.summaries)\n  setData(options.data)\n\n  const userData = computed(() => {\n    return typeof state.dataFilter === 'function'\n      ? state.rowData.filter(row => state.dataFilter(row.data))\n      : state.rowData\n  })\n  const filteredData = computed(() => {\n    return state.customFilter\n      ? userData.value\n      : filterData(state.filters, userData.value, state.singleFilter)\n  })\n  const sortedData = computed(() => {\n    const data = state.customSorter\n      ? filteredData.value\n      : sortData(state.sorters, filteredData.value, state.columns, state.singleSorter)\n\n    return data\n  })\n  const processedData = computed(() => {\n    const data = pageData(state.currentPage, state.pageSize, sortedData.value)\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].listIndex = i\n      data[i].last = i === len - 1\n    }\n\n    return data\n  })\n  const visibleKeys = computed(() => new Set(processedData.value.map(row => row.key)))\n  const disableCheckRows = computed(() => {\n    const rowData = processedData.value\n    const selectionColumn = state.columns.find(\n      item => (item as TableSelectionColumn).type === 'selection'\n    ) as TableSelectionColumn | undefined\n    const disableCheckRows = new Set<Key>()\n\n    if (selectionColumn && typeof selectionColumn.disableRow === 'function') {\n      const isDisabled = selectionColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableCheckRows.add(row.key)\n        }\n      }\n    }\n\n    return disableCheckRows\n  })\n  const disableExpandRows = computed(() => {\n    const rowData = processedData.value\n    const expandColumn = state.columns.find(\n      item => (item as TableExpandColumn).type === 'expand'\n    ) as TableExpandColumn | undefined\n    const disableExpandRows = new Set<Key>()\n\n    if (expandColumn && typeof expandColumn.disableRow === 'function') {\n      const isDisabled = expandColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableExpandRows.add(row.key)\n        }\n      }\n    }\n\n    return disableExpandRows\n  })\n  const disableDragRows = computed(() => {\n    const rowData = processedData.value\n    const dragColumn = state.columns.find(item => (item as TableDragColumn).type === 'drag') as\n      | TableDragColumn\n      | undefined\n    const disableDragRows = new Set<Key>()\n\n    if (dragColumn && typeof dragColumn.disableRow === 'function') {\n      const isDisabled = dragColumn.disableRow\n\n      for (let i = 0, len = rowData.length; i < len; ++i) {\n        const row = rowData[i]\n\n        if (isDisabled(row.data)) {\n          disableDragRows.add(row.key)\n        }\n      }\n    }\n\n    return disableDragRows\n  })\n  const usingTree = computed(() => {\n    return !state.disabledTree && state.rowData.some(row => row.children?.length)\n  })\n  const hasDragColumn = computed(() => {\n    return !!state.columns.find(column => 'type' in column && column.type === 'drag')\n  })\n  const rowDragging = computed(() => !!processedData.value.find(row => row.dragging))\n  const totalWidths = computed(() => getColumnsWidths())\n  const normalWidths = computed(() => getColumnsWidths(state.normalColumns))\n  const leftFixedWidths = computed(() => getColumnsWidths(state.leftFixedColumns))\n  const rightFixedWidths = computed(() => getColumnsWidths(state.rightFixedColumns))\n  const expandColumn = computed(() => {\n    return state.columns.find(column => (column as TableExpandColumn).type === 'expand') as\n      | TableExpandColumn\n      | undefined\n  })\n  const summaryData = computed(() => {\n    const { columns, summaries, data } = state\n    const map = new Map<Key, TableSummaryData>()\n\n    if (!summaries.length) return map\n\n    for (const column of columns) {\n      const key = column.key\n\n      if (column.type || column.noSummary) {\n        map.set(key, defaultSummaryData)\n        continue\n      }\n\n      const accessor =\n        typeof column.accessor === 'function' ? column.accessor : (data: Data) => data[key]\n\n      let sum = 0\n      let min = Infinity\n      let max = -Infinity\n      let valid = false\n\n      for (let i = 0, len = data.length; i < len; ++i) {\n        const value = accessor(data[i], i)\n        const number = parseFloat(value as string)\n\n        if (Number.isNaN(number)) continue\n\n        sum += number\n        min = Math.min(min, number)\n        max = Math.max(max, number)\n        valid = true\n      }\n\n      valid ? map.set(key, { sum, min, max }) : map.set(key, defaultSummaryData)\n    }\n\n    return map\n  })\n  const topFixedHeights = computed(() => getSummariesHeights(state.aboveSummaries))\n  const bottomFixedHeights = computed(() => getSummariesHeights())\n  const indentedColumn = computed(() => {\n    return state.columns.find(column => !column.type && column.indented)\n  })\n  const hasFixedColumn = computed(() => {\n    return !!(state.leftFixedColumns.length || state.rightFixedColumns.length)\n  })\n\n  const getters = reactive({\n    filteredData,\n    sortedData,\n    processedData,\n    visibleKeys,\n    disableCheckRows,\n    disableExpandRows,\n    disableDragRows,\n    usingTree,\n    hasDragColumn,\n    rowDragging,\n    totalWidths,\n    normalWidths,\n    leftFixedWidths,\n    rightFixedWidths,\n    expandColumn,\n    summaryData,\n    topFixedHeights,\n    bottomFixedHeights,\n    indentedColumn,\n    hasFixedColumn\n  })\n\n  const mutations = {\n    // 这几个个方法被 deep watch 回调\n    // 需要防止在一个微任务内被多次调用\n    setColumns: debounceMinor(setColumns),\n    // setColumns,\n    setSummaries: debounceMinor(setSummaries),\n    setData: debounceMinor(setData),\n\n    // 这个方法被大量的 watch 回调，需要防抖\n    updateTotalHeight: debounceMinor(updateTotalHeight),\n\n    isGroupColumn,\n    buildSummaryKey,\n    setColumnProp,\n    setSummaryProp,\n    setDataKey,\n    setCurrentPage,\n    setPageSize,\n    setRowClass,\n    setRowStyle,\n    setRowAttrs,\n    setCellClass,\n    setCellStyle,\n    setCellAttrs,\n    setHeadClass,\n    setHeadStyle,\n    setHeadAttrs,\n    setFootClass,\n    setFootStyle,\n    setFootAttrs,\n    setTableWidth,\n    setRowHeight,\n    setRowMinHeight,\n    setCellHeight,\n    setVirtual,\n    setRowDraggable,\n    setBodyYScroll,\n    setBodyXScroll,\n    setBorder,\n    setStripe,\n    setHighlight,\n    setRowProp,\n    setLocale,\n    setTooltipTheme,\n    setTooltipWidth,\n    setSingleSorter,\n    setSingleFilter,\n    setDragging,\n    setKeyConfig,\n    setDisabledTree,\n    setNoCascaded,\n    setColResizable,\n    setCustomSorter,\n    setCustomFilter,\n    setColumnResizing,\n    setResizeLeft,\n    setExpandRenderer,\n    setCellSpan,\n    setSidePadding,\n    setBorderWidth,\n    setDataFilter,\n    setEllipsis,\n    setLocked,\n    setBarScrolling,\n\n    handleSort,\n    clearSort,\n    handleFilter,\n    clearFilter,\n    toggleFilterItemActive,\n    refreshRowIndex,\n    handleCheck,\n    handleCheckAll,\n    clearCheckAll,\n    setRenderRows,\n    handleExpand,\n    handleDrag,\n    collectUnderRows,\n    setTreeExpanded,\n    getParentRow,\n    handleColumnResize,\n    getCurrentData,\n    createMinRowState,\n    flatTreeRows,\n    refreshRowDepth,\n    triggerHeightChange,\n    queryRow\n  }\n\n  watchEffect(() => {\n    state.heightBITree = createBITree(\n      processedData.value.length,\n      state.rowHeight || state.rowMinHeight\n    )\n\n    state.totalHeight = -1\n    updateTotalHeight()\n  })\n  watchEffect(computeCellSpan)\n\n  function triggerHeightChange() {\n    ++state.heightTrigger\n\n    if (state.heightTrigger >= Number.MAX_SAFE_INTEGER) {\n      state.heightTrigger = 0\n    }\n  }\n\n  function getColumnsWidths(columns = state.columns) {\n    const widths = state.widths\n    const combinedWidths: number[] = [0]\n\n    let width = 0\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n      const key = column.key\n      const columnWidth = widths.get(key) || 0\n\n      width += columnWidth\n      combinedWidths.push(width)\n    }\n\n    return combinedWidths\n  }\n\n  function getSummariesHeights(summaries = state.belowSummaries) {\n    const rowMap = state.rowMap\n    const heights: number[] = [0]\n\n    let height = 0\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = summaries[i]\n      const key = buildSummaryKey(summary.key)\n      const row = rowMap.get(key)\n\n      if (row) {\n        height += row.height || 0\n      }\n\n      heights.push(height)\n    }\n\n    return heights\n  }\n\n  function createMinRowState(key: Key) {\n    return { key, cellHeights: {}, height: state.rowHeight ?? state.rowMinHeight } as TableRowState\n  }\n\n  function isGroupColumn(column: any): column is ColumnGroupWithKey {\n    return !!column.children?.length\n  }\n\n  function buildColumns(columns: TableColumnRawOptions[]) {\n    const allColumns: ColumnRawWithKey[][] = []\n    const baseColumns: ColumnWithKey[] = []\n    const columnMap = new Map<Key, ColumnRawWithKey>()\n    const existedTypes = new Set<TableColumnType>()\n\n    const getFixedOrder = (fixed?: boolean | 'left' | 'right') => {\n      return fixed === true || fixed === 'left' ? -1 : fixed === 'right' ? 1 : 0\n    }\n    const build = (\n      _columns: TableColumnRawOptions[],\n      fixed?: boolean | 'left' | 'right',\n      row = 0,\n      result: ColumnRawWithKey[][] = []\n    ) => {\n      _columns = _columns\n        .filter(column => !('children' in column) || isGroupColumn(column))\n        .sort((prev, next) => (prev.order || 0) - (next.order || 0))\n        .sort((prev, next) => getFixedOrder(prev.fixed) - getFixedOrder(next.fixed))\n      fixed = fixed === true ? 'left' : fixed\n\n      const columns = _columns as ColumnRawWithKey[]\n      const rowColumns = result[row] ?? (result[row] = [])\n\n      let index = row > 0 ? result[row - 1].length - 1 : 0\n\n      for (const { ...column } of columns) {\n        if (!isNull(fixed)) {\n          column.fixed = fixed\n        }\n\n        rowColumns[index] = column\n\n        if (isGroupColumn(column)) {\n          const endIndex = build(column.children, column.fixed, row + 1, result)\n\n          column.key = Symbol('TableColumnGroup')\n          column.headSpan = endIndex - index\n          index = endIndex\n        } else {\n          const validType = column.type && columnTypes.includes(column.type)\n\n          if (validType) {\n            if (existedTypes.has(column.type)) {\n              console.warn(`[vexip-ui:Table] Table has duplicate column with type '${column.type}'`)\n            }\n\n            existedTypes.add(column.type)\n          }\n\n          let key = column.key\n\n          if (isNull(key)) {\n            if (validType) {\n              key = `__vxp_${column.type}`\n            } else {\n              console.warn('[vexip-ui:Table] Table column requires key prop, but missing')\n\n              key = getIndexId()\n            }\n          }\n\n          column.key = key\n          baseColumns.push(column)\n          index += 1\n        }\n\n        columnMap.set(column.key, column)\n      }\n\n      return index\n    }\n\n    build(columns, undefined, 0, allColumns)\n\n    let length = 0\n\n    for (const rowColumns of allColumns) {\n      length = Math.max(rowColumns.length, length)\n    }\n\n    for (const rowColumns of allColumns) {\n      if (rowColumns.length) {\n        getLast(rowColumns)!.last = true\n      }\n\n      rowColumns.length = length\n    }\n\n    for (let i = 0, rowCount = allColumns.length; i < length; ++i) {\n      let span = 1\n\n      for (let j = rowCount - 1; j >= 0; --j) {\n        const column = allColumns[j][i]\n\n        if (column) {\n          column.colIndex = i\n          column.rowSpan = span\n          span = 1\n        } else {\n          ++span\n        }\n      }\n    }\n\n    return { allColumns, baseColumns, columnMap }\n  }\n\n  function setColumns(columns: TableColumnRawOptions[]) {\n    const { widths, sorters, filters } = state\n    const { allColumns, baseColumns, columnMap } = buildColumns(columns)\n\n    const normalColumns: ColumnWithKey[] = []\n    const rightFixedColumns: ColumnWithKey[] = []\n    const leftFixedColumns: ColumnWithKey[] = []\n\n    for (let i = 0, len = baseColumns.length; i < len; ++i) {\n      const column = baseColumns[i]\n\n      column.first = false\n      column.last = false\n      column.index = i\n\n      if (column.type && columnTypes.includes(column.type)) {\n        switch (column.type) {\n          case 'order': {\n            column.truthIndex = !!column.truthIndex\n\n            if (typeof column.orderLabel !== 'function') {\n              column.orderLabel = defaultIndexLabel\n            }\n\n            if (isNull(column.width)) column.width = 60\n\n            break\n          }\n          case 'selection': {\n            column.selectionSize = column.selectionSize || 'default'\n\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n          case 'expand': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n          case 'drag': {\n            if (typeof column.disableRow !== 'function') {\n              column.disableRow = toFalse\n            }\n\n            if (isNull(column.width)) column.width = 40\n\n            break\n          }\n        }\n\n        if (!column.key) {\n          column.key = `__vxp_${column.type}-${i}`\n        }\n      } else {\n        column.type = undefined\n      }\n\n      // 独立属性解析时注意隔断同对象引用\n      widths.set(column.key, column.width || 100)\n      sorters.set(column.key, parseSorter(column.sorter))\n      filters.set(column.key, parseFilter(column.filter))\n\n      const fixed = column.fixed\n\n      if (fixed === true || fixed === 'left') {\n        leftFixedColumns.push(column)\n      } else if (fixed === 'right') {\n        rightFixedColumns.push(column)\n      } else {\n        normalColumns.push(column)\n      }\n    }\n\n    if (state.allColumns.length > allColumns.length) {\n      for (let i = allColumns.length - 1, len = state.allColumns.length; i < len; ++i) {\n        state.rowMap.delete(`${TABLE_HEAD_PREFIX}${i}`)\n      }\n    }\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const rowKey = `${TABLE_HEAD_PREFIX}${i}`\n\n      state.rowMap.set(rowKey, createMinRowState(rowKey))\n    }\n\n    state.columnMap = columnMap\n    state.columns = Array.from(leftFixedColumns).concat(normalColumns, rightFixedColumns)\n    state.normalColumns = normalColumns\n    state.allColumns = allColumns\n\n    if (state.columns.length) {\n      for (const column of state.columns) {\n        if (!column.type) {\n          column.first = true\n          break\n        }\n      }\n\n      getLast(state.columns)!.last = true\n    }\n\n    if (leftFixedColumns.length) {\n      state.leftFixedColumns = leftFixedColumns\n    }\n\n    if (rightFixedColumns.length) {\n      state.rightFixedColumns = rightFixedColumns\n    }\n  }\n\n  function setColumnProp(key: Key, prop: string, value: any) {\n    if (state.columnMap.has(key)) {\n      ;(state.columnMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function buildSummaryKey(key: Key) {\n    return typeof key === 'symbol' ? key : `${TABLE_FOOT_PREFIX}${key}`\n  }\n\n  function setSummaries(summaries: TableSummaryOptions[]) {\n    summaries = Array.from(summaries).sort((prev, next) => {\n      return (prev.order || 0) - (next.order || 0)\n    })\n\n    const prevKeys = new Set(state.summaries.map(summary => summary.key))\n    const aboveSummaries: SummaryWithKey[] = []\n    const belowSummaries: SummaryWithKey[] = []\n    const summaryMap = new Map<Key, SummaryWithKey>()\n\n    for (let i = 0, len = summaries.length; i < len; ++i) {\n      const summary = { ...summaries[i] } as SummaryWithKey\n\n      let key = summary.key\n\n      if (isNull(key)) {\n        console.error('[vexip-ui:Table] Table summary requires key prop, but missing')\n\n        key = getIndexId()\n      }\n\n      summary.key = key\n      ;(summary.above ? aboveSummaries : belowSummaries).push(summary)\n\n      if (!prevKeys.has(summary.key)) {\n        const rowKey = buildSummaryKey(summary.key)\n\n        state.rowMap.set(rowKey, createMinRowState(rowKey))\n      }\n\n      prevKeys.delete(summary.key)\n      summaryMap.set(summary.key, summary)\n    }\n\n    state.summaries = Array.from(aboveSummaries).concat(belowSummaries)\n    state.summaryMap = summaryMap\n\n    if (aboveSummaries.length) {\n      state.aboveSummaries = aboveSummaries\n    }\n\n    if (belowSummaries.length) {\n      state.belowSummaries = belowSummaries\n    }\n\n    if (prevKeys.size) {\n      for (const key of prevKeys) {\n        state.rowMap.delete(buildSummaryKey(key))\n      }\n    }\n  }\n\n  function setSummaryProp(key: Key, prop: string, value: any) {\n    if (state.summaryMap.has(key)) {\n      ;(state.summaryMap.get(key) as any)[prop] = value\n    }\n  }\n\n  function setDataKey(field: string) {\n    const oldDataKey = state.dataKey\n\n    if (!isNull(field) && oldDataKey !== field) {\n      const { rowData, idMaps } = state\n\n      state.dataKey = field\n\n      rowData.forEach(row => {\n        let key = row.data[field] as Key\n\n        if (isNull(key)) {\n          key = getIndexId()\n        }\n\n        row.key = key\n        idMaps.set(row.data, key)\n      })\n    }\n  }\n\n  function collectUnderRows(row: TableRowState, result: TableRowState[] = []) {\n    if (row.treeExpanded && row.children?.length) {\n      for (const childRow of row.children) {\n        result.push(childRow)\n        collectUnderRows(childRow, result)\n      }\n    }\n\n    return result\n  }\n\n  function setData(data: Data[]) {\n    const clonedData: TableRowState[] = []\n    const rowMap = new Map<Key, TableRowState>()\n    const { allColumns, dataKey, keyConfig, idMaps, disabledTree } = state\n    const oldDataMap = state.rowMap\n    const hidden = !!state.virtual\n\n    const {\n      children: childrenKey,\n      checked: checkedKey,\n      height: heightKey,\n      expanded: expandedKey,\n      treeExpanded: treeExpandedKey\n    } = keyConfig\n\n    for (let i = 0, len = allColumns.length; i < len; ++i) {\n      const key = `${TABLE_HEAD_PREFIX}${i}`\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    for (const summary of state.summaries) {\n      const key = buildSummaryKey(summary.key)\n\n      rowMap.set(key, oldDataMap.get(key) || createMinRowState(key))\n    }\n\n    const parseRow = (origin: Data[], result: TableRowState[], parent?: TableRowState) => {\n      for (let i = 0, len = origin.length; i < len; ++i) {\n        const item = origin[i]\n\n        let key = item[dataKey] as Key\n\n        if (isNull(key)) {\n          key = idMaps.get(item)!\n\n          if (isNull(key)) {\n            key = getIndexId()\n          }\n        }\n\n        let row: TableRowState\n\n        if (oldDataMap.has(key)) {\n          row = oldDataMap.get(key)!\n\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded\n          } = row.data !== item ? Object.assign(row.data, item) : row.data\n\n          row.checked = !isNull(checked) ? !!checked : row.checked\n          row.height = !isNull(height) ? toNumber(height) : row.height\n          row.expanded = !isNull(expanded) ? !!expanded : row.expanded\n          row.treeExpanded = !isNull(treeExpanded) ? !!treeExpanded : row.treeExpanded\n        } else {\n          const {\n            [checkedKey]: checked,\n            [heightKey]: height,\n            [expandedKey]: expanded,\n            [treeExpandedKey]: treeExpanded\n          } = item\n\n          row = {\n            key,\n            hidden,\n            checked: !!checked,\n            height: toNumber(height),\n            expanded: !!expanded,\n            hover: false,\n            expandHeight: 0,\n            index: -1,\n            children: [],\n            depth: 0,\n            treeExpanded: !!treeExpanded,\n            partial: false,\n            dragging: false,\n            listIndex: 0,\n            cellHeights: reactive({}),\n            last: false,\n            expandAnimate: false,\n            data: item\n          }\n\n          idMaps.set(item, key)\n        }\n\n        if (parent) {\n          row.parent = parent.key\n          row.depth = parent.depth + 1\n        }\n\n        row.children = []\n\n        const children = row.data[childrenKey]\n        children?.length && parseRow(children, row.children, row)\n\n        result.push(row)\n        rowMap.set(key, row)\n      }\n    }\n\n    parseRow(data, clonedData)\n\n    state.rowMap = rowMap\n    state.treeRowData = clonedData\n\n    if (!disabledTree) {\n      flatTreeRows()\n    } else {\n      state.rowData = clonedData\n    }\n\n    state.data = data\n\n    refreshRowIndex()\n    computePartial()\n  }\n\n  function flatTreeRows() {\n    if (state.disabledTree) return\n\n    const rowData: TableRowState[] = []\n\n    for (const row of state.treeRowData) {\n      rowData.push(row)\n      collectUnderRows(row, rowData)\n    }\n\n    state.rowData = rowData\n  }\n\n  function refreshRowDepth() {\n    walkTree(state.treeRowData, (row, depth) => {\n      row.depth = depth\n    })\n  }\n\n  function setCurrentPage(currentPage: number) {\n    state.currentPage = currentPage ?? 1\n  }\n\n  function setPageSize(pageSize: number) {\n    state.pageSize = pageSize || 0\n  }\n\n  function setRowClass(rowClass: ClassType | TableRowPropFn<ClassType>) {\n    state.rowClass = rowClass ?? ''\n  }\n\n  function setRowStyle(rowStyle: StyleType | TableRowPropFn<StyleType>) {\n    state.rowStyle = rowStyle ?? ''\n  }\n\n  function setRowAttrs(rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>) {\n    state.rowAttrs = rowAttrs ?? null!\n  }\n\n  function setCellClass(cellClass: ClassType | TableCellPropFn<ClassType>) {\n    state.cellClass = cellClass ?? ''\n  }\n\n  function setCellStyle(cellStyle: StyleType | TableCellPropFn<StyleType>) {\n    state.cellStyle = cellStyle ?? ''\n  }\n\n  function setCellAttrs(cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>) {\n    state.cellAttrs = cellAttrs ?? null!\n  }\n\n  function setHeadClass(headClass: ClassType | TableHeadPropFn<ClassType>) {\n    state.headClass = headClass ?? ''\n  }\n\n  function setHeadStyle(headStyle: StyleType | TableHeadPropFn<StyleType>) {\n    state.headStyle = headStyle ?? ''\n  }\n\n  function setHeadAttrs(headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>) {\n    state.headAttrs = headAttrs ?? null!\n  }\n\n  function setFootClass(footClass: ClassType | TableFootPropFn<ClassType>) {\n    state.footClass = footClass ?? ''\n  }\n\n  function setFootStyle(footStyle: StyleType | TableFootPropFn<StyleType>) {\n    state.footStyle = footStyle ?? ''\n  }\n\n  function setFootAttrs(footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>) {\n    state.footAttrs = footAttrs ?? null!\n  }\n\n  function setTableWidth(width: number) {\n    if (state.resized.size) return\n\n    width = toNumber(width)\n\n    const { columns, widths, resized, sidePadding } = state\n\n    const hasWidthColumns = []\n    const flexColumns = []\n\n    let flexWidth = width - (sidePadding[0] || 0) - (sidePadding[1] || 0)\n\n    for (let i = 0, len = columns.length; i < len; ++i) {\n      const column = columns[i]\n\n      if (column.width || resized.has(column.key)) {\n        flexWidth -= column.width ?? widths.get(column.key)!\n        hasWidthColumns.push(column)\n      } else {\n        flexColumns.push(column)\n      }\n    }\n\n    const flexColumnCount = flexColumns.length\n\n    let flexUnitWidth = 100\n\n    // 剩余空间有多时, 均分到弹性列\n    // if (flexColumnCount && flexWidth > flexColumnCount * flexUnitWidth) {\n    if (flexColumnCount) {\n      flexUnitWidth = Math.max(flexWidth / flexColumnCount, 100)\n    }\n\n    let usedWidth = 0\n\n    for (let i = 0; i < flexColumnCount; ++i) {\n      const column = flexColumns[i]\n      const width = Math[i % 2 ? 'ceil' : 'floor'](flexUnitWidth)\n\n      if (i < flexColumnCount - 1) {\n        usedWidth += width\n      }\n\n      widths.set(column.key, width)\n    }\n\n    if (flexColumnCount && flexWidth >= flexColumnCount * flexUnitWidth) {\n      widths.set(getLast(flexColumns)!.key, flexWidth - usedWidth)\n    }\n\n    state.width = width\n  }\n\n  function setRowHeight(height: number) {\n    state.rowHeight = height\n  }\n\n  function setRowMinHeight(height: number) {\n    state.rowMinHeight = height\n  }\n\n  function setCellHeight(rowKey: Key, columnKey: Key, height: number) {\n    if (!isNull(height) && state.rowMap.has(rowKey)) {\n      state.rowMap.get(rowKey)!.cellHeights[columnKey] = height\n    }\n  }\n\n  function setRowDraggable(draggable: boolean) {\n    state.rowDraggable = !!draggable\n  }\n\n  function setBodyYScroll(scroll: number) {\n    state.bodyYScroll = scroll\n  }\n\n  function setBodyXScroll(scroll: number) {\n    state.bodyXScroll = scroll\n  }\n\n  function setBorder(able: boolean) {\n    state.border = !!able\n  }\n\n  function setStripe(able: boolean) {\n    state.stripe = !!able\n  }\n\n  function setHighlight(able: boolean) {\n    state.highlight = !!able\n  }\n\n  function setVirtual(virtual: boolean) {\n    state.virtual = !!virtual\n  }\n\n  function setRowProp(key: Key, prop: Exclude<keyof TableRowState, 'key'>, value: any) {\n    const row = state.rowMap.get(key)\n\n    if (row && row[prop] !== value) {\n      ;(row as any)[prop] = value\n    }\n  }\n\n  function setLocale(locale: LocaleConfig['table']) {\n    state.locale = locale\n  }\n\n  function setTooltipTheme(theme: TooltipTheme) {\n    state.tooltipTheme = theme\n  }\n\n  function setTooltipWidth(theme: number | string) {\n    state.tooltipWidth = theme\n  }\n\n  function setSingleSorter(able: boolean) {\n    state.singleSorter = !!able\n  }\n\n  function setSingleFilter(able: boolean) {\n    state.singleFilter = !!able\n  }\n\n  function setDragging(dragging: boolean) {\n    state.dragging = !!dragging\n  }\n\n  function setKeyConfig(keyConfig: Required<TableKeyConfig>) {\n    state.keyConfig = keyConfig\n  }\n\n  function setDisabledTree(disabled: boolean) {\n    state.disabledTree = !!disabled\n  }\n\n  function setNoCascaded(noCascaded: boolean) {\n    state.noCascaded = !!noCascaded\n  }\n\n  function setColResizable(resizable: boolean | TableColResizeType) {\n    state.colResizable = resizable === true ? 'lazy' : resizable\n  }\n\n  function setCustomSorter(able: boolean) {\n    state.customSorter = !!able\n  }\n\n  function setCustomFilter(able: boolean) {\n    state.customFilter = !!able\n  }\n\n  function setColumnResizing(resizing: boolean) {\n    state.colResizing = !!resizing\n  }\n\n  function setResizeLeft(left: number) {\n    state.resizeLeft = left\n  }\n\n  function setExpandRenderer(renderer: ExpandRenderFn | null) {\n    state.expandRenderer = renderer\n  }\n\n  function setCellSpan(spanFn: TableCellSpanFn | null) {\n    state.cellSpan = spanFn\n  }\n\n  function setSidePadding(padding: number | number[]) {\n    state.sidePadding = Array.isArray(padding) ? padding : [padding, padding]\n  }\n\n  function setBorderWidth(width: number) {\n    state.borderWidth = Math.max(width, 0)\n  }\n\n  function setDataFilter(filter: (data: Data) => boolean) {\n    state.dataFilter = filter\n  }\n\n  function setEllipsis(ellipsis: boolean) {\n    state.ellipsis = ellipsis\n  }\n\n  function setLocked(locked: boolean) {\n    state.locked = locked\n  }\n\n  function setBarScrolling(scrolling: boolean) {\n    state.barScrolling = scrolling\n  }\n\n  function handleSort(key: Key, type: ParsedTableSorterOptions['type']) {\n    if (state.sorters.has(key)) {\n      if (state.singleSorter && type) {\n        clearSort()\n      }\n\n      state.sorters.get(key)!.type = type\n    }\n  }\n\n  function clearSort() {\n    const sorters = state.sorters\n\n    for (const sorter of sorters.values()) {\n      sorter.type = null\n    }\n  }\n\n  function handleFilter(key: Key, active: ParsedFilterOptions['active']) {\n    if (state.filters.has(key)) {\n      if (state.singleFilter && (Array.isArray(active) ? active.length : active)) {\n        clearFilter()\n      }\n\n      state.filters.get(key)!.active = Array.isArray(active) ? Array.from(active) : active\n    }\n  }\n\n  function clearFilter() {\n    const filters = state.filters\n\n    for (const filter of filters.values()) {\n      filter.active = null\n\n      for (const option of filter.options) {\n        option.active = false\n      }\n    }\n  }\n\n  const { updateCheckedUpward, updateCheckedDown } = useCascadedChecked({\n    getNode: key => state.rowMap.get(key),\n    disableNode: row => disableCheckRows.value.has(row.key)\n  })\n\n  function computeChecked(key: Key) {\n    const { rowMap, rowData } = state\n    const { disableCheckRows } = getters\n\n    if (!rowMap.has(key)) return\n\n    const rowList = [rowMap.get(key)!].concat(\n      // 需要包含被禁用且被勾选的节点\n      rowData.filter(row => disableCheckRows.has(row.key) && row.checked)\n    )\n\n    for (let i = 0, len = rowList.length; i < len; ++i) {\n      updateCheckedUpward(rowList[i].key)\n      updateCheckedDown(rowList[i].key)\n    }\n  }\n\n  function handleCheck(key: Key, checked: boolean, single = false) {\n    const { rowMap, noCascaded } = state\n    const { disableCheckRows } = getters\n    const row = rowMap.get(key)\n\n    if (!row) return\n\n    if (single) {\n      clearCheckAll(true)\n      row.checked = !!checked\n    }\n\n    if (!disableCheckRows.has(key)) {\n      row.checked = !!checked\n      row.partial = false\n    }\n\n    !noCascaded && computeChecked(key)\n    computePartial()\n  }\n\n  function handleCheckAll() {\n    const { rowData, checkedAll } = state\n    const { disableCheckRows } = getters\n\n    let checked = !checkedAll\n\n    // 阻断 disabled 元素对全选的影响\n    if (disableCheckRows.size) {\n      // 由于被禁用的元素不可被操作，如果存在被禁用的元素且该状态为未被选中，则全选时仍然是 partial 状态\n      // 假设除了禁用的元素，其余元素均为选中状态（此时对于用户来说属于已经全选，点击的期望是取消全选）\n      let partialCheckedAll = true\n\n      for (const row of rowData) {\n        // 检查是否存在非禁用的且未被选中的元素（如有则证明现在不是全选，用户点击的期望是进行全选）\n        if (!disableCheckRows.has(row.key) && !row.checked) {\n          partialCheckedAll = false\n\n          break\n        }\n      }\n\n      checked = !partialCheckedAll\n    }\n\n    for (const row of rowData) {\n      if (!disableCheckRows.has(row.key)) {\n        row.checked = checked\n      }\n    }\n\n    state.checkedAll = checked\n    state.partial = false\n\n    computePartial()\n  }\n\n  function clearCheckAll(includeDisabled = false) {\n    const { rowData } = state\n    const { disableCheckRows } = getters\n\n    for (const row of rowData) {\n      if (includeDisabled || !disableCheckRows.has(row.key)) {\n        row.checked = false\n      }\n\n      if (includeDisabled) {\n        row.partial = false\n      }\n    }\n\n    state.checkedAll = false\n    state.partial = false\n\n    !includeDisabled && computePartial()\n  }\n\n  function computePartial() {\n    const data = state.rowData\n\n    let hasChecked = false\n    let hasNotChecked = false\n    let partial = false\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      if (row.checked) {\n        hasChecked = true\n      } else {\n        hasNotChecked = true\n      }\n\n      if (hasChecked && hasNotChecked) {\n        partial = true\n\n        break\n      }\n    }\n\n    if (hasChecked && !partial) {\n      state.checkedAll = true\n    } else {\n      state.checkedAll = false\n    }\n\n    state.partial = partial\n  }\n\n  function setRenderRows(start: number, end: number, force = false) {\n    const { startRow, endRow, heightBITree, virtualData } = state\n\n    if (!force && start === startRow && end === endRow) return\n\n    const { processedData } = getters\n\n    if (!processedData.length) {\n      virtualData.length = 0\n      return\n    }\n\n    const prevData = new Set([...virtualData])\n    const added: TableRowState[] = []\n    const removed: TableRowState[] = []\n\n    for (let i = 0, len = processedData.length; i < len; ++i) {\n      const data = processedData[i]\n\n      data.hidden = !(i >= start && i < end)\n\n      if (data.hidden) {\n        data.hover = false\n\n        if (prevData.has(data)) {\n          removed.push(data)\n        }\n      } else if (!prevData.has(data)) {\n        added.push(data)\n      }\n\n      prevData.delete(data)\n    }\n\n    removed.push(...prevData)\n\n    const length = Math.min(added.length, removed.length)\n\n    for (let i = 0; i < length; ++i) {\n      virtualData[virtualData.indexOf(removed[i])] = added[i]\n    }\n\n    if (added.length > removed.length) {\n      virtualData.push(...added.slice(length))\n    } else if (added.length < removed.length) {\n      state.virtualData = virtualData.filter(data => !removed.includes(data))\n    }\n\n    state.padTop = heightBITree?.sum(start) ?? 0\n    state.startRow = start\n    state.endRow = end\n  }\n\n  function handleExpand(key: Key, expanded: boolean) {\n    const { rowMap } = state\n    const { disableExpandRows } = getters\n\n    if (rowMap.has(key) && !disableExpandRows.has(key)) {\n      rowMap.get(key)!.expanded = !!expanded\n    }\n  }\n\n  function handleDrag(key: Key, dragging: boolean) {\n    const { rowMap } = state\n    const { disableDragRows } = getters\n\n    if (rowMap.has(key) && !disableDragRows.has(key)) {\n      rowMap.get(key)!.dragging = !!dragging\n    }\n  }\n\n  function setTreeExpanded(key: Key, expanded: boolean) {\n    if (!usingTree.value) return\n\n    const { rowMap, rowData, virtual } = state\n    const row = rowMap.get(key)\n\n    if (!row?.children?.length) return\n\n    const underRows = collectUnderRows({ ...row, treeExpanded: true })\n\n    if (expanded) {\n      rowData.splice(row.index + 1, 0, ...underRows)\n    } else {\n      rowData.splice(row.index + 1, underRows.length)\n    }\n\n    row.treeExpanded = !!expanded\n\n    refreshRowIndex()\n    virtual && setRenderRows(state.startRow, state.endRow, true)\n  }\n\n  function toggleFilterItemActive(options: {\n    key: Key,\n    value: number | string | null,\n    active?: boolean,\n    disableOthers?: boolean\n  }) {\n    const { key, value, active = false, disableOthers = false } = options\n\n    if (state.filters.has(key)) {\n      const filterOptions = state.filters.get(key)!.options\n\n      if (disableOthers) {\n        for (let i = 0, len = filterOptions.length; i < len; ++i) {\n          filterOptions[i].active = false\n        }\n      }\n\n      const item = filterOptions.find(item => item.value === value)\n\n      if (item) {\n        item.active = active\n      }\n    }\n  }\n\n  function refreshRowIndex() {\n    const data = state.rowData\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      data[i].index = i\n    }\n  }\n\n  function updateTotalHeight() {\n    const { heightBITree } = state\n\n    if (heightBITree) {\n      state.totalHeight = heightBITree.sum() ?? 0\n    } else {\n      state.totalHeight = 0\n    }\n  }\n\n  function parseSorter(sorter: boolean | TableSorterOptions = false): ParsedTableSorterOptions {\n    const raw = typeof sorter === 'boolean' ? { able: sorter } : sorter\n    const { able = true, type = null, order = 0, method = null } = raw\n\n    return { able, type, order, method }\n  }\n\n  function parseFilter(filter?: TableFilterOptions | null): ParsedFilterOptions {\n    filter = filter || { able: false, options: [] }\n\n    const {\n      able = true,\n      custom = false,\n      multiple = false,\n      active = null,\n      method = null,\n      meta\n    } = filter\n    // 防止内部变化触发 deep watch\n    const options = deepClone(filter.options ?? [])\n    const formattedOptions = []\n\n    for (let i = 0, len = options.length; i < len; ++i) {\n      const item = options[i]\n      const option = typeof item === 'string' ? { value: item } : { ...item }\n\n      option.label = option.label ?? option.value.toString()\n\n      let isActive = false\n\n      if (multiple && Array.isArray(active)) {\n        isActive = active.includes(option.value)\n      } else if (!isNull(active)) {\n        isActive = Object.is(option.value, active)\n      }\n\n      option.active = isActive\n\n      formattedOptions.push(option as { value: string | number, label: string, active: boolean })\n    }\n\n    return { able, custom, meta, options: formattedOptions, multiple, active, method }\n  }\n\n  function filterData(\n    filters: Map<Key, ParsedFilterOptions>,\n    data: TableRowState[],\n    isSingle: boolean\n  ) {\n    const usedFilter: ParsedFilterOptions[] = []\n    const usedData: TableRowState[] = []\n\n    for (const filter of filters.values()) {\n      const { able, active, method } = filter\n\n      if (able && active && typeof method === 'function') {\n        usedFilter.push(filter)\n\n        if (isSingle) break\n      }\n    }\n\n    const usedFilterCount = usedFilter.length\n\n    for (let i = 0, len = data.length; i < len; ++i) {\n      const row = data[i]\n\n      let isFilter = true\n\n      for (let j = 0; j < usedFilterCount; j++) {\n        const { active, method } = usedFilter[j]\n\n        isFilter = method!(active! as any, row.data)\n\n        if (!isFilter) {\n          break\n        }\n      }\n\n      if (isFilter) {\n        usedData.push(row)\n      }\n    }\n\n    return usedData\n  }\n\n  function sortData(\n    sorters: Map<Key, ParsedTableSorterOptions>,\n    data: TableRowState[],\n    columns: TableColumnOptions[],\n    isSingle: boolean\n  ) {\n    const usedSorter = []\n\n    for (const [_key, sorter] of sorters) {\n      const key = _key as keyof TableRowState\n      const { able, type, order, method } = sorter\n\n      if (able && type) {\n        const column = columns.find(item => item.key === key)\n        const accessor = column?.accessor\n\n        usedSorter.push({\n          able,\n          key,\n          order,\n          type,\n          method: method ?? undefined,\n          accessor(row: TableRowState) {\n            if (typeof accessor === 'function') {\n              return accessor(row.data, row.index)\n            }\n\n            return row.data[key]\n          }\n        })\n\n        if (isSingle) break\n      }\n    }\n\n    // 多列排序优先级\n    usedSorter.sort((prev, next) => prev.order - next.order)\n\n    return sortByProps(data, usedSorter)\n  }\n\n  function pageData(currentPage: number, pageSize: number, data: TableRowState[]) {\n    return pageSize > 0 ? data.slice((currentPage - 1) * pageSize, currentPage * pageSize) : data\n  }\n\n  function getParentRow(key: Key) {\n    const { rowMap } = state\n    const row = rowMap.get(key)\n\n    if (!isNull(row?.parent)) {\n      return rowMap.get(row!.parent) ?? null\n    }\n\n    return null\n  }\n\n  let lastColumnWidth: number | undefined\n\n  function handleColumnResize(keys: Key[], newWidth: number) {\n    const { resized, widths, columns, width: tableWidth } = state\n    const length = keys.length\n\n    if (!columns.length || !length) return\n\n    const deltaWidth = newWidth / length\n    const lastKey = getLast(columns)!.key\n\n    for (let i = 0; i < length; ++i) {\n      const key = keys[i]\n\n      resized.add(key)\n      widths.set(\n        key,\n        length === 1 ? Math.round(deltaWidth) : Math[i % 2 ? 'ceil' : 'floor'](deltaWidth)\n      )\n    }\n\n    let totalWidth = 0\n\n    for (const width of widths.values()) {\n      totalWidth += width\n    }\n\n    totalWidth = toFixed(totalWidth, 1)\n\n    if (\n      totalWidth - widths.get(lastKey)! <\n      tableWidth - (lastColumnWidth ?? widths.get(lastKey)!)\n    ) {\n      if (!lastColumnWidth) {\n        lastColumnWidth = widths.get(lastKey)\n      }\n\n      widths.set(lastKey, widths.get(lastKey)! + tableWidth - totalWidth)\n    } else if (lastColumnWidth) {\n      widths.set(lastKey, lastColumnWidth!)\n      lastColumnWidth = undefined\n    }\n  }\n\n  function computeCellSpan() {\n    const {\n      normalColumns,\n      leftFixedColumns,\n      rightFixedColumns,\n      aboveSummaries,\n      belowSummaries,\n      rowData,\n      cellSpanMap,\n      collapseMap\n    } = state\n    const { processedData } = getters\n\n    for (const type of ['left', 'default', 'right'] as const) {\n      cellSpanMap.set(type, new Map())\n      collapseMap.set(type, new Map())\n    }\n\n    function setCellSpan(\n      rowIndex: number,\n      columnIndex: number,\n      fixed: 'left' | 'default' | 'right',\n      getSpan: () => Required<CellSpanResult>,\n      prefix = ''\n    ) {\n      const masterKey = `${prefix}${rowIndex},${columnIndex}`\n      const collapsed = collapseMap.get(fixed)!\n\n      if (collapsed.has(masterKey)) {\n        cellSpanMap.get(fixed)!.set(masterKey, { colSpan: 0, rowSpan: 0 })\n        return\n      }\n\n      const span = getSpan()\n      const { colSpan, rowSpan } = span\n\n      for (let i = 0; i < colSpan; ++i) {\n        for (let j = 0; j < rowSpan; ++j) {\n          if (!i && !j) continue\n\n          const key = `${prefix}${rowIndex + j},${columnIndex + i}`\n\n          let masterSet = collapsed.get(key)\n\n          if (!masterSet) {\n            masterSet = new Set()\n            collapsed.set(key, masterSet)\n          }\n\n          masterSet.add(masterKey)\n        }\n      }\n\n      cellSpanMap.get(fixed)!.set(masterKey, span)\n    }\n\n    for (const columns of [normalColumns, leftFixedColumns, rightFixedColumns]) {\n      if (!columns.length) continue\n\n      const fixed = columns[0].fixed === true ? 'left' : columns[0].fixed || 'default'\n      const columnFixed = columns[0].fixed === true ? 'left' : columns[0].fixed || undefined\n\n      const left = state.leftFixedColumns.length\n      const right = state.allColumns[0].length - state.rightFixedColumns.length\n\n      let allColumns: ColumnRawWithKey[][]\n\n      if (fixed === 'left') {\n        allColumns = state.allColumns.map(columns => columns.slice(0, left))\n      } else if (fixed === 'right') {\n        allColumns = state.allColumns.map(columns =>\n          columns.slice(right, state.allColumns[0].length)\n        )\n      } else {\n        allColumns = state.allColumns.map(columns => columns.slice(left, right))\n      }\n\n      for (let i = 0, len1 = allColumns.length; i < len1; ++i) {\n        const rowColumns = allColumns[i]\n\n        for (let j = 0, len2 = rowColumns.length; j < len2; ++j) {\n          const column = rowColumns[j]\n\n          if (!column) continue\n\n          const fixed = column.fixed === true ? 'left' : column.fixed || 'default'\n\n          setCellSpan(\n            i,\n            j,\n            fixed,\n            () => {\n              const columns =\n                fixed === 'left'\n                  ? leftFixedColumns\n                  : fixed === 'right'\n                    ? rightFixedColumns\n                    : normalColumns\n              const colSpan = boundRange(column.headSpan ?? 1, 0, columns.length - j)\n              const span = { colSpan, rowSpan: column.rowSpan }\n\n              return span\n            },\n            'h'\n          )\n        }\n      }\n\n      for (let colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {\n        const column = columns[colIndex]\n\n        for (const row of rowData) {\n          setCellSpan(row.index, column.index, fixed, () => {\n            let result: ReturnType<ColumnCellSpanFn>\n\n            if (typeof column.cellSpan === 'function') {\n              result = column.cellSpan({\n                row: row.data,\n                index: row.index,\n                fixed: columnFixed\n              })\n            } else if (typeof state.cellSpan === 'function') {\n              result = state.cellSpan({\n                row: row.data,\n                rowIndex: row.index,\n                column,\n                columnIndex: column.index,\n                fixed: columnFixed\n              })\n            }\n\n            result = result! || { colSpan: 1, rowSpan: 1 }\n\n            const span = { colSpan: result.colSpan ?? 1, rowSpan: result.rowSpan ?? 1 }\n\n            span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n            span.rowSpan = boundRange(span.rowSpan, 0, processedData.length - row.listIndex)\n\n            return span\n          })\n        }\n\n        for (const { prefix, summaries } of [\n          { prefix: 'af', summaries: aboveSummaries },\n          { prefix: 'bf', summaries: belowSummaries }\n        ]) {\n          for (let i = 0, len = summaries.length; i < len; ++i) {\n            const summary = summaries[i]\n\n            setCellSpan(\n              i,\n              column.index,\n              fixed,\n              () => {\n                let result: ReturnType<SummaryCellSpanFn>\n\n                if (typeof summary.cellSpan === 'function') {\n                  result = summary.cellSpan({\n                    column,\n                    index: column.index,\n                    fixed: columnFixed\n                  })\n                }\n\n                const { colSpan, rowSpan } = result! || { colSpan: 1, rowSpan: 1 }\n                const span = { colSpan: colSpan ?? 1, rowSpan: rowSpan ?? 1 }\n\n                span.colSpan = boundRange(span.colSpan, 0, columns.length - colIndex)\n                span.rowSpan = boundRange(span.rowSpan, 0, summaries.length - i)\n\n                return span\n              },\n              prefix\n            )\n          }\n        }\n      }\n    }\n  }\n\n  function getCurrentData() {\n    const { treeRowData, disabledTree, keyConfig } = state\n\n    if (disabledTree) {\n      return treeRowData.map(row => ({ ...row.data }))\n    }\n\n    return mapTree(treeRowData, row => ({ ...row.data }), {\n      childField: keyConfig.children as 'children'\n    })\n  }\n\n  function queryRow(keyOrData: Key | Record<any, any>) {\n    const { dataKey, rowMap, idMaps } = state\n\n    let key: Key\n\n    if (typeof keyOrData === 'object') {\n      key = idMaps.get(keyOrData) ?? keyOrData[dataKey]\n    } else {\n      key = keyOrData\n    }\n\n    return isNull(key) ? undefined : rowMap.get(key)\n  }\n\n  type Store = Readonly<{\n    state: Readonly<typeof state>,\n    getters: Readonly<typeof getters>,\n    mutations: Readonly<typeof mutations>\n  }>\n\n  return { state, getters, mutations } as Store\n}\n\nexport type TableStore = ReturnType<typeof useStore>\n"],"names":["defaultSummaryData","indexId","getIndexId","defaultIndexLabel","index","useStore","options","state","reactive","DEFAULT_KEY_FIELD","setColumns","setSummaries","setData","userData","computed","row","filteredData","filterData","sortedData","sortData","processedData","data","pageData","i","len","visibleKeys","disableCheckRows","rowData","selectionColumn","item","isDisabled","disableExpandRows","expandColumn","disableDragRows","dragColumn","usingTree","_a","hasDragColumn","column","rowDragging","totalWidths","getColumnsWidths","normalWidths","leftFixedWidths","rightFixedWidths","summaryData","columns","summaries","map","key","accessor","sum","min","max","valid","value","number","topFixedHeights","getSummariesHeights","bottomFixedHeights","indentedColumn","hasFixedColumn","getters","mutations","debounceMinor","updateTotalHeight","isGroupColumn","buildSummaryKey","setColumnProp","setSummaryProp","setDataKey","setCurrentPage","setPageSize","setRowClass","setRowStyle","setRowAttrs","setCellClass","setCellStyle","setCellAttrs","setHeadClass","setHeadStyle","setHeadAttrs","setFootClass","setFootStyle","setFootAttrs","setTableWidth","setRowHeight","setRowMinHeight","setCellHeight","setVirtual","setRowDraggable","setBodyYScroll","setBodyXScroll","setBorder","setStripe","setHighlight","setRowProp","setLocale","setTooltipTheme","setTooltipWidth","setSingleSorter","setSingleFilter","setDragging","setKeyConfig","setDisabledTree","setNoCascaded","setColResizable","setCustomSorter","setCustomFilter","setColumnResizing","setResizeLeft","setExpandRenderer","setCellSpan","setSidePadding","setBorderWidth","setDataFilter","setEllipsis","setLocked","setBarScrolling","handleSort","clearSort","handleFilter","clearFilter","toggleFilterItemActive","refreshRowIndex","handleCheck","handleCheckAll","clearCheckAll","setRenderRows","handleExpand","handleDrag","collectUnderRows","setTreeExpanded","getParentRow","handleColumnResize","getCurrentData","createMinRowState","flatTreeRows","refreshRowDepth","triggerHeightChange","queryRow","watchEffect","createBITree","computeCellSpan","widths","combinedWidths","width","columnWidth","rowMap","heights","height","summary","buildColumns","allColumns","baseColumns","columnMap","existedTypes","getFixedOrder","fixed","build","_columns","result","prev","next","rowColumns","isNull","endIndex","validType","columnTypes","length","getLast","rowCount","span","j","sorters","filters","normalColumns","rightFixedColumns","leftFixedColumns","toFalse","parseSorter","parseFilter","TABLE_HEAD_PREFIX","rowKey","prop","TABLE_FOOT_PREFIX","prevKeys","aboveSummaries","belowSummaries","summaryMap","field","oldDataKey","idMaps","childRow","clonedData","dataKey","keyConfig","disabledTree","oldDataMap","hidden","childrenKey","checkedKey","heightKey","expandedKey","treeExpandedKey","parseRow","origin","parent","checked","expanded","treeExpanded","toNumber","children","computePartial","walkTree","depth","currentPage","pageSize","rowClass","rowStyle","rowAttrs","cellClass","cellStyle","cellAttrs","headClass","headStyle","headAttrs","footClass","footStyle","footAttrs","resized","sidePadding","hasWidthColumns","flexColumns","flexWidth","flexColumnCount","flexUnitWidth","usedWidth","columnKey","draggable","scroll","able","virtual","locale","theme","dragging","disabled","noCascaded","resizable","resizing","left","renderer","spanFn","padding","filter","ellipsis","locked","scrolling","type","sorter","active","option","updateCheckedUpward","updateCheckedDown","useCascadedChecked","computeChecked","rowList","single","checkedAll","partialCheckedAll","includeDisabled","hasChecked","hasNotChecked","partial","start","end","force","startRow","endRow","heightBITree","virtualData","prevData","added","removed","underRows","disableOthers","filterOptions","raw","order","method","custom","multiple","meta","deepClone","formattedOptions","isActive","isSingle","usedFilter","usedData","usedFilterCount","isFilter","usedSorter","_key","sortByProps","lastColumnWidth","keys","newWidth","tableWidth","deltaWidth","lastKey","totalWidth","toFixed","cellSpanMap","collapseMap","rowIndex","columnIndex","getSpan","prefix","masterKey","collapsed","colSpan","rowSpan","masterSet","columnFixed","right","len1","len2","boundRange","colIndex","treeRowData","mapTree","keyOrData"],"mappings":"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"}