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