@aloudata/aloudata-design 0.1.0-beta1
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/.editorconfig +16 -0
- package/.eslintrc.js +43 -0
- package/.fatherrc.ts +16 -0
- package/.prettierignore +7 -0
- package/.prettierrc.js +1 -0
- package/.stylelintrc.json +36 -0
- package/.umirc.ts +15 -0
- package/README.md +82 -0
- package/commitlint.config.js +21 -0
- package/docs/index.md +21 -0
- package/jest/setupTests.js +1 -0
- package/lib/Button/demo/Icon/index.d.ts +3 -0
- package/lib/Button/demo/Icon/index.js +82 -0
- package/lib/Button/demo/Icon/index.less +6 -0
- package/lib/Button/demo/basic/index.d.ts +4 -0
- package/lib/Button/demo/basic/index.js +73 -0
- package/lib/Button/demo/basic/index.less +7 -0
- package/lib/Button/demo/disable/index.d.ts +3 -0
- package/lib/Button/demo/disable/index.js +37 -0
- package/lib/Button/demo/disable/index.less +0 -0
- package/lib/Button/demo/href/index.d.ts +2 -0
- package/lib/Button/demo/href/index.js +30 -0
- package/lib/Button/demo/loading/index.d.ts +3 -0
- package/lib/Button/demo/loading/index.js +51 -0
- package/lib/Button/demo/loading/index.less +6 -0
- package/lib/Button/index.d.ts +50 -0
- package/lib/Button/index.js +124 -0
- package/lib/Button/style/index.d.ts +2 -0
- package/lib/Button/style/index.js +5 -0
- package/lib/Button/style/index.less +255 -0
- package/lib/Dropdown/Button.d.ts +69 -0
- package/lib/Dropdown/Button.js +52 -0
- package/lib/Dropdown/demo/basic/index.d.ts +4 -0
- package/lib/Dropdown/demo/basic/index.js +35 -0
- package/lib/Dropdown/demo/button/index.d.ts +3 -0
- package/lib/Dropdown/demo/button/index.js +182 -0
- package/lib/Dropdown/demo/button/index.less +9 -0
- package/lib/Dropdown/demo/placement/index.d.ts +2 -0
- package/lib/Dropdown/demo/placement/index.js +56 -0
- package/lib/Dropdown/demo/subMenu/index.d.ts +2 -0
- package/lib/Dropdown/demo/subMenu/index.js +59 -0
- package/lib/Dropdown/demo/trigger/index.d.ts +2 -0
- package/lib/Dropdown/demo/trigger/index.js +32 -0
- package/lib/Dropdown/index.d.ts +59 -0
- package/lib/Dropdown/index.js +47 -0
- package/lib/Dropdown/style/index.d.ts +2 -0
- package/lib/Dropdown/style/index.js +5 -0
- package/lib/Dropdown/style/index.less +40 -0
- package/lib/Icon/iconfont/demo.css +539 -0
- package/lib/Icon/iconfont/demo_index.html +628 -0
- package/lib/Icon/iconfont/iconfont.css +93 -0
- package/lib/Icon/iconfont/iconfont.js +48 -0
- package/lib/Icon/iconfont/iconfont.json +142 -0
- package/lib/Icon/iconfont/iconfont.ttf +0 -0
- package/lib/Icon/iconfont/iconfont.woff +0 -0
- package/lib/Icon/iconfont/iconfont.woff2 +0 -0
- package/lib/Icon/index.d.ts +11 -0
- package/lib/Icon/index.js +54 -0
- package/lib/Icon/index.less +32 -0
- package/lib/Input/components/Group/index.d.ts +15 -0
- package/lib/Input/components/Group/index.js +24 -0
- package/lib/Input/components/Password/index.d.ts +10 -0
- package/lib/Input/components/Password/index.js +33 -0
- package/lib/Input/components/TextArea/index.d.ts +52 -0
- package/lib/Input/components/TextArea/index.js +26 -0
- package/lib/Input/demo/allowClear/index.d.ts +3 -0
- package/lib/Input/demo/allowClear/index.js +25 -0
- package/lib/Input/demo/allowClear/index.less +0 -0
- package/lib/Input/demo/basic/index.d.ts +4 -0
- package/lib/Input/demo/basic/index.js +80 -0
- package/lib/Input/demo/basic/index.less +6 -0
- package/lib/Input/demo/gourp/index.d.ts +2 -0
- package/lib/Input/demo/gourp/index.js +81 -0
- package/lib/Input/demo/password/index.d.ts +3 -0
- package/lib/Input/demo/password/index.js +35 -0
- package/lib/Input/demo/password/index.less +0 -0
- package/lib/Input/demo/prefix/index.d.ts +3 -0
- package/lib/Input/demo/prefix/index.js +32 -0
- package/lib/Input/demo/prefix/index.less +0 -0
- package/lib/Input/demo/showCount/index.d.ts +3 -0
- package/lib/Input/demo/showCount/index.js +31 -0
- package/lib/Input/demo/showCount/index.less +0 -0
- package/lib/Input/demo/textArea/autoSize.d.ts +2 -0
- package/lib/Input/demo/textArea/autoSize.js +63 -0
- package/lib/Input/index.d.ts +65 -0
- package/lib/Input/index.js +63 -0
- package/lib/Input/style/index.d.ts +2 -0
- package/lib/Input/style/index.js +5 -0
- package/lib/Input/style/index.less +62 -0
- package/lib/Menu/Divider.d.ts +5 -0
- package/lib/Menu/Divider.js +28 -0
- package/lib/Menu/MenuItem.d.ts +17 -0
- package/lib/Menu/MenuItem.js +28 -0
- package/lib/Menu/SubMenu.d.ts +26 -0
- package/lib/Menu/SubMenu.js +44 -0
- package/lib/Menu/index.d.ts +20 -0
- package/lib/Menu/index.js +49 -0
- package/lib/Menu/style/index.d.ts +2 -0
- package/lib/Menu/style/index.js +5 -0
- package/lib/Menu/style/index.less +33 -0
- package/lib/Select/BaseSelect.d.ts +5 -0
- package/lib/Select/BaseSelect.js +433 -0
- package/lib/Select/OptionsList/OptGroup.d.ts +7 -0
- package/lib/Select/OptionsList/OptGroup.js +14 -0
- package/lib/Select/OptionsList/OptionItem.d.ts +35 -0
- package/lib/Select/OptionsList/OptionItem.js +185 -0
- package/lib/Select/OptionsList/Options.d.ts +7 -0
- package/lib/Select/OptionsList/Options.js +14 -0
- package/lib/Select/OptionsList/index.d.ts +4 -0
- package/lib/Select/OptionsList/index.js +207 -0
- package/lib/Select/Selector/index.d.ts +4 -0
- package/lib/Select/Selector/index.js +273 -0
- package/lib/Select/VirtualList.d.ts +5 -0
- package/lib/Select/VirtualList.js +42 -0
- package/lib/Select/demo/disabled/index.d.ts +2 -0
- package/lib/Select/demo/disabled/index.js +64 -0
- package/lib/Select/demo/multiple/index.d.ts +2 -0
- package/lib/Select/demo/multiple/index.js +154 -0
- package/lib/Select/demo/options/index.d.ts +2 -0
- package/lib/Select/demo/options/index.js +69 -0
- package/lib/Select/demo/single/index.d.ts +2 -0
- package/lib/Select/demo/single/index.js +99 -0
- package/lib/Select/hooks/useCacheOption.d.ts +9 -0
- package/lib/Select/hooks/useCacheOption.js +113 -0
- package/lib/Select/index.d.ts +12 -0
- package/lib/Select/index.js +34 -0
- package/lib/Select/interface.d.ts +221 -0
- package/lib/Select/interface.js +5 -0
- package/lib/Select/style/index.d.ts +2 -0
- package/lib/Select/style/index.js +5 -0
- package/lib/Select/style/index.less +539 -0
- package/lib/Select/utils.d.ts +21 -0
- package/lib/Select/utils.js +233 -0
- package/lib/Tabs/TabPane.d.ts +21 -0
- package/lib/Tabs/TabPane.js +24 -0
- package/lib/Tabs/demo/adaptHeight/index.d.ts +3 -0
- package/lib/Tabs/demo/adaptHeight/index.js +34 -0
- package/lib/Tabs/demo/adaptHeight/index.less +3 -0
- package/lib/Tabs/demo/basic/index.d.ts +4 -0
- package/lib/Tabs/demo/basic/index.js +67 -0
- package/lib/Tabs/demo/basic/index.less +5 -0
- package/lib/Tabs/demo/horizontalScroll/index.d.ts +3 -0
- package/lib/Tabs/demo/horizontalScroll/index.js +45 -0
- package/lib/Tabs/demo/horizontalScroll/index.less +3 -0
- package/lib/Tabs/index.d.ts +41 -0
- package/lib/Tabs/index.js +58 -0
- package/lib/Tabs/style/index.d.ts +2 -0
- package/lib/Tabs/style/index.js +5 -0
- package/lib/Tabs/style/index.less +61 -0
- package/lib/Tooltip/demo/basic/index.d.ts +2 -0
- package/lib/Tooltip/demo/basic/index.js +20 -0
- package/lib/Tooltip/demo/overflow/index.d.ts +2 -0
- package/lib/Tooltip/demo/overflow/index.js +20 -0
- package/lib/Tooltip/demo/placement/index.d.ts +6 -0
- package/lib/Tooltip/demo/placement/index.js +86 -0
- package/lib/Tooltip/demo/placement/index.less +7 -0
- package/lib/Tooltip/demo/trigger/index.d.ts +3 -0
- package/lib/Tooltip/demo/trigger/index.js +34 -0
- package/lib/Tooltip/demo/trigger/index.less +5 -0
- package/lib/Tooltip/index.d.ts +63 -0
- package/lib/Tooltip/index.js +44 -0
- package/lib/Tooltip/style/index.d.ts +2 -0
- package/lib/Tooltip/style/index.js +5 -0
- package/lib/Tooltip/style/index.less +14 -0
- package/lib/_utils/hooks/useControlledState.d.ts +2 -0
- package/lib/_utils/hooks/useControlledState.js +63 -0
- package/lib/_utils/hooks/usePrefixCls.d.ts +2 -0
- package/lib/_utils/hooks/usePrefixCls.js +27 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +63 -0
- package/lib/style/index.d.ts +2 -0
- package/lib/style/index.js +5 -0
- package/lib/style/index.less +3 -0
- package/lib/style/mixins/index.less +0 -0
- package/lib/style/themes/default/index.less +36 -0
- package/lib/style/themes/default/themeColor.less +259 -0
- package/package.json +83 -0
- package/public/favicon.ico +0 -0
- package/src/Button/demo/Icon/index.less +6 -0
- package/src/Button/demo/Icon/index.tsx +41 -0
- package/src/Button/demo/basic/index.less +7 -0
- package/src/Button/demo/basic/index.tsx +26 -0
- package/src/Button/demo/disable/index.less +0 -0
- package/src/Button/demo/disable/index.tsx +16 -0
- package/src/Button/demo/href/index.tsx +14 -0
- package/src/Button/demo/loading/index.less +6 -0
- package/src/Button/demo/loading/index.tsx +21 -0
- package/src/Button/index.md +25 -0
- package/src/Button/index.test.tsx +58 -0
- package/src/Button/index.tsx +136 -0
- package/src/Button/style/index.less +255 -0
- package/src/Button/style/index.ts +2 -0
- package/src/Dropdown/Button.tsx +93 -0
- package/src/Dropdown/demo/basic/index.tsx +20 -0
- package/src/Dropdown/demo/button/index.less +9 -0
- package/src/Dropdown/demo/button/index.tsx +98 -0
- package/src/Dropdown/demo/placement/index.tsx +47 -0
- package/src/Dropdown/demo/subMenu/index.tsx +35 -0
- package/src/Dropdown/demo/trigger/index.tsx +19 -0
- package/src/Dropdown/index.md +35 -0
- package/src/Dropdown/index.test.tsx +185 -0
- package/src/Dropdown/index.tsx +71 -0
- package/src/Dropdown/style/index.less +40 -0
- package/src/Dropdown/style/index.ts +2 -0
- package/src/Icon/iconfont/demo.css +539 -0
- package/src/Icon/iconfont/demo_index.html +628 -0
- package/src/Icon/iconfont/iconfont.css +93 -0
- package/src/Icon/iconfont/iconfont.js +1 -0
- package/src/Icon/iconfont/iconfont.json +142 -0
- package/src/Icon/iconfont/iconfont.ttf +0 -0
- package/src/Icon/iconfont/iconfont.woff +0 -0
- package/src/Icon/iconfont/iconfont.woff2 +0 -0
- package/src/Icon/index.less +32 -0
- package/src/Icon/index.tsx +38 -0
- package/src/Input/components/Group/index.tsx +21 -0
- package/src/Input/components/Password/index.tsx +23 -0
- package/src/Input/components/TextArea/index.tsx +57 -0
- package/src/Input/demo/allowClear/index.less +0 -0
- package/src/Input/demo/allowClear/index.tsx +10 -0
- package/src/Input/demo/basic/index.less +6 -0
- package/src/Input/demo/basic/index.tsx +25 -0
- package/src/Input/demo/gourp/index.tsx +30 -0
- package/src/Input/demo/password/index.less +0 -0
- package/src/Input/demo/password/index.tsx +11 -0
- package/src/Input/demo/prefix/index.less +0 -0
- package/src/Input/demo/prefix/index.tsx +13 -0
- package/src/Input/demo/showCount/index.less +0 -0
- package/src/Input/demo/showCount/index.tsx +16 -0
- package/src/Input/demo/textArea/autoSize.tsx +21 -0
- package/src/Input/index.md +37 -0
- package/src/Input/index.test.tsx +78 -0
- package/src/Input/index.tsx +91 -0
- package/src/Input/style/index.less +62 -0
- package/src/Input/style/index.ts +2 -0
- package/src/Menu/Divider.tsx +12 -0
- package/src/Menu/MenuItem.tsx +24 -0
- package/src/Menu/SubMenu.tsx +37 -0
- package/src/Menu/index.md +36 -0
- package/src/Menu/index.test.tsx +144 -0
- package/src/Menu/index.tsx +27 -0
- package/src/Menu/style/index.less +33 -0
- package/src/Menu/style/index.ts +2 -0
- package/src/Select/BaseSelect.tsx +321 -0
- package/src/Select/OptionsList/OptGroup.tsx +9 -0
- package/src/Select/OptionsList/OptionItem.tsx +151 -0
- package/src/Select/OptionsList/Options.tsx +11 -0
- package/src/Select/OptionsList/index.tsx +169 -0
- package/src/Select/Selector/index.tsx +211 -0
- package/src/Select/VirtualList.tsx +36 -0
- package/src/Select/demo/disabled/index.tsx +44 -0
- package/src/Select/demo/multiple/index.tsx +77 -0
- package/src/Select/demo/options/index.tsx +63 -0
- package/src/Select/demo/single/index.tsx +50 -0
- package/src/Select/hooks/useCacheOption.ts +67 -0
- package/src/Select/index.md +72 -0
- package/src/Select/index.tsx +23 -0
- package/src/Select/interface.ts +231 -0
- package/src/Select/style/index.less +539 -0
- package/src/Select/style/index.ts +2 -0
- package/src/Select/utils.tsx +133 -0
- package/src/Tabs/TabPane.tsx +28 -0
- package/src/Tabs/demo/adaptHeight/index.less +3 -0
- package/src/Tabs/demo/adaptHeight/index.tsx +33 -0
- package/src/Tabs/demo/basic/index.less +5 -0
- package/src/Tabs/demo/basic/index.tsx +30 -0
- package/src/Tabs/demo/horizontalScroll/index.less +3 -0
- package/src/Tabs/demo/horizontalScroll/index.tsx +36 -0
- package/src/Tabs/index.md +30 -0
- package/src/Tabs/index.test.tsx +100 -0
- package/src/Tabs/index.tsx +64 -0
- package/src/Tabs/style/index.less +61 -0
- package/src/Tabs/style/index.ts +2 -0
- package/src/Tooltip/demo/basic/index.tsx +10 -0
- package/src/Tooltip/demo/overflow/index.tsx +10 -0
- package/src/Tooltip/demo/placement/index.less +7 -0
- package/src/Tooltip/demo/placement/index.tsx +60 -0
- package/src/Tooltip/demo/trigger/index.less +5 -0
- package/src/Tooltip/demo/trigger/index.tsx +22 -0
- package/src/Tooltip/index.md +28 -0
- package/src/Tooltip/index.test.tsx +152 -0
- package/src/Tooltip/index.tsx +113 -0
- package/src/Tooltip/style/index.less +14 -0
- package/src/Tooltip/style/index.ts +2 -0
- package/src/_utils/hooks/useControlledState.ts +39 -0
- package/src/_utils/hooks/usePrefixCls.ts +11 -0
- package/src/index.ts +8 -0
- package/src/style/index.less +3 -0
- package/src/style/index.ts +2 -0
- package/src/style/mixins/index.less +0 -0
- package/src/style/themes/default/index.less +36 -0
- package/src/style/themes/default/themeColor.less +259 -0
- package/tsconfig.json +13 -0
- package/typings.d.ts +3 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Button as AntdButton } from 'antd';
|
|
3
|
+
import './style';
|
|
4
|
+
import type {
|
|
5
|
+
ButtonType as AntdButtonType,
|
|
6
|
+
ButtonProps as AntdButtonProps,
|
|
7
|
+
ButtonSize as AntdButtonSize,
|
|
8
|
+
} from 'antd/lib/button';
|
|
9
|
+
import classNames from 'classnames';
|
|
10
|
+
import usePrefixCls from '../_utils/hooks/usePrefixCls';
|
|
11
|
+
|
|
12
|
+
const iconPrefixCls = 'anticon';
|
|
13
|
+
const ICON_LARGE = 20;
|
|
14
|
+
const ICON_SMALL = 16;
|
|
15
|
+
export type ButtonType = 'primary' | 'secondary' | 'danger' | 'text' | 'link';
|
|
16
|
+
export type Size = 'small' | 'default' | 'large';
|
|
17
|
+
export interface IButtonProps
|
|
18
|
+
extends Omit<
|
|
19
|
+
AntdButtonProps,
|
|
20
|
+
'type' | 'size' | 'danger' | 'shape' | 'icon' | 'href' | 'target' | 'onClick' | 'loading'
|
|
21
|
+
> {
|
|
22
|
+
/**
|
|
23
|
+
* @description 类型
|
|
24
|
+
* @type 'primary' | 'secondary' | 'danger' | 'text' | 'link'
|
|
25
|
+
* @default primary
|
|
26
|
+
*/
|
|
27
|
+
type?: ButtonType;
|
|
28
|
+
/**
|
|
29
|
+
* @description 尺寸
|
|
30
|
+
* @type 'small' | 'default' | 'large'
|
|
31
|
+
* @default large
|
|
32
|
+
*/
|
|
33
|
+
size?: Size;
|
|
34
|
+
/**
|
|
35
|
+
* @description 是否禁用
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* @description 设置按钮的图标组件
|
|
41
|
+
*/
|
|
42
|
+
icon?: React.ReactNode;
|
|
43
|
+
shape?: 'circle' | 'default';
|
|
44
|
+
/**
|
|
45
|
+
* @description 指定此属性,点击行为和a链接一致
|
|
46
|
+
*/
|
|
47
|
+
href?: string;
|
|
48
|
+
/**
|
|
49
|
+
* @description 相当于 a 链接的 target 属性,href 存在时生效
|
|
50
|
+
*/
|
|
51
|
+
target?: string;
|
|
52
|
+
/**
|
|
53
|
+
* @description 点击按钮时的回调
|
|
54
|
+
*/
|
|
55
|
+
onClick?: React.MouseEventHandler<HTMLElement>;
|
|
56
|
+
/**
|
|
57
|
+
* @description 设置按钮进入载入状态
|
|
58
|
+
* @default false
|
|
59
|
+
*/
|
|
60
|
+
loading?:
|
|
61
|
+
| boolean
|
|
62
|
+
| {
|
|
63
|
+
delay?: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function Button(props: IButtonProps) {
|
|
67
|
+
const prefix = usePrefixCls('btn');
|
|
68
|
+
const { type = 'primary', size = 'default', shape = 'default', icon, className, ...rest } = props;
|
|
69
|
+
|
|
70
|
+
function getButtonType(buttonType: ButtonType): AntdButtonType {
|
|
71
|
+
if (!['primary', 'secondary', 'danger', 'text', 'link'].includes(buttonType)) {
|
|
72
|
+
return 'primary';
|
|
73
|
+
}
|
|
74
|
+
if (buttonType === 'danger') {
|
|
75
|
+
return 'primary';
|
|
76
|
+
}
|
|
77
|
+
if (buttonType === 'secondary') {
|
|
78
|
+
return 'default';
|
|
79
|
+
}
|
|
80
|
+
return buttonType;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function getDangerStatus(buttonType: ButtonType): boolean {
|
|
84
|
+
if (buttonType === 'danger') {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function getButtonSize(ButtonSize: Size): AntdButtonSize {
|
|
91
|
+
switch (ButtonSize) {
|
|
92
|
+
case 'small':
|
|
93
|
+
return 'small';
|
|
94
|
+
case 'large':
|
|
95
|
+
return 'large';
|
|
96
|
+
default:
|
|
97
|
+
return 'middle';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getShape(ButtonShape: 'circle' | 'default'): 'circle' | 'default' {
|
|
102
|
+
if (ButtonShape === 'circle') {
|
|
103
|
+
return ButtonShape;
|
|
104
|
+
}
|
|
105
|
+
return 'default';
|
|
106
|
+
}
|
|
107
|
+
const setIcon = (iconNode: React.ReactElement) => {
|
|
108
|
+
if (iconNode) {
|
|
109
|
+
const p = {
|
|
110
|
+
className: '',
|
|
111
|
+
size: ICON_LARGE,
|
|
112
|
+
...iconNode.props,
|
|
113
|
+
};
|
|
114
|
+
// eslint-disable-next-line
|
|
115
|
+
p.className = classNames(`${iconPrefixCls}-icon-left`, p.className);
|
|
116
|
+
// eslint-disable-next-line
|
|
117
|
+
p.size = size === 'large' ? ICON_LARGE : ICON_SMALL;
|
|
118
|
+
return React.cloneElement(iconNode, p);
|
|
119
|
+
}
|
|
120
|
+
return <></>;
|
|
121
|
+
};
|
|
122
|
+
return (
|
|
123
|
+
<AntdButton
|
|
124
|
+
{...rest}
|
|
125
|
+
icon={setIcon(icon as React.ReactElement)}
|
|
126
|
+
type={getButtonType(type)}
|
|
127
|
+
className={classNames(`${prefix}-${type}`, className)}
|
|
128
|
+
size={getButtonSize(size)}
|
|
129
|
+
danger={getDangerStatus(type)}
|
|
130
|
+
shape={getShape(shape)}
|
|
131
|
+
>
|
|
132
|
+
{props.children}
|
|
133
|
+
</AntdButton>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
export default Button;
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
@import '../../style/index.less';
|
|
2
|
+
|
|
3
|
+
@ald-prefix:ant;
|
|
4
|
+
@ald-iconfont-css-prefix:anticon;
|
|
5
|
+
.@{ald-prefix}-btn {
|
|
6
|
+
|
|
7
|
+
&.@{ald-prefix}-btn {
|
|
8
|
+
// &-loading::before{
|
|
9
|
+
// // display: none !important;
|
|
10
|
+
// }
|
|
11
|
+
|
|
12
|
+
&-primary,
|
|
13
|
+
&-dangerous,
|
|
14
|
+
&-secondary,
|
|
15
|
+
&-text,
|
|
16
|
+
&-link {
|
|
17
|
+
font-size: 12px;
|
|
18
|
+
height: 28px;
|
|
19
|
+
padding: 0 12px;
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
line-height: 1;
|
|
22
|
+
align-items: center;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
justify-content: space-between;
|
|
25
|
+
.@{ald-iconfont-css-prefix} {
|
|
26
|
+
+ span {
|
|
27
|
+
margin-left: 4px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&-icon-left {
|
|
31
|
+
margin-left: -4px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&-icon-right {
|
|
35
|
+
margin-right: -4px;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&-primary {
|
|
41
|
+
background-color: @B40;
|
|
42
|
+
border-color: @B40;
|
|
43
|
+
box-shadow: none;
|
|
44
|
+
border-radius: @border-radius-base;
|
|
45
|
+
text-shadow: @text-shadow;
|
|
46
|
+
&:hover,
|
|
47
|
+
&:focus,
|
|
48
|
+
&:active,
|
|
49
|
+
&.@{ald-prefix}-btn-loading {
|
|
50
|
+
background-color: @B20;
|
|
51
|
+
border-color: @B20;
|
|
52
|
+
color: @ND0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
&[disabled] {
|
|
56
|
+
background-color: @NL90;
|
|
57
|
+
border-color: transparent;
|
|
58
|
+
color: @NL80;
|
|
59
|
+
|
|
60
|
+
&:hover,
|
|
61
|
+
&:focus,
|
|
62
|
+
&:active {
|
|
63
|
+
background-color: @NL90;
|
|
64
|
+
border-color: transparent;
|
|
65
|
+
color: @NL80;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
&-dangerous.@{ald-prefix}-btn-primary {
|
|
70
|
+
background-color: @SC40;
|
|
71
|
+
border-color: @SC40;
|
|
72
|
+
color: @ND0;
|
|
73
|
+
text-shadow: @text-shadow;
|
|
74
|
+
box-shadow: unset;
|
|
75
|
+
|
|
76
|
+
&:hover {
|
|
77
|
+
background-color: @SC20;
|
|
78
|
+
border-color: @SC20;
|
|
79
|
+
color: @ND0;
|
|
80
|
+
}
|
|
81
|
+
&:focus,
|
|
82
|
+
&:active,
|
|
83
|
+
&.@{ald-prefix}-btn-loading {
|
|
84
|
+
background-color: @SC20;
|
|
85
|
+
border-color: @SC20;
|
|
86
|
+
color: @ND0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&[disabled] {
|
|
90
|
+
background-color: @NL90;
|
|
91
|
+
border-color: transparent;
|
|
92
|
+
color: @NL80;
|
|
93
|
+
|
|
94
|
+
&:hover,
|
|
95
|
+
&:focus,
|
|
96
|
+
&:active {
|
|
97
|
+
background-color: @NL90;
|
|
98
|
+
border-color: transparent;
|
|
99
|
+
color: @NL80;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&-secondary {
|
|
105
|
+
background-color: @BG100;
|
|
106
|
+
border-color: @NL90;
|
|
107
|
+
color: @NL30;
|
|
108
|
+
box-shadow: none;
|
|
109
|
+
border-radius: @border-radius-base;
|
|
110
|
+
text-shadow: @text-shadow;
|
|
111
|
+
|
|
112
|
+
&:hover,
|
|
113
|
+
&:focus,
|
|
114
|
+
&:active,
|
|
115
|
+
&.@{ald-prefix}-btn-loading {
|
|
116
|
+
background-color: @NL97;
|
|
117
|
+
border-color: @NL90;
|
|
118
|
+
color: @NL30;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&[disabled] {
|
|
122
|
+
background-color: @BG100;
|
|
123
|
+
border-color: @NL90;
|
|
124
|
+
color: @NL80;
|
|
125
|
+
|
|
126
|
+
&:hover,
|
|
127
|
+
&:focus,
|
|
128
|
+
&:active {
|
|
129
|
+
background-color: @BG100;
|
|
130
|
+
border-color: @NL90;
|
|
131
|
+
color: @NL80;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&-text {
|
|
137
|
+
background-color: @BG100;
|
|
138
|
+
border-color: @BG100;
|
|
139
|
+
color: @NL30;
|
|
140
|
+
box-shadow: none;
|
|
141
|
+
border-radius: @border-radius-base;
|
|
142
|
+
text-shadow: @text-shadow;
|
|
143
|
+
&:hover,
|
|
144
|
+
&:focus,
|
|
145
|
+
&:active,
|
|
146
|
+
&.@{ald-prefix}-btn-loading {
|
|
147
|
+
background-color: @NL97;
|
|
148
|
+
// border-color: @NL97;
|
|
149
|
+
color: @NL30;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&[disabled] {
|
|
153
|
+
background-color: transparent;
|
|
154
|
+
border-color: transparent;
|
|
155
|
+
color: @NL80;
|
|
156
|
+
|
|
157
|
+
&:hover,
|
|
158
|
+
&:focus,
|
|
159
|
+
&:active {
|
|
160
|
+
background-color: transparent;
|
|
161
|
+
border-color: transparent;
|
|
162
|
+
color: @NL80;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
&-link {
|
|
168
|
+
background-color: @BG100;
|
|
169
|
+
border-color: @BG100;
|
|
170
|
+
color: @B40;
|
|
171
|
+
font-weight: 400;
|
|
172
|
+
box-shadow: none;
|
|
173
|
+
border-radius: @border-radius-base;
|
|
174
|
+
text-shadow: @text-shadow;
|
|
175
|
+
&:hover,
|
|
176
|
+
&:focus,
|
|
177
|
+
&:active,
|
|
178
|
+
&.@{ald-prefix}-btn-loading {
|
|
179
|
+
background-color: @BG100;
|
|
180
|
+
border-color: @BG100;
|
|
181
|
+
color: @B20;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&[disabled] {
|
|
185
|
+
background-color: transparent;
|
|
186
|
+
border-color: transparent;
|
|
187
|
+
color: @NL80;
|
|
188
|
+
|
|
189
|
+
&:hover,
|
|
190
|
+
&:focus,
|
|
191
|
+
&:active {
|
|
192
|
+
background-color: transparent;
|
|
193
|
+
border-color: transparent;
|
|
194
|
+
color: @NL80;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
&-icon-only {
|
|
200
|
+
justify-content: center;
|
|
201
|
+
padding: 0;
|
|
202
|
+
vertical-align: bottom;
|
|
203
|
+
height: @height-base;
|
|
204
|
+
width: @height-base;
|
|
205
|
+
&.@{ald-prefix}-btn-loading-icon {
|
|
206
|
+
vertical-align: baseline;
|
|
207
|
+
}
|
|
208
|
+
.@{ald-iconfont-css-prefix} {
|
|
209
|
+
display: flex;
|
|
210
|
+
align-items: center;
|
|
211
|
+
justify-content: center;
|
|
212
|
+
margin-left: 0;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
&-circle {
|
|
217
|
+
width: @height-base;
|
|
218
|
+
min-width: auto;
|
|
219
|
+
padding: 0;
|
|
220
|
+
justify-content: center;
|
|
221
|
+
border-radius: 50%;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
&-lg {
|
|
225
|
+
height: 32px;
|
|
226
|
+
font-size: 14px;
|
|
227
|
+
min-width: auto;
|
|
228
|
+
&.@{ald-prefix}-btn-icon-only {
|
|
229
|
+
height: 32px;
|
|
230
|
+
width: 32px;
|
|
231
|
+
min-width: auto;
|
|
232
|
+
}
|
|
233
|
+
&.@{ald-prefix}-btn-circle {
|
|
234
|
+
width: 32px;
|
|
235
|
+
height: 32px;
|
|
236
|
+
border-radius: 50%;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
&-sm {
|
|
241
|
+
height: 24px;
|
|
242
|
+
border-radius: @border-radius-sm;
|
|
243
|
+
&.@{ald-prefix}-btn-icon-only {
|
|
244
|
+
height: 24px;
|
|
245
|
+
width: 24px;
|
|
246
|
+
border-radius: @border-radius-sm;
|
|
247
|
+
}
|
|
248
|
+
&.@{ald-prefix}-btn-circle {
|
|
249
|
+
width: 32px;
|
|
250
|
+
height: 32px;
|
|
251
|
+
border-radius: 50%;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React, { ReactElement } from 'react';
|
|
2
|
+
import Button, { ButtonType, Size} from '../Button';
|
|
3
|
+
// eslint-disable-next-line import/no-cycle
|
|
4
|
+
import Dropdown from './index';
|
|
5
|
+
import Icon from '../Icon';
|
|
6
|
+
import './style'
|
|
7
|
+
|
|
8
|
+
export type ActionType = 'hover' | 'click' | 'contextMenu';
|
|
9
|
+
|
|
10
|
+
export interface IDropdownButton {
|
|
11
|
+
/**
|
|
12
|
+
* @description 类型
|
|
13
|
+
* @type 'primary' | 'secondary' | 'danger' | 'text' | 'link'
|
|
14
|
+
* @default primary
|
|
15
|
+
*/
|
|
16
|
+
type?: ButtonType;
|
|
17
|
+
/**
|
|
18
|
+
* @description 尺寸
|
|
19
|
+
* @type 'small' | 'default' | 'large'
|
|
20
|
+
* @default large
|
|
21
|
+
*/
|
|
22
|
+
size?: Size;
|
|
23
|
+
/**
|
|
24
|
+
* @description 是否禁用
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* @description 设置按钮的图标组件
|
|
30
|
+
*/
|
|
31
|
+
icon?: React.ReactNode;
|
|
32
|
+
/**
|
|
33
|
+
* @description 设置按钮进入载入状态
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
loading?: boolean | {
|
|
37
|
+
delay?: number;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* @description 菜单
|
|
41
|
+
* @type Menu | () => Menu
|
|
42
|
+
* @default -
|
|
43
|
+
*/
|
|
44
|
+
overlay: ReactElement | (() => ReactElement);
|
|
45
|
+
/**
|
|
46
|
+
* @description 菜单弹出位置
|
|
47
|
+
* @default bottomLeft
|
|
48
|
+
*/
|
|
49
|
+
placement?: 'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight';
|
|
50
|
+
/**
|
|
51
|
+
* @description 触发下拉的行为
|
|
52
|
+
* @type ActionType[], 其中 ActionType 为 'hover' | 'click' | 'contextMenu';
|
|
53
|
+
* @default [hover]
|
|
54
|
+
*/
|
|
55
|
+
trigger?: ActionType[];
|
|
56
|
+
/**
|
|
57
|
+
* @description 菜单是否显示
|
|
58
|
+
* @default -
|
|
59
|
+
*/
|
|
60
|
+
visible?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* @description 菜单显示状态改变时调用,参数为 visible,点击菜单按钮导致的消失不会触发
|
|
63
|
+
* @default -
|
|
64
|
+
*/
|
|
65
|
+
onVisibleChange?: (visible: boolean) => void;
|
|
66
|
+
/**
|
|
67
|
+
* @description 点击按钮时的回调
|
|
68
|
+
* FIXME: onClick和trigger冲突,antd按钮和下拉菜单触发区域不同,需要和视觉确认
|
|
69
|
+
*/
|
|
70
|
+
onClick?: React.MouseEventHandler<HTMLElement>;
|
|
71
|
+
children?: React.ReactNode;
|
|
72
|
+
className?: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export default function DropdownButton(props: IDropdownButton) {
|
|
76
|
+
const { children, overlay, placement, trigger, visible, disabled, onVisibleChange, ...buttonProps } = props;
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<Dropdown
|
|
80
|
+
overlay={overlay}
|
|
81
|
+
placement={placement}
|
|
82
|
+
trigger={trigger}
|
|
83
|
+
visible={visible}
|
|
84
|
+
disabled={disabled}
|
|
85
|
+
onVisibleChange={onVisibleChange}
|
|
86
|
+
>
|
|
87
|
+
<Button {...buttonProps}>
|
|
88
|
+
{children}
|
|
89
|
+
<Icon type="expand_more" />
|
|
90
|
+
</Button>
|
|
91
|
+
</Dropdown>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Dropdown, Menu } from '@aloudata/aloudata-design';
|
|
3
|
+
import '../../style/index.less';
|
|
4
|
+
import '../../../Menu/style/index.less';
|
|
5
|
+
const MenuItem = Menu.Item;
|
|
6
|
+
|
|
7
|
+
export default () => {
|
|
8
|
+
const menu = (
|
|
9
|
+
<Menu>
|
|
10
|
+
<MenuItem key={1}>1st menu item</MenuItem>
|
|
11
|
+
<MenuItem key={2} disabled>2nd menu item</MenuItem>
|
|
12
|
+
<MenuItem key={3}>3nd menu item</MenuItem>
|
|
13
|
+
</Menu>
|
|
14
|
+
);
|
|
15
|
+
return (
|
|
16
|
+
<Dropdown overlay={menu}>
|
|
17
|
+
<span>Hover me</span>
|
|
18
|
+
</Dropdown>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import React, { Dispatch, SetStateAction, useState } from 'react';
|
|
2
|
+
import Icon from '../../../Icon';
|
|
3
|
+
import Radio, { RadioChangeEvent } from 'antd/lib/radio';
|
|
4
|
+
import { Dropdown, Menu } from '@aloudata/aloudata-design';
|
|
5
|
+
import './index.less';
|
|
6
|
+
|
|
7
|
+
const DropdownButton = Dropdown.Button;
|
|
8
|
+
|
|
9
|
+
export default () => {
|
|
10
|
+
const [size, setSize] = useState('default');
|
|
11
|
+
const [type, setType] = useState('primary');
|
|
12
|
+
const [disabled, setDisabled] = useState(false);
|
|
13
|
+
const [isIcon, setIsIcon] = useState(false);
|
|
14
|
+
const [loading, setLoading] = useState(false);
|
|
15
|
+
const [placement, setPlacement] = useState('bottomLeft');
|
|
16
|
+
|
|
17
|
+
const menu = (
|
|
18
|
+
<Menu>
|
|
19
|
+
<Menu.Item key="1">1st menu item</Menu.Item>
|
|
20
|
+
<Menu.Item key="2">2nd menu item</Menu.Item>
|
|
21
|
+
<Menu.Item key="3">3rd menu item, long long content</Menu.Item>
|
|
22
|
+
</Menu>
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
function onChangeValue<T>(setCallback: Dispatch<SetStateAction<T>>) {
|
|
26
|
+
return (e: RadioChangeEvent) => setCallback(e.target.value);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div className="demo-dropdown-button">
|
|
31
|
+
<div>
|
|
32
|
+
<div className="row">
|
|
33
|
+
<span className="title">type:</span>
|
|
34
|
+
<Radio.Group value={type} onChange={onChangeValue<string>(setType)}>
|
|
35
|
+
<Radio value="primary">primary</Radio>
|
|
36
|
+
<Radio value="secondary">secondary</Radio>
|
|
37
|
+
<Radio value="danger">danger</Radio>
|
|
38
|
+
<Radio value="text">text</Radio>
|
|
39
|
+
<Radio value="link">link</Radio>
|
|
40
|
+
</Radio.Group>
|
|
41
|
+
</div>
|
|
42
|
+
<div className="row">
|
|
43
|
+
<span className="title">size:</span>
|
|
44
|
+
<Radio.Group value={size} onChange={onChangeValue<string>(setSize)}>
|
|
45
|
+
<Radio value="large">large</Radio>
|
|
46
|
+
<Radio value="default">default</Radio>
|
|
47
|
+
<Radio value="small">small</Radio>
|
|
48
|
+
</Radio.Group>
|
|
49
|
+
</div>
|
|
50
|
+
<div className="row">
|
|
51
|
+
<span className="title">disabled:</span>
|
|
52
|
+
<Radio.Group value={disabled} onChange={onChangeValue<boolean>(setDisabled)}>
|
|
53
|
+
<Radio value={true}>true</Radio>
|
|
54
|
+
<Radio value={false}>false</Radio>
|
|
55
|
+
</Radio.Group>
|
|
56
|
+
</div>
|
|
57
|
+
<div className="row">
|
|
58
|
+
<span className="title">icon button:</span>
|
|
59
|
+
<Radio.Group value={isIcon} onChange={onChangeValue<boolean>(setIsIcon)}>
|
|
60
|
+
<Radio value={true}>icon button</Radio>
|
|
61
|
+
<Radio value={false}>not icon button</Radio>
|
|
62
|
+
</Radio.Group>
|
|
63
|
+
</div>
|
|
64
|
+
<div className="row">
|
|
65
|
+
<span className="title">loading:</span>
|
|
66
|
+
<Radio.Group value={loading} onChange={onChangeValue<boolean>(setLoading)}>
|
|
67
|
+
<Radio value={true}>loading</Radio>
|
|
68
|
+
<Radio value={false}>not loading</Radio>
|
|
69
|
+
</Radio.Group>
|
|
70
|
+
</div>
|
|
71
|
+
<div className="row">
|
|
72
|
+
<span className="title">placement:</span>
|
|
73
|
+
<Radio.Group value={placement} onChange={onChangeValue<string>(setPlacement)}>
|
|
74
|
+
<Radio value="bottomLeft">bottomLeft</Radio>
|
|
75
|
+
<Radio value="bottomCenter">bottomCenter</Radio>
|
|
76
|
+
<Radio value="bottomRight">bottomRight</Radio>
|
|
77
|
+
<Radio value="topLeft">topLeft</Radio>
|
|
78
|
+
<Radio value="topCenter">topCenter</Radio>
|
|
79
|
+
<Radio value="topRight">topRight</Radio>
|
|
80
|
+
</Radio.Group>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
<div>
|
|
84
|
+
<DropdownButton
|
|
85
|
+
overlay={menu}
|
|
86
|
+
icon={isIcon && <Icon type="Positioning" />}
|
|
87
|
+
loading={loading}
|
|
88
|
+
disabled={disabled}
|
|
89
|
+
size={size}
|
|
90
|
+
type={type}
|
|
91
|
+
placement={placement}
|
|
92
|
+
>
|
|
93
|
+
{isIcon ? null : 'Button Content'}
|
|
94
|
+
</DropdownButton>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Button from 'antd/lib/button';
|
|
3
|
+
import Space from 'antd/lib/space';
|
|
4
|
+
import { Dropdown, Menu } from '@aloudata/aloudata-design';
|
|
5
|
+
|
|
6
|
+
const menu = (
|
|
7
|
+
<Menu>
|
|
8
|
+
<Menu.Item key={1}>
|
|
9
|
+
1st menu item
|
|
10
|
+
</Menu.Item>
|
|
11
|
+
<Menu.Item key={2}>
|
|
12
|
+
2nd menu item
|
|
13
|
+
</Menu.Item>
|
|
14
|
+
<Menu.Item key={3}>
|
|
15
|
+
3rd menu item
|
|
16
|
+
</Menu.Item>
|
|
17
|
+
</Menu>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default () => (
|
|
21
|
+
<div className="demo-dropdown-placement">
|
|
22
|
+
<Space direction="vertical">
|
|
23
|
+
<Space wrap>
|
|
24
|
+
<Dropdown overlay={menu} placement="bottomLeft">
|
|
25
|
+
<Button>bottomLeft</Button>
|
|
26
|
+
</Dropdown>
|
|
27
|
+
<Dropdown overlay={menu} placement="bottomCenter">
|
|
28
|
+
<Button>bottomCenter</Button>
|
|
29
|
+
</Dropdown>
|
|
30
|
+
<Dropdown overlay={menu} placement="bottomRight">
|
|
31
|
+
<Button>bottomRight</Button>
|
|
32
|
+
</Dropdown>
|
|
33
|
+
</Space>
|
|
34
|
+
<Space wrap>
|
|
35
|
+
<Dropdown overlay={menu} placement="topLeft">
|
|
36
|
+
<Button>topLeft</Button>
|
|
37
|
+
</Dropdown>
|
|
38
|
+
<Dropdown overlay={menu} placement="topCenter">
|
|
39
|
+
<Button>topCenter</Button>
|
|
40
|
+
</Dropdown>
|
|
41
|
+
<Dropdown overlay={menu} placement="topRight">
|
|
42
|
+
<Button>topRight</Button>
|
|
43
|
+
</Dropdown>
|
|
44
|
+
</Space>
|
|
45
|
+
</Space>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { message} from 'antd';
|
|
3
|
+
import { Dropdown, Menu } from '@aloudata/aloudata-design';
|
|
4
|
+
|
|
5
|
+
const MenuItem = Menu.Item;
|
|
6
|
+
const SubMenu = Menu.SubMenu;
|
|
7
|
+
const MenuDivider = Menu.Divider;
|
|
8
|
+
|
|
9
|
+
export default () => {
|
|
10
|
+
const menu = (
|
|
11
|
+
<Menu onClick={(info: { key: string }) => {
|
|
12
|
+
message.info(`Click on menu item ${info.key}`);
|
|
13
|
+
}}>
|
|
14
|
+
<MenuItem key={1}>1st menu item</MenuItem>
|
|
15
|
+
<MenuItem key={2} disabled>2nd menu item</MenuItem>
|
|
16
|
+
<MenuItem key={3}>3nd menu item</MenuItem>
|
|
17
|
+
<MenuDivider />
|
|
18
|
+
<SubMenu key={4} title="sub menu">
|
|
19
|
+
<MenuItem key={5}>Sub menu item5</MenuItem>
|
|
20
|
+
<MenuItem key={6}>Sub menu item6Sub menu item6Sub menu item6Sub menu item6</MenuItem>
|
|
21
|
+
<MenuItem key={7}>Sub menu item7</MenuItem>
|
|
22
|
+
<SubMenu key={8} title="sub menu">
|
|
23
|
+
<MenuItem key={9}>Sub menu item9</MenuItem>
|
|
24
|
+
<MenuItem key={10}>Sub menu item10</MenuItem>
|
|
25
|
+
<MenuItem key={11}>Sub menu item11</MenuItem>
|
|
26
|
+
</SubMenu>
|
|
27
|
+
</SubMenu>
|
|
28
|
+
</Menu>
|
|
29
|
+
);
|
|
30
|
+
return (
|
|
31
|
+
<Dropdown overlay={menu}>
|
|
32
|
+
<span>Hover me</span>
|
|
33
|
+
</Dropdown>
|
|
34
|
+
);
|
|
35
|
+
}
|