@arcblock/ux 3.4.14 → 3.5.0

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 (335) hide show
  1. package/lib/Util/constant.d.ts +6 -0
  2. package/lib/Util/constant.js +25 -16
  3. package/lib/package.json.js +1 -1
  4. package/package.json +12 -9
  5. package/src/ActionButton/ActionButton.stories.jsx +0 -61
  6. package/src/ActionButton/index.jsx +0 -106
  7. package/src/ActivityIndicator/ActivityIndicator.stories.jsx +0 -9
  8. package/src/ActivityIndicator/index.jsx +0 -140
  9. package/src/Address/Address.stories.jsx +0 -38
  10. package/src/Address/compact-text.jsx +0 -76
  11. package/src/Address/did-address.tsx +0 -223
  12. package/src/Address/index.tsx +0 -21
  13. package/src/Address/responsive-did-address.tsx +0 -154
  14. package/src/Alert/Alert.stories.jsx +0 -100
  15. package/src/Alert/index.jsx +0 -130
  16. package/src/AnimationWaiter/AnimationWaiter.stories.jsx +0 -35
  17. package/src/AnimationWaiter/dark-animation.json +0 -1
  18. package/src/AnimationWaiter/default-animation.json +0 -1
  19. package/src/AnimationWaiter/index.jsx +0 -296
  20. package/src/Async/index.tsx +0 -44
  21. package/src/Avatar/Avatar.stories.jsx +0 -11
  22. package/src/Avatar/did-motif.jsx +0 -38
  23. package/src/Avatar/etherscan-blockies.js +0 -81
  24. package/src/Avatar/index.jsx +0 -195
  25. package/src/Badge/Badge.stories.jsx +0 -41
  26. package/src/Badge/index.jsx +0 -101
  27. package/src/Blocklet/Blocklet.stories.jsx +0 -21
  28. package/src/Blocklet/blocklet.jsx +0 -276
  29. package/src/Blocklet/index.js +0 -5
  30. package/src/Blocklet/utils.jsx +0 -58
  31. package/src/BlockletContext/index.tsx +0 -72
  32. package/src/BlockletNFT/BlockletNFT.stories.jsx +0 -21
  33. package/src/BlockletNFT/index.jsx +0 -378
  34. package/src/BlockletV2/Blocklet.stories.jsx +0 -34
  35. package/src/BlockletV2/blocklet.tsx +0 -247
  36. package/src/BlockletV2/components/icon-text.tsx +0 -47
  37. package/src/BlockletV2/components/tooltip-icon.tsx +0 -52
  38. package/src/BlockletV2/index.ts +0 -6
  39. package/src/BlockletV2/utils.js +0 -75
  40. package/src/Button/Button.stories.jsx +0 -24
  41. package/src/Button/index.js +0 -9
  42. package/src/Button/wrap.jsx +0 -126
  43. package/src/ButtonGroup/index.js +0 -16
  44. package/src/CardSelector/index.tsx +0 -136
  45. package/src/Center/Center.stories.jsx +0 -20
  46. package/src/Center/index.tsx +0 -33
  47. package/src/ClickToCopy/ClickToCopy.stories.jsx +0 -24
  48. package/src/ClickToCopy/copy-button.tsx +0 -43
  49. package/src/ClickToCopy/hook.ts +0 -42
  50. package/src/ClickToCopy/index.tsx +0 -96
  51. package/src/CloseButton/index.tsx +0 -37
  52. package/src/CodeBlock/CodeBlock.stories.jsx +0 -22
  53. package/src/CodeBlock/LightBox.tsx +0 -87
  54. package/src/CodeBlock/index.tsx +0 -217
  55. package/src/Colors/Colors.stories.jsx +0 -211
  56. package/src/Colors/index.ts +0 -4
  57. package/src/Colors/themes/default.ts +0 -8
  58. package/src/Colors/themes/did-connect.ts +0 -64
  59. package/src/Colors/themes/temp.ts +0 -52
  60. package/src/Config/Config.stories.jsx +0 -16
  61. package/src/Config/config-provider.tsx +0 -62
  62. package/src/Config/index.ts +0 -2
  63. package/src/Config/theme-mode-toggle.tsx +0 -38
  64. package/src/ContactForm/ContactForm.stories.jsx +0 -32
  65. package/src/ContactForm/index.tsx +0 -264
  66. package/src/CookieConsent/CookieConsent.stories.jsx +0 -33
  67. package/src/CookieConsent/index.tsx +0 -104
  68. package/src/CountDown/CountDown.stories.jsx +0 -15
  69. package/src/CountDown/index.tsx +0 -170
  70. package/src/DID/DID.stories.jsx +0 -37
  71. package/src/DID/index.tsx +0 -393
  72. package/src/DIDConnect/app-icon.tsx +0 -37
  73. package/src/DIDConnect/app-info-item.tsx +0 -93
  74. package/src/DIDConnect/auth-apps/auth-apps-info.tsx +0 -77
  75. package/src/DIDConnect/auth-apps/index.tsx +0 -278
  76. package/src/DIDConnect/auth-apps/switch-role.tsx +0 -47
  77. package/src/DIDConnect/did-connect-container.tsx +0 -326
  78. package/src/DIDConnect/did-connect-footer.tsx +0 -76
  79. package/src/DIDConnect/did-connect-logo.tsx +0 -8
  80. package/src/DIDConnect/icons/did-wallet-logo.tsx +0 -18
  81. package/src/DIDConnect/icons/github-logo.tsx +0 -17
  82. package/src/DIDConnect/index.ts +0 -11
  83. package/src/DIDConnect/landing-page.tsx +0 -218
  84. package/src/DIDConnect/powered-by.tsx +0 -48
  85. package/src/DIDConnect/provider-icon.tsx +0 -62
  86. package/src/DIDConnect/request-storage-access-api-dialog.tsx +0 -304
  87. package/src/DIDConnect/with-container.tsx +0 -323
  88. package/src/DIDConnect/with-ux-theme.tsx +0 -22
  89. package/src/DIDLogo/Logo.stories.jsx +0 -11
  90. package/src/DIDLogo/index.tsx +0 -168
  91. package/src/Datatable/CustomToolbar.jsx +0 -415
  92. package/src/Datatable/Datatable.stories.jsx +0 -92
  93. package/src/Datatable/DatatableContext.jsx +0 -35
  94. package/src/Datatable/TableSearch.jsx +0 -166
  95. package/src/Datatable/index.jsx +0 -652
  96. package/src/Datatable/utils.js +0 -161
  97. package/src/Dialog/Dialog.stories.jsx +0 -21
  98. package/src/Dialog/confirm.jsx +0 -143
  99. package/src/Dialog/dialog.jsx +0 -199
  100. package/src/Dialog/index.js +0 -4
  101. package/src/Dialog/types.d.ts +0 -20
  102. package/src/Dialog/use-confirm.jsx +0 -188
  103. package/src/DriftBot/index.tsx +0 -81
  104. package/src/Earth/Earth.stories.jsx +0 -39
  105. package/src/Earth/countries.json +0 -8057
  106. package/src/Earth/index.tsx +0 -515
  107. package/src/Earth/util.ts +0 -72
  108. package/src/Empty/Empty.stories.jsx +0 -23
  109. package/src/Empty/index.jsx +0 -48
  110. package/src/ErrorBoundary/ErrorBoundary.stories.jsx +0 -13
  111. package/src/ErrorBoundary/fallback.tsx +0 -85
  112. package/src/ErrorBoundary/index.ts +0 -1
  113. package/src/Footer/Footer.stories.jsx +0 -13
  114. package/src/Footer/index.tsx +0 -130
  115. package/src/Header/Header.stories.jsx +0 -30
  116. package/src/Header/addon-button.tsx +0 -41
  117. package/src/Header/auto-hidden.tsx +0 -31
  118. package/src/Header/header-addons.tsx +0 -37
  119. package/src/Header/header.tsx +0 -214
  120. package/src/Header/index.ts +0 -3
  121. package/src/Header/responsive-header.tsx +0 -145
  122. package/src/Icon/Icon.stories.jsx +0 -45
  123. package/src/Icon/image.tsx +0 -53
  124. package/src/Icon/index.tsx +0 -63
  125. package/src/Img/Img.stories.jsx +0 -17
  126. package/src/Img/index.jsx +0 -258
  127. package/src/InfoRow/InfoRow.stories.jsx +0 -14
  128. package/src/InfoRow/index.tsx +0 -91
  129. package/src/Layout/Layout.stories.jsx +0 -24
  130. package/src/Layout/dashboard/external-link.tsx +0 -59
  131. package/src/Layout/dashboard/full-page.tsx +0 -58
  132. package/src/Layout/dashboard/index.tsx +0 -260
  133. package/src/Layout/dashboard/sidebar.tsx +0 -198
  134. package/src/Layout/dashboard-legacy/header.tsx +0 -156
  135. package/src/Layout/dashboard-legacy/index.tsx +0 -127
  136. package/src/Layout/dashboard-legacy/sidebar.tsx +0 -129
  137. package/src/Layout/index.tsx +0 -310
  138. package/src/LoadingMask/index.tsx +0 -108
  139. package/src/Locale/LocaleSelector.stories.jsx +0 -44
  140. package/src/Locale/browser-lang.ts +0 -65
  141. package/src/Locale/context.tsx +0 -162
  142. package/src/Locale/languages.ts +0 -58
  143. package/src/Locale/selector.tsx +0 -174
  144. package/src/Locale/util.ts +0 -38
  145. package/src/Logo/Logo.stories.jsx +0 -23
  146. package/src/Logo/images/logo-dark-text.svg +0 -3
  147. package/src/Logo/images/logo-dark-top.svg +0 -6
  148. package/src/Logo/images/logo-light-text.svg +0 -3
  149. package/src/Logo/images/logo-light-top.svg +0 -6
  150. package/src/Logo/index.tsx +0 -58
  151. package/src/Metric/Metric.stories.jsx +0 -29
  152. package/src/Metric/index.tsx +0 -130
  153. package/src/MuiWrap/index.tsx +0 -10
  154. package/src/NFTDisplay/NFTBroken.svg +0 -34
  155. package/src/NFTDisplay/NFTDisplay.stories.jsx +0 -30
  156. package/src/NFTDisplay/README.md +0 -59
  157. package/src/NFTDisplay/aspect-ratio-container.tsx +0 -36
  158. package/src/NFTDisplay/broken.tsx +0 -51
  159. package/src/NFTDisplay/displayApi.ts +0 -43
  160. package/src/NFTDisplay/index.tsx +0 -393
  161. package/src/NFTDisplay/loading.tsx +0 -16
  162. package/src/NFTDisplay/preview.tsx +0 -84
  163. package/src/NFTDisplay/render-svg.tsx +0 -21
  164. package/src/NFTDisplay/svg-embedder/img.tsx +0 -27
  165. package/src/NFTDisplay/svg-embedder/inline-svg.tsx +0 -36
  166. package/src/NavMenu/NavMenu.stories.jsx +0 -17
  167. package/src/NavMenu/images/OCAP.svg +0 -1
  168. package/src/NavMenu/images/abt-network.svg +0 -1
  169. package/src/NavMenu/images/ai-kit.svg +0 -1
  170. package/src/NavMenu/images/aigne-image-smith.svg +0 -1
  171. package/src/NavMenu/images/aigne.svg +0 -1
  172. package/src/NavMenu/images/aistro.png +0 -0
  173. package/src/NavMenu/images/arcsphere.svg +0 -1
  174. package/src/NavMenu/images/blocklet-framework.svg +0 -1
  175. package/src/NavMenu/images/blocklet-launcher.svg +0 -1
  176. package/src/NavMenu/images/blocklet-server.svg +0 -1
  177. package/src/NavMenu/images/blocklet-store.svg +0 -1
  178. package/src/NavMenu/images/creator-studio.svg +0 -1
  179. package/src/NavMenu/images/did-wallet.svg +0 -1
  180. package/src/NavMenu/images/did.svg +0 -1
  181. package/src/NavMenu/images/nft-studio.svg +0 -1
  182. package/src/NavMenu/images/payment-kit.png +0 -0
  183. package/src/NavMenu/images/vc.svg +0 -1
  184. package/src/NavMenu/images/web3-kit.svg +0 -1
  185. package/src/NavMenu/index.ts +0 -3
  186. package/src/NavMenu/nav-menu-context.tsx +0 -30
  187. package/src/NavMenu/nav-menu.tsx +0 -441
  188. package/src/NavMenu/products.tsx +0 -830
  189. package/src/NavMenu/style.ts +0 -258
  190. package/src/NavMenu/sub-container.tsx +0 -125
  191. package/src/NavMenu/sub-item-group.tsx +0 -42
  192. package/src/OrgTransfer/index.tsx +0 -53
  193. package/src/OrgTransfer/locales.ts +0 -25
  194. package/src/OrgTransfer/selector.tsx +0 -252
  195. package/src/OrgTransfer/type.ts +0 -31
  196. package/src/PageScroller/index.tsx +0 -316
  197. package/src/PageScroller/story/FifthComponent.jsx +0 -7
  198. package/src/PageScroller/story/FirstComponent.jsx +0 -7
  199. package/src/PageScroller/story/FourthComponent.jsx +0 -7
  200. package/src/PageScroller/story/FullPage.jsx +0 -55
  201. package/src/PageScroller/story/PageContain.jsx +0 -59
  202. package/src/PageScroller/story/PageScroller.stories.jsx +0 -18
  203. package/src/PageScroller/story/SecondComponent.jsx +0 -7
  204. package/src/PageScroller/story/ThirdComponent.jsx +0 -7
  205. package/src/PageScroller/story/index.css +0 -115
  206. package/src/PageScroller/usePrevValue.ts +0 -11
  207. package/src/Passport/index.ts +0 -3
  208. package/src/Passport/passport.tsx +0 -118
  209. package/src/PhoneInput/PhoneInput.stories.jsx +0 -12
  210. package/src/PhoneInput/country-select.tsx +0 -148
  211. package/src/PhoneInput/index.tsx +0 -269
  212. package/src/PoweredByArcBlock/index.tsx +0 -27
  213. package/src/PricingTable/PricingPlan.tsx +0 -120
  214. package/src/PricingTable/PricingTable.stories.jsx +0 -38
  215. package/src/PricingTable/index.tsx +0 -59
  216. package/src/QRCode/QRCode.stories.jsx +0 -13
  217. package/src/QRCode/index.tsx +0 -66
  218. package/src/RelativeTime/RelativeTime.stories.jsx +0 -20
  219. package/src/RelativeTime/index.tsx +0 -334
  220. package/src/Result/Result.stories.jsx +0 -61
  221. package/src/Result/common.tsx +0 -119
  222. package/src/Result/index.tsx +0 -30
  223. package/src/Result/result.tsx +0 -65
  224. package/src/Result/translations.ts +0 -57
  225. package/src/Screenshot/BaseScreenshot/index.tsx +0 -73
  226. package/src/Screenshot/BaseScreenshot/shells/Macbook.tsx +0 -38
  227. package/src/Screenshot/BaseScreenshot/shells/Phone.tsx +0 -35
  228. package/src/Screenshot/Screenshot.stories.jsx +0 -44
  229. package/src/Screenshot/devices.css +0 -1366
  230. package/src/Screenshot/index.tsx +0 -300
  231. package/src/SessionBlocklet/index.tsx +0 -178
  232. package/src/SessionManager/SessionManager.stories.jsx +0 -9
  233. package/src/SessionManager/index.tsx +0 -3
  234. package/src/SessionPermission/index.tsx +0 -26
  235. package/src/SessionUser/components/did-space.tsx +0 -68
  236. package/src/SessionUser/components/logged-in.tsx +0 -338
  237. package/src/SessionUser/components/quick-login-item.tsx +0 -132
  238. package/src/SessionUser/components/session-user-item.tsx +0 -93
  239. package/src/SessionUser/components/session-user-switch.tsx +0 -240
  240. package/src/SessionUser/components/un-login.tsx +0 -257
  241. package/src/SessionUser/components/user-info.tsx +0 -201
  242. package/src/SessionUser/index.tsx +0 -68
  243. package/src/SessionUser/libs/translation.ts +0 -30
  244. package/src/SessionUser/libs/utils.ts +0 -39
  245. package/src/SharedBridge/index.tsx +0 -126
  246. package/src/SocialShare/index.tsx +0 -194
  247. package/src/Sparkline/Sparkline.stories.jsx +0 -13
  248. package/src/Sparkline/index.tsx +0 -231
  249. package/src/Spinner/Spinner.stories.jsx +0 -98
  250. package/src/Spinner/index.tsx +0 -20
  251. package/src/SplitButton/SplitButton.stories.jsx +0 -32
  252. package/src/SplitButton/index.tsx +0 -116
  253. package/src/SplitButton/useClickAway.tsx +0 -24
  254. package/src/Success/index.tsx +0 -175
  255. package/src/Switch/Switch.stories.jsx +0 -16
  256. package/src/Switch/index.jsx +0 -79
  257. package/src/Tabs/Tabs.stories.jsx +0 -18
  258. package/src/Tabs/index.tsx +0 -255
  259. package/src/Tag/Tag.stories.jsx +0 -15
  260. package/src/Tag/index.jsx +0 -106
  261. package/src/TextCollapse/TextCollapse.stories.jsx +0 -73
  262. package/src/TextCollapse/index.tsx +0 -85
  263. package/src/Theme/Theme.stories.jsx +0 -11
  264. package/src/Theme/index.ts +0 -21
  265. package/src/Theme/theme-provider.tsx +0 -374
  266. package/src/Theme/theme.ts +0 -229
  267. package/src/Toast/Toast.stories.jsx +0 -28
  268. package/src/Toast/index.tsx +0 -80
  269. package/src/Typography/index.tsx +0 -124
  270. package/src/UserCard/Cards/avatar-only.tsx +0 -27
  271. package/src/UserCard/Cards/basic-info.tsx +0 -43
  272. package/src/UserCard/Cards/index.tsx +0 -16
  273. package/src/UserCard/Cards/social-actions.tsx +0 -196
  274. package/src/UserCard/Container/card.tsx +0 -63
  275. package/src/UserCard/Container/dialog.tsx +0 -37
  276. package/src/UserCard/Content/basic.tsx +0 -330
  277. package/src/UserCard/Content/clock.tsx +0 -82
  278. package/src/UserCard/Content/minimal.tsx +0 -113
  279. package/src/UserCard/Content/shorten-label.tsx +0 -32
  280. package/src/UserCard/Content/tooltip-avatar.tsx +0 -80
  281. package/src/UserCard/UserCard.stories.jsx +0 -19
  282. package/src/UserCard/components.tsx +0 -81
  283. package/src/UserCard/index.tsx +0 -132
  284. package/src/UserCard/types.ts +0 -165
  285. package/src/UserCard/use-follow.tsx +0 -111
  286. package/src/UserCard/utils.ts +0 -155
  287. package/src/Util/WebWalletOpener.stories.jsx +0 -5
  288. package/src/Util/client.ts +0 -4
  289. package/src/Util/constant.ts +0 -60
  290. package/src/Util/deprecate.tsx +0 -29
  291. package/src/Util/federated.ts +0 -125
  292. package/src/Util/iframe.ts +0 -19
  293. package/src/Util/index.ts +0 -760
  294. package/src/Util/logger.ts +0 -44
  295. package/src/Util/passport.ts +0 -127
  296. package/src/Util/security.ts +0 -72
  297. package/src/Util/style.ts +0 -17
  298. package/src/Util/wallet.ts +0 -35
  299. package/src/VerificationCode/index.tsx +0 -83
  300. package/src/Video/Video.stories.jsx +0 -6
  301. package/src/Video/index.tsx +0 -70
  302. package/src/Wallet/Action.stories.jsx +0 -8
  303. package/src/Wallet/Action.tsx +0 -118
  304. package/src/Wallet/Download.stories.jsx +0 -9
  305. package/src/Wallet/Download.tsx +0 -157
  306. package/src/Wallet/Open.tsx +0 -47
  307. package/src/Wallet/OpenInWallet.stories.jsx +0 -5
  308. package/src/Wallet/images/abtwallet.png +0 -0
  309. package/src/Wallet/images/android_download.svg +0 -22
  310. package/src/Wallet/images/app-store.svg +0 -30
  311. package/src/Wallet/images/google-play.svg +0 -69
  312. package/src/WalletOSIcon/index.tsx +0 -47
  313. package/src/WebWalletSWKeeper/index.tsx +0 -117
  314. package/src/WechatPrompt/images/android.png +0 -0
  315. package/src/WechatPrompt/images/ios.png +0 -0
  316. package/src/WechatPrompt/index.tsx +0 -75
  317. package/src/global.d.ts +0 -28
  318. package/src/hooks/use-blocklet-logo.tsx +0 -32
  319. package/src/hooks/use-clock.tsx +0 -62
  320. package/src/hooks/use-location-state.tsx +0 -117
  321. package/src/hooks/use-mobile.tsx +0 -6
  322. package/src/index.ts +0 -79
  323. package/src/type.d.ts +0 -44
  324. package/src/withTheme/index.tsx +0 -72
  325. package/src/withTracker/README.md +0 -37
  326. package/src/withTracker/action/bind-wallet.tsx +0 -17
  327. package/src/withTracker/action/login.tsx +0 -18
  328. package/src/withTracker/action/pay.tsx +0 -14
  329. package/src/withTracker/action/switch-passport.tsx +0 -20
  330. package/src/withTracker/constant/index.tsx +0 -3
  331. package/src/withTracker/env.tsx +0 -1
  332. package/src/withTracker/error_boundary.jsx +0 -34
  333. package/src/withTracker/index.tsx +0 -50
  334. package/src/withTracker/libs/utm.ts +0 -46
  335. 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
- }