@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,170 +0,0 @@
1
- import { Component } from 'react';
2
- import { type SxProps } from '@mui/material';
3
- import isUndefined from 'lodash/isUndefined';
4
-
5
- import { getColor, mergeProps } from '../Util';
6
- import { styled } from '../Theme';
7
-
8
- const SECONDS_OF_MINUTE = 60;
9
- const SECONDS_OF_HOUR = 60 * SECONDS_OF_MINUTE;
10
- const SECONDS_OF_DAY = 24 * SECONDS_OF_HOUR;
11
-
12
- function getRemaining(endTime: number) {
13
- const now = new Date().getTime();
14
- const diff = Math.round((endTime - now) / 1000);
15
- const days = Math.floor(diff / SECONDS_OF_DAY);
16
- const hours = Math.floor((diff % SECONDS_OF_DAY) / SECONDS_OF_HOUR);
17
- const minutes = Math.floor(((diff % SECONDS_OF_DAY) % SECONDS_OF_HOUR) / SECONDS_OF_MINUTE);
18
- const seconds = Math.round(((diff % SECONDS_OF_DAY) % SECONDS_OF_HOUR) % SECONDS_OF_MINUTE);
19
- return { days, hours, minutes, seconds, done: diff <= 0 };
20
- }
21
-
22
- // eslint-disable-next-line react/prop-types
23
- function FixWidthNumber({ number, label, length = 2 }: { number: number; label: string; length?: number }) {
24
- let str = number.toString();
25
- while (str.length < length) {
26
- str = `0${str}`;
27
- }
28
-
29
- const numbers = str.split('');
30
- return (
31
- <span className="num-group">
32
- <span className="num-items">
33
- {numbers.map((x, i) => (
34
- // eslint-disable-next-line react/no-array-index-key
35
- <strong key={`num-${i}`} className="num-item">
36
- {x}
37
- </strong>
38
- ))}
39
- </span>
40
- <span className="num-label">{label}</span>
41
- </span>
42
- );
43
- }
44
-
45
- export interface CountDownProps extends React.HTMLAttributes<HTMLDivElement> {
46
- /** endTime should be UTC */
47
- endTime: number;
48
- // eslint-disable-next-line react/require-default-props
49
- dark?: true | false;
50
- // eslint-disable-next-line react/require-default-props
51
- sx?: SxProps;
52
- }
53
-
54
- export interface CountDownState {
55
- days: number;
56
- hours: number;
57
- minutes: number;
58
- seconds: number;
59
- done: boolean;
60
- }
61
-
62
- export default class CountDown extends Component<CountDownProps, CountDownState> {
63
- // eslint-disable-next-line react/static-property-placement
64
- static defaultProps: { dark: boolean; style: {} };
65
-
66
- timer?: NodeJS.Timeout;
67
-
68
- constructor(rawProps: CountDownProps) {
69
- const props = Object.assign({}, rawProps);
70
- if (isUndefined(props.dark)) {
71
- props.dark = true;
72
- }
73
- if (isUndefined(props.style)) {
74
- props.style = {};
75
- }
76
- super(props);
77
- const newProps = mergeProps(props, CountDown, ['dark', 'endTime', 'style']);
78
- this.state = getRemaining(newProps.endTime);
79
- this.timer = undefined;
80
- }
81
-
82
- componentDidMount() {
83
- this.timer = setInterval(() => {
84
- const remaining = getRemaining(this.props.endTime);
85
- if (remaining.done) {
86
- clearInterval(this.timer);
87
- this.timer = undefined;
88
- }
89
-
90
- this.setState(remaining);
91
- }, 1000);
92
- }
93
-
94
- componentWillUnmount() {
95
- if (this.timer) {
96
- clearInterval(this.timer);
97
- this.timer = undefined;
98
- }
99
- }
100
-
101
- render() {
102
- const { dark, endTime, ...rest } = this.props;
103
- const { days, hours, minutes, seconds } = this.state;
104
- return (
105
- <Container dark={dark!} {...rest}>
106
- <FixWidthNumber number={days} label="D" />
107
- <span className="num-sep">:</span>
108
- <FixWidthNumber number={hours} label="H" />
109
- <span className="num-sep">:</span>
110
- <FixWidthNumber number={minutes} label="M" />
111
- <span className="num-sep">:</span>
112
- <FixWidthNumber number={seconds} label="S" />
113
- </Container>
114
- );
115
- }
116
- }
117
-
118
- const textBackground = `linear-gradient(to bottom, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)),
119
- linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5) 77%, rgba(0, 0, 0, 0.5))`;
120
-
121
- const Container = styled('div', { shouldForwardProp: (prop) => prop !== 'dark' })<{ dark: boolean }>`
122
- color: ${(props) => getColor(props)};
123
- font-size: 50px;
124
- display: flex;
125
- flex-direction: row;
126
- justify-content: center;
127
- align-items: flex-start;
128
-
129
- .num-group {
130
- display: flex;
131
- flex-direction: column;
132
- justify-content: center;
133
- align-items: center;
134
- margin: 0 60px;
135
-
136
- @media (max-width: ${(props) => props.theme.breakpoints.values.md}px) {
137
- margin: 0 20px;
138
- }
139
- @media (max-width: ${(props) => props.theme.breakpoints.values.sm}px) {
140
- margin: 0;
141
- }
142
-
143
- .num-items {
144
- display: flex;
145
- flex-direction: row;
146
- }
147
-
148
- .num-item {
149
- display: inline-block;
150
- width: 40px;
151
- height: 60px;
152
- line-height: 60px;
153
- background-image: ${(props) => (props.dark ? textBackground : 'none')};
154
- text-align: center;
155
-
156
- &:first-of-type {
157
- margin-right: 10px;
158
- @media (max-width: ${(props) => props.theme.breakpoints.values.sm}px) {
159
- margin: 0;
160
- }
161
- }
162
- }
163
-
164
- .num-label {
165
- margin-top: 20px;
166
- font-size: 24px;
167
- color: ${(props) => getColor(props)};
168
- }
169
- }
170
- `;
@@ -1,37 +0,0 @@
1
- import { styled } from '../Theme';
2
-
3
- export { default as ActionTest } from './demo/action-test';
4
- export { default as WithDifferentSizes } from './demo/with-different-sizes';
5
- export { default as WithDifferentColors } from './demo/with-different-colors';
6
- export { default as WithChainId } from './demo/with-chainId';
7
- export { default as WithRoleType } from './demo/with-roleType';
8
- export { default as OnlyDialog } from './demo/only-dialog';
9
- export { default as WithFlexBox } from './demo/with-flex-box';
10
- export { default as InlineMode } from './demo/inline-mode';
11
- export { default as DIDWithPrefix } from './demo/did-with-prefix';
12
-
13
- export default {
14
- title: 'DID/DID',
15
- parameters: {},
16
- decorators: [
17
- (StoryFn) => (
18
- <ResizableContainer>
19
- <StoryFn />
20
- </ResizableContainer>
21
- ),
22
- ],
23
- };
24
-
25
- const ResizableContainer = styled('div')`
26
- width: 100%;
27
- max-width: 100%;
28
- padding: 16px;
29
- border: 1px solid #ddd;
30
- overflow: auto;
31
- background: #fff;
32
- resize: both;
33
-
34
- > * + * {
35
- margin-top: 16px;
36
- }
37
- `;
package/src/DID/index.tsx DELETED
@@ -1,393 +0,0 @@
1
- import { getDIDMotifInfo } from '@arcblock/did-motif';
2
- import { types } from '@ocap/mcrypto';
3
- import QRCode from 'qrcode.react';
4
- import { Icon } from '@iconify/react';
5
- import IconQrCode from '@iconify-icons/material-symbols/qr-code-rounded';
6
- import { Box, Dialog, DialogContent, ModalProps, Typography } from '@mui/material';
7
- import { useCreation, useMemoizedFn } from 'ahooks';
8
- import { useImperativeHandle, useRef, useState } from 'react';
9
- import { toAddress } from '@arcblock/did';
10
- import noop from 'lodash/noop';
11
-
12
- import Address, { IDidAddressWrapper } from '../Address';
13
- import Avatar from '../Avatar';
14
- import { DID_PREFIX } from '../Util/constant';
15
-
16
- import { HTMLDidAddressElement } from '../Address/did-address';
17
- import { translate } from '../Locale/util';
18
- import { getDIDColor, isEthereumDid } from '../Util';
19
-
20
- const translations = {
21
- en: {
22
- scanQrcode: 'Scan with DID Wallet to view the {role}',
23
- download: 'Download',
24
- downloadTips: "Don't have DID Wallet ?",
25
- },
26
- zh: {
27
- scanQrcode: '使用 DID Wallet 扫码查看该 {role}',
28
- download: '下载',
29
- downloadTips: '没有 DID Wallet ?',
30
- },
31
- };
32
-
33
- const DEFAULT_CHAIN_ID = 'xenon-2020-01-15';
34
-
35
- const CHAIN_ID_MAP: Record<string, string> = {
36
- main: DEFAULT_CHAIN_ID,
37
- 'main.abtnetwork.io': DEFAULT_CHAIN_ID,
38
- 'beta.abtnetwork.io': 'beta',
39
- };
40
-
41
- const getFontColor = (did: string, didMotifInfo: any, isEthDid: boolean) => {
42
- if (isEthDid) {
43
- return getDIDColor(did);
44
- }
45
-
46
- return didMotifInfo.color;
47
- };
48
-
49
- const isSquareMotif = (roleType: number) => {
50
- const roles: Record<number, boolean> = {
51
- 0: true, // ACCOUNT
52
- 6: true, // ASSET
53
- 17: true, // TOKEN
54
- };
55
- return !roles[roleType];
56
- };
57
-
58
- const getRoleName = (roleType: number) => {
59
- if (roleType === types.RoleType.ROLE_ANY) {
60
- return 'DID';
61
- }
62
-
63
- const [roleName] = Object.entries(types.RoleType).find((item) => item[1] === roleType) || [];
64
- if (roleName) {
65
- // UpperCase first word, example:
66
- // ROLE_ACCOUNT -> Account
67
- // ROLE_APPLICATION -> Application
68
- return roleName.toLowerCase().replace(/role_(\S)/g, (_, $1) => $1.toUpperCase());
69
- }
70
-
71
- return 'DID';
72
- };
73
-
74
- const getAvatarSize = (didMotifInfo: any, isEthDid: boolean, size: number) => {
75
- if (isEthDid) {
76
- return size * 0.75;
77
- }
78
- if (isSquareMotif(didMotifInfo.roleType)) {
79
- return size * 0.75;
80
- }
81
- return size;
82
- };
83
-
84
- function useDIDInfo({ did, showAvatar }: { did: string; showAvatar?: boolean }) {
85
- const isEthDid = isEthereumDid(did);
86
- const didMotifInfo = isEthDid ? undefined : getDIDMotifInfo(did);
87
- const content = useCreation(() => {
88
- if (isEthDid) {
89
- return did;
90
- }
91
- return `${DID_PREFIX}${did}`;
92
- }, [did, isEthDid]);
93
-
94
- const getPrepend = useMemoizedFn((avatarSize: number, keyPrefix: string) => [
95
- <span
96
- key={`${keyPrefix}-prefix-did-${avatarSize}`}
97
- style={{ flex: '0 0 auto', color: getFontColor(did, didMotifInfo, isEthDid) }}>
98
- DID:
99
- </span>,
100
- <span key={`${keyPrefix}-prefix-abt-${avatarSize}`} className="did-address-text">
101
- {isEthDid ? 'ETH' : 'ABT'}:
102
- </span>,
103
- showAvatar && (
104
- <Avatar
105
- key={`${keyPrefix}-avatar-${avatarSize}`}
106
- src=""
107
- did={did}
108
- size={getAvatarSize(didMotifInfo, isEthDid, avatarSize || 18)}
109
- style={{ display: 'inline-flex', alignItems: 'center', marginLeft: 2, marginRight: 4 }}
110
- blockiesPadding={false}
111
- className="did-address-avatar"
112
- sx={{ flexShrink: 0 }}
113
- />
114
- ),
115
- ]);
116
-
117
- return {
118
- isEthDid,
119
- didMotifInfo,
120
- content,
121
- getPrepend,
122
- };
123
- }
124
-
125
- interface DIDOwnProps {
126
- did: string;
127
- chainId?: string;
128
- roleType?: number;
129
- showAvatar?: true | false;
130
- showQrcode?: false | true;
131
- }
132
-
133
- export interface DIDProps extends DIDOwnProps, Omit<IDidAddressWrapper, 'ref'> {}
134
-
135
- export interface HTMLDIDElement extends HTMLDidAddressElement {
136
- openQRCode: () => void;
137
- closeQRCode: () => void;
138
- }
139
-
140
- export function DID({
141
- ref = undefined,
142
- ...props
143
- }: DIDProps & {
144
- ref?: React.Ref<unknown>;
145
- }) {
146
- const {
147
- did: didAddress,
148
- chainId,
149
- roleType,
150
- showAvatar = true,
151
- showQrcode = false,
152
- locale = 'en',
153
- size = 0,
154
- component = 'span',
155
- copyable = true,
156
- responsive = true,
157
- showCopyButtonInTooltip = false,
158
- inline = false,
159
- append = null,
160
- compact = false,
161
- startChars = 6,
162
- endChars = 6,
163
- style,
164
- className,
165
- sx,
166
- } = props;
167
- const did = toAddress(didAddress);
168
-
169
- const rest = {
170
- size,
171
- component,
172
- copyable,
173
- responsive,
174
- showCopyButtonInTooltip,
175
- inline,
176
- append,
177
- compact,
178
- startChars,
179
- endChars,
180
- style,
181
- className,
182
- sx,
183
- };
184
-
185
- const addressRef = useRef<any>(null);
186
- const { content, getPrepend } = useDIDInfo({ did, showAvatar });
187
- const [open, setOpen] = useState(false);
188
-
189
- const closeQrCode = useMemoizedFn(() => {
190
- setOpen(false);
191
- });
192
- const openQrCode = useMemoizedFn((e) => {
193
- e.stopPropagation();
194
- e.preventDefault();
195
- setOpen(true);
196
- });
197
-
198
- useImperativeHandle(ref, () => {
199
- return new Proxy(
200
- {
201
- openQRCode: () => setOpen(true),
202
- closeQRCode: () => setOpen(false),
203
- },
204
- {
205
- get(target: any, key: string) {
206
- return target[key] || addressRef?.current?.[key];
207
- },
208
- }
209
- );
210
- });
211
-
212
- return (
213
- <>
214
- <Address
215
- key="address"
216
- locale={locale}
217
- content={content}
218
- {...rest}
219
- ref={addressRef}
220
- prepend={getPrepend(rest.size, 'address')}
221
- append={
222
- <>
223
- {showQrcode ? (
224
- <Box
225
- id="did-qrcode-button"
226
- component={Icon}
227
- icon={IconQrCode}
228
- onClick={openQrCode}
229
- sx={{
230
- flexShrink: 0,
231
- cursor: 'pointer',
232
- ml: 0.5,
233
- color: 'text.secondary',
234
- }}
235
- />
236
- ) : null}
237
- {rest.append}
238
- </>
239
- }>
240
- {did}
241
- </Address>
242
- <DIDDialog
243
- did={did}
244
- chainId={chainId}
245
- roleType={roleType}
246
- showAvatar={showAvatar}
247
- open={open}
248
- onClose={closeQrCode}
249
- {...rest}
250
- />
251
- </>
252
- );
253
- }
254
-
255
- export interface DIDDialogProps extends DIDProps {
256
- // DialogProps
257
- open: boolean;
258
- fullScreen?: false | true;
259
- fullWidth?: false | true;
260
- scroll?: 'body' | 'paper';
261
- onClose?: ModalProps['onClose'];
262
- }
263
- export function DIDDialog({
264
- did,
265
- chainId = undefined,
266
- roleType = undefined,
267
- showAvatar = true,
268
- // DialogProps
269
- open,
270
- fullScreen = false,
271
- fullWidth = false,
272
- scroll = 'paper',
273
- onClose = noop,
274
- // AddressProps
275
- locale = 'en',
276
- ...rest
277
- }: DIDDialogProps) {
278
- const t = useMemoizedFn((key, data = {}) => {
279
- return translate(translations, key, locale, 'en', data);
280
- });
281
-
282
- const { isEthDid, content, didMotifInfo, getPrepend } = useDIDInfo({ did, showAvatar });
283
-
284
- const downloadUrl = useCreation(() => {
285
- if (['zh', 'en'].includes(locale)) {
286
- return `https://www.didwallet.io/${locale}`;
287
- }
288
- return 'https://www.didwallet.io/en';
289
- }, [locale]);
290
-
291
- const downloadTips = useCreation(() => {
292
- return (
293
- <>
294
- {t('downloadTips')}{' '}
295
- <Box
296
- component="a"
297
- href={downloadUrl}
298
- target="_blank"
299
- rel="noreferrer"
300
- sx={{
301
- color: 'secondary.main',
302
- textDecoration: 'none',
303
- '&:hover': {
304
- textDecoration: 'underline',
305
- },
306
- }}>
307
- {t('download')}
308
- </Box>
309
- </>
310
- );
311
- }, [downloadUrl]);
312
-
313
- const _chainId = useCreation(() => {
314
- if (chainId) {
315
- return CHAIN_ID_MAP[chainId] || chainId;
316
- }
317
-
318
- // 以太坊 DID 使用默认chainId '1'
319
- if (isEthDid) return '1';
320
-
321
- // 解析 chainHost 并获取对应的chainId
322
- try {
323
- const chainHostUrl = (window as any).blocklet?.CHAIN_HOST;
324
- const chainHost = new URL(chainHostUrl).hostname;
325
- if (chainHost) {
326
- return CHAIN_ID_MAP[chainHost] || DEFAULT_CHAIN_ID;
327
- }
328
- } catch (error) {
329
- console.warn('Failed to parse chainHost:', error);
330
- }
331
- return DEFAULT_CHAIN_ID;
332
- }, [isEthDid, chainId]);
333
-
334
- const qrCodeLink = useCreation(() => {
335
- if (isEthDid) {
336
- return `ethereum:abtwallet.io/i?address=${content}&action=didRecognize&chainID=${_chainId}`;
337
- }
338
- return `abt://abtwallet.io/i?did=${content}&action=didRecognize&chainID=${_chainId}`;
339
- }, [content, isEthDid, _chainId]);
340
-
341
- return (
342
- <Dialog
343
- open={open}
344
- onClose={onClose}
345
- fullScreen={fullScreen}
346
- fullWidth={fullWidth}
347
- scroll={scroll}
348
- maxWidth="sm"
349
- PaperProps={{
350
- sx: {
351
- boxShadow: 'none',
352
- borderRadius: '12px',
353
- },
354
- }}>
355
- {/* @ts-ignore */}
356
- <DialogContent align="center" sx={{ p: 3 }}>
357
- <Typography sx={{ mb: 2, fontWeight: 500, fontSize: 18 }}>
358
- {t('scanQrcode', { role: getRoleName(roleType || didMotifInfo?.roleType) })}
359
- </Typography>
360
- <QRCode
361
- // eslint-disable-next-line max-len
362
- value={qrCodeLink}
363
- size={256}
364
- renderAs="svg"
365
- level="M"
366
- />
367
- <Box sx={{ mt: 1.5, textAlign: 'center' }}>
368
- <Address
369
- key="dialog-address"
370
- locale={locale}
371
- content={content}
372
- prepend={getPrepend(16, 'dialog')}
373
- {...rest}
374
- size={16}
375
- copyable>
376
- {did}
377
- </Address>
378
- </Box>
379
- <Typography
380
- variant="body2"
381
- sx={{
382
- color: 'text.secondary',
383
- fontSize: '12px',
384
- mt: 1,
385
- }}>
386
- {downloadTips}
387
- </Typography>
388
- </DialogContent>
389
- </Dialog>
390
- );
391
- }
392
-
393
- export default DID;
@@ -1,37 +0,0 @@
1
- import { useState } from 'react';
2
- import { joinURL } from 'ufo';
3
- import { SxProps } from '@mui/material';
4
-
5
- import Img from '../Img';
6
- import { isUrl } from '../Util';
7
- import DidAvatar from '../Avatar';
8
-
9
- type AppIconProps = {
10
- appInfo: any;
11
- size?: number;
12
- sx?: SxProps;
13
- };
14
-
15
- export default function AppIcon({ appInfo, size = 32, ...rest }: AppIconProps) {
16
- const [error, setError] = useState(false);
17
- if (error || !(appInfo.appUrl || appInfo.appLogo)) {
18
- return <DidAvatar did={appInfo.appPid} size={size} />;
19
- }
20
-
21
- let logoUrl = appInfo.appLogo || '';
22
- if (!isUrl(logoUrl)) {
23
- logoUrl = joinURL(appInfo.appUrl || '', logoUrl);
24
- }
25
-
26
- return (
27
- <Img
28
- src={logoUrl}
29
- alt={appInfo.appName || 'Blocklet Icon'}
30
- width={size}
31
- height={size}
32
- useProxyFallback
33
- {...rest}
34
- onError={() => setError(true)}
35
- />
36
- );
37
- }