@dazhicheng/ui 1.6.6 → 1.6.8

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.
Files changed (105) hide show
  1. package/dist/components/tt-area/TtArea.vue.js +1 -1
  2. package/dist/components/tt-drawer/src/components/DrawerHeader.vue.js +2 -2
  3. package/dist/components/tt-form/src/form-render/expandable.js +31 -32
  4. package/dist/components/tt-form/src/useFormContext.js +1 -1
  5. package/dist/components/tt-icon/index.vue.js +2 -2
  6. package/dist/components/tt-loading/src/loading.vue.js +2 -2
  7. package/dist/components/tt-modal/src/utils/resolve-modal-target.js +1 -3
  8. package/dist/components/tt-panel-select/src/components/PanelMiddle.vue.d.ts +2 -2
  9. package/dist/components/tt-table/index.d.ts +3 -15
  10. package/dist/components/tt-table/index.js +5 -4
  11. package/dist/components/tt-table/src/Table.vue.d.ts +1 -1
  12. package/dist/components/tt-table/src/Table.vue.js +3 -3
  13. package/dist/components/tt-table/src/TableForm.vue.d.ts +0 -9
  14. package/dist/components/tt-table/src/TableForm.vue.js +175 -167
  15. package/dist/components/tt-table/src/components/TableAction.vue.d.ts +2 -12
  16. package/dist/components/tt-table/src/components/TableAction.vue.js +78 -175
  17. package/dist/components/tt-table/src/hooks/useGridProps.js +64 -60
  18. package/dist/components/tt-table/src/hooks/useTableData.js +77 -74
  19. package/dist/components/tt-table/src/hooks/useTableForm.js +22 -23
  20. package/dist/components/tt-table/src/props.d.ts +0 -5
  21. package/dist/components/tt-table/src/props.js +22 -31
  22. package/dist/components/tt-table/src/types/table.d.ts +2 -1
  23. package/dist/components/tt-table/src/types/tableForm.d.ts +0 -2
  24. package/dist/components/tt-table/src/utils/table-api.d.ts +2 -1
  25. package/dist/components/tt-table/src/utils/table-api.js +3 -2
  26. package/dist/components/tt-table/src/utils/table-form-api.js +14 -15
  27. package/dist/components/tt-vtable/index.js +54 -0
  28. package/dist/components/tt-vtable/src/components/TtVTable.vue.d.ts +188 -0
  29. package/dist/components/tt-vtable/src/components/TtVTable.vue.js +227 -0
  30. package/dist/components/tt-vtable/src/components/TtVTable.vue2.js +4 -0
  31. package/dist/components/tt-vtable/src/components/TtVTableForm.vue.d.ts +32 -0
  32. package/dist/components/tt-vtable/src/components/TtVTableForm.vue.js +121 -0
  33. package/dist/components/tt-vtable/src/components/TtVTableForm.vue2.js +4 -0
  34. package/dist/components/tt-vtable/src/components/VTableEmpty.vue.d.ts +64 -0
  35. package/dist/components/tt-vtable/src/components/VTableEmpty.vue.js +97 -0
  36. package/dist/components/tt-vtable/src/components/VTableEmpty.vue2.js +4 -0
  37. package/dist/components/tt-vtable/src/components/VTablePagination.vue.d.ts +53 -0
  38. package/dist/components/tt-vtable/src/components/VTablePagination.vue.js +52 -0
  39. package/dist/components/tt-vtable/src/components/VTablePagination.vue2.js +4 -0
  40. package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue.d.ts +35 -0
  41. package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue.js +50 -0
  42. package/dist/components/tt-vtable/src/components/VTableSelectionAlert.vue2.js +4 -0
  43. package/dist/components/tt-vtable/src/components/VTableToolbar.vue.d.ts +63 -0
  44. package/dist/components/tt-vtable/src/components/VTableToolbar.vue.js +126 -0
  45. package/dist/components/tt-vtable/src/components/VTableToolbar.vue2.js +4 -0
  46. package/dist/components/tt-vtable/src/components/VTableViewport.vue.js +133 -0
  47. package/dist/components/tt-vtable/src/components/VTableViewport.vue2.js +4 -0
  48. package/dist/components/tt-vtable/src/composables/useVTable.d.ts +41 -0
  49. package/dist/components/tt-vtable/src/composables/useVTable.js +25 -0
  50. package/dist/components/tt-vtable/src/composables/useVTableFormRender.d.ts +13 -0
  51. package/dist/components/tt-vtable/src/composables/useVTableFormRender.js +92 -0
  52. package/dist/components/tt-vtable/src/composables/useVTableRender.d.ts +13 -0
  53. package/dist/components/tt-vtable/src/composables/useVTableRender.js +13 -0
  54. package/dist/components/tt-vtable/src/engine/visactor/createListTable.d.ts +10 -0
  55. package/dist/components/tt-vtable/src/engine/visactor/createListTable.js +63 -0
  56. package/dist/components/tt-vtable/src/engine/visactor/createVueCellLayout.d.ts +37 -0
  57. package/dist/components/tt-vtable/src/engine/visactor/createVueCellLayout.js +133 -0
  58. package/dist/components/tt-vtable/src/engine/visactor/index.d.ts +8 -0
  59. package/dist/components/tt-vtable/src/engine/visactor/native-boundaries.d.ts +23 -0
  60. package/dist/components/tt-vtable/src/engine/visactor/native-boundaries.js +70 -0
  61. package/dist/components/tt-vtable/src/engine/visactor/record-adapter.d.ts +38 -0
  62. package/dist/components/tt-vtable/src/engine/visactor/record-adapter.js +41 -0
  63. package/dist/components/tt-vtable/src/engine/visactor/toColumnDefinitions.d.ts +45 -0
  64. package/dist/components/tt-vtable/src/engine/visactor/toColumnDefinitions.js +73 -0
  65. package/dist/components/tt-vtable/src/engine/visactor/toListTableOptions.d.ts +25 -0
  66. package/dist/components/tt-vtable/src/engine/visactor/toListTableOptions.js +25 -0
  67. package/dist/components/tt-vtable/src/engine/visactor/types.d.ts +29 -0
  68. package/dist/components/tt-vtable/src/features/column-preferences/column-preference-storage.d.ts +36 -0
  69. package/dist/components/tt-vtable/src/features/column-preferences/column-preference-storage.js +52 -0
  70. package/dist/components/tt-vtable/src/features/column-preferences/useColumnPreferences.d.ts +74 -0
  71. package/dist/components/tt-vtable/src/features/column-preferences/useColumnPreferences.js +232 -0
  72. package/dist/components/tt-vtable/src/features/editing/useCellEditing.d.ts +48 -0
  73. package/dist/components/tt-vtable/src/features/editing/useCellEditing.js +102 -0
  74. package/dist/components/tt-vtable/src/features/form-integration/useVTableForm.d.ts +51 -0
  75. package/dist/components/tt-vtable/src/features/pagination/useTablePagination.d.ts +40 -0
  76. package/dist/components/tt-vtable/src/features/pagination/useTablePagination.js +51 -0
  77. package/dist/components/tt-vtable/src/features/querying/useRecordQuery.d.ts +38 -0
  78. package/dist/components/tt-vtable/src/features/querying/useRecordQuery.js +57 -0
  79. package/dist/components/tt-vtable/src/features/records/index.d.ts +3 -0
  80. package/dist/components/tt-vtable/src/features/records/record-index.d.ts +122 -0
  81. package/dist/components/tt-vtable/src/features/records/record-index.js +209 -0
  82. package/dist/components/tt-vtable/src/features/records/useRecordSource.d.ts +41 -0
  83. package/dist/components/tt-vtable/src/features/records/useRecordSource.js +249 -0
  84. package/dist/components/tt-vtable/src/features/selection/useRowSelection.d.ts +65 -0
  85. package/dist/components/tt-vtable/src/features/selection/useRowSelection.js +129 -0
  86. package/dist/components/tt-vtable/src/features/tree/useTreeRecords.d.ts +60 -0
  87. package/dist/components/tt-vtable/src/features/tree/useTreeRecords.js +125 -0
  88. package/dist/components/tt-vtable/src/public/index.d.ts +7 -0
  89. package/dist/components/tt-vtable/src/public/table-api.d.ts +215 -0
  90. package/dist/components/tt-vtable/src/public/table-column.d.ts +123 -0
  91. package/dist/components/tt-vtable/src/public/table-errors.d.ts +26 -0
  92. package/dist/components/tt-vtable/src/public/table-errors.js +26 -0
  93. package/dist/components/tt-vtable/src/public/table-events.d.ts +69 -0
  94. package/dist/components/tt-vtable/src/public/table-props.d.ts +216 -0
  95. package/dist/components/tt-vtable/src/public/table-slots.d.ts +37 -0
  96. package/dist/components/tt-vtable/src/runtime/createVTableController.d.ts +12 -0
  97. package/dist/components/tt-vtable/src/runtime/createVTableController.js +238 -0
  98. package/dist/components/tt-vtable/src/runtime/createVTableRuntime.d.ts +79 -0
  99. package/dist/components/tt-vtable/src/runtime/createVTableRuntime.js +380 -0
  100. package/dist/index.d.ts +1 -0
  101. package/dist/index.js +129 -115
  102. package/dist/packages/utils/src/is.js +46 -37
  103. package/dist/style.css +1 -1
  104. package/package.json +3 -1
  105. package/dist/assets/svg/action_more.svg.js +0 -4
@@ -0,0 +1,123 @@
1
+ import { ColumnDefine, ListTable } from '@visactor/vtable';
2
+ import { VNodeChild } from 'vue';
3
+ import { TtVTableApi, TtVTableFieldPath, TtVTableRowKey } from './table-api';
4
+ /** 需要由封装层控制的原生列字段。 */
5
+ type TtVTableReservedNativeColumnKey = "columns" | "field" | "key" | "title";
6
+ /** 对联合类型的每个成员分别移除字段。 */
7
+ type OmitUnion<Union, Key extends PropertyKey> = Union extends unknown ? Omit<Union, Extract<keyof Union, Key>> : never;
8
+ /** 允许业务透传的原生 VTable 列配置。 */
9
+ export type TtVTableNativeColumnOptions = OmitUnion<ColumnDefine, TtVTableReservedNativeColumnKey>;
10
+ /** 不依赖 VisActor 内部声明的单元格矩形。 */
11
+ export interface TtVTableCellRect {
12
+ /** 左边界。 */
13
+ left: number;
14
+ /** 右边界。 */
15
+ right: number;
16
+ /** 上边界。 */
17
+ top: number;
18
+ /** 下边界。 */
19
+ bottom: number;
20
+ /** 矩形宽度。 */
21
+ width: number;
22
+ /** 矩形高度。 */
23
+ height: number;
24
+ }
25
+ /** Vue 单元格额外暴露的原生坐标上下文。 */
26
+ export interface TtVTableNativeCellContext {
27
+ /** 原生列坐标。 */
28
+ col: number;
29
+ /** 原生行坐标。 */
30
+ row: number;
31
+ /** 当前原生表格实例。 */
32
+ table: ListTable;
33
+ /** 原生单元格矩形。 */
34
+ rect?: TtVTableCellRect;
35
+ }
36
+ /** Vue 正文 renderer 的标准上下文。 */
37
+ export interface TtVTableCellRenderContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
38
+ /** 当前运行时记录。 */
39
+ record: Readonly<Row>;
40
+ /** 当前记录稳定主键。 */
41
+ rowKey: Key;
42
+ /** 当前显示顺序,只能用于展示。 */
43
+ rowIndex: number;
44
+ /** 当前语义列。 */
45
+ column: Readonly<TtVTableColumn<Row, Key>>;
46
+ /** 当前字段路径。 */
47
+ field?: TtVTableFieldPath;
48
+ /** 当前原始值。 */
49
+ value: unknown;
50
+ /** 当前表格稳定公共 API。 */
51
+ tableApi: TtVTableApi<Row, Key>;
52
+ /** 通过 records feature 精确修改当前单元格。 */
53
+ setCellValue: (value: unknown) => void;
54
+ /** 需要原生坐标时使用的高级上下文。 */
55
+ nativeContext: TtVTableNativeCellContext;
56
+ }
57
+ /** Vue 表头 renderer 的标准上下文。 */
58
+ export interface TtVTableHeaderRenderContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
59
+ /** 当前语义列。 */
60
+ column: Readonly<TtVTableColumn<Row, Key>>;
61
+ /** 当前表格稳定公共 API。 */
62
+ tableApi: TtVTableApi<Row, Key>;
63
+ /** 需要原生坐标时使用的高级上下文。 */
64
+ nativeContext: TtVTableNativeCellContext;
65
+ }
66
+ /** 正文 Vue DOM renderer,可使用内联 JSX 回调或命名插槽。 */
67
+ export interface TtVTableVueRenderer<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
68
+ /** 固定为 Vue DOM 渲染通道。 */
69
+ kind: "vue";
70
+ /** 内联 Vue render/JSX 回调。 */
71
+ render?: (context: TtVTableCellRenderContext<Row, Key>) => VNodeChild;
72
+ /** 命名插槽。 */
73
+ slot?: string;
74
+ /** 是否允许 DOM 接收鼠标和键盘交互。 */
75
+ interactive?: boolean;
76
+ /** 当前列建议保留的最大 DOM 缓存数。 */
77
+ maxCacheCount?: number;
78
+ }
79
+ /** 表头 Vue DOM renderer,可使用内联 JSX 回调或命名插槽。 */
80
+ export interface TtVTableVueHeaderRenderer<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
81
+ /** 固定为 Vue DOM 渲染通道。 */
82
+ kind: "vue";
83
+ /** 内联 Vue render/JSX 回调。 */
84
+ render?: (context: TtVTableHeaderRenderContext<Row, Key>) => VNodeChild;
85
+ /** 命名插槽。 */
86
+ slot?: string;
87
+ /** 是否允许 DOM 接收鼠标和键盘交互。 */
88
+ interactive?: boolean;
89
+ /** 当前表头建议保留的最大 DOM 缓存数。 */
90
+ maxCacheCount?: number;
91
+ }
92
+ /** TtVTable 的语义列定义。 */
93
+ export interface TtVTableColumn<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
94
+ /** 整棵列树中唯一且稳定的语义键。 */
95
+ key: string;
96
+ /** 业务字段或嵌套字段路径。 */
97
+ field?: TtVTableFieldPath;
98
+ /** 默认 Canvas 表头文字。 */
99
+ title?: string;
100
+ /** 固定列宽。 */
101
+ width?: number | string;
102
+ /** 最小列宽。 */
103
+ minWidth?: number | string;
104
+ /** 最大列宽。 */
105
+ maxWidth?: number | string;
106
+ /** 正文对齐方式。 */
107
+ align?: "center" | "left" | "right";
108
+ /** 是否隐藏该列。 */
109
+ visible?: boolean;
110
+ /** 冻结列位置。 */
111
+ frozen?: boolean | "left" | "right";
112
+ /** 是否作为树结构展示列。 */
113
+ tree?: boolean;
114
+ /** 嵌套表头子列。 */
115
+ columns?: readonly TtVTableColumn<Row, Key>[];
116
+ /** 复杂正文启用的 Vue DOM renderer。 */
117
+ renderer?: TtVTableVueRenderer<Row, Key>;
118
+ /** 复杂表头启用的 Vue DOM renderer。 */
119
+ headerRenderer?: TtVTableVueHeaderRenderer<Row, Key>;
120
+ /** Canvas、VRender 和其他原生列能力的受控透传配置。 */
121
+ native?: TtVTableNativeColumnOptions;
122
+ }
123
+ export {};
@@ -0,0 +1,26 @@
1
+ /** TtVTable 可识别的语义错误码。 */
2
+ export type TtVTableErrorCode = "TT_VTABLE_SOURCE_CONFLICT" | "TT_VTABLE_ROW_KEY_REQUIRED" | "TT_VTABLE_ROW_KEY_INVALID" | "TT_VTABLE_DUPLICATE_ROW_KEY" | "TT_VTABLE_DUPLICATE_COLUMN_KEY" | "TT_VTABLE_CONTAINER_SIZE_INVALID" | "TT_VTABLE_RENDERER_INVALID" | "TT_VTABLE_SLOT_MISSING" | "TT_VTABLE_NATIVE_OPTION_RESERVED" | "TT_VTABLE_NATIVE_EVENT_RESERVED" | "TT_VTABLE_RECORD_NOT_FOUND" | "TT_VTABLE_NOT_READY" | "TT_VTABLE_CONTROLLER_BOUND" | "TT_VTABLE_RELEASED" | "TT_VTABLE_INIT_FAILED" | "TT_VTABLE_FETCH_FAILED" | "TT_VTABLE_TREE_FETCH_FAILED" | "TT_VTABLE_EDIT_VALIDATION_FAILED";
3
+ /** 错误附带的结构化上下文。 */
4
+ export type TtVTableErrorContext = Readonly<Record<string, unknown>>;
5
+ /** TtVTable 对外抛出的语义错误。 */
6
+ export declare class TtVTableError extends Error {
7
+ /** 稳定错误码。 */
8
+ readonly code: TtVTableErrorCode;
9
+ /** 帮助定位配置或运行状态的上下文。 */
10
+ readonly context: TtVTableErrorContext;
11
+ /**
12
+ * 创建一个带稳定错误码的表格错误。
13
+ * @param code 稳定错误码
14
+ * @param message 可读错误说明
15
+ * @param context 结构化上下文
16
+ */
17
+ constructor(code: TtVTableErrorCode, message: string, context?: TtVTableErrorContext);
18
+ }
19
+ /**
20
+ * 创建一个 TtVTable 语义错误。
21
+ * @param code 稳定错误码
22
+ * @param message 可读错误说明
23
+ * @param context 结构化上下文
24
+ * @returns 新建的语义错误
25
+ */
26
+ export declare function createTtVTableError(code: TtVTableErrorCode, message: string, context?: TtVTableErrorContext): TtVTableError;
@@ -0,0 +1,26 @@
1
+ var s = Object.defineProperty;
2
+ var a = (e, r, t) => r in e ? s(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
+ var o = (e, r, t) => a(e, typeof r != "symbol" ? r + "" : r, t);
4
+ class T extends Error {
5
+ /**
6
+ * 创建一个带稳定错误码的表格错误。
7
+ * @param code 稳定错误码
8
+ * @param message 可读错误说明
9
+ * @param context 结构化上下文
10
+ */
11
+ constructor(t, n, c = {}) {
12
+ super(`[${t}] ${n}`);
13
+ /** 稳定错误码。 */
14
+ o(this, "code");
15
+ /** 帮助定位配置或运行状态的上下文。 */
16
+ o(this, "context");
17
+ this.name = "TtVTableError", this.code = t, this.context = c;
18
+ }
19
+ }
20
+ function l(e, r, t = {}) {
21
+ return new T(e, r, t);
22
+ }
23
+ export {
24
+ T as TtVTableError,
25
+ l as createTtVTableError
26
+ };
@@ -0,0 +1,69 @@
1
+ import { TtVTableApi, TtVTableFieldPath, TtVTableRecordChange, TtVTableRowKey, TtVTableSortDescriptor } from './table-api';
2
+ import { TtVTableFetchRequest, TtVTableFetchResponse } from './table-props';
3
+ /** 分页变化来源。 */
4
+ export type TtVTablePageChangeReason = "page" | "page-size" | "reset";
5
+ /** 分页变化事件载荷。 */
6
+ export interface TtVTablePageChange {
7
+ /** 当前页码。 */
8
+ page: number;
9
+ /** 当前每页记录数。 */
10
+ pageSize: number;
11
+ /** 本次变化来源。 */
12
+ reason: TtVTablePageChangeReason;
13
+ }
14
+ /** 编辑提交事件载荷。 */
15
+ export interface TtVTableEditCommit<Key extends TtVTableRowKey = TtVTableRowKey> {
16
+ /** 业务记录主键。 */
17
+ rowKey: Key;
18
+ /** 修改字段路径。 */
19
+ field: TtVTableFieldPath;
20
+ /** 修改前的值。 */
21
+ previousValue: unknown;
22
+ /** 已提交值。 */
23
+ value: unknown;
24
+ /** 本次修改涉及的字段。 */
25
+ changedFields: readonly TtVTableFieldPath[];
26
+ /** 固定编辑来源。 */
27
+ source: "editing";
28
+ }
29
+ /** 树子节点加载成功事件载荷。 */
30
+ export interface TtVTableTreeLoadSuccess<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
31
+ /** 父节点主键。 */
32
+ parentKey: Key;
33
+ /** 已写入运行时的子记录。 */
34
+ children: readonly Row[];
35
+ }
36
+ /** 树子节点加载失败事件载荷。 */
37
+ export interface TtVTableTreeLoadError<Key extends TtVTableRowKey = TtVTableRowKey> {
38
+ /** 父节点主键。 */
39
+ parentKey: Key;
40
+ /** 规范化后的请求错误。 */
41
+ error: Error;
42
+ }
43
+ /** TtVTable 允许公开的语义事件。 */
44
+ export interface TtVTableEmits<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> {
45
+ /** 原生实例与全部 feature 已经就绪。 */
46
+ ready: [tableApi: TtVTableApi<Row, Key>];
47
+ /** records API 或 Vue renderer 提交了精确记录变化。 */
48
+ "record-change": [change: TtVTableRecordChange<Row, Key>];
49
+ /** 最新远程请求成功。 */
50
+ "fetch-success": [response: TtVTableFetchResponse<Row>, request: TtVTableFetchRequest<QueryParams>];
51
+ /** 最新远程请求失败。 */
52
+ "fetch-error": [error: Error, request: TtVTableFetchRequest<QueryParams>];
53
+ /** 分页状态发生语义变化。 */
54
+ "page-change": [change: TtVTablePageChange];
55
+ /** 排序状态发生语义变化。 */
56
+ "sort-change": [sort: readonly TtVTableSortDescriptor[]];
57
+ /** 筛选状态发生语义变化。 */
58
+ "filter-change": [filters: Readonly<Record<string, unknown>>];
59
+ /** 编辑器成功提交。 */
60
+ "edit-commit": [change: TtVTableEditCommit<Key>];
61
+ /** 编辑校验或提交失败。 */
62
+ "edit-error": [error: Error];
63
+ /** 树子节点成功写入。 */
64
+ "tree-load-success": [change: TtVTableTreeLoadSuccess<Row, Key>];
65
+ /** 树子节点加载失败。 */
66
+ "tree-load-error": [failure: TtVTableTreeLoadError<Key>];
67
+ /** 列偏好发生语义变化。 */
68
+ "column-preferences-change": [preferences: unknown];
69
+ }
@@ -0,0 +1,216 @@
1
+ import { ListTableConstructorOptions, TYPES } from '@visactor/vtable';
2
+ import { TtVTableFieldPath, TtVTableMutationMode, TtVTableRowKey, TtVTableSortDescriptor } from './table-api';
3
+ import { TtVTableColumn } from './table-column';
4
+ import { VTableColumnPreferenceStorage } from '../features/column-preferences/column-preference-storage';
5
+ /** 由封装层固定控制的原生 options 字段。 */
6
+ export type TtVTableReservedNativeOptionKey = "columns" | "pagination" | "records";
7
+ /** 由封装层固定控制的 customConfig 字段。 */
8
+ export type TtVTableReservedCustomConfigKey = "createReactContainer";
9
+ /** 由封装层独占的原生事件。 */
10
+ export type TtVTableReservedNativeEventName = "change_cell_value" | "change_cell_values" | "checkbox_state_change" | "radio_state_change" | "tree_hierarchy_state_change";
11
+ /** 官方声明之外由 Vue DOM 插件读取的 customConfig 扩展。 */
12
+ export interface TtVTableVueBridgeCustomConfig {
13
+ /** Vue DOM 插件允许保留的最大缓存数量。 */
14
+ maxDomCacheCount?: number;
15
+ /** 延迟读取当前 Vue appContext。 */
16
+ getVueUserAppContext?: () => unknown;
17
+ }
18
+ /** 允许业务配置且不会覆盖受控状态的 customConfig。 */
19
+ export type TtVTableNativeCustomConfig = Omit<NonNullable<ListTableConstructorOptions["customConfig"]>, TtVTableReservedCustomConfigKey> & TtVTableVueBridgeCustomConfig;
20
+ /** 允许业务透传的原生 ListTable options。 */
21
+ export type TtVTableNativeOptions = Omit<ListTableConstructorOptions, TtVTableReservedNativeOptionKey | "customConfig"> & {
22
+ /** 不允许覆盖 createReactContainer 的原生扩展配置。 */
23
+ customConfig?: TtVTableNativeCustomConfig;
24
+ };
25
+ /** 单个原生事件监听函数。 */
26
+ export type TtVTableNativeEventListener<EventName extends keyof TYPES.TableEventHandlersEventArgumentMap> = (event: TYPES.TableEventHandlersEventArgumentMap[EventName]) => void;
27
+ /** 允许业务监听且不会绕过受控 feature 的原生事件。 */
28
+ export type TtVTableNativeEvents = Partial<{
29
+ [EventName in Exclude<keyof TYPES.TableEventHandlersEventArgumentMap, TtVTableReservedNativeEventName>]: TtVTableNativeEventListener<EventName>;
30
+ }>;
31
+ /** 业务主键字段路径或读取函数。 */
32
+ export type TtVTableRowKeySource<Row, Key extends TtVTableRowKey = TtVTableRowKey> = TtVTableFieldPath | ((record: Readonly<Row>) => Key);
33
+ /** 一次远程 records 请求的完整上下文。 */
34
+ export interface TtVTableFetchRequest<QueryParams extends Record<string, unknown>> {
35
+ /** 当前页码,起始值为 1。 */
36
+ page: number;
37
+ /** 当前每页记录数。 */
38
+ pageSize: number;
39
+ /** 不可变查询参数根快照。 */
40
+ queryParams: Readonly<QueryParams>;
41
+ /** 当前排序条件。 */
42
+ sort: readonly TtVTableSortDescriptor[];
43
+ /** 当前筛选条件。 */
44
+ filters: Readonly<Record<string, unknown>>;
45
+ /** 新请求或释放时会终止的信号。 */
46
+ signal: AbortSignal;
47
+ }
48
+ /** 一次远程 records 请求的返回值。 */
49
+ export interface TtVTableFetchResponse<Row> {
50
+ /** 当前页记录。 */
51
+ records: readonly Row[];
52
+ /** 服务端结果总数。 */
53
+ total: number;
54
+ }
55
+ /** 远程 records 请求函数。 */
56
+ export type TtVTableFetchRecords<Row, QueryParams extends Record<string, unknown>> = (request: TtVTableFetchRequest<QueryParams>) => Promise<TtVTableFetchResponse<Row>>;
57
+ /** 编辑校验上下文。 */
58
+ export interface TtVTableEditValidationContext<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
59
+ /** 当前运行时记录。 */
60
+ record: Readonly<Row>;
61
+ /** 当前业务主键。 */
62
+ rowKey: Key;
63
+ /** 当前字段路径。 */
64
+ field: TtVTableFieldPath;
65
+ /** 开始编辑时的值。 */
66
+ previousValue: unknown;
67
+ /** 待提交值。 */
68
+ value: unknown;
69
+ }
70
+ /** 编辑校验函数。 */
71
+ export type TtVTableEditValidator<Row, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableEditValidationContext<Row, Key>) => boolean | Promise<boolean | string | undefined | void> | string | undefined | void;
72
+ /** 懒加载树节点的请求上下文。 */
73
+ export interface TtVTableTreeChildrenRequest<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
74
+ /** 当前父记录。 */
75
+ parent: Readonly<Row>;
76
+ /** 当前父记录主键。 */
77
+ parentKey: Key;
78
+ /** records 换根或释放时会终止的信号。 */
79
+ signal: AbortSignal;
80
+ }
81
+ /** 单选和多选配置。 */
82
+ export interface TtVTableSelectionOptions<Row> {
83
+ /** 选择模式。 */
84
+ mode?: "multiple" | "none" | "single";
85
+ /** 是否保留当前页之外的已选主键。 */
86
+ reserveAcrossPages?: boolean;
87
+ /** 是否启用树节点父子级联。 */
88
+ cascade?: boolean;
89
+ /** 业务行是否允许选择。 */
90
+ isRowSelectable?: (record: Readonly<Row>) => boolean;
91
+ }
92
+ /** Element Plus 分页组件的语义配置。 */
93
+ export interface TtVTablePaginationOptions {
94
+ /** 初始页码。 */
95
+ page?: number;
96
+ /** 初始每页记录数。 */
97
+ pageSize?: number;
98
+ /** 可选每页记录数集合。 */
99
+ pageSizes?: readonly number[];
100
+ /** ElPagination layout。 */
101
+ layout?: string;
102
+ /** 是否使用带背景的分页按钮。 */
103
+ background?: boolean;
104
+ /** 仅一页时是否隐藏分页。 */
105
+ hideOnSinglePage?: boolean;
106
+ }
107
+ /** 远程查询策略。 */
108
+ export interface TtVTableQueryOptions {
109
+ /** 挂载后是否立即发起首次请求。 */
110
+ immediate?: boolean;
111
+ /** 排序变化时是否回到第一页。 */
112
+ resetPageOnSort?: boolean;
113
+ /** 筛选变化时是否回到第一页。 */
114
+ resetPageOnFilter?: boolean;
115
+ }
116
+ /** 单元格编辑配置。 */
117
+ export interface TtVTableEditingOptions<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
118
+ /** 允许开始编辑的交互方式。 */
119
+ trigger?: "click" | "doubleclick" | "api" | readonly ("api" | "click" | "doubleclick")[];
120
+ /** 按字段路径配置校验函数。 */
121
+ validators?: Readonly<Record<string, TtVTableEditValidator<Row, Key>>>;
122
+ }
123
+ /** 树结构配置。 */
124
+ export interface TtVTableTreeOptions<Row, Key extends TtVTableRowKey = TtVTableRowKey> {
125
+ /** 子节点字段路径。 */
126
+ childrenField?: string;
127
+ /** 初始展开节点主键。 */
128
+ defaultExpandedKeys?: readonly Key[];
129
+ /** 是否复用已经加载的子节点。 */
130
+ cacheChildren?: boolean;
131
+ /** 异步加载子节点。 */
132
+ fetchTreeChildren?: (request: TtVTableTreeChildrenRequest<Row, Key>) => Promise<readonly Row[]>;
133
+ }
134
+ /** 列偏好配置。 */
135
+ export interface TtVTableColumnPreferenceOptions {
136
+ /** 是否保存列显隐、顺序、宽度和冻结状态。 */
137
+ persistent?: boolean;
138
+ /** 页面和用户维度唯一的列配置键。 */
139
+ columnsKey?: string;
140
+ /** 持久化结构版本。 */
141
+ schemaVersion?: number;
142
+ /** 高频列宽和拖拽写入的合并时长。 */
143
+ writeDelay?: number;
144
+ /** 可替换为服务端实现的列偏好存储。 */
145
+ storage?: VTableColumnPreferenceStorage;
146
+ }
147
+ /** 工具栏配置。 */
148
+ export interface TtVTableToolbarOptions {
149
+ /** 是否显示刷新命令。 */
150
+ refresh?: boolean;
151
+ /** 是否显示列设置命令。 */
152
+ columns?: boolean;
153
+ }
154
+ /** TtVTable 可组合 feature 配置。 */
155
+ export interface TtVTableFeatureOptions<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
156
+ /** 单选和多选。 */
157
+ selection?: TtVTableSelectionOptions<Row>;
158
+ /** Element Plus 分页。 */
159
+ pagination?: false | TtVTablePaginationOptions;
160
+ /** 远程查询。 */
161
+ query?: TtVTableQueryOptions;
162
+ /** 单元格编辑。 */
163
+ editing?: false | TtVTableEditingOptions<Row, Key>;
164
+ /** 树结构与懒加载。 */
165
+ tree?: false | TtVTableTreeOptions<Row, Key>;
166
+ /** 列偏好。 */
167
+ columnPreferences?: false | TtVTableColumnPreferenceOptions;
168
+ /** 工具栏。 */
169
+ toolbar?: false | TtVTableToolbarOptions;
170
+ }
171
+ /** Vue DOM 渲染通道配置。 */
172
+ export interface TtVTableRenderingOptions {
173
+ /** 全表 Vue DOM 缓存上限。 */
174
+ maxDomCacheCount?: number;
175
+ }
176
+ /** 本地和远程来源共享的 props。 */
177
+ export interface TtVTableSharedProps<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> {
178
+ /** 语义列配置。 */
179
+ columns: readonly TtVTableColumn<Row, Key>[];
180
+ /** 业务主键字段路径或读取函数。 */
181
+ rowKey: TtVTableRowKeySource<Row, Key>;
182
+ /** 远程查询参数,只监听根引用。 */
183
+ queryParams?: QueryParams;
184
+ /** 当前选择主键,由 v-model:selected-row-keys 管理。 */
185
+ selectedRowKeys?: readonly Key[];
186
+ /** 可组合 feature 配置。 */
187
+ features?: TtVTableFeatureOptions<Row, Key>;
188
+ /** 记录所有权策略。 */
189
+ mutationMode?: TtVTableMutationMode;
190
+ /** Vue DOM 渲染配置。 */
191
+ rendering?: TtVTableRenderingOptions;
192
+ /** 未封装的安全原生 options。 */
193
+ nativeOptions?: TtVTableNativeOptions;
194
+ /** 未被 feature 独占的原生事件。 */
195
+ nativeEvents?: TtVTableNativeEvents;
196
+ /** 表格容器宽度。 */
197
+ width?: number | string;
198
+ /** 表格容器高度。 */
199
+ height?: number | string;
200
+ }
201
+ /** 本地 records 来源。 */
202
+ export interface TtVTableLocalSourceProps<Row> {
203
+ /** 调用方持有的本地根快照。 */
204
+ records?: readonly Row[];
205
+ /** 本地模式不允许配置远程请求。 */
206
+ fetchRecords?: never;
207
+ }
208
+ /** 远程 records 来源。 */
209
+ export interface TtVTableRemoteSourceProps<Row, QueryParams extends Record<string, unknown>> {
210
+ /** 远程模式不接受本地根快照。 */
211
+ records?: never;
212
+ /** 远程记录请求函数。 */
213
+ fetchRecords: TtVTableFetchRecords<Row, QueryParams>;
214
+ }
215
+ /** TtVTable 完整 props。 */
216
+ export type TtVTableProps<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey, QueryParams extends Record<string, unknown> = Record<string, unknown>> = TtVTableSharedProps<Row, Key, QueryParams> & (TtVTableLocalSourceProps<Row> | TtVTableRemoteSourceProps<Row, QueryParams>);
@@ -0,0 +1,37 @@
1
+ import { VNodeChild } from 'vue';
2
+ import { TtVTableCellRenderContext, TtVTableHeaderRenderContext } from './table-column';
3
+ import { TtVTableApi, TtVTableRowKey } from './table-api';
4
+ /** Vue DOM 正文命名插槽。 */
5
+ export type TtVTableCellSlot<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableCellRenderContext<Row, Key>) => VNodeChild;
6
+ /** Vue DOM 表头命名插槽。 */
7
+ export type TtVTableHeaderSlot<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = (context: TtVTableHeaderRenderContext<Row, Key>) => VNodeChild;
8
+ /** 空状态插槽上下文。 */
9
+ export interface TtVTableEmptySlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
10
+ /** 当前稳定表格 API。 */
11
+ tableApi: TtVTableApi<Row, Key>;
12
+ }
13
+ /** 错误状态插槽上下文。 */
14
+ export interface TtVTableErrorSlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
15
+ /** 当前错误。 */
16
+ error: Error;
17
+ /** 当前稳定表格 API。 */
18
+ tableApi: TtVTableApi<Row, Key>;
19
+ /** 重新执行当前查询。 */
20
+ retry: () => Promise<boolean>;
21
+ }
22
+ /** 工具栏插槽上下文。 */
23
+ export interface TtVTableToolbarSlotContext<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
24
+ /** 当前稳定表格 API。 */
25
+ tableApi: TtVTableApi<Row, Key>;
26
+ }
27
+ /** 传给 VTableViewport 的动态 Vue renderer 集合。 */
28
+ export type TtVTableRendererSlots<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> = Readonly<Record<string, TtVTableCellSlot<Row, Key> | TtVTableHeaderSlot<Row, Key>>>;
29
+ /** TtVTable 固定界面插槽。 */
30
+ export interface TtVTableSlots<Row extends Record<string, unknown> = Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
31
+ /** 工具栏业务命令。 */
32
+ toolbar?: (context: TtVTableToolbarSlotContext<Row, Key>) => VNodeChild;
33
+ /** 空记录状态。 */
34
+ empty?: (context: TtVTableEmptySlotContext<Row, Key>) => VNodeChild;
35
+ /** 首次加载失败状态。 */
36
+ error?: (context: TtVTableErrorSlotContext<Row, Key>) => VNodeChild;
37
+ }
@@ -0,0 +1,12 @@
1
+ import { TtVTableApi, TtVTableRowKey } from '../public';
2
+ /** useVTable 与一个存活组件之间的稳定绑定控制器。 */
3
+ export interface TtVTableController<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey> {
4
+ /** 从创建开始保持引用不变的公共 API。 */
5
+ tableApi: TtVTableApi<Row, Key>;
6
+ /** 绑定一个组件创建的真实 API。 */
7
+ bind: (tableApi: TtVTableApi<Row, Key>) => void;
8
+ /** 解绑即将卸载的组件 API。 */
9
+ unbind: (tableApi: TtVTableApi<Row, Key>) => void;
10
+ }
11
+ /** 创建一个可在组件挂载前返回稳定 API 的控制器。 */
12
+ export declare function createVTableController<Row extends Record<string, unknown>, Key extends TtVTableRowKey = TtVTableRowKey>(): TtVTableController<Row, Key>;