@blocklet/ui-react 2.9.15 → 2.9.17

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.
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _material = require("@mui/material");
9
+ var _react = require("@iconify/react");
10
+ var _Colors = require("@arcblock/ux/lib/Colors");
11
+ var _Session = require("@arcblock/did-connect/lib/Session");
12
+ var _react2 = require("react");
13
+ var _SessionPermission = _interopRequireDefault(require("@arcblock/ux/lib/SessionPermission"));
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+ var _ahooks = require("ahooks");
16
+ var _util = require("@arcblock/ux/lib/Locale/util");
17
+ var _context = require("@arcblock/ux/lib/Locale/context");
18
+ var _useComponentInstalled = _interopRequireDefault(require("./use-component-installed"));
19
+ var _locales = _interopRequireDefault(require("./locales"));
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ function ComponentInstaller({
22
+ warnIcon,
23
+ did,
24
+ noPermissionMute,
25
+ onInstalled,
26
+ onError,
27
+ children,
28
+ closeByOutSize,
29
+ onClose,
30
+ fallback,
31
+ roles = ["owner", "admin"]
32
+ }) {
33
+ const {
34
+ locale
35
+ } = (0, _context.useLocaleContext)();
36
+ const t = (0, _ahooks.useMemoizedFn)((key, data = {}) => {
37
+ return (0, _util.translate)(_locales.default, key, locale, "en", data);
38
+ });
39
+ const {
40
+ installed,
41
+ optionalComponent,
42
+ installUrl,
43
+ storeUrl,
44
+ installStatus,
45
+ installStatusDone,
46
+ definedInBlockletYML
47
+ } = (0, _useComponentInstalled.default)({
48
+ did,
49
+ onInstalled,
50
+ onError
51
+ });
52
+ const sessionCtx = (0, _react2.useContext)(_Session.SessionContext);
53
+ const handleInstall = () => {
54
+ window.open(installUrl, "_blank");
55
+ };
56
+ const handleClose = () => {
57
+ onClose?.(false);
58
+ };
59
+ const handleOpenStore = () => {
60
+ window.open(storeUrl, "_blank");
61
+ };
62
+ const handleRefresh = () => {
63
+ window.location.reload();
64
+ };
65
+ const size = 60;
66
+ return /* @__PURE__ */(0, _jsxRuntime.jsx)(_SessionPermission.default, {
67
+ session: sessionCtx?.session,
68
+ roles,
69
+ children: ({
70
+ hasPermission
71
+ }) => {
72
+ if (installed) {
73
+ return children;
74
+ }
75
+ if (noPermissionMute && !hasPermission) {
76
+ return fallback || null;
77
+ }
78
+ if (typeof children === "function") {
79
+ return /* @__PURE__ */(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
80
+ children: [fallback, children({
81
+ hasPermission,
82
+ optionalComponent,
83
+ installStatus,
84
+ handleOpenStore,
85
+ handleInstall,
86
+ handleRefresh
87
+ })]
88
+ });
89
+ }
90
+ return /* @__PURE__ */(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
91
+ children: [fallback, /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.ClickAwayListener, {
92
+ onClickAway: e => {
93
+ e.preventDefault();
94
+ e.stopPropagation();
95
+ if (closeByOutSize) {
96
+ handleClose();
97
+ }
98
+ },
99
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Fade, {
100
+ in: true,
101
+ timeout: 350,
102
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Paper, {
103
+ variant: "outlined",
104
+ sx: {
105
+ position: "fixed",
106
+ top: 20,
107
+ right: 20,
108
+ zIndex: 3e3,
109
+ borderRadius: 3,
110
+ width: 400,
111
+ maxWidth: 400,
112
+ borderColor: _Colors.temp.lineStep,
113
+ border: "0 !important",
114
+ fontSize: "14px",
115
+ textAlign: "left",
116
+ boxShadow: `0px 8px 16px 0px ${_Colors.temp.gray6}, 0px 0px 0px 1px ${_Colors.temp.gray6}`
117
+ },
118
+ children: !definedInBlockletYML ? /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
119
+ sx: {
120
+ display: "flex",
121
+ flexDirection: "column"
122
+ },
123
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
124
+ sx: {
125
+ padding: "20px 24px",
126
+ marginLeft: 0,
127
+ display: "flex",
128
+ flexDirection: "row",
129
+ justifyContent: "flex-start"
130
+ },
131
+ children: [warnIcon || /* @__PURE__ */(0, _jsxRuntime.jsx)(_react.Icon, {
132
+ icon: "mdi:warning-box",
133
+ style: {
134
+ color: "yellowgreen",
135
+ fontSize: 24
136
+ }
137
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
138
+ sx: {
139
+ marginLeft: 1,
140
+ fontSize: "16px",
141
+ fontWeight: "bold"
142
+ },
143
+ children: t("componentInstallerTitle")
144
+ })]
145
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
146
+ sx: {
147
+ width: "100%",
148
+ height: "1px",
149
+ backgroundColor: _Colors.temp.gray6
150
+ }
151
+ }), /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
152
+ sx: {
153
+ padding: "20px 24px",
154
+ marginTop: 0
155
+ },
156
+ children: [t("componentInstallerNoDefinedInBlockletYML"), ": ", did]
157
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
158
+ sx: {
159
+ padding: "0px 24px"
160
+ },
161
+ children: onClose ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
162
+ sx: {
163
+ marginBottom: 2
164
+ },
165
+ variant: "outlined",
166
+ className: "button",
167
+ onClick: handleClose,
168
+ children: t("componentInstallerClose")
169
+ }) : null
170
+ })]
171
+ }) : /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
172
+ sx: {
173
+ display: "flex",
174
+ flexDirection: "column"
175
+ },
176
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
177
+ sx: {
178
+ padding: "20px 24px",
179
+ marginLeft: 0,
180
+ display: "flex",
181
+ flexDirection: "row",
182
+ justifyContent: "flex-start"
183
+ },
184
+ children: [warnIcon || /* @__PURE__ */(0, _jsxRuntime.jsx)(_react.Icon, {
185
+ icon: "mdi:warning-box",
186
+ style: {
187
+ color: "yellowgreen",
188
+ fontSize: 24
189
+ }
190
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
191
+ sx: {
192
+ marginLeft: 1,
193
+ fontSize: "16px",
194
+ fontWeight: "bold"
195
+ },
196
+ children: t("componentInstallerTitle")
197
+ })]
198
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
199
+ sx: {
200
+ width: "100%",
201
+ height: "1px",
202
+ backgroundColor: _Colors.temp.gray6
203
+ }
204
+ }), /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
205
+ sx: {
206
+ padding: "20px 24px",
207
+ paddingTop: 0.5,
208
+ marginTop: 2,
209
+ display: "flex",
210
+ flexDirection: "row",
211
+ justifyContent: "start",
212
+ alignItems: "flex-start"
213
+ },
214
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsx)("img", {
215
+ style: {
216
+ width: size,
217
+ height: size,
218
+ minWidth: size,
219
+ minHeight: size
220
+ },
221
+ src: optionalComponent.logoUrl,
222
+ alt: optionalComponent.meta.title
223
+ }), /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
224
+ sx: {
225
+ display: "flex",
226
+ flexDirection: "column",
227
+ justifyContent: "start",
228
+ alignItems: "start",
229
+ marginLeft: 2
230
+ },
231
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
232
+ sx: {
233
+ fontSize: "16px",
234
+ fontWeight: "bold",
235
+ cursor: "pointer",
236
+ ".link-icon": {
237
+ opacity: 0
238
+ },
239
+ ":hover .link-icon": {
240
+ opacity: 1
241
+ }
242
+ },
243
+ onClick: handleOpenStore,
244
+ children: [optionalComponent.meta.title, /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
245
+ sx: {
246
+ paddingLeft: 1,
247
+ fontSize: "13px",
248
+ fontWeight: "400"
249
+ },
250
+ component: "span",
251
+ children: [optionalComponent.meta.version, /* @__PURE__ */(0, _jsxRuntime.jsx)(_react.Icon, {
252
+ className: "link-icon",
253
+ icon: "fluent:open-20-filled",
254
+ style: {
255
+ color: _Colors.temp.primaryBase,
256
+ fontSize: 16,
257
+ transform: "translate(6px, 3px)",
258
+ transition: "all 0.3s"
259
+ }
260
+ })]
261
+ })]
262
+ }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
263
+ sx: {
264
+ marginTop: 0,
265
+ opacity: 0.7
266
+ },
267
+ children: optionalComponent.meta.description
268
+ }), /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
269
+ sx: {
270
+ display: hasPermission ? "flex" : "none",
271
+ flexDirection: "row",
272
+ gap: 1
273
+ },
274
+ children: [installStatus ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
275
+ sx: {
276
+ marginTop: 2,
277
+ opacity: 0.7
278
+ },
279
+ children: installStatusDone ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
280
+ variant: "contained",
281
+ onClick: handleRefresh,
282
+ children: t("componentInstallerRefresh")
283
+ }, "refresh") : /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
284
+ disabled: true,
285
+ sx: {
286
+ color: "#333"
287
+ },
288
+ startIcon: /* @__PURE__ */(0, _jsxRuntime.jsx)(_react.Icon, {
289
+ icon: "line-md:loading-loop",
290
+ style: {
291
+ color: "#333",
292
+ fontSize: 16
293
+ }
294
+ }),
295
+ variant: "contained",
296
+ children: installStatus
297
+ }, "status")
298
+ }) : /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
299
+ sx: {
300
+ marginTop: 2
301
+ },
302
+ variant: "contained",
303
+ className: "button",
304
+ onClick: handleInstall,
305
+ children: t("componentInstallerInstall")
306
+ }, "install"), onClose ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
307
+ sx: {
308
+ marginTop: 2
309
+ },
310
+ variant: "outlined",
311
+ className: "button",
312
+ onClick: handleClose,
313
+ children: t("componentInstallerClose")
314
+ }) : null]
315
+ }), installStatusDone ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
316
+ sx: {
317
+ marginTop: 2,
318
+ opacity: 0.7
319
+ },
320
+ children: t("componentInstallerSuccessInstalled")
321
+ }) : null]
322
+ })]
323
+ }), hasPermission ? null : /* @__PURE__ */(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
324
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
325
+ sx: {
326
+ width: "100%",
327
+ height: "1px",
328
+ backgroundColor: _Colors.temp.gray6
329
+ }
330
+ }), /* @__PURE__ */(0, _jsxRuntime.jsxs)(_material.Box, {
331
+ sx: {
332
+ padding: "20px 24px"
333
+ },
334
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Box, {
335
+ sx: {
336
+ opacity: 1
337
+ },
338
+ children: t("componentInstallerSuggestions")
339
+ }), onClose ? /* @__PURE__ */(0, _jsxRuntime.jsx)(_material.Button, {
340
+ sx: {
341
+ marginTop: 2,
342
+ alignSelf: "flex-start"
343
+ },
344
+ variant: "outlined",
345
+ className: "button",
346
+ onClick: handleClose,
347
+ children: t("componentInstallerClose")
348
+ }) : null]
349
+ })]
350
+ })]
351
+ })
352
+ })
353
+ })
354
+ })]
355
+ });
356
+ }
357
+ });
358
+ }
359
+ ComponentInstaller.propTypes = {
360
+ warnIcon: _propTypes.default.node,
361
+ did: _propTypes.default.string.isRequired,
362
+ noPermissionMute: _propTypes.default.bool,
363
+ onInstalled: _propTypes.default.func,
364
+ onError: _propTypes.default.func,
365
+ children: _propTypes.default.any.isRequired,
366
+ closeByOutSize: _propTypes.default.bool,
367
+ onClose: _propTypes.default.func,
368
+ fallback: _propTypes.default.node,
369
+ roles: _propTypes.default.array
370
+ };
371
+ ComponentInstaller.defaultProps = {
372
+ warnIcon: null,
373
+ noPermissionMute: false,
374
+ onInstalled: null,
375
+ onError: null,
376
+ closeByOutSize: false,
377
+ onClose: null,
378
+ fallback: null,
379
+ roles: ["owner", "admin"]
380
+ };
381
+ module.exports = ComponentInstaller;
@@ -0,0 +1,28 @@
1
+ export default translations;
2
+ declare namespace translations {
3
+ namespace zh {
4
+ let componentInstallerTitle: string;
5
+ let componentInstallerInstall: string;
6
+ let componentInstallerClose: string;
7
+ let componentInstallerRefresh: string;
8
+ let componentInstallerSuccessInstalled: string;
9
+ let componentInstallerSuggestions: string;
10
+ let componentInstallerNoDefinedInBlockletYML: string;
11
+ }
12
+ namespace en {
13
+ let componentInstallerTitle_1: string;
14
+ export { componentInstallerTitle_1 as componentInstallerTitle };
15
+ let componentInstallerInstall_1: string;
16
+ export { componentInstallerInstall_1 as componentInstallerInstall };
17
+ let componentInstallerClose_1: string;
18
+ export { componentInstallerClose_1 as componentInstallerClose };
19
+ let componentInstallerRefresh_1: string;
20
+ export { componentInstallerRefresh_1 as componentInstallerRefresh };
21
+ let componentInstallerSuccessInstalled_1: string;
22
+ export { componentInstallerSuccessInstalled_1 as componentInstallerSuccessInstalled };
23
+ let componentInstallerSuggestions_1: string;
24
+ export { componentInstallerSuggestions_1 as componentInstallerSuggestions };
25
+ let componentInstallerNoDefinedInBlockletYML_1: string;
26
+ export { componentInstallerNoDefinedInBlockletYML_1 as componentInstallerNoDefinedInBlockletYML };
27
+ }
28
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ const translations = {
8
+ zh: {
9
+ componentInstallerTitle: '缺少组件',
10
+ componentInstallerInstall: '安装',
11
+ componentInstallerClose: '关闭',
12
+ componentInstallerRefresh: '重载页面',
13
+ componentInstallerSuccessInstalled: '安装成功,请重载页面查看变化。',
14
+ componentInstallerSuggestions: '请联系系统管理员安装该组件。',
15
+ componentInstallerNoDefinedInBlockletYML: '组件未在 blocklet.yml 中定义'
16
+ },
17
+ en: {
18
+ componentInstallerTitle: 'Missing component',
19
+ componentInstallerInstall: 'Install',
20
+ componentInstallerClose: 'Close',
21
+ componentInstallerRefresh: 'Refresh',
22
+ componentInstallerSuccessInstalled: 'Successfully installed, please refresh the page to see the changes.',
23
+ componentInstallerSuggestions: 'Please contact the system administrator to install the component.',
24
+ componentInstallerNoDefinedInBlockletYML: 'The component is not defined in blocklet.yml'
25
+ }
26
+ };
27
+ module.exports = translations;
@@ -0,0 +1,15 @@
1
+ export default useComponentInstalled;
2
+ declare function useComponentInstalled({ did, onInstalled, onError }: {
3
+ did: any;
4
+ onInstalled: any;
5
+ onError: any;
6
+ }): {
7
+ optionalComponent: any;
8
+ installed: any;
9
+ installUrl: string;
10
+ storeUrl: string;
11
+ installStatus: string;
12
+ setInstallStatus: import("react").Dispatch<import("react").SetStateAction<string>>;
13
+ installStatusDone: boolean;
14
+ definedInBlockletYML: any;
15
+ };
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _constant = require("@arcblock/did-connect/lib/constant");
8
+ var _react = require("react");
9
+ function useComponentInstalled({
10
+ did,
11
+ onInstalled,
12
+ onError
13
+ }) {
14
+ const {
15
+ optionalComponents,
16
+ componentMountPoints
17
+ } = window.blocklet;
18
+ const onInstalledRef = (0, _react.useRef)({
19
+ onInstalled,
20
+ onError
21
+ });
22
+ onInstalledRef.current = {
23
+ onInstalled,
24
+ onError
25
+ };
26
+ const optionalComponent = (0, _react.useMemo)(() => {
27
+ if (!optionalComponents || !optionalComponents.length) {
28
+ return null;
29
+ }
30
+ const component = optionalComponents.find(c => c.meta.did === did);
31
+ (component ? onInstalledRef.current.onError : onInstalledRef.current.onInstalled)?.(component);
32
+ return component;
33
+ }, [did, optionalComponents]);
34
+ const definedInBlockletYML = (0, _react.useMemo)(() => {
35
+ if (optionalComponent) {
36
+ return true;
37
+ }
38
+ return (componentMountPoints || []).find(item => item.did === did);
39
+ }, [optionalComponent, componentMountPoints, did]);
40
+ const installUrl = `${window.blocklet.appUrl}/${_constant.AUTH_SERVICE_PREFIX}/admin/components?install-component=${did}`;
41
+ const storeUrl = optionalComponent ? `${optionalComponent.meta.homepage}/blocklets/${did}` : '';
42
+ const [installStatus, setInstallStatus] = (0, _react.useState)('');
43
+ (0, _react.useEffect)(() => {
44
+ const handle = event => {
45
+ if (event.origin !== window.blocklet.appUrl) {
46
+ return;
47
+ }
48
+ if (event.data?.kind === 'component-installer' && event.data?.blocklet?.children) {
49
+ let hasChild = false;
50
+ event.data?.blocklet?.children.forEach(item => {
51
+ if (item.meta?.did === did) {
52
+ hasChild = true;
53
+ setInstallStatus(item.status || 'waiting');
54
+ }
55
+ });
56
+ if (!hasChild) {
57
+ setInstallStatus('');
58
+ }
59
+ }
60
+ };
61
+ window.addEventListener('message', handle);
62
+ return () => {
63
+ window.removeEventListener('message', handle);
64
+ };
65
+ }, [did]);
66
+ const installStatusDone = installStatus === 'stopped' || installStatus === 'running';
67
+ return {
68
+ optionalComponent,
69
+ installed: !optionalComponent && definedInBlockletYML,
70
+ installUrl,
71
+ storeUrl,
72
+ installStatus,
73
+ setInstallStatus,
74
+ installStatusDone,
75
+ definedInBlockletYML
76
+ };
77
+ }
78
+ module.exports = useComponentInstalled;
package/lib/index.d.ts CHANGED
@@ -2,4 +2,6 @@ export { default as Header } from './Header';
2
2
  export { default as Footer } from './Footer';
3
3
  export { default as Dashboard } from './Dashboard';
4
4
  export { default as Icon } from './Icon';
5
+ export { default as ComponentInstaller } from './ComponentInstaller';
6
+ export { default as useComponentInstaller } from './ComponentInstaller/use-component-installed';
5
7
  export * from './UserCenter';
package/lib/index.js CHANGED
@@ -7,8 +7,16 @@ var _exportNames = {
7
7
  Header: true,
8
8
  Footer: true,
9
9
  Dashboard: true,
10
- Icon: true
10
+ Icon: true,
11
+ ComponentInstaller: true,
12
+ useComponentInstaller: true
11
13
  };
14
+ Object.defineProperty(exports, "ComponentInstaller", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _ComponentInstaller.default;
18
+ }
19
+ });
12
20
  Object.defineProperty(exports, "Dashboard", {
13
21
  enumerable: true,
14
22
  get: function () {
@@ -33,10 +41,18 @@ Object.defineProperty(exports, "Icon", {
33
41
  return _Icon.default;
34
42
  }
35
43
  });
44
+ Object.defineProperty(exports, "useComponentInstaller", {
45
+ enumerable: true,
46
+ get: function () {
47
+ return _useComponentInstalled.default;
48
+ }
49
+ });
36
50
  var _Header = _interopRequireDefault(require("./Header"));
37
51
  var _Footer = _interopRequireDefault(require("./Footer"));
38
52
  var _Dashboard = _interopRequireDefault(require("./Dashboard"));
39
53
  var _Icon = _interopRequireDefault(require("./Icon"));
54
+ var _ComponentInstaller = _interopRequireDefault(require("./ComponentInstaller"));
55
+ var _useComponentInstalled = _interopRequireDefault(require("./ComponentInstaller/use-component-installed"));
40
56
  var _UserCenter = require("./UserCenter");
41
57
  Object.keys(_UserCenter).forEach(function (key) {
42
58
  if (key === "default" || key === "__esModule") return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blocklet/ui-react",
3
- "version": "2.9.15",
3
+ "version": "2.9.17",
4
4
  "description": "Some useful front-end web components that can be used in Blocklets.",
5
5
  "keywords": [
6
6
  "react",
@@ -40,6 +40,10 @@
40
40
  "import": "./es/",
41
41
  "require": "./lib/"
42
42
  },
43
+ "./lib/ComponentInstaller": {
44
+ "import": "./es/ComponentInstaller/index.js",
45
+ "require": "./lib/ComponentInstaller/index.js"
46
+ },
43
47
  "./lib/Dashboard": {
44
48
  "import": "./es/Dashboard/index.js",
45
49
  "require": "./lib/Dashboard/index.js"
@@ -59,8 +63,8 @@
59
63
  },
60
64
  "dependencies": {
61
65
  "@abtnode/constant": "1.16.23-beta-aeb9f5bd",
62
- "@arcblock/did-connect": "^2.9.15",
63
- "@arcblock/ux": "^2.9.15",
66
+ "@arcblock/did-connect": "^2.9.17",
67
+ "@arcblock/ux": "^2.9.17",
64
68
  "@blocklet/js-sdk": "1.16.23-beta-aeb9f5bd",
65
69
  "@emotion/react": "^11.10.4",
66
70
  "@emotion/styled": "^11.10.4",
@@ -92,5 +96,5 @@
92
96
  "jest": "^28.1.3",
93
97
  "unbuild": "^2.0.0"
94
98
  },
95
- "gitHead": "2402b2d3888dcac685215c373afd7651e6907acc"
99
+ "gitHead": "73c46d89b7ae8bb79b14adc26611f3e0046508d4"
96
100
  }