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