@abtnode/ux 1.16.17-beta-d282d63e → 1.16.17-beta-1cab4b42

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.
@@ -7,15 +7,37 @@ exports.default = Resource;
7
7
  var _react = require("react");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _styled = _interopRequireDefault(require("@emotion/styled"));
10
- var _Box = _interopRequireDefault(require("@mui/material/Box"));
10
+ var _difference = _interopRequireDefault(require("lodash/difference"));
11
11
  var _urlJoin = _interopRequireDefault(require("url-join"));
12
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
12
13
  var _context = require("@arcblock/ux/lib/Locale/context");
14
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
15
+ var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
16
+ var _tree = _interopRequireDefault(require("./tree"));
17
+ var _node = require("../../contexts/node");
18
+ var _api = require("../../util/api");
13
19
  var _jsxRuntime = require("react/jsx-runtime");
14
20
  var _templateObject;
15
- /* eslint-disable no-unused-vars */
16
- /* eslint-disable react/no-unstable-nested-components */
17
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
22
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
23
+ const fillParent = (nodes, parentId) => {
24
+ nodes.forEach(node => {
25
+ if (parentId) {
26
+ node.parent = parentId;
27
+ }
28
+ (node.children || []).forEach(child => {
29
+ child.parent = node.id;
30
+ fillParent(child.children || [], child.id);
31
+ });
32
+ });
33
+ return nodes;
34
+ };
35
+ const checkDiff = (a, b) => {
36
+ if (a.length !== b.length) {
37
+ return true;
38
+ }
39
+ return !!(0, _difference.default)(a, b || []).length;
40
+ };
19
41
  function Resource(_ref) {
20
42
  let {
21
43
  app,
@@ -27,20 +49,82 @@ function Resource(_ref) {
27
49
  t,
28
50
  locale
29
51
  } = (0, _context.useLocaleContext)();
30
- const iframeRef = (0, _react.useRef)(null);
52
+ const {
53
+ api
54
+ } = (0, _node.useNodeContext)();
55
+ const [resources, setResources] = (0, _react.useState)([]);
56
+ const [selectedResourceIds, setSelectedResourceIds] = (0, _react.useState)([]);
57
+ const [savedResourceIds, setSavedResourceIds] = (0, _react.useState)([]);
58
+ const [loading, setLoading] = (0, _react.useState)(false);
31
59
  const releaseId = release.id;
32
60
  const readonly = release.status === 'published';
33
61
  const {
34
- resourceExportPage = '/'
62
+ resourceExportApi = '/'
35
63
  } = (component === null || component === void 0 ? void 0 : component.meta.capabilities) || {};
36
- const url = new URL((0, _urlJoin.default)('http://127.0.0.1', component.mountPoint, resourceExportPage).replace(/\/+/g, '/'));
37
- url.searchParams.set('projectId', projectId);
38
- url.searchParams.set('releaseId', releaseId);
39
- url.searchParams.set('local', locale);
40
- if (readonly) {
41
- url.searchParams.set('readonly', '1');
42
- }
43
- const src = "".concat(url.pathname).concat(url.search);
64
+ const hasDiff = (0, _react.useMemo)(() => checkDiff(savedResourceIds, selectedResourceIds), [savedResourceIds, selectedResourceIds]);
65
+ const urlObj = new URL((0, _urlJoin.default)('http://127.0.0.1', component.mountPoint, resourceExportApi || '/').replace(/\/+/g, '/'));
66
+ urlObj.searchParams.set('projectId', projectId);
67
+ urlObj.searchParams.set('releaseId', releaseId);
68
+ urlObj.searchParams.set('local', locale);
69
+ const url = "".concat(urlObj.pathname).concat(urlObj.search);
70
+ const saveSelected = async data => {
71
+ try {
72
+ await api.updateSelectedResources({
73
+ input: {
74
+ did: app.meta.did,
75
+ projectId,
76
+ releaseId,
77
+ componentDid: component.meta.did,
78
+ resources: data
79
+ }
80
+ });
81
+ setSavedResourceIds(data);
82
+ } catch (err) {
83
+ _Toast.default.error(err.message);
84
+ }
85
+ };
86
+ const onSave = async () => {
87
+ const params = selectedResourceIds;
88
+ try {
89
+ setLoading(true);
90
+ await _api.axios.post(url, {
91
+ resources: params,
92
+ projectId,
93
+ releaseId,
94
+ locale
95
+ });
96
+ _Toast.default.success(t('common.saveSuccess'));
97
+ setLoading(false);
98
+ saveSelected(selectedResourceIds);
99
+ } catch (err) {
100
+ setLoading(false);
101
+ _Toast.default.error(err.message);
102
+ }
103
+ };
104
+ (0, _react.useEffect)(() => {
105
+ _api.axios.get(url).then(res => {
106
+ var _res$data;
107
+ const tree = fillParent(((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.resources) || []);
108
+ setResources(tree);
109
+ }).catch(err => {
110
+ _Toast.default.error(err.message);
111
+ });
112
+ api.getSelectedResources({
113
+ input: {
114
+ did: app.meta.did,
115
+ projectId,
116
+ releaseId,
117
+ componentDid: component.meta.did
118
+ }
119
+ }).then(res => {
120
+ const list = (res === null || res === void 0 ? void 0 : res.resources) || [];
121
+ setSelectedResourceIds(list);
122
+ setSavedResourceIds(list);
123
+ }).catch(err => {
124
+ _Toast.default.error(err.message);
125
+ });
126
+ // eslint-disable-next-line react-hooks/exhaustive-deps
127
+ }, [url]);
44
128
  if (component.status !== 'running') {
45
129
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
46
130
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
@@ -52,12 +136,23 @@ function Resource(_ref) {
52
136
  });
53
137
  }
54
138
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
55
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("iframe", {
56
- ref: iframeRef,
57
- title: component.meta.title,
58
- src: src,
59
- width: "100%",
60
- height: "600px"
139
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
140
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_tree.default, {
141
+ data: resources,
142
+ value: selectedResourceIds,
143
+ onChange: data => {
144
+ setSelectedResourceIds(data);
145
+ },
146
+ disabled: loading || readonly
147
+ }), !readonly && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
148
+ className: "footer",
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
150
+ variant: "contained",
151
+ disabled: loading || !hasDiff,
152
+ onClick: () => onSave(),
153
+ children: t('common.save')
154
+ })
155
+ })]
61
156
  })
62
157
  });
63
158
  }
@@ -75,4 +170,4 @@ Resource.defaultProps = {
75
170
  id: ''
76
171
  }
77
172
  };
78
- const Container = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n iframe {\n border: none;\n }\n"])));
173
+ const Container = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 16px;\n padding-bottom: 0px;\n max-height: 600px;\n overflow-y: auto;\n .footer {\n border-top: 1px solid #ddd;\n display: flex;\n padding: 12px 0;\n margin-top: 12px;\n position: sticky;\n bottom: 0;\n background: #fff;\n }\n"])));
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Tree;
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _isUrl = _interopRequireDefault(require("is-url"));
11
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
12
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
13
+ var _TreeView = _interopRequireDefault(require("@mui/lab/TreeView"));
14
+ var _TreeItem = _interopRequireDefault(require("@mui/lab/TreeItem"));
15
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
16
+ var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
17
+ var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
18
+ var _OpenInNew = _interopRequireDefault(require("@mui/icons-material/OpenInNew"));
19
+ var _react = require("@iconify/react");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ var _templateObject; // BFS algorithm to find node by his ID
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
24
+ const bfsSearch = (graph, targetId) => {
25
+ const queue = [...graph];
26
+ while (queue.length > 0) {
27
+ const currNode = queue.shift();
28
+ if (currNode.id === targetId) {
29
+ return currNode;
30
+ }
31
+ if (currNode.children) {
32
+ queue.push(...currNode.children);
33
+ }
34
+ }
35
+ return []; // Target node not found
36
+ };
37
+
38
+ function ResourceIcon(_ref) {
39
+ let {
40
+ icon
41
+ } = _ref;
42
+ if (!icon) {
43
+ return null;
44
+ }
45
+ if ((0, _isUrl.default)(icon)) {
46
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
47
+ className: "resource-icon",
48
+ src: icon,
49
+ alt: "icon"
50
+ });
51
+ }
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
53
+ className: "resource-icon",
54
+ icon: icon
55
+ });
56
+ }
57
+ ResourceIcon.propTypes = {
58
+ icon: _propTypes.default.string
59
+ };
60
+ ResourceIcon.defaultProps = {
61
+ icon: ''
62
+ };
63
+ function Tree(_ref2) {
64
+ let {
65
+ disabled,
66
+ data,
67
+ onChange,
68
+ value
69
+ } = _ref2;
70
+ const selectedNodes = value;
71
+
72
+ // Retrieve all ids from node to his children's
73
+ function getAllIds(node) {
74
+ let idList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
75
+ idList.push(node.id);
76
+ if (node.children) {
77
+ node.children.forEach(child => getAllIds(child, idList));
78
+ }
79
+ return idList;
80
+ }
81
+ // Get IDs of all children from specific node
82
+ const getAllChild = id => {
83
+ return getAllIds(bfsSearch(data, id));
84
+ };
85
+
86
+ // Get all father IDs from specific node
87
+ const getAllFathers = function getAllFathers(id) {
88
+ let list = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
89
+ const node = bfsSearch(data, id);
90
+ if (node.parent) {
91
+ list.push(node.parent);
92
+ return getAllFathers(node.parent, list);
93
+ }
94
+ return list;
95
+ };
96
+ function isAllChildrenChecked(node, list) {
97
+ const allChild = getAllChild(node.id);
98
+ const nodeIdIndex = allChild.indexOf(node.id);
99
+ allChild.splice(nodeIdIndex, 1);
100
+ return allChild.every(nodeId => selectedNodes.concat(list).includes(nodeId));
101
+ }
102
+ const handleNodeSelect = (event, nodeId) => {
103
+ event.stopPropagation();
104
+ const allChild = getAllChild(nodeId);
105
+ const fathers = getAllFathers(nodeId);
106
+ if (selectedNodes.includes(nodeId)) {
107
+ // Need to de-check
108
+ const newValue = selectedNodes.filter(id => !allChild.concat(fathers).includes(id));
109
+ onChange(newValue);
110
+ } else {
111
+ // Need to check
112
+ const ToBeChecked = allChild;
113
+ for (let i = 0; i < fathers.length; ++i) {
114
+ if (isAllChildrenChecked(bfsSearch(data, fathers[i]), ToBeChecked)) {
115
+ ToBeChecked.push(fathers[i]);
116
+ }
117
+ }
118
+ onChange([...selectedNodes].concat(ToBeChecked));
119
+ }
120
+ };
121
+ const stopExpand = event => {
122
+ // prevent the click event from propagating to the checkbox
123
+ event.stopPropagation();
124
+ };
125
+ const hadChildren = data.some(node => {
126
+ var _node$children;
127
+ return ((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.length) > 0;
128
+ });
129
+ const renderTree = node => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem.default, {
130
+ nodeId: node.id,
131
+ label: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
132
+ onClick: stopExpand,
133
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
134
+ size: "small",
135
+ checked: selectedNodes.indexOf(node.id) !== -1,
136
+ tabIndex: -1,
137
+ disableRipple: true,
138
+ onClick: event => handleNodeSelect(event, node.id),
139
+ disabled: disabled
140
+ }),
141
+ label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
142
+ className: "content",
143
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
144
+ display: "flex",
145
+ alignItems: "center",
146
+ children: [node.icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(ResourceIcon, {
147
+ icon: node.icon
148
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
149
+ className: "name",
150
+ children: node.name
151
+ }), node.url && /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
152
+ href: node.url,
153
+ target: "_blank",
154
+ rel: "noreferrer",
155
+ className: "link",
156
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OpenInNew.default, {
157
+ className: "link-icon"
158
+ })
159
+ })]
160
+ }), !!node.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
161
+ className: "description",
162
+ children: node.description
163
+ })]
164
+ })
165
+ }),
166
+ children: Array.isArray(node.children) ? node.children.map(renderTree) : null
167
+ }, node.id);
168
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeView, {
169
+ className: (0, _classnames.default)(!hadChildren && 'no-children'),
170
+ multiSelect: true,
171
+ defaultCollapseIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandMore.default, {}),
172
+ defaultExpandIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChevronRight.default, {}),
173
+ selected: selectedNodes,
174
+ children: data.map(node => renderTree(node))
175
+ });
176
+ }
177
+ Tree.propTypes = {
178
+ data: _propTypes.default.array,
179
+ value: _propTypes.default.array,
180
+ onChange: _propTypes.default.func,
181
+ disabled: _propTypes.default.bool
182
+ };
183
+ Tree.defaultProps = {
184
+ data: [],
185
+ value: [],
186
+ onChange: () => {},
187
+ disabled: false
188
+ };
189
+ const StyledTreeView = (0, _styled.default)(_TreeView.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &.no-children {\n .MuiTreeItem-content {\n padding: 0;\n .MuiTreeItem-iconContainer {\n display: none;\n }\n .MuiTreeItem-label {\n padding-left: 0;\n }\n }\n }\n .MuiTreeItem-content {\n align-items: flex-start;\n .MuiTreeItem-iconContainer {\n transform: translateY(10px);\n }\n &.Mui-selected {\n background-color: transparent;\n }\n }\n .MuiTreeItem-label {\n cursor: default;\n }\n .MuiFormControlLabel-root {\n align-items: flex-start;\n }\n .content {\n padding-top: 6px;\n }\n .name {\n font-size: 16px;\n font-weight: 700;\n }\n .resource-icon {\n margin-right: 2px;\n font-size: 16px;\n }\n img.resource-icon {\n width: 1rem;\n height: 1rem;\n }\n .link {\n margin-left: 8px;\n font-size: 16px;\n color: ", ";\n display: flex;\n }\n .link-icon {\n font-size: inherit;\n }\n .description {\n font-size: 14px;\n color: ", ";\n }\n"])), _ref3 => {
190
+ let {
191
+ theme
192
+ } = _ref3;
193
+ return theme.palette.primary.main;
194
+ }, _ref4 => {
195
+ let {
196
+ theme
197
+ } = _ref4;
198
+ return theme.palette.text.secondary;
199
+ });
@@ -7,6 +7,7 @@ exports.validateSite = exports.validateRule = exports.validatePathPrefix = expor
7
7
  var _constant = require("@abtnode/constant");
8
8
  var _isPathPrefixEqual = _interopRequireDefault(require("@abtnode/util/lib/is-path-prefix-equal"));
9
9
  var _constant2 = require("@blocklet/constant");
10
+ var _hasStartEngine = _interopRequireDefault(require("@blocklet/meta/lib/has-start-engine"));
10
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
12
  /* eslint-disable import/prefer-default-export */
12
13
 
@@ -86,7 +87,7 @@ const validatePathPrefix = _ref => {
86
87
  } = _ref;
87
88
  // validate children
88
89
  if (curBlocklet) {
89
- let exist = (curBlocklet.children || []).find(x => (0, _isPathPrefixEqual.default)(x.mountPoint, params.pathPrefix));
90
+ let exist = (curBlocklet.children || []).find(x => (0, _hasStartEngine.default)(x.meta) && (0, _isPathPrefixEqual.default)(x.mountPoint, params.pathPrefix));
90
91
  if (curBlocklet.meta.group !== 'gateway' && params.pathPrefix === '/') {
91
92
  exist = '/';
92
93
  }
package/lib/locales/en.js CHANGED
@@ -634,6 +634,7 @@ module.exports = {
634
634
  saveDraft: 'Save Draft',
635
635
  releaseNote: 'Release Note',
636
636
  errorTip: {
637
+ noDid: 'Blocklet DID is required',
637
638
  noTitle: 'Blocklet Title is required',
638
639
  noVersion: 'Blocklet Version is required',
639
640
  noDescription: 'Blocklet Description is required',
@@ -1315,7 +1316,8 @@ module.exports = {
1315
1316
  launchFailed: 'Failed to launch the app, please try again',
1316
1317
  installedButStopped: 'The app is installed successfully, but cannot be started. You can start it manually after resolving blocking issues',
1317
1318
  installedButError: 'The app is successfully installed, but failed to start',
1318
- restoreFailed: 'Failed to restore app, please try again'
1319
+ restoreFailed: 'Failed to restore app, please try again',
1320
+ resourceBlocklet: 'Resource Blocklet cannot be installed as an application, you can mount this blocklet into existing applications.'
1319
1321
  },
1320
1322
  steps: {
1321
1323
  introduction: 'Introduction',
package/lib/locales/zh.js CHANGED
@@ -641,6 +641,7 @@ module.exports = {
641
641
  saveDraft: '保存草稿',
642
642
  releaseNote: '发布说明',
643
643
  errorTip: {
644
+ noDid: '请填写 Blocklet DID',
644
645
  noTitle: '请填写 Blocklet 名称',
645
646
  noVersion: '请填写 Blocklet 版本号',
646
647
  noDescription: '请填写 Blocklet 描述',
@@ -1320,7 +1321,8 @@ module.exports = {
1320
1321
  launchFailed: '启动应用失败,请重试',
1321
1322
  installedButStopped: '应用安装成功,但是无法启动,解决启动问题之后后可手动启动',
1322
1323
  installedButError: '应用已经安装,但是运行出错了',
1323
- restoreFailed: '还原应用失败,请重试'
1324
+ restoreFailed: '还原应用失败,请重试',
1325
+ resourceBlocklet: '资源 Blocklet 无法作为应用被安装,你可以将该 Blocklet 挂载到现有的应用中。'
1324
1326
  },
1325
1327
  steps: {
1326
1328
  introduction: '简介',
@@ -8,6 +8,7 @@ var _react = require("react");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _context = require("@arcblock/ux/lib/Locale/context");
10
10
  var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
11
+ var _passport = require("@abtnode/util/lib/passport");
11
12
  var _confirm = _interopRequireDefault(require("../../confirm"));
12
13
  var _node = require("../../contexts/node");
13
14
  var _team = require("../../contexts/team");
@@ -88,7 +89,9 @@ function ToggleUserApproval(_ref) {
88
89
  color: user.approved ? 'error' : 'primary'
89
90
  };
90
91
  let can;
91
- if (!inService) {
92
+ if ((0, _passport.hasActiveOwnerPassport)(user)) {
93
+ can = false;
94
+ } else if (!inService) {
92
95
  can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);
93
96
  } else {
94
97
  can = !isSelf(session.user, user.did);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abtnode/ux",
3
- "version": "1.16.17-beta-d282d63e",
3
+ "version": "1.16.17-beta-1cab4b42",
4
4
  "description": "UX components shared across abtnode packages",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,24 +27,24 @@
27
27
  "author": "linchen <linchen1987@foxmail.com> (http://github.com/linchen1987)",
28
28
  "license": "Apache-2.0",
29
29
  "dependencies": {
30
- "@abtnode/auth": "1.16.17-beta-d282d63e",
31
- "@abtnode/constant": "1.16.17-beta-d282d63e",
32
- "@abtnode/util": "1.16.17-beta-d282d63e",
30
+ "@abtnode/auth": "1.16.17-beta-1cab4b42",
31
+ "@abtnode/constant": "1.16.17-beta-1cab4b42",
32
+ "@abtnode/util": "1.16.17-beta-1cab4b42",
33
33
  "@ahooksjs/use-url-state": "^3.5.1",
34
- "@arcblock/did": "^1.18.91",
35
- "@arcblock/did-connect": "^2.7.25",
34
+ "@arcblock/did": "^1.18.92",
35
+ "@arcblock/did-connect": "^2.7.27",
36
36
  "@arcblock/did-motif": "^1.1.13",
37
- "@arcblock/icons": "^2.7.25",
38
- "@arcblock/nft-display": "2.7.25",
39
- "@arcblock/react-hooks": "^2.7.25",
40
- "@arcblock/terminal": "^2.7.25",
41
- "@arcblock/ux": "^2.7.25",
42
- "@blocklet/constant": "1.16.17-beta-d282d63e",
43
- "@blocklet/launcher-layout": "2.2.19",
37
+ "@arcblock/icons": "^2.7.27",
38
+ "@arcblock/nft-display": "2.7.27",
39
+ "@arcblock/react-hooks": "^2.7.27",
40
+ "@arcblock/terminal": "^2.7.27",
41
+ "@arcblock/ux": "^2.7.27",
42
+ "@blocklet/constant": "1.16.17-beta-1cab4b42",
43
+ "@blocklet/launcher-layout": "2.2.21",
44
44
  "@blocklet/list": "^0.12.45",
45
- "@blocklet/meta": "1.16.17-beta-d282d63e",
46
- "@blocklet/ui-react": "^2.7.25",
47
- "@blocklet/uploader": "^0.0.24",
45
+ "@blocklet/meta": "1.16.17-beta-1cab4b42",
46
+ "@blocklet/ui-react": "^2.7.27",
47
+ "@blocklet/uploader": "^0.0.26",
48
48
  "@emotion/react": "^11.10.4",
49
49
  "@emotion/styled": "^11.10.4",
50
50
  "@iconify/react": "^4.0.0",
@@ -54,7 +54,7 @@
54
54
  "@mui/material": "^5.14.10",
55
55
  "@mui/styles": "^5.14.10",
56
56
  "@mui/x-date-pickers": "^6.14.0",
57
- "@ocap/client": "1.18.91",
57
+ "@ocap/client": "1.18.92",
58
58
  "@uiw/react-markdown-preview": "4.0.6",
59
59
  "ahooks": "^3.7.1",
60
60
  "axios": "^0.27.2",
@@ -100,7 +100,7 @@
100
100
  "babel-plugin-inline-react-svg": "^1.1.2",
101
101
  "glob": "^10.3.3"
102
102
  },
103
- "gitHead": "b675be55d76903e8b92d98cfca7d960fcfedd98f",
103
+ "gitHead": "114d4fedc6b4a8034a3d2ea9e166544fb6c2588e",
104
104
  "exports": {
105
105
  ".": {
106
106
  "import": "./es/index.js",