wssf-kage-ui 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/cjs/Avatar/index.d.ts +47 -0
  2. package/dist/cjs/Avatar/index.js +147 -0
  3. package/dist/cjs/Avatar/style.less +193 -0
  4. package/dist/cjs/Badge/index.d.ts +48 -0
  5. package/dist/cjs/Badge/index.js +141 -0
  6. package/dist/cjs/Badge/style.less +237 -0
  7. package/dist/cjs/Calendar/index.d.ts +33 -0
  8. package/dist/cjs/Calendar/index.js +296 -0
  9. package/dist/cjs/Calendar/style.less +384 -0
  10. package/dist/cjs/Card/index.d.ts +68 -0
  11. package/dist/cjs/Card/index.js +155 -0
  12. package/dist/cjs/Card/style.less +356 -0
  13. package/dist/cjs/Carousel/index.d.ts +33 -0
  14. package/dist/cjs/Carousel/index.js +169 -0
  15. package/dist/cjs/Carousel/style.less +232 -0
  16. package/dist/cjs/Collapse/index.d.ts +55 -0
  17. package/dist/cjs/Collapse/index.js +191 -0
  18. package/dist/cjs/Collapse/style.less +217 -0
  19. package/dist/cjs/Descriptions/index.d.ts +54 -0
  20. package/dist/cjs/Descriptions/index.js +181 -0
  21. package/dist/cjs/Descriptions/style.less +259 -0
  22. package/dist/cjs/Empty/index.d.ts +21 -0
  23. package/dist/cjs/Empty/index.js +115 -0
  24. package/dist/cjs/Empty/style.less +103 -0
  25. package/dist/cjs/Image/index.d.ts +30 -0
  26. package/dist/cjs/Image/index.js +153 -0
  27. package/dist/cjs/Image/style.less +156 -0
  28. package/dist/cjs/Input/index.d.ts +24 -0
  29. package/dist/cjs/Input/index.js +158 -0
  30. package/dist/cjs/Input/style.less +276 -0
  31. package/dist/cjs/InputNumber/index.d.ts +47 -0
  32. package/dist/cjs/InputNumber/index.js +323 -0
  33. package/dist/cjs/InputNumber/style.less +392 -0
  34. package/dist/cjs/Mentions/index.d.ts +57 -0
  35. package/dist/cjs/Mentions/index.js +378 -0
  36. package/dist/cjs/Mentions/style.less +297 -0
  37. package/dist/cjs/Popover/index.d.ts +30 -0
  38. package/dist/cjs/Popover/index.js +131 -0
  39. package/dist/cjs/Popover/style.less +279 -0
  40. package/dist/cjs/QRCode/index.d.ts +30 -0
  41. package/dist/cjs/QRCode/index.js +167 -0
  42. package/dist/cjs/QRCode/style.less +201 -0
  43. package/dist/cjs/Radio/index.d.ts +70 -0
  44. package/dist/cjs/Radio/index.js +199 -0
  45. package/dist/cjs/Radio/style.less +326 -0
  46. package/dist/cjs/Rate/index.d.ts +37 -0
  47. package/dist/cjs/Rate/index.js +151 -0
  48. package/dist/cjs/Rate/style.less +170 -0
  49. package/dist/cjs/Segmented/index.d.ts +31 -0
  50. package/dist/cjs/Segmented/index.js +121 -0
  51. package/dist/cjs/Segmented/style.less +167 -0
  52. package/dist/cjs/Select/index.d.ts +67 -0
  53. package/dist/cjs/Select/index.js +403 -0
  54. package/dist/cjs/Select/style.less +523 -0
  55. package/dist/cjs/Slider/index.d.ts +41 -0
  56. package/dist/cjs/Slider/index.js +325 -0
  57. package/dist/cjs/Slider/style.less +287 -0
  58. package/dist/cjs/Statistic/index.d.ts +26 -0
  59. package/dist/cjs/Statistic/index.js +71 -0
  60. package/dist/cjs/Statistic/style.less +94 -0
  61. package/dist/cjs/Switch/index.d.ts +28 -0
  62. package/dist/cjs/Switch/index.js +71 -0
  63. package/dist/cjs/Switch/style.less +212 -0
  64. package/dist/cjs/Table/index.d.ts +188 -0
  65. package/dist/cjs/Table/index.js +787 -0
  66. package/dist/cjs/Table/style.less +663 -0
  67. package/dist/cjs/Tag/index.d.ts +51 -0
  68. package/dist/cjs/Tag/index.js +142 -0
  69. package/dist/cjs/Tag/style.less +356 -0
  70. package/dist/cjs/TimePicker/index.d.ts +51 -0
  71. package/dist/cjs/TimePicker/index.js +332 -0
  72. package/dist/cjs/TimePicker/style.less +384 -0
  73. package/dist/cjs/Timeline/index.d.ts +47 -0
  74. package/dist/cjs/Timeline/index.js +127 -0
  75. package/dist/cjs/Timeline/style.less +265 -0
  76. package/dist/cjs/Tooltip/index.d.ts +53 -0
  77. package/dist/cjs/Tooltip/index.js +468 -0
  78. package/dist/cjs/Tooltip/style.less +237 -0
  79. package/dist/cjs/Transfer/index.d.ts +52 -0
  80. package/dist/cjs/Transfer/index.js +344 -0
  81. package/dist/cjs/Transfer/style.less +331 -0
  82. package/dist/cjs/TreeSelect/index.d.ts +54 -0
  83. package/dist/cjs/TreeSelect/index.js +373 -0
  84. package/dist/cjs/TreeSelect/style.less +471 -0
  85. package/dist/cjs/Upload/index.d.ts +65 -0
  86. package/dist/cjs/Upload/index.js +517 -0
  87. package/dist/cjs/Upload/style.less +424 -0
  88. package/dist/cjs/index.d.ts +58 -0
  89. package/dist/cjs/index.js +227 -0
  90. package/dist/esm/Avatar/index.d.ts +47 -0
  91. package/dist/esm/Avatar/index.js +142 -0
  92. package/dist/esm/Avatar/style.less +193 -0
  93. package/dist/esm/Badge/index.d.ts +48 -0
  94. package/dist/esm/Badge/index.js +137 -0
  95. package/dist/esm/Badge/style.less +237 -0
  96. package/dist/esm/Calendar/index.d.ts +33 -0
  97. package/dist/esm/Calendar/index.js +291 -0
  98. package/dist/esm/Calendar/style.less +384 -0
  99. package/dist/esm/Card/index.d.ts +68 -0
  100. package/dist/esm/Card/index.js +149 -0
  101. package/dist/esm/Card/style.less +356 -0
  102. package/dist/esm/Carousel/index.d.ts +33 -0
  103. package/dist/esm/Carousel/index.js +163 -0
  104. package/dist/esm/Carousel/style.less +232 -0
  105. package/dist/esm/Collapse/index.d.ts +55 -0
  106. package/dist/esm/Collapse/index.js +187 -0
  107. package/dist/esm/Collapse/style.less +217 -0
  108. package/dist/esm/Descriptions/index.d.ts +54 -0
  109. package/dist/esm/Descriptions/index.js +179 -0
  110. package/dist/esm/Descriptions/style.less +259 -0
  111. package/dist/esm/Empty/index.d.ts +21 -0
  112. package/dist/esm/Empty/index.js +109 -0
  113. package/dist/esm/Empty/style.less +103 -0
  114. package/dist/esm/Image/index.d.ts +30 -0
  115. package/dist/esm/Image/index.js +149 -0
  116. package/dist/esm/Image/style.less +156 -0
  117. package/dist/esm/Input/index.d.ts +24 -0
  118. package/dist/esm/Input/index.js +151 -0
  119. package/dist/esm/Input/style.less +276 -0
  120. package/dist/esm/InputNumber/index.d.ts +47 -0
  121. package/dist/esm/InputNumber/index.js +316 -0
  122. package/dist/esm/InputNumber/style.less +392 -0
  123. package/dist/esm/Mentions/index.d.ts +57 -0
  124. package/dist/esm/Mentions/index.js +374 -0
  125. package/dist/esm/Mentions/style.less +297 -0
  126. package/dist/esm/Popover/index.d.ts +30 -0
  127. package/dist/esm/Popover/index.js +126 -0
  128. package/dist/esm/Popover/style.less +279 -0
  129. package/dist/esm/QRCode/index.d.ts +30 -0
  130. package/dist/esm/QRCode/index.js +158 -0
  131. package/dist/esm/QRCode/style.less +201 -0
  132. package/dist/esm/Radio/index.d.ts +70 -0
  133. package/dist/esm/Radio/index.js +193 -0
  134. package/dist/esm/Radio/style.less +326 -0
  135. package/dist/esm/Rate/index.d.ts +37 -0
  136. package/dist/esm/Rate/index.js +143 -0
  137. package/dist/esm/Rate/style.less +170 -0
  138. package/dist/esm/Segmented/index.d.ts +31 -0
  139. package/dist/esm/Segmented/index.js +113 -0
  140. package/dist/esm/Segmented/style.less +167 -0
  141. package/dist/esm/Select/index.d.ts +67 -0
  142. package/dist/esm/Select/index.js +398 -0
  143. package/dist/esm/Select/style.less +523 -0
  144. package/dist/esm/Slider/index.d.ts +41 -0
  145. package/dist/esm/Slider/index.js +318 -0
  146. package/dist/esm/Slider/style.less +287 -0
  147. package/dist/esm/Statistic/index.d.ts +26 -0
  148. package/dist/esm/Statistic/index.js +65 -0
  149. package/dist/esm/Statistic/style.less +94 -0
  150. package/dist/esm/Switch/index.d.ts +28 -0
  151. package/dist/esm/Switch/index.js +63 -0
  152. package/dist/esm/Switch/style.less +212 -0
  153. package/dist/esm/Table/index.d.ts +188 -0
  154. package/dist/esm/Table/index.js +797 -0
  155. package/dist/esm/Table/style.less +663 -0
  156. package/dist/esm/Tag/index.d.ts +51 -0
  157. package/dist/esm/Tag/index.js +144 -0
  158. package/dist/esm/Tag/style.less +356 -0
  159. package/dist/esm/TimePicker/index.d.ts +51 -0
  160. package/dist/esm/TimePicker/index.js +327 -0
  161. package/dist/esm/TimePicker/style.less +384 -0
  162. package/dist/esm/Timeline/index.d.ts +47 -0
  163. package/dist/esm/Timeline/index.js +130 -0
  164. package/dist/esm/Timeline/style.less +265 -0
  165. package/dist/esm/Tooltip/index.d.ts +53 -0
  166. package/dist/esm/Tooltip/index.js +471 -0
  167. package/dist/esm/Tooltip/style.less +237 -0
  168. package/dist/esm/Transfer/index.d.ts +52 -0
  169. package/dist/esm/Transfer/index.js +340 -0
  170. package/dist/esm/Transfer/style.less +331 -0
  171. package/dist/esm/TreeSelect/index.d.ts +54 -0
  172. package/dist/esm/TreeSelect/index.js +369 -0
  173. package/dist/esm/TreeSelect/style.less +471 -0
  174. package/dist/esm/Upload/index.d.ts +65 -0
  175. package/dist/esm/Upload/index.js +513 -0
  176. package/dist/esm/Upload/style.less +424 -0
  177. package/dist/esm/index.d.ts +58 -0
  178. package/dist/esm/index.js +30 -1
  179. package/package.json +6 -3
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export interface TransferItem {
4
+ key: string;
5
+ title: string;
6
+ description?: string;
7
+ disabled?: boolean;
8
+ [key: string]: any;
9
+ }
10
+ export type TransferDirection = 'left' | 'right';
11
+ export interface TransferProps {
12
+ /** 数据源,其中的数据将会被渲染到左边一栏 */
13
+ dataSource: TransferItem[];
14
+ /** 显示在右侧列表的数据 keys */
15
+ targetKeys?: string[];
16
+ /** 默认显示在右侧列表的数据 keys */
17
+ defaultTargetKeys?: string[];
18
+ /** 选中的数据 keys */
19
+ selectedKeys?: string[];
20
+ /** 默认选中的数据 keys */
21
+ defaultSelectedKeys?: string[];
22
+ /** 渲染每条数据项 */
23
+ render?: (item: TransferItem) => React.ReactNode;
24
+ /** 是否禁用 */
25
+ disabled?: boolean;
26
+ /** 是否显示搜索框 */
27
+ showSearch?: boolean;
28
+ /** 搜索框占位符 */
29
+ searchPlaceholder?: string;
30
+ /** 自定义过滤函数 */
31
+ filterOption?: (inputValue: string, item: TransferItem) => boolean;
32
+ /** 标题集合 */
33
+ titles?: [React.ReactNode, React.ReactNode];
34
+ /** 操作按钮文案集合 */
35
+ operations?: [React.ReactNode, React.ReactNode];
36
+ /** 是否显示全选按钮 */
37
+ showSelectAll?: boolean;
38
+ /** 列表样式 */
39
+ listStyle?: React.CSSProperties;
40
+ /** 选中项变化回调 */
41
+ onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void;
42
+ /** 数据在两栏之间转移时的回调 */
43
+ onChange?: (targetKeys: string[], direction: TransferDirection, moveKeys: string[]) => void;
44
+ /** 搜索框内容变化回调 */
45
+ onSearch?: (direction: TransferDirection, value: string) => void;
46
+ /** 自定义类名 */
47
+ className?: string;
48
+ /** 自定义样式 */
49
+ style?: React.CSSProperties;
50
+ }
51
+ export declare const Transfer: React.FC<TransferProps>;
52
+ export default Transfer;
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.Transfer = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ require("./style.less");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
14
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
16
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
17
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
18
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
21
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
22
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // ============ Transfer 数据项 ============
23
+ // ============ Transfer Props ============
24
+ // ============ Transfer Component ============
25
+ var Transfer = exports.Transfer = function Transfer(_ref) {
26
+ var dataSource = _ref.dataSource,
27
+ controlledTargetKeys = _ref.targetKeys,
28
+ _ref$defaultTargetKey = _ref.defaultTargetKeys,
29
+ defaultTargetKeys = _ref$defaultTargetKey === void 0 ? [] : _ref$defaultTargetKey,
30
+ controlledSelectedKeys = _ref.selectedKeys,
31
+ _ref$defaultSelectedK = _ref.defaultSelectedKeys,
32
+ defaultSelectedKeys = _ref$defaultSelectedK === void 0 ? [] : _ref$defaultSelectedK,
33
+ render = _ref.render,
34
+ _ref$disabled = _ref.disabled,
35
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
36
+ _ref$showSearch = _ref.showSearch,
37
+ showSearch = _ref$showSearch === void 0 ? false : _ref$showSearch,
38
+ _ref$searchPlaceholde = _ref.searchPlaceholder,
39
+ searchPlaceholder = _ref$searchPlaceholde === void 0 ? '请输入搜索内容' : _ref$searchPlaceholde,
40
+ filterOption = _ref.filterOption,
41
+ _ref$titles = _ref.titles,
42
+ titles = _ref$titles === void 0 ? ['源列表', '目标列表'] : _ref$titles,
43
+ _ref$operations = _ref.operations,
44
+ operations = _ref$operations === void 0 ? ['>', '<'] : _ref$operations,
45
+ _ref$showSelectAll = _ref.showSelectAll,
46
+ showSelectAll = _ref$showSelectAll === void 0 ? true : _ref$showSelectAll,
47
+ listStyle = _ref.listStyle,
48
+ onSelectChange = _ref.onSelectChange,
49
+ onChange = _ref.onChange,
50
+ onSearch = _ref.onSearch,
51
+ _ref$className = _ref.className,
52
+ className = _ref$className === void 0 ? '' : _ref$className,
53
+ style = _ref.style;
54
+ var _useState = (0, _react.useState)(defaultTargetKeys),
55
+ _useState2 = _slicedToArray(_useState, 2),
56
+ internalTargetKeys = _useState2[0],
57
+ setInternalTargetKeys = _useState2[1];
58
+ var _useState3 = (0, _react.useState)(defaultSelectedKeys),
59
+ _useState4 = _slicedToArray(_useState3, 2),
60
+ internalSelectedKeys = _useState4[0],
61
+ setInternalSelectedKeys = _useState4[1];
62
+ var _useState5 = (0, _react.useState)(''),
63
+ _useState6 = _slicedToArray(_useState5, 2),
64
+ leftSearch = _useState6[0],
65
+ setLeftSearch = _useState6[1];
66
+ var _useState7 = (0, _react.useState)(''),
67
+ _useState8 = _slicedToArray(_useState7, 2),
68
+ rightSearch = _useState8[0],
69
+ setRightSearch = _useState8[1];
70
+ var targetKeys = controlledTargetKeys !== undefined ? controlledTargetKeys : internalTargetKeys;
71
+ var selectedKeys = controlledSelectedKeys !== undefined ? controlledSelectedKeys : internalSelectedKeys;
72
+
73
+ // 分离左右列表数据
74
+ var _useMemo = (0, _react.useMemo)(function () {
75
+ var left = [];
76
+ var right = [];
77
+ dataSource.forEach(function (item) {
78
+ if (targetKeys.includes(item.key)) {
79
+ right.push(item);
80
+ } else {
81
+ left.push(item);
82
+ }
83
+ });
84
+ return {
85
+ leftDataSource: left,
86
+ rightDataSource: right
87
+ };
88
+ }, [dataSource, targetKeys]),
89
+ leftDataSource = _useMemo.leftDataSource,
90
+ rightDataSource = _useMemo.rightDataSource;
91
+
92
+ // 默认过滤函数
93
+ var defaultFilterOption = (0, _react.useCallback)(function (inputValue, item) {
94
+ var _item$description$toL, _item$description;
95
+ return item.title.toLowerCase().includes(inputValue.toLowerCase()) || ((_item$description$toL = (_item$description = item.description) === null || _item$description === void 0 ? void 0 : _item$description.toLowerCase().includes(inputValue.toLowerCase())) !== null && _item$description$toL !== void 0 ? _item$description$toL : false);
96
+ }, []);
97
+ var actualFilterOption = filterOption || defaultFilterOption;
98
+
99
+ // 过滤后的数据
100
+ var filteredLeftDataSource = (0, _react.useMemo)(function () {
101
+ if (!leftSearch) return leftDataSource;
102
+ return leftDataSource.filter(function (item) {
103
+ return actualFilterOption(leftSearch, item);
104
+ });
105
+ }, [leftDataSource, leftSearch, actualFilterOption]);
106
+ var filteredRightDataSource = (0, _react.useMemo)(function () {
107
+ if (!rightSearch) return rightDataSource;
108
+ return rightDataSource.filter(function (item) {
109
+ return actualFilterOption(rightSearch, item);
110
+ });
111
+ }, [rightDataSource, rightSearch, actualFilterOption]);
112
+
113
+ // 获取某一侧的选中 keys
114
+ var getSelectedKeysForDirection = (0, _react.useCallback)(function (direction) {
115
+ var dataSource = direction === 'left' ? leftDataSource : rightDataSource;
116
+ return selectedKeys.filter(function (key) {
117
+ return dataSource.some(function (item) {
118
+ return item.key === key;
119
+ });
120
+ });
121
+ }, [selectedKeys, leftDataSource, rightDataSource]);
122
+ var leftSelectedKeys = getSelectedKeysForDirection('left');
123
+ var rightSelectedKeys = getSelectedKeysForDirection('right');
124
+
125
+ // 切换选中状态
126
+ var handleSelectChange = (0, _react.useCallback)(function (direction, key, checked) {
127
+ if (disabled) return;
128
+ var newSelectedKeys;
129
+ if (checked) {
130
+ newSelectedKeys = [].concat(_toConsumableArray(selectedKeys), [key]);
131
+ } else {
132
+ newSelectedKeys = selectedKeys.filter(function (k) {
133
+ return k !== key;
134
+ });
135
+ }
136
+ if (controlledSelectedKeys === undefined) {
137
+ setInternalSelectedKeys(newSelectedKeys);
138
+ }
139
+ var leftKeys = newSelectedKeys.filter(function (k) {
140
+ return leftDataSource.some(function (item) {
141
+ return item.key === k;
142
+ });
143
+ });
144
+ var rightKeys = newSelectedKeys.filter(function (k) {
145
+ return rightDataSource.some(function (item) {
146
+ return item.key === k;
147
+ });
148
+ });
149
+ onSelectChange === null || onSelectChange === void 0 || onSelectChange(leftKeys, rightKeys);
150
+ }, [disabled, selectedKeys, controlledSelectedKeys, leftDataSource, rightDataSource, onSelectChange]);
151
+
152
+ // 全选/取消全选
153
+ var handleSelectAll = (0, _react.useCallback)(function (direction, checked) {
154
+ if (disabled) return;
155
+ var dataSource = direction === 'left' ? filteredLeftDataSource : filteredRightDataSource;
156
+ var selectableKeys = dataSource.filter(function (item) {
157
+ return !item.disabled;
158
+ }).map(function (item) {
159
+ return item.key;
160
+ });
161
+ var newSelectedKeys;
162
+ if (checked) {
163
+ // 添加当前列表的所有可选项
164
+ var otherKeys = selectedKeys.filter(function (key) {
165
+ return !dataSource.some(function (item) {
166
+ return item.key === key;
167
+ });
168
+ });
169
+ newSelectedKeys = [].concat(_toConsumableArray(otherKeys), _toConsumableArray(selectableKeys));
170
+ } else {
171
+ // 移除当前列表的所有项
172
+ newSelectedKeys = selectedKeys.filter(function (key) {
173
+ return !dataSource.some(function (item) {
174
+ return item.key === key;
175
+ });
176
+ });
177
+ }
178
+ if (controlledSelectedKeys === undefined) {
179
+ setInternalSelectedKeys(newSelectedKeys);
180
+ }
181
+ var leftKeys = newSelectedKeys.filter(function (k) {
182
+ return leftDataSource.some(function (item) {
183
+ return item.key === k;
184
+ });
185
+ });
186
+ var rightKeys = newSelectedKeys.filter(function (k) {
187
+ return rightDataSource.some(function (item) {
188
+ return item.key === k;
189
+ });
190
+ });
191
+ onSelectChange === null || onSelectChange === void 0 || onSelectChange(leftKeys, rightKeys);
192
+ }, [disabled, filteredLeftDataSource, filteredRightDataSource, selectedKeys, controlledSelectedKeys, leftDataSource, rightDataSource, onSelectChange]);
193
+
194
+ // 移动数据
195
+ var handleMove = (0, _react.useCallback)(function (direction) {
196
+ if (disabled) return;
197
+ var moveKeys = direction === 'left' ? rightSelectedKeys : leftSelectedKeys;
198
+ if (moveKeys.length === 0) return;
199
+ var newTargetKeys;
200
+ if (direction === 'left') {
201
+ // 从右移到左(移除)
202
+ newTargetKeys = targetKeys.filter(function (key) {
203
+ return !moveKeys.includes(key);
204
+ });
205
+ } else {
206
+ // 从左移到右(添加)
207
+ newTargetKeys = [].concat(_toConsumableArray(targetKeys), _toConsumableArray(moveKeys));
208
+ }
209
+ if (controlledTargetKeys === undefined) {
210
+ setInternalTargetKeys(newTargetKeys);
211
+ }
212
+
213
+ // 清空移动的选中项
214
+ var newSelectedKeys = selectedKeys.filter(function (key) {
215
+ return !moveKeys.includes(key);
216
+ });
217
+ if (controlledSelectedKeys === undefined) {
218
+ setInternalSelectedKeys(newSelectedKeys);
219
+ }
220
+ onChange === null || onChange === void 0 || onChange(newTargetKeys, direction, moveKeys);
221
+ }, [disabled, leftSelectedKeys, rightSelectedKeys, targetKeys, selectedKeys, controlledTargetKeys, controlledSelectedKeys, onChange]);
222
+
223
+ // 搜索
224
+ var handleSearch = (0, _react.useCallback)(function (direction, value) {
225
+ if (direction === 'left') {
226
+ setLeftSearch(value);
227
+ } else {
228
+ setRightSearch(value);
229
+ }
230
+ onSearch === null || onSearch === void 0 || onSearch(direction, value);
231
+ }, [onSearch]);
232
+
233
+ // 渲染列表
234
+ var renderList = function renderList(direction, dataSource, searchValue) {
235
+ var selectedKeysForDirection = direction === 'left' ? leftSelectedKeys : rightSelectedKeys;
236
+ var selectableCount = dataSource.filter(function (item) {
237
+ return !item.disabled;
238
+ }).length;
239
+ var selectedCount = selectedKeysForDirection.length;
240
+ var isAllSelected = selectableCount > 0 && selectedCount === selectableCount;
241
+ var isIndeterminate = selectedCount > 0 && selectedCount < selectableCount;
242
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
243
+ className: "kage-transfer-list",
244
+ style: listStyle,
245
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
246
+ className: "kage-transfer-list-header",
247
+ children: [showSelectAll && /*#__PURE__*/(0, _jsxRuntime.jsxs)("label", {
248
+ className: "kage-transfer-checkbox-label",
249
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
250
+ type: "checkbox",
251
+ className: "kage-transfer-checkbox",
252
+ checked: isAllSelected,
253
+ ref: function ref(el) {
254
+ if (el) el.indeterminate = isIndeterminate;
255
+ },
256
+ onChange: function onChange(e) {
257
+ return handleSelectAll(direction, e.target.checked);
258
+ },
259
+ disabled: disabled || selectableCount === 0
260
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
261
+ className: "kage-transfer-list-header-title",
262
+ children: titles[direction === 'left' ? 0 : 1]
263
+ })]
264
+ }), !showSelectAll && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
265
+ className: "kage-transfer-list-header-title",
266
+ children: titles[direction === 'left' ? 0 : 1]
267
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
268
+ className: "kage-transfer-list-header-count",
269
+ children: selectedCount > 0 ? "".concat(selectedCount, "/").concat(dataSource.length) : dataSource.length
270
+ })]
271
+ }), showSearch && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
272
+ className: "kage-transfer-list-search",
273
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
274
+ type: "text",
275
+ className: "kage-transfer-search-input",
276
+ placeholder: searchPlaceholder,
277
+ value: searchValue,
278
+ onChange: function onChange(e) {
279
+ return handleSearch(direction, e.target.value);
280
+ },
281
+ disabled: disabled
282
+ })
283
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
284
+ className: "kage-transfer-list-body",
285
+ children: dataSource.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
286
+ className: "kage-transfer-list-empty",
287
+ children: "\u6682\u65E0\u6570\u636E"
288
+ }) : dataSource.map(function (item) {
289
+ var isChecked = selectedKeysForDirection.includes(item.key);
290
+ var isDisabled = disabled || item.disabled;
291
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("label", {
292
+ className: "kage-transfer-list-item ".concat(isDisabled ? 'kage-transfer-list-item-disabled' : ''),
293
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
294
+ type: "checkbox",
295
+ className: "kage-transfer-checkbox",
296
+ checked: isChecked,
297
+ onChange: function onChange(e) {
298
+ return handleSelectChange(direction, item.key, e.target.checked);
299
+ },
300
+ disabled: isDisabled
301
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
302
+ className: "kage-transfer-list-item-content",
303
+ children: render ? render(item) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
304
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
305
+ className: "kage-transfer-list-item-title",
306
+ children: item.title
307
+ }), item.description && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
308
+ className: "kage-transfer-list-item-description",
309
+ children: item.description
310
+ })]
311
+ })
312
+ })]
313
+ }, item.key);
314
+ })
315
+ })]
316
+ });
317
+ };
318
+ var classNames = ['kage-transfer', disabled && 'kage-transfer-disabled', className].filter(Boolean).join(' ');
319
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
320
+ className: classNames,
321
+ style: style,
322
+ children: [renderList('left', filteredLeftDataSource, leftSearch), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
323
+ className: "kage-transfer-operations",
324
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
325
+ className: "kage-transfer-operation-btn",
326
+ disabled: disabled || leftSelectedKeys.length === 0,
327
+ onClick: function onClick() {
328
+ return handleMove('right');
329
+ },
330
+ title: "\u79FB\u81F3\u53F3\u4FA7",
331
+ children: operations[0]
332
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
333
+ className: "kage-transfer-operation-btn",
334
+ disabled: disabled || rightSelectedKeys.length === 0,
335
+ onClick: function onClick() {
336
+ return handleMove('left');
337
+ },
338
+ title: "\u79FB\u81F3\u5DE6\u4FA7",
339
+ children: operations[1]
340
+ })]
341
+ }), renderList('right', filteredRightDataSource, rightSearch)]
342
+ });
343
+ };
344
+ var _default = exports.default = Transfer;