@robot-admin/naive-ui-components 0.17.6 → 0.18.0

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 (200) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/C_AntV.css +10 -10
  3. package/dist/C_AntV.d.cts +2 -2
  4. package/dist/C_AntV.d.ts +2 -2
  5. package/dist/C_AntV2.cjs +1 -1
  6. package/dist/C_AntV2.js +1 -1
  7. package/dist/C_Date.cjs +1 -1
  8. package/dist/C_Date.css +5 -5
  9. package/dist/C_Date.d.cts +18 -2
  10. package/dist/C_Date.d.ts +18 -2
  11. package/dist/C_Date.js +1 -1
  12. package/dist/C_Date2.cjs +1 -1
  13. package/dist/C_Date2.js +1 -1
  14. package/dist/C_Draggable.css +53 -53
  15. package/dist/C_Draggable.d.cts +2 -2
  16. package/dist/C_Draggable.d.ts +2 -2
  17. package/dist/C_Draggable2.cjs +1 -1
  18. package/dist/C_Draggable2.js +1 -1
  19. package/dist/C_Editor.d.cts +1 -1
  20. package/dist/C_Editor.d.ts +1 -1
  21. package/dist/C_FormModal.d.cts +1 -1
  22. package/dist/C_FormModal.d.ts +1 -1
  23. package/dist/C_FormSearch.cjs +1 -1
  24. package/dist/C_FormSearch.css +52 -52
  25. package/dist/C_FormSearch.d.cts +18 -2
  26. package/dist/C_FormSearch.d.ts +18 -2
  27. package/dist/C_FormSearch.js +1 -1
  28. package/dist/C_FormSearch2.cjs +1 -1
  29. package/dist/C_FormSearch2.js +1 -1
  30. package/dist/C_Guide.d.cts +1 -1
  31. package/dist/C_Guide.d.ts +1 -1
  32. package/dist/C_Icon.d.cts +1 -1
  33. package/dist/C_Icon.d.ts +1 -1
  34. package/dist/C_Language.d.cts +1 -1
  35. package/dist/C_Language.d.ts +1 -1
  36. package/dist/C_Loading.d.cts +1 -1
  37. package/dist/C_Loading.d.ts +1 -1
  38. package/dist/C_Login.d.cts +1 -1
  39. package/dist/C_Login.d.ts +1 -1
  40. package/dist/C_Markdown.d.cts +1 -1
  41. package/dist/C_Markdown.d.ts +1 -1
  42. package/dist/C_Menu.d.ts +1 -1
  43. package/dist/C_OrgChart.d.cts +1 -1
  44. package/dist/C_OrgChart.d.ts +1 -1
  45. package/dist/C_Progress.d.cts +1 -1
  46. package/dist/C_Progress.d.ts +1 -1
  47. package/dist/C_Skeleton.d.cts +1 -1
  48. package/dist/C_Skeleton.d.ts +1 -1
  49. package/dist/C_Steps.d.cts +1 -1
  50. package/dist/C_Steps.d.ts +1 -1
  51. package/dist/C_Table.base.css +144 -155
  52. package/dist/C_Table.css +144 -155
  53. package/dist/C_Table.d.cts +2 -2
  54. package/dist/C_Table.d.ts +6 -6
  55. package/dist/C_TagsView.d.cts +1 -1
  56. package/dist/C_TagsView.d.ts +1 -1
  57. package/dist/C_Theme.d.cts +1 -1
  58. package/dist/C_Theme.d.ts +1 -1
  59. package/dist/C_Time.cjs +1 -1
  60. package/dist/C_Time.css +4 -4
  61. package/dist/C_Time.d.cts +18 -2
  62. package/dist/C_Time.d.ts +18 -2
  63. package/dist/C_Time.js +1 -1
  64. package/dist/C_Time2.cjs +1 -1
  65. package/dist/C_Time2.js +1 -1
  66. package/dist/C_Timeline.d.cts +1 -1
  67. package/dist/C_Timeline.d.ts +1 -1
  68. package/dist/C_Transfer.css +26 -26
  69. package/dist/C_Transfer.d.cts +2 -2
  70. package/dist/C_Transfer.d.ts +2 -2
  71. package/dist/C_Transfer2.cjs +1 -1
  72. package/dist/C_Transfer2.js +1 -1
  73. package/dist/C_Tree.css +23 -23
  74. package/dist/C_Tree.d.ts +4 -4
  75. package/dist/C_Tree2.cjs +1 -1
  76. package/dist/C_Tree2.js +1 -1
  77. package/dist/C_VtableGantt.cjs +1 -1
  78. package/dist/C_VtableGantt.css +31 -31
  79. package/dist/C_VtableGantt.d.cts +18 -2
  80. package/dist/C_VtableGantt.d.ts +18 -2
  81. package/dist/C_VtableGantt.js +1 -1
  82. package/dist/C_WorkFlow.css +150 -150
  83. package/dist/C_WorkFlow.d.cts +2 -2
  84. package/dist/C_WorkFlow.d.ts +2 -2
  85. package/dist/C_WorkFlow2.cjs +1 -1
  86. package/dist/C_WorkFlow2.js +1 -1
  87. package/dist/constants3.d.cts +3 -3
  88. package/dist/constants3.d.ts +3 -3
  89. package/dist/constants4.d.cts +8 -8
  90. package/dist/constants4.d.ts +8 -8
  91. package/dist/constants5.d.cts +2 -2
  92. package/dist/constants5.d.ts +2 -2
  93. package/dist/data.d.cts +10 -10
  94. package/dist/data.d.ts +10 -10
  95. package/dist/dateRange.d.cts +197 -0
  96. package/dist/dateRange.d.ts +197 -0
  97. package/dist/graphics.cjs +1 -0
  98. package/dist/graphics.d.cts +837 -0
  99. package/dist/graphics.d.ts +837 -0
  100. package/dist/graphics.js +1 -0
  101. package/dist/index.cjs +1 -1
  102. package/dist/index.d.cts +47 -43
  103. package/dist/index.d.ts +47 -44
  104. package/dist/index.js +1 -1
  105. package/dist/index.vue.d.cts +5 -5
  106. package/dist/index.vue.d.ts +5 -5
  107. package/dist/index10.vue.d.cts +4 -4
  108. package/dist/index10.vue.d.ts +54 -69
  109. package/dist/index11.vue.d.cts +54 -69
  110. package/dist/index11.vue.d.ts +52 -58
  111. package/dist/index12.vue.d.cts +52 -58
  112. package/dist/index12.vue.d.ts +124 -50
  113. package/dist/index13.vue.d.cts +124 -50
  114. package/dist/index13.vue.d.ts +51 -123
  115. package/dist/index14.vue.d.cts +51 -123
  116. package/dist/index14.vue.d.ts +26 -52
  117. package/dist/index15.vue.d.cts +26 -52
  118. package/dist/index15.vue.d.ts +12 -26
  119. package/dist/index16.vue.d.cts +12 -26
  120. package/dist/index16.vue.d.ts +129 -13
  121. package/dist/index17.vue.d.cts +129 -13
  122. package/dist/index17.vue.d.ts +76 -129
  123. package/dist/index18.vue.d.cts +76 -129
  124. package/dist/index18.vue.d.ts +65 -75
  125. package/dist/index19.vue.d.cts +97 -75
  126. package/dist/index19.vue.d.ts +94 -62
  127. package/dist/index2.vue.d.cts +2 -2
  128. package/dist/index2.vue.d.ts +2 -2
  129. package/dist/index20.vue.d.cts +40 -91
  130. package/dist/index20.vue.d.ts +40 -91
  131. package/dist/index21.vue.d.cts +89 -40
  132. package/dist/index21.vue.d.ts +89 -40
  133. package/dist/index22.vue.d.cts +37 -95
  134. package/dist/index22.vue.d.ts +37 -95
  135. package/dist/index23.vue.d.cts +8 -34
  136. package/dist/index23.vue.d.ts +8 -34
  137. package/dist/index24.vue.d.cts +86 -9
  138. package/dist/index24.vue.d.ts +86 -9
  139. package/dist/index25.vue.d.cts +99 -654
  140. package/dist/index25.vue.d.ts +99 -654
  141. package/dist/index26.vue.d.cts +66 -87
  142. package/dist/index26.vue.d.ts +66 -87
  143. package/dist/index3.vue.d.cts +3 -3
  144. package/dist/index3.vue.d.ts +3 -3
  145. package/dist/index4.vue.d.cts +3 -3
  146. package/dist/index6.vue.d.ts +3 -3
  147. package/dist/index7.vue.d.cts +3 -3
  148. package/dist/index8.vue.d.ts +2 -2
  149. package/dist/index9.vue.d.cts +2 -2
  150. package/dist/index9.vue.d.ts +4 -4
  151. package/dist/mapUtils.d.cts +1 -1
  152. package/dist/mapUtils.d.ts +1 -1
  153. package/dist/presets.d.cts +1 -1
  154. package/dist/presets.d.ts +1 -1
  155. package/dist/style.css +499 -510
  156. package/dist/types.d.ts +51 -0
  157. package/dist/types2.d.cts +51 -0
  158. package/dist/useCalendarEvents.d.cts +3 -3
  159. package/dist/useCalendarEvents.d.ts +3 -3
  160. package/dist/useCollapsePanel.d.cts +6 -6
  161. package/dist/useCollapsePanel.d.ts +6 -6
  162. package/dist/useCropperCore.d.cts +7 -7
  163. package/dist/useCropperCore.d.ts +7 -7
  164. package/dist/useDraggableLayout.d.cts +94 -125
  165. package/dist/useDraggableLayout.d.ts +94 -125
  166. package/dist/useDynamicFormState.d.cts +21 -8
  167. package/dist/useDynamicFormState.d.ts +21 -8
  168. package/dist/useEdgeInteraction.d.cts +10 -5
  169. package/dist/useEdgeInteraction.d.ts +10 -5
  170. package/dist/useFullscreen.d.cts +3 -3
  171. package/dist/useFullscreen.d.ts +3 -3
  172. package/dist/useInfiniteScroll.d.cts +2 -2
  173. package/dist/useInfiniteScroll.d.ts +2 -2
  174. package/dist/useQRCode.d.cts +4 -4
  175. package/dist/useQRCode.d.ts +4 -4
  176. package/dist/useSignatureHistory.d.cts +7 -7
  177. package/dist/useSignatureHistory.d.ts +7 -7
  178. package/dist/useSplitResize.d.cts +1 -1
  179. package/dist/useSplitResize.d.ts +1 -1
  180. package/dist/useTableQuery.cjs +2 -2
  181. package/dist/useTableQuery.d.cts +473 -463
  182. package/dist/useTableQuery.d.ts +473 -463
  183. package/dist/useTableQuery.js +2 -2
  184. package/dist/useTimeSelection.d.cts +19 -52
  185. package/dist/useTimeSelection.d.ts +19 -52
  186. package/dist/useWorkflowValidation.d.cts +534 -155
  187. package/dist/useWorkflowValidation.d.ts +534 -155
  188. package/dist/verification.d.cts +2 -2
  189. package/dist/verification.d.ts +2 -2
  190. package/docs/guides/usage.en.md +15 -0
  191. package/docs/guides/usage.md +15 -0
  192. package/package.json +1 -1
  193. package/dist/C_VtableGantt2.cjs +0 -1
  194. package/dist/C_VtableGantt2.js +0 -1
  195. package/dist/index27.vue.d.cts +0 -111
  196. package/dist/index27.vue.d.ts +0 -111
  197. package/dist/index28.vue.d.cts +0 -84
  198. package/dist/index28.vue.d.ts +0 -84
  199. package/dist/useSearchState.d.cts +0 -163
  200. package/dist/useSearchState.d.ts +0 -163
@@ -154,11 +154,12 @@ declare const printPresets: {
154
154
  };
155
155
  //#endregion
156
156
  //#region src/components/C_Table/composables/useDynamicRow.d.ts
157
- interface DynamicRowsOptions<T extends object = DataRecord> {
157
+ interface DynamicRowsBaseOptions<T extends object> {
158
158
  /** 总开关;关闭时公开方法保持安全 no-op */
159
159
  enabled?: boolean;
160
160
  rowKey?: string | ((row: T) => DataTableRowKey);
161
- defaultRowData?: () => T;
161
+ /** 新增返回完整业务行;复制时可接收原行副本,函数 rowKey 需返回完整的新副本。 */
162
+ defaultRowData?: (source?: T) => T;
162
163
  enableRadioSelection?: boolean;
163
164
  enableAdd?: boolean;
164
165
  enableInsert?: boolean;
@@ -181,6 +182,10 @@ interface DynamicRowsOptions<T extends object = DataRecord> {
181
182
  onRowCopy?: (originalRow: T, newRow: T) => void;
182
183
  onRowMove?: (row: T, fromIndex: number, toIndex: number) => void;
183
184
  }
185
+ /** 明确业务模型必须由工厂创建完整记录;开放记录保留原有空行兼容入口。 */
186
+ type DynamicRowsOptions<T extends object = DataRecord> = DynamicRowsBaseOptions<T> & (string extends keyof T ? unknown : {
187
+ defaultRowData: (source?: T) => T;
188
+ });
184
189
  interface DynamicRowsReturn<T extends object = DataRecord> {
185
190
  selectedRowKey: Ref<DataTableRowKey | null>;
186
191
  selectedRowData: Ref<T | null>;
@@ -209,7 +214,7 @@ interface DynamicRowsReturn<T extends object = DataRecord> {
209
214
  /**
210
215
  * 表格动态行操作功能组合
211
216
  */
212
- declare function useDynamicRows<T extends object = DataRecord>(data: Readonly<Ref<T[]>>, options?: MaybeRefOrGetter<DynamicRowsOptions<T>>): DynamicRowsReturn<T>;
217
+ declare function useDynamicRows<T extends object = DataRecord>(data: Readonly<Ref<T[]>>, ...args: string extends keyof T ? [options?: MaybeRefOrGetter<DynamicRowsOptions<T>>] : [options: MaybeRefOrGetter<DynamicRowsOptions<T>>]): DynamicRowsReturn<T>;
213
218
  //#endregion
214
219
  //#region src/components/C_Table/composables/useRowDrag.d.ts
215
220
  interface RowDragConfig {
@@ -382,17 +387,17 @@ interface CrudBinding<T extends object = DataRecord> {
382
387
  /** 提供 save 时 edit 函数只标记保存能力;自定义编辑入口放到 config.actions.edit。 */
383
388
  actions?: ComputedRef<SimpleTableActions<T>>;
384
389
  pagination?: ComputedRef<PaginationConfig | boolean | undefined>;
385
- tableRef?: Ref<any>;
386
- save?: (...args: any[]) => any;
390
+ tableRef?: Ref<unknown>;
391
+ save?: (row: T, rowIndex?: number, columnKey?: string) => unknown | Promise<unknown>;
387
392
  handleCancel?: () => void;
388
393
  handlePaginationChange?: (page: number, pageSize: number) => void;
389
- handleRowDelete?: (...args: any[]) => any;
394
+ handleRowDelete?: (row: T, index?: number) => unknown | Promise<unknown>;
390
395
  detail?: {
391
- show: (...args: any[]) => void;
396
+ show: (row: T) => unknown;
392
397
  };
393
398
  }
394
399
  /** C_Table :config prop 的类型 — 所有功能配置收拢在此 */
395
- interface TableConfig<T extends object = DataRecord> {
400
+ interface TableConfig<T extends object = DataRecord, C = unknown> {
396
401
  /** 与 C_Form / C_FormSearch 共用密度;局部 display.size 等显式配置优先。 */
397
402
  density?: ComponentDensity;
398
403
  /** 组件级反馈适配器;未提供时尝试复用 Naive Provider,再安全降级 */
@@ -408,11 +413,11 @@ interface TableConfig<T extends object = DataRecord> {
408
413
  /** 分页配置 */
409
414
  pagination?: PaginationConfig | boolean;
410
415
  /** 展开行配置 */
411
- expand?: ExpandConfig$1<T> | boolean;
416
+ expand?: ExpandConfig$1<T, C> | boolean;
412
417
  /** 选择配置 */
413
- selection?: SelectionConfig$1<T> | boolean;
418
+ selection?: SelectionConfig$1<T, C> | boolean;
414
419
  /** 动态行配置 */
415
- dynamicRows?: DynamicRowsOptions<T> | boolean;
420
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false);
416
421
  /** 工具栏 */
417
422
  toolbar?: ToolbarConfig;
418
423
  /** 表格显示属性 */
@@ -453,23 +458,23 @@ interface EditConfig<T extends object = DataRecord> {
453
458
  /** 编辑或保存失败回调 */
454
459
  onError?: (error: unknown) => void;
455
460
  }
456
- interface ExpandConfig$1<T extends object = DataRecord> {
461
+ interface ExpandConfig$1<T extends object = DataRecord, C = unknown> {
457
462
  enabled?: boolean;
458
463
  defaultExpandedKeys?: DataTableRowKey[];
459
- onLoadData?: (row: T) => Promise<unknown[]> | unknown[];
464
+ onLoadData?: (row: T) => Promise<C[]> | C[];
460
465
  /** 展开数据加载失败回调 */
461
466
  onError?: (error: unknown, row: T) => void;
462
- renderContent?: (row: T, expandData: unknown[], loading: boolean, childSelection?: unknown) => VNodeChild;
467
+ renderContent?: (row: T, expandData: C[], loading: boolean, childSelection?: ChildSelectionState) => VNodeChild;
463
468
  rowExpandable?: (row: T) => boolean;
464
469
  }
465
- interface SelectionConfig$1<T extends object = DataRecord> {
470
+ interface SelectionConfig$1<T extends object = DataRecord, C = unknown> {
466
471
  enabled?: boolean;
467
472
  defaultCheckedKeys?: DataTableRowKey[];
468
473
  rowCheckable?: (row: T) => boolean;
469
474
  maxSelection?: number;
470
475
  childSelection?: {
471
476
  enabled?: boolean;
472
- childRowCheckable?: (childRow: unknown, parentRow: T) => boolean;
477
+ childRowCheckable?: (childRow: C, parentRow: T) => boolean;
473
478
  };
474
479
  parentChildLink?: {
475
480
  enabled?: boolean;
@@ -575,7 +580,7 @@ interface ResolvedConfig {
575
580
  defaultExpandedKeys: DataTableRowKey[] | undefined;
576
581
  onLoadExpandData: ((row: DataRecord) => Promise<unknown[]> | unknown[]) | undefined;
577
582
  onExpandError: ((error: unknown, row: DataRecord) => void) | undefined;
578
- renderExpandContent: ((row: DataRecord, expandData: unknown[], loading: boolean, childSelection?: unknown) => VNodeChild) | undefined;
583
+ renderExpandContent: ((row: DataRecord, expandData: unknown[], loading: boolean, childSelection?: ChildSelectionState) => VNodeChild) | undefined;
579
584
  rowExpandable: ((row: DataRecord) => boolean) | undefined;
580
585
  enableSelection: boolean;
581
586
  defaultCheckedKeys: DataTableRowKey[] | undefined;
@@ -643,245 +648,6 @@ declare const createEditModeChecker: (config: ResolvedConfig) => {
643
648
  isCellEditMode: () => boolean;
644
649
  };
645
650
  //#endregion
646
- //#region src/components/C_Table/composables/useRowEdit.d.ts
647
- /** 行级校验错误 */
648
- interface RowValidationError {
649
- field: string;
650
- message: string;
651
- }
652
- /**
653
- * 行编辑配置选项
654
- */
655
- interface RowEditOptions {
656
- data: () => DataRecord[];
657
- rowKey: (row: DataRecord) => DataTableRowKey;
658
- onSave?: (rowData: DataRecord, rowIndex: number, originalKey?: DataTableRowKey) => void | Promise<void>;
659
- onCancel?: (rowData: DataRecord, rowIndex: number) => void | Promise<void>;
660
- /** 列配置(用于提取校验规则) */
661
- columns?: () => TableColumn[];
662
- }
663
- /**
664
- * 可编辑行组合函数,提供表格整行的编辑功能
665
- */
666
- declare function useRowEdit(options: RowEditOptions): {
667
- editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
668
- editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
669
- isSaving: vue.Ref<boolean, boolean>;
670
- isEditingRow: (rowKey: DataTableRowKey) => boolean;
671
- startEditRow: (rowKey: DataTableRowKey) => boolean;
672
- cancelEditRow: () => Promise<void>;
673
- saveEditRow: () => Promise<{
674
- updatedData: DataRecord;
675
- rowIndex: number;
676
- } | undefined>;
677
- validateRow: () => Promise<boolean>;
678
- validationErrors: vue.Ref<{
679
- field: string;
680
- message: string;
681
- }[], RowValidationError[] | {
682
- field: string;
683
- message: string;
684
- }[]>;
685
- getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
686
- updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
687
- findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
688
- invalidate: () => void;
689
- };
690
- //#endregion
691
- //#region src/components/C_Table/composables/useTableManager.d.ts
692
- /**
693
- * 表格管理器配置接口
694
- */
695
- interface TableManagerConfig {
696
- feedback?: ComponentFeedback;
697
- locale?: ComponentLocale;
698
- editable: boolean;
699
- editMode: string;
700
- showRowActions: boolean;
701
- modalTitle: string;
702
- modalWidth: number;
703
- onEditSave?: (rowData: DataRecord, rowIndex: number, columnKey?: string) => void | Promise<void>;
704
- onEditCancel?: (rowData: DataRecord, rowIndex: number) => void | Promise<void>;
705
- onEditError?: (error: unknown) => void;
706
- expandable: boolean;
707
- defaultExpandedKeys?: DataTableRowKey[];
708
- onLoadExpandData?: (row: DataRecord) => Promise<any[]> | any[];
709
- onExpandError?: (error: unknown, row: DataRecord) => void;
710
- renderExpandContent?: unknown;
711
- rowExpandable?: (row: DataRecord) => boolean;
712
- enableSelection: boolean;
713
- defaultCheckedKeys?: DataTableRowKey[];
714
- rowCheckable?: (row: DataRecord) => boolean;
715
- maxSelection?: number;
716
- enableChildSelection: boolean;
717
- childRowCheckable?: (childRow: DataRecord, parentRow: DataRecord) => boolean;
718
- enableParentChildLink: boolean;
719
- parentChildLinkMode: ParentChildLinkMode;
720
- dynamicRows?: DynamicRowsOptions<DataRecord>;
721
- treeEnabled?: boolean;
722
- treeChildrenKey?: string;
723
- }
724
- /**
725
- * 表格管理器参数接口
726
- */
727
- interface TableManagerParams {
728
- config: MaybeRefOrGetter<TableManagerConfig>;
729
- data: () => DataRecord[];
730
- rowKey: (row: DataRecord) => DataTableRowKey;
731
- emit: (...args: any[]) => unknown;
732
- /** 列配置(用于编辑校验) */
733
- columns?: () => TableColumn[];
734
- /** UI 壳提供加载内容,状态引擎保持可独立调用。 */
735
- renderLoading?: () => VNodeChild;
736
- /** String row-key field inherited by dynamic row creation; explicit dynamicRows.rowKey wins. */
737
- rowKeyField?: MaybeRefOrGetter<string | undefined>;
738
- }
739
- /**
740
- * 事件处理器接口
741
- */
742
- interface EventHandlers {
743
- onSave: (rowData: DataRecord, rowIndex: number, columnKey?: string, originalKey?: DataTableRowKey) => Promise<void>;
744
- onCancel: (rowData: DataRecord, rowIndex: number) => Promise<void>;
745
- onExpandChange: (keys: DataTableRowKey[], row?: DataRecord, expanded?: boolean) => void;
746
- onSelectionChange: (checkedKeys: DataTableRowKey[], checkedRows: DataRecord[], childSelections: Map<DataTableRowKey, DataTableRowKey[]>) => void;
747
- onChildSelectionChange: (parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: DataRecord[]) => void;
748
- onRowChange: (data: DataRecord[]) => void;
749
- onRowSelectionChange: (selectedKey: DataTableRowKey | null, selectedRow: DataRecord | null) => void;
750
- onRowAdd: (newRow: DataRecord) => void;
751
- onRowDelete: (deletedRow: DataRecord, index: number) => void;
752
- onRowCopy: (originalRow: DataRecord, newRow: DataRecord) => void;
753
- onRowMove: (row: DataRecord, fromIndex: number, toIndex: number) => void;
754
- }
755
- /**
756
- * 表格统一状态管理器
757
- */
758
- declare function useTableManager(params: TableManagerParams): {
759
- editStates: {
760
- rowEdit: {
761
- editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
762
- editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
763
- isSaving: vue.Ref<boolean, boolean>;
764
- isEditingRow: (rowKey: DataTableRowKey) => boolean;
765
- startEditRow: (rowKey: DataTableRowKey) => boolean;
766
- cancelEditRow: () => Promise<void>;
767
- saveEditRow: () => Promise<{
768
- updatedData: DataRecord;
769
- rowIndex: number;
770
- } | undefined>;
771
- validateRow: () => Promise<boolean>;
772
- validationErrors: vue.Ref<{
773
- field: string;
774
- message: string;
775
- }[], RowValidationError[] | {
776
- field: string;
777
- message: string;
778
- }[]>;
779
- getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
780
- updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
781
- findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
782
- invalidate: () => void;
783
- };
784
- cellEdit: {
785
- editingCell: vue.Ref<{
786
- rowKey: DataTableRowKey | null;
787
- columnKey: string | null;
788
- }, {
789
- rowKey: DataTableRowKey | null;
790
- columnKey: string | null;
791
- } | {
792
- rowKey: DataTableRowKey | null;
793
- columnKey: string | null;
794
- }>;
795
- editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
796
- isSaving: vue.Ref<boolean, boolean>;
797
- isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
798
- startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
799
- saveEditCell: () => Promise<{
800
- updatedData: {
801
- [x: string]: unknown;
802
- };
803
- rowIndex: number;
804
- columnKey: string;
805
- } | undefined>;
806
- cancelEditCell: () => void;
807
- validateCell: () => Promise<boolean>;
808
- cellValidationError: vue.Ref<string | null, string | null>;
809
- getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
810
- updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
811
- findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
812
- invalidate: () => void;
813
- };
814
- modalEdit: {
815
- isModalVisible: vue.Ref<boolean, boolean>;
816
- isSaving: vue.Ref<boolean, boolean>;
817
- editingData: vue.Ref<DataRecord, DataRecord>;
818
- editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
819
- editingRowIndex: vue.ComputedRef<number>;
820
- startEdit: (rowKey: DataTableRowKey, sourceData?: DataRecord | undefined) => boolean;
821
- saveEdit: (formData?: DataRecord | undefined) => Promise<{
822
- updatedData: any;
823
- rowIndex: number;
824
- } | undefined>;
825
- cancelEdit: () => Promise<boolean>;
826
- updateEditingData: (data: DataRecord) => boolean;
827
- resetEditingState: () => boolean;
828
- isEditingRow: (rowKey: DataTableRowKey) => boolean;
829
- getEditingRowData: (rowKey: DataTableRowKey) => any;
830
- invalidate: () => void;
831
- };
832
- };
833
- expandState: UseTableExpandReturn<DataRecord, DataRecord>;
834
- dynamicRowsState: DynamicRowsReturn<DataRecord>;
835
- stateManager: {
836
- edit: {
837
- /** 开始编辑 */start(rowKey: DataTableRowKey, columnKey?: string): void; /** 取消编辑 */
838
- cancel(): void; /** 保存编辑 */
839
- save(): Promise<void>; /** 是否正在编辑 */
840
- isEditing(rowKey: DataTableRowKey, columnKey?: string): boolean; /** 获取当前编辑数据 */
841
- getEditingData(): DataRecord | null | undefined;
842
- };
843
- expand: {
844
- /** 展开行 */row(rowKey: DataTableRowKey): Promise<void>; /** 折叠行 */
845
- collapse(rowKey: DataTableRowKey): void; /** 展开折叠切换 */
846
- toggle(rowKey: DataTableRowKey): Promise<void>; /** 展开所有行 */
847
- all(): Promise<void>; /** 折叠所有行 */
848
- collapseAll(): void; /** 检查行是否已展开 */
849
- isExpanded(rowKey: DataTableRowKey): boolean;
850
- };
851
- selection: {
852
- /** 选择指定行 */select(rowKey: DataTableRowKey): void; /** 取消选择指定行 */
853
- unselect(rowKey: DataTableRowKey): void; /** 选择所有行 */
854
- all(): void; /** 清除所有行选择 */
855
- clear(): void; /** 检查行是否已选择 */
856
- isSelected(rowKey: DataTableRowKey): boolean; /** 获取所有已选择的行数据 */
857
- getSelected(): DataRecord[];
858
- };
859
- childSelection: {
860
- /** 选择指定父行下的子行 */select(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 取消选择指定父行下的子行 */
861
- unselect(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 选择指定父行下的所有子行 */
862
- selectAll(parentKey: DataTableRowKey): void; /** 清除指定父行下的所有子行选择 */
863
- clear(parentKey: DataTableRowKey): void; /** 获取指定父行下所有已选择的子行数据 */
864
- getSelected(parentKey: DataTableRowKey): DataRecord[];
865
- };
866
- dynamicRows: {
867
- /** 添加行 */add(): void; /** 插入行 */
868
- insert(): void; /** 删除行 */
869
- delete(): void; /** 复制行 */
870
- copy(): void; /** 上移动态行 */
871
- moveUp(): void; /** 下移动态行 */
872
- moveDown(): void; /** 清空动态行数据 */
873
- clearSelection(): void; /** 获取当前选中的动态行数据 */
874
- getSelected(): DataRecord | null; /** 打印表格 */
875
- print(elementRef?: HTMLElement): Promise<void>; /** 导出表格数据 */
876
- download(elementRef?: HTMLElement, filename?: string): Promise<void>;
877
- }; /** 清除所有选择 */
878
- clearAllSelections(): void;
879
- };
880
- expandedKeys: vue.ComputedRef<DataTableRowKey[]>;
881
- checkedKeys: vue.ComputedRef<DataTableRowKey[]>;
882
- eventHandlers: EventHandlers;
883
- };
884
- //#endregion
885
651
  //#region src/components/C_Table/types.d.ts
886
652
  type RefLike<T> = {
887
653
  value: T;
@@ -1141,7 +907,7 @@ interface TableSelectionProps<T extends object = DataRecord, C = DataRecord> ext
1141
907
  }
1142
908
  interface TableProps<T extends object = DataRecord, C = DataRecord> extends Partial<TableBaseProps<T>>, TableDisplayProps, TableEditProps<T>, TableExpandProps<T, C>, TableSelectionProps<T, C> {
1143
909
  /** 功能配置的统一入口。 */
1144
- config?: TableConfig<T>;
910
+ config?: TableConfig<T, C>;
1145
911
  /** CRUD 模式自动提供 columns / data / loading,可省略对应属性。 */
1146
912
  crud?: CrudBinding<T>;
1147
913
  /** 原生分页入口;声明后优先于 config.pagination。 */
@@ -1174,6 +940,12 @@ interface TableEmits<T extends object = DataRecord, C = DataRecord> extends Tabl
1174
940
  'row-delete': [deletedRow: T, index: number];
1175
941
  'batch-action-error': [error: unknown, actionKey: string];
1176
942
  'row-key-error': [issues: TableRowKeyIssue<T>[]];
943
+ 'row-add': [newRow: T];
944
+ 'row-copy': [originalRow: T, newRow: T];
945
+ 'row-move': [row: T, fromIndex: number, toIndex: number];
946
+ 'row-selection-change': [selectedKey: DataTableRowKey | null, selectedRow: T | null];
947
+ 'view-detail': [data: T];
948
+ 'column-change': [columns: TableColumn<T>[]];
1177
949
  }
1178
950
  interface TableEditMethods<T extends object = DataRecord> {
1179
951
  startEdit: (rowKey: DataTableRowKey, columnKey?: string) => void;
@@ -1222,10 +994,56 @@ interface TablePaginationMethods {
1222
994
  resetToFirstPage: () => void;
1223
995
  getTotalPages: () => number;
1224
996
  }
997
+ /** 高级兼容入口的稳定契约;业务行类型与顶层实例保持一致。 */
998
+ interface TableManagerApi<T extends object = DataRecord, C = DataRecord> {
999
+ edit: {
1000
+ start: TableEditMethods<T>['startEdit'];
1001
+ cancel: TableEditMethods<T>['cancelEdit'];
1002
+ save: TableEditMethods<T>['saveEdit'];
1003
+ isEditing: TableEditMethods<T>['isEditing'];
1004
+ getEditingData: () => T | null | undefined;
1005
+ };
1006
+ expand: {
1007
+ row: TableExpandMethods['expandRow'];
1008
+ collapse: TableExpandMethods['collapseRow'];
1009
+ toggle: TableExpandMethods['toggleExpand'];
1010
+ all: TableExpandMethods['expandAll'];
1011
+ collapseAll: TableExpandMethods['collapseAll'];
1012
+ isExpanded: TableExpandMethods['isExpanded'];
1013
+ };
1014
+ selection: {
1015
+ select: TableSelectionMethods<T, C>['selectRow'];
1016
+ unselect: TableSelectionMethods<T, C>['unselectRow'];
1017
+ all: TableSelectionMethods<T, C>['selectAll'];
1018
+ clear: TableSelectionMethods<T, C>['clearSelection'];
1019
+ isSelected: TableSelectionMethods<T, C>['isRowSelected'];
1020
+ getSelected: TableSelectionMethods<T, C>['getSelectedRows'];
1021
+ };
1022
+ childSelection: {
1023
+ select: TableSelectionMethods<T, C>['selectChildRow'];
1024
+ unselect: TableSelectionMethods<T, C>['unselectChildRow'];
1025
+ selectAll: TableSelectionMethods<T, C>['selectAllChildren'];
1026
+ clear: TableSelectionMethods<T, C>['clearChildrenSelection'];
1027
+ getSelected: TableSelectionMethods<T, C>['getChildSelectedRows'];
1028
+ };
1029
+ dynamicRows: {
1030
+ add: TableDynamicRowsMethods<T>['addRow'];
1031
+ insert: TableDynamicRowsMethods<T>['insertRow'];
1032
+ delete: TableDynamicRowsMethods<T>['deleteRow'];
1033
+ copy: TableDynamicRowsMethods<T>['copyRow'];
1034
+ moveUp: TableDynamicRowsMethods<T>['moveRowUp'];
1035
+ moveDown: TableDynamicRowsMethods<T>['moveRowDown'];
1036
+ clearSelection: TableDynamicRowsMethods<T>['clearRowSelection'];
1037
+ getSelected: TableDynamicRowsMethods<T>['getSelectedRowData'];
1038
+ print: TableDynamicRowsMethods<T>['printTable'];
1039
+ download: TableDynamicRowsMethods<T>['downloadTableScreenshot'];
1040
+ };
1041
+ clearAllSelections: TableSelectionMethods<T, C>['clearAllSelections'];
1042
+ }
1225
1043
  interface TableInstance<T extends object = DataRecord, C = DataRecord> extends TableEditMethods<T>, TableExpandMethods, TableSelectionMethods<T, C>, TableDynamicRowsMethods<T>, TablePaginationMethods {
1226
1044
  exportData: () => Promise<void>;
1227
1045
  /** 高级兼容入口;常规操作优先使用实例上的选择、展开和编辑方法。 */
1228
- getManager: () => ReturnType<typeof useTableManager>['stateManager'];
1046
+ getManager: () => TableManagerApi<T, C>;
1229
1047
  /** 此嵌套对象中的 Ref 保持响应式,读取时使用 .value。 */
1230
1048
  crossPageSelection: Pick<UseCrossPageSelectionReturn<T>, 'selectedKeys' | 'selectedCount' | 'select' | 'unselect' | 'selectAll' | 'clearAll' | 'getSelectedRows'> & {
1231
1049
  enabled: ComputedRef<boolean>;
@@ -1291,119 +1109,42 @@ type ColumnWithKey = TableColumn & {
1291
1109
  };
1292
1110
  //#endregion
1293
1111
  //#region src/components/C_Table/index.vue.d.ts
1294
- declare const __VLS_export$1: <T extends object = DataRecord>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1295
- props: vue.PublicProps & __VLS_PrettifyLocal<{
1112
+ declare const __VLS_export$1: <T extends object = DataRecord, C = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$1<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1113
+ props: vue.PublicProps & __VLS_PrettifyLocal$1<{
1296
1114
  /** 根容器 class;普通 class/style 仍按既有契约转发到 NDataTable。 */wrapperClass?: vue.HTMLAttributes["class"]; /** 填满已确定高度的根容器,并为工具栏和分页预留空间。 */
1297
1115
  flexHeight?: boolean; /** 原生横向虚拟滚动;未声明业务列宽时仍提供可计算的数值兜底。 */
1298
1116
  virtualScrollX?: boolean; /** 列配置(crud 模式下可省略) */
1299
1117
  columns?: TableColumn<T>[]; /** 数据源(crud 模式下可省略) */
1300
1118
  data?: MaybeRefLike<T[]>; /** 加载状态 */
1301
1119
  loading?: MaybeRefLike<boolean>; /** 行唯一键 */
1302
- rowKey?: string | ((row: T) => DataTableRowKey); /** 统一功能配置(edit / selection / expand / pagination / dynamicRows / toolbar / display) */
1303
- config?: TableConfig<T>; /** Native pagination compatibility path; takes ownership over config.pagination. */
1120
+ rowKey?: TableRowKey<T>; /** 统一功能配置(edit / selection / expand / pagination / dynamicRows / toolbar / display) */
1121
+ config?: TableConfig<T, C>; /** Native pagination compatibility path; takes ownership over config.pagination. */
1304
1122
  pagination?: PaginationProps | false; /** Native remote mode, used with the native pagination compatibility path. */
1305
1123
  remote?: boolean; /** CRUD 绑定 — 传入 useTableCrud() 的返回值,自动接管 data/columns/loading/actions/pagination/events */
1306
1124
  crud?: CrudBinding<T>;
1307
1125
  } & {
1308
- [x: `on${Capitalize<string>}`]: ((...args: any) => any) | undefined;
1126
+ onCancel?: ((rowData: T, rowIndex: number) => any) | undefined;
1127
+ onSave?: ((rowData: T, rowIndex: number, columnKey?: string | undefined) => any) | undefined;
1128
+ "onPagination-change"?: ((page: number, pageSize: number) => any) | undefined;
1129
+ "onRow-delete"?: ((deletedRow: T, index: number) => any) | undefined;
1130
+ "onBatch-action-error"?: ((error: unknown, actionKey: string) => any) | undefined;
1131
+ "onRow-key-error"?: ((issues: TableRowKeyIssue<T>[]) => any) | undefined;
1132
+ "onRow-add"?: ((newRow: T) => any) | undefined;
1133
+ "onRow-copy"?: ((originalRow: T, newRow: T) => any) | undefined;
1134
+ "onRow-move"?: ((row: T, fromIndex: number, toIndex: number) => any) | undefined;
1135
+ "onRow-selection-change"?: ((selectedKey: DataTableRowKey | null, selectedRow: T | null) => any) | undefined;
1136
+ "onView-detail"?: ((data: T) => any) | undefined;
1137
+ "onColumn-change"?: ((columns: TableColumn<T>[]) => any) | undefined;
1138
+ "onExpand-change"?: ((expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => any) | undefined;
1139
+ "onSelection-change"?: ((checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => any) | undefined;
1140
+ "onChild-selection-change"?: ((parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => any) | undefined;
1141
+ "onParent-child-link-change"?: ((parentKey: DataTableRowKey, shouldSelect: boolean) => any) | undefined;
1142
+ "onUpdate:data"?: ((data: T[]) => any) | undefined;
1143
+ "onEdit-error"?: ((error: unknown) => any) | undefined;
1309
1144
  }> & (typeof globalThis extends {
1310
1145
  __VLS_PROPS_FALLBACK: infer P;
1311
1146
  } ? P : {});
1312
- expose: (exposed: vue.ShallowUnwrapRef<{
1313
- startEdit: (rowKey: DataTableRowKey, columnKey?: string) => void;
1314
- cancelEdit: () => void;
1315
- saveEdit: () => Promise<void>;
1316
- expandRow: (rowKey: DataTableRowKey) => Promise<void>;
1317
- collapseRow: (rowKey: DataTableRowKey) => void;
1318
- toggleExpand: (rowKey: DataTableRowKey) => Promise<void>;
1319
- retryExpand: (rowKey: DataTableRowKey) => Promise<void>;
1320
- invalidateExpand: (rowKey?: DataTableRowKey) => void;
1321
- expandAll: () => Promise<void>;
1322
- collapseAll: () => void;
1323
- selectRow: (rowKey: DataTableRowKey) => boolean;
1324
- unselectRow: (rowKey: DataTableRowKey) => void;
1325
- selectAll: () => void;
1326
- clearSelection: () => void;
1327
- isRowSelected: (rowKey: DataTableRowKey) => boolean;
1328
- clearAllSelections: () => void;
1329
- selectChildRow: (parentKey: DataTableRowKey, childKey: DataTableRowKey) => void;
1330
- unselectChildRow: (parentKey: DataTableRowKey, childKey: DataTableRowKey) => void;
1331
- selectAllChildren: (parentKey: DataTableRowKey) => void;
1332
- clearChildrenSelection: (parentKey: DataTableRowKey) => void;
1333
- getChildSelectedRows: (parentKey: DataTableRowKey) => DataRecord[];
1334
- addRow: () => void;
1335
- insertRow: () => void;
1336
- deleteRow: () => void;
1337
- copyRow: () => void;
1338
- moveRowUp: () => void;
1339
- moveRowDown: () => void;
1340
- clearRowSelection: () => void;
1341
- getSelectedRowData: () => DataRecord | null;
1342
- printTable: (elementRef?: HTMLElement) => Promise<void>;
1343
- downloadTableScreenshot: (elementRef?: HTMLElement, filename?: string) => Promise<void>;
1344
- resetToFirstPage: () => void;
1345
- getTotalPages: () => number;
1346
- getSelectedRows: () => DataRecord[];
1347
- getEditingData: () => DataRecord | null | undefined;
1348
- isEditing: (rowKey: DataTableRowKey, columnKey?: string) => boolean;
1349
- isExpanded: (rowKey: DataTableRowKey) => boolean;
1350
- getManager: () => {
1351
- edit: {
1352
- start(rowKey: DataTableRowKey, columnKey?: string): void;
1353
- cancel(): void;
1354
- save(): Promise<void>;
1355
- isEditing(rowKey: DataTableRowKey, columnKey?: string): boolean;
1356
- getEditingData(): DataRecord | null | undefined;
1357
- };
1358
- expand: {
1359
- row(rowKey: DataTableRowKey): Promise<void>;
1360
- collapse(rowKey: DataTableRowKey): void;
1361
- toggle(rowKey: DataTableRowKey): Promise<void>;
1362
- all(): Promise<void>;
1363
- collapseAll(): void;
1364
- isExpanded(rowKey: DataTableRowKey): boolean;
1365
- };
1366
- selection: {
1367
- select(rowKey: DataTableRowKey): void;
1368
- unselect(rowKey: DataTableRowKey): void;
1369
- all(): void;
1370
- clear(): void;
1371
- isSelected(rowKey: DataTableRowKey): boolean;
1372
- getSelected(): DataRecord[];
1373
- };
1374
- childSelection: {
1375
- select(parentKey: DataTableRowKey, childKey: DataTableRowKey): void;
1376
- unselect(parentKey: DataTableRowKey, childKey: DataTableRowKey): void;
1377
- selectAll(parentKey: DataTableRowKey): void;
1378
- clear(parentKey: DataTableRowKey): void;
1379
- getSelected(parentKey: DataTableRowKey): DataRecord[];
1380
- };
1381
- dynamicRows: {
1382
- add(): void;
1383
- insert(): void;
1384
- delete(): void;
1385
- copy(): void;
1386
- moveUp(): void;
1387
- moveDown(): void;
1388
- clearSelection(): void;
1389
- getSelected(): DataRecord | null;
1390
- print(elementRef?: HTMLElement): Promise<void>;
1391
- download(elementRef?: HTMLElement, filename?: string): Promise<void>;
1392
- };
1393
- clearAllSelections(): void;
1394
- }; /** 导出数据 */
1395
- exportData: () => Promise<void>; /** 跨页选择 */
1396
- crossPageSelection: {
1397
- enabled: vue.ComputedRef<boolean>;
1398
- selectedKeys: vue.Ref<Set<DataTableRowKey>, Set<DataTableRowKey>>;
1399
- selectedCount: vue.ComputedRef<number>;
1400
- select: (key: DataTableRowKey) => boolean;
1401
- unselect: (key: DataTableRowKey) => void;
1402
- selectAll: () => void;
1403
- clearAll: () => void;
1404
- getSelectedRows: () => DataRecord[];
1405
- };
1406
- }>) => void;
1147
+ expose: (exposed: vue.ShallowUnwrapRef<TableInstance<T, C>>) => void;
1407
1148
  attrs: any;
1408
1149
  slots: {
1409
1150
  'toolbar-left'?: (props: {}) => any;
@@ -1416,18 +1157,18 @@ declare const __VLS_export$1: <T extends object = DataRecord>(__VLS_props: NonNu
1416
1157
  } & {
1417
1158
  loading?: (props: {}) => any;
1418
1159
  };
1419
- emit: ((evt: "save", rowData: DataRecord, rowIndex: number, columnKey?: string | undefined) => void) & ((evt: "cancel", rowData: DataRecord, rowIndex: number) => void) & ((evt: "pagination-change", ...args: [page: number, pageSize: number] & [page: number, pageSize: number]) => void) & ((evt: "row-delete", ...args: [deletedRow: DataRecord, index: number] & [deletedRow: DataRecord, index: number]) => void) & ((evt: "batch-action-error", error: unknown, actionKey: string) => void) & ((evt: "row-key-error", issues: TableRowKeyIssue<DataRecord>[]) => void) & ((evt: "expand-change", expandedKeys: DataTableRowKey[], row?: DataRecord | undefined, expanded?: boolean | undefined) => void) & ((evt: "selection-change", checkedKeys: DataTableRowKey[], checkedRows: DataRecord[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => void) & ((evt: "child-selection-change", parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: DataRecord[]) => void) & ((evt: "parent-child-link-change", parentKey: DataTableRowKey, shouldSelect: boolean) => void) & ((evt: "update:data", data: DataRecord[]) => void) & ((evt: "edit-error", error: unknown) => void) & ((evt: "row-add", newRow: DataRecord) => void) & ((evt: "row-copy", originalRow: DataRecord, newRow: DataRecord) => void) & ((evt: "row-move", row: DataRecord, fromIndex: number, toIndex: number) => void) & ((evt: "row-selection-change", selectedKey: DataTableRowKey | null, selectedRow: DataRecord | null) => void) & ((evt: "view-detail", data: DataRecord) => void) & ((evt: "column-change", columns: TableColumn[]) => void);
1160
+ emit: ((evt: "cancel", rowData: T, rowIndex: number) => void) & ((evt: "save", rowData: T, rowIndex: number, columnKey?: string | undefined) => void) & ((evt: "pagination-change", page: number, pageSize: number) => void) & ((evt: "row-delete", deletedRow: T, index: number) => void) & ((evt: "batch-action-error", error: unknown, actionKey: string) => void) & ((evt: "row-key-error", issues: TableRowKeyIssue<T>[]) => void) & ((evt: "row-add", newRow: T) => void) & ((evt: "row-copy", originalRow: T, newRow: T) => void) & ((evt: "row-move", row: T, fromIndex: number, toIndex: number) => void) & ((evt: "row-selection-change", selectedKey: DataTableRowKey | null, selectedRow: T | null) => void) & ((evt: "view-detail", data: T) => void) & ((evt: "column-change", columns: TableColumn<T>[]) => void) & ((evt: "expand-change", expandedKeys: DataTableRowKey[], row?: T | undefined, expanded?: boolean | undefined) => void) & ((evt: "selection-change", checkedKeys: DataTableRowKey[], checkedRows: T[], childSelections?: Map<DataTableRowKey, DataTableRowKey[]> | undefined) => void) & ((evt: "child-selection-change", parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: C[]) => void) & ((evt: "parent-child-link-change", parentKey: DataTableRowKey, shouldSelect: boolean) => void) & ((evt: "update:data", data: T[]) => void) & ((evt: "edit-error", error: unknown) => void);
1420
1161
  }>) => vue.VNode & {
1421
1162
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1422
1163
  };
1423
1164
  declare const _default$1: typeof __VLS_export$1;
1424
- type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
1165
+ type __VLS_PrettifyLocal$1<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
1425
1166
  //#endregion
1426
1167
  //#region src/components/C_Table/helpers.d.ts
1427
1168
  /** Type-safe identity helper that rejects misspelled business field keys. */
1428
1169
  declare function defineTableColumns<T extends object>(columns: StrictTableColumn<T>[]): StrictTableColumn<T>[];
1429
1170
  /** Preserve row types across edit, action, summary and batch callbacks. */
1430
- declare function defineTableConfig<T extends object>(config: TableConfig<T>): TableConfig<T>;
1171
+ declare function defineTableConfig<T extends object, C = unknown>(config: TableConfig<T, C>): TableConfig<T, C>;
1431
1172
  /** Find missing and duplicate row keys before stateful table features consume them. */
1432
1173
  declare function validateTableRowKeys<T extends object>(data: readonly T[], rowKey: (row: T) => DataTableRowKey | null | undefined): TableRowKeyIssue<T>[];
1433
1174
  //#endregion
@@ -1499,7 +1240,246 @@ interface UseTableColumnsReturn {
1499
1240
  */
1500
1241
  declare function useTableColumns(options: UseTableColumnsOptions): UseTableColumnsReturn;
1501
1242
  //#endregion
1502
- //#region src/components/C_Table/composables/useTableExpand.d.ts
1243
+ //#region src/components/C_Table/composables/useRowEdit.d.ts
1244
+ /** 行级校验错误 */
1245
+ interface RowValidationError {
1246
+ field: string;
1247
+ message: string;
1248
+ }
1249
+ /**
1250
+ * 行编辑配置选项
1251
+ */
1252
+ interface RowEditOptions {
1253
+ data: () => DataRecord[];
1254
+ rowKey: (row: DataRecord) => DataTableRowKey;
1255
+ onSave?: (rowData: DataRecord, rowIndex: number, originalKey?: DataTableRowKey) => void | Promise<void>;
1256
+ onCancel?: (rowData: DataRecord, rowIndex: number) => void | Promise<void>;
1257
+ /** 列配置(用于提取校验规则) */
1258
+ columns?: () => TableColumn[];
1259
+ }
1260
+ /**
1261
+ * 可编辑行组合函数,提供表格整行的编辑功能
1262
+ */
1263
+ declare function useRowEdit(options: RowEditOptions): {
1264
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
1265
+ editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
1266
+ isSaving: vue.Ref<boolean, boolean>;
1267
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
1268
+ startEditRow: (rowKey: DataTableRowKey) => boolean;
1269
+ cancelEditRow: () => Promise<void>;
1270
+ saveEditRow: () => Promise<{
1271
+ updatedData: DataRecord;
1272
+ rowIndex: number;
1273
+ } | undefined>;
1274
+ validateRow: () => Promise<boolean>;
1275
+ validationErrors: vue.Ref<{
1276
+ field: string;
1277
+ message: string;
1278
+ }[], RowValidationError[] | {
1279
+ field: string;
1280
+ message: string;
1281
+ }[]>;
1282
+ getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
1283
+ updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
1284
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
1285
+ invalidate: () => void;
1286
+ };
1287
+ //#endregion
1288
+ //#region src/components/C_Table/composables/useTableManager.d.ts
1289
+ /**
1290
+ * 表格管理器配置接口
1291
+ */
1292
+ interface TableManagerConfig {
1293
+ feedback?: ComponentFeedback;
1294
+ locale?: ComponentLocale;
1295
+ editable: boolean;
1296
+ editMode: string;
1297
+ showRowActions: boolean;
1298
+ modalTitle: string;
1299
+ modalWidth: number;
1300
+ onEditSave?: (rowData: DataRecord, rowIndex: number, columnKey?: string) => void | Promise<void>;
1301
+ onEditCancel?: (rowData: DataRecord, rowIndex: number) => void | Promise<void>;
1302
+ onEditError?: (error: unknown) => void;
1303
+ expandable: boolean;
1304
+ defaultExpandedKeys?: DataTableRowKey[];
1305
+ onLoadExpandData?: (row: DataRecord) => Promise<any[]> | any[];
1306
+ onExpandError?: (error: unknown, row: DataRecord) => void;
1307
+ renderExpandContent?: unknown;
1308
+ rowExpandable?: (row: DataRecord) => boolean;
1309
+ enableSelection: boolean;
1310
+ defaultCheckedKeys?: DataTableRowKey[];
1311
+ rowCheckable?: (row: DataRecord) => boolean;
1312
+ maxSelection?: number;
1313
+ enableChildSelection: boolean;
1314
+ childRowCheckable?: (childRow: DataRecord, parentRow: DataRecord) => boolean;
1315
+ enableParentChildLink: boolean;
1316
+ parentChildLinkMode: ParentChildLinkMode;
1317
+ dynamicRows?: DynamicRowsOptions<DataRecord>;
1318
+ treeEnabled?: boolean;
1319
+ treeChildrenKey?: string;
1320
+ }
1321
+ /**
1322
+ * 表格管理器参数接口
1323
+ */
1324
+ interface TableManagerParams {
1325
+ config: MaybeRefOrGetter<TableManagerConfig>;
1326
+ data: () => DataRecord[];
1327
+ rowKey: (row: DataRecord) => DataTableRowKey;
1328
+ emit: (...args: any[]) => unknown;
1329
+ /** 列配置(用于编辑校验) */
1330
+ columns?: () => TableColumn[];
1331
+ /** UI 壳提供加载内容,状态引擎保持可独立调用。 */
1332
+ renderLoading?: () => VNodeChild;
1333
+ /** String row-key field inherited by dynamic row creation; explicit dynamicRows.rowKey wins. */
1334
+ rowKeyField?: MaybeRefOrGetter<string | undefined>;
1335
+ }
1336
+ /**
1337
+ * 事件处理器接口
1338
+ */
1339
+ interface EventHandlers {
1340
+ onSave: (rowData: DataRecord, rowIndex: number, columnKey?: string, originalKey?: DataTableRowKey) => Promise<void>;
1341
+ onCancel: (rowData: DataRecord, rowIndex: number) => Promise<void>;
1342
+ onExpandChange: (keys: DataTableRowKey[], row?: DataRecord, expanded?: boolean) => void;
1343
+ onSelectionChange: (checkedKeys: DataTableRowKey[], checkedRows: DataRecord[], childSelections: Map<DataTableRowKey, DataTableRowKey[]>) => void;
1344
+ onChildSelectionChange: (parentKey: DataTableRowKey, childKeys: DataTableRowKey[], childRows: DataRecord[]) => void;
1345
+ onRowChange: (data: DataRecord[]) => void;
1346
+ onRowSelectionChange: (selectedKey: DataTableRowKey | null, selectedRow: DataRecord | null) => void;
1347
+ onRowAdd: (newRow: DataRecord) => void;
1348
+ onRowDelete: (deletedRow: DataRecord, index: number) => void;
1349
+ onRowCopy: (originalRow: DataRecord, newRow: DataRecord) => void;
1350
+ onRowMove: (row: DataRecord, fromIndex: number, toIndex: number) => void;
1351
+ }
1352
+ /**
1353
+ * 表格统一状态管理器
1354
+ */
1355
+ declare function useTableManager(params: TableManagerParams): {
1356
+ editStates: {
1357
+ rowEdit: {
1358
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
1359
+ editingData: vue.Ref<Record<string, DataRecord>, Record<string, DataRecord>>;
1360
+ isSaving: vue.Ref<boolean, boolean>;
1361
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
1362
+ startEditRow: (rowKey: DataTableRowKey) => boolean;
1363
+ cancelEditRow: () => Promise<void>;
1364
+ saveEditRow: () => Promise<{
1365
+ updatedData: DataRecord;
1366
+ rowIndex: number;
1367
+ } | undefined>;
1368
+ validateRow: () => Promise<boolean>;
1369
+ validationErrors: vue.Ref<{
1370
+ field: string;
1371
+ message: string;
1372
+ }[], RowValidationError[] | {
1373
+ field: string;
1374
+ message: string;
1375
+ }[]>;
1376
+ getEditingRowData: (rowKey: DataTableRowKey) => DataRecord | undefined;
1377
+ updateEditingRowData: (rowKey: DataTableRowKey, field: string, value: unknown) => void;
1378
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
1379
+ invalidate: () => void;
1380
+ };
1381
+ cellEdit: {
1382
+ editingCell: vue.Ref<{
1383
+ rowKey: DataTableRowKey | null;
1384
+ columnKey: string | null;
1385
+ }, {
1386
+ rowKey: DataTableRowKey | null;
1387
+ columnKey: string | null;
1388
+ } | {
1389
+ rowKey: DataTableRowKey | null;
1390
+ columnKey: string | null;
1391
+ }>;
1392
+ editingData: vue.Ref<Record<string, unknown>, Record<string, unknown>>;
1393
+ isSaving: vue.Ref<boolean, boolean>;
1394
+ isEditingCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
1395
+ startEditCell: (rowKey: DataTableRowKey, columnKey: string) => boolean;
1396
+ saveEditCell: () => Promise<{
1397
+ updatedData: {
1398
+ [x: string]: unknown;
1399
+ };
1400
+ rowIndex: number;
1401
+ columnKey: string;
1402
+ } | undefined>;
1403
+ cancelEditCell: () => void;
1404
+ validateCell: () => Promise<boolean>;
1405
+ cellValidationError: vue.Ref<string | null, string | null>;
1406
+ getEditingCellValue: (rowKey: DataTableRowKey, columnKey: string) => unknown;
1407
+ updateEditingCellValue: (rowKey: DataTableRowKey, columnKey: string, value: unknown) => void;
1408
+ findRowData: (rowKey: DataTableRowKey) => DataRecord | null | undefined;
1409
+ invalidate: () => void;
1410
+ };
1411
+ modalEdit: {
1412
+ isModalVisible: vue.Ref<boolean, boolean>;
1413
+ isSaving: vue.Ref<boolean, boolean>;
1414
+ editingData: vue.Ref<DataRecord, DataRecord>;
1415
+ editingRowKey: vue.Ref<DataTableRowKey | null, DataTableRowKey | null>;
1416
+ editingRowIndex: vue.ComputedRef<number>;
1417
+ startEdit: (rowKey: DataTableRowKey, sourceData?: DataRecord | undefined) => boolean;
1418
+ saveEdit: (formData?: DataRecord | undefined) => Promise<{
1419
+ updatedData: any;
1420
+ rowIndex: number;
1421
+ } | undefined>;
1422
+ cancelEdit: () => Promise<boolean>;
1423
+ updateEditingData: (data: DataRecord) => boolean;
1424
+ resetEditingState: () => boolean;
1425
+ isEditingRow: (rowKey: DataTableRowKey) => boolean;
1426
+ getEditingRowData: (rowKey: DataTableRowKey) => any;
1427
+ invalidate: () => void;
1428
+ };
1429
+ };
1430
+ expandState: UseTableExpandReturn<DataRecord, DataRecord>;
1431
+ dynamicRowsState: DynamicRowsReturn<DataRecord>;
1432
+ stateManager: {
1433
+ edit: {
1434
+ /** 开始编辑 */start(rowKey: DataTableRowKey, columnKey?: string): void; /** 取消编辑 */
1435
+ cancel(): void; /** 保存编辑 */
1436
+ save(): Promise<void>; /** 是否正在编辑 */
1437
+ isEditing(rowKey: DataTableRowKey, columnKey?: string): boolean; /** 获取当前编辑数据 */
1438
+ getEditingData(): DataRecord | null | undefined;
1439
+ };
1440
+ expand: {
1441
+ /** 展开行 */row(rowKey: DataTableRowKey): Promise<void>; /** 折叠行 */
1442
+ collapse(rowKey: DataTableRowKey): void; /** 展开折叠切换 */
1443
+ toggle(rowKey: DataTableRowKey): Promise<void>; /** 展开所有行 */
1444
+ all(): Promise<void>; /** 折叠所有行 */
1445
+ collapseAll(): void; /** 检查行是否已展开 */
1446
+ isExpanded(rowKey: DataTableRowKey): boolean;
1447
+ };
1448
+ selection: {
1449
+ /** 选择指定行 */select(rowKey: DataTableRowKey): void; /** 取消选择指定行 */
1450
+ unselect(rowKey: DataTableRowKey): void; /** 选择所有行 */
1451
+ all(): void; /** 清除所有行选择 */
1452
+ clear(): void; /** 检查行是否已选择 */
1453
+ isSelected(rowKey: DataTableRowKey): boolean; /** 获取所有已选择的行数据 */
1454
+ getSelected(): DataRecord[];
1455
+ };
1456
+ childSelection: {
1457
+ /** 选择指定父行下的子行 */select(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 取消选择指定父行下的子行 */
1458
+ unselect(parentKey: DataTableRowKey, childKey: DataTableRowKey): void; /** 选择指定父行下的所有子行 */
1459
+ selectAll(parentKey: DataTableRowKey): void; /** 清除指定父行下的所有子行选择 */
1460
+ clear(parentKey: DataTableRowKey): void; /** 获取指定父行下所有已选择的子行数据 */
1461
+ getSelected(parentKey: DataTableRowKey): DataRecord[];
1462
+ };
1463
+ dynamicRows: {
1464
+ /** 添加行 */add(): void; /** 插入行 */
1465
+ insert(): void; /** 删除行 */
1466
+ delete(): void; /** 复制行 */
1467
+ copy(): void; /** 上移动态行 */
1468
+ moveUp(): void; /** 下移动态行 */
1469
+ moveDown(): void; /** 清空动态行数据 */
1470
+ clearSelection(): void; /** 获取当前选中的动态行数据 */
1471
+ getSelected(): DataRecord | null; /** 打印表格 */
1472
+ print(elementRef?: HTMLElement): Promise<void>; /** 导出表格数据 */
1473
+ download(elementRef?: HTMLElement, filename?: string): Promise<void>;
1474
+ }; /** 清除所有选择 */
1475
+ clearAllSelections(): void;
1476
+ };
1477
+ expandedKeys: vue.ComputedRef<DataTableRowKey[]>;
1478
+ checkedKeys: vue.ComputedRef<DataTableRowKey[]>;
1479
+ eventHandlers: EventHandlers;
1480
+ };
1481
+ //#endregion
1482
+ //#region src/components/C_Table/composables/useTableExpand.d.ts
1503
1483
  /**
1504
1484
  *
1505
1485
  */
@@ -1652,9 +1632,9 @@ interface TreeNodeData extends TreeOption$1 {
1652
1632
  type?: string;
1653
1633
  children?: TreeNodeData[];
1654
1634
  }
1655
- interface DropInfo {
1656
- node: TreeOption$1;
1657
- dragNode: TreeOption$1;
1635
+ interface DropInfo<T extends object = TreeOption$1> {
1636
+ node: T;
1637
+ dragNode: T;
1658
1638
  dropPosition: 'before' | 'inside' | 'after';
1659
1639
  event: DragEvent;
1660
1640
  }
@@ -1665,12 +1645,12 @@ interface StatusConfig {
1665
1645
  type: StatusType;
1666
1646
  }>;
1667
1647
  }
1668
- interface ActionConfig {
1648
+ interface ActionConfig<T extends object = TreeNodeData> {
1669
1649
  key: string;
1670
1650
  text: string;
1671
1651
  icon: string;
1672
1652
  type?: ButtonType;
1673
- show?: (node: TreeNodeData) => boolean;
1653
+ show?: (node: T) => boolean;
1674
1654
  confirm?: string;
1675
1655
  }
1676
1656
  interface IconConfig {
@@ -1678,22 +1658,67 @@ interface IconConfig {
1678
1658
  typeMap?: Record<string, string>;
1679
1659
  colorMap?: Record<string, string>;
1680
1660
  }
1681
- type TreeNativeProps = Omit<TreeProps, 'data'>;
1682
- interface TreeRenderContext {
1683
- option: TreeOption$1;
1661
+ type MaybeArray<T> = T | T[];
1662
+ type TreeUpdateHandler<T extends object, A extends TreeUpdateMeta['action']> = (keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T, A>) => void;
1663
+ type TreeDragHandler<T extends object> = (info: {
1664
+ node: T;
1665
+ event: DragEvent;
1666
+ }) => void;
1667
+ /** 原生功能保持透传,涉及节点的回调由数据源推导业务类型。 */
1668
+ type TreeNativeProps<T extends object = TreeNodeData> = Omit<TreeProps, 'data' | 'filter' | 'onLoad' | 'getChildren' | 'renderLabel' | 'renderPrefix' | 'renderSuffix' | 'renderSwitcherIcon' | 'nodeProps' | 'allowDrop' | 'checkOnClick' | 'overrideDefaultNodeClickBehavior' | 'onDrop' | 'onDragenter' | 'onDragleave' | 'onDragend' | 'onDragstart' | 'onDragover' | 'onUpdateExpandedKeys' | 'onUpdate:expandedKeys' | 'onUpdateSelectedKeys' | 'onUpdate:selectedKeys' | 'onUpdateCheckedKeys' | 'onUpdate:checkedKeys' | 'onUpdateIndeterminateKeys' | 'onUpdate:indeterminateKeys'> & {
1669
+ filter?: (pattern: string, node: T) => boolean;
1670
+ onLoad?: (node: T) => Promise<unknown>;
1671
+ getChildren?: (node: T) => unknown;
1672
+ renderLabel?: (context: TreeRenderContext<T>) => VNodeChild;
1673
+ renderPrefix?: (context: TreeRenderContext<T>) => VNodeChild;
1674
+ renderSuffix?: (context: TreeRenderContext<T>) => VNodeChild;
1675
+ renderSwitcherIcon?: (context: {
1676
+ expanded: boolean;
1677
+ selected: boolean;
1678
+ option: T;
1679
+ }) => VNodeChild;
1680
+ nodeProps?: (context: {
1681
+ option: T;
1682
+ }) => ReturnType<NonNullable<TreeProps['nodeProps']>>;
1683
+ allowDrop?: (info: {
1684
+ dropPosition: DropInfo['dropPosition'];
1685
+ node: T;
1686
+ phase: 'drag' | 'drop';
1687
+ }) => boolean;
1688
+ checkOnClick?: boolean | ((node: T) => boolean);
1689
+ overrideDefaultNodeClickBehavior?: (info: {
1690
+ option: T;
1691
+ }) => ReturnType<NonNullable<TreeProps['overrideDefaultNodeClickBehavior']>>;
1692
+ onDrop?: MaybeArray<(info: DropInfo<T>) => void>;
1693
+ onDragenter?: MaybeArray<TreeDragHandler<T>>;
1694
+ onDragleave?: MaybeArray<TreeDragHandler<T>>;
1695
+ onDragend?: MaybeArray<TreeDragHandler<T>>;
1696
+ onDragstart?: MaybeArray<TreeDragHandler<T>>;
1697
+ onDragover?: MaybeArray<TreeDragHandler<T>>;
1698
+ onUpdateExpandedKeys?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
1699
+ 'onUpdate:expandedKeys'?: MaybeArray<TreeUpdateHandler<T, 'expand' | 'collapse' | 'filter'>>;
1700
+ onUpdateSelectedKeys?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
1701
+ 'onUpdate:selectedKeys'?: MaybeArray<TreeUpdateHandler<T, 'select' | 'unselect'>>;
1702
+ onUpdateCheckedKeys?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
1703
+ 'onUpdate:checkedKeys'?: MaybeArray<TreeUpdateHandler<T, 'check' | 'uncheck'>>;
1704
+ onUpdateIndeterminateKeys?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
1705
+ 'onUpdate:indeterminateKeys'?: MaybeArray<(keys: TreeKey[], options: Array<T | null>) => void>;
1706
+ };
1707
+ interface TreeRenderContext<T extends object = TreeOption$1> {
1708
+ option: T;
1684
1709
  checked: boolean;
1685
1710
  selected: boolean;
1686
1711
  }
1687
- interface TreeUpdateMeta {
1688
- node: TreeOption$1 | null;
1689
- action: 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter';
1712
+ interface TreeUpdateMeta<T extends object = TreeOption$1, A extends 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter' = 'select' | 'unselect' | 'check' | 'uncheck' | 'expand' | 'collapse' | 'filter'> {
1713
+ node: T | null;
1714
+ action: A;
1690
1715
  }
1691
- interface TreeProps$1 {
1716
+ interface TreeProps$1<T extends object = TreeNodeData> {
1692
1717
  /** Business interfaces need no string index signature; fields are selected by config. */
1693
- data: object[];
1718
+ data: readonly T[];
1694
1719
  mode?: TreeMode;
1695
1720
  /** Native tree capabilities; explicit wrapper props have priority. */
1696
- treeProps?: TreeNativeProps;
1721
+ treeProps?: TreeNativeProps<T>;
1697
1722
  density?: ComponentDensity;
1698
1723
  keyField?: string;
1699
1724
  labelField?: string;
@@ -1710,7 +1735,7 @@ interface TreeProps$1 {
1710
1735
  iconField?: string;
1711
1736
  iconConfig?: IconConfig;
1712
1737
  statusConfigs?: StatusConfig[];
1713
- actions?: ActionConfig[];
1738
+ actions?: ActionConfig<T>[];
1714
1739
  defaultExpandAll?: boolean;
1715
1740
  defaultExpandedKeys?: TreeKey[];
1716
1741
  defaultSelectedKeys?: TreeKey[];
@@ -1719,125 +1744,110 @@ interface TreeProps$1 {
1719
1744
  selectedKeys?: TreeKey[];
1720
1745
  checkedKeys?: TreeKey[];
1721
1746
  }
1722
- interface TreeExpose {
1747
+ interface TreeExpose<T extends object = TreeNodeData> {
1723
1748
  expandAll: () => void;
1724
1749
  collapseAll: () => void;
1725
1750
  selectNode: (key: TreeKey) => void;
1726
1751
  clearSelection: () => void;
1727
1752
  setCheckedKeys: (keys: TreeKey[]) => void;
1728
1753
  clearChecked: () => void;
1729
- getSelectedNode: () => TreeNodeData | null;
1730
- getCheckedData: TreeInst['getCheckedData'];
1731
- getIndeterminateData: TreeInst['getIndeterminateData'];
1754
+ getSelectedNode: () => T | null;
1755
+ getCheckedData: () => {
1756
+ keys: TreeKey[];
1757
+ options: Array<T | null>;
1758
+ };
1759
+ getIndeterminateData: () => {
1760
+ keys: TreeKey[];
1761
+ options: Array<T | null>;
1762
+ };
1732
1763
  scrollTo: TreeInst['scrollTo'];
1733
1764
  /** Vue 公开实例会解包顶层 Ref;这些属性直接读取数组。 */
1734
1765
  expandedKeys: TreeKey[];
1735
1766
  selectedKeys: TreeKey[];
1736
1767
  checkedKeys: TreeKey[];
1737
1768
  }
1738
- interface TreeEmits {
1769
+ interface TreeEmits<T extends object = TreeNodeData> {
1739
1770
  'update:searchPattern': [pattern: string];
1740
- 'update:expandedKeys': [keys: TreeKey[], options: Array<TreeOption$1 | null>, meta: TreeUpdateMeta];
1741
- 'update:selectedKeys': [keys: TreeKey[], options: Array<TreeOption$1 | null>, meta: TreeUpdateMeta];
1742
- 'update:checkedKeys': [keys: TreeKey[], options: Array<TreeOption$1 | null>, meta: TreeUpdateMeta];
1743
- 'node-select': [node: TreeNodeData | null, selectedKeys: TreeKey[]];
1744
- 'node-action': [action: string, node: TreeNodeData];
1745
- 'node-drop': [info: DropInfo];
1746
- 'load-error': [error: unknown, node: TreeOption$1];
1747
- add: [parentNode?: TreeNodeData];
1771
+ 'update:expandedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
1772
+ 'update:selectedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
1773
+ 'update:checkedKeys': [keys: TreeKey[], options: Array<T | null>, meta: TreeUpdateMeta<T>];
1774
+ 'node-select': [node: T | null, selectedKeys: TreeKey[]];
1775
+ 'node-action': [action: string, node: T];
1776
+ 'node-drop': [info: DropInfo<T>];
1777
+ 'load-error': [error: unknown, node: T];
1778
+ add: [parentNode?: T];
1748
1779
  refresh: [];
1749
1780
  }
1750
- interface TreeSlots {
1781
+ interface TreeSlots<T extends object = TreeOption$1> {
1751
1782
  'toolbar-actions'?: () => VNodeChild;
1752
- label?: (context: TreeRenderContext) => VNodeChild;
1753
- prefix?: (context: TreeRenderContext) => VNodeChild;
1754
- suffix?: (context: TreeRenderContext) => VNodeChild;
1783
+ label?: (context: TreeRenderContext<T>) => VNodeChild;
1784
+ prefix?: (context: TreeRenderContext<T>) => VNodeChild;
1785
+ suffix?: (context: TreeRenderContext<T>) => VNodeChild;
1755
1786
  empty?: () => VNodeChild;
1756
1787
  }
1757
1788
  //#endregion
1758
1789
  //#region src/components/C_Tree/index.vue.d.ts
1759
- type __VLS_Slots = TreeSlots;
1760
- declare const __VLS_base: vue.DefineComponent<TreeProps$1, Omit<TreeExpose, "expandedKeys" | "selectedKeys" | "checkedKeys"> & {
1761
- expandedKeys: vue.Ref<TreeKey[]>;
1762
- selectedKeys: vue.Ref<TreeKey[]>;
1763
- checkedKeys: vue.Ref<TreeKey[]>;
1764
- }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
1765
- add: (parentNode?: TreeNodeData | undefined) => any;
1766
- "update:searchPattern": (pattern: string) => any;
1767
- "update:expandedKeys": (keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any;
1768
- "update:selectedKeys": (keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any;
1769
- "update:checkedKeys": (keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any;
1770
- "node-select": (node: TreeNodeData | null, selectedKeys: TreeKey[]) => any;
1771
- "node-action": (action: string, node: TreeNodeData) => any;
1772
- "node-drop": (info: DropInfo) => any;
1773
- "load-error": (error: unknown, node: TreeOption$1) => any;
1774
- refresh: () => any;
1775
- }, string, vue.PublicProps, Readonly<TreeProps$1> & Readonly<{
1776
- onAdd?: ((parentNode?: TreeNodeData | undefined) => any) | undefined;
1777
- "onUpdate:searchPattern"?: ((pattern: string) => any) | undefined;
1778
- "onUpdate:expandedKeys"?: ((keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any) | undefined;
1779
- "onUpdate:selectedKeys"?: ((keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any) | undefined;
1780
- "onUpdate:checkedKeys"?: ((keys: TreeKey[], options: (TreeOption$1 | null)[], meta: TreeUpdateMeta) => any) | undefined;
1781
- "onNode-select"?: ((node: TreeNodeData | null, selectedKeys: TreeKey[]) => any) | undefined;
1782
- "onNode-action"?: ((action: string, node: TreeNodeData) => any) | undefined;
1783
- "onNode-drop"?: ((info: DropInfo) => any) | undefined;
1784
- "onLoad-error"?: ((error: unknown, node: TreeOption$1) => any) | undefined;
1785
- onRefresh?: (() => any) | undefined;
1786
- }>, {
1787
- mode: TreeMode;
1788
- density: ComponentDensity;
1789
- searchable: boolean;
1790
- searchPlaceholder: string;
1791
- draggable: boolean;
1792
- showLine: boolean;
1793
- showToolbar: boolean;
1794
- addable: boolean;
1795
- addText: string;
1796
- refreshable: boolean;
1797
- defaultExpandAll: boolean;
1798
- }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
1799
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
1800
- declare const _default: typeof __VLS_export;
1801
- type __VLS_WithSlots<T, S> = T & {
1802
- new (): {
1803
- $slots: S;
1804
- };
1790
+ declare const __VLS_export: <T extends object = TreeNodeData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1791
+ props: vue.PublicProps & __VLS_PrettifyLocal<TreeProps$1<T> & {
1792
+ onAdd?: ((parentNode?: T | undefined) => any) | undefined;
1793
+ onRefresh?: (() => any) | undefined;
1794
+ "onUpdate:expandedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
1795
+ "onUpdate:searchPattern"?: ((pattern: string) => any) | undefined;
1796
+ "onUpdate:selectedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
1797
+ "onUpdate:checkedKeys"?: ((keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => any) | undefined;
1798
+ "onNode-select"?: ((node: T | null, selectedKeys: TreeKey[]) => any) | undefined;
1799
+ "onNode-action"?: ((action: string, node: T) => any) | undefined;
1800
+ "onNode-drop"?: ((info: DropInfo<T>) => any) | undefined;
1801
+ "onLoad-error"?: ((error: unknown, node: T) => any) | undefined;
1802
+ }> & (typeof globalThis extends {
1803
+ __VLS_PROPS_FALLBACK: infer P;
1804
+ } ? P : {});
1805
+ expose: (exposed: vue.ShallowUnwrapRef<Omit<TreeExpose<T>, "expandedKeys" | "selectedKeys" | "checkedKeys"> & {
1806
+ expandedKeys: vue.Ref<TreeKey[]>;
1807
+ selectedKeys: vue.Ref<TreeKey[]>;
1808
+ checkedKeys: vue.Ref<TreeKey[]>;
1809
+ }>) => void;
1810
+ attrs: any;
1811
+ slots: TreeSlots<T>;
1812
+ emit: ((evt: "add", parentNode?: T | undefined) => void) & ((evt: "refresh") => void) & ((evt: "update:expandedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "update:searchPattern", pattern: string) => void) & ((evt: "update:selectedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "update:checkedKeys", keys: TreeKey[], options: (T | null)[], meta: TreeUpdateMeta<T, "filter" | "select" | "expand" | "collapse" | "unselect" | "check" | "uncheck">) => void) & ((evt: "node-select", node: T | null, selectedKeys: TreeKey[]) => void) & ((evt: "node-action", action: string, node: T) => void) & ((evt: "node-drop", info: DropInfo<T>) => void) & ((evt: "load-error", error: unknown, node: T) => void);
1813
+ }>) => vue.VNode & {
1814
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1805
1815
  };
1816
+ declare const _default: typeof __VLS_export;
1817
+ type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
1806
1818
  //#endregion
1807
1819
  //#region src/components/C_Tree/data.d.ts
1808
- declare const presetConfigs: Record<TreeMode, Partial<TreeProps$1>>;
1820
+ declare const presetConfigs: Record<TreeMode, Partial<Omit<TreeProps$1, 'data' | 'treeProps' | 'actions'>> & {
1821
+ actions?: Omit<ActionConfig, 'show'>[];
1822
+ }>;
1809
1823
  //#endregion
1810
1824
  //#region src/components/C_Tree/composables/useTreeOperations.d.ts
1811
- type EmitFn = <E extends keyof TreeEmits>(event: E, ...args: TreeEmits[E]) => void;
1825
+ type EmitFn$1<T extends object> = <E extends keyof TreeEmits<T>>(event: E, ...args: TreeEmits<T>[E]) => void;
1812
1826
  /** State coordination only; checking, filtering, keyboard and loading stay native. */
1813
- declare function useTreeOperations(props: TreeProps$1, emit: EmitFn, slots?: TreeSlots): {
1827
+ declare function useTreeOperations<T extends object = TreeNodeData>(props: TreeProps$1<T>, emit: EmitFn$1<T>, slots?: TreeSlots<T>): {
1814
1828
  internalSearchPattern: Ref<string, string>;
1815
1829
  expandedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
1816
1830
  selectedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
1817
1831
  checkedKeys: vue.WritableComputedRef<TreeKey[], TreeKey[]>;
1818
1832
  isAllExpanded: vue.ComputedRef<boolean>;
1819
- treeData: vue.ComputedRef<object[]>;
1833
+ treeData: vue.ComputedRef<readonly T[]>;
1820
1834
  currentSearchPattern: vue.WritableComputedRef<string, string>;
1821
- renderPrefix: (info: TreeRenderContext) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
1822
- [key: string]: any;
1823
- }> | vue.VNodeArrayChildren | null;
1824
- renderLabel: (info: TreeRenderContext) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
1825
- [key: string]: any;
1826
- }> | vue.VNodeArrayChildren | null;
1827
- renderSuffix: (info: TreeRenderContext) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
1835
+ renderPrefix: (info: TreeRenderContext<T>) => any;
1836
+ renderLabel: (info: TreeRenderContext<T>) => string | number | boolean | void | vue.VNode<vue.RendererNode, vue.RendererElement, {
1828
1837
  [key: string]: any;
1829
1838
  }> | vue.VNodeArrayChildren | null;
1839
+ renderSuffix: (info: TreeRenderContext<T>) => any;
1830
1840
  treeBindings: vue.ComputedRef<TreeProps>;
1831
1841
  treeRef: vue.ShallowRef<TreeInst | undefined, TreeInst | undefined>;
1832
1842
  density: vue.ComputedRef<ResolvedComponentDensity>;
1833
1843
  toggleExpandAll: () => void;
1834
- handleExpandedKeysChange: (keys: TreeKey[], options?: (TreeNodeData | null)[], meta?: TreeUpdateMeta) => void;
1835
- handleSelectedKeysChange: (keys: TreeKey[], options?: (TreeNodeData | null)[], meta?: TreeUpdateMeta) => void;
1836
- handleCheckedKeysChange: (keys: TreeKey[], options?: (TreeNodeData | null)[], meta?: TreeUpdateMeta) => void;
1837
- handleDrop: (info: DropInfo) => void;
1844
+ handleExpandedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1845
+ handleSelectedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1846
+ handleCheckedKeysChange: (keys: TreeKey[], options?: (T | null)[], meta?: TreeUpdateMeta<T>) => void;
1847
+ handleDrop: (info: DropInfo<T>) => void;
1838
1848
  handleAdd: () => void;
1839
1849
  handleRefresh: () => void;
1840
- expose: Omit<TreeExpose, "expandedKeys" | "selectedKeys" | "checkedKeys"> & {
1850
+ expose: Omit<TreeExpose<T>, "expandedKeys" | "selectedKeys" | "checkedKeys"> & {
1841
1851
  expandedKeys: Ref<TreeKey[]>;
1842
1852
  selectedKeys: Ref<TreeKey[]>;
1843
1853
  checkedKeys: Ref<TreeKey[]>;
@@ -1916,9 +1926,9 @@ declare function useTableQuery<T extends object, Q extends object = Record<strin
1916
1926
  validateRowKeys?: boolean;
1917
1927
  edit?: boolean | EditMode | EditConfig<T> | undefined;
1918
1928
  actions?: SimpleTableActions<T> | undefined;
1919
- expand?: boolean | ExpandConfig$1<T> | undefined;
1920
- selection?: boolean | SelectionConfig$1<T> | undefined;
1921
- dynamicRows?: boolean | DynamicRowsOptions<T> | undefined;
1929
+ expand?: boolean | ExpandConfig$1<T, unknown> | undefined;
1930
+ selection?: boolean | SelectionConfig$1<T, unknown> | undefined;
1931
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
1922
1932
  toolbar?: ToolbarConfig;
1923
1933
  display?: DisplayConfig;
1924
1934
  virtualScroll?: VirtualScrollConfig | boolean;
@@ -1964,9 +1974,9 @@ declare function useTableQuery<T extends object, Q extends object = Record<strin
1964
1974
  validateRowKeys?: boolean;
1965
1975
  edit?: boolean | EditMode | EditConfig<T> | undefined;
1966
1976
  actions?: SimpleTableActions<T> | undefined;
1967
- expand?: boolean | ExpandConfig$1<T> | undefined;
1968
- selection?: boolean | SelectionConfig$1<T> | undefined;
1969
- dynamicRows?: boolean | DynamicRowsOptions<T> | undefined;
1977
+ expand?: boolean | ExpandConfig$1<T, unknown> | undefined;
1978
+ selection?: boolean | SelectionConfig$1<T, unknown> | undefined;
1979
+ dynamicRows?: DynamicRowsOptions<T> | (string extends keyof T ? boolean : false) | undefined;
1970
1980
  toolbar?: ToolbarConfig;
1971
1981
  display?: DisplayConfig;
1972
1982
  virtualScroll?: VirtualScrollConfig | boolean;
@@ -1985,4 +1995,4 @@ declare function useTableQuery<T extends object, Q extends object = Record<strin
1985
1995
  cancel: () => void;
1986
1996
  };
1987
1997
  //#endregion
1988
- export { PaginationConfig as $, printPresets as $t, HighlightPluginOptions as A, resolveConfig as At, defineTableColumns as B, useTableGlobalConfig as Bt, TreeNodeData as C, SelectionConfig$1 as Ct, TreeSlots as D, TreeConfig as Dt, TreeRenderContext as E, ToolbarConfig as Et, useCellEdit as F, FormatterType as Ft, BuiltInTableColumn as G, RowDragConfig as Gt, validateTableRowKeys as H, UseCrossPageSelectionOptions as Ht, usePagination as I, TABLE_GLOBAL_CONFIG_KEY as It, CustomAction as J, useRowDrag as Jt, ChildSelectionState as K, UseRowDragOptions as Kt, useTableActions as L, TableGlobalConfig as Lt, setupHighlight as M, exportTableData as Mt, useHighlight as N, ColumnFormatter as Nt, TreeUpdateMeta as O, VirtualScrollConfig as Ot, useModalEdit as P, FormatterConfig as Pt, NormalTableColumn as Q, PrintWatermarkOptions as Qt, useTableExpand as R, applyFormatter as Rt, TreeNativeProps as S, ExpandConfig$1 as St, TreeProps$1 as T, TableConfig as Tt, _default$1 as U, UseCrossPageSelectionReturn as Ut, defineTableConfig as V, CrossPageSelectionConfig as Vt, ApiFunction as W, useCrossPageSelection as Wt, EditMode as X, DynamicRowsReturn as Xt, DataRecord as Y, DynamicRowsOptions as Yt, MaybeRefLike as Z, useDynamicRows as Zt, StatusType as _, ColumnDragConfig as _t, getItem as a, StrictTableColumn as at, TreeKey as b, EditConfig as bt, setItem as c, TableInstance as ct, _default as d, TableRowKeyIssue as dt, usePrintWatermark as en, ParentChildLinkMode as et, ActionConfig as f, UseTableExpandOptions as ft, StatusConfig as g, BatchActionsConfig as gt, IconConfig as h, useRowEdit as ht, useTableQuery as i, COMPONENT_LOCALE_KEY as in, SimpleTableActions as it, createHighlight as j, ExportConfig as jt, HighlightAPI as k, createEditModeChecker as kt, useTreeOperations as l, TableProps as lt, DropInfo as m, useTableManager as mt, TableQueryResult as n, useComponentLocale as nn, RowAction as nt, removeAllItem as o, TableColumn as ot, ButtonType as p, UseTableExpandReturn as pt, ColumnWithKey as q, UseRowDragReturn as qt, UseTableQueryOptions as r, COMPONENT_FEEDBACK_KEY as rn, SelectOption as rt, removeItem as s, TableEmits as st, TableQueryContext as t, useComponentFeedback as tn, RenderFunction as tt, presetConfigs as u, TableRowKey as ut, TreeEmits as v, CrudBinding as vt, TreeOption$1 as w, SummaryConfig as wt, TreeMode as x, ErrorConfig as xt, TreeExpose as y, DisplayConfig as yt, useTableColumns as z, mergeGlobalConfig as zt };
1998
+ export { MaybeRefLike as $, PrintWatermarkOptions as $t, HighlightPluginOptions as A, createEditModeChecker as At, useRowEdit as B, mergeGlobalConfig as Bt, TreeNodeData as C, ExpandConfig$1 as Ct, TreeSlots as D, ToolbarConfig as Dt, TreeRenderContext as E, TableConfig as Et, useCellEdit as F, FormatterConfig as Ft, _default$1 as G, useCrossPageSelection as Gt, defineTableColumns as H, CrossPageSelectionConfig as Ht, usePagination as I, FormatterType as It, ChildSelectionState as J, UseRowDragReturn as Jt, ApiFunction as K, RowDragConfig as Kt, useTableActions as L, TABLE_GLOBAL_CONFIG_KEY as Lt, setupHighlight as M, ExportConfig as Mt, useHighlight as N, exportTableData as Nt, TreeUpdateMeta as O, TreeConfig as Ot, useModalEdit as P, ColumnFormatter as Pt, EditMode as Q, useDynamicRows as Qt, useTableExpand as R, TableGlobalConfig as Rt, TreeNativeProps as S, ErrorConfig as St, TreeProps$1 as T, SummaryConfig as Tt, defineTableConfig as U, UseCrossPageSelectionOptions as Ut, useTableColumns as V, useTableGlobalConfig as Vt, validateTableRowKeys as W, UseCrossPageSelectionReturn as Wt, CustomAction as X, DynamicRowsOptions as Xt, ColumnWithKey as Y, useRowDrag as Yt, DataRecord as Z, DynamicRowsReturn as Zt, StatusType as _, BatchActionsConfig as _t, getItem as a, COMPONENT_LOCALE_KEY as an, SelectOption as at, TreeKey as b, DisplayConfig as bt, setItem as c, TableColumn as ct, _default as d, TableManagerApi as dt, printPresets as en, NormalTableColumn as et, ActionConfig as f, TableProps as ft, StatusConfig as g, UseTableExpandReturn as gt, IconConfig as h, UseTableExpandOptions as ht, useTableQuery as i, COMPONENT_FEEDBACK_KEY as in, RowAction as it, createHighlight as j, resolveConfig as jt, HighlightAPI as k, VirtualScrollConfig as kt, useTreeOperations as l, TableEmits as lt, DropInfo as m, TableRowKeyIssue as mt, TableQueryResult as n, useComponentFeedback as nn, ParentChildLinkMode as nt, removeAllItem as o, SimpleTableActions as ot, ButtonType as p, TableRowKey as pt, BuiltInTableColumn as q, UseRowDragOptions as qt, UseTableQueryOptions as r, useComponentLocale as rn, RenderFunction as rt, removeItem as s, StrictTableColumn as st, TableQueryContext as t, usePrintWatermark as tn, PaginationConfig as tt, presetConfigs as u, TableInstance as ut, TreeEmits as v, ColumnDragConfig as vt, TreeOption$1 as w, SelectionConfig$1 as wt, TreeMode as x, EditConfig as xt, TreeExpose as y, CrudBinding as yt, useTableManager as z, applyFormatter as zt };