@arcblock/ux 1.17.14 → 1.17.15
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/lib/Header/header.js +100 -0
- package/lib/Header/index.js +15 -116
- package/lib/Header/responsive-header.js +132 -0
- package/lib/NavMenu/nav-menu.js +73 -51
- package/lib/NavMenu/style.js +28 -0
- package/package.json +4 -4
- package/src/Header/header.js +157 -0
- package/src/Header/index.js +2 -156
- package/src/Header/responsive-header.js +136 -0
- package/src/NavMenu/nav-menu.js +56 -85
- package/src/NavMenu/style.js +182 -0
- package/lib/NavMenu/style.css +0 -48
- package/src/NavMenu/style.css +0 -48
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _Box = _interopRequireDefault(require("@material-ui/core/Box"));
|
|
15
|
+
|
|
16
|
+
var _Container = _interopRequireDefault(require("@material-ui/core/Container"));
|
|
17
|
+
|
|
18
|
+
var _useTheme = _interopRequireDefault(require("@material-ui/core/styles/useTheme"));
|
|
19
|
+
|
|
20
|
+
const _excluded = ["logo", "brand", "brandAddon", "description", "children", "addons", "prepend", "containerComponent"];
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Header 组件
|
|
30
|
+
* TODO: Layout/dashboard 可以复用此处的 header
|
|
31
|
+
*/
|
|
32
|
+
function Header(_ref) {
|
|
33
|
+
let {
|
|
34
|
+
logo,
|
|
35
|
+
brand,
|
|
36
|
+
brandAddon,
|
|
37
|
+
description,
|
|
38
|
+
children,
|
|
39
|
+
addons,
|
|
40
|
+
prepend,
|
|
41
|
+
containerComponent: ContainerComponent
|
|
42
|
+
} = _ref,
|
|
43
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
44
|
+
|
|
45
|
+
const theme = (0, _useTheme.default)();
|
|
46
|
+
return /*#__PURE__*/_react.default.createElement(Root, Object.assign({}, rest, {
|
|
47
|
+
$theme: theme
|
|
48
|
+
}), /*#__PURE__*/_react.default.createElement(ContainerComponent, {
|
|
49
|
+
className: "header-container"
|
|
50
|
+
}, prepend, logo && /*#__PURE__*/_react.default.createElement("div", {
|
|
51
|
+
className: "header-logo"
|
|
52
|
+
}, logo), /*#__PURE__*/_react.default.createElement("div", {
|
|
53
|
+
className: "header-brand"
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
55
|
+
className: "header-brand-title"
|
|
56
|
+
}, /*#__PURE__*/_react.default.createElement("h2", null, brand), /*#__PURE__*/_react.default.createElement("div", {
|
|
57
|
+
className: "header-brand-addon"
|
|
58
|
+
}, brandAddon)), /*#__PURE__*/_react.default.createElement("div", {
|
|
59
|
+
className: "header-brand-desc"
|
|
60
|
+
}, description)), children, /*#__PURE__*/_react.default.createElement(_Box.default, {
|
|
61
|
+
flexGrow: 1
|
|
62
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
63
|
+
className: "header-addons"
|
|
64
|
+
}, addons)));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
Header.propTypes = {
|
|
68
|
+
logo: _propTypes.default.node,
|
|
69
|
+
// 相当于 Title
|
|
70
|
+
brand: _propTypes.default.string,
|
|
71
|
+
// brand 右侧的内容区域, 可显示一个 badge 或 tag
|
|
72
|
+
brandAddon: _propTypes.default.node,
|
|
73
|
+
// brand 下方的描述
|
|
74
|
+
description: _propTypes.default.string,
|
|
75
|
+
children: _propTypes.default.node,
|
|
76
|
+
// 右侧区域, 可以放置 icons/actions/login 等
|
|
77
|
+
addons: _propTypes.default.node,
|
|
78
|
+
// logo 左侧内容
|
|
79
|
+
prepend: _propTypes.default.node,
|
|
80
|
+
// 默认使用 mui 的 Container, 如果不想限制 header 内容区域的宽度, 可以设置为 div
|
|
81
|
+
containerComponent: _propTypes.default.elementType
|
|
82
|
+
};
|
|
83
|
+
Header.defaultProps = {
|
|
84
|
+
logo: null,
|
|
85
|
+
brand: null,
|
|
86
|
+
brandAddon: null,
|
|
87
|
+
description: null,
|
|
88
|
+
children: null,
|
|
89
|
+
addons: null,
|
|
90
|
+
prepend: null,
|
|
91
|
+
containerComponent: _Container.default
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const Root = _styledComponents.default.div.withConfig({
|
|
95
|
+
displayName: "header__Root",
|
|
96
|
+
componentId: "sc-15qnwg1-0"
|
|
97
|
+
})(["position:relative;z-index:", ";font-size:14px;background:", ";.header-container{display:flex;align-items:center;height:64px;padding:8px 16px;}.header-logo{display:inline-flex;justify-content:center;position:relative;height:40px;margin-right:16px;img,svg{width:auto;height:100%;}> a{height:100%;line-height:1;}> a::before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:'';}}.header-brand{display:flex;flex-direction:column;flex-shrink:0;margin-right:16px;.header-brand-title{display:flex;align-items:center;h2{font-size:16px;}.header-brand-addon{margin-left:8px;}}.header-brand-desc{color:#9397a1;}}.header-addons{display:flex;align-items:center;}", "{.header-brand{margin-right:12px;.header-brand-title{h2{font-size:14px;}}}}", "{.header-container{height:56px;}.header-menu{display:inline-block;}.header-logo{height:32px;}.header-brand{display:none;}}"], props => props.$theme.zIndex.drawer + 1, props => props.$theme.palette.common.white, props => props.$theme.breakpoints.down('md'), props => props.$theme.breakpoints.down('sm'));
|
|
98
|
+
|
|
99
|
+
var _default = Header;
|
|
100
|
+
exports.default = _default;
|
package/lib/Header/index.js
CHANGED
|
@@ -3,122 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var _useMediaQuery = _interopRequireDefault(require("@material-ui/core/useMediaQuery"));
|
|
19
|
-
|
|
20
|
-
var _Menu = _interopRequireDefault(require("@material-ui/icons/Menu"));
|
|
21
|
-
|
|
22
|
-
var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
|
|
23
|
-
|
|
24
|
-
const _excluded = ["logo", "brand", "brandAddon", "description", "children", "addons", "mobile", "onToggleMenu"];
|
|
25
|
-
|
|
26
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
-
|
|
28
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
-
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
31
|
-
|
|
32
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
-
|
|
34
|
-
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; }
|
|
35
|
-
|
|
36
|
-
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; }
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Header 组件
|
|
40
|
-
* TODO: Layout/dashboard 可以复用此处的 header
|
|
41
|
-
*/
|
|
42
|
-
function Header(_ref) {
|
|
43
|
-
let {
|
|
44
|
-
logo,
|
|
45
|
-
brand,
|
|
46
|
-
brandAddon,
|
|
47
|
-
description,
|
|
48
|
-
children,
|
|
49
|
-
addons,
|
|
50
|
-
mobile,
|
|
51
|
-
onToggleMenu
|
|
52
|
-
} = _ref,
|
|
53
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
54
|
-
|
|
55
|
-
const theme = (0, _useTheme.default)();
|
|
56
|
-
const isMobile = (0, _useMediaQuery.default)(theme.breakpoints.down('sm'));
|
|
57
|
-
|
|
58
|
-
const _mobile = _objectSpread(_objectSpread({}, Header.defaultProps.mobile), mobile); // 暂时不要通过 display: none 隐藏 logo, https://blog.patw.me/archives/1820/inline-svg-same-id-and-display-none-issue/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const hideLogo = isMobile && _mobile.hideLogo;
|
|
62
|
-
return /*#__PURE__*/_react.default.createElement(Root, Object.assign({}, rest, {
|
|
63
|
-
$theme: theme
|
|
64
|
-
}), _mobile.enableMenu && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
65
|
-
color: "inherit",
|
|
66
|
-
edge: "start",
|
|
67
|
-
className: "header-menu",
|
|
68
|
-
onClick: onToggleMenu
|
|
69
|
-
}, /*#__PURE__*/_react.default.createElement(_Menu.default, null)), !hideLogo && /*#__PURE__*/_react.default.createElement("div", {
|
|
70
|
-
className: "header-logo"
|
|
71
|
-
}, logo), /*#__PURE__*/_react.default.createElement("div", {
|
|
72
|
-
className: "header-brand"
|
|
73
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
74
|
-
className: "header-brand-title"
|
|
75
|
-
}, /*#__PURE__*/_react.default.createElement("h2", null, brand), /*#__PURE__*/_react.default.createElement("div", {
|
|
76
|
-
className: "header-brand-addon"
|
|
77
|
-
}, brandAddon)), /*#__PURE__*/_react.default.createElement("div", {
|
|
78
|
-
className: "header-brand-desc"
|
|
79
|
-
}, description)), children, /*#__PURE__*/_react.default.createElement(_Box.default, {
|
|
80
|
-
flexGrow: 1
|
|
81
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
82
|
-
className: "header-addons"
|
|
83
|
-
}, addons));
|
|
84
|
-
}
|
|
6
|
+
Object.defineProperty(exports, "Header", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _header.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "ResponsiveHeader", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _responsiveHeader.default;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
85
18
|
|
|
86
|
-
|
|
87
|
-
logo: _propTypes.default.any,
|
|
88
|
-
// 相当于 Title
|
|
89
|
-
brand: _propTypes.default.string,
|
|
90
|
-
// brand 右侧的内容区域, 可显示一个 badge 或 tag
|
|
91
|
-
brandAddon: _propTypes.default.any,
|
|
92
|
-
// brand 下方的描述
|
|
93
|
-
description: _propTypes.default.string,
|
|
94
|
-
children: _propTypes.default.any,
|
|
95
|
-
// 右侧区域, 可以放置 icons/actions/login 等
|
|
96
|
-
addons: _propTypes.default.any,
|
|
97
|
-
// 窄屏下配置
|
|
98
|
-
mobile: _propTypes.default.shape({
|
|
99
|
-
enableMenu: _propTypes.default.bool,
|
|
100
|
-
hideLogo: _propTypes.default.bool
|
|
101
|
-
}),
|
|
102
|
-
onToggleMenu: _propTypes.default.func
|
|
103
|
-
};
|
|
104
|
-
Header.defaultProps = {
|
|
105
|
-
logo: null,
|
|
106
|
-
brand: null,
|
|
107
|
-
brandAddon: null,
|
|
108
|
-
description: null,
|
|
109
|
-
children: null,
|
|
110
|
-
addons: null,
|
|
111
|
-
mobile: {
|
|
112
|
-
enableMenu: true,
|
|
113
|
-
hideLogo: true
|
|
114
|
-
},
|
|
115
|
-
onToggleMenu: () => {}
|
|
116
|
-
};
|
|
19
|
+
var _header = _interopRequireDefault(require("./header"));
|
|
117
20
|
|
|
118
|
-
|
|
119
|
-
displayName: "Header__Root",
|
|
120
|
-
componentId: "sc-ea5eli-0"
|
|
121
|
-
})(["display:flex;align-items:center;position:relative;z-index:", ";height:64px;padding:12px 24px;font-size:14px;background:#fff;.header-menu{display:none;}.header-logo{display:inline-flex;justify-content:center;position:relative;height:40px;margin-right:16px;img,svg{width:auto;height:100%;}> a{height:100%;line-height:1;}> a::before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:'';}}.header-brand{display:flex;flex-direction:column;margin-right:16px;.header-brand-title{display:flex;align-items:center;h2{font-size:16px;}.header-brand-addon{margin-left:8px;}}.header-brand-desc{color:#9397a1;}}.header-addons{display:flex;align-items:center;}", "{height:56px;padding:8px 16px;.header-menu{display:inline-block;}.header-logo{height:32px;}.header-brand{display:none;}}"], props => props.$theme.zIndex.drawer + 1, props => props.$theme.breakpoints.down('sm'));
|
|
21
|
+
var _responsiveHeader = _interopRequireDefault(require("./responsive-header"));
|
|
122
22
|
|
|
123
|
-
|
|
124
|
-
exports.default = _default;
|
|
23
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _Menu = _interopRequireDefault(require("@material-ui/icons/Menu"));
|
|
15
|
+
|
|
16
|
+
var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
|
|
17
|
+
|
|
18
|
+
var _useTheme = _interopRequireDefault(require("@material-ui/core/styles/useTheme"));
|
|
19
|
+
|
|
20
|
+
var _useMediaQuery = _interopRequireDefault(require("@material-ui/core/useMediaQuery"));
|
|
21
|
+
|
|
22
|
+
var _Drawer = _interopRequireDefault(require("@material-ui/core/Drawer"));
|
|
23
|
+
|
|
24
|
+
var _header = _interopRequireDefault(require("./header"));
|
|
25
|
+
|
|
26
|
+
const _excluded = ["menu", "prepend", "children"];
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
34
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
35
|
+
|
|
36
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
37
|
+
|
|
38
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
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; }
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* ResponsiveHeader
|
|
46
|
+
* - 窄屏下显示 burge menu
|
|
47
|
+
* - 窄屏下将 children 区域显示到 menu 中
|
|
48
|
+
*
|
|
49
|
+
* 注意: 暂时不要通过 display: none 隐藏 logo, https://blog.patw.me/archives/1820/inline-svg-same-id-and-display-none-issue/
|
|
50
|
+
*/
|
|
51
|
+
function ResponsiveHeader(_ref) {
|
|
52
|
+
let {
|
|
53
|
+
menu,
|
|
54
|
+
prepend,
|
|
55
|
+
children
|
|
56
|
+
} = _ref,
|
|
57
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
58
|
+
|
|
59
|
+
const theme = (0, _useTheme.default)();
|
|
60
|
+
const isMobile = (0, _useMediaQuery.default)(theme.breakpoints.down('sm'));
|
|
61
|
+
const [drawerOpen, setDrawerOpen] = (0, _react.useState)(false);
|
|
62
|
+
|
|
63
|
+
const _children = typeof children === 'function' ? children({
|
|
64
|
+
isMobile,
|
|
65
|
+
closeMenu: () => setDrawerOpen(false)
|
|
66
|
+
}) : children;
|
|
67
|
+
|
|
68
|
+
const {
|
|
69
|
+
logo,
|
|
70
|
+
brand,
|
|
71
|
+
brandAddon,
|
|
72
|
+
description
|
|
73
|
+
} = rest; // 如果 children 没有值, 则使用普通的 Header 组件渲染 (此时并没有什么内容需要在 menu 中显示)
|
|
74
|
+
|
|
75
|
+
if (!children) {
|
|
76
|
+
return /*#__PURE__*/_react.default.createElement(_header.default, Object.assign({
|
|
77
|
+
prepend: prepend
|
|
78
|
+
}, rest));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return /*#__PURE__*/_react.default.createElement(Root, Object.assign({
|
|
82
|
+
prepend: prepend || /*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
83
|
+
color: "inherit",
|
|
84
|
+
edge: "start",
|
|
85
|
+
className: "header-menu",
|
|
86
|
+
onClick: () => setDrawerOpen(true)
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(_Menu.default, null))
|
|
88
|
+
}, rest, {
|
|
89
|
+
logo: isMobile ? null : logo,
|
|
90
|
+
$theme: theme
|
|
91
|
+
}), !isMobile && _children, isMobile && /*#__PURE__*/_react.default.createElement(_Drawer.default, {
|
|
92
|
+
open: drawerOpen,
|
|
93
|
+
onClose: () => setDrawerOpen(false),
|
|
94
|
+
ModalProps: {
|
|
95
|
+
disablePortal: true,
|
|
96
|
+
keepMounted: true
|
|
97
|
+
}
|
|
98
|
+
}, /*#__PURE__*/_react.default.createElement(Sidebar, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
99
|
+
className: "header-sidebar-head"
|
|
100
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
101
|
+
className: "header-sidebar-logo"
|
|
102
|
+
}, logo), brand && /*#__PURE__*/_react.default.createElement("h2", null, brand), description && /*#__PURE__*/_react.default.createElement("p", {
|
|
103
|
+
className: "header-sidebar-description"
|
|
104
|
+
}, description), brandAddon && /*#__PURE__*/_react.default.createElement("div", {
|
|
105
|
+
className: "header-sidebar-brandaddon"
|
|
106
|
+
}, brandAddon)), /*#__PURE__*/_react.default.createElement("div", {
|
|
107
|
+
className: "header-sidebar-content"
|
|
108
|
+
}, _children))));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
ResponsiveHeader.propTypes = _objectSpread(_objectSpread({}, _header.default.PropTypes), {}, {
|
|
112
|
+
// 如果是 function, 则
|
|
113
|
+
// - 会传入一个 isMobile 参数, isMobile 为 true 时, 表示 children 会显示在 menu 中, 可以根据 isMobile 参数调整要渲染的内容, 比如如果 isMobile 为 true 则使用 inline 模式的 NavMenu (适用于移动端)
|
|
114
|
+
// - 会传入一个 closeMenu 参数, 可以关闭 menu
|
|
115
|
+
children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func])
|
|
116
|
+
});
|
|
117
|
+
ResponsiveHeader.defaultProps = _objectSpread({}, _header.default.defaultProps);
|
|
118
|
+
const Root = (0, _styledComponents.default)(_header.default).withConfig({
|
|
119
|
+
displayName: "responsive-header__Root",
|
|
120
|
+
componentId: "sc-1dugv47-0"
|
|
121
|
+
})([".header-menu{display:none;}", "{.header-menu{display:block;}}"], props => props.$theme.breakpoints.down('sm'));
|
|
122
|
+
/**
|
|
123
|
+
* Sidebar
|
|
124
|
+
*/
|
|
125
|
+
|
|
126
|
+
const Sidebar = _styledComponents.default.div.withConfig({
|
|
127
|
+
displayName: "responsive-header__Sidebar",
|
|
128
|
+
componentId: "sc-1dugv47-1"
|
|
129
|
+
})(["min-width:280px;font-size:14px;.header-sidebar-head{display:flex;flex-direction:column;align-items:center;padding:24px 0;border-bottom:1px solid #eee;font-size:12px;.header-sidebar-logo{min-width:44px;height:44px;font-size:44px;> *{width:auto;height:100%;}> a{display:block;}img{max-width:100%;max-height:100%;}}h2{margin-top:12px;font-size:14px;}.header-sidebar-description{margin:2px 0 0 0;}.header-sidebar-brandaddon{margin-top:8px;}}.header-sidebar-content{padding:16px 0;}"]);
|
|
130
|
+
|
|
131
|
+
var _default = ResponsiveHeader;
|
|
132
|
+
exports.default = _default;
|
package/lib/NavMenu/nav-menu.js
CHANGED
|
@@ -9,15 +9,15 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
|
|
12
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
-
|
|
14
12
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
15
13
|
|
|
16
|
-
require("
|
|
14
|
+
var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
|
|
15
|
+
|
|
16
|
+
var _style = require("./style");
|
|
17
17
|
|
|
18
|
-
const _excluded = ["items", "
|
|
18
|
+
const _excluded = ["items", "mode", "children", "defaultActiveId", "textColor", "activeTextColor", "bgColor", "onSelected"],
|
|
19
19
|
_excluded2 = ["id", "icon", "label", "active", "onClick"],
|
|
20
|
-
_excluded3 = ["id", "icon", "label", "children"];
|
|
20
|
+
_excluded3 = ["id", "icon", "label", "children", "expandIcon"];
|
|
21
21
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
@@ -60,12 +60,13 @@ function NavMenu(_ref) {
|
|
|
60
60
|
|
|
61
61
|
let {
|
|
62
62
|
items,
|
|
63
|
-
|
|
63
|
+
mode,
|
|
64
64
|
children,
|
|
65
65
|
defaultActiveId,
|
|
66
66
|
textColor,
|
|
67
67
|
activeTextColor,
|
|
68
|
-
bgColor
|
|
68
|
+
bgColor,
|
|
69
|
+
onSelected
|
|
69
70
|
} = _ref,
|
|
70
71
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
71
72
|
|
|
@@ -82,10 +83,12 @@ function NavMenu(_ref) {
|
|
|
82
83
|
});
|
|
83
84
|
const contextValue = (0, _react.useMemo)(() => {
|
|
84
85
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
86
|
+
mode,
|
|
85
87
|
activate: id => {
|
|
86
88
|
setState(prev => _objectSpread(_objectSpread({}, prev), {}, {
|
|
87
89
|
activeId: id
|
|
88
90
|
}));
|
|
91
|
+
onSelected === null || onSelected === void 0 ? void 0 : onSelected(id);
|
|
89
92
|
},
|
|
90
93
|
open: id => {
|
|
91
94
|
setState(prev => _objectSpread(_objectSpread({}, prev), {}, {
|
|
@@ -99,7 +102,7 @@ function NavMenu(_ref) {
|
|
|
99
102
|
}
|
|
100
103
|
});
|
|
101
104
|
}, [state]);
|
|
102
|
-
const classes = (0, _clsx.default)('navmenu', "navmenu--".concat(
|
|
105
|
+
const classes = (0, _clsx.default)('navmenu', "navmenu--".concat(mode), rest.className);
|
|
103
106
|
|
|
104
107
|
const renderItem = (item, index) => {
|
|
105
108
|
if (item.children) {
|
|
@@ -124,9 +127,10 @@ function NavMenu(_ref) {
|
|
|
124
127
|
);
|
|
125
128
|
};
|
|
126
129
|
|
|
130
|
+
const StyledRoot = mode === 'inline' ? _style.InlineStyle : _style.HorizontalStyle;
|
|
127
131
|
return /*#__PURE__*/_react.default.createElement(NavMenuContext.Provider, {
|
|
128
132
|
value: contextValue
|
|
129
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
133
|
+
}, /*#__PURE__*/_react.default.createElement(StyledRoot, Object.assign({}, rest, {
|
|
130
134
|
className: classes,
|
|
131
135
|
$textColor: textColor,
|
|
132
136
|
$activeTextColor: activeTextColor,
|
|
@@ -138,33 +142,30 @@ function NavMenu(_ref) {
|
|
|
138
142
|
|
|
139
143
|
NavMenu.propTypes = {
|
|
140
144
|
items: _propTypes.default.array,
|
|
141
|
-
//
|
|
142
|
-
|
|
145
|
+
// 默认水平方向布局,
|
|
146
|
+
// inline 模式: 垂直布局, 且通过 click 事件来收缩/伸展子菜单, 适用于移动端
|
|
147
|
+
mode: _propTypes.default.oneOf(['horizontal', 'vertical', 'inline']),
|
|
143
148
|
children: _propTypes.default.array,
|
|
144
149
|
defaultActiveId: _propTypes.default.string,
|
|
145
150
|
textColor: _propTypes.default.string,
|
|
146
151
|
activeTextColor: _propTypes.default.string,
|
|
147
|
-
bgColor: _propTypes.default.string
|
|
152
|
+
bgColor: _propTypes.default.string,
|
|
153
|
+
onSelected: _propTypes.default.func
|
|
148
154
|
};
|
|
149
155
|
NavMenu.defaultProps = {
|
|
150
156
|
items: null,
|
|
151
|
-
|
|
157
|
+
mode: 'horizontal',
|
|
152
158
|
children: null,
|
|
153
159
|
defaultActiveId: null,
|
|
154
160
|
textColor: '#9397a1',
|
|
155
161
|
activeTextColor: '#25292f',
|
|
156
|
-
bgColor: '#fff'
|
|
162
|
+
bgColor: '#fff',
|
|
163
|
+
onSelected: null
|
|
157
164
|
};
|
|
158
|
-
|
|
159
|
-
const Root = _styledComponents.default.nav.withConfig({
|
|
160
|
-
displayName: "nav-menu__Root",
|
|
161
|
-
componentId: "sc-1atwjw0-0"
|
|
162
|
-
})(["--text-color:", ";--active-text-color:", ";--bg-color:", ";padding:8px 16px;background-color:var(--bg-color);font-size:14px;ul{list-style:none;margin:0;padding:0;}.navmenu-item,.navmenu-item a,.navmenu-sub{color:var(--text-color);}.navmenu-item--active,.navmenu-item:hover,.navmenu-item:hover a,.navmenu-item--active a,.navmenu-sub--opened{color:var(--active-text-color);}"], props => props.$textColor, props => props.$activeTextColor, props => props.$bgColor);
|
|
163
165
|
/**
|
|
164
166
|
* Item
|
|
165
167
|
*/
|
|
166
168
|
|
|
167
|
-
|
|
168
169
|
function Item(_ref2) {
|
|
169
170
|
let {
|
|
170
171
|
id: _id,
|
|
@@ -195,14 +196,18 @@ function Item(_ref2) {
|
|
|
195
196
|
activate(id);
|
|
196
197
|
};
|
|
197
198
|
|
|
198
|
-
return
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
199
|
+
return (
|
|
200
|
+
/*#__PURE__*/
|
|
201
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
202
|
+
_react.default.createElement("li", Object.assign({}, rest, {
|
|
203
|
+
className: classes,
|
|
204
|
+
onClick: handleClick
|
|
205
|
+
}), icon && /*#__PURE__*/_react.default.createElement("span", {
|
|
206
|
+
className: "navmenu-item-icon"
|
|
207
|
+
}, icon), /*#__PURE__*/_react.default.createElement("span", {
|
|
208
|
+
className: "navmenu-item-label"
|
|
209
|
+
}, label))
|
|
210
|
+
);
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
Item.propTypes = {
|
|
@@ -221,22 +226,17 @@ Item.defaultProps = {
|
|
|
221
226
|
active: false,
|
|
222
227
|
onClick: null
|
|
223
228
|
};
|
|
224
|
-
|
|
225
|
-
const ItemRoot = _styledComponents.default.li.withConfig({
|
|
226
|
-
displayName: "nav-menu__ItemRoot",
|
|
227
|
-
componentId: "sc-1atwjw0-1"
|
|
228
|
-
})(["position:relative;cursor:pointer;a{text-decoration:none;white-space:nowrap;}a::before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:'';}"]);
|
|
229
229
|
/**
|
|
230
230
|
* Sub
|
|
231
231
|
*/
|
|
232
232
|
|
|
233
|
-
|
|
234
233
|
function Sub(_ref3) {
|
|
235
234
|
let {
|
|
236
235
|
id: _id,
|
|
237
236
|
icon,
|
|
238
237
|
label,
|
|
239
|
-
children
|
|
238
|
+
children,
|
|
239
|
+
expandIcon
|
|
240
240
|
} = _ref3,
|
|
241
241
|
rest = _objectWithoutProperties(_ref3, _excluded3);
|
|
242
242
|
|
|
@@ -244,22 +244,38 @@ function Sub(_ref3) {
|
|
|
244
244
|
const {
|
|
245
245
|
openedIds,
|
|
246
246
|
open,
|
|
247
|
-
close
|
|
247
|
+
close,
|
|
248
|
+
mode
|
|
248
249
|
} = (0, _react.useContext)(NavMenuContext);
|
|
250
|
+
const isOpen = openedIds.includes(id);
|
|
249
251
|
const classes = (0, _clsx.default)('navmenu-sub', {
|
|
250
|
-
'navmenu-sub--opened':
|
|
252
|
+
'navmenu-sub--opened': isOpen
|
|
251
253
|
}, rest.className);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
+
const isInlineMode = mode === 'inline'; // inline mode 时使用 click 事件控制收缩/伸展子菜单
|
|
255
|
+
|
|
256
|
+
const props = isInlineMode ? {
|
|
257
|
+
onClick: () => openedIds.includes(id) ? close(id) : open(id)
|
|
258
|
+
} : {
|
|
254
259
|
onMouseEnter: () => open(id),
|
|
255
260
|
onMouseLeave: () => close(id)
|
|
256
|
-
}
|
|
261
|
+
}; // inline mode, 避免点击子菜单项时触发父菜单的 open/close
|
|
262
|
+
|
|
263
|
+
const containerProps = isInlineMode ? {
|
|
264
|
+
onClick: e => e.stopPropagation()
|
|
265
|
+
} : {};
|
|
266
|
+
return /*#__PURE__*/_react.default.createElement("li", Object.assign({}, rest, {
|
|
267
|
+
className: classes
|
|
268
|
+
}, props), icon && /*#__PURE__*/_react.default.createElement("span", {
|
|
257
269
|
className: "navmenu-sub-icon"
|
|
258
270
|
}, icon), /*#__PURE__*/_react.default.createElement("span", {
|
|
259
|
-
className: "navmenu-sub-
|
|
260
|
-
}, label), /*#__PURE__*/_react.default.createElement("
|
|
271
|
+
className: "navmenu-sub-label"
|
|
272
|
+
}, label), expandIcon && /*#__PURE__*/_react.default.createElement("span", {
|
|
273
|
+
className: "navmenu-sub-expand-icon"
|
|
274
|
+
}, (expandIcon === null || expandIcon === void 0 ? void 0 : expandIcon({
|
|
275
|
+
isOpen
|
|
276
|
+
})) || expandIcon), /*#__PURE__*/_react.default.createElement("div", Object.assign({
|
|
261
277
|
className: "navmenu-sub-container"
|
|
262
|
-
}, /*#__PURE__*/_react.default.createElement("ul", {
|
|
278
|
+
}, containerProps), /*#__PURE__*/_react.default.createElement("ul", {
|
|
263
279
|
className: "navmenu-sub-list"
|
|
264
280
|
}, filterItems(children))));
|
|
265
281
|
}
|
|
@@ -268,18 +284,24 @@ Sub.propTypes = {
|
|
|
268
284
|
id: _propTypes.default.string,
|
|
269
285
|
icon: _propTypes.default.element,
|
|
270
286
|
label: _propTypes.default.node.isRequired,
|
|
271
|
-
children: _propTypes.default.array.isRequired
|
|
287
|
+
children: _propTypes.default.array.isRequired,
|
|
288
|
+
expandIcon: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func])
|
|
272
289
|
};
|
|
273
290
|
Sub.defaultProps = {
|
|
274
291
|
id: null,
|
|
275
|
-
icon: null
|
|
292
|
+
icon: null,
|
|
293
|
+
// eslint-disable-next-line react/prop-types
|
|
294
|
+
expandIcon: _ref4 => {
|
|
295
|
+
let {
|
|
296
|
+
isOpen
|
|
297
|
+
} = _ref4;
|
|
298
|
+
return /*#__PURE__*/_react.default.createElement(_ExpandMore.default, {
|
|
299
|
+
style: {
|
|
300
|
+
transform: "rotate(".concat(isOpen ? 180 : 0, "deg)")
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
276
304
|
};
|
|
277
|
-
|
|
278
|
-
const SubRoot = _styledComponents.default.li.withConfig({
|
|
279
|
-
displayName: "nav-menu__SubRoot",
|
|
280
|
-
componentId: "sc-1atwjw0-2"
|
|
281
|
-
})(["position:relative;cursor:pointer;.navmenu-sub-container{display:none;position:absolute;}&.navmenu-sub--opened > .navmenu-sub-container{display:block;top:100%;}"]);
|
|
282
|
-
|
|
283
305
|
NavMenu.Item = Item;
|
|
284
306
|
NavMenu.Sub = Sub;
|
|
285
307
|
var _default = NavMenu;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.InlineStyle = exports.HorizontalStyle = void 0;
|
|
7
|
+
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
const NavMenuBase = _styledComponents.default.nav.withConfig({
|
|
13
|
+
displayName: "style__NavMenuBase",
|
|
14
|
+
componentId: "sc-2g7isz-0"
|
|
15
|
+
})(["--text-color:", ";--active-text-color:", ";--bg-color:", ";background-color:var(--bg-color);font-size:14px;ul{list-style:none;margin:0;padding:0;}.navmenu-item,.navmenu-sub{display:flex;align-items:center;}.navmenu-item,.navmenu-item a,.navmenu-sub{color:var(--text-color);}.navmenu-item--active,.navmenu-item:hover,.navmenu-item:hover a,.navmenu-item--active a,.navmenu-sub--opened{color:var(--active-text-color);}.navmenu-item{position:relative;cursor:pointer;a{text-decoration:none;white-space:nowrap;}a::before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:'';}}.navmenu-sub{position:relative;cursor:pointer;}.navmenu-item-icon,.navmenu-sub-icon,.navmenu-sub-expand-icon{display:flex;line-height:1;}.navmenu-item-icon,.navmenu-sub-icon{margin-right:4px;}.navmenu-item-icon > *,.navmenu-sub-icon > *{font-size:1.5em;}.navmenu-sub-expand-icon{margin-left:8px;> *{width:0.8em;height:0.8em;transition:transform 0.2s ease-in-out;}}"], props => props.$textColor, props => props.$activeTextColor, props => props.$bgColor);
|
|
16
|
+
|
|
17
|
+
const HorizontalStyle = (0, _styledComponents.default)(NavMenuBase).withConfig({
|
|
18
|
+
displayName: "style__HorizontalStyle",
|
|
19
|
+
componentId: "sc-2g7isz-1"
|
|
20
|
+
})(["padding:8px 16px;.navmenu-root{display:flex;align-items:center;}.navmenu-root > .navmenu-item,.navmenu-root > .navmenu-sub{margin-left:24px;}.navmenu-root > .navmenu-item:first-child,.navmenu-root > .navmenu-sub:first-child{margin-left:0;}.navmenu-sub-container{display:none;position:absolute;top:100%;}.navmenu-sub-list{padding:16px;border-radius:4px;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,0.15);.navmenu-item + .navmenu-item{margin-top:8px;}}.navmenu-root > .navmenu-sub{> .navmenu-sub-container{left:50%;transform:translateX(-50%);padding-top:16px;}&.navmenu-sub--opened > .navmenu-sub-container{display:block;}}"]);
|
|
21
|
+
/* inline mode */
|
|
22
|
+
|
|
23
|
+
exports.HorizontalStyle = HorizontalStyle;
|
|
24
|
+
const InlineStyle = (0, _styledComponents.default)(NavMenuBase).withConfig({
|
|
25
|
+
displayName: "style__InlineStyle",
|
|
26
|
+
componentId: "sc-2g7isz-2"
|
|
27
|
+
})([".navmenu-root{display:flex;flex-direction:column;align-items:stretch;}.navmenu-item,.navmenu-sub{padding:0 16px;}.navmenu-root > .navmenu-item,.navmenu-root > .navmenu-sub{height:48px;line-height:48px;border-bottom:1px solid #eee;}.navmenu-item-icon,.navmenu-sub-icon{width:32px;margin:0;}.navmenu-sub-expand-icon{margin-left:auto;}.navmenu-sub-container{display:none;position:absolute;top:100%;left:0;right:0;.navmenu-item,.navmenu-sub{line-height:24px;}}.navmenu-sub-list{padding-left:16px;.navmenu-item,.navmenu-sub{padding-left:32px;margin-top:8px;font-size:13px;}}.navmenu-root > .navmenu-sub{&.navmenu-sub--opened{background:#eee;}}.navmenu-sub--opened > .navmenu-sub-container{display:block;}"]);
|
|
28
|
+
exports.InlineStyle = InlineStyle;
|