stk-table-vue 0.6.12 → 0.6.13

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/README.md CHANGED
@@ -1,201 +1,213 @@
1
- # StkTable (Sticky Table)
2
- ![NPM License](https://img.shields.io/npm/l/stk-table-vue)
3
- ![NPM Version](https://img.shields.io/npm/v/stk-table-vue)
4
- ![NPM Type Definitions](https://img.shields.io/npm/types/stk-table-vue)
5
- ![NPM Downloads](https://img.shields.io/npm/dw/stk-table-vue)
6
-
7
- Vue3 简易虚拟滚动表格。用于实时数据展示,新数据行高亮渐暗动效。
8
-
9
- Vue2.7支持引入源码(**ts**)使用。
10
-
11
- [Stk Table Vue Doc](https://ja-plus.github.io/stk-table-vue/)
12
-
13
- repo(求 star🌟):
14
- - [Github](https://github.com/ja-plus/stk-table-vue)
15
- - [Gitee](https://gitee.com/japlus/stk-table-vue) 🇨🇳
16
-
17
- [<span style="font-size: 16px;font-weight: bold;">Online Demo</span>](https://stackblitz.com/edit/vitejs-vite-ad91hh?file=src%2FDemo%2Findex.vue)
18
-
19
- ## Feature TODO:
20
- * [x] 高亮行,单元格。
21
- - [x] 使用 `Web Animations API` 实现高亮。(`v0.3.4` 变更为默认值)
22
- - [x] 支持配置高亮参数(持续时间,颜色,频率)。(`v0.2.9`)
23
- - [x] `setHighlightDimRow`/`setHighlightCellRow`支持自定义高亮css类名。(`v0.2.9`)
24
- * [x] 虚拟列表。
25
- - [x] 纵向。
26
- - [x] 横向(必须设置列宽)。
27
- - [x] 支持不定行高。(`v0.6.0`)
28
- * [x] 列固定。
29
- - [x] 固定列阴影。
30
- - [x] 多级表头固定列阴影。
31
- - [x] sticky column 动态计算阴影位置。(`v0.4.0`)
32
- * [x] 行展开。(`v0.5.0`)
33
- * [x] 行拖动。(`v0.5.0`)
34
- * [] 列筛选。
35
- * [x] 斑马纹。
36
- * [x] 拖动更改列顺序。
37
- * [x] 拖动调整列宽。
38
- * [x] 排序
39
- - [x] 支持配置 `null` | `undefined` 永远排最后。
40
- - [x] 支持配置 string 使用 `String.prototype.localCompare` 排序。
41
- * [x] 多级表头。
42
- - [] 横向虚拟滚动。
43
- * [x] 支持table-layout: fixed 配置。
44
- * [x] 鼠标悬浮在表格上,键盘滚动虚拟表格。
45
- - [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight`/`PageUp`/ `PageDown` 按键支持。
46
- * [] 非虚拟滚动时,大数据分批加载。
47
- * [x] vue2.7支持(引入源码使用)。
48
- - [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。(`v0.2.0`)
49
- * [x] 支持配置序号列。`StkTableColumn['type']`。(`v0.3.0`)
50
- * [x] `props.cellHover`单元格悬浮样式。(`v0.3.2`)
51
- * [] 惯性滚动优化。
52
-
53
-
54
- ## Usage
55
- > npm install stk-table-vue
56
-
57
- ```html
58
- <script setup>
59
- import { StkTable } from 'stk-table-vue'
60
- import { ref, useTemplateRef } from 'vue'
61
- const stkTableRef = ref<InstanceType<typeof StkTable>>();
62
- // or Vue 3.5 useTemplateRef
63
- const stkTableRef = useTemplateRef('stkTableRef');
64
-
65
- // highlight row
66
- stkTableRef.value.setHighlightDimRow([rowKey],{
67
- method: 'css'|'js'|'animation',// 默认 animation。
68
- className: 'custom-class-name', // method css 时生效。
69
- keyframe: [{backgroundColor:'#aaa'}, {backgroundColor: '#222'}],//same as https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Animations_API/Keyframe_Formats
70
- duration: 2000,// 动画时长。
71
- });
72
- // highlight cell
73
- stkTableRef.value.setHighlightDimCell(rowKey, colDataIndex, {
74
- method: 'css'|'animation',
75
- className:'custom-class-name', // method css 时生效。
76
- keyframe: [{backgroundColor:'#aaa'}, {backgroundColor: '#222'}], // method animation 时生效。
77
- duration: 2000,// 动画时长。
78
- });
79
-
80
- const columns = [
81
- {title: 'name', dataIndex: 'name'},
82
- {title: 'age', dataIndex: 'age'},
83
- {title: 'address', dataIndex: 'address'},
84
- ];
85
-
86
- const dataSource = [
87
- {id: 1, name: 'John', age: 32, address: 'New York'},
88
- {id: 2, name: 'Jim', age: 42, address: 'London'},
89
- {id: 3, name: 'Joe', age: 52, address: 'Tokyo'},
90
- {id: 4, name: 'Jack', age: 62, address: 'Sydney'},
91
- {id: 5, name: 'Jill', age: 72, address: 'Paris'},
92
- ]
93
-
94
- </script>
95
-
96
- <template>
97
- <StkTable ref='stkTableRef' row-key="id" :data-source="dataSource" :columns="columns"></StkTable>
98
- </template>
99
-
100
- ```
101
-
102
- ### Vue2.7 Usage
103
- [在vue2中使用](https://ja-plus.github.io/stk-table-vue/main/start/vue2-usage.html)
104
-
105
- ## Notice
106
- 注意,组件会改动 `props.columns` 中的对象。如果多个组件 `columns` 数组元素存在引用同一个 `StkTableColumn` 对象。则考虑赋值 `columns` 前进行深拷贝。
107
-
108
- ## API
109
- ### Props
110
- [Props 表格配置](https://ja-plus.github.io/stk-table-vue/main/api/table-props.html)
111
-
112
- ### Emits
113
- [Emits 事件](https://ja-plus.github.io/stk-table-vue/main/api/emits.html)
114
-
115
- ### Slots
116
- [Slots 插槽](https://ja-plus.github.io/stk-table-vue/main/api/slots.html)
117
-
118
- ### Expose
119
- [Expose 实例方法](https://ja-plus.github.io/stk-table-vue/main/api/expose.html)
120
-
121
- ### StkTableColumn 列配置
122
- [StkTableColumn 列配置](https://ja-plus.github.io/stk-table-vue/main/api/stk-table-column.html)
123
-
124
- ### setHighlightDimCell & setHighlightDimRow
125
- [高亮使用文档](https://ja-plus.github.io/stk-table-vue/main/api/expose.html#sethighlightdimcell)
126
-
127
-
128
- ### Example
129
- ```vue
130
- <template>
131
- <StkTable
132
- ref="stkTable"
133
- row-key="name"
134
- v-model:columns="columns"
135
- :style="{height:props.height}"
136
- theme='dark'
137
- height='200px'
138
- bordered="h"
139
- :row-height="28"
140
- :show-overflow="false"
141
- :show-header-overflow="false"
142
- :sort-remote="false"
143
- col-resizable
144
- header-drag
145
- virtual
146
- virtual-x
147
- no-data-full
148
- col-resizable
149
- auto-resize
150
- fixed-col-shadow
151
- :col-min-width="10"
152
- :headless="false"
153
- :data-source="dataSource"
154
- @current-change="onCurrentChange"
155
- @row-menu="onRowMenu"
156
- @header-row-menu="onHeaderRowMenu"
157
- @row-click="onRowClick"
158
- @row-dblclick="onRowDblclick"
159
- @sort-change="handleSortChange"
160
- @cell-click="onCellClick"
161
- @header-cell-click="onHeaderCellClick"
162
- @scroll="onTableScroll"
163
- @scroll-x="onTableScrollX"
164
- @col-order-change="onColOrderChange"
165
- />
166
- </template>
167
- <script setup>
168
- import { h, defineComponent } from 'vue';
169
- const columns = [
170
- {
171
- title: 'Name',
172
- dataIndex: 'name',
173
- fixed: 'left',
174
- width: '200px',
175
- headerClassName: 'my-th',
176
- className: 'my-td',
177
- sorter: true,
178
- customHeaderCell: function FunctionalComponent(props){
179
- return h(
180
- 'span',
181
- { style: 'overflow:hidden;text-overflow:ellipsis;white-space:nowrap' },
182
- props.col.title + '(render) text-overflow,',
183
- );
184
- },
185
- customCell: defineComponent({
186
- setup(){
187
- //...
188
- return () => <div></div> // vue jsx
189
- }
190
- })
191
- },
192
- ]
193
- </script>
194
- ```
195
-
196
-
197
- ## Other
198
- * `$*$` 兼容注释
199
-
200
- ### Planed removal APi
201
- * `setHighlightDimRow` 中的 `method="js"`。观察animation Api 是否足够满足使用场景。若足够满足计划在后期移除,并且可以移除 `d3-interpolate` 依赖。
1
+ <p align="center">
2
+ <a href="https://ja-plus.github.io/stk-table-vue/">
3
+ <img src="./docs-src/public/assets/logo.svg" width="152">
4
+ </a>
5
+ <h3 align='center'>Stk Table Vue</h3>
6
+ <p align="center">
7
+ <a href="https://www.npmjs.com/package/stk-table-vue"><img src="https://img.shields.io/npm/v/stk-table-vue"></a>
8
+ <a href="https://www.npmjs.com/package/stk-table-vue"><img src="https://img.shields.io/npm/dw/stk-table-vue"></a>
9
+ <a href="https://github.com/ja-plus/stk-table-vue/stargazers"><img src="https://img.shields.io/github/stars/ja-plus/stk-table-vue.svg"></a>
10
+ <a href="https://raw.githubusercontent.com/ja-plus/stk-table-vue/master/LICENSE"><img src="https://img.shields.io/npm/l/stk-table-vue"></a>
11
+ <a href="https://github.com/ja-plus/stk-table-vue"><img src="https://img.shields.io/npm/types/stk-table-vue"></a>
12
+ </p>
13
+ </p>
14
+
15
+ > StK Table (Sticky Table) 是一个基于Vue 的高性能虚拟列表组件。
16
+ > 用于实时数据展示,数据高亮动效。
17
+
18
+ > Vue2.7支持引入源码(**ts**)使用。
19
+
20
+ ## Doc
21
+ 文档: [Stk Table Vue 高性能虚拟表格](https://ja-plus.github.io/stk-table-vue/)
22
+
23
+ ## Repo:
24
+ - [Github](https://github.com/ja-plus/stk-table-vue)
25
+ - [Gitee](https://gitee.com/japlus/stk-table-vue) 🇨🇳
26
+
27
+ ## Demo
28
+
29
+ [<span style="font-size: 16px;font-weight: bold;">Online Demo</span>](https://stackblitz.com/edit/vitejs-vite-ad91hh?file=src%2FDemo%2Findex.vue)
30
+
31
+ ## Feature TODO:
32
+ * [x] 高亮行,单元格。
33
+ - [x] 使用 `Web Animations API` 实现高亮。(`v0.3.4` 变更为默认值)
34
+ - [x] 支持配置高亮参数(持续时间,颜色,频率)。(`v0.2.9`)
35
+ - [x] `setHighlightDimRow`/`setHighlightCellRow`支持自定义高亮css类名。(`v0.2.9`)
36
+ * [x] 虚拟列表。
37
+ - [x] 纵向。
38
+ - [x] 横向(必须设置列宽)。
39
+ - [x] 支持不定行高。(`v0.6.0`)
40
+ * [x] 列固定。
41
+ - [x] 固定列阴影。
42
+ - [x] 多级表头固定列阴影。
43
+ - [x] sticky column 动态计算阴影位置。(`v0.4.0`)
44
+ * [x] 行展开。(`v0.5.0`)
45
+ * [x] 行拖动。(`v0.5.0`)
46
+ * [] 列筛选。
47
+ * [x] 斑马纹。
48
+ * [x] 拖动更改列顺序。
49
+ * [x] 拖动调整列宽。
50
+ * [x] 排序
51
+ - [x] 支持配置 `null` | `undefined` 永远排最后。
52
+ - [x] 支持配置 string 使用 `String.prototype.localCompare` 排序。
53
+ * [x] 多级表头。
54
+ - [] 横向虚拟滚动。
55
+ * [x] 支持table-layout: fixed 配置。
56
+ * [x] 鼠标悬浮在表格上,键盘滚动虚拟表格。
57
+ - [x] 键盘 `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight`/`PageUp`/ `PageDown` 按键支持。
58
+ * [] 非虚拟滚动时,大数据分批加载。
59
+ * [x] vue2.7支持(引入源码使用)。
60
+ - [x] `props.optimizeVue2Scroll` 优化vue2虚拟滚动流畅度。(`v0.2.0`)
61
+ * [x] 支持配置序号列。`StkTableColumn['type']`。(`v0.3.0`)
62
+ * [x] `props.cellHover`单元格悬浮样式。(`v0.3.2`)
63
+ * [] 惯性滚动优化。
64
+
65
+
66
+ ## Usage
67
+ > npm install stk-table-vue
68
+
69
+ ```html
70
+ <script setup>
71
+ import { StkTable } from 'stk-table-vue'
72
+ import { ref, useTemplateRef } from 'vue'
73
+ const stkTableRef = ref<InstanceType<typeof StkTable>>();
74
+ // or Vue 3.5 useTemplateRef
75
+ const stkTableRef = useTemplateRef('stkTableRef');
76
+
77
+ // highlight row
78
+ stkTableRef.value.setHighlightDimRow([rowKey],{
79
+ method: 'css'|'js'|'animation',// 默认 animation。
80
+ className: 'custom-class-name', // method css 时生效。
81
+ keyframe: [{backgroundColor:'#aaa'}, {backgroundColor: '#222'}],//same as https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Animations_API/Keyframe_Formats
82
+ duration: 2000,// 动画时长。
83
+ });
84
+ // highlight cell
85
+ stkTableRef.value.setHighlightDimCell(rowKey, colDataIndex, {
86
+ method: 'css'|'animation',
87
+ className:'custom-class-name', // method css 时生效。
88
+ keyframe: [{backgroundColor:'#aaa'}, {backgroundColor: '#222'}], // method animation 时生效。
89
+ duration: 2000,// 动画时长。
90
+ });
91
+
92
+ const columns = [
93
+ {title: 'name', dataIndex: 'name'},
94
+ {title: 'age', dataIndex: 'age'},
95
+ {title: 'address', dataIndex: 'address'},
96
+ ];
97
+
98
+ const dataSource = [
99
+ {id: 1, name: 'John', age: 32, address: 'New York'},
100
+ {id: 2, name: 'Jim', age: 42, address: 'London'},
101
+ {id: 3, name: 'Joe', age: 52, address: 'Tokyo'},
102
+ {id: 4, name: 'Jack', age: 62, address: 'Sydney'},
103
+ {id: 5, name: 'Jill', age: 72, address: 'Paris'},
104
+ ]
105
+
106
+ </script>
107
+
108
+ <template>
109
+ <StkTable ref='stkTableRef' row-key="id" :data-source="dataSource" :columns="columns"></StkTable>
110
+ </template>
111
+
112
+ ```
113
+
114
+ ### Vue2.7 Usage
115
+ [在vue2中使用](https://ja-plus.github.io/stk-table-vue/main/start/vue2-usage.html)
116
+
117
+ ## Notice
118
+ 注意,组件会改动 `props.columns` 中的对象。如果多个组件 `columns` 数组元素存在引用同一个 `StkTableColumn` 对象。则考虑赋值 `columns` 前进行深拷贝。
119
+
120
+ ## API
121
+ ### Props
122
+ [Props 表格配置](https://ja-plus.github.io/stk-table-vue/main/api/table-props.html)
123
+
124
+ ### Emits
125
+ [Emits 事件](https://ja-plus.github.io/stk-table-vue/main/api/emits.html)
126
+
127
+ ### Slots
128
+ [Slots 插槽](https://ja-plus.github.io/stk-table-vue/main/api/slots.html)
129
+
130
+ ### Expose
131
+ [Expose 实例方法](https://ja-plus.github.io/stk-table-vue/main/api/expose.html)
132
+
133
+ ### StkTableColumn 列配置
134
+ [StkTableColumn 列配置](https://ja-plus.github.io/stk-table-vue/main/api/stk-table-column.html)
135
+
136
+ ### setHighlightDimCell & setHighlightDimRow
137
+ [高亮使用文档](https://ja-plus.github.io/stk-table-vue/main/api/expose.html#sethighlightdimcell)
138
+
139
+
140
+ ### Example
141
+ ```vue
142
+ <template>
143
+ <StkTable
144
+ ref="stkTable"
145
+ row-key="name"
146
+ v-model:columns="columns"
147
+ :style="{height:props.height}"
148
+ theme='dark'
149
+ height='200px'
150
+ bordered="h"
151
+ :row-height="28"
152
+ :show-overflow="false"
153
+ :show-header-overflow="false"
154
+ :sort-remote="false"
155
+ col-resizable
156
+ header-drag
157
+ virtual
158
+ virtual-x
159
+ no-data-full
160
+ col-resizable
161
+ auto-resize
162
+ fixed-col-shadow
163
+ :col-min-width="10"
164
+ :headless="false"
165
+ :data-source="dataSource"
166
+ @current-change="onCurrentChange"
167
+ @row-menu="onRowMenu"
168
+ @header-row-menu="onHeaderRowMenu"
169
+ @row-click="onRowClick"
170
+ @row-dblclick="onRowDblclick"
171
+ @sort-change="handleSortChange"
172
+ @cell-click="onCellClick"
173
+ @header-cell-click="onHeaderCellClick"
174
+ @scroll="onTableScroll"
175
+ @scroll-x="onTableScrollX"
176
+ @col-order-change="onColOrderChange"
177
+ />
178
+ </template>
179
+ <script setup>
180
+ import { h, defineComponent } from 'vue';
181
+ const columns = [
182
+ {
183
+ title: 'Name',
184
+ dataIndex: 'name',
185
+ fixed: 'left',
186
+ width: '200px',
187
+ headerClassName: 'my-th',
188
+ className: 'my-td',
189
+ sorter: true,
190
+ customHeaderCell: function FunctionalComponent(props){
191
+ return h(
192
+ 'span',
193
+ { style: 'overflow:hidden;text-overflow:ellipsis;white-space:nowrap' },
194
+ props.col.title + '(render) text-overflow,',
195
+ );
196
+ },
197
+ customCell: defineComponent({
198
+ setup(){
199
+ //...
200
+ return () => <div></div> // vue jsx
201
+ }
202
+ })
203
+ },
204
+ ]
205
+ </script>
206
+ ```
207
+
208
+
209
+ ## Other
210
+ * `$*$` 兼容注释
211
+
212
+ ### Planed removal APi
213
+ * `setHighlightDimRow` 中的 `method="js"`。观察animation Api 是否足够满足使用场景。若足够满足计划在后期移除,并且可以移除 `d3-interpolate` 依赖。
@@ -369,7 +369,9 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
369
369
  clearAllAutoHeight: () => void;
370
370
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
371
371
  "sort-change": (col: StkTableColumn<any> | null, order: Order, data: any[], sortConfig: SortConfig<any>) => void;
372
- "row-click": (ev: MouseEvent, row: any) => void;
372
+ "row-click": (ev: MouseEvent, row: any, data: {
373
+ rowIndex: number;
374
+ }) => void;
373
375
  "current-change": (ev: MouseEvent | null, row: any, data: {
374
376
  select: boolean;
375
377
  }) => void;
@@ -378,14 +380,22 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
378
380
  row: DT | undefined;
379
381
  col: StkTableColumn<DT> | undefined;
380
382
  }) => void;
381
- "row-dblclick": (ev: MouseEvent, row: any) => void;
383
+ "row-dblclick": (ev: MouseEvent, row: any, data: {
384
+ rowIndex: number;
385
+ }) => void;
382
386
  "header-row-menu": (ev: MouseEvent) => void;
383
- "row-menu": (ev: MouseEvent, row: any) => void;
384
- "cell-click": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
387
+ "row-menu": (ev: MouseEvent, row: any, data: {
388
+ rowIndex: number;
389
+ }) => void;
390
+ "cell-click": (ev: MouseEvent, row: any, col: StkTableColumn<any>, data: {
391
+ rowIndex: number;
392
+ }) => void;
385
393
  "cell-mouseenter": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
386
394
  "cell-mouseleave": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
387
395
  "cell-mouseover": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
388
- "cell-mousedown": (ev: MouseEvent, row: any, col: StkTableColumn<any>) => void;
396
+ "cell-mousedown": (ev: MouseEvent, row: any, col: StkTableColumn<any>, data: {
397
+ rowIndex: number;
398
+ }) => void;
389
399
  "header-cell-click": (ev: MouseEvent, col: StkTableColumn<any>) => void;
390
400
  scroll: (ev: Event, data: {
391
401
  startIndex: number;
@@ -596,7 +606,9 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
596
606
  "onCol-order-change"?: ((dragStartKey: string, targetColKey: string) => any) | undefined;
597
607
  "onRow-order-change"?: ((dragStartKey: string, targetRowKey: string) => any) | undefined;
598
608
  "onSort-change"?: ((col: StkTableColumn<any> | null, order: Order, data: any[], sortConfig: SortConfig<any>) => any) | undefined;
599
- "onRow-click"?: ((ev: MouseEvent, row: any) => any) | undefined;
609
+ "onRow-click"?: ((ev: MouseEvent, row: any, data: {
610
+ rowIndex: number;
611
+ }) => any) | undefined;
600
612
  "onCurrent-change"?: ((ev: MouseEvent | null, row: any, data: {
601
613
  select: boolean;
602
614
  }) => any) | undefined;
@@ -605,14 +617,22 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
605
617
  row: DT | undefined;
606
618
  col: StkTableColumn<DT> | undefined;
607
619
  }) => any) | undefined;
608
- "onRow-dblclick"?: ((ev: MouseEvent, row: any) => any) | undefined;
620
+ "onRow-dblclick"?: ((ev: MouseEvent, row: any, data: {
621
+ rowIndex: number;
622
+ }) => any) | undefined;
609
623
  "onHeader-row-menu"?: ((ev: MouseEvent) => any) | undefined;
610
- "onRow-menu"?: ((ev: MouseEvent, row: any) => any) | undefined;
611
- "onCell-click"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
624
+ "onRow-menu"?: ((ev: MouseEvent, row: any, data: {
625
+ rowIndex: number;
626
+ }) => any) | undefined;
627
+ "onCell-click"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>, data: {
628
+ rowIndex: number;
629
+ }) => any) | undefined;
612
630
  "onCell-mouseenter"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
613
631
  "onCell-mouseleave"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
614
632
  "onCell-mouseover"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
615
- "onCell-mousedown"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>) => any) | undefined;
633
+ "onCell-mousedown"?: ((ev: MouseEvent, row: any, col: StkTableColumn<any>, data: {
634
+ rowIndex: number;
635
+ }) => any) | undefined;
616
636
  "onHeader-cell-click"?: ((ev: MouseEvent, col: StkTableColumn<any>) => any) | undefined;
617
637
  "onScroll-x"?: ((ev: Event) => any) | undefined;
618
638
  "onToggle-row-expand"?: ((data: {