用途:为 TanStack Table Core 提供矩形单元格区域选择能力,基于 core 与 table-features 构建。选择状态不是逐单元格映射,也不是位置索引,而是按数组顺序排列的矩形操作日志,每项由 anchor 与 focus 两个角点的行列 id 标识,operation 省略时默认 include,exclude 从前序结果中减去。
主要能力:通过 tableFeatures({ cellSelectionFeature }) 启用;用 cell.getSelectionStartHandler() 与 cell.getSelectionExtendHandler() 绑定 mousedown 和 mouseenter 实现拖拽;默认事件谓词下 Shift 扩展当前操作,Ctrl/Cmd 在起始单元格未选中时开始包含、已选中时开始排除,可用 enableMultiCellRangeSelection: false 关闭。可用 table.selectCellRange(range, { mode }) 以 replace/include/exclude 编程式应用;用 table.getSelectedCellCount()、table.getCellSelectionBounds()、table.getSelectedCellRangesData() 读取解析后的最终正区域;用 cell.getSelectionEdges() 绘制连续轮廓。键盘导航需外部驱动,调用 moveCellSelection、extendCellSelection、setFocusedCell、selectAllCells、resetCellSelection。
限制与注意:cellSelection 保存的是操作日志而非最终区域,成员判断应使用 cell.getIsSelected();范围锚定角点 id,排序、过滤、列重排会重算中间内容,可能扩展到用户未选的列或行,必要时用 table.resetCellSelection(true) 重置;隐藏角点所在列会使范围失效但不删除;数据变化默认重置选择,可用 autoResetCellSelection: false 关闭;表格只返回原始值,TSV 序列化需在应用层实现;border-collapse 表格上建议用 box-shadow 绘制边框;拖拽更新时建议按行订阅以避免全表重渲染。API 细节可查看 node_modules/@tanstack/table-core/dist/features/cell-selection/。