import { ComputedRef, InjectionKey, Slots } from 'vue'; import { LocaleName, ThemePresetName, VTableGuildTableLocale } from '@vtable-guild/core'; import { CellAdditionalProps, ColumnGroupType, ColumnType, Key, RowSelection, SortOrder, TableLayout, TableSticky } from './types'; import { Expandable } from './types/table'; import { TablePresetConfig } from './preset-config'; import { FixedOffset } from './composables/useScroll'; import { FlattenRow } from './composables/useTreeData'; import { SelectionState } from './composables/useSelection'; import { SummaryFixed } from './components/VTableSummary'; /** 子组件主题 slot class 映射 */ export interface SubThemeSlots { thSortable: string; sortButton: string; sortIconDown: string; sortAreaOuter: string; sortAreaWrapper: string; sortAreaTitle: string; filterIconWrapper: string; filterIcon: string; filterDropdown: string; filterDropdownList: string; filterDropdownItem: string; filterDropdownItemSelected: string; filterDropdownItemHover: string; filterDropdownActions: string; filterDropdownSearch: string; filterDropdownSearchField: string; filterDropdownSearchIcon: string; filterDropdownSearchInput: string; filterDropdownSwitcher: string; filterDropdownSwitcherExpanded: string; filterDropdownSwitcherCollapsed: string; filterDropdownSwitcherNoop: string; filterDropdownContentWrapper: string; filterDropdownTreeWrapper: string; filterDropdownTreeList: string; filterDropdownTreeItem: string; filterDropdownTreeContentWrapper: string; filterDropdownTreeItemSelected: string; filterDropdownTreeCheckAll: string; filterDropdownListEmpty: string; emptyWrapper: string; emptyIcon: string; emptyText: string; loadingSpinner: string; tdSelected: string; tdSelectedHover: string; selectionDropdown: string; selectionDropdownItem: string; selectionExtra: string; summaryRow: string; summaryCell: string; headerWrapper: string; bodyWrapper: string; fixedCell: string; fixedDividerLeft: string; fixedDividerRight: string; fixedShadowLeft: string; fixedShadowRight: string; fixedShadowLeftHidden: string; fixedShadowRightHidden: string; expandIcon: string; expandIconExpanded: string; expandIconCollapsed: string; expandIconSpaced: string; expandIconDisabled: string; expandIconSymbol: string; expandIconSymbolExpanded: string; expandIconSymbolCollapsed: string; treeExpandIcon: string; treeExpandIconExpanded: string; treeExpandIconCollapsed: string; treeExpandIconSpaced: string; treeExpandIconDisabled: string; treeExpandIconSymbol: string; treeExpandIconSymbolExpanded: string; treeExpandIconSymbolCollapsed: string; expandedRow: string; expandedRowCell: string; resizeHandle: string; } /** * Table 内部 context,通过 provide/inject 跨层传递。 * * Table.vue 在 setup 阶段 provide 此 context, * 所有后代组件(TableCell、TableHeaderCell 等)通过 inject 获取。 */ export interface TableContext { /** * 用户定义的 bodyCell slot 函数。 * 来自 Table.vue 的 useSlots().bodyCell。 */ bodyCell?: Slots['bodyCell']; /** * 用户定义的 headerCell slot 函数。 * 来自 Table.vue 的 useSlots().headerCell。 */ headerCell?: Slots['headerCell']; /** * 用户定义的 empty slot 函数。 */ empty?: Slots['empty']; /** 获取某列的当前排序方向 */ getSortOrder?: (column: ColumnType>) => SortOrder; /** 切换某列的排序方向 */ toggleSortOrder?: (column: ColumnType>) => void; /** 获取某列的当前筛选值 */ getFilteredValue?: (column: ColumnType>) => (string | number | boolean)[]; /** 确认筛选 */ confirmFilter?: (column: ColumnType>, values: (string | number | boolean)[]) => void; /** 重置筛选 */ resetFilter?: (column: ColumnType>) => void; /** 自定义筛选下拉菜单 slot */ customFilterDropdown?: Slots['customFilterDropdown']; /** 自定义筛选图标 slot */ customFilterIcon?: Slots['customFilterIcon']; /** 表级别 showSorterTooltip 配置 */ showSorterTooltip?: ComputedRef; /** 子组件主题 slot class 映射 */ subThemeSlots?: ComputedRef; /** 当前主题预设行为配置 */ presetConfig?: ComputedRef; /** 当前主题预设 */ themePreset?: ComputedRef; /** 当前激活语言标识 */ localeName?: ComputedRef; /** 表格最终生效 locale */ locale?: ComputedRef; /** 行选择配置 */ rowSelection?: () => RowSelection | undefined; /** 判断某行是否选中 */ isSelected?: (key: Key) => boolean; /** 判断某行是否禁用 */ isDisabledRow?: (record: Record) => boolean; /** 获取某行选择状态(含半选) */ getSelectionState?: (record: Record, index: number) => SelectionState; /** 切换某行选中状态 */ toggleRow?: (record: Record, index: number, nativeEvent?: MouseEvent) => void; /** 全选/取消全选 */ toggleAll?: (selected: boolean) => void; /** 全选状态 */ allCheckedState?: () => 'all' | 'partial' | 'none'; /** 获取行 key */ getRowKey?: (record: Record, index: number) => Key; /** 反选当前可见可选行 */ invertSelection?: () => void; /** 清空所有选中 */ clearSelection?: () => void; /** 获取所有可选行的 key */ getChangeableRowKeys?: () => Key[]; /** 固定列偏移量映射 */ fixedOffsets?: ComputedRef>; /** 滚动状态(是否在起始/末端) */ scrollState?: ComputedRef<{ atStart: boolean; atEnd: boolean; }>; /** 是否开启 bordered 模式 */ bordered?: ComputedRef; /** 表格布局模式 */ tableLayout?: ComputedRef; /** sticky 配置 */ sticky?: ComputedRef; /** 叶子列总数(用于分组表头判断是否为真正的最后一列) */ leafColumnCount?: ComputedRef; /** 解析 body 行 props */ getRowProps?: (record: Record, index: number) => CellAdditionalProps | undefined; /** 解析 body 行 class */ getRowClassName?: (record: Record, index: number) => string; /** 解析表头行 props */ getHeaderRowProps?: (columns: Array> | ColumnGroupType>>, index: number) => CellAdditionalProps | undefined; /** 解析列标题 */ getColumnTitle?: (column: ColumnType> | ColumnGroupType>) => unknown; /** 下拉层容器 */ getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement; /** 单元格文本转换 */ transformCellText?: (options: { text: unknown; column: ColumnType>; record: Record; index: number; }) => unknown; /** 展开行配置 */ expandable?: () => Expandable | undefined; /** 判断某行是否展开 */ isExpanded?: (key: Key) => boolean; /** 切换展开状态 */ toggleExpand?: (record: Record, index: number) => void; /** 判断行是否可展开 */ isRowExpandable?: (record: Record) => boolean; /** 列宽覆写映射 */ columnWidths?: Record; /** 启动列宽拖拽 */ startResize?: (column: ColumnType>, colIndex: number, event: PointerEvent) => void; /** 是否正在拖拽 */ isResizing?: () => boolean; /** 扁平化后的叶子列列表(含选择列/展开列),用于 SummaryCell 通过 index 映射 */ displayColumns?: ComputedRef>[]>; /** 由 VTableSummary 组件调用,注册 summary 的 fixed 模式 */ registerSummaryFixed?: (fixed: SummaryFixed | false) => void; /** 是否为树形数据 */ isTreeData?: ComputedRef; /** 扁平化后的树形行数据 */ treeFlattenData?: ComputedRef; /** 切换树节点展开状态 */ toggleTreeExpand?: (record: Record, index: number) => void; /** 判断树节点是否展开 */ isTreeExpanded?: (key: Key) => boolean; /** 树形缩进宽度 */ treeIndentSize?: ComputedRef; } /** * Table context 的 injection key。 */ export declare const TABLE_CONTEXT_KEY: InjectionKey; //# sourceMappingURL=context.d.ts.map