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.
- package/README.md +4 -4
- package/dist/cjs/Anchor/index.d.ts +56 -0
- package/dist/cjs/Anchor/index.js +307 -0
- package/dist/cjs/Anchor/style.less +183 -0
- package/dist/cjs/AutoComplete/index.d.ts +54 -0
- package/dist/cjs/AutoComplete/index.js +273 -0
- package/dist/cjs/AutoComplete/style.less +325 -0
- package/dist/cjs/Breadcrumb/index.d.ts +51 -0
- package/dist/cjs/Breadcrumb/index.js +129 -0
- package/dist/cjs/Breadcrumb/style.less +96 -0
- package/dist/cjs/Cascader/index.d.ts +53 -0
- package/dist/cjs/Cascader/index.js +338 -0
- package/dist/cjs/Cascader/style.less +457 -0
- package/dist/cjs/Checkbox/index.d.ts +52 -0
- package/dist/cjs/Checkbox/index.js +158 -0
- package/dist/cjs/Checkbox/style.less +211 -0
- package/dist/cjs/ColorPicker/index.d.ts +28 -0
- package/dist/cjs/ColorPicker/index.js +381 -0
- package/dist/cjs/ColorPicker/style.less +276 -0
- package/dist/cjs/DatePicker/index.d.ts +32 -0
- package/dist/cjs/DatePicker/index.js +377 -0
- package/dist/cjs/DatePicker/style.less +498 -0
- package/dist/cjs/Divider/index.d.ts +24 -0
- package/dist/cjs/Divider/index.js +75 -0
- package/dist/cjs/Divider/style.less +144 -0
- package/dist/cjs/Dropdown/index.d.ts +88 -0
- package/dist/cjs/Dropdown/index.js +253 -0
- package/dist/cjs/Dropdown/style.less +430 -0
- package/dist/cjs/Flex/index.d.ts +37 -0
- package/dist/cjs/Flex/index.js +76 -0
- package/dist/cjs/Flex/style.less +13 -0
- package/dist/cjs/Form/index.d.ts +89 -0
- package/dist/cjs/Form/index.js +421 -0
- package/dist/cjs/Form/style.less +203 -0
- package/dist/cjs/Grid/index.d.ts +69 -0
- package/dist/cjs/Grid/index.js +171 -0
- package/dist/cjs/Grid/style.less +273 -0
- package/dist/cjs/Layout/index.d.ts +74 -0
- package/dist/cjs/Layout/index.js +166 -0
- package/dist/cjs/Layout/style.less +145 -0
- package/dist/cjs/Masonry/index.d.ts +18 -0
- package/dist/cjs/Masonry/index.js +146 -0
- package/dist/cjs/Masonry/style.less +15 -0
- package/dist/cjs/Menu/index.d.ts +87 -0
- package/dist/cjs/Menu/index.js +306 -0
- package/dist/cjs/Menu/style.less +363 -0
- package/dist/cjs/Pagination/index.d.ts +38 -0
- package/dist/cjs/Pagination/index.js +255 -0
- package/dist/cjs/Pagination/style.less +353 -0
- package/dist/cjs/Space/index.d.ts +41 -0
- package/dist/cjs/Space/index.js +137 -0
- package/dist/cjs/Space/style.less +116 -0
- package/dist/cjs/Splitter/index.d.ts +43 -0
- package/dist/cjs/Splitter/index.js +219 -0
- package/dist/cjs/Splitter/style.less +99 -0
- package/dist/cjs/Steps/index.d.ts +58 -0
- package/dist/cjs/Steps/index.js +180 -0
- package/dist/cjs/Steps/style.less +507 -0
- package/dist/cjs/Tabs/index.d.ts +58 -0
- package/dist/cjs/Tabs/index.js +196 -0
- package/dist/cjs/Tabs/style.less +423 -0
- package/dist/cjs/Typography/index.d.ts +102 -0
- package/dist/cjs/Typography/index.js +168 -0
- package/dist/cjs/Typography/style.less +246 -0
- package/dist/cjs/index.d.ts +42 -0
- package/dist/cjs/index.js +260 -1
- package/dist/esm/Anchor/index.d.ts +56 -0
- package/dist/esm/Anchor/index.js +302 -0
- package/dist/esm/Anchor/style.less +183 -0
- package/dist/esm/AutoComplete/index.d.ts +54 -0
- package/dist/esm/AutoComplete/index.js +268 -0
- package/dist/esm/AutoComplete/style.less +325 -0
- package/dist/esm/Breadcrumb/index.d.ts +51 -0
- package/dist/esm/Breadcrumb/index.js +124 -0
- package/dist/esm/Breadcrumb/style.less +96 -0
- package/dist/esm/Cascader/index.d.ts +53 -0
- package/dist/esm/Cascader/index.js +333 -0
- package/dist/esm/Cascader/style.less +457 -0
- package/dist/esm/Checkbox/index.d.ts +52 -0
- package/dist/esm/Checkbox/index.js +152 -0
- package/dist/esm/Checkbox/style.less +211 -0
- package/dist/esm/ColorPicker/index.d.ts +28 -0
- package/dist/esm/ColorPicker/index.js +375 -0
- package/dist/esm/ColorPicker/style.less +276 -0
- package/dist/esm/DatePicker/index.d.ts +32 -0
- package/dist/esm/DatePicker/index.js +371 -0
- package/dist/esm/DatePicker/style.less +498 -0
- package/dist/esm/Divider/index.d.ts +24 -0
- package/dist/esm/Divider/index.js +68 -0
- package/dist/esm/Divider/style.less +144 -0
- package/dist/esm/Dropdown/index.d.ts +88 -0
- package/dist/esm/Dropdown/index.js +249 -0
- package/dist/esm/Dropdown/style.less +430 -0
- package/dist/esm/Flex/index.d.ts +37 -0
- package/dist/esm/Flex/index.js +69 -0
- package/dist/esm/Flex/style.less +13 -0
- package/dist/esm/Form/index.d.ts +89 -0
- package/dist/esm/Form/index.js +416 -0
- package/dist/esm/Form/style.less +203 -0
- package/dist/esm/Grid/index.d.ts +69 -0
- package/dist/esm/Grid/index.js +165 -0
- package/dist/esm/Grid/style.less +273 -0
- package/dist/esm/Layout/index.d.ts +74 -0
- package/dist/esm/Layout/index.js +161 -0
- package/dist/esm/Layout/style.less +145 -0
- package/dist/esm/Masonry/index.d.ts +18 -0
- package/dist/esm/Masonry/index.js +138 -0
- package/dist/esm/Masonry/style.less +15 -0
- package/dist/esm/Menu/index.d.ts +87 -0
- package/dist/esm/Menu/index.js +301 -0
- package/dist/esm/Menu/style.less +363 -0
- package/dist/esm/Pagination/index.d.ts +38 -0
- package/dist/esm/Pagination/index.js +247 -0
- package/dist/esm/Pagination/style.less +353 -0
- package/dist/esm/Space/index.d.ts +41 -0
- package/dist/esm/Space/index.js +131 -0
- package/dist/esm/Space/style.less +116 -0
- package/dist/esm/Splitter/index.d.ts +43 -0
- package/dist/esm/Splitter/index.js +214 -0
- package/dist/esm/Splitter/style.less +99 -0
- package/dist/esm/Steps/index.d.ts +58 -0
- package/dist/esm/Steps/index.js +174 -0
- package/dist/esm/Steps/style.less +507 -0
- package/dist/esm/Tabs/index.d.ts +58 -0
- package/dist/esm/Tabs/index.js +193 -0
- package/dist/esm/Tabs/style.less +423 -0
- package/dist/esm/Typography/index.d.ts +102 -0
- package/dist/esm/Typography/index.js +161 -0
- package/dist/esm/Typography/style.less +246 -0
- package/dist/esm/index.d.ts +42 -0
- package/dist/esm/index.js +22 -1
- package/package.json +13 -10
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// Divider 分割线组件样式
|
|
2
|
+
|
|
3
|
+
@prefix: kage-divider;
|
|
4
|
+
|
|
5
|
+
// 基础变量
|
|
6
|
+
@divider-color: #e5e5e5;
|
|
7
|
+
@divider-text-color: #1f1f1f;
|
|
8
|
+
@divider-text-font-size: 14px;
|
|
9
|
+
@divider-orientation-margin: 5%;
|
|
10
|
+
|
|
11
|
+
.@{prefix} {
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 0;
|
|
15
|
+
font-size: @divider-text-font-size;
|
|
16
|
+
font-variant: tabular-nums;
|
|
17
|
+
line-height: 1.5;
|
|
18
|
+
list-style: none;
|
|
19
|
+
border-block-start: 0 @divider-color;
|
|
20
|
+
|
|
21
|
+
// ============ 水平分割线 ============
|
|
22
|
+
&-horizontal {
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
clear: both;
|
|
26
|
+
width: 100%;
|
|
27
|
+
min-width: 100%;
|
|
28
|
+
margin: 24px 0;
|
|
29
|
+
|
|
30
|
+
&::before,
|
|
31
|
+
&::after {
|
|
32
|
+
position: relative;
|
|
33
|
+
width: 50%;
|
|
34
|
+
border-block-start: 1px solid transparent;
|
|
35
|
+
border-block-start-color: inherit;
|
|
36
|
+
border-block-end: 0;
|
|
37
|
+
transform: translateY(50%);
|
|
38
|
+
content: '';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ============ 垂直分割线 ============
|
|
43
|
+
&-vertical {
|
|
44
|
+
position: relative;
|
|
45
|
+
top: -0.06em;
|
|
46
|
+
display: inline-block;
|
|
47
|
+
height: 0.9em;
|
|
48
|
+
margin: 0 8px;
|
|
49
|
+
vertical-align: middle;
|
|
50
|
+
border-top: 0;
|
|
51
|
+
border-inline-start: 1px solid @divider-color;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ============ 带文字的分割线 ============
|
|
55
|
+
&-with-text {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
margin: 16px 0;
|
|
59
|
+
color: @divider-text-color;
|
|
60
|
+
font-weight: 500;
|
|
61
|
+
font-size: @divider-text-font-size;
|
|
62
|
+
white-space: nowrap;
|
|
63
|
+
text-align: center;
|
|
64
|
+
border-block-start: 0;
|
|
65
|
+
|
|
66
|
+
&::before,
|
|
67
|
+
&::after {
|
|
68
|
+
position: relative;
|
|
69
|
+
width: 50%;
|
|
70
|
+
border-block-start: 1px solid transparent;
|
|
71
|
+
border-block-start-color: inherit;
|
|
72
|
+
border-block-end: 0;
|
|
73
|
+
transform: translateY(50%);
|
|
74
|
+
content: '';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&-with-text-left {
|
|
79
|
+
&::before {
|
|
80
|
+
width: var(--divider-text-margin-left, @divider-orientation-margin);
|
|
81
|
+
}
|
|
82
|
+
&::after {
|
|
83
|
+
width: calc(100% - var(--divider-text-margin-left, @divider-orientation-margin));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
&-with-text-right {
|
|
88
|
+
&::before {
|
|
89
|
+
width: calc(100% - var(--divider-text-margin-right, @divider-orientation-margin));
|
|
90
|
+
}
|
|
91
|
+
&::after {
|
|
92
|
+
width: var(--divider-text-margin-right, @divider-orientation-margin);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&-inner-text {
|
|
97
|
+
display: inline-block;
|
|
98
|
+
padding: 0 1em;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ============ 纯净模式 ============
|
|
102
|
+
&-plain {
|
|
103
|
+
font-weight: 400;
|
|
104
|
+
font-size: @divider-text-font-size;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ============ 线条样式 ============
|
|
108
|
+
&-solid {
|
|
109
|
+
border-color: @divider-color;
|
|
110
|
+
|
|
111
|
+
&.@{prefix}-vertical {
|
|
112
|
+
border-inline-start-style: solid;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&-dashed {
|
|
117
|
+
border-color: @divider-color;
|
|
118
|
+
border-style: dashed;
|
|
119
|
+
|
|
120
|
+
&.@{prefix}-vertical {
|
|
121
|
+
border-inline-start-style: dashed;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
&::before,
|
|
125
|
+
&::after {
|
|
126
|
+
border-style: dashed none none;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
&-dotted {
|
|
131
|
+
border-color: @divider-color;
|
|
132
|
+
border-style: dotted;
|
|
133
|
+
|
|
134
|
+
&.@{prefix}-vertical {
|
|
135
|
+
border-inline-start-style: dotted;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
&::before,
|
|
139
|
+
&::after {
|
|
140
|
+
border-style: dotted none none;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './style.less';
|
|
3
|
+
export interface DropdownMenuItem {
|
|
4
|
+
/** 唯一标识 */
|
|
5
|
+
key: string;
|
|
6
|
+
/** 显示内容 */
|
|
7
|
+
label: React.ReactNode;
|
|
8
|
+
/** 图标 */
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
/** 是否禁用 */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** 是否危险操作 */
|
|
13
|
+
danger?: boolean;
|
|
14
|
+
/** 分割线 */
|
|
15
|
+
type?: 'divider';
|
|
16
|
+
/** 子菜单 */
|
|
17
|
+
children?: DropdownMenuItem[];
|
|
18
|
+
/** 点击回调 */
|
|
19
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface DropdownMenuProps {
|
|
22
|
+
/** 菜单项 */
|
|
23
|
+
items: DropdownMenuItem[];
|
|
24
|
+
/** 选中的key */
|
|
25
|
+
selectedKeys?: string[];
|
|
26
|
+
/** 点击菜单项回调 */
|
|
27
|
+
onClick?: (info: {
|
|
28
|
+
key: string;
|
|
29
|
+
domEvent: React.MouseEvent;
|
|
30
|
+
}) => void;
|
|
31
|
+
}
|
|
32
|
+
export type DropdownPlacement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';
|
|
33
|
+
export type DropdownTrigger = 'hover' | 'click' | 'contextMenu';
|
|
34
|
+
export interface DropdownProps {
|
|
35
|
+
/** 菜单项 */
|
|
36
|
+
menu?: DropdownMenuProps;
|
|
37
|
+
/** 自定义下拉内容 */
|
|
38
|
+
dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
|
|
39
|
+
/** 触发下拉的元素 */
|
|
40
|
+
children: React.ReactNode;
|
|
41
|
+
/** 触发方式 */
|
|
42
|
+
trigger?: DropdownTrigger[];
|
|
43
|
+
/** 弹出位置 */
|
|
44
|
+
placement?: DropdownPlacement;
|
|
45
|
+
/** 是否禁用 */
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
/** 是否显示箭头 */
|
|
48
|
+
arrow?: boolean;
|
|
49
|
+
/** 受控的显示状态 */
|
|
50
|
+
open?: boolean;
|
|
51
|
+
/** 显示状态变化回调 */
|
|
52
|
+
onOpenChange?: (open: boolean) => void;
|
|
53
|
+
/** 自定义类名 */
|
|
54
|
+
className?: string;
|
|
55
|
+
/** 下拉菜单类名 */
|
|
56
|
+
overlayClassName?: string;
|
|
57
|
+
/** 自定义样式 */
|
|
58
|
+
style?: React.CSSProperties;
|
|
59
|
+
/** 下拉菜单样式 */
|
|
60
|
+
overlayStyle?: React.CSSProperties;
|
|
61
|
+
/** 关闭后是否销毁 */
|
|
62
|
+
destroyPopupOnHide?: boolean;
|
|
63
|
+
/** 自动调整位置 */
|
|
64
|
+
autoAdjustOverflow?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export declare const Dropdown: React.FC<DropdownProps>;
|
|
67
|
+
export interface DropdownButtonProps extends Omit<DropdownProps, 'children'> {
|
|
68
|
+
/** 按钮文字 */
|
|
69
|
+
children?: React.ReactNode;
|
|
70
|
+
/** 按钮类型 */
|
|
71
|
+
type?: 'default' | 'primary' | 'dashed' | 'text' | 'link';
|
|
72
|
+
/** 按钮大小 */
|
|
73
|
+
size?: 'small' | 'middle' | 'large';
|
|
74
|
+
/** 是否加载中 */
|
|
75
|
+
loading?: boolean;
|
|
76
|
+
/** 是否危险按钮 */
|
|
77
|
+
danger?: boolean;
|
|
78
|
+
/** 左侧按钮点击回调 */
|
|
79
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
80
|
+
/** 按钮图标 */
|
|
81
|
+
icon?: React.ReactNode;
|
|
82
|
+
}
|
|
83
|
+
export declare const DropdownButton: React.FC<DropdownButtonProps>;
|
|
84
|
+
type DropdownType = typeof Dropdown & {
|
|
85
|
+
Button: typeof DropdownButton;
|
|
86
|
+
};
|
|
87
|
+
declare const ExportDropdown: DropdownType;
|
|
88
|
+
export default ExportDropdown;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
var _excluded = ["children", "type", "size", "loading", "danger", "onClick", "icon"];
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
11
|
+
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."); }
|
|
12
|
+
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); }
|
|
13
|
+
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; }
|
|
14
|
+
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; } }
|
|
15
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
|
+
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
17
|
+
import "./style.less";
|
|
18
|
+
|
|
19
|
+
// ============ Menu Item Type ============
|
|
20
|
+
|
|
21
|
+
// ============ Dropdown Props ============
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
// ============ Dropdown Menu Component ============
|
|
25
|
+
var DropdownMenu = function DropdownMenu(_ref) {
|
|
26
|
+
var items = _ref.items,
|
|
27
|
+
_ref$selectedKeys = _ref.selectedKeys,
|
|
28
|
+
selectedKeys = _ref$selectedKeys === void 0 ? [] : _ref$selectedKeys,
|
|
29
|
+
onClick = _ref.onClick,
|
|
30
|
+
onClose = _ref.onClose;
|
|
31
|
+
var handleItemClick = function handleItemClick(item, e) {
|
|
32
|
+
var _item$onClick;
|
|
33
|
+
if (item.disabled) return;
|
|
34
|
+
(_item$onClick = item.onClick) === null || _item$onClick === void 0 || _item$onClick.call(item, e);
|
|
35
|
+
onClick === null || onClick === void 0 || onClick({
|
|
36
|
+
key: item.key,
|
|
37
|
+
domEvent: e
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// 如果没有子菜单,关闭下拉
|
|
41
|
+
if (!item.children) {
|
|
42
|
+
onClose === null || onClose === void 0 || onClose();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var renderMenuItem = function renderMenuItem(item) {
|
|
46
|
+
if (item.type === 'divider') {
|
|
47
|
+
return /*#__PURE__*/_jsx("div", {
|
|
48
|
+
className: "kage-dropdown-menu-divider"
|
|
49
|
+
}, item.key);
|
|
50
|
+
}
|
|
51
|
+
var isSelected = selectedKeys.includes(item.key);
|
|
52
|
+
var classNames = ['kage-dropdown-menu-item', item.disabled && 'kage-dropdown-menu-item-disabled', item.danger && 'kage-dropdown-menu-item-danger', isSelected && 'kage-dropdown-menu-item-selected'].filter(Boolean).join(' ');
|
|
53
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
54
|
+
className: classNames,
|
|
55
|
+
onClick: function onClick(e) {
|
|
56
|
+
return handleItemClick(item, e);
|
|
57
|
+
},
|
|
58
|
+
children: [item.icon && /*#__PURE__*/_jsx("span", {
|
|
59
|
+
className: "kage-dropdown-menu-item-icon",
|
|
60
|
+
children: item.icon
|
|
61
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
62
|
+
className: "kage-dropdown-menu-item-label",
|
|
63
|
+
children: item.label
|
|
64
|
+
}), item.children && /*#__PURE__*/_jsx("span", {
|
|
65
|
+
className: "kage-dropdown-menu-item-arrow",
|
|
66
|
+
children: "\u25B6"
|
|
67
|
+
})]
|
|
68
|
+
}, item.key);
|
|
69
|
+
};
|
|
70
|
+
return /*#__PURE__*/_jsx("div", {
|
|
71
|
+
className: "kage-dropdown-menu",
|
|
72
|
+
children: items.map(renderMenuItem)
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// ============ Dropdown Component ============
|
|
77
|
+
export var Dropdown = function Dropdown(_ref2) {
|
|
78
|
+
var menu = _ref2.menu,
|
|
79
|
+
dropdownRender = _ref2.dropdownRender,
|
|
80
|
+
children = _ref2.children,
|
|
81
|
+
_ref2$trigger = _ref2.trigger,
|
|
82
|
+
trigger = _ref2$trigger === void 0 ? ['hover'] : _ref2$trigger,
|
|
83
|
+
_ref2$placement = _ref2.placement,
|
|
84
|
+
placement = _ref2$placement === void 0 ? 'bottomLeft' : _ref2$placement,
|
|
85
|
+
_ref2$disabled = _ref2.disabled,
|
|
86
|
+
disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
|
|
87
|
+
_ref2$arrow = _ref2.arrow,
|
|
88
|
+
arrow = _ref2$arrow === void 0 ? false : _ref2$arrow,
|
|
89
|
+
controlledOpen = _ref2.open,
|
|
90
|
+
onOpenChange = _ref2.onOpenChange,
|
|
91
|
+
_ref2$className = _ref2.className,
|
|
92
|
+
className = _ref2$className === void 0 ? '' : _ref2$className,
|
|
93
|
+
_ref2$overlayClassNam = _ref2.overlayClassName,
|
|
94
|
+
overlayClassName = _ref2$overlayClassNam === void 0 ? '' : _ref2$overlayClassNam,
|
|
95
|
+
style = _ref2.style,
|
|
96
|
+
overlayStyle = _ref2.overlayStyle,
|
|
97
|
+
_ref2$destroyPopupOnH = _ref2.destroyPopupOnHide,
|
|
98
|
+
destroyPopupOnHide = _ref2$destroyPopupOnH === void 0 ? false : _ref2$destroyPopupOnH;
|
|
99
|
+
var _useState = useState(false),
|
|
100
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
101
|
+
internalOpen = _useState2[0],
|
|
102
|
+
setInternalOpen = _useState2[1];
|
|
103
|
+
var containerRef = useRef(null);
|
|
104
|
+
var dropdownRef = useRef(null);
|
|
105
|
+
var timeoutRef = useRef();
|
|
106
|
+
var isControlled = controlledOpen !== undefined;
|
|
107
|
+
var isOpen = isControlled ? controlledOpen : internalOpen;
|
|
108
|
+
var setOpen = useCallback(function (newOpen) {
|
|
109
|
+
if (disabled) return;
|
|
110
|
+
if (!isControlled) {
|
|
111
|
+
setInternalOpen(newOpen);
|
|
112
|
+
}
|
|
113
|
+
onOpenChange === null || onOpenChange === void 0 || onOpenChange(newOpen);
|
|
114
|
+
}, [disabled, isControlled, onOpenChange]);
|
|
115
|
+
var handleMouseEnter = useCallback(function () {
|
|
116
|
+
if (!trigger.includes('hover')) return;
|
|
117
|
+
if (timeoutRef.current) {
|
|
118
|
+
clearTimeout(timeoutRef.current);
|
|
119
|
+
}
|
|
120
|
+
setOpen(true);
|
|
121
|
+
}, [trigger, setOpen]);
|
|
122
|
+
var handleMouseLeave = useCallback(function () {
|
|
123
|
+
if (!trigger.includes('hover')) return;
|
|
124
|
+
timeoutRef.current = setTimeout(function () {
|
|
125
|
+
setOpen(false);
|
|
126
|
+
}, 100);
|
|
127
|
+
}, [trigger, setOpen]);
|
|
128
|
+
var handleClick = useCallback(function (e) {
|
|
129
|
+
if (!trigger.includes('click')) return;
|
|
130
|
+
e.stopPropagation();
|
|
131
|
+
setOpen(!isOpen);
|
|
132
|
+
}, [trigger, isOpen, setOpen]);
|
|
133
|
+
var handleContextMenu = useCallback(function (e) {
|
|
134
|
+
if (!trigger.includes('contextMenu')) return;
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
setOpen(true);
|
|
137
|
+
}, [trigger, setOpen]);
|
|
138
|
+
|
|
139
|
+
// 点击外部关闭
|
|
140
|
+
useEffect(function () {
|
|
141
|
+
var handleClickOutside = function handleClickOutside(e) {
|
|
142
|
+
if (containerRef.current && !containerRef.current.contains(e.target) && dropdownRef.current && !dropdownRef.current.contains(e.target)) {
|
|
143
|
+
setOpen(false);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
if (isOpen) {
|
|
147
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
148
|
+
}
|
|
149
|
+
return function () {
|
|
150
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
151
|
+
};
|
|
152
|
+
}, [isOpen, setOpen]);
|
|
153
|
+
|
|
154
|
+
// 清理定时器
|
|
155
|
+
useEffect(function () {
|
|
156
|
+
return function () {
|
|
157
|
+
if (timeoutRef.current) {
|
|
158
|
+
clearTimeout(timeoutRef.current);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}, []);
|
|
162
|
+
var containerClassNames = ['kage-dropdown', disabled && 'kage-dropdown-disabled', className].filter(Boolean).join(' ');
|
|
163
|
+
var overlayClassNames = ['kage-dropdown-overlay', "kage-dropdown-placement-".concat(placement), arrow && 'kage-dropdown-overlay-arrow', isOpen && 'kage-dropdown-overlay-open', overlayClassName].filter(Boolean).join(' ');
|
|
164
|
+
|
|
165
|
+
// 渲染菜单内容
|
|
166
|
+
var renderMenuContent = function renderMenuContent() {
|
|
167
|
+
if (!(menu !== null && menu !== void 0 && menu.items)) return null;
|
|
168
|
+
var menuNode = /*#__PURE__*/_jsx(DropdownMenu, {
|
|
169
|
+
items: menu.items,
|
|
170
|
+
selectedKeys: menu.selectedKeys,
|
|
171
|
+
onClick: menu.onClick,
|
|
172
|
+
onClose: function onClose() {
|
|
173
|
+
return setOpen(false);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
return dropdownRender ? dropdownRender(menuNode) : menuNode;
|
|
177
|
+
};
|
|
178
|
+
var shouldRenderOverlay = isOpen || !destroyPopupOnHide;
|
|
179
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
180
|
+
ref: containerRef,
|
|
181
|
+
className: containerClassNames,
|
|
182
|
+
style: style,
|
|
183
|
+
onMouseEnter: handleMouseEnter,
|
|
184
|
+
onMouseLeave: handleMouseLeave,
|
|
185
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
186
|
+
className: "kage-dropdown-trigger",
|
|
187
|
+
onClick: handleClick,
|
|
188
|
+
onContextMenu: handleContextMenu,
|
|
189
|
+
children: children
|
|
190
|
+
}), shouldRenderOverlay && /*#__PURE__*/_jsxs("div", {
|
|
191
|
+
ref: dropdownRef,
|
|
192
|
+
className: overlayClassNames,
|
|
193
|
+
style: overlayStyle,
|
|
194
|
+
onMouseEnter: handleMouseEnter,
|
|
195
|
+
onMouseLeave: handleMouseLeave,
|
|
196
|
+
children: [arrow && /*#__PURE__*/_jsx("div", {
|
|
197
|
+
className: "kage-dropdown-arrow"
|
|
198
|
+
}), renderMenuContent()]
|
|
199
|
+
})]
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
// ============ Dropdown Button ============
|
|
204
|
+
|
|
205
|
+
export var DropdownButton = function DropdownButton(_ref3) {
|
|
206
|
+
var children = _ref3.children,
|
|
207
|
+
_ref3$type = _ref3.type,
|
|
208
|
+
type = _ref3$type === void 0 ? 'default' : _ref3$type,
|
|
209
|
+
_ref3$size = _ref3.size,
|
|
210
|
+
size = _ref3$size === void 0 ? 'middle' : _ref3$size,
|
|
211
|
+
_ref3$loading = _ref3.loading,
|
|
212
|
+
loading = _ref3$loading === void 0 ? false : _ref3$loading,
|
|
213
|
+
_ref3$danger = _ref3.danger,
|
|
214
|
+
danger = _ref3$danger === void 0 ? false : _ref3$danger,
|
|
215
|
+
onClick = _ref3.onClick,
|
|
216
|
+
icon = _ref3.icon,
|
|
217
|
+
dropdownProps = _objectWithoutProperties(_ref3, _excluded);
|
|
218
|
+
var buttonClassNames = ['kage-dropdown-button', "kage-dropdown-button-".concat(type), "kage-dropdown-button-".concat(size), danger && 'kage-dropdown-button-danger', loading && 'kage-dropdown-button-loading'].filter(Boolean).join(' ');
|
|
219
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
220
|
+
className: "kage-dropdown-button-group",
|
|
221
|
+
children: [/*#__PURE__*/_jsxs("button", {
|
|
222
|
+
className: "".concat(buttonClassNames, " kage-dropdown-button-left"),
|
|
223
|
+
onClick: onClick,
|
|
224
|
+
disabled: loading || dropdownProps.disabled,
|
|
225
|
+
children: [loading && /*#__PURE__*/_jsx("span", {
|
|
226
|
+
className: "kage-dropdown-button-loading-icon",
|
|
227
|
+
children: "\u23F3"
|
|
228
|
+
}), icon && /*#__PURE__*/_jsx("span", {
|
|
229
|
+
className: "kage-dropdown-button-icon",
|
|
230
|
+
children: icon
|
|
231
|
+
}), children]
|
|
232
|
+
}), /*#__PURE__*/_jsx(Dropdown, _objectSpread(_objectSpread({}, dropdownProps), {}, {
|
|
233
|
+
children: /*#__PURE__*/_jsx("button", {
|
|
234
|
+
className: "".concat(buttonClassNames, " kage-dropdown-button-right"),
|
|
235
|
+
disabled: loading || dropdownProps.disabled,
|
|
236
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
237
|
+
className: "kage-dropdown-button-dropdown-icon",
|
|
238
|
+
children: "\u25BC"
|
|
239
|
+
})
|
|
240
|
+
})
|
|
241
|
+
}))]
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
// 挂载子组件
|
|
246
|
+
|
|
247
|
+
var ExportDropdown = Dropdown;
|
|
248
|
+
ExportDropdown.Button = DropdownButton;
|
|
249
|
+
export default ExportDropdown;
|