@blocklet/ui-react 2.1.41 → 2.1.42
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/Footer/brand.js +1 -1
- package/lib/Footer/copyright.js +1 -1
- package/lib/Footer/index.js +51 -65
- package/lib/Footer/internal-footer.js +147 -0
- package/lib/Footer/layout/plain.js +68 -0
- package/lib/Footer/{row.js → layout/row.js} +1 -1
- package/lib/Footer/layout/standard.js +84 -0
- package/lib/Header/index.js +22 -10
- package/lib/Icon/index.js +31 -11
- package/lib/blocklets.js +135 -0
- package/lib/types.js +3 -3
- package/lib/utils.js +13 -7
- package/package.json +4 -4
- package/src/Footer/brand.js +0 -1
- package/src/Footer/copyright.js +1 -1
- package/src/Footer/index.js +45 -49
- package/src/Footer/internal-footer.js +98 -0
- package/src/Footer/layout/plain.js +42 -0
- package/src/Footer/{row.js → layout/row.js} +0 -0
- package/src/Footer/layout/standard.js +44 -0
- package/src/Header/index.js +20 -7
- package/src/Icon/index.js +17 -6
- package/src/blocklets.js +98 -0
- package/src/types.js +3 -3
- package/src/utils.js +7 -2
package/lib/Footer/brand.js
CHANGED
|
@@ -78,4 +78,4 @@ Brand.defaultProps = {
|
|
|
78
78
|
const Root = _styledComponents.default.div.withConfig({
|
|
79
79
|
displayName: "brand__Root",
|
|
80
80
|
componentId: "sc-6z2c3k-0"
|
|
81
|
-
})(["display:flex;flex-direction:column;
|
|
81
|
+
})(["display:flex;flex-direction:column;font-size:14px;a{text-decoration:none;color:inherit;}> div:first-child{display:flex;align-items:center;}.footer-brand-logo{display:flex;align-items:center;margin-right:16px;line-height:1;img,svg{width:auto;height:44px;max-height:44px;}}.footer-brand-name{font-size:16px;font-weight:bold;}.footer-brand-desc{margin-top:16px;}", "{width:auto;}", "{.footer-brand-logo{img,svg{height:32px;max-height:32px;}}}"], props => props.$theme.breakpoints.down('sm'), props => props.$theme.breakpoints.down('md'));
|
package/lib/Footer/copyright.js
CHANGED
package/lib/Footer/index.js
CHANGED
|
@@ -5,30 +5,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
8
10
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
11
|
|
|
10
12
|
var _styles = require("@mui/material/styles");
|
|
11
13
|
|
|
12
|
-
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
13
|
-
|
|
14
|
-
var _Container = _interopRequireDefault(require("@mui/material/Container"));
|
|
15
|
-
|
|
16
14
|
var _reactErrorBoundary = require("react-error-boundary");
|
|
17
15
|
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
var _brand = _interopRequireDefault(require("./brand"));
|
|
21
|
-
|
|
22
|
-
var _links = _interopRequireDefault(require("./links"));
|
|
16
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
23
17
|
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var _copyright = _interopRequireDefault(require("./copyright"));
|
|
18
|
+
var _ErrorBoundary = require("@arcblock/ux/lib/ErrorBoundary");
|
|
27
19
|
|
|
28
|
-
var
|
|
20
|
+
var _internalFooter = _interopRequireDefault(require("./internal-footer"));
|
|
29
21
|
|
|
30
22
|
var _utils = require("../utils");
|
|
31
23
|
|
|
24
|
+
var _blocklets = require("../blocklets");
|
|
25
|
+
|
|
32
26
|
var _types = require("../types");
|
|
33
27
|
|
|
34
28
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -51,13 +45,26 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
51
45
|
* 专门用于 (composable) blocklet 的 Footer 组件, 基于 blocklet meta 中的数据渲染
|
|
52
46
|
*/
|
|
53
47
|
function Footer(_ref) {
|
|
48
|
+
var _formattedBlocklet$na, _formattedBlocklet$na2, _formattedBlocklet$na3, _theme$background;
|
|
49
|
+
|
|
54
50
|
let {
|
|
55
51
|
meta
|
|
56
52
|
} = _ref,
|
|
57
53
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
58
54
|
|
|
59
|
-
const
|
|
55
|
+
const muiTheme = (0, _styles.useTheme)();
|
|
56
|
+
const {
|
|
57
|
+
locale
|
|
58
|
+
} = (0, _context.useLocaleContext)() || {};
|
|
60
59
|
const blocklet = Object.assign({}, window.blocklet, meta);
|
|
60
|
+
const formattedBlocklet = (0, _react.useMemo)(() => {
|
|
61
|
+
try {
|
|
62
|
+
return (0, _blocklets.formatBlockletInfo)(blocklet);
|
|
63
|
+
} catch (e) {
|
|
64
|
+
console.error('Failed to format blocklet info', e, blocklet);
|
|
65
|
+
return blocklet;
|
|
66
|
+
}
|
|
67
|
+
}, [blocklet]);
|
|
61
68
|
|
|
62
69
|
if (!blocklet.appName) {
|
|
63
70
|
return null;
|
|
@@ -68,53 +75,33 @@ function Footer(_ref) {
|
|
|
68
75
|
appName,
|
|
69
76
|
appDescription,
|
|
70
77
|
description,
|
|
71
|
-
theme
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
socialMedia
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
})]
|
|
99
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_links.default, {
|
|
100
|
-
links: navMenuItems
|
|
101
|
-
})]
|
|
102
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_row.default, {
|
|
103
|
-
autoCenter: true,
|
|
104
|
-
style: {
|
|
105
|
-
marginTop: 72
|
|
106
|
-
},
|
|
107
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_copyright.default, {
|
|
108
|
-
owner: copyrightOwner || appName
|
|
109
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_links.default, {
|
|
110
|
-
flowLayout: true,
|
|
111
|
-
links: footerLinks,
|
|
112
|
-
style: {
|
|
113
|
-
color: '#999'
|
|
114
|
-
}
|
|
115
|
-
})]
|
|
116
|
-
})]
|
|
117
|
-
})
|
|
78
|
+
theme,
|
|
79
|
+
copyright
|
|
80
|
+
} = formattedBlocklet;
|
|
81
|
+
const localized = {
|
|
82
|
+
footerNav: (0, _blocklets.getLocalizedNavigation)(formattedBlocklet === null || formattedBlocklet === void 0 ? void 0 : (_formattedBlocklet$na = formattedBlocklet.navigation) === null || _formattedBlocklet$na === void 0 ? void 0 : _formattedBlocklet$na.footer, locale) || [],
|
|
83
|
+
socialMedia: (0, _blocklets.getLocalizedNavigation)(formattedBlocklet === null || formattedBlocklet === void 0 ? void 0 : (_formattedBlocklet$na2 = formattedBlocklet.navigation) === null || _formattedBlocklet$na2 === void 0 ? void 0 : _formattedBlocklet$na2.social, locale) || [],
|
|
84
|
+
links: (0, _blocklets.getLocalizedNavigation)(formattedBlocklet === null || formattedBlocklet === void 0 ? void 0 : (_formattedBlocklet$na3 = formattedBlocklet.navigation) === null || _formattedBlocklet$na3 === void 0 ? void 0 : _formattedBlocklet$na3.bottom, locale) || []
|
|
85
|
+
};
|
|
86
|
+
const props = {
|
|
87
|
+
brand: {
|
|
88
|
+
name: appName,
|
|
89
|
+
description: appDescription || description,
|
|
90
|
+
logo: appLogo
|
|
91
|
+
},
|
|
92
|
+
navigation: (0, _utils.mapRecursive)(localized.footerNav, item => _objectSpread(_objectSpread({}, item), {}, {
|
|
93
|
+
label: item.title,
|
|
94
|
+
link: item.link
|
|
95
|
+
}), 'items'),
|
|
96
|
+
copyright,
|
|
97
|
+
socialMedia: localized.socialMedia,
|
|
98
|
+
links: localized.links.map(item => _objectSpread(_objectSpread({}, item), {}, {
|
|
99
|
+
label: item.title
|
|
100
|
+
}))
|
|
101
|
+
};
|
|
102
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledInternalFooter, _objectSpread(_objectSpread(_objectSpread({}, props), rest), {}, {
|
|
103
|
+
$bgcolor: theme === null || theme === void 0 ? void 0 : (_theme$background = theme.background) === null || _theme$background === void 0 ? void 0 : _theme$background.footer,
|
|
104
|
+
$theme: muiTheme
|
|
118
105
|
}));
|
|
119
106
|
}
|
|
120
107
|
|
|
@@ -124,11 +111,10 @@ Footer.propTypes = {
|
|
|
124
111
|
Footer.defaultProps = {
|
|
125
112
|
meta: {}
|
|
126
113
|
};
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
displayName: "Footer__Root",
|
|
114
|
+
const StyledInternalFooter = (0, _styledComponents.default)(_internalFooter.default).withConfig({
|
|
115
|
+
displayName: "Footer__StyledInternalFooter",
|
|
130
116
|
componentId: "sc-1iwl1nd-0"
|
|
131
|
-
})(["
|
|
117
|
+
})(["border-top:1px solid #eee;color:", ";", " font-family:Lato,Avenir,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';"], props => props.$theme.palette.grey[600], _ref2 => {
|
|
132
118
|
let {
|
|
133
119
|
$bgcolor
|
|
134
120
|
} = _ref2;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
|
|
10
|
+
var _brand = _interopRequireDefault(require("./brand"));
|
|
11
|
+
|
|
12
|
+
var _links = _interopRequireDefault(require("./links"));
|
|
13
|
+
|
|
14
|
+
var _socialMedia = _interopRequireDefault(require("./social-media"));
|
|
15
|
+
|
|
16
|
+
var _copyright = _interopRequireDefault(require("./copyright"));
|
|
17
|
+
|
|
18
|
+
var _standard = _interopRequireDefault(require("./layout/standard"));
|
|
19
|
+
|
|
20
|
+
var _plain = _interopRequireDefault(require("./layout/plain"));
|
|
21
|
+
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
|
|
24
|
+
const _excluded = ["brand", "navigation", "socialMedia", "copyright", "links"];
|
|
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
|
+
const layouts = [{
|
|
39
|
+
// navigation 数据为空时, 使用简单布局
|
|
40
|
+
support: (_, data) => {
|
|
41
|
+
var _data$navigation;
|
|
42
|
+
|
|
43
|
+
return !((_data$navigation = data.navigation) !== null && _data$navigation !== void 0 && _data$navigation.length);
|
|
44
|
+
},
|
|
45
|
+
component: _plain.default
|
|
46
|
+
}, {
|
|
47
|
+
// 默认标准布局
|
|
48
|
+
support: () => true,
|
|
49
|
+
component: _standard.default
|
|
50
|
+
}];
|
|
51
|
+
/**
|
|
52
|
+
* 通用的内部 footer 组件, 定义并渲染常见的几种 footer 元素: brand/navigation/social medial 等
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
function InternalFooter(props) {
|
|
56
|
+
const {
|
|
57
|
+
brand,
|
|
58
|
+
navigation,
|
|
59
|
+
socialMedia,
|
|
60
|
+
copyright,
|
|
61
|
+
links
|
|
62
|
+
} = props,
|
|
63
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
64
|
+
|
|
65
|
+
const renderBrand = () => {
|
|
66
|
+
return brand ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_brand.default, _objectSpread({}, brand)) : null;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const renderNavigation = () => {
|
|
70
|
+
return navigation !== null && navigation !== void 0 && navigation.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_links.default, {
|
|
71
|
+
links: navigation
|
|
72
|
+
}) : null;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const renderSocialMedia = () => {
|
|
76
|
+
return socialMedia !== null && socialMedia !== void 0 && socialMedia.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_socialMedia.default, {
|
|
77
|
+
items: socialMedia
|
|
78
|
+
}) : null;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const renderCopyright = () => {
|
|
82
|
+
// 如果 copyright.owner 不存在, 则使用 brand.name, 如果 brand.name 也不存在, copyright 元素为空
|
|
83
|
+
const copyrightOwner = (copyright === null || copyright === void 0 ? void 0 : copyright.owner) || (brand === null || brand === void 0 ? void 0 : brand.name);
|
|
84
|
+
|
|
85
|
+
if (!copyrightOwner) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_copyright.default, {
|
|
90
|
+
owner: copyrightOwner,
|
|
91
|
+
year: (copyright === null || copyright === void 0 ? void 0 : copyright.year) || undefined
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const renderLinks = () => {
|
|
96
|
+
return links !== null && links !== void 0 && links.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_links.default, {
|
|
97
|
+
flowLayout: true,
|
|
98
|
+
links: links
|
|
99
|
+
}) : null;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const elements = {
|
|
103
|
+
brand: renderBrand(),
|
|
104
|
+
navigation: renderNavigation(),
|
|
105
|
+
socialMedia: renderSocialMedia(),
|
|
106
|
+
copyright: renderCopyright(),
|
|
107
|
+
links: renderLinks()
|
|
108
|
+
};
|
|
109
|
+
const LayoutComponent = layouts.find(layout => layout.support(elements, props)).component;
|
|
110
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(LayoutComponent, _objectSpread({
|
|
111
|
+
elements: elements
|
|
112
|
+
}, rest));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
InternalFooter.propTypes = {
|
|
116
|
+
brand: _propTypes.default.shape({
|
|
117
|
+
name: _propTypes.default.node,
|
|
118
|
+
description: _propTypes.default.string,
|
|
119
|
+
logo: _propTypes.default.node
|
|
120
|
+
}),
|
|
121
|
+
navigation: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
122
|
+
label: _propTypes.default.node,
|
|
123
|
+
link: _propTypes.default.string
|
|
124
|
+
})),
|
|
125
|
+
socialMedia: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
126
|
+
icon: _propTypes.default.node,
|
|
127
|
+
link: _propTypes.default.string
|
|
128
|
+
})),
|
|
129
|
+
copyright: _propTypes.default.shape({
|
|
130
|
+
owner: _propTypes.default.string,
|
|
131
|
+
year: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
|
|
132
|
+
}),
|
|
133
|
+
// privacy/legal 等链接, 常放于 footer 右下侧或最底部
|
|
134
|
+
links: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
135
|
+
label: _propTypes.default.node,
|
|
136
|
+
link: _propTypes.default.string
|
|
137
|
+
}))
|
|
138
|
+
};
|
|
139
|
+
InternalFooter.defaultProps = {
|
|
140
|
+
brand: null,
|
|
141
|
+
navigation: null,
|
|
142
|
+
copyright: null,
|
|
143
|
+
socialMedia: null,
|
|
144
|
+
links: null
|
|
145
|
+
};
|
|
146
|
+
var _default = InternalFooter;
|
|
147
|
+
exports.default = _default;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _Container = _interopRequireDefault(require("@mui/material/Container"));
|
|
15
|
+
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
|
|
18
|
+
const _excluded = ["elements"];
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
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; }
|
|
29
|
+
|
|
30
|
+
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; }
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* footer plain layout
|
|
34
|
+
*/
|
|
35
|
+
function PlainLayout(_ref) {
|
|
36
|
+
let {
|
|
37
|
+
elements
|
|
38
|
+
} = _ref,
|
|
39
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
|
+
|
|
41
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, _objectSpread(_objectSpread({}, rest), {}, {
|
|
42
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Container.default, {
|
|
43
|
+
className: "plain-layout-container",
|
|
44
|
+
children: [/*#__PURE__*/(0, _react.cloneElement)(elements.brand, {
|
|
45
|
+
name: null,
|
|
46
|
+
description: null
|
|
47
|
+
}), elements.copyright]
|
|
48
|
+
})
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
PlainLayout.propTypes = {
|
|
53
|
+
elements: _propTypes.default.shape({
|
|
54
|
+
brand: _propTypes.default.element,
|
|
55
|
+
navigation: _propTypes.default.element,
|
|
56
|
+
socialMedia: _propTypes.default.element,
|
|
57
|
+
copyright: _propTypes.default.element,
|
|
58
|
+
links: _propTypes.default.element
|
|
59
|
+
}).isRequired
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const Root = _styledComponents.default.div.withConfig({
|
|
63
|
+
displayName: "plain__Root",
|
|
64
|
+
componentId: "sc-qoddfp-0"
|
|
65
|
+
})(["padding:24px 0;border-top:1px solid #eee;.plain-layout-container{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;}"]);
|
|
66
|
+
|
|
67
|
+
var _default = PlainLayout;
|
|
68
|
+
exports.default = _default;
|
|
@@ -62,5 +62,5 @@ Row.defaultProps = {
|
|
|
62
62
|
|
|
63
63
|
const RowRoot = _styledComponents.default.div.withConfig({
|
|
64
64
|
displayName: "row__RowRoot",
|
|
65
|
-
componentId: "sc-
|
|
65
|
+
componentId: "sc-1b3lw4c-0"
|
|
66
66
|
})(["display:flex;justify-content:space-between;& + &{margin-top:24px;}&.footer-row-auto-center > *:only-child{margin:0 auto;}", "{align-items:stretch;flex-direction:column;gap:16px;> *{flex:1 0 100%;}&.footer-row-auto-center > *{margin:0 auto;}}"], props => props.$theme.breakpoints.down('md'));
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
13
|
+
|
|
14
|
+
var _Container = _interopRequireDefault(require("@mui/material/Container"));
|
|
15
|
+
|
|
16
|
+
var _row = _interopRequireDefault(require("./row"));
|
|
17
|
+
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
|
|
20
|
+
const _excluded = ["elements"];
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
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; }
|
|
29
|
+
|
|
30
|
+
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; }
|
|
31
|
+
|
|
32
|
+
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; }
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* footer standard layout
|
|
36
|
+
*/
|
|
37
|
+
function Footer(_ref) {
|
|
38
|
+
let {
|
|
39
|
+
elements
|
|
40
|
+
} = _ref,
|
|
41
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
42
|
+
|
|
43
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, _objectSpread(_objectSpread({}, rest), {}, {
|
|
44
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Container.default, {
|
|
45
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_row.default, {
|
|
46
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
47
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
48
|
+
width: {
|
|
49
|
+
md: 240
|
|
50
|
+
},
|
|
51
|
+
children: elements.brand
|
|
52
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
53
|
+
mt: 2,
|
|
54
|
+
children: elements.socialMedia
|
|
55
|
+
})]
|
|
56
|
+
}), elements.navigation]
|
|
57
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_row.default, {
|
|
58
|
+
autoCenter: true,
|
|
59
|
+
style: {
|
|
60
|
+
marginTop: 72
|
|
61
|
+
},
|
|
62
|
+
children: [elements.copyright, elements.links]
|
|
63
|
+
})]
|
|
64
|
+
})
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Footer.propTypes = {
|
|
69
|
+
elements: _propTypes.default.shape({
|
|
70
|
+
brand: _propTypes.default.element,
|
|
71
|
+
navigation: _propTypes.default.element,
|
|
72
|
+
socialMedia: _propTypes.default.element,
|
|
73
|
+
copyright: _propTypes.default.element,
|
|
74
|
+
links: _propTypes.default.element
|
|
75
|
+
}).isRequired
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const Root = _styledComponents.default.div.withConfig({
|
|
79
|
+
displayName: "standard__Root",
|
|
80
|
+
componentId: "sc-13y30cb-0"
|
|
81
|
+
})(["padding:48px 0;"]);
|
|
82
|
+
|
|
83
|
+
var _default = Footer;
|
|
84
|
+
exports.default = _default;
|
package/lib/Header/index.js
CHANGED
|
@@ -35,12 +35,14 @@ var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address
|
|
|
35
35
|
|
|
36
36
|
var _Avatar = _interopRequireDefault(require("@arcblock/did-connect/lib/Avatar"));
|
|
37
37
|
|
|
38
|
-
require("
|
|
38
|
+
var _Icon = _interopRequireDefault(require("../Icon"));
|
|
39
39
|
|
|
40
40
|
var _types = require("../types");
|
|
41
41
|
|
|
42
42
|
var _utils = require("../utils");
|
|
43
43
|
|
|
44
|
+
var _blocklets = require("../blocklets");
|
|
45
|
+
|
|
44
46
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
45
47
|
|
|
46
48
|
const _excluded = ["meta", "addons", "sessionManagerProps"];
|
|
@@ -72,9 +74,8 @@ const parseNavigation = navigation => {
|
|
|
72
74
|
const parseItem = item => {
|
|
73
75
|
var _item$link, _item$link2;
|
|
74
76
|
|
|
75
|
-
const icon = item.icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
76
|
-
|
|
77
|
-
"data-icon": item.icon
|
|
77
|
+
const icon = item.icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, {
|
|
78
|
+
icon: item.icon
|
|
78
79
|
}) : null;
|
|
79
80
|
|
|
80
81
|
if (item.items) {
|
|
@@ -122,6 +123,8 @@ const parseNavigation = navigation => {
|
|
|
122
123
|
|
|
123
124
|
|
|
124
125
|
function Header(_ref) {
|
|
126
|
+
var _formattedBlocklet$na, _theme$background;
|
|
127
|
+
|
|
125
128
|
let {
|
|
126
129
|
meta,
|
|
127
130
|
addons,
|
|
@@ -134,6 +137,14 @@ function Header(_ref) {
|
|
|
134
137
|
locale
|
|
135
138
|
} = (0, _context.useLocaleContext)() || {};
|
|
136
139
|
const blocklet = Object.assign({}, window.blocklet, meta);
|
|
140
|
+
const formattedBlocklet = (0, _react.useMemo)(() => {
|
|
141
|
+
try {
|
|
142
|
+
return (0, _blocklets.formatBlockletInfo)(blocklet);
|
|
143
|
+
} catch (e) {
|
|
144
|
+
console.error('Failed to format blocklet info', e, blocklet);
|
|
145
|
+
return blocklet;
|
|
146
|
+
}
|
|
147
|
+
}, [blocklet]);
|
|
137
148
|
|
|
138
149
|
if (!blocklet.appName) {
|
|
139
150
|
return null;
|
|
@@ -144,10 +155,10 @@ function Header(_ref) {
|
|
|
144
155
|
appLogo,
|
|
145
156
|
appName,
|
|
146
157
|
theme,
|
|
147
|
-
navigation = [],
|
|
148
158
|
enableConnect = true,
|
|
149
159
|
enableLocale = true
|
|
150
|
-
} =
|
|
160
|
+
} = formattedBlocklet;
|
|
161
|
+
const navigation = (0, _blocklets.getLocalizedNavigation)(formattedBlocklet === null || formattedBlocklet === void 0 ? void 0 : (_formattedBlocklet$na = formattedBlocklet.navigation) === null || _formattedBlocklet$na === void 0 ? void 0 : _formattedBlocklet$na.header, locale);
|
|
151
162
|
const {
|
|
152
163
|
navItems,
|
|
153
164
|
activeId
|
|
@@ -187,7 +198,7 @@ function Header(_ref) {
|
|
|
187
198
|
theme: muiTheme,
|
|
188
199
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledUxHeader, _objectSpread(_objectSpread({
|
|
189
200
|
logo: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
190
|
-
href:
|
|
201
|
+
href: _blocklets.publicPath,
|
|
191
202
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
192
203
|
src: appLogo,
|
|
193
204
|
alt: "logo"
|
|
@@ -209,7 +220,7 @@ function Header(_ref) {
|
|
|
209
220
|
}) : null,
|
|
210
221
|
addons: renderAddons()
|
|
211
222
|
}, rest), {}, {
|
|
212
|
-
$bgcolor: theme === null || theme === void 0 ? void 0 : theme.background,
|
|
223
|
+
$bgcolor: theme === null || theme === void 0 ? void 0 : (_theme$background = theme.background) === null || _theme$background === void 0 ? void 0 : _theme$background.header,
|
|
213
224
|
$theme: muiTheme,
|
|
214
225
|
children: !(navItems !== null && navItems !== void 0 && navItems.length) ? null : _ref2 => {
|
|
215
226
|
let {
|
|
@@ -220,7 +231,8 @@ function Header(_ref) {
|
|
|
220
231
|
activeId: activeId,
|
|
221
232
|
items: navItems,
|
|
222
233
|
className: "header-nav",
|
|
223
|
-
bgColor: "transparent"
|
|
234
|
+
bgColor: "transparent",
|
|
235
|
+
textColor: "#888"
|
|
224
236
|
});
|
|
225
237
|
}
|
|
226
238
|
}))
|
|
@@ -245,7 +257,7 @@ Header.defaultProps = {
|
|
|
245
257
|
const StyledUxHeader = (0, _styledComponents.default)(_Header.ResponsiveHeader).withConfig({
|
|
246
258
|
displayName: "Header__StyledUxHeader",
|
|
247
259
|
componentId: "sc-kcf4st-0"
|
|
248
|
-
})(["", "
|
|
260
|
+
})(["", " font-family:Lato,Avenir,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';.header-logo{min-width:44px;}", "{.header-logo{min-width:32px;}}.header-nav{.navmenu-sub .navmenu-item{min-width:80px;}}"], _ref3 => {
|
|
249
261
|
let {
|
|
250
262
|
$bgcolor
|
|
251
263
|
} = _ref3;
|
package/lib/Icon/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var _utils = require("../utils");
|
|
|
15
15
|
|
|
16
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
17
|
|
|
18
|
-
const _excluded = ["icon", "size"];
|
|
18
|
+
const _excluded = ["icon", "size", "sx"];
|
|
19
19
|
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
21
|
|
|
@@ -35,29 +35,47 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
35
35
|
function Icon(_ref) {
|
|
36
36
|
let {
|
|
37
37
|
icon,
|
|
38
|
-
size
|
|
38
|
+
size,
|
|
39
|
+
sx
|
|
39
40
|
} = _ref,
|
|
40
41
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
41
42
|
|
|
42
|
-
const
|
|
43
|
+
const _sx = [...(Array.isArray(sx) ? sx : [sx])];
|
|
43
44
|
|
|
44
45
|
if (size) {
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
_sx.push({
|
|
47
|
+
width: size,
|
|
48
|
+
height: size
|
|
49
|
+
});
|
|
50
|
+
} // 禁用默认的 circular variant 样式
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if (!rest.variant) {
|
|
54
|
+
_sx.push({
|
|
55
|
+
'&.MuiAvatar-root': {
|
|
56
|
+
color: 'inherit',
|
|
57
|
+
backgroundColor: 'transparent',
|
|
58
|
+
borderRadius: 0
|
|
59
|
+
}
|
|
60
|
+
});
|
|
47
61
|
}
|
|
48
62
|
|
|
49
63
|
if ((0, _utils.isUrl)(icon)) {
|
|
50
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, _objectSpread(_objectSpread({
|
|
64
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, _objectSpread(_objectSpread({
|
|
65
|
+
as: "span"
|
|
66
|
+
}, rest), {}, {
|
|
51
67
|
src: icon,
|
|
52
|
-
sx:
|
|
68
|
+
sx: _sx
|
|
53
69
|
}));
|
|
54
70
|
}
|
|
55
71
|
|
|
56
72
|
if (icon) {
|
|
57
73
|
// y = 0.6 * x + 4
|
|
58
74
|
const iconHeight = size ? 0.6 * size + 4 : 0;
|
|
59
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, _objectSpread(_objectSpread({
|
|
60
|
-
|
|
75
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, _objectSpread(_objectSpread({
|
|
76
|
+
as: "span"
|
|
77
|
+
}, rest), {}, {
|
|
78
|
+
sx: _sx,
|
|
61
79
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", _objectSpread({
|
|
62
80
|
className: "iconify",
|
|
63
81
|
"data-icon": icon
|
|
@@ -75,8 +93,10 @@ Icon.propTypes = {
|
|
|
75
93
|
// 1. iconify icon name: <prefix>:<name>
|
|
76
94
|
// 2. url
|
|
77
95
|
icon: _propTypes.default.string.isRequired,
|
|
78
|
-
size: _propTypes.default.number
|
|
96
|
+
size: _propTypes.default.number,
|
|
97
|
+
sx: _propTypes.default.oneOfType([_propTypes.default.array, _propTypes.default.func, _propTypes.default.object])
|
|
79
98
|
};
|
|
80
99
|
Icon.defaultProps = {
|
|
81
|
-
size: null
|
|
100
|
+
size: null,
|
|
101
|
+
sx: null
|
|
82
102
|
};
|