@aimerthyr/virtual-table 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -4,7 +4,6 @@ import { ColumnFiltersState } from '@tanstack/vue-table';
4
4
  import { ColumnPinningState } from '@tanstack/vue-table';
5
5
  import { ColumnSizingState } from '@tanstack/vue-table';
6
6
  import { ComponentCustomProps } from 'vue';
7
- import { CSSProperties } from 'vue';
8
7
  import { ExpandedState } from '@tanstack/vue-table';
9
8
  import { HTMLAttributes } from 'vue';
10
9
  import { PaginationState } from '@tanstack/vue-table';
@@ -43,7 +42,7 @@ declare const _default: <TData extends VTableData>(__VLS_props: NonNullable<Awai
43
42
  defaultColumnPinning?: ColumnPinningState;
44
43
  defaultColumnSizing?: ColumnSizingState;
45
44
  } & VTableProps<TData>) & Partial<{}>> & PublicProps;
46
- expose(exposed: ShallowUnwrapRef<VTableInstance>): void;
45
+ expose(exposed: ShallowUnwrapRef<VTableInstance<TData>>): void;
47
46
  attrs: any;
48
47
  slots: any;
49
48
  emit: ((evt: "update:defaultFilter", value: ColumnFiltersState) => void) & ((evt: "update:defaultSort", value: SortingState) => void) & ((evt: "update:defaultPagination", value: PaginationState) => void) & ((evt: "update:defaultExpanded", value: ExpandedState) => void) & ((evt: "update:defaultSelection", value: RowSelectionState) => void) & ((evt: "update:defaultColumnPinning", value: ColumnPinningState) => void) & ((evt: "update:defaultColumnSizing", value: ColumnSizingState) => void);
@@ -53,6 +52,9 @@ declare const _default: <TData extends VTableData>(__VLS_props: NonNullable<Awai
53
52
  export { _default as VTable }
54
53
  export default _default;
55
54
 
55
+ /** 默认主题配置 */
56
+ export declare const defaultThemeConfig: VTableThemeConfig;
57
+
56
58
  /** 展开列 */
57
59
  export declare const EXPAND_COLUMN_KEY = "EXPAND_COLUMN_KEY";
58
60
 
@@ -62,24 +64,46 @@ export declare const EXPAND_ROW_DATA_INDEX = "_expandChildren";
62
64
  /** 是否是展开行 */
63
65
  export declare const EXPAND_ROW_KEY = "_isExpandRow";
64
66
 
65
- /** 表格默认样式 */
66
- export declare const TABLE_DEFAULT_STYLE: CSSProperties;
67
+ export declare interface VTableBodyCellProps<TData = any> {
68
+ columnKey: string;
69
+ column: VTableColumn;
70
+ row: TData;
71
+ rowIndex: number;
72
+ }
73
+
74
+ /** 表体样式配置 */
75
+ export declare interface VTableBodyStyle {
76
+ /** 表体字体颜色 */
77
+ color: string;
78
+ /** 表体背景颜色 */
79
+ backgroundColor: string;
80
+ /** 表体内边距 */
81
+ padding: number;
82
+ }
67
83
 
68
- export declare type VTableBorderConfig = {
84
+ export declare interface VTableBorderConfig {
69
85
  /** 是否显示边框 */
70
86
  enabled?: boolean;
71
87
  /** 边框样式 */
72
88
  borderStyle?: 'solid' | 'dashed';
73
89
  /** 边框颜色 */
74
90
  borderColor?: string;
75
- };
91
+ }
92
+
93
+ /** 边框样式配置 */
94
+ export declare interface VTableBorderStyle {
95
+ /** 边框样式 */
96
+ borderStyle: 'solid' | 'dashed';
97
+ /** 边框颜色 */
98
+ borderColor: string;
99
+ }
76
100
 
77
101
  /** 表格状态(分页,排序,筛选) */
78
- export declare type VTableChangeState = {
102
+ export declare interface VTableChangeState {
79
103
  pagination: VTablePaginationState;
80
104
  sortList: VTableSortingState;
81
105
  filterList: VTableColumnFiltersState;
82
- };
106
+ }
83
107
 
84
108
  /**
85
109
  * Checkbox 自定义组件接口定义
@@ -117,14 +141,19 @@ export declare interface VTableColumn<TData = any> {
117
141
  columnMaxWidth?: number;
118
142
  /** 列宽最小值 (默认 50px) */
119
143
  columnMinWidth?: number;
120
- /** 可自行拓展字段 */
121
- [key: string]: any;
144
+ /** 子列(用于表头分组) */
145
+ columnChildren?: VTableColumn<TData>[];
122
146
  }
123
147
 
148
+ /** 筛选状态 */
124
149
  export declare type VTableColumnFiltersState = ColumnFiltersState;
125
150
 
151
+ /** 固定列状态 */
126
152
  export declare type VTableColumnPinningState = ColumnPinningState;
127
153
 
154
+ /** 列宽状态 */
155
+ export declare type VTableColumnSizingState = ColumnSizingState;
156
+
128
157
  export declare type VTableData<T = Record<string, any>> = T & {
129
158
  /** 当前行是否展开 */
130
159
  [EXPAND_ROW_KEY]?: boolean;
@@ -141,7 +170,7 @@ export declare const vTableDefaultProps: {
141
170
  loading?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
142
171
  fixedHeader?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
143
172
  enableSortingRemoval?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
144
- borderConfig?: ((props: VTableProps<any>) => VTableBorderConfig) | undefined;
173
+ bordered?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
145
174
  rowSelectionConfig?: ((props: VTableProps<any>) => VTableRowSelectionConfig<any>) | undefined;
146
175
  loadMoreConfig?: ((props: VTableProps<any>) => VTableLoadMoreConfig) | undefined;
147
176
  paginationConfig?: ((props: VTableProps<any>) => VTablePaginationConfig) | undefined;
@@ -151,31 +180,61 @@ export declare const vTableDefaultProps: {
151
180
  adaptiveColumnWidth?: number | ((props: VTableProps<any>) => number) | undefined;
152
181
  defaultExpandAllRows?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
153
182
  columnResizeMode?: "onChange" | "onEnd" | ((props: VTableProps<any>) => "onChange" | "onEnd") | undefined;
154
- customRow?: ((row: any, rowIndex: number) => HTMLAttributes) | ((props: VTableProps<any>) => (row: any, rowIndex: number) => HTMLAttributes) | undefined;
155
- customHeaderCell?: ((column: VTableColumn, colIndex: number) => ThHTMLAttributes) | ((props: VTableProps<any>) => (column: VTableColumn, colIndex: number) => ThHTMLAttributes) | undefined;
156
- customCell?: ((column: VTableColumn, colIndex: number) => TdHTMLAttributes) | ((props: VTableProps<any>) => (column: VTableColumn, colIndex: number) => TdHTMLAttributes) | undefined;
183
+ fixedFooter?: boolean | ((props: VTableProps<any>) => boolean) | undefined;
184
+ themeConfig?: ((props: VTableProps<any>) => VTableThemeConfig) | undefined;
185
+ defaultCheckboxColumnWidth?: number | ((props: VTableProps<any>) => number) | undefined;
186
+ defaultExpandColumnWidth?: number | ((props: VTableProps<any>) => number) | undefined;
187
+ customRowAttributes?: ((row: any, rowIndex: number) => HTMLAttributes) | ((props: VTableProps<any>) => (row: any, rowIndex: number) => HTMLAttributes) | undefined;
188
+ customHeaderCellAttributes?: ((column: VTableColumn, colIndex: number) => ThHTMLAttributes) | ((props: VTableProps<any>) => (column: VTableColumn, colIndex: number) => ThHTMLAttributes) | undefined;
189
+ customCellAttributes?: ((row: any, column: VTableColumn, rowIndex: number, colIndex: number) => TdHTMLAttributes | null) | ((props: VTableProps<any>) => (row: any, column: VTableColumn, rowIndex: number, colIndex: number) => TdHTMLAttributes | null) | undefined;
157
190
  onTableChange?: ((data: VTableChangeState) => void) | ((props: VTableProps<any>) => (data: VTableChangeState) => void) | undefined;
158
191
  onScrollToBottom?: (() => void) | ((props: VTableProps<any>) => () => void) | undefined;
159
192
  onExpandedRowsChange?: ((expandState: VTableExpandedState) => void) | ((props: VTableProps<any>) => (expandState: VTableExpandedState) => void) | undefined;
193
+ onColumnSizingChange?: ((columnSizing: VTableColumnSizingState) => void) | ((props: VTableProps<any>) => (columnSizing: VTableColumnSizingState) => void) | undefined;
160
194
  };
161
195
 
196
+ /** 展开状态 */
162
197
  export declare type VTableExpandedState = ExpandedState;
163
198
 
199
+ /** 展开图标自定义组件接口定义 */
200
+ export declare interface VTableExpandIconProps {
201
+ expand: boolean;
202
+ onExpandChange: () => void;
203
+ }
204
+
205
+ /** 表头样式配置 */
206
+ export declare interface VTableHeaderStyle {
207
+ /** 表头字体颜色 */
208
+ color: string;
209
+ /** 表头背景颜色 */
210
+ backgroundColor: string;
211
+ /** 表头圆角大小 */
212
+ borderRadius: number;
213
+ /** 表头分割线颜色 */
214
+ splitColor: string;
215
+ /** 表头图标颜色 */
216
+ headerIconColor: string;
217
+ /** 表头内边距 */
218
+ padding: number;
219
+ }
220
+
164
221
  /** VTable 实例类型定义 */
165
- export declare interface VTableInstance {
166
- /** 滚动到指定行 */
167
- scrollToIndex: (index: number) => void;
222
+ export declare interface VTableInstance<TData = any> {
223
+ /** tanstack 表格实例 */
224
+ tanstackTable: Table<TData>;
225
+ /** 滚动到指定下标(从 0 开始,默认是平滑滚动) */
226
+ scrollToIndex: (index: number, behavior?: 'auto' | 'smooth') => void;
168
227
  }
169
228
 
170
- export declare type VTableLoadMoreConfig = {
229
+ export declare interface VTableLoadMoreConfig {
171
230
  /** 是否显示"没有更多了"提示 */
172
231
  showNoMore?: boolean;
173
232
  /** 自定义"没有更多了"文本 */
174
233
  noMoreText?: string;
175
- };
234
+ }
176
235
 
177
- export declare type VTablePaginationConfig = {
178
- /** 总数(必须要传) */
236
+ export declare interface VTablePaginationConfig {
237
+ /** 总数(必须要传, 客户端分页可以不传,自动以传入的 data 长度作为总数) */
179
238
  total: number;
180
239
  /** 是否开启分页 */
181
240
  enabled?: boolean;
@@ -185,7 +244,7 @@ export declare type VTablePaginationConfig = {
185
244
  mode?: 'client' | 'server';
186
245
  /** 分页器额外属性(如果你自己定义了分页器组件,则用于回传给你自己定义的组件) */
187
246
  paginationExtraProps?: Record<string, any>;
188
- };
247
+ }
189
248
 
190
249
  /**
191
250
  * Pagination 自定义组件接口定义
@@ -201,6 +260,7 @@ export declare interface VTablePaginationProps {
201
260
  onPageChange: (pageIndex: number, pageSize: number) => void;
202
261
  }
203
262
 
263
+ /** 分页状态 */
204
264
  export declare type VTablePaginationState = PaginationState;
205
265
 
206
266
  /**
@@ -233,8 +293,8 @@ export declare interface VTableProps<TData = any> {
233
293
  fixedHeader?: boolean;
234
294
  /** 是否允许取消排序 */
235
295
  enableSortingRemoval?: boolean;
236
- /** 边框样式配置 */
237
- borderConfig?: VTableBorderConfig;
296
+ /** 是否显示边框 */
297
+ bordered?: boolean;
238
298
  /** 选择行功能配置 */
239
299
  rowSelectionConfig?: VTableRowSelectionConfig<TData>;
240
300
  /** 加载更多配置 */
@@ -245,7 +305,7 @@ export declare interface VTableProps<TData = any> {
245
305
  treeConfig?: VTableTreeConfig;
246
306
  /** 是否启用展开行功能 */
247
307
  enableExpandRow?: boolean;
248
- /** 是否启用 hover 高亮 */
308
+ /** 是否启用行 hover 高亮 */
249
309
  enableRowHover?: boolean;
250
310
  /** 自适应列宽(当列数很多时,会出现横向滚动条,那么就需要设置自适应列的最小列宽) */
251
311
  adaptiveColumnWidth?: number;
@@ -253,60 +313,69 @@ export declare interface VTableProps<TData = any> {
253
313
  defaultExpandAllRows?: boolean;
254
314
  /** 列宽调整模式 */
255
315
  columnResizeMode?: 'onChange' | 'onEnd';
316
+ /** 是否固定表尾(表尾不随着滚动) */
317
+ fixedFooter?: boolean;
318
+ /** 自定义主题配置(可覆盖默认配置) */
319
+ themeConfig?: VTableThemeConfig;
320
+ /** 默认 checkbox 列宽 */
321
+ defaultCheckboxColumnWidth?: number;
322
+ /** 默认展开列的列宽 */
323
+ defaultExpandColumnWidth?: number;
256
324
  /** 自定义数据行属性 */
257
- customRow?: (row: TData, rowIndex: number) => HTMLAttributes;
325
+ customRowAttributes?: (row: TData, rowIndex: number) => HTMLAttributes;
258
326
  /** 自定义表头单元格属性 */
259
- customHeaderCell?: (column: VTableColumn, colIndex: number) => ThHTMLAttributes;
260
- /** 自定义表体单元格属性 */
261
- customCell?: (column: VTableColumn, colIndex: number) => TdHTMLAttributes;
327
+ customHeaderCellAttributes?: (column: VTableColumn, colIndex: number) => ThHTMLAttributes;
328
+ /**
329
+ * 自定义表体单元格属性(包括合并单元格)
330
+ * 当返回的属性中 colspan 或 rowspan 为 0 时,该单元格不会被渲染
331
+ */
332
+ customCellAttributes?: (row: TData, column: VTableColumn, rowIndex: number, colIndex: number) => TdHTMLAttributes | null;
262
333
  /** 表格状态变化(筛选,排序,分页) */
263
334
  onTableChange?: (data: VTableChangeState) => void;
264
335
  /** 滚动到表格底部 */
265
336
  onScrollToBottom?: () => void;
266
337
  /** 展开行变化回调 */
267
338
  onExpandedRowsChange?: (expandState: VTableExpandedState) => void;
339
+ /** 列宽调整回调 */
340
+ onColumnSizingChange?: (columnSizing: VTableColumnSizingState) => void;
268
341
  }
269
342
 
270
343
  export declare type VTableRowKey<TData> = string | number | ((row: TData) => string | number);
271
344
 
272
- export declare type VTableRowSelectionConfig<TData> = {
345
+ export declare interface VTableRowSelectionConfig<TData> {
273
346
  /** 是否开启 checkbox 列 */
274
347
  enabled?: boolean;
275
348
  /** 判断该行是否禁用选择 */
276
349
  getRowCheckDisabled?: (row: TData) => boolean;
277
350
  /** 选择行变化回调 */
278
351
  onChange?: (selectedRows: TData[]) => void;
279
- };
352
+ }
280
353
 
354
+ /** 选择状态 */
281
355
  export declare type VTableSelectionState = RowSelectionState;
282
356
 
283
357
  /** slots 类型定义 */
284
358
  export declare interface VTableSlots<TData = any> {
285
359
  /** 自定义头部渲染 */
286
- customHeader?: (data: {
360
+ customHeader?: (props: {
287
361
  columns: VTableColumn[];
288
362
  table: Table<TData>;
289
363
  }) => VNode_2;
290
364
  /** 自定义单元格 */
291
- bodyCell?: (data: {
292
- columnKey: string;
293
- column: VTableColumn;
294
- row: TData;
295
- rowIndex: number;
296
- }) => VNode_2;
365
+ bodyCell?: (props: VTableBodyCellProps<TData>) => VNode_2;
297
366
  /** 自定义列头 */
298
- headerCell?: (data: {
367
+ headerCell?: (props: {
299
368
  columnKey: string;
300
369
  column: VTableColumn;
301
370
  }) => VNode_2;
302
371
  /** 自定义筛选图标 */
303
- customFilterIcon?: (data: {
372
+ customFilterIcon?: (props: {
304
373
  columnKey: string;
305
374
  filtered: boolean;
306
375
  column: VTableColumn;
307
376
  }) => VNode_2;
308
377
  /** 自定义筛选下拉 */
309
- customFilterDropdown?: (data: {
378
+ customFilterDropdown?: (props: {
310
379
  confirm: () => void;
311
380
  reset: () => void;
312
381
  setFilterValue: (value: any) => void;
@@ -314,16 +383,11 @@ export declare interface VTableSlots<TData = any> {
314
383
  filterModelValue: any;
315
384
  }) => VNode_2;
316
385
  /** 自定义展开行 */
317
- expandedRowRender?: (data: {
386
+ expandedRowRender?: (props: {
318
387
  row: TData;
319
388
  }) => VNode_2;
320
389
  /** 自定义 Popover */
321
- customPopover?: (props: {
322
- open: boolean;
323
- onOpenChange: (value: boolean) => void;
324
- trigger: () => VNode_2;
325
- content: () => VNode_2;
326
- }) => VNode_2;
390
+ customPopover?: (props: VTablePopoverProps) => VNode_2;
327
391
  /** 自定义分页器 */
328
392
  customPagination?: (props: VTablePaginationProps) => VNode_2;
329
393
  /** 自定义 checkbox */
@@ -332,18 +396,58 @@ export declare interface VTableSlots<TData = any> {
332
396
  customEmpty?: () => VNode_2;
333
397
  /** 自定义 loading 图标 */
334
398
  customLoadingIcon?: () => VNode_2;
399
+ /** 自定义加载没有更多区域 */
400
+ customLoadNoMore?: () => VNode_2;
401
+ /** 自定义表尾 */
402
+ customFooter?: () => VNode_2;
403
+ /** 自定义展开图标 */
404
+ customExpandIcon?: (props: VTableExpandIconProps) => VNode_2;
405
+ /** 自定义组件图标 */
406
+ customSorterIcon?: (props: VTableSorterIconProps) => VNode_2;
335
407
  [key: string]: ((...args: any[]) => VNode_2) | undefined;
336
408
  }
337
409
 
410
+ /** 排序图标自定义组件接口定义 */
411
+ export declare interface VTableSorterIconProps {
412
+ sort: 'asc' | 'desc' | null;
413
+ }
414
+
415
+ /** 排序状态 */
338
416
  export declare type VTableSortingState = SortingState;
339
417
 
340
- export declare type VTableTreeConfig = {
418
+ /** 表格主题配置 */
419
+ export declare interface VTableThemeConfig {
420
+ /** 主色 */
421
+ primaryColor?: string;
422
+ /** 表头样式 */
423
+ header?: Partial<VTableHeaderStyle>;
424
+ /** 表体样式 */
425
+ body?: Partial<VTableBodyStyle>;
426
+ /** 边框样式 */
427
+ border?: Partial<VTableBorderStyle>;
428
+ /** 行 hover 颜色 */
429
+ rowHoverColor?: string;
430
+ /** z-index 层级配置 */
431
+ zIndex?: VTableZIndexConfig;
432
+ }
433
+
434
+ export declare interface VTableTreeConfig {
341
435
  /** 是否启用树形结构 */
342
436
  enabled?: boolean;
343
437
  /** 子节点字段名,默认为 'children' */
344
438
  childrenKey?: string;
345
439
  /** 缩进距离 */
346
440
  indentSize?: number;
347
- };
441
+ }
442
+
443
+ /** z-index 层级配置 */
444
+ export declare interface VTableZIndexConfig {
445
+ /** 固定列(左右固定) */
446
+ pinnedColumn?: number;
447
+ /** 固定表头 */
448
+ fixedHeader?: number;
449
+ /** 固定表尾 */
450
+ fixedFooter?: number;
451
+ }
348
452
 
349
453
  export { }