@xihan-ui/vue 1.0.0 → 1.1.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 (110) hide show
  1. package/CHANGELOG.md +259 -0
  2. package/README.md +1 -1
  3. package/dist/components/anchor/anchor.d.ts +1 -1
  4. package/dist/components/back-top/back-top.d.ts +1 -1
  5. package/dist/components/calendar/calendar.d.ts +1 -1
  6. package/dist/components/carousel/carousel.d.ts +1 -1
  7. package/dist/components/cascader/cascader.d.ts +6 -6
  8. package/dist/components/color-picker/color-picker.d.ts +2 -2
  9. package/dist/components/combobox/combobox.d.ts +5 -5
  10. package/dist/components/combobox/combobox.d.ts.map +1 -1
  11. package/dist/components/combobox/combobox.js +2 -1
  12. package/dist/components/combobox/combobox.js.map +1 -1
  13. package/dist/components/context-menu/context-menu.d.ts +2 -2
  14. package/dist/components/date-field/date-field.d.ts +2 -2
  15. package/dist/components/date-picker/date-picker.d.ts +5 -5
  16. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  17. package/dist/components/descriptions/descriptions.d.ts +1 -1
  18. package/dist/components/dialog/dialog.d.ts +1 -1
  19. package/dist/components/drawer/drawer.d.ts +2 -2
  20. package/dist/components/float-button/float-button.d.ts +3 -3
  21. package/dist/components/floating-panel/floating-panel.d.ts +2 -2
  22. package/dist/components/form/form.d.ts +1 -1
  23. package/dist/components/hotkeys/hotkeys.d.ts +1 -1
  24. package/dist/components/hover-card/hover-card.d.ts +1 -1
  25. package/dist/components/image-viewer/image-viewer.d.ts +3 -3
  26. package/dist/components/json-viewer/json-viewer.d.ts +1 -1
  27. package/dist/components/list/list.d.ts +1 -1
  28. package/dist/components/listbox/listbox.d.ts +1 -1
  29. package/dist/components/mention/mention.d.ts +4 -4
  30. package/dist/components/menu/menu.d.ts +2 -2
  31. package/dist/components/notification/notification.d.ts +2 -2
  32. package/dist/components/number-animation/number-animation.d.ts +1 -1
  33. package/dist/components/number-field/number-field.d.ts +2 -2
  34. package/dist/components/pagination/pagination.d.ts +1 -1
  35. package/dist/components/password-input/password-input.d.ts +2 -2
  36. package/dist/components/pin-input/pin-input.d.ts +1 -1
  37. package/dist/components/popconfirm/popconfirm.d.ts +1 -1
  38. package/dist/components/popover/popover.d.ts +2 -2
  39. package/dist/components/popselect/popselect.d.ts +3 -3
  40. package/dist/components/popselect/popselect.d.ts.map +1 -1
  41. package/dist/components/popselect/popselect.js +2 -1
  42. package/dist/components/popselect/popselect.js.map +1 -1
  43. package/dist/components/resizable/context.d.ts +7 -0
  44. package/dist/components/resizable/context.d.ts.map +1 -0
  45. package/dist/components/resizable/context.js +15 -0
  46. package/dist/components/resizable/context.js.map +1 -0
  47. package/dist/components/resizable/resizable.d.ts +174 -0
  48. package/dist/components/resizable/resizable.d.ts.map +1 -0
  49. package/dist/components/resizable/resizable.js +108 -0
  50. package/dist/components/resizable/resizable.js.map +1 -0
  51. package/dist/components/resizable/use-resizable.d.ts +14 -0
  52. package/dist/components/resizable/use-resizable.d.ts.map +1 -0
  53. package/dist/components/resizable/use-resizable.js +25 -0
  54. package/dist/components/resizable/use-resizable.js.map +1 -0
  55. package/dist/components/select/select.d.ts +4 -4
  56. package/dist/components/side-nav/side-nav.d.ts +2 -2
  57. package/dist/components/slider/slider.d.ts +1 -1
  58. package/dist/components/sortable/context.d.ts +7 -0
  59. package/dist/components/sortable/context.d.ts.map +1 -0
  60. package/dist/components/sortable/context.js +15 -0
  61. package/dist/components/sortable/context.js.map +1 -0
  62. package/dist/components/sortable/sortable.d.ts +166 -0
  63. package/dist/components/sortable/sortable.d.ts.map +1 -0
  64. package/dist/components/sortable/sortable.js +128 -0
  65. package/dist/components/sortable/sortable.js.map +1 -0
  66. package/dist/components/sortable/use-sortable.d.ts +14 -0
  67. package/dist/components/sortable/use-sortable.d.ts.map +1 -0
  68. package/dist/components/sortable/use-sortable.js +26 -0
  69. package/dist/components/sortable/use-sortable.js.map +1 -0
  70. package/dist/components/steps/steps.d.ts +1 -1
  71. package/dist/components/switch/switch.d.ts +1 -1
  72. package/dist/components/table/table.d.ts +48 -4
  73. package/dist/components/table/table.d.ts.map +1 -1
  74. package/dist/components/table/table.js +58 -8
  75. package/dist/components/table/table.js.map +1 -1
  76. package/dist/components/table/use-table.d.ts +1 -1
  77. package/dist/components/table/use-table.d.ts.map +1 -1
  78. package/dist/components/table/use-table.js +3 -2
  79. package/dist/components/table/use-table.js.map +1 -1
  80. package/dist/components/tabs/tabs.d.ts +47 -2
  81. package/dist/components/tabs/tabs.d.ts.map +1 -1
  82. package/dist/components/tabs/tabs.js +45 -3
  83. package/dist/components/tabs/tabs.js.map +1 -1
  84. package/dist/components/tabs/use-tabs.d.ts +1 -1
  85. package/dist/components/tabs/use-tabs.d.ts.map +1 -1
  86. package/dist/components/tabs/use-tabs.js +3 -2
  87. package/dist/components/tabs/use-tabs.js.map +1 -1
  88. package/dist/components/tags-input/tags-input.d.ts +3 -3
  89. package/dist/components/text-field/text-field.d.ts +1 -1
  90. package/dist/components/text-field/text-field.d.ts.map +1 -1
  91. package/dist/components/text-field/text-field.js +2 -1
  92. package/dist/components/text-field/text-field.js.map +1 -1
  93. package/dist/components/time-field/time-field.d.ts +2 -2
  94. package/dist/components/time-picker/time-picker.d.ts +5 -5
  95. package/dist/components/toast/toast.d.ts +1 -1
  96. package/dist/components/tooltip/tooltip.d.ts +1 -1
  97. package/dist/components/tour/tour.d.ts +4 -4
  98. package/dist/components/tree/tree.d.ts +46 -2
  99. package/dist/components/tree/tree.d.ts.map +1 -1
  100. package/dist/components/tree/tree.js +45 -3
  101. package/dist/components/tree/tree.js.map +1 -1
  102. package/dist/components/tree/use-tree.d.ts +1 -1
  103. package/dist/components/tree/use-tree.d.ts.map +1 -1
  104. package/dist/components/tree/use-tree.js +3 -2
  105. package/dist/components/tree/use-tree.js.map +1 -1
  106. package/dist/components/tree-select/tree-select.d.ts +5 -5
  107. package/dist/index.d.ts +10 -4
  108. package/dist/index.js +10 -4
  109. package/dist/package.js +1 -1
  110. package/package.json +15 -14
@@ -5,7 +5,7 @@ import { Direction, Size } from "@xihan-ui/kernel";
5
5
  //#region src/components/table/table.d.ts
6
6
  type TableProps = TableSchema['props'];
7
7
  /** 默认插槽的载荷:可见行与排序、选中、展开三态,以及逐行查询与改写它们的句柄。 */
8
- type TableRootSlotProps = Pick<TableApi, 'columns' | 'columnPreference' | 'setColumnHidden' | 'moveColumn' | 'setColumnWidth' | 'setColumnPreference' | 'rowNumber' | 'visibleRows' | 'sort' | 'selection' | 'selectionState' | 'expandedValue' | 'focusedRow' | 'empty' | 'loading' | 'isSelected' | 'isExpanded' | 'sortDirection' | 'sortPriority' | 'toggleSort' | 'selectRow' | 'toggleSelectAll' | 'toggleExpandRow'>;
8
+ type TableRootSlotProps = Pick<TableApi, 'columns' | 'columnPreference' | 'setColumnHidden' | 'moveColumn' | 'setColumnWidth' | 'setColumnPreference' | 'rowNumber' | 'visibleRows' | 'sort' | 'selection' | 'selectionState' | 'expandedValue' | 'focusedRow' | 'empty' | 'loading' | 'isSelected' | 'isExpanded' | 'sortDirection' | 'sortPriority' | 'toggleSort' | 'selectRow' | 'toggleSelectAll' | 'toggleExpandRow' | 'rowReorderDisabledReason'>;
9
9
  declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
10
10
  columns: {
11
11
  type: PropType<TableColumnDef[]>;
@@ -76,6 +76,13 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
76
76
  borderless: BooleanConstructor;
77
77
  ruled: BooleanConstructor;
78
78
  footer: BooleanConstructor;
79
+ /** 行可以拖着换位。整行都是拖动源,不另出把手。 */
80
+ rowReorderable: BooleanConstructor;
81
+ /** 这一次搬家许不许。收到的是折算好的落点(搬到哪个父下面的第几位)。不给即都许。 */
82
+ allowRowDrop: {
83
+ type: PropType<TableProps["allowRowDrop"]>;
84
+ default: undefined;
85
+ };
79
86
  loop: {
80
87
  type: BooleanConstructor;
81
88
  default: undefined;
@@ -88,6 +95,10 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
88
95
  type: PropType<Size>;
89
96
  default: undefined;
90
97
  };
98
+ translations: {
99
+ type: PropType<TableProps["translations"]>;
100
+ default: undefined;
101
+ };
91
102
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
92
103
  [key: string]: any;
93
104
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -101,6 +112,7 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
101
112
  'update:selection': (_selection: PayloadOf<TableProps, "onSelectionChange">["value"]) => true;
102
113
  'expanded-change': (_details: PayloadOf<TableProps, "onExpandedChange">) => true;
103
114
  'update:expanded': (_expanded: PayloadOf<TableProps, "onExpandedChange">["value"]) => true;
115
+ 'row-move': (_details: PayloadOf<TableProps, "onRowMove">) => true;
104
116
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
105
117
  columns: {
106
118
  type: PropType<TableColumnDef[]>;
@@ -171,6 +183,13 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
171
183
  borderless: BooleanConstructor;
172
184
  ruled: BooleanConstructor;
173
185
  footer: BooleanConstructor;
186
+ /** 行可以拖着换位。整行都是拖动源,不另出把手。 */
187
+ rowReorderable: BooleanConstructor;
188
+ /** 这一次搬家许不许。收到的是折算好的落点(搬到哪个父下面的第几位)。不给即都许。 */
189
+ allowRowDrop: {
190
+ type: PropType<TableProps["allowRowDrop"]>;
191
+ default: undefined;
192
+ };
174
193
  loop: {
175
194
  type: BooleanConstructor;
176
195
  default: undefined;
@@ -183,6 +202,10 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
183
202
  type: PropType<Size>;
184
203
  default: undefined;
185
204
  };
205
+ translations: {
206
+ type: PropType<TableProps["translations"]>;
207
+ default: undefined;
208
+ };
186
209
  }>> & Readonly<{
187
210
  "onExpanded-change"?: ((_details: import("@xihan-ui/headless").TableExpandedChangeDetails) => any) | undefined;
188
211
  "onUpdate:expanded"?: ((_expanded: string[]) => any) | undefined;
@@ -194,31 +217,35 @@ declare const XhTableRoot: import("vue").DefineComponent<import("vue").ExtractPr
194
217
  "onUpdate:sort"?: ((_sort: TableSortDescriptor[]) => any) | undefined;
195
218
  "onSelection-change"?: ((_details: import("@xihan-ui/headless").TableSelectionChangeDetails) => any) | undefined;
196
219
  "onUpdate:selection"?: ((_selection: TableSelection) => any) | undefined;
220
+ "onRow-move"?: ((_details: import("@xihan-ui/headless").TableRowMoveDetails) => any) | undefined;
197
221
  }>, {
198
222
  sort: TableSortDescriptor[];
199
223
  footer: boolean;
200
224
  dir: Direction;
201
225
  size: Size;
226
+ translations: Partial<import("@xihan-ui/headless").TableTranslations> | undefined;
227
+ loop: boolean;
202
228
  loading: boolean;
203
229
  selectionMode: TableSelectionMode;
204
230
  page: number;
205
- loop: boolean;
206
231
  empty: boolean;
207
232
  columns: TableColumnDef[];
208
233
  expanded: string[];
209
234
  defaultExpanded: string[];
210
235
  rows: TableRowDef[];
236
+ pageSize: number;
237
+ allowRowDrop: ((move: import("@xihan-ui/headless").TableRowMoveDetails) => boolean) | undefined;
211
238
  columnPreference: TableColumnPreference;
212
239
  selection: TableSelection;
213
240
  stickyHeader: boolean;
214
241
  striped: boolean;
215
242
  borderless: boolean;
216
243
  ruled: boolean;
244
+ rowReorderable: boolean;
217
245
  defaultSort: TableSortDescriptor[];
218
246
  defaultSelection: TableSelection;
219
247
  prefixColumns: TableColumnKind[];
220
248
  defaultColumnPreference: TableColumnPreference;
221
- pageSize: number;
222
249
  }, SlotsType<{
223
250
  default?: (props: TableRootSlotProps) => VNode[];
224
251
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -300,6 +327,23 @@ declare const XhTableRowSelectTrigger: import("vue").DefineComponent<{}, () => V
300
327
  declare const XhTableSortTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
301
328
  [key: string]: any;
302
329
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
330
+ /** 列宽把手。放在表头格里,只有 resizable 的列渲它。 */
331
+ declare const XhTableColumnResizeTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
332
+ [key: string]: any;
333
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
334
+ /** 列拖拽把手。放在表头格里,只有可拖的列渲它。 */
335
+ declare const XhTableColumnDragTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
336
+ [key: string]: any;
337
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
338
+ /**
339
+ * 行拖拽把手。放在数据行里,自带 touch-action: none,按下即拖,不等激活距离。
340
+ * 对读屏隐藏、也不占 Tab 位;键盘换位由表体上的 Alt + 上下键承担,
341
+ * 树形表下另有 Alt + 左右键改缩进层级。
342
+ * 整行起手那一路照旧可用,把手是叠加的第二个入口。
343
+ */
344
+ declare const XhTableRowDragTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
345
+ [key: string]: any;
346
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
303
347
  declare const XhTableExpandTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
304
348
  [key: string]: any;
305
349
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -325,5 +369,5 @@ declare const XhTableLoadingState: import("vue").DefineComponent<{}, () => VNode
325
369
  [key: string]: any;
326
370
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
327
371
  //#endregion
328
- export { TableRootSlotProps, XhTableBody, XhTableCaption, XhTableCell, XhTableColumnHeader, XhTableEmpty, XhTableExpandTrigger, XhTableExpandedRow, XhTableFooter, XhTableHeader, XhTableLoadingState, XhTableRoot, XhTableRow, XhTableRowSelectTrigger, XhTableSelectAllTrigger, XhTableSortTrigger };
372
+ export { TableRootSlotProps, XhTableBody, XhTableCaption, XhTableCell, XhTableColumnDragTrigger, XhTableColumnHeader, XhTableColumnResizeTrigger, XhTableEmpty, XhTableExpandTrigger, XhTableExpandedRow, XhTableFooter, XhTableHeader, XhTableLoadingState, XhTableRoot, XhTableRow, XhTableRowDragTrigger, XhTableRowSelectTrigger, XhTableSelectAllTrigger, XhTableSortTrigger };
329
373
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","names":[],"sources":["../../../src/components/table/table.ts"],"mappings":";;;;;KA+BK,aAAa;;KAyBN,qBAAqB,KAC/B;cA0BW,2BAAW,8BAAA;;IAIM,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACrB,MAAA,SAAS;;;;;IAEV,MAAA,SAAS;;;;;;IAGL,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;;;;IAGzB,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;IASX,MAAA,SAAS;;;;IACR,MAAA,SAAS;;;;;;EAIM,6BAAA;IAAE,OAAO;;EACZ,4BAAA,QAAA;EACV,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;EACF,qBAAA,UAAA,UAAU;EACR,qBAAA,YAAA,UAAU;EACb,oBAAA,UAAA,UAAU;EACT,oBAAA,WAAA,UAAU;;;IArCf,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACrB,MAAA,SAAS;;;;;IAEV,MAAA,SAAS;;;;;;IAGL,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;;;;IAGzB,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;IASX,MAAA,SAAS;;;;IACR,MAAA,SAAS;;;;;;;IAIe,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUtC,WAAC,OAAO,uBAAuB;kCA+C3C;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAOxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2BAAW,0BAAA,oBAAA,4BAAA;;8BAQtB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAOxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0BAAU,8BAAA;;;;;;;;;;;;;;;;qCA6BrB;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;MAe9B,oDAAA;cAEW,2BAAW,8BAAA;;;;;;;;IAMiB,MAAA;;;;;;;;;;;;;IAAA,MAAA;;;;;qCAgBvC;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAUlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAW7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAW/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;MAgB7B,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"table.d.ts","names":[],"sources":["../../../src/components/table/table.ts"],"mappings":";;;;;KAgCK,aAAa;;KAyBN,qBAAqB,KAC/B;cA2BW,2BAAW,8BAAA;;IAIM,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACrB,MAAA,SAAS;;;;;IAEV,MAAA,SAAS;;;;;;IAGL,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;;;;IAGzB,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAWA,MAAA,SAAS;;;;;;;;IAEpB,MAAA,SAAS;;;;IACR,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;;;EAIF,6BAAA;IAAE,OAAO;;EACZ,4BAAA,QAAA;EACV,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;EACF,qBAAA,UAAA,UAAU;EACR,qBAAA,YAAA,UAAU;EACb,oBAAA,UAAA,UAAU;EACT,oBAAA,WAAA,UAAU;EAElB,aAAA,UAAA,UAAU;;;IA5CP,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACrB,MAAA,SAAS;;;;;IAEV,MAAA,SAAS;;;;;;IAGL,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;;;;IAGzB,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAWA,MAAA,SAAS;;;;;;;;IAEpB,MAAA,SAAS;;;;IACR,MAAA,SAAS;;;;IACD,MAAA,SAAS;;;;;;;IAIO,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtC,WAAC,OAAO,uBAAuB;kCA+D3C;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAOxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2BAAW,0BAAA,oBAAA,4BAAA;;8BAQtB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAOxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0BAAU,8BAAA;;;;;;;;;;;;;;;;qCA6BrB;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;MAe9B,oDAAA;cAEW,2BAAW,8BAAA;;;;;;;;IAMiB,MAAA;;;;;;;;;;;;;IAAA,MAAA;;;;;qCAgBvC;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAUlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAW7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAWrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAWnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;;;;;;cAQW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAWhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAW/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;MAgB7B,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,6 +1,7 @@
1
+ import { withXhConfig } from "../../config/config.js";
1
2
  import { provideTable, provideTableColumn, provideTableRow, provideTableSection, useOptionalTableRowContext, useTableColumnContext, useTableContext, useTableRowContext, useTableSection } from "./context.js";
2
3
  import { useTable } from "./use-table.js";
3
- import { computed, defineComponent, h, onBeforeUnmount, ref, watch } from "vue";
4
+ import { Fragment, computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, watch } from "vue";
4
5
  //#region src/components/table/table.ts
5
6
  /** 本行持有焦点时,value 变更重报焦点行,卸载时上报表体失焦 */
6
7
  function reportRowFocus(ctx, el, value) {
@@ -91,6 +92,13 @@ const XhTableRoot = defineComponent({
91
92
  borderless: Boolean,
92
93
  ruled: Boolean,
93
94
  footer: Boolean,
95
+ /** 行可以拖着换位。整行都是拖动源,不另出把手。 */
96
+ rowReorderable: Boolean,
97
+ /** 这一次搬家许不许。收到的是折算好的落点(搬到哪个父下面的第几位)。不给即都许。 */
98
+ allowRowDrop: {
99
+ type: Function,
100
+ default: void 0
101
+ },
94
102
  loop: {
95
103
  type: Boolean,
96
104
  default: void 0
@@ -102,6 +110,10 @@ const XhTableRoot = defineComponent({
102
110
  size: {
103
111
  type: String,
104
112
  default: void 0
113
+ },
114
+ translations: {
115
+ type: Object,
116
+ default: void 0
105
117
  }
106
118
  },
107
119
  emits: {
@@ -112,10 +124,12 @@ const XhTableRoot = defineComponent({
112
124
  "selection-change": (_details) => true,
113
125
  "update:selection": (_selection) => true,
114
126
  "expanded-change": (_details) => true,
115
- "update:expanded": (_expanded) => true
127
+ "update:expanded": (_expanded) => true,
128
+ "row-move": (_details) => true
116
129
  },
117
130
  slots: Object,
118
- setup(props, { slots, emit }) {
131
+ inheritAttrs: false,
132
+ setup(props, { slots, emit, attrs }) {
119
133
  const onColumnPreferenceChange = (details) => {
120
134
  emit("column-preference-change", details);
121
135
  emit("update:columnPreference", details.value);
@@ -132,9 +146,12 @@ const XhTableRoot = defineComponent({
132
146
  emit("expanded-change", details);
133
147
  emit("update:expanded", details.value);
134
148
  };
135
- const ctx = useTable(props, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange);
149
+ const onRowMove = (details) => {
150
+ emit("row-move", details);
151
+ };
152
+ const ctx = useTable(withXhConfig("table", props), onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange, onRowMove);
136
153
  provideTable(ctx);
137
- return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
154
+ return () => h(Fragment, [h("div", mergeProps(ctx.api.value.getRootProps(), attrs), slots.default?.({
138
155
  columns: ctx.api.value.columns,
139
156
  columnPreference: ctx.api.value.columnPreference,
140
157
  setColumnHidden: ctx.api.value.setColumnHidden,
@@ -157,8 +174,9 @@ const XhTableRoot = defineComponent({
157
174
  toggleSort: ctx.api.value.toggleSort,
158
175
  selectRow: ctx.api.value.selectRow,
159
176
  toggleSelectAll: ctx.api.value.toggleSelectAll,
160
- toggleExpandRow: ctx.api.value.toggleExpandRow
161
- }));
177
+ toggleExpandRow: ctx.api.value.toggleExpandRow,
178
+ rowReorderDisabledReason: ctx.api.value.rowReorderDisabledReason
179
+ })), h("div", ctx.api.value.getLiveRegionProps(), ctx.service.context.get("announcement"))]);
162
180
  }
163
181
  });
164
182
  const XhTableCaption = defineComponent({
@@ -274,6 +292,38 @@ const XhTableSortTrigger = defineComponent({
274
292
  return () => h("span", ctx.api.value.getSortTriggerProps(column.value), slots.default?.());
275
293
  }
276
294
  });
295
+ /** 列宽把手。放在表头格里,只有 resizable 的列渲它。 */
296
+ const XhTableColumnResizeTrigger = defineComponent({
297
+ name: "XhTableColumnResizeTrigger",
298
+ setup(_, { slots }) {
299
+ const ctx = useTableContext();
300
+ const { column } = useTableColumnContext();
301
+ return () => h("span", ctx.api.value.getColumnResizeTriggerProps(column.value), slots.default?.());
302
+ }
303
+ });
304
+ /** 列拖拽把手。放在表头格里,只有可拖的列渲它。 */
305
+ const XhTableColumnDragTrigger = defineComponent({
306
+ name: "XhTableColumnDragTrigger",
307
+ setup(_, { slots }) {
308
+ const ctx = useTableContext();
309
+ const { column } = useTableColumnContext();
310
+ return () => h("span", ctx.api.value.getColumnDragTriggerProps(column.value), slots.default?.());
311
+ }
312
+ });
313
+ /**
314
+ * 行拖拽把手。放在数据行里,自带 touch-action: none,按下即拖,不等激活距离。
315
+ * 对读屏隐藏、也不占 Tab 位;键盘换位由表体上的 Alt + 上下键承担,
316
+ * 树形表下另有 Alt + 左右键改缩进层级。
317
+ * 整行起手那一路照旧可用,把手是叠加的第二个入口。
318
+ */
319
+ const XhTableRowDragTrigger = defineComponent({
320
+ name: "XhTableRowDragTrigger",
321
+ setup(_, { slots }) {
322
+ const ctx = useTableContext();
323
+ const { row } = useTableRowContext();
324
+ return () => h("span", ctx.api.value.getRowDragTriggerProps(row.value), slots.default?.());
325
+ }
326
+ });
277
327
  const XhTableExpandTrigger = defineComponent({
278
328
  name: "XhTableExpandTrigger",
279
329
  setup(_, { slots }) {
@@ -311,6 +361,6 @@ const XhTableLoadingState = defineComponent({
311
361
  }
312
362
  });
313
363
  //#endregion
314
- export { XhTableBody, XhTableCaption, XhTableCell, XhTableColumnHeader, XhTableEmpty, XhTableExpandTrigger, XhTableExpandedRow, XhTableFooter, XhTableHeader, XhTableLoadingState, XhTableRoot, XhTableRow, XhTableRowSelectTrigger, XhTableSelectAllTrigger, XhTableSortTrigger };
364
+ export { XhTableBody, XhTableCaption, XhTableCell, XhTableColumnDragTrigger, XhTableColumnHeader, XhTableColumnResizeTrigger, XhTableEmpty, XhTableExpandTrigger, XhTableExpandedRow, XhTableFooter, XhTableHeader, XhTableLoadingState, XhTableRoot, XhTableRow, XhTableRowDragTrigger, XhTableRowSelectTrigger, XhTableSelectAllTrigger, XhTableSortTrigger };
315
365
 
316
366
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.ts"],"sourcesContent":["import type {\n TableApi,\n TableColumnDef,\n TableColumnKind,\n TableColumnPreference,\n TableColumnProps,\n TableRowDef,\n TableRowProps,\n TableSchema,\n TableSelection,\n TableSelectionMode,\n TableSortDescriptor,\n} from '@xihan-ui/headless'\nimport type { Direction, Size } from '@xihan-ui/kernel'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TableContext } from './use-table'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport {\n provideTable,\n provideTableColumn,\n provideTableRow,\n provideTableSection,\n useOptionalTableRowContext,\n useTableColumnContext,\n useTableContext,\n useTableRowContext,\n useTableSection,\n} from './context'\nimport { useTable } from './use-table'\n\ntype TableProps = TableSchema['props']\n\n/** 本行持有焦点时,value 变更重报焦点行,卸载时上报表体失焦 */\nfunction reportRowFocus(ctx: TableContext, el: Ref<HTMLElement | null>, value: () => string): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'ROW.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整张表一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本行当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'TABLE.BLUR' })\n })\n}\n\n/** 默认插槽的载荷:可见行与排序、选中、展开三态,以及逐行查询与改写它们的句柄。 */\nexport type TableRootSlotProps = Pick<\n TableApi,\n | 'columns'\n | 'columnPreference'\n | 'setColumnHidden'\n | 'moveColumn'\n | 'setColumnWidth'\n | 'setColumnPreference'\n | 'rowNumber'\n | 'visibleRows'\n | 'sort'\n | 'selection'\n | 'selectionState'\n | 'expandedValue'\n | 'focusedRow'\n | 'empty'\n | 'loading'\n | 'isSelected'\n | 'isExpanded'\n | 'sortDirection'\n | 'sortPriority'\n | 'toggleSort'\n | 'selectRow'\n | 'toggleSelectAll'\n | 'toggleExpandRow'\n>\n\nexport const XhTableRoot = defineComponent({\n name: 'XhTableRoot',\n // 有机器侧兜底的 prop 一律 default: undefined,缺省值由 connect 与机器决定\n props: {\n columns: { type: Array as PropType<TableColumnDef[]>, default: undefined },\n rows: { type: Array as PropType<TableRowDef[]>, default: undefined },\n sort: { type: Array as PropType<TableSortDescriptor[]>, default: undefined },\n defaultSort: { type: Array as PropType<TableSortDescriptor[]>, default: undefined },\n selection: { type: [Array, String] as PropType<TableSelection>, default: undefined },\n defaultSelection: { type: [Array, String] as PropType<TableSelection>, default: undefined },\n selectionMode: { type: String as PropType<TableSelectionMode>, default: undefined },\n /** 要哪几列前缀列(序号 / 多选 / 展开),按给定顺序插在最前面并占住列号。 */\n prefixColumns: { type: Array as PropType<TableColumnKind[]>, default: undefined },\n /** 当前页码与每页条数:只用来算序号,不参与切片。 */\n /** 列偏好:给定即受控。持久化归使用者,库只负责把它算进生效列。 */\n columnPreference: { type: Object as PropType<TableColumnPreference>, default: undefined },\n defaultColumnPreference: { type: Object as PropType<TableColumnPreference>, default: undefined },\n page: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n expanded: { type: Array as PropType<string[]>, default: undefined },\n defaultExpanded: { type: Array as PropType<string[]>, default: undefined },\n loading: Boolean,\n empty: { type: Boolean, default: undefined },\n stickyHeader: Boolean,\n striped: Boolean,\n borderless: Boolean,\n ruled: Boolean,\n footer: Boolean,\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // *-change 携带 { value },update:* 携带裸值以支持 v-model\n emits: {\n 'column-preference-change': (_details: { value: TableColumnPreference }) => true,\n 'update:columnPreference': (_value: TableColumnPreference) => true,\n 'sort-change': (_details: PayloadOf<TableProps, 'onSortChange'>) => true,\n 'update:sort': (_sort: PayloadOf<TableProps, 'onSortChange'>['value']) => true,\n 'selection-change': (_details: PayloadOf<TableProps, 'onSelectionChange'>) => true,\n 'update:selection': (_selection: PayloadOf<TableProps, 'onSelectionChange'>['value']) => true,\n 'expanded-change': (_details: PayloadOf<TableProps, 'onExpandedChange'>) => true,\n 'update:expanded': (_expanded: PayloadOf<TableProps, 'onExpandedChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TableRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onColumnPreferenceChange: TableProps['onColumnPreferenceChange'] = (details) => {\n emit('column-preference-change', details)\n emit('update:columnPreference', details.value)\n }\n const onSortChange: TableProps['onSortChange'] = (details) => {\n emit('sort-change', details)\n emit('update:sort', details.value)\n }\n const onSelectionChange: TableProps['onSelectionChange'] = (details) => {\n emit('selection-change', details)\n emit('update:selection', details.value)\n }\n const onExpandedChange: TableProps['onExpandedChange'] = (details) => {\n emit('expanded-change', details)\n emit('update:expanded', details.value)\n }\n const ctx = useTable(props as TableProps, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange)\n provideTable(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n columns: ctx.api.value.columns,\n columnPreference: ctx.api.value.columnPreference,\n setColumnHidden: ctx.api.value.setColumnHidden,\n moveColumn: ctx.api.value.moveColumn,\n setColumnWidth: ctx.api.value.setColumnWidth,\n setColumnPreference: ctx.api.value.setColumnPreference,\n rowNumber: ctx.api.value.rowNumber,\n visibleRows: ctx.api.value.visibleRows,\n sort: ctx.api.value.sort,\n selection: ctx.api.value.selection,\n selectionState: ctx.api.value.selectionState,\n expandedValue: ctx.api.value.expandedValue,\n focusedRow: ctx.api.value.focusedRow,\n empty: ctx.api.value.empty,\n loading: ctx.api.value.loading,\n isSelected: ctx.api.value.isSelected,\n isExpanded: ctx.api.value.isExpanded,\n sortDirection: ctx.api.value.sortDirection,\n sortPriority: ctx.api.value.sortPriority,\n toggleSort: ctx.api.value.toggleSort,\n selectRow: ctx.api.value.selectRow,\n toggleSelectAll: ctx.api.value.toggleSelectAll,\n toggleExpandRow: ctx.api.value.toggleExpandRow,\n }))\n },\n})\n\nexport const XhTableCaption = defineComponent({\n name: 'XhTableCaption',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getCaptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableHeader = defineComponent({\n name: 'XhTableHeader',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('header')\n return () => h('div', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableBody = defineComponent({\n name: 'XhTableBody',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('body')\n // 键盘与 roving 的兜底 Tab 位落在表体上,不在 root 上\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableFooter = defineComponent({\n name: 'XhTableFooter',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('footer')\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableRow = defineComponent({\n name: 'XhTableRow',\n props: {\n /** 行 id:数据行必给,表头行与脚注行省略。 */\n value: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const section = useTableSection()\n if (section !== 'body') {\n return () => h(\n 'div',\n (section === 'header'\n ? ctx.api.value.getHeaderRowProps()\n : ctx.api.value.getFooterRowProps()) as Record<string, unknown>,\n slots.default?.(),\n )\n }\n const row = computed<TableRowProps>(() => ({ value: props.value ?? '' }))\n // 供行内的把手与单元格读取行 id\n provideTableRow({ row })\n const el = ref<HTMLElement | null>(null)\n reportRowFocus(ctx, el, () => row.value.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getRowProps(row.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableColumnHeader = defineComponent({\n name: 'XhTableColumnHeader',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const column = computed<TableColumnProps>(() => ({ value: props.value }))\n provideTableColumn({ column })\n return () => h(\n 'div',\n ctx.api.value.getColumnHeaderProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableCell = defineComponent({\n name: 'XhTableCell',\n props: {\n /** 列 id。 */\n value: { type: String, required: true },\n /** 跨列数,从 value 那一列往后算。 */\n colspan: { type: [String, Number] as PropType<string | number>, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n // 行上下文可选:脚注单元格不属于任何数据行\n const rowCtx = useOptionalTableRowContext()\n return () => h(\n 'div',\n ctx.api.value.getCellProps({\n value: props.value,\n row: rowCtx?.row.value.value,\n colSpan: props.colspan == null ? undefined : Number(props.colspan),\n }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableSelectAllTrigger = defineComponent({\n name: 'XhTableSelectAllTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h(\n 'span',\n ctx.api.value.getSelectAllTriggerProps() as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableRowSelectTrigger = defineComponent({\n name: 'XhTableRowSelectTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { row } = useTableRowContext()\n return () => h(\n 'span',\n ctx.api.value.getRowSelectTriggerProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableSortTrigger = defineComponent({\n name: 'XhTableSortTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { column } = useTableColumnContext()\n return () => h(\n 'span',\n ctx.api.value.getSortTriggerProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableExpandTrigger = defineComponent({\n name: 'XhTableExpandTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { row } = useTableRowContext()\n return () => h(\n 'span',\n ctx.api.value.getExpandTriggerProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableExpandedRow = defineComponent({\n name: 'XhTableExpandedRow',\n props: {\n /** 所属数据行的 id。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const row = computed<TableRowProps>(() => ({ value: props.value }))\n // 不 provide 行上下文;收起只加 hidden,不卸载内部节点\n return () => h(\n 'div',\n ctx.api.value.getExpandedRowProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableEmpty = defineComponent({\n name: 'XhTableEmpty',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableLoadingState = defineComponent({\n name: 'XhTableLoadingState',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getLoadingStateProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":";;;;;AAkCA,SAAS,eAAe,KAAmB,IAA6B,OAA2B;CACjG,MAAM,QAAQ,MAAM,SAAS;EAC3B,IAAI,SAAS,MACX;EACF,MAAM,EAAE,YAAY;EACpB,IAAI,QAAQ,UAAU,MAAM,WAC1B;EACF,IAAI,GAAG,SAAS,QAAQ,MAAM,iBAAiB,MAAM,GAAG,OACtD,QAAQ,KAAK;GAAE,MAAM;GAAa,OAAO;EAAK,CAAC;CACnD,CAAC;CACD,sBAAsB;EACpB,MAAM,EAAE,YAAY;EAEpB,IAAI,QAAQ,UAAU,MAAM,WAC1B;EAEF,IAAI,GAAG,SAAS,QAAQ,MAAM,iBAAiB,MAAM,GAAG,OACtD,QAAQ,KAAK,EAAE,MAAM,aAAa,CAAC;CACvC,CAAC;AACH;AA8BA,MAAa,cAAc,gBAAgB;CACzC,MAAM;CAEN,OAAO;EACL,SAAS;GAAE,MAAM;GAAqC,SAAS,KAAA;EAAU;EACzE,MAAM;GAAE,MAAM;GAAkC,SAAS,KAAA;EAAU;EACnE,MAAM;GAAE,MAAM;GAA0C,SAAS,KAAA;EAAU;EAC3E,aAAa;GAAE,MAAM;GAA0C,SAAS,KAAA;EAAU;EAClF,WAAW;GAAE,MAAM,CAAC,OAAO,MAAM;GAA+B,SAAS,KAAA;EAAU;EACnF,kBAAkB;GAAE,MAAM,CAAC,OAAO,MAAM;GAA+B,SAAS,KAAA;EAAU;EAC1F,eAAe;GAAE,MAAM;GAAwC,SAAS,KAAA;EAAU;;EAElF,eAAe;GAAE,MAAM;GAAsC,SAAS,KAAA;EAAU;;;EAGhF,kBAAkB;GAAE,MAAM;GAA2C,SAAS,KAAA;EAAU;EACxF,yBAAyB;GAAE,MAAM;GAA2C,SAAS,KAAA;EAAU;EAC/F,MAAM;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EACzC,UAAU;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAC7C,UAAU;GAAE,MAAM;GAA6B,SAAS,KAAA;EAAU;EAClE,iBAAiB;GAAE,MAAM;GAA6B,SAAS,KAAA;EAAU;EACzE,SAAS;EACT,OAAO;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC3C,cAAc;EACd,SAAS;EACT,YAAY;EACZ,OAAO;EACP,QAAQ;EACR,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,KAAK;GAAE,MAAM;GAA+B,SAAS,KAAA;EAAU;EAC/D,MAAM;GAAE,MAAM;GAA0B,SAAS,KAAA;EAAU;CAC7D;CAEA,OAAO;EACL,6BAA6B,aAA+C;EAC5E,4BAA4B,WAAkC;EAC9D,gBAAgB,aAAoD;EACpE,gBAAgB,UAA0D;EAC1E,qBAAqB,aAAyD;EAC9E,qBAAqB,eAAoE;EACzF,oBAAoB,aAAwD;EAC5E,oBAAoB,cAAkE;CACxF;CACA,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,4BAAoE,YAAY;GACpF,KAAK,4BAA4B,OAAO;GACxC,KAAK,2BAA2B,QAAQ,KAAK;EAC/C;EACA,MAAM,gBAA4C,YAAY;GAC5D,KAAK,eAAe,OAAO;GAC3B,KAAK,eAAe,QAAQ,KAAK;EACnC;EACA,MAAM,qBAAsD,YAAY;GACtE,KAAK,oBAAoB,OAAO;GAChC,KAAK,oBAAoB,QAAQ,KAAK;EACxC;EACA,MAAM,oBAAoD,YAAY;GACpE,KAAK,mBAAmB,OAAO;GAC/B,KAAK,mBAAmB,QAAQ,KAAK;EACvC;EACA,MAAM,MAAM,SAAS,OAAqB,cAAc,mBAAmB,kBAAkB,wBAAwB;EACrH,aAAa,GAAG;EAChB,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU;GAC7F,SAAS,IAAI,IAAI,MAAM;GACvB,kBAAkB,IAAI,IAAI,MAAM;GAChC,iBAAiB,IAAI,IAAI,MAAM;GAC/B,YAAY,IAAI,IAAI,MAAM;GAC1B,gBAAgB,IAAI,IAAI,MAAM;GAC9B,qBAAqB,IAAI,IAAI,MAAM;GACnC,WAAW,IAAI,IAAI,MAAM;GACzB,aAAa,IAAI,IAAI,MAAM;GAC3B,MAAM,IAAI,IAAI,MAAM;GACpB,WAAW,IAAI,IAAI,MAAM;GACzB,gBAAgB,IAAI,IAAI,MAAM;GAC9B,eAAe,IAAI,IAAI,MAAM;GAC7B,YAAY,IAAI,IAAI,MAAM;GAC1B,OAAO,IAAI,IAAI,MAAM;GACrB,SAAS,IAAI,IAAI,MAAM;GACvB,YAAY,IAAI,IAAI,MAAM;GAC1B,YAAY,IAAI,IAAI,MAAM;GAC1B,eAAe,IAAI,IAAI,MAAM;GAC7B,cAAc,IAAI,IAAI,MAAM;GAC5B,YAAY,IAAI,IAAI,MAAM;GAC1B,WAAW,IAAI,IAAI,MAAM;GACzB,iBAAiB,IAAI,IAAI,MAAM;GAC/B,iBAAiB,IAAI,IAAI,MAAM;EACjC,CAAC,CAAC;CACJ;AACF,CAAC;AAED,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,gBAAgB,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,gBAAgB,gBAAgB;CAC3C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,oBAAoB,QAAQ;EAC5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,eAAe,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,cAAc,gBAAgB;CACzC,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,oBAAoB,MAAM;EAE1B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAClG;AACF,CAAC;AAED,MAAa,gBAAgB,gBAAgB;CAC3C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,oBAAoB,QAAQ;EAC5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,eAAe,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,aAAa,gBAAgB;CACxC,MAAM;CACN,OAAO;;AAEL,OAAO;EAAE,MAAM;EAAQ,SAAS,KAAA;CAAU,EAC5C;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,UAAU,gBAAgB;EAChC,IAAI,YAAY,QACd,aAAa,EACX,OACC,YAAY,WACT,IAAI,IAAI,MAAM,kBAAkB,IAChC,IAAI,IAAI,MAAM,kBAAkB,GACpC,MAAM,UAAU,CAClB;EAEF,MAAM,MAAM,gBAA+B,EAAE,OAAO,MAAM,SAAS,GAAG,EAAE;EAExE,gBAAgB,EAAE,IAAI,CAAC;EACvB,MAAM,KAAK,IAAwB,IAAI;EACvC,eAAe,KAAK,UAAU,IAAI,MAAM,KAAK;EAC7C,aAAa,EACX,OACA;GAAE,GAAG,IAAI,IAAI,MAAM,YAAY,IAAI,KAAK;GAA8B,KAAK;EAAG,GAC9E,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,sBAAsB,gBAAgB;CACjD,MAAM;CACN,OAAO,EACL,OAAO;EAAE,MAAM;EAAQ,UAAU;CAAK,EACxC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,SAAS,gBAAkC,EAAE,OAAO,MAAM,MAAM,EAAE;EACxE,mBAAmB,EAAE,OAAO,CAAC;EAC7B,aAAa,EACX,OACA,IAAI,IAAI,MAAM,qBAAqB,OAAO,KAAK,GAC/C,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,cAAc,gBAAgB;CACzC,MAAM;CACN,OAAO;;EAEL,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;;EAEtC,SAAS;GAAE,MAAM,CAAC,QAAQ,MAAM;GAAgC,SAAS,KAAA;EAAU;CACrF;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,gBAAgB;EAE5B,MAAM,SAAS,2BAA2B;EAC1C,aAAa,EACX,OACA,IAAI,IAAI,MAAM,aAAa;GACzB,OAAO,MAAM;GACb,KAAK,QAAQ,IAAI,MAAM;GACvB,SAAS,MAAM,WAAW,OAAO,KAAA,IAAY,OAAO,MAAM,OAAO;EACnE,CAAC,GACD,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,0BAA0B,gBAAgB;CACrD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,aAAa,EACX,QACA,IAAI,IAAI,MAAM,yBAAyB,GACvC,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,0BAA0B,gBAAgB;CACrD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,EAAE,QAAQ,mBAAmB;EACnC,aAAa,EACX,QACA,IAAI,IAAI,MAAM,yBAAyB,IAAI,KAAK,GAChD,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,EAAE,WAAW,sBAAsB;EACzC,aAAa,EACX,QACA,IAAI,IAAI,MAAM,oBAAoB,OAAO,KAAK,GAC9C,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,uBAAuB,gBAAgB;CAClD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,EAAE,QAAQ,mBAAmB;EACnC,aAAa,EACX,QACA,IAAI,IAAI,MAAM,sBAAsB,IAAI,KAAK,GAC7C,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CACN,OAAO;;AAEL,OAAO;EAAE,MAAM;EAAQ,UAAU;CAAK,EACxC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,gBAAgB;EAC5B,MAAM,MAAM,gBAA+B,EAAE,OAAO,MAAM,MAAM,EAAE;EAElE,aAAa,EACX,OACA,IAAI,IAAI,MAAM,oBAAoB,IAAI,KAAK,GAC3C,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACnG;AACF,CAAC;AAED,MAAa,sBAAsB,gBAAgB;CACjD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,qBAAqB,GAA8B,MAAM,UAAU,CAAC;CAC1G;AACF,CAAC"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.ts"],"sourcesContent":["import type {\n TableApi,\n TableColumnDef,\n TableColumnKind,\n TableColumnPreference,\n TableColumnProps,\n TableRowDef,\n TableRowProps,\n TableSchema,\n TableSelection,\n TableSelectionMode,\n TableSortDescriptor,\n} from '@xihan-ui/headless'\nimport type { Direction, Size } from '@xihan-ui/kernel'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TableContext } from './use-table'\nimport { computed, defineComponent, Fragment, h, mergeProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport {\n provideTable,\n provideTableColumn,\n provideTableRow,\n provideTableSection,\n useOptionalTableRowContext,\n useTableColumnContext,\n useTableContext,\n useTableRowContext,\n useTableSection,\n} from './context'\nimport { useTable } from './use-table'\n\ntype TableProps = TableSchema['props']\n\n/** 本行持有焦点时,value 变更重报焦点行,卸载时上报表体失焦 */\nfunction reportRowFocus(ctx: TableContext, el: Ref<HTMLElement | null>, value: () => string): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'ROW.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整张表一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本行当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'TABLE.BLUR' })\n })\n}\n\n/** 默认插槽的载荷:可见行与排序、选中、展开三态,以及逐行查询与改写它们的句柄。 */\nexport type TableRootSlotProps = Pick<\n TableApi,\n | 'columns'\n | 'columnPreference'\n | 'setColumnHidden'\n | 'moveColumn'\n | 'setColumnWidth'\n | 'setColumnPreference'\n | 'rowNumber'\n | 'visibleRows'\n | 'sort'\n | 'selection'\n | 'selectionState'\n | 'expandedValue'\n | 'focusedRow'\n | 'empty'\n | 'loading'\n | 'isSelected'\n | 'isExpanded'\n | 'sortDirection'\n | 'sortPriority'\n | 'toggleSort'\n | 'selectRow'\n | 'toggleSelectAll'\n | 'toggleExpandRow'\n | 'rowReorderDisabledReason'\n>\n\nexport const XhTableRoot = defineComponent({\n name: 'XhTableRoot',\n // 有机器侧兜底的 prop 一律 default: undefined,缺省值由 connect 与机器决定\n props: {\n columns: { type: Array as PropType<TableColumnDef[]>, default: undefined },\n rows: { type: Array as PropType<TableRowDef[]>, default: undefined },\n sort: { type: Array as PropType<TableSortDescriptor[]>, default: undefined },\n defaultSort: { type: Array as PropType<TableSortDescriptor[]>, default: undefined },\n selection: { type: [Array, String] as PropType<TableSelection>, default: undefined },\n defaultSelection: { type: [Array, String] as PropType<TableSelection>, default: undefined },\n selectionMode: { type: String as PropType<TableSelectionMode>, default: undefined },\n /** 要哪几列前缀列(序号 / 多选 / 展开),按给定顺序插在最前面并占住列号。 */\n prefixColumns: { type: Array as PropType<TableColumnKind[]>, default: undefined },\n /** 当前页码与每页条数:只用来算序号,不参与切片。 */\n /** 列偏好:给定即受控。持久化归使用者,库只负责把它算进生效列。 */\n columnPreference: { type: Object as PropType<TableColumnPreference>, default: undefined },\n defaultColumnPreference: { type: Object as PropType<TableColumnPreference>, default: undefined },\n page: { type: Number, default: undefined },\n pageSize: { type: Number, default: undefined },\n expanded: { type: Array as PropType<string[]>, default: undefined },\n defaultExpanded: { type: Array as PropType<string[]>, default: undefined },\n loading: Boolean,\n empty: { type: Boolean, default: undefined },\n stickyHeader: Boolean,\n striped: Boolean,\n borderless: Boolean,\n ruled: Boolean,\n footer: Boolean,\n /** 行可以拖着换位。整行都是拖动源,不另出把手。 */\n rowReorderable: Boolean,\n /** 这一次搬家许不许。收到的是折算好的落点(搬到哪个父下面的第几位)。不给即都许。 */\n allowRowDrop: { type: Function as PropType<TableProps['allowRowDrop']>, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n translations: { type: Object as PropType<TableProps['translations']>, default: undefined },\n },\n // *-change 携带 { value },update:* 携带裸值以支持 v-model\n emits: {\n 'column-preference-change': (_details: { value: TableColumnPreference }) => true,\n 'update:columnPreference': (_value: TableColumnPreference) => true,\n 'sort-change': (_details: PayloadOf<TableProps, 'onSortChange'>) => true,\n 'update:sort': (_sort: PayloadOf<TableProps, 'onSortChange'>['value']) => true,\n 'selection-change': (_details: PayloadOf<TableProps, 'onSelectionChange'>) => true,\n 'update:selection': (_selection: PayloadOf<TableProps, 'onSelectionChange'>['value']) => true,\n 'expanded-change': (_details: PayloadOf<TableProps, 'onExpandedChange'>) => true,\n 'update:expanded': (_expanded: PayloadOf<TableProps, 'onExpandedChange'>['value']) => true,\n // 行换位是通知,行序与父子归属的真源在使用者的数据里,故没有配对的 update:*\n 'row-move': (_details: PayloadOf<TableProps, 'onRowMove'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TableRootSlotProps) => VNode[]\n }>,\n // Fragment 根接不住自动透传:Vue 只在单个元素根上做这件事。\n // 作者写在 XhTableRoot 上的 class / aria-* / 监听器都要自己合到 root 那个 div 上\n inheritAttrs: false,\n setup(props, { slots, emit, attrs }) {\n const onColumnPreferenceChange: TableProps['onColumnPreferenceChange'] = (details) => {\n emit('column-preference-change', details)\n emit('update:columnPreference', details.value)\n }\n const onSortChange: TableProps['onSortChange'] = (details) => {\n emit('sort-change', details)\n emit('update:sort', details.value)\n }\n const onSelectionChange: TableProps['onSelectionChange'] = (details) => {\n emit('selection-change', details)\n emit('update:selection', details.value)\n }\n const onExpandedChange: TableProps['onExpandedChange'] = (details) => {\n emit('expanded-change', details)\n emit('update:expanded', details.value)\n }\n const onRowMove: TableProps['onRowMove'] = (details) => {\n emit('row-move', details)\n }\n const ctx = useTable(withXhConfig('table', props) as TableProps, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange, onRowMove)\n provideTable(ctx)\n // 播报区由根组件自己渲,作者插不进 root 的兄弟位。它不能进 root:\n // root 是 role=grid,塞活动区域进去是 aria-required-children(critical)\n return () => h(Fragment, [\n h('div', mergeProps(ctx.api.value.getRootProps() as Record<string, unknown>, attrs), slots.default?.({\n columns: ctx.api.value.columns,\n columnPreference: ctx.api.value.columnPreference,\n setColumnHidden: ctx.api.value.setColumnHidden,\n moveColumn: ctx.api.value.moveColumn,\n setColumnWidth: ctx.api.value.setColumnWidth,\n setColumnPreference: ctx.api.value.setColumnPreference,\n rowNumber: ctx.api.value.rowNumber,\n visibleRows: ctx.api.value.visibleRows,\n sort: ctx.api.value.sort,\n selection: ctx.api.value.selection,\n selectionState: ctx.api.value.selectionState,\n expandedValue: ctx.api.value.expandedValue,\n focusedRow: ctx.api.value.focusedRow,\n empty: ctx.api.value.empty,\n loading: ctx.api.value.loading,\n isSelected: ctx.api.value.isSelected,\n isExpanded: ctx.api.value.isExpanded,\n sortDirection: ctx.api.value.sortDirection,\n sortPriority: ctx.api.value.sortPriority,\n toggleSort: ctx.api.value.toggleSort,\n selectRow: ctx.api.value.selectRow,\n toggleSelectAll: ctx.api.value.toggleSelectAll,\n toggleExpandRow: ctx.api.value.toggleExpandRow,\n rowReorderDisabledReason: ctx.api.value.rowReorderDisabledReason,\n })),\n h(\n 'div',\n ctx.api.value.getLiveRegionProps() as Record<string, unknown>,\n ctx.service.context.get('announcement'),\n ),\n ])\n },\n})\n\nexport const XhTableCaption = defineComponent({\n name: 'XhTableCaption',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getCaptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableHeader = defineComponent({\n name: 'XhTableHeader',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('header')\n return () => h('div', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableBody = defineComponent({\n name: 'XhTableBody',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('body')\n // 键盘与 roving 的兜底 Tab 位落在表体上,不在 root 上\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableFooter = defineComponent({\n name: 'XhTableFooter',\n setup(_, { slots }) {\n const ctx = useTableContext()\n provideTableSection('footer')\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableRow = defineComponent({\n name: 'XhTableRow',\n props: {\n /** 行 id:数据行必给,表头行与脚注行省略。 */\n value: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const section = useTableSection()\n if (section !== 'body') {\n return () => h(\n 'div',\n (section === 'header'\n ? ctx.api.value.getHeaderRowProps()\n : ctx.api.value.getFooterRowProps()) as Record<string, unknown>,\n slots.default?.(),\n )\n }\n const row = computed<TableRowProps>(() => ({ value: props.value ?? '' }))\n // 供行内的把手与单元格读取行 id\n provideTableRow({ row })\n const el = ref<HTMLElement | null>(null)\n reportRowFocus(ctx, el, () => row.value.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getRowProps(row.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableColumnHeader = defineComponent({\n name: 'XhTableColumnHeader',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const column = computed<TableColumnProps>(() => ({ value: props.value }))\n provideTableColumn({ column })\n return () => h(\n 'div',\n ctx.api.value.getColumnHeaderProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableCell = defineComponent({\n name: 'XhTableCell',\n props: {\n /** 列 id。 */\n value: { type: String, required: true },\n /** 跨列数,从 value 那一列往后算。 */\n colspan: { type: [String, Number] as PropType<string | number>, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n // 行上下文可选:脚注单元格不属于任何数据行\n const rowCtx = useOptionalTableRowContext()\n return () => h(\n 'div',\n ctx.api.value.getCellProps({\n value: props.value,\n row: rowCtx?.row.value.value,\n colSpan: props.colspan == null ? undefined : Number(props.colspan),\n }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableSelectAllTrigger = defineComponent({\n name: 'XhTableSelectAllTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h(\n 'span',\n ctx.api.value.getSelectAllTriggerProps() as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableRowSelectTrigger = defineComponent({\n name: 'XhTableRowSelectTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { row } = useTableRowContext()\n return () => h(\n 'span',\n ctx.api.value.getRowSelectTriggerProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableSortTrigger = defineComponent({\n name: 'XhTableSortTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { column } = useTableColumnContext()\n return () => h(\n 'span',\n ctx.api.value.getSortTriggerProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 列宽把手。放在表头格里,只有 resizable 的列渲它。 */\nexport const XhTableColumnResizeTrigger = defineComponent({\n name: 'XhTableColumnResizeTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { column } = useTableColumnContext()\n return () => h(\n 'span',\n ctx.api.value.getColumnResizeTriggerProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 列拖拽把手。放在表头格里,只有可拖的列渲它。 */\nexport const XhTableColumnDragTrigger = defineComponent({\n name: 'XhTableColumnDragTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { column } = useTableColumnContext()\n return () => h(\n 'span',\n ctx.api.value.getColumnDragTriggerProps(column.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/**\n * 行拖拽把手。放在数据行里,自带 touch-action: none,按下即拖,不等激活距离。\n * 对读屏隐藏、也不占 Tab 位;键盘换位由表体上的 Alt + 上下键承担,\n * 树形表下另有 Alt + 左右键改缩进层级。\n * 整行起手那一路照旧可用,把手是叠加的第二个入口。\n */\nexport const XhTableRowDragTrigger = defineComponent({\n name: 'XhTableRowDragTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { row } = useTableRowContext()\n return () => h(\n 'span',\n ctx.api.value.getRowDragTriggerProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableExpandTrigger = defineComponent({\n name: 'XhTableExpandTrigger',\n setup(_, { slots }) {\n const ctx = useTableContext()\n const { row } = useTableRowContext()\n return () => h(\n 'span',\n ctx.api.value.getExpandTriggerProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableExpandedRow = defineComponent({\n name: 'XhTableExpandedRow',\n props: {\n /** 所属数据行的 id。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTableContext()\n const row = computed<TableRowProps>(() => ({ value: props.value }))\n // 不 provide 行上下文;收起只加 hidden,不卸载内部节点\n return () => h(\n 'div',\n ctx.api.value.getExpandedRowProps(row.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTableEmpty = defineComponent({\n name: 'XhTableEmpty',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTableLoadingState = defineComponent({\n name: 'XhTableLoadingState',\n setup(_, { slots }) {\n const ctx = useTableContext()\n return () => h('div', ctx.api.value.getLoadingStateProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ interface TableContext {
7
7
  /** 机器实例,供部件上报 DOM 侧的事实(如行卸载带走了焦点)。 */
8
8
  service: Service<TableSchema>;
9
9
  }
10
- declare function useTable(props: TableSchema['props'], onSortChange?: TableSchema['props']['onSortChange'], onSelectionChange?: TableSchema['props']['onSelectionChange'], onExpandedChange?: TableSchema['props']['onExpandedChange'], onColumnPreferenceChange?: TableSchema['props']['onColumnPreferenceChange']): TableContext;
10
+ declare function useTable(props: TableSchema['props'], onSortChange?: TableSchema['props']['onSortChange'], onSelectionChange?: TableSchema['props']['onSelectionChange'], onExpandedChange?: TableSchema['props']['onExpandedChange'], onColumnPreferenceChange?: TableSchema['props']['onColumnPreferenceChange'], onRowMove?: TableSchema['props']['onRowMove']): TableContext;
11
11
  //#endregion
12
12
  export { TableContext, useTable };
13
13
  //# sourceMappingURL=use-table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-table.d.ts","names":[],"sources":["../../../src/components/table/use-table.ts"],"mappings":";;;;UAUiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;iBAGH,SACd,OAAO,sBACP,eAAe,sCACf,oBAAoB,2CACpB,mBAAmB,0CACnB,2BAA2B,mDAC1B"}
1
+ {"version":3,"file":"use-table.d.ts","names":[],"sources":["../../../src/components/table/use-table.ts"],"mappings":";;;;UAUiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;iBAGH,SACd,OAAO,sBACP,eAAe,sCACf,oBAAoB,2CACpB,mBAAmB,0CACnB,2BAA2B,kDAC3B,YAAY,oCACX"}
@@ -5,13 +5,14 @@ import { computed } from "vue";
5
5
  import { connectTable, tableMachine } from "@xihan-ui/headless";
6
6
  import { createScope } from "@xihan-ui/kernel";
7
7
  //#region src/components/table/use-table.ts
8
- function useTable(props, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange) {
8
+ function useTable(props, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange, onRowMove) {
9
9
  const service = useMachine(tableMachine, () => ({
10
10
  ...props,
11
11
  onSortChange,
12
12
  onSelectionChange,
13
13
  onExpandedChange,
14
- onColumnPreferenceChange
14
+ onColumnPreferenceChange,
15
+ onRowMove
15
16
  }), createScope(null, createVueIdGenerator()));
16
17
  return {
17
18
  api: computed(() => connectTable(service, vueNormalize)),
@@ -1 +1 @@
1
- {"version":3,"file":"use-table.js","names":[],"sources":["../../../src/components/table/use-table.ts"],"sourcesContent":["import type { TableApi, TableSchema } from '@xihan-ui/headless'\nimport type { Service } from '@xihan-ui/machine'\nimport type { ComputedRef } from 'vue'\nimport { connectTable, tableMachine } from '@xihan-ui/headless'\nimport { createScope } from '@xihan-ui/kernel'\nimport { computed } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TableContext {\n api: ComputedRef<TableApi>\n /** 机器实例,供部件上报 DOM 侧的事实(如行卸载带走了焦点)。 */\n service: Service<TableSchema>\n}\n\nexport function useTable(\n props: TableSchema['props'],\n onSortChange?: TableSchema['props']['onSortChange'],\n onSelectionChange?: TableSchema['props']['onSelectionChange'],\n onExpandedChange?: TableSchema['props']['onExpandedChange'],\n onColumnPreferenceChange?: TableSchema['props']['onColumnPreferenceChange'],\n): TableContext {\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(\n tableMachine,\n () => ({ ...props, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange }),\n scope,\n )\n const api = computed(() => connectTable(service, vueNormalize))\n return { api, service }\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,SACd,OACA,cACA,mBACA,kBACA,0BACc;CAGd,MAAM,UAAU,WACd,qBACO;EAAE,GAAG;EAAO;EAAc;EAAmB;EAAkB;CAAyB,IAHnF,YAAY,MADZ,qBACsB,CAI9B,CACN;CAEA,OAAO;EAAE,KADG,eAAe,aAAa,SAAS,YAAY,CAClD;EAAG;CAAQ;AACxB"}
1
+ {"version":3,"file":"use-table.js","names":[],"sources":["../../../src/components/table/use-table.ts"],"sourcesContent":["import type { TableApi, TableSchema } from '@xihan-ui/headless'\nimport type { Service } from '@xihan-ui/machine'\nimport type { ComputedRef } from 'vue'\nimport { connectTable, tableMachine } from '@xihan-ui/headless'\nimport { createScope } from '@xihan-ui/kernel'\nimport { computed } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TableContext {\n api: ComputedRef<TableApi>\n /** 机器实例,供部件上报 DOM 侧的事实(如行卸载带走了焦点)。 */\n service: Service<TableSchema>\n}\n\nexport function useTable(\n props: TableSchema['props'],\n onSortChange?: TableSchema['props']['onSortChange'],\n onSelectionChange?: TableSchema['props']['onSelectionChange'],\n onExpandedChange?: TableSchema['props']['onExpandedChange'],\n onColumnPreferenceChange?: TableSchema['props']['onColumnPreferenceChange'],\n onRowMove?: TableSchema['props']['onRowMove'],\n): TableContext {\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(\n tableMachine,\n () => ({ ...props, onSortChange, onSelectionChange, onExpandedChange, onColumnPreferenceChange, onRowMove }),\n scope,\n )\n const api = computed(() => connectTable(service, vueNormalize))\n return { api, service }\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,SACd,OACA,cACA,mBACA,kBACA,0BACA,WACc;CAGd,MAAM,UAAU,WACd,qBACO;EAAE,GAAG;EAAO;EAAc;EAAmB;EAAkB;EAA0B;CAAU,IAH9F,YAAY,MADZ,qBACsB,CAI9B,CACN;CAEA,OAAO;EAAE,KADG,eAAe,aAAa,SAAS,YAAY,CAClD;EAAG;CAAQ;AACxB"}
@@ -45,11 +45,18 @@ declare const XhTabsRoot: import("vue").DefineComponent<import("vue").ExtractPro
45
45
  type: PropType<Size>;
46
46
  default: undefined;
47
47
  };
48
+ /** 标签可以拖着换位。整个标签都是拖动源,不另出把手。 */
49
+ reorderable: BooleanConstructor;
50
+ translations: {
51
+ type: PropType<TabsProps["translations"]>;
52
+ default: undefined;
53
+ };
48
54
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
49
55
  [key: string]: any;
50
56
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
51
57
  'value-change': (_details: PayloadOf<TabsProps, "onValueChange">) => true;
52
58
  'update:value': (_value: PayloadOf<TabsProps, "onValueChange">["value"]) => true;
59
+ 'tab-move': (_details: PayloadOf<TabsProps, "onTabMove">) => true;
53
60
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
54
61
  collection: {
55
62
  type: PropType<TabsNode[]>;
@@ -91,9 +98,16 @@ declare const XhTabsRoot: import("vue").DefineComponent<import("vue").ExtractPro
91
98
  type: PropType<Size>;
92
99
  default: undefined;
93
100
  };
101
+ /** 标签可以拖着换位。整个标签都是拖动源,不另出把手。 */
102
+ reorderable: BooleanConstructor;
103
+ translations: {
104
+ type: PropType<TabsProps["translations"]>;
105
+ default: undefined;
106
+ };
94
107
  }>> & Readonly<{
95
108
  "onValue-change"?: ((_details: import("@xihan-ui/headless").TabsValueChangeDetails) => any) | undefined;
96
109
  "onUpdate:value"?: ((_value: string | null) => any) | undefined;
110
+ "onTab-move"?: ((_details: import("@xihan-ui/headless").TabsMoveDetails) => any) | undefined;
97
111
  }>, {
98
112
  value: string | null;
99
113
  collection: TabsNode[];
@@ -102,13 +116,24 @@ declare const XhTabsRoot: import("vue").DefineComponent<import("vue").ExtractPro
102
116
  dir: Direction;
103
117
  tone: Tone;
104
118
  size: Size;
105
- variant: TabsVariant;
119
+ translations: Partial<import("@xihan-ui/headless").TabsTranslations> | undefined;
106
120
  loop: boolean;
121
+ variant: TabsVariant;
107
122
  activationMode: TabsActivationMode;
123
+ reorderable: boolean;
108
124
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
109
125
  declare const XhTabsList: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
110
126
  [key: string]: any;
111
127
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
128
+ /**
129
+ * 拖动过程的读屏播报区,视觉上不可见。
130
+ *
131
+ * 放在 root 里、与 list 部件平级。它必须在拖动开始**之前**就在 DOM 上——
132
+ * 读屏不播报后插入的节点,等到拖起才渲出来等于没有。
133
+ */
134
+ declare const XhTabsLiveRegion: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
135
+ [key: string]: any;
136
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
112
137
  declare const XhTabsTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
113
138
  value: {
114
139
  type: StringConstructor;
@@ -132,6 +157,26 @@ declare const XhTabsTrigger: import("vue").DefineComponent<import("vue").Extract
132
157
  }>> & Readonly<{}>, {
133
158
  disabled: boolean;
134
159
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
160
+ /**
161
+ * 标签拖拽把手。放在标签里,自带 touch-action: none,按下即拖,不等激活距离。
162
+ * 对读屏隐藏、也不占 Tab 位;键盘换位由标签带上的 Alt + 方向键承担。
163
+ * 整个标签起手那一路照旧可用,把手是叠加的第二个入口。
164
+ */
165
+ declare const XhTabsTabDragTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
166
+ /** 所属标签的 value。 */
167
+ value: {
168
+ type: StringConstructor;
169
+ required: true;
170
+ };
171
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
172
+ [key: string]: any;
173
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
174
+ /** 所属标签的 value。 */
175
+ value: {
176
+ type: StringConstructor;
177
+ required: true;
178
+ };
179
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
135
180
  declare const XhTabsContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
136
181
  value: {
137
182
  type: StringConstructor;
@@ -146,5 +191,5 @@ declare const XhTabsContent: import("vue").DefineComponent<import("vue").Extract
146
191
  };
147
192
  }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
148
193
  //#endregion
149
- export { XhTabsContent, XhTabsList, XhTabsRoot, XhTabsTrigger };
194
+ export { XhTabsContent, XhTabsList, XhTabsLiveRegion, XhTabsRoot, XhTabsTabDragTrigger, XhTabsTrigger };
150
195
  //# sourceMappingURL=tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","names":[],"sources":["../../../src/components/tabs/tabs.ts"],"mappings":";;;;;KASK,YAAY;cAEJ,0BAAU,8BAAA;;IAIU,MAAA,SAAS;;;;IACb,MAAA;;;;IACO,MAAA;;;;IACD,MAAA,SAAS;;;;IACjB,MAAA,SAAS;;;;IACE,MAAA,SAAS;;;;;;;;IAEhB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;EAIN,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IAdN,MAAA,SAAS;;;;IACb,MAAA;;;;IACO,MAAA;;;;IACD,MAAA,SAAS;;;;IACjB,MAAA,SAAS;;;;IACE,MAAA,SAAS;;;;;;;;IAEhB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;;;;;;;;;;;;qCAuBnC;cAEW,0BAAU,0BAAA,oBAAA,4BAAA;;8BAMrB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;;;;;;;;;;;qCAiCxB;cAEW,6BAAa,8BAAA;;;;;;;;;;;;MAaxB,oDAAA"}
1
+ {"version":3,"file":"tabs.d.ts","names":[],"sources":["../../../src/components/tabs/tabs.ts"],"mappings":";;;;;KAUK,YAAY;cAEJ,0BAAU,8BAAA;;IAIU,MAAA,SAAS;;;;IACb,MAAA;;;;IACO,MAAA;;;;IACD,MAAA,SAAS;;;;IACjB,MAAA,SAAS;;;;IACE,MAAA,SAAS;;;;;;;;IAEhB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;IAGD,MAAA,SAAS;;;;;;EAId,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EAEZ,aAAA,UAAA,UAAU;;;IAnBJ,MAAA,SAAS;;;;IACb,MAAA;;;;IACO,MAAA;;;;IACD,MAAA,SAAS;;;;IACjB,MAAA,SAAS;;;;IACE,MAAA,SAAS;;;;;;;;IAEhB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;IAGD,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;qCA6B3C;cAEW,0BAAU,0BAAA,oBAAA,4BAAA;;8BAMrB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;;;;;;cAQW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAU3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;;;;;;;;;;;qCAiCxB;;;;;;cAOW,oCAAoB,8BAAA;;;;;;;;;;;;;;MAc/B,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;MAaxB,oDAAA"}
@@ -1,3 +1,4 @@
1
+ import { withXhConfig } from "../../config/config.js";
1
2
  import { slotPaints } from "../../runtime/slot-content.js";
2
3
  import { provideTabs, useTabsContext } from "./context.js";
3
4
  import { useTabs } from "./use-tabs.js";
@@ -45,18 +46,28 @@ const XhTabsRoot = defineComponent({
45
46
  size: {
46
47
  type: String,
47
48
  default: void 0
49
+ },
50
+ /** 标签可以拖着换位。整个标签都是拖动源,不另出把手。 */
51
+ reorderable: Boolean,
52
+ translations: {
53
+ type: Object,
54
+ default: void 0
48
55
  }
49
56
  },
50
57
  emits: {
51
58
  "value-change": (_details) => true,
52
- "update:value": (_value) => true
59
+ "update:value": (_value) => true,
60
+ "tab-move": (_details) => true
53
61
  },
54
62
  setup(props, { slots, emit }) {
55
63
  const notify = (details) => {
56
64
  emit("value-change", details);
57
65
  emit("update:value", details.value);
58
66
  };
59
- const ctx = useTabs(props, notify);
67
+ const onTabMove = (details) => {
68
+ emit("tab-move", details);
69
+ };
70
+ const ctx = useTabs(withXhConfig("tabs", props), notify, onTabMove);
60
71
  provideTabs(ctx);
61
72
  return () => {
62
73
  const authored = slots.default?.();
@@ -72,6 +83,19 @@ const XhTabsList = defineComponent({
72
83
  return () => h("div", ctx.api.value.getListProps(), slots.default?.());
73
84
  }
74
85
  });
86
+ /**
87
+ * 拖动过程的读屏播报区,视觉上不可见。
88
+ *
89
+ * 放在 root 里、与 list 部件平级。它必须在拖动开始**之前**就在 DOM 上——
90
+ * 读屏不播报后插入的节点,等到拖起才渲出来等于没有。
91
+ */
92
+ const XhTabsLiveRegion = defineComponent({
93
+ name: "XhTabsLiveRegion",
94
+ setup() {
95
+ const ctx = useTabsContext();
96
+ return () => h("div", ctx.api.value.getLiveRegionProps(), ctx.service.context.get("announcement"));
97
+ }
98
+ });
75
99
  const XhTabsTrigger = defineComponent({
76
100
  name: "XhTabsTrigger",
77
101
  props: {
@@ -109,6 +133,24 @@ const XhTabsTrigger = defineComponent({
109
133
  }, slots.default?.());
110
134
  }
111
135
  });
136
+ /**
137
+ * 标签拖拽把手。放在标签里,自带 touch-action: none,按下即拖,不等激活距离。
138
+ * 对读屏隐藏、也不占 Tab 位;键盘换位由标签带上的 Alt + 方向键承担。
139
+ * 整个标签起手那一路照旧可用,把手是叠加的第二个入口。
140
+ */
141
+ const XhTabsTabDragTrigger = defineComponent({
142
+ name: "XhTabsTabDragTrigger",
143
+ props: {
144
+ /** 所属标签的 value。 */
145
+ value: {
146
+ type: String,
147
+ required: true
148
+ } },
149
+ setup(props, { slots }) {
150
+ const ctx = useTabsContext();
151
+ return () => h("span", ctx.api.value.getTabDragTriggerProps({ value: props.value }), slots.default?.());
152
+ }
153
+ });
112
154
  const XhTabsContent = defineComponent({
113
155
  name: "XhTabsContent",
114
156
  props: { value: {
@@ -135,6 +177,6 @@ function renderDefaultTree(collection, panelSlot) {
135
177
  }, () => panelSlot?.(node) ?? []))];
136
178
  }
137
179
  //#endregion
138
- export { XhTabsContent, XhTabsList, XhTabsRoot, XhTabsTrigger };
180
+ export { XhTabsContent, XhTabsList, XhTabsLiveRegion, XhTabsRoot, XhTabsTabDragTrigger, XhTabsTrigger };
139
181
 
140
182
  //# sourceMappingURL=tabs.js.map