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,398 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ 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."); }
3
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
+ 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."); }
7
+ 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); }
8
+ 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; }
9
+ 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; } }
10
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
+ import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
12
+ import "./style.less";
13
+
14
+ // ============ Option Type ============
15
+
16
+ // ============ Select Props ============
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { jsxs as _jsxs } from "react/jsx-runtime";
19
+ // ============ Select Component ============
20
+ export var Select = function Select(_ref) {
21
+ var controlledValue = _ref.value,
22
+ defaultValue = _ref.defaultValue,
23
+ _ref$options = _ref.options,
24
+ options = _ref$options === void 0 ? [] : _ref$options,
25
+ _ref$placeholder = _ref.placeholder,
26
+ placeholder = _ref$placeholder === void 0 ? '请选择' : _ref$placeholder,
27
+ _ref$disabled = _ref.disabled,
28
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
29
+ _ref$allowClear = _ref.allowClear,
30
+ allowClear = _ref$allowClear === void 0 ? false : _ref$allowClear,
31
+ _ref$showSearch = _ref.showSearch,
32
+ showSearch = _ref$showSearch === void 0 ? false : _ref$showSearch,
33
+ mode = _ref.mode,
34
+ _ref$size = _ref.size,
35
+ size = _ref$size === void 0 ? 'middle' : _ref$size,
36
+ status = _ref.status,
37
+ _ref$popupMatchSelect = _ref.popupMatchSelectWidth,
38
+ popupMatchSelectWidth = _ref$popupMatchSelect === void 0 ? true : _ref$popupMatchSelect,
39
+ _ref$filterOption = _ref.filterOption,
40
+ filterOption = _ref$filterOption === void 0 ? true : _ref$filterOption,
41
+ _ref$notFoundContent = _ref.notFoundContent,
42
+ notFoundContent = _ref$notFoundContent === void 0 ? '无匹配结果' : _ref$notFoundContent,
43
+ _ref$loading = _ref.loading,
44
+ loading = _ref$loading === void 0 ? false : _ref$loading,
45
+ maxTagCount = _ref.maxTagCount,
46
+ maxTagPlaceholder = _ref.maxTagPlaceholder,
47
+ maxTagTextLength = _ref.maxTagTextLength,
48
+ onChange = _ref.onChange,
49
+ onSelect = _ref.onSelect,
50
+ onDeselect = _ref.onDeselect,
51
+ onSearch = _ref.onSearch,
52
+ onDropdownVisibleChange = _ref.onDropdownVisibleChange,
53
+ onBlur = _ref.onBlur,
54
+ onFocus = _ref.onFocus,
55
+ _ref$className = _ref.className,
56
+ className = _ref$className === void 0 ? '' : _ref$className,
57
+ style = _ref.style;
58
+ var isMultiple = mode === 'multiple' || mode === 'tags';
59
+ var _useState = useState(function () {
60
+ if (defaultValue !== undefined) return defaultValue;
61
+ return isMultiple ? [] : '';
62
+ }),
63
+ _useState2 = _slicedToArray(_useState, 2),
64
+ internalValue = _useState2[0],
65
+ setInternalValue = _useState2[1];
66
+ var _useState3 = useState(false),
67
+ _useState4 = _slicedToArray(_useState3, 2),
68
+ isOpen = _useState4[0],
69
+ setIsOpen = _useState4[1];
70
+ var _useState5 = useState(''),
71
+ _useState6 = _slicedToArray(_useState5, 2),
72
+ searchValue = _useState6[0],
73
+ setSearchValue = _useState6[1];
74
+ var _useState7 = useState(-1),
75
+ _useState8 = _slicedToArray(_useState7, 2),
76
+ activeIndex = _useState8[0],
77
+ setActiveIndex = _useState8[1];
78
+ var containerRef = useRef(null);
79
+ var searchInputRef = useRef(null);
80
+ var dropdownRef = useRef(null);
81
+ var value = controlledValue !== undefined ? controlledValue : internalValue;
82
+
83
+ // 标准化选项
84
+ var normalizedOptions = useMemo(function () {
85
+ return options.map(function (opt) {
86
+ if (typeof opt === 'string' || typeof opt === 'number') {
87
+ return {
88
+ value: opt,
89
+ label: opt
90
+ };
91
+ }
92
+ return opt;
93
+ });
94
+ }, [options]);
95
+
96
+ // 过滤选项
97
+ var filteredOptions = useMemo(function () {
98
+ if (!showSearch || !searchValue) return normalizedOptions;
99
+ return normalizedOptions.filter(function (option) {
100
+ if (!filterOption) return true;
101
+ if (typeof filterOption === 'function') {
102
+ return filterOption(searchValue, option);
103
+ }
104
+ // 默认过滤
105
+ var optionText = String(option.label || option.value).toLowerCase();
106
+ return optionText.includes(searchValue.toLowerCase());
107
+ });
108
+ }, [normalizedOptions, showSearch, searchValue, filterOption]);
109
+
110
+ // 获取选中的选项
111
+ var getSelectedOptions = useCallback(function (val) {
112
+ if (!isMultiple) {
113
+ var _option = normalizedOptions.find(function (opt) {
114
+ return opt.value === val;
115
+ });
116
+ return _option ? [_option] : [];
117
+ }
118
+ return val.map(function (v) {
119
+ return normalizedOptions.find(function (opt) {
120
+ return opt.value === v;
121
+ });
122
+ }).filter(Boolean);
123
+ }, [normalizedOptions, isMultiple]);
124
+
125
+ // 获取显示文本
126
+ var getDisplayText = useCallback(function () {
127
+ if (isMultiple) {
128
+ var selectedOptions = getSelectedOptions(value);
129
+ return selectedOptions.map(function (opt) {
130
+ return opt.label || opt.value;
131
+ });
132
+ }
133
+ var selectedOption = getSelectedOptions(value)[0];
134
+ return selectedOption ? selectedOption.label || selectedOption.value : '';
135
+ }, [value, isMultiple, getSelectedOptions]);
136
+
137
+ // 打开/关闭下拉
138
+ var setOpen = useCallback(function (open) {
139
+ if (disabled) return;
140
+ setIsOpen(open);
141
+ onDropdownVisibleChange === null || onDropdownVisibleChange === void 0 || onDropdownVisibleChange(open);
142
+ if (!open) {
143
+ setActiveIndex(-1);
144
+ setSearchValue('');
145
+ } else {
146
+ setTimeout(function () {
147
+ var _searchInputRef$curre;
148
+ return (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
149
+ }, 0);
150
+ }
151
+ }, [disabled, onDropdownVisibleChange]);
152
+
153
+ // 处理选择
154
+ var handleSelect = useCallback(function (option) {
155
+ if (option.disabled) return;
156
+ if (isMultiple) {
157
+ var currentValues = value;
158
+ var isSelected = currentValues.includes(option.value);
159
+ var newValue;
160
+ if (isSelected) {
161
+ newValue = currentValues.filter(function (v) {
162
+ return v !== option.value;
163
+ });
164
+ onDeselect === null || onDeselect === void 0 || onDeselect(option.value, option);
165
+ } else {
166
+ newValue = [].concat(_toConsumableArray(currentValues), [option.value]);
167
+ onSelect === null || onSelect === void 0 || onSelect(option.value, option);
168
+ }
169
+ if (controlledValue === undefined) {
170
+ setInternalValue(newValue);
171
+ }
172
+ onChange === null || onChange === void 0 || onChange(newValue, getSelectedOptions(newValue));
173
+ } else {
174
+ if (controlledValue === undefined) {
175
+ setInternalValue(option.value);
176
+ }
177
+ onChange === null || onChange === void 0 || onChange(option.value, option);
178
+ onSelect === null || onSelect === void 0 || onSelect(option.value, option);
179
+ setOpen(false);
180
+ }
181
+ setSearchValue('');
182
+ }, [isMultiple, value, controlledValue, onChange, onSelect, onDeselect, getSelectedOptions, setOpen]);
183
+
184
+ // 移除标签
185
+ var handleRemoveTag = useCallback(function (tagValue, e) {
186
+ e.stopPropagation();
187
+ if (disabled) return;
188
+ var currentValues = value;
189
+ var newValue = currentValues.filter(function (v) {
190
+ return v !== tagValue;
191
+ });
192
+ var option = normalizedOptions.find(function (opt) {
193
+ return opt.value === tagValue;
194
+ });
195
+ if (controlledValue === undefined) {
196
+ setInternalValue(newValue);
197
+ }
198
+ onChange === null || onChange === void 0 || onChange(newValue, getSelectedOptions(newValue));
199
+ if (option) {
200
+ onDeselect === null || onDeselect === void 0 || onDeselect(tagValue, option);
201
+ }
202
+ }, [disabled, value, controlledValue, normalizedOptions, onChange, onDeselect, getSelectedOptions]);
203
+
204
+ // 清除
205
+ var handleClear = useCallback(function (e) {
206
+ e.stopPropagation();
207
+ var newValue = isMultiple ? [] : '';
208
+ if (controlledValue === undefined) {
209
+ setInternalValue(newValue);
210
+ }
211
+ onChange === null || onChange === void 0 || onChange(newValue, isMultiple ? [] : {});
212
+ setSearchValue('');
213
+ }, [isMultiple, controlledValue, onChange]);
214
+
215
+ // 搜索
216
+ var handleSearch = useCallback(function (e) {
217
+ var newValue = e.target.value;
218
+ setSearchValue(newValue);
219
+ onSearch === null || onSearch === void 0 || onSearch(newValue);
220
+ setActiveIndex(-1);
221
+ }, [onSearch]);
222
+
223
+ // 键盘导航
224
+ var handleKeyDown = useCallback(function (e) {
225
+ if (!isOpen) {
226
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter') {
227
+ e.preventDefault();
228
+ setOpen(true);
229
+ }
230
+ return;
231
+ }
232
+ switch (e.key) {
233
+ case 'ArrowDown':
234
+ e.preventDefault();
235
+ setActiveIndex(function (prev) {
236
+ var next = prev + 1;
237
+ return next >= filteredOptions.length ? 0 : next;
238
+ });
239
+ break;
240
+ case 'ArrowUp':
241
+ e.preventDefault();
242
+ setActiveIndex(function (prev) {
243
+ var next = prev - 1;
244
+ return next < 0 ? filteredOptions.length - 1 : next;
245
+ });
246
+ break;
247
+ case 'Enter':
248
+ e.preventDefault();
249
+ if (activeIndex >= 0 && activeIndex < filteredOptions.length) {
250
+ handleSelect(filteredOptions[activeIndex]);
251
+ }
252
+ break;
253
+ case 'Escape':
254
+ e.preventDefault();
255
+ setOpen(false);
256
+ break;
257
+ case 'Backspace':
258
+ if (isMultiple && !searchValue && value.length > 0) {
259
+ var currentValues = value;
260
+ var lastValue = currentValues[currentValues.length - 1];
261
+ handleRemoveTag(lastValue, e);
262
+ }
263
+ break;
264
+ }
265
+ }, [isOpen, filteredOptions, activeIndex, handleSelect, setOpen, isMultiple, searchValue, value, handleRemoveTag]);
266
+
267
+ // 滚动到激活项
268
+ useEffect(function () {
269
+ if (activeIndex >= 0 && dropdownRef.current) {
270
+ var activeItem = dropdownRef.current.querySelector('.kage-select-option-active');
271
+ activeItem === null || activeItem === void 0 || activeItem.scrollIntoView({
272
+ block: 'nearest'
273
+ });
274
+ }
275
+ }, [activeIndex]);
276
+
277
+ // 点击外部关闭
278
+ useEffect(function () {
279
+ var handleClickOutside = function handleClickOutside(e) {
280
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
281
+ setOpen(false);
282
+ }
283
+ };
284
+ document.addEventListener('mousedown', handleClickOutside);
285
+ return function () {
286
+ return document.removeEventListener('mousedown', handleClickOutside);
287
+ };
288
+ }, [setOpen]);
289
+ var classNames = ['kage-select', "kage-select-".concat(size), disabled && 'kage-select-disabled', status && "kage-select-status-".concat(status), isOpen && 'kage-select-open', isMultiple && 'kage-select-multiple', className].filter(Boolean).join(' ');
290
+ var showClear = allowClear && !disabled && (isMultiple ? value.length > 0 : !!value);
291
+
292
+ // 渲染选择器
293
+ var renderSelector = function renderSelector() {
294
+ if (isMultiple) {
295
+ var selectedValues = value;
296
+ var selectedOptions = getSelectedOptions(selectedValues);
297
+ var displayTags = maxTagCount ? selectedOptions.slice(0, maxTagCount) : selectedOptions;
298
+ var omittedCount = selectedOptions.length - displayTags.length;
299
+ return /*#__PURE__*/_jsxs("div", {
300
+ className: "kage-select-selector",
301
+ children: [displayTags.map(function (opt) {
302
+ return /*#__PURE__*/_jsxs("span", {
303
+ className: "kage-select-tag",
304
+ children: [/*#__PURE__*/_jsx("span", {
305
+ className: "kage-select-tag-label",
306
+ children: maxTagTextLength && String(opt.label || opt.value).length > maxTagTextLength ? String(opt.label || opt.value).slice(0, maxTagTextLength) + '...' : opt.label || opt.value
307
+ }), !disabled && /*#__PURE__*/_jsx("span", {
308
+ className: "kage-select-tag-close",
309
+ onClick: function onClick(e) {
310
+ return handleRemoveTag(opt.value, e);
311
+ },
312
+ children: "\xD7"
313
+ })]
314
+ }, opt.value);
315
+ }), omittedCount > 0 && /*#__PURE__*/_jsx("span", {
316
+ className: "kage-select-tag",
317
+ children: typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(selectedOptions.slice(maxTagCount).map(function (opt) {
318
+ return opt.value;
319
+ })) : maxTagPlaceholder || "+".concat(omittedCount)
320
+ }), /*#__PURE__*/_jsx("input", {
321
+ ref: searchInputRef,
322
+ type: "text",
323
+ className: "kage-select-search-input",
324
+ value: searchValue,
325
+ disabled: disabled,
326
+ onChange: handleSearch,
327
+ onKeyDown: handleKeyDown
328
+ })]
329
+ });
330
+ }
331
+ var displayText = getDisplayText();
332
+ return /*#__PURE__*/_jsx("div", {
333
+ className: "kage-select-selector",
334
+ onClick: function onClick() {
335
+ return setOpen(!isOpen);
336
+ },
337
+ children: showSearch && isOpen ? /*#__PURE__*/_jsx("input", {
338
+ ref: searchInputRef,
339
+ type: "text",
340
+ className: "kage-select-search-input",
341
+ value: searchValue,
342
+ placeholder: placeholder,
343
+ disabled: disabled,
344
+ onChange: handleSearch,
345
+ onKeyDown: handleKeyDown
346
+ }) : /*#__PURE__*/_jsx("span", {
347
+ className: "kage-select-selection-item ".concat(!displayText ? 'kage-select-placeholder' : ''),
348
+ children: displayText || placeholder
349
+ })
350
+ });
351
+ };
352
+ return /*#__PURE__*/_jsxs("div", {
353
+ ref: containerRef,
354
+ className: classNames,
355
+ style: style,
356
+ onFocus: onFocus,
357
+ onBlur: onBlur,
358
+ tabIndex: disabled ? -1 : 0,
359
+ children: [renderSelector(), /*#__PURE__*/_jsx("span", {
360
+ className: "kage-select-arrow",
361
+ children: "\u25BC"
362
+ }), showClear && /*#__PURE__*/_jsx("span", {
363
+ className: "kage-select-clear",
364
+ onClick: handleClear,
365
+ children: "\xD7"
366
+ }), isOpen && /*#__PURE__*/_jsx("div", {
367
+ ref: dropdownRef,
368
+ className: "kage-select-dropdown",
369
+ children: loading ? /*#__PURE__*/_jsx("div", {
370
+ className: "kage-select-loading",
371
+ children: "\u52A0\u8F7D\u4E2D..."
372
+ }) : filteredOptions.length > 0 ? filteredOptions.map(function (option, index) {
373
+ var isSelected = isMultiple ? value.includes(option.value) : value === option.value;
374
+ var optionClassNames = ['kage-select-option', option.disabled && 'kage-select-option-disabled', index === activeIndex && 'kage-select-option-active', isSelected && 'kage-select-option-selected'].filter(Boolean).join(' ');
375
+ return /*#__PURE__*/_jsxs("div", {
376
+ className: optionClassNames,
377
+ onClick: function onClick() {
378
+ return handleSelect(option);
379
+ },
380
+ onMouseEnter: function onMouseEnter() {
381
+ return setActiveIndex(index);
382
+ },
383
+ children: [isMultiple && /*#__PURE__*/_jsx("span", {
384
+ className: "kage-select-checkbox ".concat(isSelected ? 'checked' : ''),
385
+ children: isSelected && '✓'
386
+ }), /*#__PURE__*/_jsx("span", {
387
+ className: "kage-select-option-label",
388
+ children: option.label || option.value
389
+ })]
390
+ }, option.value);
391
+ }) : /*#__PURE__*/_jsx("div", {
392
+ className: "kage-select-empty",
393
+ children: notFoundContent
394
+ })
395
+ })]
396
+ });
397
+ };
398
+ export default Select;