@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,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
- }