{"version":3,"file":"store.cjs","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, typeof column.width === 'string' ? 100 : 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    width = toNumber(width)\n\n    const { columns, widths, resized, sidePadding } = state\n\n    const hasWidthColumns: ColumnWithKey[] = []\n    const flexColumns: ColumnWithKey[] = []\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      const { minWidth = 0, maxWidth = Infinity } = column\n\n      if (resized.has(column.key)) {\n        flexWidth -= widths.get(column.key)!\n        hasWidthColumns.push(column)\n      } else if (column.width) {\n        if (typeof column.width === 'string') {\n          const percent = boundRange(toNumber(column.width), 0, 100)\n\n          if (percent) {\n            const fixedWidth = Math.round(boundRange((width * percent) / 100, minWidth, maxWidth))\n\n            flexWidth -= fixedWidth\n            widths.set(column.key, fixedWidth)\n            hasWidthColumns.push(column)\n          } else {\n            flexColumns.push(column)\n          }\n        } else {\n          flexWidth -= boundRange(column.width, minWidth, maxWidth)\n          hasWidthColumns.push(column)\n        }\n      } else {\n        flexColumns.push(column)\n      }\n    }\n\n    const flexColumnCount = flexColumns.length\n    const flexWidths = distributeWidths(flexColumns, flexWidth)\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      const width = Math[i % 2 ? 'ceil' : 'floor'](flexWidths[i])\n\n      if (i < flexColumnCount - 1) {\n        usedWidth += width\n      }\n\n      widths.set(column.key, width)\n    }\n\n    if (flexColumnCount && flexWidth >= usedWidth + getLast(flexWidths)!) {\n      widths.set(getLast(flexColumns)!.key, flexWidth - usedWidth)\n    }\n\n    state.width = width\n  }\n\n  function distributeWidths(columns: ColumnWithKey[], totalWidth: number): number[] {\n    const count = columns.length\n    const baseWidth = Math.max(totalWidth / count, 100)\n\n    const widths = columns.map(col => {\n      let w = baseWidth\n      if (col.minWidth != null) w = Math.max(w, col.minWidth)\n      if (col.maxWidth != null) w = Math.min(w, col.maxWidth)\n      return w\n    })\n\n    const currentTotal = widths.reduce((a, b) => a + b, 0)\n    let delta = totalWidth - currentTotal\n\n    const canGrow = (i: number) => columns[i].maxWidth == null || widths[i] < columns[i].maxWidth!\n    const canShrink = (i: number) => columns[i].minWidth == null || widths[i] > columns[i].minWidth!\n\n    const epsilon = 0.1\n    let adjusted = false\n\n    while (Math.abs(delta) > epsilon) {\n      const adjustableIndices = widths\n        .map((_, i) => {\n          if (delta > 0 && canGrow(i)) return i\n          if (delta < 0 && canShrink(i)) return i\n          return -1\n        })\n        .filter(i => i !== -1)\n\n      if (adjustableIndices.length === 0) {\n        adjusted = false\n        break\n      }\n\n      const adjustment = delta / adjustableIndices.length\n      for (const i of adjustableIndices) {\n        const old = widths[i]\n        let next = old + adjustment\n\n        if (columns[i].minWidth != undefined) next = Math.max(next, columns[i].minWidth!)\n        if (columns[i].maxWidth != undefined) next = Math.min(next, columns[i].maxWidth!)\n\n        delta -= next - old\n        widths[i] = next\n      }\n\n      adjusted = true\n    }\n\n    // delta > 0 且无法再调整时，强行补给最后一列\n    if (!adjusted && delta > epsilon) {\n      widths[count - 1] += delta\n    }\n\n    return widths\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, columnMap, 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      const column = columnMap.get(key) as ColumnWithKey\n\n      if (!column) continue\n\n      const width =\n        length === 1 ? Math.round(deltaWidth) : Math[i % 2 ? 'ceil' : 'floor'](deltaWidth)\n      const { minWidth = 0, maxWidth = Infinity } = column\n\n      resized.add(key)\n      widths.set(key, boundRange(width, minWidth, maxWidth))\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","minWidth","maxWidth","percent","boundRange","fixedWidth","flexColumnCount","flexWidths","distributeWidths","usedWidth","totalWidth","count","baseWidth","col","w","currentTotal","a","b","delta","canGrow","canShrink","epsilon","adjusted","adjustableIndices","_","adjustment","old","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","toFixed","cellSpanMap","collapseMap","rowIndex","columnIndex","getSpan","prefix","masterKey","collapsed","colSpan","rowSpan","masterSet","columnFixed","right","len1","len2","colIndex","treeRowData","mapTree","keyOrData"],"mappings":"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"}