@arcblock/ux 3.4.15 → 3.5.1

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.
Files changed (333) hide show
  1. package/lib/package.json.js +1 -1
  2. package/package.json +10 -7
  3. package/src/ActionButton/ActionButton.stories.jsx +0 -61
  4. package/src/ActionButton/index.jsx +0 -106
  5. package/src/ActivityIndicator/ActivityIndicator.stories.jsx +0 -9
  6. package/src/ActivityIndicator/index.jsx +0 -140
  7. package/src/Address/Address.stories.jsx +0 -38
  8. package/src/Address/compact-text.jsx +0 -76
  9. package/src/Address/did-address.tsx +0 -223
  10. package/src/Address/index.tsx +0 -21
  11. package/src/Address/responsive-did-address.tsx +0 -154
  12. package/src/Alert/Alert.stories.jsx +0 -100
  13. package/src/Alert/index.jsx +0 -130
  14. package/src/AnimationWaiter/AnimationWaiter.stories.jsx +0 -35
  15. package/src/AnimationWaiter/dark-animation.json +0 -1
  16. package/src/AnimationWaiter/default-animation.json +0 -1
  17. package/src/AnimationWaiter/index.jsx +0 -296
  18. package/src/Async/index.tsx +0 -44
  19. package/src/Avatar/Avatar.stories.jsx +0 -11
  20. package/src/Avatar/did-motif.jsx +0 -38
  21. package/src/Avatar/etherscan-blockies.js +0 -81
  22. package/src/Avatar/index.jsx +0 -195
  23. package/src/Badge/Badge.stories.jsx +0 -41
  24. package/src/Badge/index.jsx +0 -101
  25. package/src/Blocklet/Blocklet.stories.jsx +0 -21
  26. package/src/Blocklet/blocklet.jsx +0 -276
  27. package/src/Blocklet/index.js +0 -5
  28. package/src/Blocklet/utils.jsx +0 -58
  29. package/src/BlockletContext/index.tsx +0 -72
  30. package/src/BlockletNFT/BlockletNFT.stories.jsx +0 -21
  31. package/src/BlockletNFT/index.jsx +0 -378
  32. package/src/BlockletV2/Blocklet.stories.jsx +0 -34
  33. package/src/BlockletV2/blocklet.tsx +0 -247
  34. package/src/BlockletV2/components/icon-text.tsx +0 -47
  35. package/src/BlockletV2/components/tooltip-icon.tsx +0 -52
  36. package/src/BlockletV2/index.ts +0 -6
  37. package/src/BlockletV2/utils.js +0 -75
  38. package/src/Button/Button.stories.jsx +0 -24
  39. package/src/Button/index.js +0 -9
  40. package/src/Button/wrap.jsx +0 -126
  41. package/src/ButtonGroup/index.js +0 -16
  42. package/src/CardSelector/index.tsx +0 -136
  43. package/src/Center/Center.stories.jsx +0 -20
  44. package/src/Center/index.tsx +0 -33
  45. package/src/ClickToCopy/ClickToCopy.stories.jsx +0 -24
  46. package/src/ClickToCopy/copy-button.tsx +0 -43
  47. package/src/ClickToCopy/hook.ts +0 -42
  48. package/src/ClickToCopy/index.tsx +0 -96
  49. package/src/CloseButton/index.tsx +0 -37
  50. package/src/CodeBlock/CodeBlock.stories.jsx +0 -22
  51. package/src/CodeBlock/LightBox.tsx +0 -87
  52. package/src/CodeBlock/index.tsx +0 -217
  53. package/src/Colors/Colors.stories.jsx +0 -211
  54. package/src/Colors/index.ts +0 -4
  55. package/src/Colors/themes/default.ts +0 -8
  56. package/src/Colors/themes/did-connect.ts +0 -64
  57. package/src/Colors/themes/temp.ts +0 -52
  58. package/src/Config/Config.stories.jsx +0 -16
  59. package/src/Config/config-provider.tsx +0 -62
  60. package/src/Config/index.ts +0 -2
  61. package/src/Config/theme-mode-toggle.tsx +0 -38
  62. package/src/ContactForm/ContactForm.stories.jsx +0 -32
  63. package/src/ContactForm/index.tsx +0 -264
  64. package/src/CookieConsent/CookieConsent.stories.jsx +0 -33
  65. package/src/CookieConsent/index.tsx +0 -104
  66. package/src/CountDown/CountDown.stories.jsx +0 -15
  67. package/src/CountDown/index.tsx +0 -170
  68. package/src/DID/DID.stories.jsx +0 -37
  69. package/src/DID/index.tsx +0 -393
  70. package/src/DIDConnect/app-icon.tsx +0 -37
  71. package/src/DIDConnect/app-info-item.tsx +0 -93
  72. package/src/DIDConnect/auth-apps/auth-apps-info.tsx +0 -77
  73. package/src/DIDConnect/auth-apps/index.tsx +0 -278
  74. package/src/DIDConnect/auth-apps/switch-role.tsx +0 -47
  75. package/src/DIDConnect/did-connect-container.tsx +0 -326
  76. package/src/DIDConnect/did-connect-footer.tsx +0 -76
  77. package/src/DIDConnect/did-connect-logo.tsx +0 -8
  78. package/src/DIDConnect/icons/did-wallet-logo.tsx +0 -18
  79. package/src/DIDConnect/icons/github-logo.tsx +0 -17
  80. package/src/DIDConnect/index.ts +0 -11
  81. package/src/DIDConnect/landing-page.tsx +0 -218
  82. package/src/DIDConnect/powered-by.tsx +0 -48
  83. package/src/DIDConnect/provider-icon.tsx +0 -62
  84. package/src/DIDConnect/request-storage-access-api-dialog.tsx +0 -304
  85. package/src/DIDConnect/with-container.tsx +0 -323
  86. package/src/DIDConnect/with-ux-theme.tsx +0 -22
  87. package/src/DIDLogo/Logo.stories.jsx +0 -11
  88. package/src/DIDLogo/index.tsx +0 -168
  89. package/src/Datatable/CustomToolbar.jsx +0 -415
  90. package/src/Datatable/Datatable.stories.jsx +0 -92
  91. package/src/Datatable/DatatableContext.jsx +0 -35
  92. package/src/Datatable/TableSearch.jsx +0 -166
  93. package/src/Datatable/index.jsx +0 -652
  94. package/src/Datatable/utils.js +0 -161
  95. package/src/Dialog/Dialog.stories.jsx +0 -21
  96. package/src/Dialog/confirm.jsx +0 -143
  97. package/src/Dialog/dialog.jsx +0 -199
  98. package/src/Dialog/index.js +0 -4
  99. package/src/Dialog/types.d.ts +0 -20
  100. package/src/Dialog/use-confirm.jsx +0 -188
  101. package/src/DriftBot/index.tsx +0 -81
  102. package/src/Earth/Earth.stories.jsx +0 -39
  103. package/src/Earth/countries.json +0 -8057
  104. package/src/Earth/index.tsx +0 -515
  105. package/src/Earth/util.ts +0 -72
  106. package/src/Empty/Empty.stories.jsx +0 -23
  107. package/src/Empty/index.jsx +0 -48
  108. package/src/ErrorBoundary/ErrorBoundary.stories.jsx +0 -13
  109. package/src/ErrorBoundary/fallback.tsx +0 -85
  110. package/src/ErrorBoundary/index.ts +0 -1
  111. package/src/Footer/Footer.stories.jsx +0 -13
  112. package/src/Footer/index.tsx +0 -130
  113. package/src/Header/Header.stories.jsx +0 -30
  114. package/src/Header/addon-button.tsx +0 -41
  115. package/src/Header/auto-hidden.tsx +0 -31
  116. package/src/Header/header-addons.tsx +0 -37
  117. package/src/Header/header.tsx +0 -214
  118. package/src/Header/index.ts +0 -3
  119. package/src/Header/responsive-header.tsx +0 -145
  120. package/src/Icon/Icon.stories.jsx +0 -45
  121. package/src/Icon/image.tsx +0 -53
  122. package/src/Icon/index.tsx +0 -63
  123. package/src/Img/Img.stories.jsx +0 -17
  124. package/src/Img/index.jsx +0 -258
  125. package/src/InfoRow/InfoRow.stories.jsx +0 -14
  126. package/src/InfoRow/index.tsx +0 -91
  127. package/src/Layout/Layout.stories.jsx +0 -24
  128. package/src/Layout/dashboard/external-link.tsx +0 -59
  129. package/src/Layout/dashboard/full-page.tsx +0 -58
  130. package/src/Layout/dashboard/index.tsx +0 -260
  131. package/src/Layout/dashboard/sidebar.tsx +0 -198
  132. package/src/Layout/dashboard-legacy/header.tsx +0 -156
  133. package/src/Layout/dashboard-legacy/index.tsx +0 -127
  134. package/src/Layout/dashboard-legacy/sidebar.tsx +0 -129
  135. package/src/Layout/index.tsx +0 -310
  136. package/src/LoadingMask/index.tsx +0 -108
  137. package/src/Locale/LocaleSelector.stories.jsx +0 -44
  138. package/src/Locale/browser-lang.ts +0 -65
  139. package/src/Locale/context.tsx +0 -162
  140. package/src/Locale/languages.ts +0 -58
  141. package/src/Locale/selector.tsx +0 -174
  142. package/src/Locale/util.ts +0 -38
  143. package/src/Logo/Logo.stories.jsx +0 -23
  144. package/src/Logo/images/logo-dark-text.svg +0 -3
  145. package/src/Logo/images/logo-dark-top.svg +0 -6
  146. package/src/Logo/images/logo-light-text.svg +0 -3
  147. package/src/Logo/images/logo-light-top.svg +0 -6
  148. package/src/Logo/index.tsx +0 -58
  149. package/src/Metric/Metric.stories.jsx +0 -29
  150. package/src/Metric/index.tsx +0 -130
  151. package/src/MuiWrap/index.tsx +0 -10
  152. package/src/NFTDisplay/NFTBroken.svg +0 -34
  153. package/src/NFTDisplay/NFTDisplay.stories.jsx +0 -30
  154. package/src/NFTDisplay/README.md +0 -59
  155. package/src/NFTDisplay/aspect-ratio-container.tsx +0 -36
  156. package/src/NFTDisplay/broken.tsx +0 -51
  157. package/src/NFTDisplay/displayApi.ts +0 -43
  158. package/src/NFTDisplay/index.tsx +0 -393
  159. package/src/NFTDisplay/loading.tsx +0 -16
  160. package/src/NFTDisplay/preview.tsx +0 -84
  161. package/src/NFTDisplay/render-svg.tsx +0 -21
  162. package/src/NFTDisplay/svg-embedder/img.tsx +0 -27
  163. package/src/NFTDisplay/svg-embedder/inline-svg.tsx +0 -36
  164. package/src/NavMenu/NavMenu.stories.jsx +0 -17
  165. package/src/NavMenu/images/OCAP.svg +0 -1
  166. package/src/NavMenu/images/abt-network.svg +0 -1
  167. package/src/NavMenu/images/ai-kit.svg +0 -1
  168. package/src/NavMenu/images/aigne-image-smith.svg +0 -1
  169. package/src/NavMenu/images/aigne.svg +0 -1
  170. package/src/NavMenu/images/aistro.png +0 -0
  171. package/src/NavMenu/images/arcsphere.svg +0 -1
  172. package/src/NavMenu/images/blocklet-framework.svg +0 -1
  173. package/src/NavMenu/images/blocklet-launcher.svg +0 -1
  174. package/src/NavMenu/images/blocklet-server.svg +0 -1
  175. package/src/NavMenu/images/blocklet-store.svg +0 -1
  176. package/src/NavMenu/images/creator-studio.svg +0 -1
  177. package/src/NavMenu/images/did-wallet.svg +0 -1
  178. package/src/NavMenu/images/did.svg +0 -1
  179. package/src/NavMenu/images/nft-studio.svg +0 -1
  180. package/src/NavMenu/images/payment-kit.png +0 -0
  181. package/src/NavMenu/images/vc.svg +0 -1
  182. package/src/NavMenu/images/web3-kit.svg +0 -1
  183. package/src/NavMenu/index.ts +0 -3
  184. package/src/NavMenu/nav-menu-context.tsx +0 -30
  185. package/src/NavMenu/nav-menu.tsx +0 -441
  186. package/src/NavMenu/products.tsx +0 -830
  187. package/src/NavMenu/style.ts +0 -258
  188. package/src/NavMenu/sub-container.tsx +0 -125
  189. package/src/NavMenu/sub-item-group.tsx +0 -42
  190. package/src/OrgTransfer/index.tsx +0 -53
  191. package/src/OrgTransfer/locales.ts +0 -25
  192. package/src/OrgTransfer/selector.tsx +0 -252
  193. package/src/OrgTransfer/type.ts +0 -31
  194. package/src/PageScroller/index.tsx +0 -316
  195. package/src/PageScroller/story/FifthComponent.jsx +0 -7
  196. package/src/PageScroller/story/FirstComponent.jsx +0 -7
  197. package/src/PageScroller/story/FourthComponent.jsx +0 -7
  198. package/src/PageScroller/story/FullPage.jsx +0 -55
  199. package/src/PageScroller/story/PageContain.jsx +0 -59
  200. package/src/PageScroller/story/PageScroller.stories.jsx +0 -18
  201. package/src/PageScroller/story/SecondComponent.jsx +0 -7
  202. package/src/PageScroller/story/ThirdComponent.jsx +0 -7
  203. package/src/PageScroller/story/index.css +0 -115
  204. package/src/PageScroller/usePrevValue.ts +0 -11
  205. package/src/Passport/index.ts +0 -3
  206. package/src/Passport/passport.tsx +0 -118
  207. package/src/PhoneInput/PhoneInput.stories.jsx +0 -12
  208. package/src/PhoneInput/country-select.tsx +0 -148
  209. package/src/PhoneInput/index.tsx +0 -269
  210. package/src/PoweredByArcBlock/index.tsx +0 -27
  211. package/src/PricingTable/PricingPlan.tsx +0 -120
  212. package/src/PricingTable/PricingTable.stories.jsx +0 -38
  213. package/src/PricingTable/index.tsx +0 -59
  214. package/src/QRCode/QRCode.stories.jsx +0 -13
  215. package/src/QRCode/index.tsx +0 -66
  216. package/src/RelativeTime/RelativeTime.stories.jsx +0 -20
  217. package/src/RelativeTime/index.tsx +0 -334
  218. package/src/Result/Result.stories.jsx +0 -61
  219. package/src/Result/common.tsx +0 -119
  220. package/src/Result/index.tsx +0 -30
  221. package/src/Result/result.tsx +0 -65
  222. package/src/Result/translations.ts +0 -57
  223. package/src/Screenshot/BaseScreenshot/index.tsx +0 -73
  224. package/src/Screenshot/BaseScreenshot/shells/Macbook.tsx +0 -38
  225. package/src/Screenshot/BaseScreenshot/shells/Phone.tsx +0 -35
  226. package/src/Screenshot/Screenshot.stories.jsx +0 -44
  227. package/src/Screenshot/devices.css +0 -1366
  228. package/src/Screenshot/index.tsx +0 -300
  229. package/src/SessionBlocklet/index.tsx +0 -178
  230. package/src/SessionManager/SessionManager.stories.jsx +0 -9
  231. package/src/SessionManager/index.tsx +0 -3
  232. package/src/SessionPermission/index.tsx +0 -26
  233. package/src/SessionUser/components/did-space.tsx +0 -68
  234. package/src/SessionUser/components/logged-in.tsx +0 -338
  235. package/src/SessionUser/components/quick-login-item.tsx +0 -132
  236. package/src/SessionUser/components/session-user-item.tsx +0 -93
  237. package/src/SessionUser/components/session-user-switch.tsx +0 -240
  238. package/src/SessionUser/components/un-login.tsx +0 -257
  239. package/src/SessionUser/components/user-info.tsx +0 -201
  240. package/src/SessionUser/index.tsx +0 -68
  241. package/src/SessionUser/libs/translation.ts +0 -30
  242. package/src/SessionUser/libs/utils.ts +0 -39
  243. package/src/SharedBridge/index.tsx +0 -126
  244. package/src/SocialShare/index.tsx +0 -194
  245. package/src/Sparkline/Sparkline.stories.jsx +0 -13
  246. package/src/Sparkline/index.tsx +0 -231
  247. package/src/Spinner/Spinner.stories.jsx +0 -98
  248. package/src/Spinner/index.tsx +0 -20
  249. package/src/SplitButton/SplitButton.stories.jsx +0 -32
  250. package/src/SplitButton/index.tsx +0 -116
  251. package/src/SplitButton/useClickAway.tsx +0 -24
  252. package/src/Success/index.tsx +0 -175
  253. package/src/Switch/Switch.stories.jsx +0 -16
  254. package/src/Switch/index.jsx +0 -79
  255. package/src/Tabs/Tabs.stories.jsx +0 -18
  256. package/src/Tabs/index.tsx +0 -255
  257. package/src/Tag/Tag.stories.jsx +0 -15
  258. package/src/Tag/index.jsx +0 -106
  259. package/src/TextCollapse/TextCollapse.stories.jsx +0 -73
  260. package/src/TextCollapse/index.tsx +0 -85
  261. package/src/Theme/Theme.stories.jsx +0 -11
  262. package/src/Theme/index.ts +0 -21
  263. package/src/Theme/theme-provider.tsx +0 -374
  264. package/src/Theme/theme.ts +0 -229
  265. package/src/Toast/Toast.stories.jsx +0 -28
  266. package/src/Toast/index.tsx +0 -80
  267. package/src/Typography/index.tsx +0 -124
  268. package/src/UserCard/Cards/avatar-only.tsx +0 -27
  269. package/src/UserCard/Cards/basic-info.tsx +0 -43
  270. package/src/UserCard/Cards/index.tsx +0 -16
  271. package/src/UserCard/Cards/social-actions.tsx +0 -196
  272. package/src/UserCard/Container/card.tsx +0 -63
  273. package/src/UserCard/Container/dialog.tsx +0 -37
  274. package/src/UserCard/Content/basic.tsx +0 -330
  275. package/src/UserCard/Content/clock.tsx +0 -82
  276. package/src/UserCard/Content/minimal.tsx +0 -113
  277. package/src/UserCard/Content/shorten-label.tsx +0 -32
  278. package/src/UserCard/Content/tooltip-avatar.tsx +0 -80
  279. package/src/UserCard/UserCard.stories.jsx +0 -19
  280. package/src/UserCard/components.tsx +0 -81
  281. package/src/UserCard/index.tsx +0 -132
  282. package/src/UserCard/types.ts +0 -165
  283. package/src/UserCard/use-follow.tsx +0 -111
  284. package/src/UserCard/utils.ts +0 -155
  285. package/src/Util/WebWalletOpener.stories.jsx +0 -5
  286. package/src/Util/client.ts +0 -4
  287. package/src/Util/constant.ts +0 -70
  288. package/src/Util/deprecate.tsx +0 -29
  289. package/src/Util/federated.ts +0 -125
  290. package/src/Util/iframe.ts +0 -19
  291. package/src/Util/index.ts +0 -760
  292. package/src/Util/logger.ts +0 -44
  293. package/src/Util/passport.ts +0 -127
  294. package/src/Util/security.ts +0 -72
  295. package/src/Util/style.ts +0 -17
  296. package/src/Util/wallet.ts +0 -35
  297. package/src/VerificationCode/index.tsx +0 -83
  298. package/src/Video/Video.stories.jsx +0 -6
  299. package/src/Video/index.tsx +0 -70
  300. package/src/Wallet/Action.stories.jsx +0 -8
  301. package/src/Wallet/Action.tsx +0 -118
  302. package/src/Wallet/Download.stories.jsx +0 -9
  303. package/src/Wallet/Download.tsx +0 -157
  304. package/src/Wallet/Open.tsx +0 -47
  305. package/src/Wallet/OpenInWallet.stories.jsx +0 -5
  306. package/src/Wallet/images/abtwallet.png +0 -0
  307. package/src/Wallet/images/android_download.svg +0 -22
  308. package/src/Wallet/images/app-store.svg +0 -30
  309. package/src/Wallet/images/google-play.svg +0 -69
  310. package/src/WalletOSIcon/index.tsx +0 -47
  311. package/src/WebWalletSWKeeper/index.tsx +0 -117
  312. package/src/WechatPrompt/images/android.png +0 -0
  313. package/src/WechatPrompt/images/ios.png +0 -0
  314. package/src/WechatPrompt/index.tsx +0 -75
  315. package/src/global.d.ts +0 -28
  316. package/src/hooks/use-blocklet-logo.tsx +0 -32
  317. package/src/hooks/use-clock.tsx +0 -62
  318. package/src/hooks/use-location-state.tsx +0 -117
  319. package/src/hooks/use-mobile.tsx +0 -6
  320. package/src/index.ts +0 -79
  321. package/src/type.d.ts +0 -44
  322. package/src/withTheme/index.tsx +0 -72
  323. package/src/withTracker/README.md +0 -37
  324. package/src/withTracker/action/bind-wallet.tsx +0 -17
  325. package/src/withTracker/action/login.tsx +0 -18
  326. package/src/withTracker/action/pay.tsx +0 -14
  327. package/src/withTracker/action/switch-passport.tsx +0 -20
  328. package/src/withTracker/constant/index.tsx +0 -3
  329. package/src/withTracker/env.tsx +0 -1
  330. package/src/withTracker/error_boundary.jsx +0 -34
  331. package/src/withTracker/index.tsx +0 -50
  332. package/src/withTracker/libs/utm.ts +0 -46
  333. package/vite.config.mjs +0 -37
@@ -1,830 +0,0 @@
1
- import { useRef, useEffect, useState } from 'react';
2
- import { Link, LinkProps } from 'react-router-dom';
3
- import { useCreation, useMemoizedFn } from 'ahooks';
4
- import { Box, BoxProps, useTheme } from '@mui/material';
5
- import SubItemGroup from './sub-item-group';
6
- import { Item } from './nav-menu';
7
- import { styled } from '../Theme';
8
- import { useNavMenuContext } from './nav-menu-context';
9
- import { translate } from '../Locale/util';
10
- import { useLocaleContext } from '../Locale/context';
11
- // Arcblock Icons
12
- import NftStudioSvg from './images/nft-studio.svg?react';
13
- import CreatorStudioSvg from './images/creator-studio.svg?react';
14
- import BlockletLauncherSvg from './images/blocklet-launcher.svg?react';
15
- import BlockletStoreSvg from './images/blocklet-store.svg?react';
16
- import Web3KitSvg from './images/web3-kit.svg?react';
17
- import BlockletFrameworkSvg from './images/blocklet-framework.svg?react';
18
- import AbtNetworkSvg from './images/abt-network.svg?react';
19
- import BlockletServerSvg from './images/blocklet-server.svg?react';
20
- import OCAPSvg from './images/OCAP.svg?react';
21
- import DidSvg from './images/did.svg?react';
22
- import DidWalletSvg from './images/did-wallet.svg?react';
23
- import VCSvg from './images/vc.svg?react';
24
- import PaymentKitPng from './images/payment-kit.png';
25
- // AIGNE Icons
26
- import AigneSvg from './images/aigne.svg?react';
27
- import AigneImageSmithSvg from './images/aigne-image-smith.svg?react';
28
- import ArcSphereSvg from './images/arcsphere.svg?react';
29
- import AistroPng from './images/aistro.png';
30
- import { getUTMUrl } from '../withTracker/libs/utm';
31
-
32
- const MIN_ITEM_CONTENT_WIDTH = 260;
33
-
34
- const translations = {
35
- en: {
36
- groups: {
37
- applications: 'Applications',
38
- components: 'Components',
39
- computeStorage: 'Compute/Storage',
40
- identity: 'Identity',
41
- frameworkTools: 'Framework & tools',
42
- modelsAdapters: 'Models adapters',
43
- },
44
- products: {
45
- nftStudio: {
46
- description: 'Mint and manage NFTs',
47
- },
48
- creatorStudio: {
49
- description: 'All-in-one creator tool',
50
- },
51
- aigne: {
52
- description: 'The Agentic Ecosystem for AI Apps',
53
- },
54
- arcsphere: {
55
- description: 'AI native browser',
56
- },
57
- aistro: {
58
- description: 'AI-powered astrology',
59
- },
60
- blockletLauncher: {
61
- description: 'One-click app launcher',
62
- },
63
- aiKit: {
64
- description: 'Boost apps with AI',
65
- },
66
- paymentKit: {
67
- description: 'Effortless Crypto & Card Payments',
68
- },
69
- blockletStore: {
70
- description: 'Discover & deploy apps',
71
- },
72
- web3Kit: {
73
- description: 'Web3 dev toolkit',
74
- },
75
- blockletFramework: {
76
- description: 'Build and run blocklets',
77
- },
78
- didSpaces: {
79
- description: 'Secure personal storage',
80
- },
81
- abtNetwork: {
82
- description: 'Fast blockchain network',
83
- },
84
- blockletServer: {
85
- description: 'Host your apps easily',
86
- },
87
- ocap: {
88
- description: 'Multi-chain connector',
89
- },
90
- did: {
91
- description: 'Self-sovereign ID',
92
- },
93
- didWallet: {
94
- description: 'Smart digital wallet',
95
- },
96
- didNameService: {
97
- description: 'Web3 domain names',
98
- },
99
- vc: {
100
- description: 'Verifiable Credentials',
101
- },
102
- didConnect: {
103
- description: 'Passwordless login',
104
- },
105
- aigneCodeSmith: {
106
- description: 'Review and improve your code with AI',
107
- },
108
- aigneDocSmith: {
109
- description: 'Generate and update docs with AI',
110
- },
111
- aigneWebSmith: {
112
- description: 'Build and deploy AI-powered web apps',
113
- },
114
- aigneImageSmith: {
115
- description: 'Generate and Refine Images with AI',
116
- },
117
- aigneCLI: {
118
- description: 'Develop agents from the command line',
119
- },
120
- aigneObservability: {
121
- description: 'Understand and inspect agent behavior',
122
- },
123
- aigneStudio: {
124
- description: 'Create agents visually, no code needed',
125
- },
126
- aigneFramework: {
127
- description: 'The functional core of agentic AI',
128
- },
129
- aigneHub: {
130
- description: 'One API. Any Model',
131
- },
132
- },
133
- },
134
- zh: {
135
- groups: {
136
- applications: '应用',
137
- components: '组件',
138
- computeStorage: '计算/存储',
139
- identity: '身份',
140
- frameworkTools: '框架与工具',
141
- modelsAdapters: '模型适配器',
142
- },
143
- products: {
144
- nftStudio: {
145
- description: '铸造和管理 NFT',
146
- },
147
- creatorStudio: {
148
- description: '一体化创作工具',
149
- },
150
- aigne: {
151
- description: 'AI 应用的代理生态系统',
152
- },
153
- arcsphere: {
154
- description: 'AI 原生浏览器',
155
- },
156
- aistro: {
157
- description: 'AI 占星术',
158
- },
159
- blockletLauncher: {
160
- description: '一键启动应用程序',
161
- },
162
- aiKit: {
163
- description: 'AI 赋能应用',
164
- },
165
- paymentKit: {
166
- description: '便捷的加密货币和银行卡支付',
167
- },
168
- blockletStore: {
169
- description: '发现和部署应用程序',
170
- },
171
- web3Kit: {
172
- description: 'Web3 开发工具包',
173
- },
174
- blockletFramework: {
175
- description: '构建并运行 Blocklet',
176
- },
177
- didSpaces: {
178
- description: '安全的个人存储',
179
- },
180
- abtNetwork: {
181
- description: '快速区块链网络',
182
- },
183
- blockletServer: {
184
- description: '轻松托管应用程序',
185
- },
186
- ocap: {
187
- description: '多链连接器',
188
- },
189
- did: {
190
- description: '自主身份',
191
- },
192
- didWallet: {
193
- description: '智能数字钱包',
194
- },
195
- didNameService: {
196
- description: 'Web3 域名',
197
- },
198
- vc: {
199
- description: '可验证凭证',
200
- },
201
- didConnect: {
202
- description: '无密码登录',
203
- },
204
- aigneCodeSmith: {
205
- description: '使用 AI 审查并优化你的代码',
206
- },
207
- aigneDocSmith: {
208
- description: '用 AI 生成和更新项目文档',
209
- },
210
- aigneWebSmith: {
211
- description: '构建并部署 AI 驱动的 Web 应用',
212
- },
213
- aigneImageSmith: {
214
- description: '使用 AI 生成和优化图像',
215
- },
216
- aigneCLI: {
217
- description: '通过命令行开发 Agent',
218
- },
219
- aigneObservability: {
220
- description: '理解并分析 Agent 的行为',
221
- },
222
- aigneStudio: {
223
- description: '零代码构建 Agent',
224
- },
225
- aigneFramework: {
226
- description: 'Agent AI 的功能核心框架',
227
- },
228
- aigneHub: {
229
- description: '一套 API,连接所有模型',
230
- },
231
- },
232
- },
233
- 'zh-TW': {
234
- groups: {
235
- applications: '應用',
236
- components: '組件',
237
- computeStorage: '計算/儲存',
238
- identity: '身份',
239
- frameworkTools: '框架與工具',
240
- modelsAdapters: '模型適配器',
241
- },
242
- products: {
243
- nftStudio: {
244
- description: '鑄造和管理 NFT',
245
- },
246
- creatorStudio: {
247
- description: '一體化創作工具',
248
- },
249
- aigne: {
250
- description: 'AI 應用的代理生態系統',
251
- },
252
- arcsphere: {
253
- description: 'AI 原生瀏覽器',
254
- },
255
- aistro: {
256
- description: 'AI 占星術',
257
- },
258
- blockletLauncher: {
259
- description: '一鍵啟動應用程式',
260
- },
261
- aiKit: {
262
- description: 'AI 賦能應用',
263
- },
264
- paymentKit: {
265
- description: '便捷的加密貨幣和銀行卡支付',
266
- },
267
- blockletStore: {
268
- description: '發現和部署應用程式',
269
- },
270
- web3Kit: {
271
- description: 'Web3 開發工具包',
272
- },
273
- blockletFramework: {
274
- description: '構建並運行 Blocklet',
275
- },
276
- didSpaces: {
277
- description: '安全的個人儲存',
278
- },
279
- abtNetwork: {
280
- description: '快速區塊鏈網路',
281
- },
282
- blockletServer: {
283
- description: '輕鬆託管應用程式',
284
- },
285
- ocap: {
286
- description: '多鏈連接器',
287
- },
288
- did: {
289
- description: '自主身份',
290
- },
291
- didWallet: {
292
- description: '智能數位錢包',
293
- },
294
- didNameService: {
295
- description: 'Web3 域名',
296
- },
297
- vc: {
298
- description: '可驗證憑證',
299
- },
300
- didConnect: {
301
- description: '無密碼登入',
302
- },
303
- aigneCodeSmith: {
304
- description: '使用 AI 審查並優化你的程式碼',
305
- },
306
- aigneDocSmith: {
307
- description: '用 AI 生成和更新專案文件',
308
- },
309
- aigneWebSmith: {
310
- description: '構建並部署 AI 驅動的 Web 應用',
311
- },
312
- aigneImageSmith: {
313
- description: '使用 AI 生成和優化圖像',
314
- },
315
- aigneCLI: {
316
- description: '透過命令列開發 Agent',
317
- },
318
- aigneObservability: {
319
- description: '理解並分析 Agent 的行為',
320
- },
321
- aigneStudio: {
322
- description: '零程式碼構建 Agent',
323
- },
324
- aigneFramework: {
325
- description: 'Agent AI 的功能核心框架',
326
- },
327
- aigneHub: {
328
- description: '一套 API,連接所有模型',
329
- },
330
- },
331
- },
332
- ja: {
333
- groups: {
334
- applications: 'アプリケーション',
335
- components: 'コンポーネント',
336
- computeStorage: 'コンピューティング/ストレージ',
337
- identity: 'アイデンティティ',
338
- frameworkTools: 'フレームワークとツール',
339
- modelsAdapters: 'モデルアダプター',
340
- },
341
- products: {
342
- nftStudio: {
343
- description: 'NFTの作成と管理',
344
- },
345
- creatorStudio: {
346
- description: 'オールインワンクリエイターツール',
347
- },
348
- aigne: {
349
- description: 'AIアプリのためのエージェントエコシステム',
350
- },
351
- arcsphere: {
352
- description: 'AIネイティブブラウザ',
353
- },
354
- aistro: {
355
- description: 'AI駆動占星術',
356
- },
357
- blockletLauncher: {
358
- description: 'ワンクリックアプリ起動',
359
- },
360
- aiKit: {
361
- description: 'AIでアプリを強化',
362
- },
363
- paymentKit: {
364
- description: '簡単な暗号通貨とカード決済',
365
- },
366
- blockletStore: {
367
- description: 'アプリの発見とデプロイ',
368
- },
369
- web3Kit: {
370
- description: 'Web3開発ツールキット',
371
- },
372
- blockletFramework: {
373
- description: 'Blockletの構築と実行',
374
- },
375
- didSpaces: {
376
- description: '安全な個人ストレージ',
377
- },
378
- abtNetwork: {
379
- description: '高速ブロックチェーンネットワーク',
380
- },
381
- blockletServer: {
382
- description: 'アプリの簡単なホスティング',
383
- },
384
- ocap: {
385
- description: 'マルチチェーンコネクター',
386
- },
387
- did: {
388
- description: '自己主権ID',
389
- },
390
- didWallet: {
391
- description: 'スマートデジタルウォレット',
392
- },
393
- didNameService: {
394
- description: 'Web3ドメイン名',
395
- },
396
- vc: {
397
- description: '検証可能な認証情報',
398
- },
399
- didConnect: {
400
- description: 'パスワード不要ログイン',
401
- },
402
- aigneCodeSmith: {
403
- description: 'AIでコードをレビューし改善',
404
- },
405
- aigneDocSmith: {
406
- description: 'AIでドキュメントを生成・更新',
407
- },
408
- aigneWebSmith: {
409
- description: 'AI駆動Webアプリの構築とデプロイ',
410
- },
411
- aigneImageSmith: {
412
- description: 'AIで画像を生成・最適化',
413
- },
414
- aigneCLI: {
415
- description: 'コマンドラインからエージェントを開発',
416
- },
417
- aigneObservability: {
418
- description: 'エージェントの動作を理解・分析',
419
- },
420
- aigneStudio: {
421
- description: 'コード不要でエージェントを視覚的に作成',
422
- },
423
- aigneFramework: {
424
- description: 'エージェントAIの機能コアフレームワーク',
425
- },
426
- aigneHub: {
427
- description: '1つのAPIで全てのモデルに接続',
428
- },
429
- },
430
- },
431
- };
432
-
433
- const Wrapper = styled(Box)`
434
- padding: 8px;
435
- background: ${({ theme }) => theme.palette.grey[100]};
436
- border-radius: 8px;
437
-
438
- &.is-inline {
439
- width: 100%;
440
- max-width: 100%;
441
- border-radius: 0;
442
- .nav-menu-sub-item-group {
443
- padding: 8px 16px;
444
- border-radius: 0;
445
- }
446
- }
447
-
448
- .nav-menu-sub-item-group + .nav-menu-sub-item-group {
449
- margin-top: 8px;
450
- }
451
- .MuiGrid-container + .MuiGrid-container {
452
- margin-top: 0px;
453
- }
454
- `;
455
-
456
- const GridBox = styled(Box, { shouldForwardProp: (prop) => prop !== 'maxContent' })<{ maxContent: number }>(
457
- ({ theme, maxContent }) => ({
458
- display: 'grid',
459
- gap: theme.spacing(1),
460
- gridTemplateColumns: `repeat(1, ${maxContent}px)`,
461
-
462
- [theme.breakpoints.up('md')]: {
463
- gridTemplateColumns: `repeat(2, ${maxContent}px)`,
464
- },
465
-
466
- [theme.breakpoints.up('lg')]: {
467
- gridTemplateColumns: `repeat(3, ${maxContent}px)`,
468
- },
469
- })
470
- );
471
-
472
- interface IconWrapperProps {
473
- color?: string;
474
- backgroundColor?: string;
475
- children: React.ReactNode;
476
- }
477
- function IconWrapper({ color = 'black', backgroundColor = 'transparent', children }: IconWrapperProps) {
478
- return (
479
- <Box
480
- component="span"
481
- sx={{
482
- display: 'inline-flex',
483
- alignItems: 'center',
484
- justifyContent: 'center',
485
- color,
486
- backgroundColor,
487
- borderRadius: '4px',
488
- }}>
489
- {children}
490
- </Box>
491
- );
492
- }
493
-
494
- function DIDIcon({ color = 'black', backgroundColor = 'transparent' }: { color?: string; backgroundColor?: string }) {
495
- return (
496
- <IconWrapper color={color} backgroundColor={backgroundColor}>
497
- <DidSvg style={{ width: '100%' }} />
498
- </IconWrapper>
499
- );
500
- }
501
-
502
- function AigneIcon({ color = 'black', backgroundColor = 'transparent' }: { color?: string; backgroundColor?: string }) {
503
- return (
504
- <IconWrapper color={color} backgroundColor={backgroundColor}>
505
- <AigneSvg style={{ width: '100%', height: '100%' }} />
506
- </IconWrapper>
507
- );
508
- }
509
-
510
- const isExternal = (to: string = '') => {
511
- return to.startsWith('http:') || to.startsWith('https:');
512
- };
513
-
514
- const isSameOrigin = (to: string) => {
515
- try {
516
- const url = new URL(to);
517
- return url.origin === window.location.origin;
518
- } catch {
519
- return false;
520
- }
521
- };
522
-
523
- // 智能 Link 组件,根据 URL origin 决定是否在新标签页打开
524
- interface SmartLinkProps extends LinkProps {
525
- to: string;
526
- children: React.ReactNode;
527
- className?: string;
528
- }
529
- function SmartLink({ to, children, className = '', ...restProps }: SmartLinkProps) {
530
- if (isExternal(to)) {
531
- const target = isSameOrigin(to) ? '_self' : '_blank';
532
- return (
533
- <a href={getUTMUrl(to, 'header')} target={target} rel="noreferrer noopener" className={className} {...restProps}>
534
- {children}
535
- </a>
536
- );
537
- }
538
-
539
- return (
540
- <Link to={to} className={className} {...restProps}>
541
- {children}
542
- </Link>
543
- );
544
- }
545
-
546
- export type ProductsType = 'AIGNE' | 'ARCBLOCK';
547
- export interface ProductsProps extends BoxProps {
548
- type: ProductsType;
549
- }
550
- export default function Products({ className = '', type, ...rest }: ProductsProps) {
551
- const { mode } = useNavMenuContext();
552
- const theme = useTheme();
553
- const { locale = 'en' } = useLocaleContext() || {};
554
- const wrapperRef = useRef<HTMLDivElement>(null);
555
-
556
- const { palette } = theme;
557
- const t = useMemoizedFn((key, data = {}) => translate(translations, key, locale, 'en', data));
558
-
559
- // 添加状态来存储最大内容宽度
560
- const [maxContentWidth, setMaxContentWidth] = useState(MIN_ITEM_CONTENT_WIDTH);
561
-
562
- // 计算 item 最大宽度
563
- const calculateMaxContentWidth = useMemoizedFn(() => {
564
- if (!wrapperRef.current) return;
565
-
566
- const contentElements = wrapperRef.current.querySelectorAll('.navmenu-item__content');
567
- let maxWidth = MIN_ITEM_CONTENT_WIDTH; // 默认最小宽度
568
-
569
- contentElements.forEach((element) => {
570
- const curWidth = element.getBoundingClientRect().width + 64; // 增加 icon 以及 padding 的宽度
571
- if (curWidth > maxWidth) {
572
- maxWidth = curWidth;
573
- }
574
- });
575
-
576
- setMaxContentWidth(maxWidth);
577
- });
578
-
579
- // 监听主题、语言、类型变化时重新计算最大宽度
580
- useEffect(() => {
581
- calculateMaxContentWidth();
582
- }, [theme, locale, type, calculateMaxContentWidth]);
583
-
584
- // 监听 navmenu-item__content 元素宽度变化
585
- useEffect(() => {
586
- if (!wrapperRef.current) return;
587
-
588
- const itemContent = wrapperRef.current.querySelector('.navmenu-item__content');
589
- if (!itemContent) return;
590
-
591
- const resizeObserver = new ResizeObserver(() => {
592
- calculateMaxContentWidth();
593
- });
594
-
595
- // 监听 item 内容宽度变化(字体改变引起)
596
- resizeObserver.observe(itemContent);
597
-
598
- // eslint-disable-next-line consistent-return
599
- return () => {
600
- resizeObserver.disconnect();
601
- };
602
- }, [calculateMaxContentWidth]);
603
-
604
- const groups = useCreation(() => {
605
- if (type === 'ARCBLOCK') {
606
- return [
607
- {
608
- type: 'Group',
609
- label: t('groups.applications'),
610
- children: [
611
- {
612
- label: <SmartLink to={`https://www.nftstudio.rocks/${locale}`}>NFT Studio</SmartLink>,
613
- description: t('products.nftStudio.description'),
614
- icon: <NftStudioSvg />,
615
- },
616
- {
617
- label: (
618
- <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/creator-studio`}>
619
- Creator Studio
620
- </SmartLink>
621
- ),
622
- description: t('products.creatorStudio.description'),
623
- icon: <CreatorStudioSvg />,
624
- },
625
- {
626
- label: <SmartLink to="https://www.aigne.io/">AIGNE</SmartLink>,
627
- description: t('products.aigne.description'),
628
- icon: <AigneIcon color={palette.mode === 'dark' ? 'white' : 'black'} />,
629
- },
630
- {
631
- label: <SmartLink to={`https://www.arcsphere.io/${locale}`}>ArcSphere</SmartLink>,
632
- description: t('products.arcsphere.description'),
633
- icon: <ArcSphereSvg />,
634
- },
635
- ],
636
- },
637
- {
638
- type: 'Group',
639
- label: t('groups.components'),
640
- children: [
641
- {
642
- label: <SmartLink to={`https://launcher.arcblock.io/${locale}`}>Blocklet Launcher</SmartLink>,
643
- description: t('products.blockletLauncher.description'),
644
- icon: <BlockletLauncherSvg />,
645
- },
646
- {
647
- label: <SmartLink to={`https://www.blocklet.io/${locale}/payment-kit`}>Payment Kit</SmartLink>,
648
- description: t('products.paymentKit.description'),
649
- icon: <img src={PaymentKitPng} alt="Payment Kit" />,
650
- },
651
- {
652
- label: <SmartLink to={`https://store.blocklet.dev/?locale=${locale}`}>Blocklet Store</SmartLink>,
653
- description: t('products.blockletStore.description'),
654
- icon: <BlockletStoreSvg />,
655
- },
656
- {
657
- label: <SmartLink to={`https://www.web3kit.rocks/${locale}`}>Web3 Kit</SmartLink>,
658
- description: t('products.web3Kit.description'),
659
- icon: <Web3KitSvg />,
660
- },
661
- ],
662
- },
663
- {
664
- type: 'Group',
665
- label: t('groups.computeStorage'),
666
- children: [
667
- {
668
- label: (
669
- <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/blocklet`}>
670
- Blocklet Framework
671
- </SmartLink>
672
- ),
673
- description: t('products.blockletFramework.description'),
674
- icon: <BlockletFrameworkSvg />,
675
- },
676
- {
677
- label: <SmartLink to={`https://www.didspaces.com/${locale}`}>DID Spaces</SmartLink>,
678
- description: t('products.didSpaces.description'),
679
- icon: <DIDIcon color="#876bf4" />,
680
- },
681
- {
682
- label: <SmartLink to="https://main.abtnetwork.io/">ABT Network</SmartLink>,
683
- description: t('products.abtNetwork.description'),
684
- icon: <AbtNetworkSvg />,
685
- },
686
- {
687
- label: <SmartLink to={`https://www.blocklet.io/${locale}/blocklet-server`}>Blocklet Server</SmartLink>,
688
- description: t('products.blockletServer.description'),
689
- icon: <BlockletServerSvg />,
690
- },
691
- {
692
- label: <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/ocap`}>ОСАР</SmartLink>,
693
- description: t('products.ocap.description'),
694
- icon: <OCAPSvg />,
695
- },
696
- ],
697
- },
698
- {
699
- type: 'Group',
700
- label: t('groups.identity'),
701
- children: [
702
- {
703
- label: <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/did`}>DID</SmartLink>,
704
- description: t('products.did.description'),
705
- icon: <DIDIcon color="#5b96f3" />,
706
- },
707
- {
708
- label: <SmartLink to={`https://www.didwallet.io/${locale}`}>DID Wallet</SmartLink>,
709
- description: t('products.didWallet.description'),
710
- icon: <DidWalletSvg />,
711
- },
712
- {
713
- label: <SmartLink to={`https://www.didnames.io/${locale}`}>DID Names</SmartLink>,
714
- description: t('products.didNameService.description'),
715
- icon: <DIDIcon color="#678ab0" />,
716
- },
717
- {
718
- label: (
719
- <SmartLink to={`https://www.arcblock.io/content/collections/${locale}/verifiable-credential`}>
720
- VC
721
- </SmartLink>
722
- ),
723
- description: t('products.vc.description'),
724
- icon: <VCSvg />,
725
- },
726
- {
727
- label: <SmartLink to={`https://www.didconnect.io/${locale}`}>DID Connect</SmartLink>,
728
- description: t('products.didConnect.description'),
729
- icon: <DIDIcon color="#5bbec5" />,
730
- },
731
- ],
732
- },
733
- ];
734
- }
735
-
736
- if (type === 'AIGNE') {
737
- return [
738
- {
739
- type: 'Group',
740
- label: t('groups.applications'),
741
- children: [
742
- {
743
- label: <SmartLink to={`https://www.arcsphere.io/${locale}`}>ArcSphere</SmartLink>,
744
- description: t('products.arcsphere.description'),
745
- icon: <ArcSphereSvg />,
746
- },
747
- {
748
- label: <SmartLink to={`https://www.aistro.io/${locale}`}>Aistro</SmartLink>,
749
- description: t('products.aistro.description'),
750
- icon: <img src={AistroPng} alt="Aistro" />,
751
- },
752
- {
753
- label: <SmartLink to="https://www.aigne.io/code-smith">AIGNE CodeSmith</SmartLink>,
754
- description: t('products.aigneCodeSmith.description'),
755
- icon: <AigneIcon color="#3E5DF7" backgroundColor="#e9f0ff" />,
756
- },
757
- {
758
- label: <SmartLink to="https://www.aigne.io/doc-smith">AIGNE DocSmith</SmartLink>,
759
- description: t('products.aigneDocSmith.description'),
760
- icon: <AigneIcon color="#02A996" backgroundColor="#e6f7f5" />,
761
- },
762
- {
763
- label: <SmartLink to="https://www.aigne.io/web-smith">AIGNE WebSmith</SmartLink>,
764
- description: t('products.aigneWebSmith.description'),
765
- icon: <AigneIcon color="#7c45eb" backgroundColor="#f0e9ff" />,
766
- },
767
- {
768
- label: <SmartLink to="https://imagesmith.aigne.io/">AIGNE ImageSmith</SmartLink>,
769
- description: t('products.aigneImageSmith.description'),
770
- icon: <AigneImageSmithSvg />,
771
- },
772
- ],
773
- },
774
- {
775
- type: 'Group',
776
- label: t('groups.frameworkTools'),
777
- children: [
778
- {
779
- label: <SmartLink to="https://www.aigne.io/cli">AIGNE CLI</SmartLink>,
780
- description: t('products.aigneCLI.description'),
781
- icon: <AigneIcon color="#d05d4e" backgroundColor="#faeaea" />,
782
- },
783
- {
784
- label: <SmartLink to="https://www.aigne.io/observability">AIGNE Observability</SmartLink>,
785
- description: t('products.aigneObservability.description'),
786
- icon: <AigneIcon color="#6ba456" backgroundColor="#edfae8" />,
787
- },
788
- {
789
- label: <SmartLink to="https://www.aigne.io/studio">AIGNE Studio</SmartLink>,
790
- description: t('products.aigneStudio.description'),
791
- icon: <AigneIcon color="#676cbf" backgroundColor="#edeeff" />,
792
- },
793
- {
794
- label: <SmartLink to="https://www.aigne.io/framework">AIGNE Framework</SmartLink>,
795
- description: t('products.aigneFramework.description'),
796
- icon: <AigneIcon color="#5086d0" backgroundColor="#eef4ff" />,
797
- },
798
- ],
799
- },
800
- {
801
- type: 'Group',
802
- label: t('groups.modelsAdapters'),
803
- children: [
804
- {
805
- label: <SmartLink to="https://www.aigne.io/hub">AIGNE Hub</SmartLink>,
806
- description: t('products.aigneHub.description'),
807
- icon: <AigneIcon color="#e4930b" backgroundColor="#fbf4d4" />,
808
- },
809
- ],
810
- },
811
- ];
812
- }
813
-
814
- return [];
815
- }, [t, locale, palette]);
816
-
817
- return (
818
- <Wrapper ref={wrapperRef} className={`nav-menu-products is-${mode} ${className}`} {...rest}>
819
- {groups.map((group) => (
820
- <SubItemGroup key={group.label} label={group.label}>
821
- <GridBox maxContent={maxContentWidth}>
822
- {group.children.map((item) => (
823
- <Item variant="panel" style={{ padding: '8px' }} {...item} />
824
- ))}
825
- </GridBox>
826
- </SubItemGroup>
827
- ))}
828
- </Wrapper>
829
- );
830
- }