@blocklet/ui-react 2.1.40 → 2.1.43

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.
@@ -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;width:240px;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'));
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'));
@@ -49,4 +49,4 @@ Copyright.defaultProps = {
49
49
  const Root = _styledComponents.default.p.withConfig({
50
50
  displayName: "copyright__Root",
51
51
  componentId: "sc-g2r3zf-0"
52
- })(["margin:0;font-size:14px;"]);
52
+ })(["margin:0;font-size:13px;"]);
@@ -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 _ErrorBoundary = require("@arcblock/ux/lib/ErrorBoundary");
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 _socialMedia = _interopRequireDefault(require("./social-media"));
25
-
26
- var _copyright = _interopRequireDefault(require("./copyright"));
18
+ var _ErrorBoundary = require("@arcblock/ux/lib/ErrorBoundary");
27
19
 
28
- var _row = _interopRequireDefault(require("./row"));
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 theme = (0, _styles.useTheme)();
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: blockletTheme,
72
- navigation = [],
73
- copyrightOwner,
74
- footerNavigation,
75
- footerLinks,
76
- socialMedia
77
- } = blocklet;
78
- const navMenuItems = (0, _utils.mapRecursive)( // TODO: 需要讨论 blocklet.yml 是否需要专门为 footer navigation 提供配置, 暂时与 header 共用 navigation 配置
79
- footerNavigation || navigation, item => _objectSpread(_objectSpread({}, item), {}, {
80
- label: item.title,
81
- link: item.link
82
- }), 'items');
83
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, _objectSpread(_objectSpread({}, rest), {}, {
84
- $bgcolor: blockletTheme === null || blockletTheme === void 0 ? void 0 : blockletTheme.background,
85
- $theme: theme,
86
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Container.default, {
87
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_row.default, {
88
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
89
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_brand.default, {
90
- name: appName,
91
- logo: appLogo,
92
- description: appDescription || description
93
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_socialMedia.default, {
94
- items: socialMedia,
95
- style: {
96
- marginTop: 24
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
- const Root = _styledComponents.default.div.withConfig({
129
- displayName: "Footer__Root",
114
+ const StyledInternalFooter = (0, _styledComponents.default)(_internalFooter.default).withConfig({
115
+ displayName: "Footer__StyledInternalFooter",
130
116
  componentId: "sc-1iwl1nd-0"
131
- })(["padding:48px 0;border-top:1px solid #eee;color:", ";", ""], props => props.$theme.palette.grey[600], _ref2 => {
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-11upj1u-0"
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;
@@ -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("@iconify/iconify");
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)("span", {
76
- className: "iconify",
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
- } = blocklet;
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: _utils.publicPath,
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
- })(["", " .header-logo{min-width:44px;}", "{.header-logo{min-width:32px;}}.header-nav{.navmenu-sub .navmenu-item{min-width:80px;}}"], _ref3 => {
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 sx = _objectSpread({}, rest.sx);
43
+ const _sx = [...(Array.isArray(sx) ? sx : [sx])];
43
44
 
44
45
  if (size) {
45
- sx.width = size;
46
- sx.height = size;
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({}, rest), {}, {
64
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, _objectSpread(_objectSpread({
65
+ as: "span"
66
+ }, rest), {}, {
51
67
  src: icon,
52
- sx: 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({}, rest), {}, {
60
- sx: sx,
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
  };