wssf-kage-ui 0.1.1 → 0.1.3

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 (257) hide show
  1. package/dist/cjs/Alert/index.d.ts +37 -0
  2. package/dist/cjs/Alert/index.js +124 -0
  3. package/dist/cjs/Alert/style.less +248 -0
  4. package/dist/cjs/Avatar/index.d.ts +47 -0
  5. package/dist/cjs/Avatar/index.js +147 -0
  6. package/dist/cjs/Avatar/style.less +193 -0
  7. package/dist/cjs/Badge/index.d.ts +48 -0
  8. package/dist/cjs/Badge/index.js +141 -0
  9. package/dist/cjs/Badge/style.less +237 -0
  10. package/dist/cjs/Calendar/index.d.ts +33 -0
  11. package/dist/cjs/Calendar/index.js +296 -0
  12. package/dist/cjs/Calendar/style.less +384 -0
  13. package/dist/cjs/Card/index.d.ts +68 -0
  14. package/dist/cjs/Card/index.js +155 -0
  15. package/dist/cjs/Card/style.less +356 -0
  16. package/dist/cjs/Carousel/index.d.ts +33 -0
  17. package/dist/cjs/Carousel/index.js +169 -0
  18. package/dist/cjs/Carousel/style.less +232 -0
  19. package/dist/cjs/Collapse/index.d.ts +55 -0
  20. package/dist/cjs/Collapse/index.js +191 -0
  21. package/dist/cjs/Collapse/style.less +217 -0
  22. package/dist/cjs/Descriptions/index.d.ts +54 -0
  23. package/dist/cjs/Descriptions/index.js +181 -0
  24. package/dist/cjs/Descriptions/style.less +259 -0
  25. package/dist/cjs/Drawer/index.d.ts +57 -0
  26. package/dist/cjs/Drawer/index.js +203 -0
  27. package/dist/cjs/Drawer/style.less +215 -0
  28. package/dist/cjs/Empty/index.d.ts +21 -0
  29. package/dist/cjs/Empty/index.js +115 -0
  30. package/dist/cjs/Empty/style.less +103 -0
  31. package/dist/cjs/FloatButton/index.d.ts +54 -0
  32. package/dist/cjs/FloatButton/index.js +119 -0
  33. package/dist/cjs/FloatButton/style.less +266 -0
  34. package/dist/cjs/Image/index.d.ts +30 -0
  35. package/dist/cjs/Image/index.js +153 -0
  36. package/dist/cjs/Image/style.less +156 -0
  37. package/dist/cjs/Input/index.d.ts +24 -0
  38. package/dist/cjs/Input/index.js +158 -0
  39. package/dist/cjs/Input/style.less +276 -0
  40. package/dist/cjs/InputNumber/index.d.ts +47 -0
  41. package/dist/cjs/InputNumber/index.js +323 -0
  42. package/dist/cjs/InputNumber/style.less +392 -0
  43. package/dist/cjs/Mentions/index.d.ts +57 -0
  44. package/dist/cjs/Mentions/index.js +378 -0
  45. package/dist/cjs/Mentions/style.less +297 -0
  46. package/dist/cjs/Message/index.d.ts +38 -0
  47. package/dist/cjs/Message/index.js +292 -0
  48. package/dist/cjs/Message/style.less +183 -0
  49. package/dist/cjs/Modal/index.d.ts +63 -0
  50. package/dist/cjs/Modal/index.js +254 -0
  51. package/dist/cjs/Modal/style.less +298 -0
  52. package/dist/cjs/Notification/index.d.ts +48 -0
  53. package/dist/cjs/Notification/index.js +340 -0
  54. package/dist/cjs/Notification/style.less +260 -0
  55. package/dist/cjs/Popconfirm/index.d.ts +58 -0
  56. package/dist/cjs/Popconfirm/index.js +393 -0
  57. package/dist/cjs/Popconfirm/style.less +417 -0
  58. package/dist/cjs/Popover/index.d.ts +30 -0
  59. package/dist/cjs/Popover/index.js +131 -0
  60. package/dist/cjs/Popover/style.less +279 -0
  61. package/dist/cjs/Progress/index.d.ts +43 -0
  62. package/dist/cjs/Progress/index.js +213 -0
  63. package/dist/cjs/Progress/style.less +206 -0
  64. package/dist/cjs/QRCode/index.d.ts +30 -0
  65. package/dist/cjs/QRCode/index.js +167 -0
  66. package/dist/cjs/QRCode/style.less +201 -0
  67. package/dist/cjs/Radio/index.d.ts +70 -0
  68. package/dist/cjs/Radio/index.js +199 -0
  69. package/dist/cjs/Radio/style.less +326 -0
  70. package/dist/cjs/Rate/index.d.ts +37 -0
  71. package/dist/cjs/Rate/index.js +151 -0
  72. package/dist/cjs/Rate/style.less +170 -0
  73. package/dist/cjs/Result/index.d.ts +25 -0
  74. package/dist/cjs/Result/index.js +63 -0
  75. package/dist/cjs/Result/style.less +111 -0
  76. package/dist/cjs/Segmented/index.d.ts +31 -0
  77. package/dist/cjs/Segmented/index.js +121 -0
  78. package/dist/cjs/Segmented/style.less +167 -0
  79. package/dist/cjs/Select/index.d.ts +67 -0
  80. package/dist/cjs/Select/index.js +403 -0
  81. package/dist/cjs/Select/style.less +523 -0
  82. package/dist/cjs/Skeleton/index.d.ts +88 -0
  83. package/dist/cjs/Skeleton/index.js +207 -0
  84. package/dist/cjs/Skeleton/style.less +487 -0
  85. package/dist/cjs/Slider/index.d.ts +41 -0
  86. package/dist/cjs/Slider/index.js +325 -0
  87. package/dist/cjs/Slider/style.less +287 -0
  88. package/dist/cjs/Spin/index.d.ts +25 -0
  89. package/dist/cjs/Spin/index.js +98 -0
  90. package/dist/cjs/Spin/style.less +169 -0
  91. package/dist/cjs/Statistic/index.d.ts +26 -0
  92. package/dist/cjs/Statistic/index.js +71 -0
  93. package/dist/cjs/Statistic/style.less +94 -0
  94. package/dist/cjs/Switch/index.d.ts +28 -0
  95. package/dist/cjs/Switch/index.js +71 -0
  96. package/dist/cjs/Switch/style.less +212 -0
  97. package/dist/cjs/Table/index.d.ts +188 -0
  98. package/dist/cjs/Table/index.js +787 -0
  99. package/dist/cjs/Table/style.less +663 -0
  100. package/dist/cjs/Tag/index.d.ts +51 -0
  101. package/dist/cjs/Tag/index.js +142 -0
  102. package/dist/cjs/Tag/style.less +356 -0
  103. package/dist/cjs/TimePicker/index.d.ts +51 -0
  104. package/dist/cjs/TimePicker/index.js +332 -0
  105. package/dist/cjs/TimePicker/style.less +384 -0
  106. package/dist/cjs/Timeline/index.d.ts +47 -0
  107. package/dist/cjs/Timeline/index.js +127 -0
  108. package/dist/cjs/Timeline/style.less +265 -0
  109. package/dist/cjs/Tooltip/index.d.ts +53 -0
  110. package/dist/cjs/Tooltip/index.js +468 -0
  111. package/dist/cjs/Tooltip/style.less +237 -0
  112. package/dist/cjs/Transfer/index.d.ts +52 -0
  113. package/dist/cjs/Transfer/index.js +344 -0
  114. package/dist/cjs/Transfer/style.less +331 -0
  115. package/dist/cjs/Tree/index.d.ts +82 -0
  116. package/dist/cjs/Tree/index.js +226 -0
  117. package/dist/cjs/Tree/style.less +313 -0
  118. package/dist/cjs/TreeSelect/index.d.ts +54 -0
  119. package/dist/cjs/TreeSelect/index.js +373 -0
  120. package/dist/cjs/TreeSelect/style.less +471 -0
  121. package/dist/cjs/Upload/index.d.ts +65 -0
  122. package/dist/cjs/Upload/index.js +517 -0
  123. package/dist/cjs/Upload/style.less +424 -0
  124. package/dist/cjs/Watermark/index.d.ts +41 -0
  125. package/dist/cjs/Watermark/index.js +353 -0
  126. package/dist/cjs/Watermark/style.less +31 -0
  127. package/dist/cjs/index.d.ts +84 -0
  128. package/dist/cjs/index.js +318 -0
  129. package/dist/esm/Alert/index.d.ts +37 -0
  130. package/dist/esm/Alert/index.js +121 -0
  131. package/dist/esm/Alert/style.less +248 -0
  132. package/dist/esm/Avatar/index.d.ts +47 -0
  133. package/dist/esm/Avatar/index.js +142 -0
  134. package/dist/esm/Avatar/style.less +193 -0
  135. package/dist/esm/Badge/index.d.ts +48 -0
  136. package/dist/esm/Badge/index.js +137 -0
  137. package/dist/esm/Badge/style.less +237 -0
  138. package/dist/esm/Calendar/index.d.ts +33 -0
  139. package/dist/esm/Calendar/index.js +291 -0
  140. package/dist/esm/Calendar/style.less +384 -0
  141. package/dist/esm/Card/index.d.ts +68 -0
  142. package/dist/esm/Card/index.js +149 -0
  143. package/dist/esm/Card/style.less +356 -0
  144. package/dist/esm/Carousel/index.d.ts +33 -0
  145. package/dist/esm/Carousel/index.js +163 -0
  146. package/dist/esm/Carousel/style.less +232 -0
  147. package/dist/esm/Collapse/index.d.ts +55 -0
  148. package/dist/esm/Collapse/index.js +187 -0
  149. package/dist/esm/Collapse/style.less +217 -0
  150. package/dist/esm/Descriptions/index.d.ts +54 -0
  151. package/dist/esm/Descriptions/index.js +179 -0
  152. package/dist/esm/Descriptions/style.less +259 -0
  153. package/dist/esm/Drawer/index.d.ts +57 -0
  154. package/dist/esm/Drawer/index.js +202 -0
  155. package/dist/esm/Drawer/style.less +215 -0
  156. package/dist/esm/Empty/index.d.ts +21 -0
  157. package/dist/esm/Empty/index.js +109 -0
  158. package/dist/esm/Empty/style.less +103 -0
  159. package/dist/esm/FloatButton/index.d.ts +54 -0
  160. package/dist/esm/FloatButton/index.js +123 -0
  161. package/dist/esm/FloatButton/style.less +266 -0
  162. package/dist/esm/Image/index.d.ts +30 -0
  163. package/dist/esm/Image/index.js +149 -0
  164. package/dist/esm/Image/style.less +156 -0
  165. package/dist/esm/Input/index.d.ts +24 -0
  166. package/dist/esm/Input/index.js +151 -0
  167. package/dist/esm/Input/style.less +276 -0
  168. package/dist/esm/InputNumber/index.d.ts +47 -0
  169. package/dist/esm/InputNumber/index.js +316 -0
  170. package/dist/esm/InputNumber/style.less +392 -0
  171. package/dist/esm/Mentions/index.d.ts +57 -0
  172. package/dist/esm/Mentions/index.js +374 -0
  173. package/dist/esm/Mentions/style.less +297 -0
  174. package/dist/esm/Message/index.d.ts +38 -0
  175. package/dist/esm/Message/index.js +294 -0
  176. package/dist/esm/Message/style.less +183 -0
  177. package/dist/esm/Modal/index.d.ts +63 -0
  178. package/dist/esm/Modal/index.js +251 -0
  179. package/dist/esm/Modal/style.less +298 -0
  180. package/dist/esm/Notification/index.d.ts +48 -0
  181. package/dist/esm/Notification/index.js +345 -0
  182. package/dist/esm/Notification/style.less +260 -0
  183. package/dist/esm/Popconfirm/index.d.ts +58 -0
  184. package/dist/esm/Popconfirm/index.js +389 -0
  185. package/dist/esm/Popconfirm/style.less +417 -0
  186. package/dist/esm/Popover/index.d.ts +30 -0
  187. package/dist/esm/Popover/index.js +126 -0
  188. package/dist/esm/Popover/style.less +279 -0
  189. package/dist/esm/Progress/index.d.ts +43 -0
  190. package/dist/esm/Progress/index.js +208 -0
  191. package/dist/esm/Progress/style.less +206 -0
  192. package/dist/esm/QRCode/index.d.ts +30 -0
  193. package/dist/esm/QRCode/index.js +158 -0
  194. package/dist/esm/QRCode/style.less +201 -0
  195. package/dist/esm/Radio/index.d.ts +70 -0
  196. package/dist/esm/Radio/index.js +193 -0
  197. package/dist/esm/Radio/style.less +326 -0
  198. package/dist/esm/Rate/index.d.ts +37 -0
  199. package/dist/esm/Rate/index.js +143 -0
  200. package/dist/esm/Rate/style.less +170 -0
  201. package/dist/esm/Result/index.d.ts +25 -0
  202. package/dist/esm/Result/index.js +57 -0
  203. package/dist/esm/Result/style.less +111 -0
  204. package/dist/esm/Segmented/index.d.ts +31 -0
  205. package/dist/esm/Segmented/index.js +113 -0
  206. package/dist/esm/Segmented/style.less +167 -0
  207. package/dist/esm/Select/index.d.ts +67 -0
  208. package/dist/esm/Select/index.js +398 -0
  209. package/dist/esm/Select/style.less +523 -0
  210. package/dist/esm/Skeleton/index.d.ts +88 -0
  211. package/dist/esm/Skeleton/index.js +213 -0
  212. package/dist/esm/Skeleton/style.less +487 -0
  213. package/dist/esm/Slider/index.d.ts +41 -0
  214. package/dist/esm/Slider/index.js +318 -0
  215. package/dist/esm/Slider/style.less +287 -0
  216. package/dist/esm/Spin/index.d.ts +25 -0
  217. package/dist/esm/Spin/index.js +95 -0
  218. package/dist/esm/Spin/style.less +169 -0
  219. package/dist/esm/Statistic/index.d.ts +26 -0
  220. package/dist/esm/Statistic/index.js +65 -0
  221. package/dist/esm/Statistic/style.less +94 -0
  222. package/dist/esm/Switch/index.d.ts +28 -0
  223. package/dist/esm/Switch/index.js +63 -0
  224. package/dist/esm/Switch/style.less +212 -0
  225. package/dist/esm/Table/index.d.ts +188 -0
  226. package/dist/esm/Table/index.js +797 -0
  227. package/dist/esm/Table/style.less +663 -0
  228. package/dist/esm/Tag/index.d.ts +51 -0
  229. package/dist/esm/Tag/index.js +144 -0
  230. package/dist/esm/Tag/style.less +356 -0
  231. package/dist/esm/TimePicker/index.d.ts +51 -0
  232. package/dist/esm/TimePicker/index.js +327 -0
  233. package/dist/esm/TimePicker/style.less +384 -0
  234. package/dist/esm/Timeline/index.d.ts +47 -0
  235. package/dist/esm/Timeline/index.js +130 -0
  236. package/dist/esm/Timeline/style.less +265 -0
  237. package/dist/esm/Tooltip/index.d.ts +53 -0
  238. package/dist/esm/Tooltip/index.js +471 -0
  239. package/dist/esm/Tooltip/style.less +237 -0
  240. package/dist/esm/Transfer/index.d.ts +52 -0
  241. package/dist/esm/Transfer/index.js +340 -0
  242. package/dist/esm/Transfer/style.less +331 -0
  243. package/dist/esm/Tree/index.d.ts +82 -0
  244. package/dist/esm/Tree/index.js +225 -0
  245. package/dist/esm/Tree/style.less +313 -0
  246. package/dist/esm/TreeSelect/index.d.ts +54 -0
  247. package/dist/esm/TreeSelect/index.js +369 -0
  248. package/dist/esm/TreeSelect/style.less +471 -0
  249. package/dist/esm/Upload/index.d.ts +65 -0
  250. package/dist/esm/Upload/index.js +513 -0
  251. package/dist/esm/Upload/style.less +424 -0
  252. package/dist/esm/Watermark/index.d.ts +41 -0
  253. package/dist/esm/Watermark/index.js +349 -0
  254. package/dist/esm/Watermark/style.less +31 -0
  255. package/dist/esm/index.d.ts +84 -0
  256. package/dist/esm/index.js +43 -1
  257. package/package.json +6 -3
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export interface SelectOption {
4
+ /** 选项值 */
5
+ value: string | number;
6
+ /** 显示文本 */
7
+ label?: React.ReactNode;
8
+ /** 是否禁用 */
9
+ disabled?: boolean;
10
+ }
11
+ export type SelectValue = string | number | (string | number)[];
12
+ export interface SelectProps {
13
+ /** 当前值 */
14
+ value?: SelectValue;
15
+ /** 默认值 */
16
+ defaultValue?: SelectValue;
17
+ /** 选项数据 */
18
+ options?: (SelectOption | string | number)[];
19
+ /** 占位符 */
20
+ placeholder?: string;
21
+ /** 是否禁用 */
22
+ disabled?: boolean;
23
+ /** 是否允许清除 */
24
+ allowClear?: boolean;
25
+ /** 是否支持搜索 */
26
+ showSearch?: boolean;
27
+ /** 是否多选 */
28
+ mode?: 'multiple' | 'tags';
29
+ /** 尺寸 */
30
+ size?: 'large' | 'middle' | 'small';
31
+ /** 状态 */
32
+ status?: 'error' | 'warning';
33
+ /** 下拉菜单是否与选择器同宽 */
34
+ popupMatchSelectWidth?: boolean | number;
35
+ /** 过滤选项 */
36
+ filterOption?: boolean | ((input: string, option: SelectOption) => boolean);
37
+ /** 无匹配时的内容 */
38
+ notFoundContent?: React.ReactNode;
39
+ /** 获取选项时的加载状态 */
40
+ loading?: boolean;
41
+ /** 最多显示多少个 tag */
42
+ maxTagCount?: number;
43
+ /** 隐藏 tag 时显示的内容 */
44
+ maxTagPlaceholder?: React.ReactNode | ((omittedValues: SelectValue[]) => React.ReactNode);
45
+ /** 最多显示多少个 tag 的文本长度 */
46
+ maxTagTextLength?: number;
47
+ /** 值变化回调 */
48
+ onChange?: (value: SelectValue, option: SelectOption | SelectOption[]) => void;
49
+ /** 选中回调 */
50
+ onSelect?: (value: string | number, option: SelectOption) => void;
51
+ /** 取消选中回调 */
52
+ onDeselect?: (value: string | number, option: SelectOption) => void;
53
+ /** 搜索回调 */
54
+ onSearch?: (value: string) => void;
55
+ /** 下拉菜单打开/关闭回调 */
56
+ onDropdownVisibleChange?: (open: boolean) => void;
57
+ /** 失焦回调 */
58
+ onBlur?: (e: React.FocusEvent) => void;
59
+ /** 聚焦回调 */
60
+ onFocus?: (e: React.FocusEvent) => void;
61
+ /** 自定义类名 */
62
+ className?: string;
63
+ /** 自定义样式 */
64
+ style?: React.CSSProperties;
65
+ }
66
+ export declare const Select: React.FC<SelectProps>;
67
+ export default Select;
@@ -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;