wssf-kage-ui 0.1.0 → 0.1.1

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 (132) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/Anchor/index.d.ts +56 -0
  3. package/dist/cjs/Anchor/index.js +307 -0
  4. package/dist/cjs/Anchor/style.less +183 -0
  5. package/dist/cjs/AutoComplete/index.d.ts +54 -0
  6. package/dist/cjs/AutoComplete/index.js +273 -0
  7. package/dist/cjs/AutoComplete/style.less +325 -0
  8. package/dist/cjs/Breadcrumb/index.d.ts +51 -0
  9. package/dist/cjs/Breadcrumb/index.js +129 -0
  10. package/dist/cjs/Breadcrumb/style.less +96 -0
  11. package/dist/cjs/Cascader/index.d.ts +53 -0
  12. package/dist/cjs/Cascader/index.js +338 -0
  13. package/dist/cjs/Cascader/style.less +457 -0
  14. package/dist/cjs/Checkbox/index.d.ts +52 -0
  15. package/dist/cjs/Checkbox/index.js +158 -0
  16. package/dist/cjs/Checkbox/style.less +211 -0
  17. package/dist/cjs/ColorPicker/index.d.ts +28 -0
  18. package/dist/cjs/ColorPicker/index.js +381 -0
  19. package/dist/cjs/ColorPicker/style.less +276 -0
  20. package/dist/cjs/DatePicker/index.d.ts +32 -0
  21. package/dist/cjs/DatePicker/index.js +377 -0
  22. package/dist/cjs/DatePicker/style.less +498 -0
  23. package/dist/cjs/Divider/index.d.ts +24 -0
  24. package/dist/cjs/Divider/index.js +75 -0
  25. package/dist/cjs/Divider/style.less +144 -0
  26. package/dist/cjs/Dropdown/index.d.ts +88 -0
  27. package/dist/cjs/Dropdown/index.js +253 -0
  28. package/dist/cjs/Dropdown/style.less +430 -0
  29. package/dist/cjs/Flex/index.d.ts +37 -0
  30. package/dist/cjs/Flex/index.js +76 -0
  31. package/dist/cjs/Flex/style.less +13 -0
  32. package/dist/cjs/Form/index.d.ts +89 -0
  33. package/dist/cjs/Form/index.js +421 -0
  34. package/dist/cjs/Form/style.less +203 -0
  35. package/dist/cjs/Grid/index.d.ts +69 -0
  36. package/dist/cjs/Grid/index.js +171 -0
  37. package/dist/cjs/Grid/style.less +273 -0
  38. package/dist/cjs/Layout/index.d.ts +74 -0
  39. package/dist/cjs/Layout/index.js +166 -0
  40. package/dist/cjs/Layout/style.less +145 -0
  41. package/dist/cjs/Masonry/index.d.ts +18 -0
  42. package/dist/cjs/Masonry/index.js +146 -0
  43. package/dist/cjs/Masonry/style.less +15 -0
  44. package/dist/cjs/Menu/index.d.ts +87 -0
  45. package/dist/cjs/Menu/index.js +306 -0
  46. package/dist/cjs/Menu/style.less +363 -0
  47. package/dist/cjs/Pagination/index.d.ts +38 -0
  48. package/dist/cjs/Pagination/index.js +255 -0
  49. package/dist/cjs/Pagination/style.less +353 -0
  50. package/dist/cjs/Space/index.d.ts +41 -0
  51. package/dist/cjs/Space/index.js +137 -0
  52. package/dist/cjs/Space/style.less +116 -0
  53. package/dist/cjs/Splitter/index.d.ts +43 -0
  54. package/dist/cjs/Splitter/index.js +219 -0
  55. package/dist/cjs/Splitter/style.less +99 -0
  56. package/dist/cjs/Steps/index.d.ts +58 -0
  57. package/dist/cjs/Steps/index.js +180 -0
  58. package/dist/cjs/Steps/style.less +507 -0
  59. package/dist/cjs/Tabs/index.d.ts +58 -0
  60. package/dist/cjs/Tabs/index.js +196 -0
  61. package/dist/cjs/Tabs/style.less +423 -0
  62. package/dist/cjs/Typography/index.d.ts +102 -0
  63. package/dist/cjs/Typography/index.js +168 -0
  64. package/dist/cjs/Typography/style.less +246 -0
  65. package/dist/cjs/index.d.ts +42 -0
  66. package/dist/cjs/index.js +260 -1
  67. package/dist/esm/Anchor/index.d.ts +56 -0
  68. package/dist/esm/Anchor/index.js +302 -0
  69. package/dist/esm/Anchor/style.less +183 -0
  70. package/dist/esm/AutoComplete/index.d.ts +54 -0
  71. package/dist/esm/AutoComplete/index.js +268 -0
  72. package/dist/esm/AutoComplete/style.less +325 -0
  73. package/dist/esm/Breadcrumb/index.d.ts +51 -0
  74. package/dist/esm/Breadcrumb/index.js +124 -0
  75. package/dist/esm/Breadcrumb/style.less +96 -0
  76. package/dist/esm/Cascader/index.d.ts +53 -0
  77. package/dist/esm/Cascader/index.js +333 -0
  78. package/dist/esm/Cascader/style.less +457 -0
  79. package/dist/esm/Checkbox/index.d.ts +52 -0
  80. package/dist/esm/Checkbox/index.js +152 -0
  81. package/dist/esm/Checkbox/style.less +211 -0
  82. package/dist/esm/ColorPicker/index.d.ts +28 -0
  83. package/dist/esm/ColorPicker/index.js +375 -0
  84. package/dist/esm/ColorPicker/style.less +276 -0
  85. package/dist/esm/DatePicker/index.d.ts +32 -0
  86. package/dist/esm/DatePicker/index.js +371 -0
  87. package/dist/esm/DatePicker/style.less +498 -0
  88. package/dist/esm/Divider/index.d.ts +24 -0
  89. package/dist/esm/Divider/index.js +68 -0
  90. package/dist/esm/Divider/style.less +144 -0
  91. package/dist/esm/Dropdown/index.d.ts +88 -0
  92. package/dist/esm/Dropdown/index.js +249 -0
  93. package/dist/esm/Dropdown/style.less +430 -0
  94. package/dist/esm/Flex/index.d.ts +37 -0
  95. package/dist/esm/Flex/index.js +69 -0
  96. package/dist/esm/Flex/style.less +13 -0
  97. package/dist/esm/Form/index.d.ts +89 -0
  98. package/dist/esm/Form/index.js +416 -0
  99. package/dist/esm/Form/style.less +203 -0
  100. package/dist/esm/Grid/index.d.ts +69 -0
  101. package/dist/esm/Grid/index.js +165 -0
  102. package/dist/esm/Grid/style.less +273 -0
  103. package/dist/esm/Layout/index.d.ts +74 -0
  104. package/dist/esm/Layout/index.js +161 -0
  105. package/dist/esm/Layout/style.less +145 -0
  106. package/dist/esm/Masonry/index.d.ts +18 -0
  107. package/dist/esm/Masonry/index.js +138 -0
  108. package/dist/esm/Masonry/style.less +15 -0
  109. package/dist/esm/Menu/index.d.ts +87 -0
  110. package/dist/esm/Menu/index.js +301 -0
  111. package/dist/esm/Menu/style.less +363 -0
  112. package/dist/esm/Pagination/index.d.ts +38 -0
  113. package/dist/esm/Pagination/index.js +247 -0
  114. package/dist/esm/Pagination/style.less +353 -0
  115. package/dist/esm/Space/index.d.ts +41 -0
  116. package/dist/esm/Space/index.js +131 -0
  117. package/dist/esm/Space/style.less +116 -0
  118. package/dist/esm/Splitter/index.d.ts +43 -0
  119. package/dist/esm/Splitter/index.js +214 -0
  120. package/dist/esm/Splitter/style.less +99 -0
  121. package/dist/esm/Steps/index.d.ts +58 -0
  122. package/dist/esm/Steps/index.js +174 -0
  123. package/dist/esm/Steps/style.less +507 -0
  124. package/dist/esm/Tabs/index.d.ts +58 -0
  125. package/dist/esm/Tabs/index.js +193 -0
  126. package/dist/esm/Tabs/style.less +423 -0
  127. package/dist/esm/Typography/index.d.ts +102 -0
  128. package/dist/esm/Typography/index.js +161 -0
  129. package/dist/esm/Typography/style.less +246 -0
  130. package/dist/esm/index.d.ts +42 -0
  131. package/dist/esm/index.js +22 -1
  132. package/package.json +13 -10
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.BreadcrumbSeparator = exports.BreadcrumbItem = exports.Breadcrumb = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ require("./style.less");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ // ============ Breadcrumb Item ============
12
+
13
+ var BreadcrumbItem = exports.BreadcrumbItem = function BreadcrumbItem(_ref) {
14
+ var href = _ref.href,
15
+ title = _ref.title,
16
+ icon = _ref.icon,
17
+ onClick = _ref.onClick,
18
+ children = _ref.children,
19
+ _ref$className = _ref.className,
20
+ className = _ref$className === void 0 ? '' : _ref$className;
21
+ var content = children || /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
22
+ children: [icon && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
23
+ className: "kage-breadcrumb-icon",
24
+ children: icon
25
+ }), title]
26
+ });
27
+ var handleClick = function handleClick(e) {
28
+ onClick === null || onClick === void 0 || onClick(e);
29
+ };
30
+ if (href) {
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
32
+ href: href,
33
+ className: "kage-breadcrumb-link ".concat(className),
34
+ onClick: handleClick,
35
+ children: content
36
+ });
37
+ }
38
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
39
+ className: "kage-breadcrumb-link ".concat(className),
40
+ onClick: handleClick,
41
+ children: content
42
+ });
43
+ };
44
+ BreadcrumbItem.displayName = 'BreadcrumbItem';
45
+
46
+ // ============ Breadcrumb Separator ============
47
+
48
+ var BreadcrumbSeparator = exports.BreadcrumbSeparator = function BreadcrumbSeparator(_ref2) {
49
+ var _ref2$children = _ref2.children,
50
+ children = _ref2$children === void 0 ? '/' : _ref2$children;
51
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
52
+ className: "kage-breadcrumb-separator",
53
+ children: children
54
+ });
55
+ };
56
+ BreadcrumbSeparator.displayName = 'BreadcrumbSeparator';
57
+
58
+ // ============ Breadcrumb ============
59
+
60
+ var Breadcrumb = exports.Breadcrumb = function Breadcrumb(_ref3) {
61
+ var items = _ref3.items,
62
+ _ref3$separator = _ref3.separator,
63
+ separator = _ref3$separator === void 0 ? '/' : _ref3$separator,
64
+ children = _ref3.children,
65
+ _ref3$className = _ref3.className,
66
+ className = _ref3$className === void 0 ? '' : _ref3$className,
67
+ style = _ref3.style;
68
+ var classNames = ['kage-breadcrumb', className].filter(Boolean).join(' ');
69
+
70
+ // 如果有 items 配置,使用配置渲染
71
+ if (items && items.length > 0) {
72
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("nav", {
73
+ className: classNames,
74
+ style: style,
75
+ "aria-label": "breadcrumb",
76
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("ol", {
77
+ className: "kage-breadcrumb-list",
78
+ children: items.map(function (item, index) {
79
+ var isLast = index === items.length - 1;
80
+ var key = item.key || index;
81
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
82
+ className: "kage-breadcrumb-item",
83
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(BreadcrumbItem, {
84
+ href: isLast ? undefined : item.href,
85
+ title: item.title,
86
+ icon: item.icon,
87
+ onClick: item.onClick,
88
+ className: isLast ? 'kage-breadcrumb-link-current' : ''
89
+ }), !isLast && /*#__PURE__*/(0, _jsxRuntime.jsx)(BreadcrumbSeparator, {
90
+ children: separator
91
+ })]
92
+ }, key);
93
+ })
94
+ })
95
+ });
96
+ }
97
+
98
+ // 使用 children 渲染
99
+ var childArray = _react.default.Children.toArray(children);
100
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("nav", {
101
+ className: classNames,
102
+ style: style,
103
+ "aria-label": "breadcrumb",
104
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("ol", {
105
+ className: "kage-breadcrumb-list",
106
+ children: childArray.map(function (child, index) {
107
+ var _child$type;
108
+ var isLast = index === childArray.length - 1;
109
+
110
+ // 如果是 Separator,直接渲染
111
+ if ( /*#__PURE__*/_react.default.isValidElement(child) && ((_child$type = child.type) === null || _child$type === void 0 ? void 0 : _child$type.displayName) === 'BreadcrumbSeparator') {
112
+ return child;
113
+ }
114
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
115
+ className: "kage-breadcrumb-item",
116
+ children: [/*#__PURE__*/_react.default.isValidElement(child) ? /*#__PURE__*/_react.default.cloneElement(child, {
117
+ className: "".concat(child.props.className || '', " ").concat(isLast ? 'kage-breadcrumb-link-current' : '').trim()
118
+ }) : child, !isLast && /*#__PURE__*/(0, _jsxRuntime.jsx)(BreadcrumbSeparator, {
119
+ children: separator
120
+ })]
121
+ }, index);
122
+ })
123
+ })
124
+ });
125
+ };
126
+ Breadcrumb.Item = BreadcrumbItem;
127
+ Breadcrumb.Separator = BreadcrumbSeparator;
128
+ Breadcrumb.displayName = 'Breadcrumb';
129
+ var _default = exports.default = Breadcrumb;
@@ -0,0 +1,96 @@
1
+ // Breadcrumb 面包屑组件样式
2
+
3
+ @prefix: kage-breadcrumb;
4
+
5
+ // ============ 浅色模式(默认) ============
6
+ .@{prefix} {
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ padding: 0;
10
+ font-size: 14px;
11
+ line-height: 1.5;
12
+ color: rgba(0, 0, 0, 0.45);
13
+ }
14
+
15
+ .@{prefix}-list {
16
+ display: flex;
17
+ flex-wrap: wrap;
18
+ align-items: center;
19
+ margin: 0;
20
+ padding: 0;
21
+ list-style: none;
22
+ }
23
+
24
+ .@{prefix}-item {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ }
28
+
29
+ .@{prefix}-link {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ gap: 6px;
33
+ color: rgba(0, 0, 0, 0.88);
34
+ text-decoration: none;
35
+ cursor: pointer;
36
+ transition: color 0.2s ease;
37
+
38
+ &:hover {
39
+ color: #6366f1;
40
+ }
41
+
42
+ &-current {
43
+ color: rgba(0, 0, 0, 0.88);
44
+ cursor: default;
45
+ font-weight: 500;
46
+
47
+ &:hover {
48
+ color: rgba(0, 0, 0, 0.88);
49
+ }
50
+ }
51
+ }
52
+
53
+ .@{prefix}-icon {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ font-size: 14px;
57
+ }
58
+
59
+ .@{prefix}-separator {
60
+ margin: 0 8px;
61
+ color: rgba(0, 0, 0, 0.45);
62
+ user-select: none;
63
+ }
64
+
65
+ // ============ 暗色模式适配 ============
66
+ // 仅通过 dumi 主题选择器,不使用 prefers-color-scheme
67
+ // 这样可以避免系统暗色+dumi浅色主题时的冲突
68
+
69
+ [data-theme='dark'],
70
+ [data-prefers-color-scheme='dark'],
71
+ [data-prefers-color='dark'] {
72
+ .@{prefix} {
73
+ color: rgba(255, 255, 255, 0.45);
74
+ }
75
+
76
+ .@{prefix}-link {
77
+ color: rgba(255, 255, 255, 0.65);
78
+
79
+ &:hover {
80
+ color: #818cf8;
81
+ }
82
+
83
+ &-current {
84
+ color: rgba(255, 255, 255, 0.85);
85
+
86
+ &:hover {
87
+ color: rgba(255, 255, 255, 0.85);
88
+ }
89
+ }
90
+ }
91
+
92
+ .@{prefix}-separator {
93
+ color: rgba(255, 255, 255, 0.3);
94
+ }
95
+ }
96
+
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import './style.less';
3
+ export interface CascaderOption {
4
+ /** 选项值 */
5
+ value: string | number;
6
+ /** 显示文本 */
7
+ label: React.ReactNode;
8
+ /** 子选项 */
9
+ children?: CascaderOption[];
10
+ /** 是否禁用 */
11
+ disabled?: boolean;
12
+ /** 是否为叶子节点 */
13
+ isLeaf?: boolean;
14
+ }
15
+ export type CascaderValueType = (string | number)[];
16
+ export interface CascaderProps {
17
+ /** 选项数据 */
18
+ options: CascaderOption[];
19
+ /** 当前值 */
20
+ value?: CascaderValueType;
21
+ /** 默认值 */
22
+ defaultValue?: CascaderValueType;
23
+ /** 占位符 */
24
+ placeholder?: string;
25
+ /** 是否禁用 */
26
+ disabled?: boolean;
27
+ /** 允许清除 */
28
+ allowClear?: boolean;
29
+ /** 尺寸 */
30
+ size?: 'large' | 'middle' | 'small';
31
+ /** 展开触发方式 */
32
+ expandTrigger?: 'click' | 'hover';
33
+ /** 选择即改变(选中即触发,不需选到最后一级) */
34
+ changeOnSelect?: boolean;
35
+ /** 是否显示搜索框 */
36
+ showSearch?: boolean;
37
+ /** 自定义显示函数 */
38
+ displayRender?: (labels: React.ReactNode[], selectedOptions?: CascaderOption[]) => React.ReactNode;
39
+ /** 值改变回调 */
40
+ onChange?: (value: CascaderValueType, selectedOptions?: CascaderOption[]) => void;
41
+ /** 下拉菜单打开/关闭回调 */
42
+ onDropdownVisibleChange?: (open: boolean) => void;
43
+ /** 无匹配时的内容 */
44
+ notFoundContent?: React.ReactNode;
45
+ /** 状态 */
46
+ status?: 'error' | 'warning';
47
+ /** 自定义类名 */
48
+ className?: string;
49
+ /** 自定义样式 */
50
+ style?: React.CSSProperties;
51
+ }
52
+ export declare const Cascader: React.FC<CascaderProps>;
53
+ export default Cascader;
@@ -0,0 +1,338 @@
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.Cascader = 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 _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
18
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
19
+ 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."); }
20
+ 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); }
21
+ 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; }
22
+ 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; } }
23
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // ============ Option Type ============
24
+ // ============ Cascader Props ============
25
+ // ============ Cascader Component ============
26
+ var Cascader = exports.Cascader = function Cascader(_ref) {
27
+ var options = _ref.options,
28
+ controlledValue = _ref.value,
29
+ _ref$defaultValue = _ref.defaultValue,
30
+ defaultValue = _ref$defaultValue === void 0 ? [] : _ref$defaultValue,
31
+ _ref$placeholder = _ref.placeholder,
32
+ placeholder = _ref$placeholder === void 0 ? '请选择' : _ref$placeholder,
33
+ _ref$disabled = _ref.disabled,
34
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
35
+ _ref$allowClear = _ref.allowClear,
36
+ allowClear = _ref$allowClear === void 0 ? true : _ref$allowClear,
37
+ _ref$size = _ref.size,
38
+ size = _ref$size === void 0 ? 'middle' : _ref$size,
39
+ _ref$expandTrigger = _ref.expandTrigger,
40
+ expandTrigger = _ref$expandTrigger === void 0 ? 'click' : _ref$expandTrigger,
41
+ _ref$changeOnSelect = _ref.changeOnSelect,
42
+ changeOnSelect = _ref$changeOnSelect === void 0 ? false : _ref$changeOnSelect,
43
+ _ref$showSearch = _ref.showSearch,
44
+ showSearch = _ref$showSearch === void 0 ? false : _ref$showSearch,
45
+ displayRender = _ref.displayRender,
46
+ onChange = _ref.onChange,
47
+ onDropdownVisibleChange = _ref.onDropdownVisibleChange,
48
+ _ref$notFoundContent = _ref.notFoundContent,
49
+ notFoundContent = _ref$notFoundContent === void 0 ? '无匹配结果' : _ref$notFoundContent,
50
+ status = _ref.status,
51
+ _ref$className = _ref.className,
52
+ className = _ref$className === void 0 ? '' : _ref$className,
53
+ style = _ref.style;
54
+ var _useState = (0, _react.useState)(defaultValue),
55
+ _useState2 = _slicedToArray(_useState, 2),
56
+ internalValue = _useState2[0],
57
+ setInternalValue = _useState2[1];
58
+ var _useState3 = (0, _react.useState)(false),
59
+ _useState4 = _slicedToArray(_useState3, 2),
60
+ isOpen = _useState4[0],
61
+ setIsOpen = _useState4[1];
62
+ var _useState5 = (0, _react.useState)([]),
63
+ _useState6 = _slicedToArray(_useState5, 2),
64
+ activeValue = _useState6[0],
65
+ setActiveValue = _useState6[1];
66
+ var _useState7 = (0, _react.useState)(''),
67
+ _useState8 = _slicedToArray(_useState7, 2),
68
+ searchValue = _useState8[0],
69
+ setSearchValue = _useState8[1];
70
+ var containerRef = (0, _react.useRef)(null);
71
+ var searchInputRef = (0, _react.useRef)(null);
72
+ var value = controlledValue !== null && controlledValue !== void 0 ? controlledValue : internalValue;
73
+
74
+ // 获取选中的选项链
75
+ var getSelectedOptions = (0, _react.useCallback)(function (val) {
76
+ var result = [];
77
+ var currentOptions = options;
78
+ var _iterator = _createForOfIteratorHelper(val),
79
+ _step;
80
+ try {
81
+ var _loop = function _loop() {
82
+ var v = _step.value;
83
+ var found = currentOptions.find(function (opt) {
84
+ return opt.value === v;
85
+ });
86
+ if (found) {
87
+ result.push(found);
88
+ currentOptions = found.children || [];
89
+ } else {
90
+ return 1; // break
91
+ }
92
+ };
93
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
94
+ if (_loop()) break;
95
+ }
96
+ } catch (err) {
97
+ _iterator.e(err);
98
+ } finally {
99
+ _iterator.f();
100
+ }
101
+ return result;
102
+ }, [options]);
103
+
104
+ // 获取显示文本
105
+ var getDisplayLabel = (0, _react.useCallback)(function () {
106
+ if (value.length === 0) return '';
107
+ var selectedOptions = getSelectedOptions(value);
108
+ var labels = selectedOptions.map(function (opt) {
109
+ return opt.label;
110
+ });
111
+ if (displayRender) {
112
+ return displayRender(labels, selectedOptions);
113
+ }
114
+ return labels.join(' / ');
115
+ }, [value, getSelectedOptions, displayRender]);
116
+
117
+ // 打开/关闭下拉
118
+ var setOpen = (0, _react.useCallback)(function (open) {
119
+ if (disabled) return;
120
+ setIsOpen(open);
121
+ onDropdownVisibleChange === null || onDropdownVisibleChange === void 0 || onDropdownVisibleChange(open);
122
+ if (open) {
123
+ setActiveValue(value);
124
+ setSearchValue('');
125
+ setTimeout(function () {
126
+ var _searchInputRef$curre;
127
+ return (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
128
+ }, 0);
129
+ }
130
+ }, [disabled, value, onDropdownVisibleChange]);
131
+
132
+ // 选择选项
133
+ var handleSelect = (0, _react.useCallback)(function (option, level) {
134
+ if (option.disabled) return;
135
+ var newActiveValue = [].concat(_toConsumableArray(activeValue.slice(0, level)), [option.value]);
136
+ setActiveValue(newActiveValue);
137
+ var hasChildren = option.children && option.children.length > 0;
138
+ var isLeaf = option.isLeaf || !hasChildren;
139
+ if (isLeaf || changeOnSelect) {
140
+ if (controlledValue === undefined) {
141
+ setInternalValue(newActiveValue);
142
+ }
143
+ onChange === null || onChange === void 0 || onChange(newActiveValue, getSelectedOptions(newActiveValue));
144
+ if (isLeaf) {
145
+ setOpen(false);
146
+ }
147
+ }
148
+ }, [activeValue, changeOnSelect, controlledValue, onChange, getSelectedOptions, setOpen]);
149
+
150
+ // 鼠标悬浮展开
151
+ var handleMouseEnter = (0, _react.useCallback)(function (option, level) {
152
+ if (expandTrigger !== 'hover' || option.disabled) return;
153
+ var newActiveValue = [].concat(_toConsumableArray(activeValue.slice(0, level)), [option.value]);
154
+ setActiveValue(newActiveValue);
155
+ }, [expandTrigger, activeValue]);
156
+
157
+ // 清除
158
+ var handleClear = (0, _react.useCallback)(function (e) {
159
+ e.stopPropagation();
160
+ if (controlledValue === undefined) {
161
+ setInternalValue([]);
162
+ }
163
+ onChange === null || onChange === void 0 || onChange([], []);
164
+ }, [controlledValue, onChange]);
165
+
166
+ // 搜索过滤(展平所有路径)
167
+ var getFilteredOptions = (0, _react.useCallback)(function () {
168
+ if (!searchValue) return [];
169
+ var results = [];
170
+ var traverse = function traverse(opts, path, valuePath) {
171
+ var _iterator2 = _createForOfIteratorHelper(opts),
172
+ _step2;
173
+ try {
174
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
175
+ var opt = _step2.value;
176
+ var currentPath = [].concat(_toConsumableArray(path), [opt]);
177
+ var currentValuePath = [].concat(_toConsumableArray(valuePath), [opt.value]);
178
+ var hasChildren = opt.children && opt.children.length > 0;
179
+
180
+ // 检查是否匹配
181
+ var labelStr = typeof opt.label === 'string' ? opt.label : '';
182
+ if (labelStr.toLowerCase().includes(searchValue.toLowerCase())) {
183
+ if (!hasChildren || changeOnSelect) {
184
+ results.push({
185
+ path: currentPath,
186
+ value: currentValuePath
187
+ });
188
+ }
189
+ }
190
+ if (hasChildren) {
191
+ traverse(opt.children, currentPath, currentValuePath);
192
+ }
193
+ }
194
+ } catch (err) {
195
+ _iterator2.e(err);
196
+ } finally {
197
+ _iterator2.f();
198
+ }
199
+ };
200
+ traverse(options, [], []);
201
+ return results;
202
+ }, [options, searchValue, changeOnSelect]);
203
+
204
+ // 点击外部关闭
205
+ (0, _react.useEffect)(function () {
206
+ var handleClickOutside = function handleClickOutside(e) {
207
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
208
+ setOpen(false);
209
+ }
210
+ };
211
+ document.addEventListener('mousedown', handleClickOutside);
212
+ return function () {
213
+ return document.removeEventListener('mousedown', handleClickOutside);
214
+ };
215
+ }, [setOpen]);
216
+
217
+ // 获取每一级的选项
218
+ var getMenus = (0, _react.useCallback)(function () {
219
+ var menus = [options];
220
+ var currentOptions = options;
221
+ var _iterator3 = _createForOfIteratorHelper(activeValue),
222
+ _step3;
223
+ try {
224
+ var _loop2 = function _loop2() {
225
+ var v = _step3.value;
226
+ var found = currentOptions.find(function (opt) {
227
+ return opt.value === v;
228
+ });
229
+ if (found !== null && found !== void 0 && found.children && found.children.length > 0) {
230
+ menus.push(found.children);
231
+ currentOptions = found.children;
232
+ } else {
233
+ return 1; // break
234
+ }
235
+ };
236
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
237
+ if (_loop2()) break;
238
+ }
239
+ } catch (err) {
240
+ _iterator3.e(err);
241
+ } finally {
242
+ _iterator3.f();
243
+ }
244
+ return menus;
245
+ }, [options, activeValue]);
246
+ var classNames = ['kage-cascader', "kage-cascader-".concat(size), disabled && 'kage-cascader-disabled', status && "kage-cascader-status-".concat(status), isOpen && 'kage-cascader-open', className].filter(Boolean).join(' ');
247
+ var filteredOptions = showSearch && searchValue ? getFilteredOptions() : [];
248
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
249
+ ref: containerRef,
250
+ className: classNames,
251
+ style: style,
252
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
253
+ className: "kage-cascader-selector",
254
+ onClick: function onClick() {
255
+ return setOpen(!isOpen);
256
+ },
257
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
258
+ className: "kage-cascader-selection ".concat(value.length === 0 ? 'kage-cascader-selection-placeholder' : ''),
259
+ children: value.length > 0 ? getDisplayLabel() : placeholder
260
+ }), allowClear && value.length > 0 && !disabled && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
261
+ className: "kage-cascader-clear",
262
+ onClick: handleClear,
263
+ children: "\xD7"
264
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
265
+ className: "kage-cascader-arrow ".concat(isOpen ? 'kage-cascader-arrow-open' : ''),
266
+ children: "\u25BC"
267
+ })]
268
+ }), isOpen && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
269
+ className: "kage-cascader-dropdown",
270
+ children: [showSearch && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
271
+ className: "kage-cascader-search",
272
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
273
+ ref: searchInputRef,
274
+ type: "text",
275
+ className: "kage-cascader-search-input",
276
+ placeholder: "\u8BF7\u8F93\u5165\u641C\u7D22",
277
+ value: searchValue,
278
+ onChange: function onChange(e) {
279
+ return setSearchValue(e.target.value);
280
+ }
281
+ })
282
+ }), showSearch && searchValue ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
283
+ className: "kage-cascader-search-result",
284
+ children: filteredOptions.length > 0 ? filteredOptions.map(function (item, index) {
285
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
286
+ className: "kage-cascader-search-option",
287
+ onClick: function onClick() {
288
+ if (controlledValue === undefined) {
289
+ setInternalValue(item.value);
290
+ }
291
+ onChange === null || onChange === void 0 || onChange(item.value, item.path);
292
+ setOpen(false);
293
+ },
294
+ children: item.path.map(function (opt) {
295
+ return opt.label;
296
+ }).join(' / ')
297
+ }, index);
298
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
299
+ className: "kage-cascader-empty",
300
+ children: notFoundContent
301
+ })
302
+ }) :
303
+ /*#__PURE__*/
304
+ /* 级联菜单 */
305
+ (0, _jsxRuntime.jsx)("div", {
306
+ className: "kage-cascader-menus",
307
+ children: getMenus().map(function (menu, level) {
308
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
309
+ className: "kage-cascader-menu",
310
+ children: menu.map(function (option) {
311
+ var isActive = activeValue[level] === option.value;
312
+ var isSelected = value[level] === option.value;
313
+ var hasChildren = option.children && option.children.length > 0;
314
+ var optionClassNames = ['kage-cascader-menu-item', isActive && 'kage-cascader-menu-item-active', isSelected && 'kage-cascader-menu-item-selected', option.disabled && 'kage-cascader-menu-item-disabled'].filter(Boolean).join(' ');
315
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
316
+ className: optionClassNames,
317
+ onClick: function onClick() {
318
+ return handleSelect(option, level);
319
+ },
320
+ onMouseEnter: function onMouseEnter() {
321
+ return handleMouseEnter(option, level);
322
+ },
323
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
324
+ className: "kage-cascader-menu-item-label",
325
+ children: option.label
326
+ }), hasChildren && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
327
+ className: "kage-cascader-menu-item-arrow",
328
+ children: "\u25B6"
329
+ })]
330
+ }, option.value);
331
+ })
332
+ }, level);
333
+ })
334
+ })]
335
+ })]
336
+ });
337
+ };
338
+ var _default = exports.default = Cascader;