niuma-ui 1.0.0 → 1.0.2
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/CHANGELOG.md +50 -1
- package/NOTICE +2 -2
- package/package.json +13 -5
- package/src/__tests__/RsButton.spec.ts +47 -0
- package/src/__tests__/RsCard.spec.ts +160 -1
- package/src/__tests__/RsConfirmDialog.spec.ts +127 -0
- package/src/__tests__/RsContextMenu.spec.ts +12 -0
- package/src/__tests__/RsDateTimePicker.spec.ts +11 -0
- package/src/__tests__/RsDescriptions.spec.ts +50 -0
- package/src/__tests__/RsDialog.spec.ts +117 -0
- package/src/__tests__/RsDrawer.spec.ts +96 -3
- package/src/__tests__/RsDynamicTags.spec.ts +52 -0
- package/src/__tests__/RsForm.spec.ts +245 -1
- package/src/__tests__/RsInput.spec.ts +15 -1
- package/src/__tests__/RsMenu.spec.ts +406 -14
- package/src/__tests__/RsPagination.spec.ts +67 -2
- package/src/__tests__/RsSelect.spec.ts +42 -1
- package/src/__tests__/RsSwitch.spec.ts +44 -0
- package/src/__tests__/RsTable.a11y.spec.ts +83 -0
- package/src/__tests__/RsTable.dom-baseline.spec.ts +87 -0
- package/src/__tests__/RsTable.perf.spec.ts +23 -4
- package/src/__tests__/RsTable.spec.ts +63 -8
- package/src/__tests__/RsTable.ssr.spec.ts +71 -0
- package/src/__tests__/RsTable.summary.spec.ts +45 -0
- package/src/__tests__/RsTabs.spec.ts +102 -4
- package/src/__tests__/RsTerminal.spec.ts +1 -1
- package/src/__tests__/RsTimePicker.spec.ts +11 -0
- package/src/__tests__/RsUpload.spec.ts +62 -6
- package/src/__tests__/createRsDialog.spec.ts +145 -0
- package/src/__tests__/form-rules.spec.ts +76 -0
- package/src/__tests__/perf-budgets.ts +32 -0
- package/src/__tests__/rs-table-api.spec.ts +206 -0
- package/src/__tests__/rs-table-compat-matrix.spec.ts +108 -0
- package/src/__tests__/rs-table-echarts-adapter.spec.ts +43 -0
- package/src/__tests__/rs-table-grid-nav.spec.ts +63 -0
- package/src/__tests__/rs-table-isolation.spec.ts +158 -0
- package/src/__tests__/split-pane-utils.spec.ts +21 -0
- package/src/__tests__/table-chart-utils.spec.ts +88 -0
- package/src/__tests__/table-summary-utils.spec.ts +62 -0
- package/src/__tests__/table-utils.spec.ts +124 -0
- package/src/__tests__/theme.spec.ts +25 -0
- package/src/__tests__/useRsTableColumnResize.spec.ts +25 -0
- package/src/__tests__/useRsTableCore.perf.spec.ts +170 -0
- package/src/components/RsAlert.vue +212 -0
- package/src/components/RsButton.vue +145 -21
- package/src/components/RsCard.vue +200 -16
- package/src/components/RsConfirmDialog.vue +215 -28
- package/src/components/RsContextMenu.vue +51 -13
- package/src/components/RsDatePicker.vue +267 -34
- package/src/components/RsDateTimePicker.vue +19 -2
- package/src/components/RsDescriptions.vue +186 -0
- package/src/components/RsDescriptionsItem.vue +32 -0
- package/src/components/RsDialog.vue +363 -51
- package/src/components/RsDivider.vue +89 -0
- package/src/components/RsDrawer.vue +558 -33
- package/src/components/RsDropdown.vue +33 -2
- package/src/components/RsDynamicTags.vue +517 -0
- package/src/components/RsForm.vue +97 -8
- package/src/components/RsInput.vue +80 -82
- package/src/components/RsInputNumber.vue +64 -23
- package/src/components/RsLabel.vue +20 -5
- package/src/components/RsLoadingBar.vue +151 -0
- package/src/components/RsMenu.vue +73 -15
- package/src/components/RsMenuItems.vue +147 -9
- package/src/components/RsPagination.vue +93 -14
- package/src/components/RsRadio.vue +81 -0
- package/src/components/RsRadioItem.vue +156 -0
- package/src/components/RsSelect.vue +67 -58
- package/src/components/RsSplitPane.vue +69 -1
- package/src/components/RsSwitch.vue +179 -0
- package/src/components/RsTable.vue +653 -2555
- package/src/components/RsTabs.vue +415 -83
- package/src/components/RsTag.vue +191 -0
- package/src/components/RsTerminal.vue +3 -3
- package/src/components/RsTimePicker.vue +44 -5
- package/src/components/RsTimePickerColumns.vue +136 -77
- package/src/components/RsToaster.vue +58 -18
- package/src/components/RsTree.vue +39 -21
- package/src/components/RsUpload.vue +145 -12
- package/src/components/RsVNodeHost.vue +20 -0
- package/src/components/button-utils.ts +39 -0
- package/src/components/context-menu-utils.ts +6 -0
- package/src/components/date-picker-utils.ts +84 -4
- package/src/components/descriptions-utils.ts +24 -0
- package/src/components/dialog-utils.ts +147 -0
- package/src/components/dialog-window.ts +74 -9
- package/src/components/drawer-utils.ts +73 -0
- package/src/components/form-rules.ts +257 -0
- package/src/components/form-utils.ts +52 -2
- package/src/components/menu-utils.ts +11 -0
- package/src/components/overlay-utils.ts +3 -0
- package/src/components/radio-utils.ts +12 -0
- package/src/components/reka.ts +5 -0
- package/src/components/select-utils.ts +21 -2
- package/src/components/split-pane-utils.ts +65 -12
- package/src/components/table/RsTableBody.vue +217 -0
- package/src/components/table/RsTableBodyRow.vue +90 -1
- package/src/components/table/RsTableColGroup.vue +41 -0
- package/src/components/table/RsTableHeader.vue +158 -0
- package/src/components/table/RsTableSummaryRow.vue +52 -0
- package/src/components/table/rs-table-api.ts +99 -0
- package/src/components/table/rs-table-compat-matrix.ts +71 -0
- package/src/components/table/rs-table-echarts-adapter.ts +81 -0
- package/src/components/table/rs-table-feature-host.ts +178 -0
- package/src/components/table/rs-table-grid-nav.ts +122 -0
- package/src/components/table/rs-table-header-types.ts +47 -0
- package/src/components/table/rs-table-module-registry.ts +72 -0
- package/src/components/table/rs-table-props.ts +274 -0
- package/src/components/table/rs-table-view-context.ts +258 -0
- package/src/components/table/rs-table.css +84 -6
- package/src/components/table/table-chart-utils.ts +165 -0
- package/src/components/table/table-features.ts +284 -0
- package/src/components/table/table-summary-utils.ts +194 -0
- package/src/components/table-utils.ts +452 -2
- package/src/components/tabs-utils.ts +142 -2
- package/src/components/terminal-utils.ts +1 -1
- package/src/components/terminal-wheel.ts +1 -1
- package/src/components/time-picker-utils.ts +76 -3
- package/src/components/upload-utils.ts +122 -0
- package/src/components/virtual-list-utils.ts +15 -2
- package/src/composables/assembleRsTableApi.ts +79 -0
- package/src/composables/bindRsTableViewContext.ts +269 -0
- package/src/composables/createRsDialog.ts +357 -0
- package/src/composables/createRsTableEditEmitBridge.ts +38 -0
- package/src/composables/useRsLoadingBar.ts +36 -0
- package/src/composables/useRsTable.ts +134 -0
- package/src/composables/useRsTableA11y.ts +52 -0
- package/src/composables/useRsTableChartBridge.ts +79 -0
- package/src/composables/useRsTableColumnLayout.ts +320 -0
- package/src/composables/useRsTableColumnResize.ts +244 -0
- package/src/composables/useRsTableColumnVirtual.ts +180 -0
- package/src/composables/useRsTableColumns.ts +200 -0
- package/src/composables/useRsTableContextMenu.ts +257 -0
- package/src/composables/useRsTableCore.ts +256 -0
- package/src/composables/useRsTableEditActions.ts +606 -0
- package/src/composables/useRsTableEditLayer.ts +251 -0
- package/src/composables/useRsTableEngine.ts +357 -0
- package/src/composables/useRsTableGridKeyboard.ts +123 -0
- package/src/composables/useRsTableHeadless.ts +137 -0
- package/src/composables/useRsTableInteraction.ts +433 -0
- package/src/composables/useRsTableScrollHost.ts +75 -0
- package/src/composables/useRsTableScrollLayout.ts +255 -0
- package/src/composables/useRsTableSelectionSource.ts +89 -0
- package/src/composables/useRsTableShell.ts +416 -0
- package/src/composables/useRsTableShellChrome.ts +170 -0
- package/src/composables/useRsTableSummary.ts +113 -0
- package/src/composables/useRsTableViewProvide.ts +263 -0
- package/src/composables/useRsTableVirtual.ts +154 -0
- package/src/composables/useRsTabsNav.ts +4 -0
- package/src/composables/useTableEdit.ts +1 -1
- package/src/icons/lucide.ts +2 -2
- package/src/index.ts +309 -9
- package/src/locale/messages.ts +30 -0
- package/src/styles.css +305 -52
- package/src/theme/brand.example.css +21 -2
- package/src/theme/presets.ts +4 -0
- package/src/theme/types.ts +67 -0
- package/src/components/RsTableColgroup.vue +0 -17
- package/src/components/RsTableHeaderRow.vue +0 -30
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RsTable 内核装配(Columns + Engine + Scroll + Virtual + Analytics + Features)。
|
|
3
|
+
*
|
|
4
|
+
* 性能约定:
|
|
5
|
+
* - data / columns 仅按引用浅层失效,不做 deep watch
|
|
6
|
+
* - Feature 按 id + setup 引用签名重绑,避免无关 props 抖动拆掉图表订阅
|
|
7
|
+
* - 行派生(dataRows / viewRows / keyMap)单次遍历 tableEntries
|
|
8
|
+
*
|
|
9
|
+
* 不负责:列宽拖拽 DOM、列虚拟(依赖 resize 快照)、编辑/右键交互、模板。
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { computed, onUnmounted, watch } from 'vue'
|
|
13
|
+
import type {
|
|
14
|
+
RsTableColumn,
|
|
15
|
+
RsTableGroupBy,
|
|
16
|
+
RsTableRowData,
|
|
17
|
+
RsTableRowKey,
|
|
18
|
+
RsTableSize,
|
|
19
|
+
RsTableSortState,
|
|
20
|
+
RsTableTreeConfig,
|
|
21
|
+
} from '../components/table-utils'
|
|
22
|
+
import { resolveTableRowHeight, resolveTableSize } from '../components/table-utils'
|
|
23
|
+
import {
|
|
24
|
+
resolveBuiltinTableFeatures,
|
|
25
|
+
type RsTableFeature,
|
|
26
|
+
} from '../components/table/table-features'
|
|
27
|
+
import { useRsTable } from './useRsTable'
|
|
28
|
+
import { useRsTableColumns, type UseRsTableColumnsEmit } from './useRsTableColumns'
|
|
29
|
+
import { useRsTableEngine, type UseRsTableEngineEmit } from './useRsTableEngine'
|
|
30
|
+
import { useRsTableScrollLayout } from './useRsTableScrollLayout'
|
|
31
|
+
import { useRsTableSelectionSource } from './useRsTableSelectionSource'
|
|
32
|
+
import {
|
|
33
|
+
flattenVisibleCountRough,
|
|
34
|
+
useRsTableVirtual,
|
|
35
|
+
} from './useRsTableVirtual'
|
|
36
|
+
|
|
37
|
+
/** useRsTableCore 入参:全部用 getter,避免捕获过期 props */
|
|
38
|
+
export interface UseRsTableCoreOptions<T extends RsTableRowData> {
|
|
39
|
+
columns: () => RsTableColumn<T>[]
|
|
40
|
+
data: () => T[]
|
|
41
|
+
rowKey: () => RsTableRowKey<T> | undefined
|
|
42
|
+
compact: () => boolean | undefined
|
|
43
|
+
size: () => RsTableSize | undefined
|
|
44
|
+
columnOrder: () => string[] | undefined
|
|
45
|
+
defaultColumnOrder: string[]
|
|
46
|
+
columnFilters: () => Record<string, string> | undefined
|
|
47
|
+
defaultColumnFilters: Record<string, string>
|
|
48
|
+
initialColumnWidths: () => Record<string, number> | undefined
|
|
49
|
+
resizable: () => boolean
|
|
50
|
+
columnLayout: () => 'auto' | 'fixed'
|
|
51
|
+
sort: () => RsTableSortState | null | undefined
|
|
52
|
+
defaultSort: RsTableSortState | null
|
|
53
|
+
sorts: () => RsTableSortState[] | undefined
|
|
54
|
+
defaultSorts: RsTableSortState[]
|
|
55
|
+
multiSort: () => boolean
|
|
56
|
+
remoteSort: () => boolean
|
|
57
|
+
filterText: () => string | undefined
|
|
58
|
+
filterKeys: () => string[] | undefined
|
|
59
|
+
groupBy: () => RsTableGroupBy<T> | undefined
|
|
60
|
+
groupLabel: () => ((key: string) => string) | undefined
|
|
61
|
+
treeConfig: () => RsTableTreeConfig<T> | undefined
|
|
62
|
+
expandable: () => boolean
|
|
63
|
+
rowExpandable: () => ((row: T, index: number) => boolean) | undefined
|
|
64
|
+
selectedRowKeys: () => string[] | undefined
|
|
65
|
+
defaultSelectedRowKeys: string[]
|
|
66
|
+
expandedRowKeys: () => string[] | undefined
|
|
67
|
+
defaultExpandedRowKeys: string[]
|
|
68
|
+
rowSelectable: () => ((row: T, index: number) => boolean) | undefined
|
|
69
|
+
height: () => number | string | undefined
|
|
70
|
+
layoutActive: () => boolean | undefined
|
|
71
|
+
viewKey: () => string | number | undefined
|
|
72
|
+
virtual: () => boolean | undefined
|
|
73
|
+
virtualAutoThreshold: () => number
|
|
74
|
+
fill: () => boolean
|
|
75
|
+
infinite: () => boolean
|
|
76
|
+
virtualOnInfinite: () => boolean
|
|
77
|
+
overscan: () => number
|
|
78
|
+
expandRowHeight: () => number | undefined
|
|
79
|
+
rowHeight: () => number | undefined
|
|
80
|
+
selectable: () => boolean
|
|
81
|
+
editable: () => boolean
|
|
82
|
+
contextMenu: () => boolean
|
|
83
|
+
/** 汇总 feature 是否启用(由 Summary composable 或轻量判定注入) */
|
|
84
|
+
summaryFeatureEnabled: () => boolean
|
|
85
|
+
features: () => RsTableFeature<T>[] | undefined
|
|
86
|
+
emit: UseRsTableColumnsEmit & UseRsTableEngineEmit
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 装配表格内核状态。
|
|
91
|
+
*/
|
|
92
|
+
export function useRsTableCore<T extends RsTableRowData>(options: UseRsTableCoreOptions<T>) {
|
|
93
|
+
const treeModeEarly = computed(() => Boolean(options.treeConfig()))
|
|
94
|
+
const treeExpandColumnKeyEarly = computed(() => {
|
|
95
|
+
const tree = options.treeConfig()
|
|
96
|
+
if (!tree) return null
|
|
97
|
+
return tree.expandColumnKey ?? options.columns()[0]?.key ?? null
|
|
98
|
+
})
|
|
99
|
+
const treeFixExpandColumnEarly = computed(() => options.treeConfig()?.fixExpandColumn !== false)
|
|
100
|
+
|
|
101
|
+
const columnsApi = useRsTableColumns<T>({
|
|
102
|
+
columns: () => options.columns(),
|
|
103
|
+
columnOrder: () => options.columnOrder(),
|
|
104
|
+
defaultColumnOrder: options.defaultColumnOrder,
|
|
105
|
+
columnFilters: () => options.columnFilters(),
|
|
106
|
+
defaultColumnFilters: options.defaultColumnFilters,
|
|
107
|
+
initialColumnWidths: () => options.initialColumnWidths(),
|
|
108
|
+
resizable: () => options.resizable(),
|
|
109
|
+
columnLayout: () => options.columnLayout(),
|
|
110
|
+
treeMode: treeModeEarly,
|
|
111
|
+
treeFixExpandColumn: treeFixExpandColumnEarly,
|
|
112
|
+
treeExpandColumnKey: treeExpandColumnKeyEarly,
|
|
113
|
+
emit: options.emit,
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
const resolvedSize = computed(() => resolveTableSize(options.compact(), options.size()))
|
|
117
|
+
|
|
118
|
+
const engine = useRsTableEngine<T>({
|
|
119
|
+
data: () => options.data(),
|
|
120
|
+
displayColumns: () => columnsApi.displayColumns.value,
|
|
121
|
+
rowKey: () => options.rowKey(),
|
|
122
|
+
sort: () => options.sort(),
|
|
123
|
+
defaultSort: options.defaultSort,
|
|
124
|
+
sorts: () => options.sorts(),
|
|
125
|
+
defaultSorts: options.defaultSorts,
|
|
126
|
+
multiSort: () => options.multiSort(),
|
|
127
|
+
remoteSort: () => options.remoteSort(),
|
|
128
|
+
filterText: () => options.filterText(),
|
|
129
|
+
filterKeys: () => options.filterKeys(),
|
|
130
|
+
columnFilters: () => columnsApi.columnFiltersState.value,
|
|
131
|
+
groupBy: () => options.groupBy(),
|
|
132
|
+
groupLabel: () => options.groupLabel(),
|
|
133
|
+
treeConfig: () => options.treeConfig(),
|
|
134
|
+
expandable: () => options.expandable(),
|
|
135
|
+
rowExpandable: () => options.rowExpandable(),
|
|
136
|
+
selectedRowKeys: () => options.selectedRowKeys(),
|
|
137
|
+
defaultSelectedRowKeys: options.defaultSelectedRowKeys,
|
|
138
|
+
expandedRowKeys: () => options.expandedRowKeys(),
|
|
139
|
+
defaultExpandedRowKeys: options.defaultExpandedRowKeys,
|
|
140
|
+
rowSelectable: () => options.rowSelectable(),
|
|
141
|
+
size: resolvedSize,
|
|
142
|
+
emit: options.emit,
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
/** 树表阈值粗算:不构建完整 entries,避免与 virtual 循环依赖 */
|
|
146
|
+
const tableEntriesForThreshold = computed(() => {
|
|
147
|
+
const tree = options.treeConfig()
|
|
148
|
+
if (!tree) return options.data().length
|
|
149
|
+
return flattenVisibleCountRough(options.data(), engine.expandedKeySet.value, {
|
|
150
|
+
childrenField: engine.treeChildrenField.value,
|
|
151
|
+
isLeafField: engine.treeIsLeafField.value,
|
|
152
|
+
lazy: engine.treeLazy.value,
|
|
153
|
+
rowKey: options.rowKey(),
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
const scroll = useRsTableScrollLayout({
|
|
158
|
+
height: () => options.height(),
|
|
159
|
+
layoutActive: () => options.layoutActive(),
|
|
160
|
+
viewKey: () => options.viewKey(),
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
const fixedRowHeight = computed(() =>
|
|
164
|
+
resolveTableRowHeight(resolvedSize.value, options.rowHeight()),
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
const virtual = useRsTableVirtual<T>({
|
|
168
|
+
dataLength: () => options.data().length,
|
|
169
|
+
treeMode: engine.treeMode,
|
|
170
|
+
tableEntriesForThreshold,
|
|
171
|
+
virtual: () => options.virtual(),
|
|
172
|
+
virtualAutoThreshold: () => options.virtualAutoThreshold(),
|
|
173
|
+
fill: () => options.fill(),
|
|
174
|
+
infinite: () => options.infinite(),
|
|
175
|
+
virtualOnInfinite: () => options.virtualOnInfinite(),
|
|
176
|
+
overscan: () => options.overscan(),
|
|
177
|
+
expandRowHeight: () => options.expandRowHeight(),
|
|
178
|
+
scrollTop: scroll.scrollTop,
|
|
179
|
+
viewportHeight: scroll.viewportHeight,
|
|
180
|
+
fixedRowHeight,
|
|
181
|
+
tableEntries: () => engine.tableEntries.value,
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
const analyticsSource = useRsTableSelectionSource<T>({
|
|
185
|
+
viewRows: engine.viewRows,
|
|
186
|
+
selectedRows: engine.selectedRows,
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
const tableSurface = useRsTable<T>()
|
|
190
|
+
|
|
191
|
+
/** 列是否可筛选:只跟 columns 引用走,避免每次访问 .some */
|
|
192
|
+
const hasFilterableColumn = computed(() => options.columns().some((c) => c.filterable))
|
|
193
|
+
|
|
194
|
+
const builtinFeatureIds = computed(() =>
|
|
195
|
+
resolveBuiltinTableFeatures({
|
|
196
|
+
selectable: options.selectable(),
|
|
197
|
+
filterable: hasFilterableColumn.value,
|
|
198
|
+
virtual: options.virtual() === false ? false : options.virtual() ?? 'auto',
|
|
199
|
+
editable: options.editable(),
|
|
200
|
+
tree: Boolean(options.treeConfig()),
|
|
201
|
+
contextMenu: options.contextMenu() !== false,
|
|
202
|
+
summary: options.summaryFeatureEnabled(),
|
|
203
|
+
}),
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Feature 重绑签名:builtin id 集合 + 实例 feature 的 id/setup 引用。
|
|
208
|
+
* 不监听 data/viewRows,避免滚动/选中拆掉 analytics 订阅。
|
|
209
|
+
*/
|
|
210
|
+
const featureBindSignature = computed(() => {
|
|
211
|
+
const extras = options.features() ?? []
|
|
212
|
+
return [
|
|
213
|
+
builtinFeatureIds.value.join('\0'),
|
|
214
|
+
extras.length,
|
|
215
|
+
...extras.map((f) => f.id),
|
|
216
|
+
...extras.map((f) => f.setup),
|
|
217
|
+
] as const
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
let disposeTableFeatures: (() => void) | null = null
|
|
221
|
+
watch(
|
|
222
|
+
featureBindSignature,
|
|
223
|
+
() => {
|
|
224
|
+
disposeTableFeatures?.()
|
|
225
|
+
disposeTableFeatures = tableSurface.bindFeatures({
|
|
226
|
+
builtinIds: builtinFeatureIds.value,
|
|
227
|
+
instanceFeatures: options.features() ?? null,
|
|
228
|
+
getViewRows: () => engine.viewRows.value,
|
|
229
|
+
getSelectedRows: () => engine.selectedRows.value,
|
|
230
|
+
getAnalyticsSnapshot: () => analyticsSource.getSnapshot(),
|
|
231
|
+
subscribeAnalytics: (listener) => analyticsSource.subscribe(listener),
|
|
232
|
+
})
|
|
233
|
+
},
|
|
234
|
+
{ immediate: true },
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
onUnmounted(() => {
|
|
238
|
+
disposeTableFeatures?.()
|
|
239
|
+
disposeTableFeatures = null
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
resolvedSize,
|
|
244
|
+
fixedRowHeight,
|
|
245
|
+
tableEntriesForThreshold,
|
|
246
|
+
...columnsApi,
|
|
247
|
+
...engine,
|
|
248
|
+
...scroll,
|
|
249
|
+
...virtual,
|
|
250
|
+
analyticsSource,
|
|
251
|
+
tableSurface,
|
|
252
|
+
builtinFeatureIds,
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export type RsTableCoreApi<T extends RsTableRowData> = ReturnType<typeof useRsTableCore<T>>
|