x-next 1.16.0 → 1.17.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 (156) hide show
  1. package/AI_USAGE/catalog.md +3 -2
  2. package/AI_USAGE/components/alert-api.md +1 -1
  3. package/AI_USAGE/components/alert.md +1 -1
  4. package/AI_USAGE/components/bar-chart-api.md +1 -1
  5. package/AI_USAGE/components/bar-chart.md +1 -1
  6. package/AI_USAGE/components/boxicons.md +1 -1
  7. package/AI_USAGE/components/button-api.md +1 -1
  8. package/AI_USAGE/components/button.md +1 -1
  9. package/AI_USAGE/components/charts.md +1 -1
  10. package/AI_USAGE/components/checkbox-api.md +1 -1
  11. package/AI_USAGE/components/checkbox.md +1 -1
  12. package/AI_USAGE/components/color-picker-api.md +1 -1
  13. package/AI_USAGE/components/color-picker.md +1 -1
  14. package/AI_USAGE/components/config-provider-api.md +1 -1
  15. package/AI_USAGE/components/config-provider.md +1 -1
  16. package/AI_USAGE/components/date-picker-api.md +1 -1
  17. package/AI_USAGE/components/date-picker.md +1 -1
  18. package/AI_USAGE/components/dialog-api.md +1 -1
  19. package/AI_USAGE/components/dialog.md +1 -1
  20. package/AI_USAGE/components/draggable-api.md +1 -1
  21. package/AI_USAGE/components/draggable.md +1 -1
  22. package/AI_USAGE/components/drawer-api.md +1 -1
  23. package/AI_USAGE/components/drawer.md +1 -1
  24. package/AI_USAGE/components/dropdown-api.md +1 -1
  25. package/AI_USAGE/components/dropdown.md +1 -1
  26. package/AI_USAGE/components/empty-api.md +1 -1
  27. package/AI_USAGE/components/empty.md +1 -1
  28. package/AI_USAGE/components/finicon.md +1 -1
  29. package/AI_USAGE/components/form-api.md +1 -1
  30. package/AI_USAGE/components/form.md +1 -1
  31. package/AI_USAGE/components/grid-api.md +1 -1
  32. package/AI_USAGE/components/grid.md +1 -1
  33. package/AI_USAGE/components/heatmap-api.md +1 -1
  34. package/AI_USAGE/components/heatmap.md +1 -1
  35. package/AI_USAGE/components/icon-api.md +1 -1
  36. package/AI_USAGE/components/icon.md +1 -1
  37. package/AI_USAGE/components/image-api.md +1 -1
  38. package/AI_USAGE/components/image.md +1 -1
  39. package/AI_USAGE/components/input-api.md +1 -1
  40. package/AI_USAGE/components/input-number-api.md +1 -1
  41. package/AI_USAGE/components/input-number.md +1 -1
  42. package/AI_USAGE/components/input-tag-api.md +1 -1
  43. package/AI_USAGE/components/input-tag.md +1 -1
  44. package/AI_USAGE/components/input.md +1 -1
  45. package/AI_USAGE/components/layout-api.md +1 -1
  46. package/AI_USAGE/components/layout.md +1 -1
  47. package/AI_USAGE/components/line-chart-api.md +1 -1
  48. package/AI_USAGE/components/line-chart.md +1 -1
  49. package/AI_USAGE/components/link-api.md +1 -1
  50. package/AI_USAGE/components/link.md +1 -1
  51. package/AI_USAGE/components/menu-api.md +1 -1
  52. package/AI_USAGE/components/menu.md +1 -1
  53. package/AI_USAGE/components/message-api.md +1 -1
  54. package/AI_USAGE/components/message-box-api.md +1 -1
  55. package/AI_USAGE/components/message-box.md +1 -1
  56. package/AI_USAGE/components/message.md +1 -1
  57. package/AI_USAGE/components/network-api.md +1 -1
  58. package/AI_USAGE/components/network.md +1 -1
  59. package/AI_USAGE/components/notification-api.md +1 -1
  60. package/AI_USAGE/components/notification.md +1 -1
  61. package/AI_USAGE/components/pagination-api.md +1 -1
  62. package/AI_USAGE/components/pagination.md +1 -1
  63. package/AI_USAGE/components/pie-chart-api.md +1 -1
  64. package/AI_USAGE/components/pie-chart.md +1 -1
  65. package/AI_USAGE/components/popconfirm-api.md +1 -1
  66. package/AI_USAGE/components/popconfirm.md +1 -1
  67. package/AI_USAGE/components/popover-api.md +1 -1
  68. package/AI_USAGE/components/popover.md +1 -1
  69. package/AI_USAGE/components/popup-api.md +1 -1
  70. package/AI_USAGE/components/popup.md +1 -1
  71. package/AI_USAGE/components/progress-api.md +1 -1
  72. package/AI_USAGE/components/progress.md +1 -1
  73. package/AI_USAGE/components/radio-api.md +1 -1
  74. package/AI_USAGE/components/radio.md +1 -1
  75. package/AI_USAGE/components/rate-api.md +1 -1
  76. package/AI_USAGE/components/rate.md +1 -1
  77. package/AI_USAGE/components/resize-box-api.md +1 -1
  78. package/AI_USAGE/components/resize-box.md +1 -1
  79. package/AI_USAGE/components/scrollbar-api.md +1 -1
  80. package/AI_USAGE/components/scrollbar.md +1 -1
  81. package/AI_USAGE/components/select-api.md +1 -1
  82. package/AI_USAGE/components/select.md +1 -1
  83. package/AI_USAGE/components/skeleton-api.md +1 -1
  84. package/AI_USAGE/components/skeleton.md +1 -1
  85. package/AI_USAGE/components/slider-api.md +1 -1
  86. package/AI_USAGE/components/slider.md +1 -1
  87. package/AI_USAGE/components/space-api.md +1 -1
  88. package/AI_USAGE/components/space.md +1 -1
  89. package/AI_USAGE/components/spin-api.md +1 -1
  90. package/AI_USAGE/components/spin.md +1 -1
  91. package/AI_USAGE/components/steps-api.md +1 -1
  92. package/AI_USAGE/components/steps.md +1 -1
  93. package/AI_USAGE/components/switch-api.md +1 -1
  94. package/AI_USAGE/components/switch.md +1 -1
  95. package/AI_USAGE/components/table-api.md +1 -1
  96. package/AI_USAGE/components/table.md +1 -1
  97. package/AI_USAGE/components/tabs-api.md +1 -1
  98. package/AI_USAGE/components/tabs.md +1 -1
  99. package/AI_USAGE/components/tag-api.md +1 -1
  100. package/AI_USAGE/components/tag.md +1 -1
  101. package/AI_USAGE/components/textarea-api.md +1 -1
  102. package/AI_USAGE/components/textarea.md +1 -1
  103. package/AI_USAGE/components/time-picker-api.md +1 -1
  104. package/AI_USAGE/components/time-picker.md +1 -1
  105. package/AI_USAGE/components/time-range-selector-api.md +1 -1
  106. package/AI_USAGE/components/time-range-selector.md +1 -1
  107. package/AI_USAGE/components/timeline-api.md +1 -1
  108. package/AI_USAGE/components/timeline.md +1 -1
  109. package/AI_USAGE/components/tooltip-api.md +1 -1
  110. package/AI_USAGE/components/tooltip.md +1 -1
  111. package/AI_USAGE/components/transfer-api.md +165 -0
  112. package/AI_USAGE/components/transfer.md +515 -0
  113. package/AI_USAGE/components/tree-select-api.md +1 -1
  114. package/AI_USAGE/components/tree-select.md +1 -1
  115. package/AI_USAGE/components/trend-chart-api.md +1 -1
  116. package/AI_USAGE/components/trend-chart.md +1 -1
  117. package/AI_USAGE/components/trigger-api.md +1 -1
  118. package/AI_USAGE/components/trigger.md +1 -1
  119. package/AI_USAGE/components/upload-api.md +1 -1
  120. package/AI_USAGE/components/upload.md +1 -1
  121. package/AI_USAGE/components/watermark-api.md +1 -1
  122. package/AI_USAGE/components/watermark.md +1 -1
  123. package/AI_USAGE/core.md +1 -1
  124. package/AI_USAGE/index.md +3 -2
  125. package/AI_USAGE/recipes/form-on-demand.md +1 -1
  126. package/AI_USAGE.md +663 -3
  127. package/CHANGELOG.md +32 -0
  128. package/dist/components/index.d.ts +1 -0
  129. package/dist/components/transfer/Transfer.d.ts +211 -0
  130. package/dist/components/transfer/index.d.ts +299 -0
  131. package/dist/components/transfer/interface.d.ts +80 -0
  132. package/dist/components/transfer/transfer-panel.d.ts +82 -0
  133. package/dist/components/transfer/utils.d.ts +5 -0
  134. package/dist/es/_styles/palette-aliases.js +1 -1
  135. package/dist/es/components/index.js +47 -45
  136. package/dist/es/components/transfer/Transfer.js +267 -0
  137. package/dist/es/components/transfer/index.js +7 -0
  138. package/dist/es/components/transfer/transfer-panel.js +251 -0
  139. package/dist/es/components/transfer/utils.js +9 -0
  140. package/dist/es/components/tree-select/TreeNode.vue2.js +27 -26
  141. package/dist/es/index.js +46 -44
  142. package/dist/es/locale/en-US.js +16 -0
  143. package/dist/es/locale/zh-CN.js +16 -0
  144. package/dist/es/style.css +1 -1
  145. package/dist/index.cjs +3 -3
  146. package/dist/index.umd.js +3 -3
  147. package/dist/locale/interface.d.ts +16 -0
  148. package/dist/style/base.css +1 -1
  149. package/dist/style/dependencies.json +14 -0
  150. package/dist/style/transfer.css +1 -0
  151. package/dist/style/transfer.js +12 -0
  152. package/dist/style/tree-select.css +1 -1
  153. package/dist/style.css +1 -1
  154. package/dist/types.d.ts +1 -0
  155. package/package.json +3 -1
  156. package/volar.d.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,38 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.17.0] - 2026-10-13
8
+
9
+ ### 新增
10
+
11
+ - 新增 `Transfer` 数据穿梭框:双向移动、目标值与临时勾选值独立受控 / 非受控、数字和字符串键、目标追加排序、搜索过滤与当前结果 / 页内全选。
12
+ - 支持禁用、加载、错误状态、单向移除、简单模式、独立分页、虚拟滚动和异步数据;自定义选项、列表、标题、操作图标与页脚。
13
+ - 接入 Form 校验和重置、原生键盘交互与列表方向键定位;补充公开类型、Volar、locale、按需样式入口 `x-next/style/transfer` 和独立 AI 手册。
14
+ - Transfer 文档提供 12 个可交互 live demo 及对应完整 Vue SFC,覆盖受控勾选、搜索、状态、插槽、分页、大数据、异步数据和 Form 组合。
15
+
16
+ ### 修复
17
+
18
+ - Transfer 标题全选框与列表复选框、文字保持水平对齐,原生点击区域与可见方框重合。
19
+ - Transfer 移除鼠标点击触发的冗余整行蓝框,保留 Checkbox / Button 和列表容器的键盘焦点提示。
20
+
21
+ ### 工程与验证
22
+
23
+ - 新增 Transfer 行为单测、文档浏览器回归和实际 tarball 生产消费检查,验证按需样式、严格类型、对齐、鼠标与键盘焦点及移动交互。
24
+ - 将 Transfer 纳入覆盖率门禁,同步生成 1.17.0 AI 手册和 API 参考。
25
+ - 量化 Transfer 中英文文案对共享语言包的体积影响,并按既有策略调整 Input 消费预算;保留独立组件与图标包泄漏检查。
26
+
27
+ ## [1.16.1] - 2026-10-13
28
+
29
+ ### 修复
30
+
31
+ - TreeSelect 下拉列表增加左右留白,统一普通与虚拟列表的节点内边距,调整文字间距、节点与面板圆角,并同步连接线和展开箭头的对齐。
32
+ - TreeSelect 多选 / 勾选模式移除连续的选中背景,保留蓝色文字与勾选框;单选使用更淡且适配亮暗主题的选中背景,已选节点继续显示悬停与键盘定位反馈。
33
+
34
+ ### 工程与验证
35
+
36
+ - 同步主题生成产物与 1.16.1 AI 手册,完成构建、完整质量门禁和打包后的 TreeSelect 生产浏览器消费验证。
37
+ - 修正编译类回归的独立时限与 Message 关闭回归的动画等待,减少慢机误报,保留全部断言与覆盖率要求。
38
+
7
39
  ## [1.16.0] - 2026-10-12
8
40
 
9
41
  ### 修复
@@ -51,6 +51,7 @@ export * from './timeline';
51
51
  export * from './timeline-item';
52
52
  export * from './tooltip';
53
53
  export * from './tree-select';
54
+ export * from './transfer';
54
55
  export * from './trend-chart';
55
56
  export * from './trigger';
56
57
  export * from './upload';
@@ -0,0 +1,211 @@
1
+ import { CSSProperties, PropType, SlotsType } from 'vue';
2
+ import { VirtualListProps } from '../virtual-list-v2/interface';
3
+ import { TransferItem, TransferValue, TransferType, TransferSlots, TransferPagination } from './interface';
4
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
5
+ /** @zh 穿梭框数据,value 在数据内唯一 @en Transfer data with unique values */
6
+ data: {
7
+ type: PropType<TransferItem[]>;
8
+ default: () => never[];
9
+ };
10
+ /** @zh 目标列表的值 @en Target values @vModel */
11
+ modelValue: {
12
+ type: PropType<TransferValue[]>;
13
+ default: undefined;
14
+ };
15
+ /** @zh 非受控目标默认值 @en Default target values */
16
+ defaultValue: {
17
+ type: PropType<TransferValue[]>;
18
+ default: () => never[];
19
+ };
20
+ /** @zh 两侧临时勾选值 @en Checked values in both panels @vModel */
21
+ selectedKeys: {
22
+ type: PropType<TransferValue[]>;
23
+ default: undefined;
24
+ };
25
+ /** @zh 非受控默认勾选值 @en Default checked values */
26
+ defaultSelectedKeys: {
27
+ type: PropType<TransferValue[]>;
28
+ default: () => never[];
29
+ };
30
+ /** @zh 禁用整个穿梭框 @en Disable transfer */
31
+ disabled: {
32
+ type: BooleanConstructor;
33
+ default: boolean;
34
+ };
35
+ /** @zh 加载中,阻止勾选和移动 @en Loading, blocks selection and moves */
36
+ loading: {
37
+ type: BooleanConstructor;
38
+ default: boolean;
39
+ };
40
+ /** @zh 错误状态 @en Error state */
41
+ error: {
42
+ type: BooleanConstructor;
43
+ default: boolean;
44
+ };
45
+ /** @zh 点击选项立即移动 @en Move items immediately when clicked */
46
+ simple: {
47
+ type: BooleanConstructor;
48
+ default: boolean;
49
+ };
50
+ /** @zh 单向模式,目标侧通过移除按钮返回 @en One-way mode with target remove buttons */
51
+ oneWay: {
52
+ type: BooleanConstructor;
53
+ default: boolean;
54
+ };
55
+ /** @zh 显示两侧搜索 @en Show search inputs */
56
+ showSearch: {
57
+ type: BooleanConstructor;
58
+ default: boolean;
59
+ };
60
+ /** @zh 显示全选,搜索/分页时仅当前可见项 @en Select all visible items */
61
+ showSelectAll: {
62
+ type: BooleanConstructor;
63
+ default: boolean;
64
+ };
65
+ /** @zh 源、目标列表标题 @en Source and target titles */
66
+ title: PropType<string[]>;
67
+ /** @zh 向右、向左操作文案 @en Move right and left operation labels */
68
+ operations: {
69
+ type: PropType<string[]>;
70
+ default: () => never[];
71
+ };
72
+ /** @zh 搜索占位文案 @en Search placeholder */
73
+ searchPlaceholder: StringConstructor;
74
+ /** @zh 自定义搜索过滤 @en Custom search filter */
75
+ filterOption: PropType<(input: string, item: TransferItem, type: TransferType) => boolean>;
76
+ /** @zh 目标排序:数据源顺序或模型追加顺序 @en Target ordering */
77
+ targetOrder: {
78
+ type: PropType<"original" | "append">;
79
+ default: string;
80
+ };
81
+ /** @zh 两侧面板样式 @en Panel style */
82
+ listStyle: PropType<CSSProperties>;
83
+ /** @zh 分页配置,优先于虚拟列表 @en Pagination takes precedence over virtual list */
84
+ pagination: {
85
+ type: PropType<boolean | TransferPagination>;
86
+ default: boolean;
87
+ };
88
+ /** @zh 虚拟滚动配置 @en Virtual list options */
89
+ virtualListProps: PropType<VirtualListProps>;
90
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
91
+ 'update:modelValue': (_values: TransferValue[]) => true;
92
+ 'update:selectedKeys': (_values: TransferValue[]) => true;
93
+ /** @zh 移动完成时报告目标值、移动方向及实际移动值 @en Target values, destination and moved values */
94
+ change: (_values: TransferValue[], _type: TransferType, _movedValues: TransferValue[]) => true;
95
+ /** @zh 临时勾选变化,分别报告源侧和目标侧 @en Source and target checked values */
96
+ select: (_sourceSelected: TransferValue[], _targetSelected: TransferValue[]) => true;
97
+ /** @zh 搜索输入变化 @en Search input changes */
98
+ search: (_value: string, _type: TransferType) => true;
99
+ /** @zh 列表滚动 @en List scroll */
100
+ scroll: (_event: Event, _type: TransferType) => true;
101
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
102
+ /** @zh 穿梭框数据,value 在数据内唯一 @en Transfer data with unique values */
103
+ data: {
104
+ type: PropType<TransferItem[]>;
105
+ default: () => never[];
106
+ };
107
+ /** @zh 目标列表的值 @en Target values @vModel */
108
+ modelValue: {
109
+ type: PropType<TransferValue[]>;
110
+ default: undefined;
111
+ };
112
+ /** @zh 非受控目标默认值 @en Default target values */
113
+ defaultValue: {
114
+ type: PropType<TransferValue[]>;
115
+ default: () => never[];
116
+ };
117
+ /** @zh 两侧临时勾选值 @en Checked values in both panels @vModel */
118
+ selectedKeys: {
119
+ type: PropType<TransferValue[]>;
120
+ default: undefined;
121
+ };
122
+ /** @zh 非受控默认勾选值 @en Default checked values */
123
+ defaultSelectedKeys: {
124
+ type: PropType<TransferValue[]>;
125
+ default: () => never[];
126
+ };
127
+ /** @zh 禁用整个穿梭框 @en Disable transfer */
128
+ disabled: {
129
+ type: BooleanConstructor;
130
+ default: boolean;
131
+ };
132
+ /** @zh 加载中,阻止勾选和移动 @en Loading, blocks selection and moves */
133
+ loading: {
134
+ type: BooleanConstructor;
135
+ default: boolean;
136
+ };
137
+ /** @zh 错误状态 @en Error state */
138
+ error: {
139
+ type: BooleanConstructor;
140
+ default: boolean;
141
+ };
142
+ /** @zh 点击选项立即移动 @en Move items immediately when clicked */
143
+ simple: {
144
+ type: BooleanConstructor;
145
+ default: boolean;
146
+ };
147
+ /** @zh 单向模式,目标侧通过移除按钮返回 @en One-way mode with target remove buttons */
148
+ oneWay: {
149
+ type: BooleanConstructor;
150
+ default: boolean;
151
+ };
152
+ /** @zh 显示两侧搜索 @en Show search inputs */
153
+ showSearch: {
154
+ type: BooleanConstructor;
155
+ default: boolean;
156
+ };
157
+ /** @zh 显示全选,搜索/分页时仅当前可见项 @en Select all visible items */
158
+ showSelectAll: {
159
+ type: BooleanConstructor;
160
+ default: boolean;
161
+ };
162
+ /** @zh 源、目标列表标题 @en Source and target titles */
163
+ title: PropType<string[]>;
164
+ /** @zh 向右、向左操作文案 @en Move right and left operation labels */
165
+ operations: {
166
+ type: PropType<string[]>;
167
+ default: () => never[];
168
+ };
169
+ /** @zh 搜索占位文案 @en Search placeholder */
170
+ searchPlaceholder: StringConstructor;
171
+ /** @zh 自定义搜索过滤 @en Custom search filter */
172
+ filterOption: PropType<(input: string, item: TransferItem, type: TransferType) => boolean>;
173
+ /** @zh 目标排序:数据源顺序或模型追加顺序 @en Target ordering */
174
+ targetOrder: {
175
+ type: PropType<"original" | "append">;
176
+ default: string;
177
+ };
178
+ /** @zh 两侧面板样式 @en Panel style */
179
+ listStyle: PropType<CSSProperties>;
180
+ /** @zh 分页配置,优先于虚拟列表 @en Pagination takes precedence over virtual list */
181
+ pagination: {
182
+ type: PropType<boolean | TransferPagination>;
183
+ default: boolean;
184
+ };
185
+ /** @zh 虚拟滚动配置 @en Virtual list options */
186
+ virtualListProps: PropType<VirtualListProps>;
187
+ }>> & Readonly<{
188
+ onSearch?: ((_value: string, _type: TransferType) => any) | undefined;
189
+ onSelect?: ((_sourceSelected: TransferValue[], _targetSelected: TransferValue[]) => any) | undefined;
190
+ onChange?: ((_values: TransferValue[], _type: TransferType, _movedValues: TransferValue[]) => any) | undefined;
191
+ onScroll?: ((_event: Event, _type: TransferType) => any) | undefined;
192
+ "onUpdate:modelValue"?: ((_values: TransferValue[]) => any) | undefined;
193
+ "onUpdate:selectedKeys"?: ((_values: TransferValue[]) => any) | undefined;
194
+ }>, {
195
+ error: boolean;
196
+ disabled: boolean;
197
+ loading: boolean;
198
+ data: TransferItem[];
199
+ pagination: boolean | TransferPagination;
200
+ defaultValue: TransferValue[];
201
+ modelValue: TransferValue[];
202
+ selectedKeys: TransferValue[];
203
+ defaultSelectedKeys: TransferValue[];
204
+ simple: boolean;
205
+ operations: string[];
206
+ oneWay: boolean;
207
+ showSearch: boolean;
208
+ showSelectAll: boolean;
209
+ targetOrder: "append" | "original";
210
+ }, SlotsType<TransferSlots>, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
211
+ export default _default;
@@ -0,0 +1,299 @@
1
+ export type { TransferProps, TransferItem, TransferValue, TransferType, TransferPagination, TransferListSlotProps, TransferTitleSlotProps, TransferItemSlotProps, TransferSlots, } from './interface';
2
+ export declare const Transfer: {
3
+ new (...args: any[]): import('vue').CreateComponentPublicInstanceWithMixins<Readonly<import('vue').ExtractPropTypes<{
4
+ data: {
5
+ type: import('vue').PropType<import('./interface').TransferItem[]>;
6
+ default: () => never[];
7
+ };
8
+ modelValue: {
9
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
10
+ default: undefined;
11
+ };
12
+ defaultValue: {
13
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
14
+ default: () => never[];
15
+ };
16
+ selectedKeys: {
17
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
18
+ default: undefined;
19
+ };
20
+ defaultSelectedKeys: {
21
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
22
+ default: () => never[];
23
+ };
24
+ disabled: {
25
+ type: BooleanConstructor;
26
+ default: boolean;
27
+ };
28
+ loading: {
29
+ type: BooleanConstructor;
30
+ default: boolean;
31
+ };
32
+ error: {
33
+ type: BooleanConstructor;
34
+ default: boolean;
35
+ };
36
+ simple: {
37
+ type: BooleanConstructor;
38
+ default: boolean;
39
+ };
40
+ oneWay: {
41
+ type: BooleanConstructor;
42
+ default: boolean;
43
+ };
44
+ showSearch: {
45
+ type: BooleanConstructor;
46
+ default: boolean;
47
+ };
48
+ showSelectAll: {
49
+ type: BooleanConstructor;
50
+ default: boolean;
51
+ };
52
+ title: import('vue').PropType<string[]>;
53
+ operations: {
54
+ type: import('vue').PropType<string[]>;
55
+ default: () => never[];
56
+ };
57
+ searchPlaceholder: StringConstructor;
58
+ filterOption: import('vue').PropType<(input: string, item: import('./interface').TransferItem, type: import('./interface').TransferType) => boolean>;
59
+ targetOrder: {
60
+ type: import('vue').PropType<"original" | "append">;
61
+ default: string;
62
+ };
63
+ listStyle: import('vue').PropType<import('vue').CSSProperties>;
64
+ pagination: {
65
+ type: import('vue').PropType<boolean | import('./interface').TransferPagination>;
66
+ default: boolean;
67
+ };
68
+ virtualListProps: import('vue').PropType<import('../virtual-list-v2/interface').VirtualListProps>;
69
+ }>> & Readonly<{
70
+ onSearch?: ((_value: string, _type: import('./interface').TransferType) => any) | undefined;
71
+ onSelect?: ((_sourceSelected: import('./interface').TransferValue[], _targetSelected: import('./interface').TransferValue[]) => any) | undefined;
72
+ onChange?: ((_values: import('./interface').TransferValue[], _type: import('./interface').TransferType, _movedValues: import('./interface').TransferValue[]) => any) | undefined;
73
+ onScroll?: ((_event: Event, _type: import('./interface').TransferType) => any) | undefined;
74
+ "onUpdate:modelValue"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
75
+ "onUpdate:selectedKeys"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
76
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
77
+ 'update:modelValue': (_values: import('./interface').TransferValue[]) => true;
78
+ 'update:selectedKeys': (_values: import('./interface').TransferValue[]) => true;
79
+ change: (_values: import('./interface').TransferValue[], _type: import('./interface').TransferType, _movedValues: import('./interface').TransferValue[]) => true;
80
+ select: (_sourceSelected: import('./interface').TransferValue[], _targetSelected: import('./interface').TransferValue[]) => true;
81
+ search: (_value: string, _type: import('./interface').TransferType) => true;
82
+ scroll: (_event: Event, _type: import('./interface').TransferType) => true;
83
+ }, import('vue').PublicProps, {
84
+ error: boolean;
85
+ disabled: boolean;
86
+ loading: boolean;
87
+ data: import('./interface').TransferItem[];
88
+ pagination: boolean | import('./interface').TransferPagination;
89
+ defaultValue: import('./interface').TransferValue[];
90
+ modelValue: import('./interface').TransferValue[];
91
+ selectedKeys: import('./interface').TransferValue[];
92
+ defaultSelectedKeys: import('./interface').TransferValue[];
93
+ simple: boolean;
94
+ operations: string[];
95
+ oneWay: boolean;
96
+ showSearch: boolean;
97
+ showSelectAll: boolean;
98
+ targetOrder: "append" | "original";
99
+ }, true, {}, import('vue').SlotsType<import('./interface').TransferSlots>, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, {}, any, import('vue').ComponentProvideOptions, {
100
+ P: {};
101
+ B: {};
102
+ D: {};
103
+ C: {};
104
+ M: {};
105
+ Defaults: {};
106
+ }, Readonly<import('vue').ExtractPropTypes<{
107
+ data: {
108
+ type: import('vue').PropType<import('./interface').TransferItem[]>;
109
+ default: () => never[];
110
+ };
111
+ modelValue: {
112
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
113
+ default: undefined;
114
+ };
115
+ defaultValue: {
116
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
117
+ default: () => never[];
118
+ };
119
+ selectedKeys: {
120
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
121
+ default: undefined;
122
+ };
123
+ defaultSelectedKeys: {
124
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
125
+ default: () => never[];
126
+ };
127
+ disabled: {
128
+ type: BooleanConstructor;
129
+ default: boolean;
130
+ };
131
+ loading: {
132
+ type: BooleanConstructor;
133
+ default: boolean;
134
+ };
135
+ error: {
136
+ type: BooleanConstructor;
137
+ default: boolean;
138
+ };
139
+ simple: {
140
+ type: BooleanConstructor;
141
+ default: boolean;
142
+ };
143
+ oneWay: {
144
+ type: BooleanConstructor;
145
+ default: boolean;
146
+ };
147
+ showSearch: {
148
+ type: BooleanConstructor;
149
+ default: boolean;
150
+ };
151
+ showSelectAll: {
152
+ type: BooleanConstructor;
153
+ default: boolean;
154
+ };
155
+ title: import('vue').PropType<string[]>;
156
+ operations: {
157
+ type: import('vue').PropType<string[]>;
158
+ default: () => never[];
159
+ };
160
+ searchPlaceholder: StringConstructor;
161
+ filterOption: import('vue').PropType<(input: string, item: import('./interface').TransferItem, type: import('./interface').TransferType) => boolean>;
162
+ targetOrder: {
163
+ type: import('vue').PropType<"original" | "append">;
164
+ default: string;
165
+ };
166
+ listStyle: import('vue').PropType<import('vue').CSSProperties>;
167
+ pagination: {
168
+ type: import('vue').PropType<boolean | import('./interface').TransferPagination>;
169
+ default: boolean;
170
+ };
171
+ virtualListProps: import('vue').PropType<import('../virtual-list-v2/interface').VirtualListProps>;
172
+ }>> & Readonly<{
173
+ onSearch?: ((_value: string, _type: import('./interface').TransferType) => any) | undefined;
174
+ onSelect?: ((_sourceSelected: import('./interface').TransferValue[], _targetSelected: import('./interface').TransferValue[]) => any) | undefined;
175
+ onChange?: ((_values: import('./interface').TransferValue[], _type: import('./interface').TransferType, _movedValues: import('./interface').TransferValue[]) => any) | undefined;
176
+ onScroll?: ((_event: Event, _type: import('./interface').TransferType) => any) | undefined;
177
+ "onUpdate:modelValue"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
178
+ "onUpdate:selectedKeys"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
179
+ }>, () => VNode, {}, {}, {}, {
180
+ error: boolean;
181
+ disabled: boolean;
182
+ loading: boolean;
183
+ data: import('./interface').TransferItem[];
184
+ pagination: boolean | import('./interface').TransferPagination;
185
+ defaultValue: import('./interface').TransferValue[];
186
+ modelValue: import('./interface').TransferValue[];
187
+ selectedKeys: import('./interface').TransferValue[];
188
+ defaultSelectedKeys: import('./interface').TransferValue[];
189
+ simple: boolean;
190
+ operations: string[];
191
+ oneWay: boolean;
192
+ showSearch: boolean;
193
+ showSelectAll: boolean;
194
+ targetOrder: "append" | "original";
195
+ }>;
196
+ __isFragment?: never;
197
+ __isTeleport?: never;
198
+ __isSuspense?: never;
199
+ } & import('vue').ComponentOptionsBase<Readonly<import('vue').ExtractPropTypes<{
200
+ data: {
201
+ type: import('vue').PropType<import('./interface').TransferItem[]>;
202
+ default: () => never[];
203
+ };
204
+ modelValue: {
205
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
206
+ default: undefined;
207
+ };
208
+ defaultValue: {
209
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
210
+ default: () => never[];
211
+ };
212
+ selectedKeys: {
213
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
214
+ default: undefined;
215
+ };
216
+ defaultSelectedKeys: {
217
+ type: import('vue').PropType<import('./interface').TransferValue[]>;
218
+ default: () => never[];
219
+ };
220
+ disabled: {
221
+ type: BooleanConstructor;
222
+ default: boolean;
223
+ };
224
+ loading: {
225
+ type: BooleanConstructor;
226
+ default: boolean;
227
+ };
228
+ error: {
229
+ type: BooleanConstructor;
230
+ default: boolean;
231
+ };
232
+ simple: {
233
+ type: BooleanConstructor;
234
+ default: boolean;
235
+ };
236
+ oneWay: {
237
+ type: BooleanConstructor;
238
+ default: boolean;
239
+ };
240
+ showSearch: {
241
+ type: BooleanConstructor;
242
+ default: boolean;
243
+ };
244
+ showSelectAll: {
245
+ type: BooleanConstructor;
246
+ default: boolean;
247
+ };
248
+ title: import('vue').PropType<string[]>;
249
+ operations: {
250
+ type: import('vue').PropType<string[]>;
251
+ default: () => never[];
252
+ };
253
+ searchPlaceholder: StringConstructor;
254
+ filterOption: import('vue').PropType<(input: string, item: import('./interface').TransferItem, type: import('./interface').TransferType) => boolean>;
255
+ targetOrder: {
256
+ type: import('vue').PropType<"original" | "append">;
257
+ default: string;
258
+ };
259
+ listStyle: import('vue').PropType<import('vue').CSSProperties>;
260
+ pagination: {
261
+ type: import('vue').PropType<boolean | import('./interface').TransferPagination>;
262
+ default: boolean;
263
+ };
264
+ virtualListProps: import('vue').PropType<import('../virtual-list-v2/interface').VirtualListProps>;
265
+ }>> & Readonly<{
266
+ onSearch?: ((_value: string, _type: import('./interface').TransferType) => any) | undefined;
267
+ onSelect?: ((_sourceSelected: import('./interface').TransferValue[], _targetSelected: import('./interface').TransferValue[]) => any) | undefined;
268
+ onChange?: ((_values: import('./interface').TransferValue[], _type: import('./interface').TransferType, _movedValues: import('./interface').TransferValue[]) => any) | undefined;
269
+ onScroll?: ((_event: Event, _type: import('./interface').TransferType) => any) | undefined;
270
+ "onUpdate:modelValue"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
271
+ "onUpdate:selectedKeys"?: ((_values: import('./interface').TransferValue[]) => any) | undefined;
272
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
273
+ 'update:modelValue': (_values: import('./interface').TransferValue[]) => true;
274
+ 'update:selectedKeys': (_values: import('./interface').TransferValue[]) => true;
275
+ change: (_values: import('./interface').TransferValue[], _type: import('./interface').TransferType, _movedValues: import('./interface').TransferValue[]) => true;
276
+ select: (_sourceSelected: import('./interface').TransferValue[], _targetSelected: import('./interface').TransferValue[]) => true;
277
+ search: (_value: string, _type: import('./interface').TransferType) => true;
278
+ scroll: (_event: Event, _type: import('./interface').TransferType) => true;
279
+ }, string, {
280
+ error: boolean;
281
+ disabled: boolean;
282
+ loading: boolean;
283
+ data: import('./interface').TransferItem[];
284
+ pagination: boolean | import('./interface').TransferPagination;
285
+ defaultValue: import('./interface').TransferValue[];
286
+ modelValue: import('./interface').TransferValue[];
287
+ selectedKeys: import('./interface').TransferValue[];
288
+ defaultSelectedKeys: import('./interface').TransferValue[];
289
+ simple: boolean;
290
+ operations: string[];
291
+ oneWay: boolean;
292
+ showSearch: boolean;
293
+ showSelectAll: boolean;
294
+ targetOrder: "append" | "original";
295
+ }, {}, string, import('vue').SlotsType<import('./interface').TransferSlots>, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & {
296
+ install(app: import('vue').App): void;
297
+ };
298
+ export type TransferInstance = InstanceType<typeof Transfer>;
299
+ export default Transfer;
@@ -0,0 +1,80 @@
1
+ import { CSSProperties, VNodeChild } from 'vue';
2
+ import { VirtualListProps } from '../virtual-list-v2/interface';
3
+ export type TransferValue = string | number;
4
+ export type TransferType = 'source' | 'target';
5
+ export interface TransferItem {
6
+ value: TransferValue;
7
+ label: string;
8
+ disabled?: boolean;
9
+ [key: string]: unknown;
10
+ }
11
+ export interface TransferPagination {
12
+ /** 每页条数,默认 10 */
13
+ pageSize?: number;
14
+ }
15
+ export interface TransferProps {
16
+ data?: TransferItem[];
17
+ modelValue?: TransferValue[];
18
+ defaultValue?: TransferValue[];
19
+ selectedKeys?: TransferValue[];
20
+ defaultSelectedKeys?: TransferValue[];
21
+ disabled?: boolean;
22
+ loading?: boolean;
23
+ error?: boolean;
24
+ simple?: boolean;
25
+ oneWay?: boolean;
26
+ showSearch?: boolean;
27
+ showSelectAll?: boolean;
28
+ title?: string[];
29
+ operations?: string[];
30
+ searchPlaceholder?: string;
31
+ filterOption?: (inputValue: string, item: TransferItem, type: TransferType) => boolean;
32
+ targetOrder?: 'original' | 'append';
33
+ listStyle?: CSSProperties;
34
+ pagination?: boolean | TransferPagination;
35
+ virtualListProps?: VirtualListProps;
36
+ }
37
+ export interface TransferListSlotProps {
38
+ type: TransferType;
39
+ /** 搜索过滤后的全部数据 */
40
+ data: TransferItem[];
41
+ /** 当前页数据,未分页时等于 data */
42
+ pageData: TransferItem[];
43
+ /** 本侧有效勾选值,包含搜索隐藏项 */
44
+ selectedKeys: TransferValue[];
45
+ disabled: boolean;
46
+ onSelect: (value: TransferValue, checked: boolean) => void;
47
+ onSelectAll: (values: TransferValue[], checked: boolean) => void;
48
+ onMove: (values: TransferValue[]) => void;
49
+ }
50
+ export interface TransferTitleSlotProps {
51
+ type: TransferType;
52
+ title: string;
53
+ countTotal: number;
54
+ countSelected: number;
55
+ searchValue: string;
56
+ checked: boolean;
57
+ indeterminate: boolean;
58
+ disabled: boolean;
59
+ onSelectAllChange: (checked: boolean) => void;
60
+ }
61
+ export interface TransferItemSlotProps {
62
+ item: TransferItem;
63
+ type: TransferType;
64
+ selected: boolean;
65
+ disabled: boolean;
66
+ }
67
+ export interface TransferSlots {
68
+ item?: (props: TransferItemSlotProps) => VNodeChild;
69
+ source?: (props: TransferListSlotProps) => VNodeChild;
70
+ target?: (props: TransferListSlotProps) => VNodeChild;
71
+ 'source-title'?: (props: TransferTitleSlotProps) => VNodeChild;
72
+ 'target-title'?: (props: TransferTitleSlotProps) => VNodeChild;
73
+ footer?: (props: TransferListSlotProps) => VNodeChild;
74
+ empty?: (props: {
75
+ type: TransferType;
76
+ searchValue: string;
77
+ }) => VNodeChild;
78
+ 'to-target-icon'?: () => VNodeChild;
79
+ 'to-source-icon'?: () => VNodeChild;
80
+ }