@arcblock/ux 2.9.91 → 2.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (337) hide show
  1. package/lib/ActionButton/index.js +36 -48
  2. package/lib/ActivityIndicator/index.js +122 -75
  3. package/lib/Address/compact-text.js +48 -66
  4. package/lib/Address/did-address.js +114 -87
  5. package/lib/Address/index.js +15 -27
  6. package/lib/Address/responsive-did-address.js +48 -50
  7. package/lib/Alert/index.js +58 -52
  8. package/lib/AnimationWaiter/index.js +123 -69
  9. package/lib/Async/index.js +8 -22
  10. package/lib/Avatar/did-motif.js +38 -52
  11. package/lib/Avatar/etherscan-blockies.js +4 -10
  12. package/lib/Avatar/index.js +71 -77
  13. package/lib/Badge/index.js +49 -56
  14. package/lib/Blocklet/blocklet.js +181 -97
  15. package/lib/Blocklet/index.js +4 -24
  16. package/lib/Blocklet/utils.js +50 -13
  17. package/lib/BlockletContext/index.js +21 -31
  18. package/lib/BlockletNFT/index.js +255 -115
  19. package/lib/Button/index.js +5 -11
  20. package/lib/Button/wrap.js +45 -56
  21. package/lib/ButtonGroup/index.js +3 -9
  22. package/lib/CardSelector/index.js +67 -43
  23. package/lib/Center/index.js +19 -20
  24. package/lib/ClickToCopy/copy-button.js +37 -50
  25. package/lib/ClickToCopy/hook.js +10 -18
  26. package/lib/ClickToCopy/index.js +54 -66
  27. package/lib/CodeBlock/LightBox.js +84 -11
  28. package/lib/CodeBlock/index.js +175 -101
  29. package/lib/Colors/index.js +3 -20
  30. package/lib/Colors/themes/default.js +1 -7
  31. package/lib/Colors/themes/temp.js +1 -7
  32. package/lib/ContactForm/index.js +95 -60
  33. package/lib/CookieConsent/index.js +58 -52
  34. package/lib/CountDown/index.js +90 -59
  35. package/lib/DID/index.js +80 -96
  36. package/lib/Datatable/CustomToolbar.js +188 -137
  37. package/lib/Datatable/DatatableContext.js +14 -21
  38. package/lib/Datatable/TableSearch.js +99 -58
  39. package/lib/Datatable/index.js +312 -139
  40. package/lib/Datatable/utils.js +9 -17
  41. package/lib/Dialog/confirm.js +46 -58
  42. package/lib/Dialog/dialog.js +110 -66
  43. package/lib/Dialog/index.js +4 -27
  44. package/lib/Dialog/use-confirm.js +40 -65
  45. package/lib/DidLogo/index.js +14 -22
  46. package/lib/DriftBot/index.js +34 -19
  47. package/lib/Earth/index.js +214 -110
  48. package/lib/Earth/util.js +6 -19
  49. package/lib/Empty/index.js +33 -38
  50. package/lib/ErrorBoundary/fallback.js +45 -43
  51. package/lib/ErrorBoundary/index.js +1 -16
  52. package/lib/Footer/index.js +96 -48
  53. package/lib/Header/auto-hidden.js +28 -31
  54. package/lib/Header/header.js +151 -69
  55. package/lib/Header/index.js +2 -20
  56. package/lib/Header/responsive-header.js +67 -60
  57. package/lib/Icon/image.js +41 -45
  58. package/lib/Icon/index.js +51 -53
  59. package/lib/Img/index.js +77 -88
  60. package/lib/InfoRow/index.js +66 -48
  61. package/lib/Layout/dashboard/external-link.js +38 -53
  62. package/lib/Layout/dashboard/full-page.js +27 -41
  63. package/lib/Layout/dashboard/index.js +177 -132
  64. package/lib/Layout/dashboard/sidebar.js +164 -61
  65. package/lib/Layout/dashboard-legacy/header.js +119 -66
  66. package/lib/Layout/dashboard-legacy/index.js +90 -79
  67. package/lib/Layout/dashboard-legacy/sidebar.js +95 -62
  68. package/lib/Layout/index.js +200 -106
  69. package/lib/LoadingMask/index.js +31 -38
  70. package/lib/Locale/browser-lang.js +2 -8
  71. package/lib/Locale/context.js +46 -69
  72. package/lib/Locale/languages.js +6 -15
  73. package/lib/Locale/selector.js +116 -92
  74. package/lib/Locale/util.js +7 -16
  75. package/lib/Logo/index.js +54 -57
  76. package/lib/Metric/index.js +103 -40
  77. package/lib/NFTDisplay/aspect-ratio-container.js +33 -40
  78. package/lib/NFTDisplay/broken.js +68 -52
  79. package/lib/NFTDisplay/index.js +140 -129
  80. package/lib/NFTDisplay/loading.js +14 -13
  81. package/lib/NFTDisplay/svg-embedder/img.js +18 -33
  82. package/lib/NFTDisplay/svg-embedder/inline-svg.js +28 -32
  83. package/lib/NavMenu/index.js +2 -13
  84. package/lib/NavMenu/nav-menu.js +133 -148
  85. package/lib/NavMenu/style.js +179 -12
  86. package/lib/PageScroller/index.js +82 -93
  87. package/lib/PageScroller/story/FifthComponent.js +4 -10
  88. package/lib/PageScroller/story/FirstComponent.js +4 -10
  89. package/lib/PageScroller/story/FourthComponent.js +4 -10
  90. package/lib/PageScroller/story/FullPage.js +21 -28
  91. package/lib/PageScroller/story/PageContain.js +23 -30
  92. package/lib/PageScroller/story/SecondComponent.js +4 -10
  93. package/lib/PageScroller/story/ThirdComponent.js +4 -10
  94. package/lib/PageScroller/usePrevValue.js +4 -11
  95. package/lib/Passport/index.js +2 -9
  96. package/lib/Passport/passport.js +38 -51
  97. package/lib/PoweredByArcBlock/index.js +19 -33
  98. package/lib/PricingTable/PricingPlan.js +90 -34
  99. package/lib/PricingTable/index.js +28 -26
  100. package/lib/QRCode/index.js +38 -50
  101. package/lib/RelativeTime/index.js +44 -59
  102. package/lib/Result/common.js +85 -107
  103. package/lib/Result/index.js +22 -34
  104. package/lib/Result/result.js +35 -41
  105. package/lib/Result/translations.js +1 -7
  106. package/lib/Screenshot/BaseScreenshot/index.js +65 -43
  107. package/lib/Screenshot/BaseScreenshot/shells/Macbook.js +17 -27
  108. package/lib/Screenshot/BaseScreenshot/shells/Phone.js +14 -25
  109. package/lib/Screenshot/index.js +103 -92
  110. package/lib/SessionBlocklet/index.js +125 -143
  111. package/lib/SessionManager/index.js +2 -9
  112. package/lib/SessionPermission/index.js +13 -23
  113. package/lib/SessionUser/components/logged-in.js +139 -158
  114. package/lib/SessionUser/components/session-user-item.js +44 -58
  115. package/lib/SessionUser/components/session-user-switch.js +133 -152
  116. package/lib/SessionUser/components/un-login.js +27 -35
  117. package/lib/SessionUser/components/user-info.js +62 -74
  118. package/lib/SessionUser/index.js +26 -34
  119. package/lib/SessionUser/libs/translation.js +1 -7
  120. package/lib/SessionUser/libs/utils.js +13 -34
  121. package/lib/Sparkline/index.js +4 -10
  122. package/lib/Spinner/index.js +11 -17
  123. package/lib/SplitButton/index.js +72 -68
  124. package/lib/Success/index.js +28 -34
  125. package/lib/Switch/index.js +64 -75
  126. package/lib/Tabs/index.js +84 -103
  127. package/lib/Tag/index.js +52 -56
  128. package/lib/TextCollapse/index.js +57 -50
  129. package/lib/Theme/index.js +8 -47
  130. package/lib/Theme/theme-provider.js +19 -26
  131. package/lib/Theme/theme.js +49 -62
  132. package/lib/Toast/index.js +41 -73
  133. package/lib/Typography/index.js +44 -55
  134. package/lib/Util/constant.js +16 -22
  135. package/lib/Util/deprecate.js +14 -26
  136. package/lib/Util/federated.js +16 -38
  137. package/lib/Util/index.js +63 -113
  138. package/lib/Util/passport.js +23 -33
  139. package/lib/Util/wallet.js +5 -14
  140. package/lib/Video/index.js +34 -34
  141. package/lib/Wallet/Action.js +72 -49
  142. package/lib/Wallet/Download.js +132 -115
  143. package/lib/Wallet/Open.js +26 -25
  144. package/lib/WalletOSIcon/index.js +33 -42
  145. package/lib/WebWalletSWKeeper/index.js +42 -55
  146. package/lib/WechatPrompt/index.js +53 -33
  147. package/lib/index.js +38 -265
  148. package/lib/withTheme/index.js +53 -33
  149. package/lib/withTracker/error_boundary.js +7 -18
  150. package/lib/withTracker/index.js +25 -34
  151. package/package.json +9 -316
  152. package/src/WalletOSIcon/index.jsx +1 -1
  153. package/es/ActionButton/index.js +0 -99
  154. package/es/ActivityIndicator/index.js +0 -180
  155. package/es/Address/compact-text.js +0 -105
  156. package/es/Address/did-address.js +0 -222
  157. package/es/Address/index.js +0 -23
  158. package/es/Address/responsive-did-address.js +0 -87
  159. package/es/Alert/index.js +0 -134
  160. package/es/AnimationWaiter/default-animation.json +0 -1
  161. package/es/AnimationWaiter/index.js +0 -240
  162. package/es/Async/index.js +0 -38
  163. package/es/Avatar/did-motif.js +0 -68
  164. package/es/Avatar/etherscan-blockies.js +0 -83
  165. package/es/Avatar/index.js +0 -179
  166. package/es/Badge/index.js +0 -98
  167. package/es/Blocklet/blocklet.js +0 -298
  168. package/es/Blocklet/index.js +0 -4
  169. package/es/Blocklet/utils.js +0 -52
  170. package/es/BlockletContext/index.js +0 -65
  171. package/es/BlockletNFT/index.js +0 -412
  172. package/es/Button/index.js +0 -8
  173. package/es/Button/wrap.js +0 -140
  174. package/es/ButtonGroup/index.js +0 -6
  175. package/es/CardSelector/index.js +0 -149
  176. package/es/Center/index.js +0 -41
  177. package/es/ClickToCopy/copy-button.js +0 -72
  178. package/es/ClickToCopy/hook.js +0 -39
  179. package/es/ClickToCopy/index.js +0 -92
  180. package/es/CodeBlock/LightBox.js +0 -85
  181. package/es/CodeBlock/index.js +0 -222
  182. package/es/Colors/index.js +0 -3
  183. package/es/Colors/themes/default.js +0 -77
  184. package/es/Colors/themes/temp.js +0 -41
  185. package/es/ContactForm/index.js +0 -230
  186. package/es/CookieConsent/index.js +0 -113
  187. package/es/CountDown/index.js +0 -178
  188. package/es/DID/index.js +0 -249
  189. package/es/Datatable/CustomToolbar.js +0 -396
  190. package/es/Datatable/DatatableContext.js +0 -34
  191. package/es/Datatable/TableSearch.js +0 -166
  192. package/es/Datatable/index.js +0 -629
  193. package/es/Datatable/utils.js +0 -132
  194. package/es/Dialog/confirm.js +0 -123
  195. package/es/Dialog/dialog.js +0 -201
  196. package/es/Dialog/index.js +0 -4
  197. package/es/Dialog/types.d.ts +0 -17
  198. package/es/Dialog/use-confirm.js +0 -133
  199. package/es/DidLogo/index.js +0 -31
  200. package/es/DriftBot/index.js +0 -70
  201. package/es/Earth/countries.json +0 -8057
  202. package/es/Earth/index.js +0 -521
  203. package/es/Earth/util.js +0 -51
  204. package/es/Empty/index.js +0 -65
  205. package/es/ErrorBoundary/fallback.js +0 -73
  206. package/es/ErrorBoundary/index.js +0 -1
  207. package/es/Footer/index.js +0 -172
  208. package/es/Header/auto-hidden.js +0 -35
  209. package/es/Header/header.js +0 -223
  210. package/es/Header/index.js +0 -2
  211. package/es/Header/responsive-header.js +0 -146
  212. package/es/Icon/image.js +0 -65
  213. package/es/Icon/index.js +0 -84
  214. package/es/Img/index.js +0 -218
  215. package/es/InfoRow/index.js +0 -87
  216. package/es/Layout/dashboard/external-link.js +0 -58
  217. package/es/Layout/dashboard/full-page.js +0 -53
  218. package/es/Layout/dashboard/index.js +0 -282
  219. package/es/Layout/dashboard/sidebar.js +0 -209
  220. package/es/Layout/dashboard-legacy/header.js +0 -174
  221. package/es/Layout/dashboard-legacy/index.js +0 -148
  222. package/es/Layout/dashboard-legacy/sidebar.js +0 -129
  223. package/es/Layout/index.js +0 -335
  224. package/es/LoadingMask/index.js +0 -102
  225. package/es/Locale/browser-lang.js +0 -52
  226. package/es/Locale/context.js +0 -139
  227. package/es/Locale/languages.js +0 -60
  228. package/es/Locale/selector.js +0 -186
  229. package/es/Locale/util.js +0 -21
  230. package/es/Logo/images/logo-dark-text.svg +0 -3
  231. package/es/Logo/images/logo-dark-top.svg +0 -6
  232. package/es/Logo/images/logo-light-text.svg +0 -3
  233. package/es/Logo/images/logo-light-top.svg +0 -6
  234. package/es/Logo/index.js +0 -136
  235. package/es/Metric/index.js +0 -132
  236. package/es/NFTDisplay/NFTBroken.svg +0 -34
  237. package/es/NFTDisplay/README.md +0 -59
  238. package/es/NFTDisplay/aspect-ratio-container.js +0 -39
  239. package/es/NFTDisplay/broken.js +0 -132
  240. package/es/NFTDisplay/demo/data/asset-state-display-url.json +0 -7
  241. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-1-1.json +0 -10
  242. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-374-130.json +0 -10
  243. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-with-foreign-object.json +0 -20
  244. package/es/NFTDisplay/demo/data/asset-state-svg.json +0 -29
  245. package/es/NFTDisplay/demo/data/asset-state-url.json +0 -10
  246. package/es/NFTDisplay/index.js +0 -328
  247. package/es/NFTDisplay/loading.js +0 -18
  248. package/es/NFTDisplay/svg-embedder/img.js +0 -45
  249. package/es/NFTDisplay/svg-embedder/inline-svg.js +0 -39
  250. package/es/NavMenu/index.js +0 -2
  251. package/es/NavMenu/nav-menu.js +0 -358
  252. package/es/NavMenu/style.js +0 -181
  253. package/es/PageScroller/index.js +0 -286
  254. package/es/PageScroller/story/FifthComponent.js +0 -9
  255. package/es/PageScroller/story/FirstComponent.js +0 -9
  256. package/es/PageScroller/story/FourthComponent.js +0 -12
  257. package/es/PageScroller/story/FullPage.js +0 -47
  258. package/es/PageScroller/story/PageContain.js +0 -59
  259. package/es/PageScroller/story/SecondComponent.js +0 -9
  260. package/es/PageScroller/story/ThirdComponent.js +0 -9
  261. package/es/PageScroller/story/index.css +0 -115
  262. package/es/PageScroller/usePrevValue.js +0 -9
  263. package/es/Passport/index.js +0 -2
  264. package/es/Passport/passport.js +0 -103
  265. package/es/PoweredByArcBlock/index.js +0 -31
  266. package/es/PricingTable/PricingPlan.js +0 -124
  267. package/es/PricingTable/index.js +0 -53
  268. package/es/QRCode/index.js +0 -73
  269. package/es/RelativeTime/index.js +0 -107
  270. package/es/Result/common.js +0 -140
  271. package/es/Result/demo/fixtures/result-image-404.svg +0 -1
  272. package/es/Result/index.js +0 -33
  273. package/es/Result/result.js +0 -59
  274. package/es/Result/translations.js +0 -54
  275. package/es/Screenshot/BaseScreenshot/index.js +0 -91
  276. package/es/Screenshot/BaseScreenshot/shells/Macbook.js +0 -51
  277. package/es/Screenshot/BaseScreenshot/shells/Phone.js +0 -36
  278. package/es/Screenshot/demo/images/bg-00.jpg +0 -0
  279. package/es/Screenshot/demo/images/bg-01.jpg +0 -0
  280. package/es/Screenshot/demo/images/bg-02.jpg +0 -0
  281. package/es/Screenshot/demo/images/bg-03.jpg +0 -0
  282. package/es/Screenshot/demo/images/bg-04.jpg +0 -0
  283. package/es/Screenshot/demo/images/bg-05.jpg +0 -0
  284. package/es/Screenshot/demo/images/bg-06.jpg +0 -0
  285. package/es/Screenshot/demo/images/bg-07.jpg +0 -0
  286. package/es/Screenshot/demo/images/bg-08.jpg +0 -0
  287. package/es/Screenshot/demo/images/bg-09.jpg +0 -0
  288. package/es/Screenshot/devices.css +0 -1366
  289. package/es/Screenshot/index.js +0 -299
  290. package/es/SessionBlocklet/index.js +0 -173
  291. package/es/SessionManager/index.js +0 -2
  292. package/es/SessionPermission/index.js +0 -28
  293. package/es/SessionUser/components/logged-in.js +0 -229
  294. package/es/SessionUser/components/session-user-item.js +0 -102
  295. package/es/SessionUser/components/session-user-switch.js +0 -223
  296. package/es/SessionUser/components/un-login.js +0 -64
  297. package/es/SessionUser/components/user-info.js +0 -167
  298. package/es/SessionUser/index.js +0 -49
  299. package/es/SessionUser/libs/translation.js +0 -19
  300. package/es/SessionUser/libs/utils.js +0 -29
  301. package/es/Sparkline/index.js +0 -193
  302. package/es/Spinner/index.js +0 -28
  303. package/es/SplitButton/index.js +0 -145
  304. package/es/Success/index.js +0 -175
  305. package/es/Switch/index.js +0 -96
  306. package/es/Tabs/index.js +0 -214
  307. package/es/Tag/index.js +0 -108
  308. package/es/TextCollapse/index.js +0 -92
  309. package/es/Theme/index.js +0 -16
  310. package/es/Theme/theme-provider.js +0 -39
  311. package/es/Theme/theme.js +0 -145
  312. package/es/Toast/index.js +0 -97
  313. package/es/Typography/index.js +0 -95
  314. package/es/Util/constant.js +0 -42
  315. package/es/Util/deprecate.js +0 -28
  316. package/es/Util/federated.js +0 -91
  317. package/es/Util/index.js +0 -363
  318. package/es/Util/passport.js +0 -62
  319. package/es/Util/wallet.js +0 -32
  320. package/es/Video/index.js +0 -89
  321. package/es/Wallet/Action.js +0 -119
  322. package/es/Wallet/Download.js +0 -331
  323. package/es/Wallet/Open.js +0 -45
  324. package/es/Wallet/images/abtwallet.png +0 -0
  325. package/es/Wallet/images/android_download.svg +0 -23
  326. package/es/Wallet/images/app-store.svg +0 -20
  327. package/es/Wallet/images/google-play.svg +0 -70
  328. package/es/WalletOSIcon/index.js +0 -82
  329. package/es/WebWalletSWKeeper/index.js +0 -117
  330. package/es/WechatPrompt/images/android.png +0 -0
  331. package/es/WechatPrompt/images/ios.png +0 -0
  332. package/es/WechatPrompt/index.js +0 -88
  333. package/es/index.js +0 -38
  334. package/es/withTheme/index.js +0 -69
  335. package/es/withTracker/README.md +0 -34
  336. package/es/withTracker/error_boundary.js +0 -34
  337. package/es/withTracker/index.js +0 -55
package/es/Util/index.js DELETED
@@ -1,363 +0,0 @@
1
- /* eslint-disable no-bitwise */
2
- import padStart from 'lodash/padStart';
3
- import { getDIDMotifInfo, colors } from '@arcblock/did-motif';
4
- import { DID_PREFIX } from './constant';
5
- let dateTool = null;
6
- export function parseQuery(str) {
7
- return str.replace(/^\?/, '').split('&').map(x => x.split('=')).filter(([key]) => !!key).reduce((memo, x) => {
8
- const key = x[0];
9
- const value = decodeURIComponent(x[1]) || true;
10
- memo[key] = value;
11
- return memo;
12
- }, {});
13
- }
14
- export function stringifyQuery(params = {}) {
15
- return new URLSearchParams(params).toString();
16
- }
17
-
18
- /**
19
- * @param {number} opts.expireInDays
20
- * @param {string} opts.path
21
- * @param {domain} opts.domain
22
- * @param {boolean} opts.returnDomain if === false, opts.domain will be skipped
23
- */
24
- export function getCookieOptions(expireInDays = 1) {
25
- let opts = {
26
- expireInDays
27
- };
28
- if (typeof expireInDays === 'object') {
29
- opts = expireInDays;
30
- }
31
- if (opts.path === undefined) {
32
- opts.path = '/';
33
- }
34
- if (!opts.expireInDays) {
35
- opts.expireInDays = 1;
36
- }
37
- const options = {
38
- expires: opts.expireInDays,
39
- path: opts.path,
40
- domain: opts.domain || '',
41
- sameSite: opts.sameSite || 'lax'
42
- };
43
- if (typeof window === 'undefined' || opts.domain || opts.returnDomain === false) {
44
- if (opts.returnDomain === false) {
45
- delete options.domain;
46
- }
47
- return options;
48
- }
49
- return options;
50
- }
51
- export const getColor = props => {
52
- if (props.color) {
53
- return props.color;
54
- }
55
- if (props.dark) {
56
- return props.theme.palette.common.white;
57
- }
58
- return props.theme.palette.text.primary;
59
- };
60
- export const getBackground = props => {
61
- if (props.background) {
62
- return props.background;
63
- }
64
- if (props.dark) {
65
- return props.theme.palette.common.black;
66
- }
67
- return props.theme.palette.common.white;
68
- };
69
- export function mergeProps(props, component, jsonAttrs = []) {
70
- const newProps = Object.assign({}, props);
71
- Object.keys(component.defaultProps || {}).forEach(x => {
72
- if (typeof newProps[x] === 'string' && newProps[x].indexOf('::prop::') === 0) {
73
- newProps[x] = component.defaultProps[x];
74
- }
75
- });
76
- if (Array.isArray(jsonAttrs)) {
77
- jsonAttrs.forEach(x => {
78
- if (typeof newProps[x] === 'string') {
79
- try {
80
- newProps[x] = JSON.parse(newProps[x]);
81
- } catch (err) {
82
- // Do nothing
83
- }
84
- }
85
- });
86
- }
87
- Object.keys(newProps).forEach(x => {
88
- if (typeof newProps[x] === 'string' && newProps[x].indexOf('::prop::') === 0) {
89
- newProps[x] = '';
90
- }
91
- });
92
- return newProps;
93
- }
94
- export function getCopyright(startYear = 2017) {
95
- const currentYear = new Date().getFullYear();
96
- return `${currentYear}` === `${startYear}` ? `© ArcBlock ${currentYear}` : `© ArcBlock ${startYear} - ${currentYear}`;
97
- }
98
- export const getTimezone = () => {
99
- if (typeof Intl === 'object' && typeof Intl.DateTimeFormat === 'function' && typeof Intl.DateTimeFormat().resolvedOptions === 'function') {
100
- return Intl.DateTimeFormat().resolvedOptions().timeZone;
101
- }
102
- return '';
103
- };
104
- export const str2color = str => {
105
- let hash = 0;
106
- for (let i = 0; i < str.length; i++) {
107
- hash = str.charCodeAt(i) + ((hash << 5) - hash);
108
- }
109
- let colour = '#';
110
- for (let j = 0; j < 3; j++) {
111
- const value = hash >> j * 8 & 0xff;
112
- colour += `00${value.toString(16)}`.substr(-2);
113
- }
114
- return colour;
115
- };
116
- export const formatUptime = uptime => {
117
- const total = Math.round(uptime / 1000);
118
- const hours = Math.floor(total / 3600);
119
- const minutes = Math.floor((total - hours * 3600) / 60);
120
- const seconds = total % 60;
121
- return `${padStart(hours, 2, '0')}:${padStart(minutes, 2, '0')}:${padStart(seconds, 2, '0')}`;
122
- };
123
-
124
- /**
125
- * Set the date tool library which support for format() and locale() functions,
126
- * moment and dayjs are recommended.
127
- * @param {object} the date tool library
128
- */
129
- export function setDateTool(tool) {
130
- dateTool = tool;
131
- }
132
- export function getDateTool() {
133
- return dateTool;
134
- }
135
- const createDateFormatter = format => (date, {
136
- locale,
137
- tz
138
- }) => {
139
- if (dateTool === null) {
140
- throw new Error('call setDateTool to set the date tool library, such as: setDateTool(dayjs)');
141
- }
142
- if (!date) {
143
- return '-';
144
- }
145
- let instance = dateTool(date);
146
- if (tz) {
147
- instance = instance.tz(tz);
148
- }
149
- if (typeof locale !== 'undefined') {
150
- instance = instance.locale(locale);
151
- }
152
- return instance.format(format);
153
- };
154
-
155
- /**
156
- * Format the time string as `ll` format: MMM D, YYYY
157
- * Ensure that the setDateTool() function is called first to set the time tool library.
158
- * @param {string} date date string
159
- * @param {object} option
160
- * @param {string} option.locale, default: en
161
- * @param {string} option.tz, default: timzone
162
- * @returns formatted date string
163
- */
164
- export function formatToDate(date, {
165
- locale,
166
- tz
167
- } = {}) {
168
- return createDateFormatter('ll')(date, {
169
- locale,
170
- tz
171
- });
172
- }
173
-
174
- /**
175
- * Format the time string as `lll` format: MMM D, YYYY h:mm A
176
- * Ensure that the setDateTool() function is called first to set the time tool library.
177
- * @param {string} date date string
178
- * @param {object} option
179
- * @param {string} option.locale, default: en
180
- * @param {string} option.tz, default: timzone
181
- * @returns formatted date string
182
- */
183
- export function formatToDatetime(date, {
184
- locale,
185
- tz
186
- } = {}) {
187
- return createDateFormatter('lll')(date, {
188
- locale,
189
- tz
190
- });
191
- }
192
- export function detectWalletExtension() {
193
- const extension = window?.ABT_DEV || window.ABT;
194
- if (extension && typeof extension.open === 'function') {
195
- return extension;
196
- }
197
- return null;
198
- }
199
- export function openWebWallet({
200
- webWalletUrl,
201
- action = 'login',
202
- locale = 'en',
203
- url,
204
- windowFeatures
205
- }) {
206
- // web wallet extension
207
- const extension = detectWalletExtension();
208
- if (extension) {
209
- extension.open({
210
- action,
211
- locale,
212
- url: encodeURIComponent(url)
213
- });
214
- return;
215
- }
216
- const defaultWindowFeatures = {
217
- toolbar: 'no',
218
- location: 'no',
219
- status: 'no',
220
- menubar: 'no',
221
- scrollbars: 'yes',
222
- resizable: 'yes',
223
- // iphone 8plus size
224
- width: 414,
225
- height: 736
226
- };
227
- const windowUrl = `${webWalletUrl}?action=${action}&locale=${locale}&url=${encodeURIComponent(url)}`;
228
- const mergedWindowFeatures = Object.assign({}, defaultWindowFeatures, windowFeatures);
229
- const getWindowWidth = win => {
230
- return win.innerWidth || win.document.documentElement.clientWidth || win.document.body.clientWidth;
231
- };
232
- // 默认在浏览器右上角弹出窗口
233
- if (!('left' in mergedWindowFeatures)) {
234
- const winWidth = getWindowWidth(window.top || window);
235
- const winLeft = window.screenLeft || window.screenX;
236
- mergedWindowFeatures.left = winWidth + winLeft - mergedWindowFeatures.width;
237
- }
238
- if (!('top' in mergedWindowFeatures)) {
239
- const winTop = window.screenTop || window.screenY;
240
- mergedWindowFeatures.top = winTop;
241
- }
242
- const strWindowFeatures = Object.keys(mergedWindowFeatures).map(key => `${key}=${mergedWindowFeatures[key]}`).join(',');
243
- window.open(windowUrl, 'targetWindow', strWindowFeatures);
244
- }
245
- export const getFontSize = size => {
246
- // 12px 及以上的 size 有效, 否则返回 inherit
247
- if (size && Number(size) >= 12) {
248
- return `${Number(size)}px`;
249
- }
250
- return 'inherit';
251
- };
252
-
253
- // 参考: asset-chain @arcblock/did
254
- export const isEthereumDid = did => {
255
- const address = did.replace(DID_PREFIX, '');
256
- // check if it has the basic requirements of an address
257
- if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
258
- return false;
259
- }
260
- return true;
261
- };
262
-
263
- /**
264
- *
265
- * @param {string} url 需要处理的 url
266
- * @param {{imageFilter: 'crop'|'resize'; w?: number; h?: number; r?: 0|90|180|270}} params
267
- * @returns
268
- */
269
- export const appendParams = (url, params) => {
270
- if (!params) {
271
- return url;
272
- }
273
- try {
274
- // HACK: 如果 url 中带有域名,则 urlInstance.origin 为 url 中的域名;否则,借用当前页面的 location.origin 作为域名来拼接一个 url
275
- const urlInstance = new URL(url, window.location.origin);
276
- Object.keys(params).forEach(key => {
277
- urlInstance.searchParams.set(key, params[key]);
278
- });
279
- // HACK: 如果前后域名一致,代表前面已经借用了 location.origin,这个时候只需要返回 urlInstance.pathname + urlInstance.search 即可
280
- if (urlInstance.origin === window.location.origin) {
281
- return urlInstance.pathname + urlInstance.search;
282
- }
283
- return urlInstance.href;
284
- } catch {
285
- return url;
286
- }
287
- };
288
- export const getUserAvatar = (avatar, size = 48) => {
289
- if (!avatar) {
290
- return avatar;
291
- }
292
- if (avatar.indexOf('/.well-known/service') >= 0) {
293
- return appendParams(avatar, {
294
- imageFilter: 'resize',
295
- w: size,
296
- h: size
297
- });
298
- }
299
- return avatar;
300
- };
301
- export const sleep = (time = 0) => {
302
- return new Promise(resolve => {
303
- setTimeout(() => {
304
- resolve();
305
- }, time);
306
- });
307
- };
308
- export const isUrl = str => {
309
- return /^https?:\/\//.test(str);
310
- };
311
- const visitorIdKey = '__visitor_id';
312
- export const getVisitorId = () => {
313
- return localStorage.getItem(visitorIdKey);
314
- };
315
- export const setVisitorId = value => {
316
- if (value === null) {
317
- localStorage.removeItem(visitorIdKey);
318
- } else {
319
- localStorage.setItem(visitorIdKey, value);
320
- }
321
- };
322
- export const getDIDColor = did => {
323
- if (isEthereumDid(did)) {
324
- const index = Uint8Array.from(did.slice(2).match(/.{1,2}/g).map(pair => parseInt(pair, 16))).slice(0, 8).reduce((acc, val) => acc + val, 0) % colors.length;
325
- return colors[index];
326
- }
327
- try {
328
- const didMotifInfo = getDIDMotifInfo(did);
329
- return didMotifInfo?.color;
330
- } catch {
331
- return null;
332
- }
333
- };
334
-
335
- /**
336
- * Retrieves the appropriate translation based on the locale, with fallback options.
337
- *
338
- * @param {Object|string} translations - The translations object or string to retrieve translation from.
339
- * @param {string} locale - The locale to use for retrieving the translation.
340
- * @param {Object} options - Additional options for fallbackLocale and defaultValue.
341
- * @param {string} [options.fallbackLocale='en'] - The fallback locale to use if the translation for the specified locale is not found.
342
- * @param {string} [options.defaultValue='unknown'] - The default value to return if no translation is found.
343
- * @return {string} The translated string based on the locale, with fallback options if necessary.
344
- */
345
- export const getTranslation = (translations, locale, {
346
- fallbackLocale = 'en',
347
- defaultValue = 'unknown'
348
- } = {}) => {
349
- if (typeof translations === 'string') {
350
- return translations;
351
- }
352
- let translation;
353
- if (locale) {
354
- translation = translations[locale];
355
- }
356
- if (!translation || typeof translation !== 'string') {
357
- translation = translations[fallbackLocale];
358
- }
359
- if (!translation || typeof translation !== 'string') {
360
- translation = defaultValue;
361
- }
362
- return translation;
363
- };
@@ -1,62 +0,0 @@
1
- import { getNftBGColor, DEFAULT_COLORS, getNftBGColorFromDid, getSvg } from '@arcblock/nft-display';
2
- export const getPassportColor = (preferredColor, did) => {
3
- let color;
4
- if (preferredColor === 'default') {
5
- color = DEFAULT_COLORS['app-passport'];
6
- } else if (preferredColor === 'auto') {
7
- color = getNftBGColorFromDid(did);
8
- } else {
9
- color = getNftBGColor(preferredColor);
10
- }
11
- return color;
12
- };
13
- export const getTextColor = background => {
14
- const r = parseInt(background.slice(1, 3), 16);
15
- const g = parseInt(background.slice(3, 5), 16);
16
- const b = parseInt(background.slice(5, 7), 16);
17
- const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
18
- return luminance > 0.5 ? '#111' : '#EEE';
19
- };
20
- export const createPassportSvg = ({
21
- issuer = '',
22
- title = '',
23
- issuerDid = '',
24
- issuerAvatarUrl = '',
25
- ownerDid = '',
26
- ownerName = '',
27
- ownerAvatarUrl = '',
28
- preferredColor = 'default',
29
- revoked = false,
30
- isDataUrl = false,
31
- width = '100%',
32
- height = '100%'
33
- }) => {
34
- const color = getPassportColor(preferredColor, issuerDid);
35
- const svgXML = getSvg({
36
- width,
37
- height,
38
- tag: revoked ? 'revoked' : '',
39
- tagVariant: revoked ? 'error' : 'info',
40
- color,
41
- did: ownerDid,
42
- variant: 'app-passport' || ownerName,
43
- verifiable: true,
44
- issuer: {
45
- name: issuer,
46
- icon: issuerAvatarUrl
47
- },
48
- header: {
49
- name: title,
50
- icon: ownerAvatarUrl
51
- },
52
- // FIXME: @wangshijun this should be dynamic
53
- extra: {
54
- key: 'Exp',
55
- value: '2123-01-01'
56
- }
57
- });
58
- if (isDataUrl) {
59
- return `data:image/svg+xml;utf8,${encodeURIComponent(svgXML)}`;
60
- }
61
- return svgXML;
62
- };
package/es/Util/wallet.js DELETED
@@ -1,32 +0,0 @@
1
- /* eslint-disable import/prefer-default-export */
2
- export const providerName = 'wallet_url';
3
-
4
- /**
5
- * 获取 web wallet url, 常用于为 did connect 组件传递 webWalletUrl 参数,
6
- * 更明确的说, 这里获取的应该是 **default web wallet url**,
7
- * 如果用户使用自定义的 web wallet url, 不应该使用该方法, 应该显式的将自定义的 web wallet url 传递给 did connect 组件
8
- * (参考: https://github.com/blocklet/ocap-playground/issues/98)
9
- *
10
- * 获取优先级:
11
- * - localStorage 使用 provider 注册
12
- * - window.env.webWalletUrl
13
- * - window.blocklet.webWalletUrl
14
- * - production web wallet url
15
- */
16
- export const getWebWalletUrl = () => {
17
- return window.localStorage.getItem(providerName) || window.env?.webWalletUrl || window.blocklet?.webWalletUrl || 'https://web.abtwallet.io/';
18
- };
19
-
20
- // 检查 wallet url protocol 和当前页面地址的 protocol 是否一致
21
- export const checkSameProtocol = webWalletUrl => {
22
- const {
23
- protocol
24
- } = window.location;
25
- let walletProtocol = '';
26
- try {
27
- walletProtocol = new URL(webWalletUrl).protocol;
28
- } catch (error) {
29
- walletProtocol = '';
30
- }
31
- return protocol === walletProtocol;
32
- };
package/es/Video/index.js DELETED
@@ -1,89 +0,0 @@
1
- import { useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import Player from 'react-player';
4
- import CircularProgress from '@mui/material/CircularProgress';
5
- import { mergeProps } from '../Util';
6
- import { styled } from '../Theme';
7
- import { jsx as _jsx } from "react/jsx-runtime";
8
- import { jsxs as _jsxs } from "react/jsx-runtime";
9
- const {
10
- string,
11
- number,
12
- array,
13
- oneOfType,
14
- object
15
- } = PropTypes;
16
- export default function Video(props) {
17
- const newProps = mergeProps(props, Video, ['style']);
18
- const {
19
- url,
20
- width,
21
- height,
22
- style
23
- } = newProps;
24
- const [loaded, setLoaded] = useState(false);
25
- const styles = Object.assign({
26
- border: 'none'
27
- }, style, {
28
- width,
29
- height,
30
- visibility: loaded ? 'visible' : 'hidden'
31
- });
32
- if (url.indexOf('v.qq.com') > 0) {
33
- return /*#__PURE__*/_jsxs(Placeholder, {
34
- style: {
35
- width,
36
- height
37
- },
38
- children: [/*#__PURE__*/_jsx("iframe", {
39
- title: url,
40
- style: styles,
41
- src: url,
42
- onLoad: () => setLoaded(true),
43
- allowFullScreen: true
44
- }), !loaded && /*#__PURE__*/_jsx(CircularProgress, {
45
- className: "loading-indicator",
46
- color: "primary"
47
- })]
48
- });
49
- }
50
- return /*#__PURE__*/_jsxs(Placeholder, {
51
- style: {
52
- width,
53
- height
54
- },
55
- children: [/*#__PURE__*/_jsx(Player, {
56
- style: styles,
57
- ...newProps,
58
- onReady: () => setLoaded(true)
59
- }), !loaded && /*#__PURE__*/_jsx(CircularProgress, {
60
- className: "loading-indicator",
61
- color: "primary"
62
- })]
63
- });
64
- }
65
- Video.propTypes = {
66
- url: oneOfType([string, array, object]).isRequired,
67
- width: oneOfType([string, number]),
68
- height: oneOfType([string, number]),
69
- style: oneOfType([string, object])
70
- };
71
- Video.defaultProps = {
72
- width: 640,
73
- height: 400,
74
- style: {}
75
- };
76
- const Placeholder = styled('div')`
77
- background-color: #222222;
78
- display: flex;
79
- justify-content: center;
80
- align-items: center;
81
- position: relative;
82
-
83
- .loading-indicator {
84
- position: absolute;
85
- top: 45%;
86
- left: 47%;
87
- z-index: 2;
88
- }
89
- `;
@@ -1,119 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import Typography from '@mui/material/Typography';
3
- import logo from './images/abtwallet.png';
4
- import { mergeProps } from '../Util';
5
- import colors from '../Colors';
6
- import Button from '../Button';
7
- import { styled } from '../Theme';
8
- import { jsx as _jsx } from "react/jsx-runtime";
9
- import { jsxs as _jsxs } from "react/jsx-runtime";
10
- export default function WalletAction(props) {
11
- const newProps = mergeProps(props, WalletAction, ['style']);
12
- const {
13
- action,
14
- size,
15
- textLayout,
16
- style = {},
17
- ...rest
18
- } = newProps;
19
- const styles = Object.assign({}, style, {
20
- border: 'none',
21
- padding: 0
22
- });
23
- return /*#__PURE__*/_jsx(Button, {
24
- style: styles,
25
- ...rest,
26
- variant: "outlined",
27
- children: /*#__PURE__*/_jsxs(Content, {
28
- size: size,
29
- color: styles.color,
30
- children: [/*#__PURE__*/_jsx("img", {
31
- src: logo,
32
- className: "wallet-action__logo",
33
- alt: "DID Wallet"
34
- }), textLayout === 'vertical' && /*#__PURE__*/_jsxs(Typography, {
35
- className: "wallet-action__text",
36
- component: "div",
37
- children: [/*#__PURE__*/_jsxs("span", {
38
- className: "wallet-action__action",
39
- children: [action, " with"]
40
- }), /*#__PURE__*/_jsx("span", {
41
- className: "wallet-action__title",
42
- children: "DID Wallet"
43
- })]
44
- }), textLayout === 'horizontal' && /*#__PURE__*/_jsxs("span", {
45
- className: "wallet-action__title",
46
- style: {
47
- padding: 8
48
- },
49
- children: [action, " with DID Wallet"]
50
- })]
51
- })
52
- });
53
- }
54
- WalletAction.propTypes = {
55
- action: PropTypes.string,
56
- size: PropTypes.oneOf(['xlarge', 'large', 'medium', 'small']),
57
- textLayout: PropTypes.oneOf(['vertical', 'horizontal']),
58
- style: PropTypes.oneOfType([PropTypes.object, PropTypes.string])
59
- };
60
- WalletAction.defaultProps = {
61
- action: 'Login',
62
- textLayout: 'vertical',
63
- size: 'medium',
64
- style: {}
65
- };
66
- const sizes = {
67
- logo: {
68
- small: 32,
69
- medium: 44,
70
- large: 56,
71
- xlarge: 88
72
- },
73
- font: {
74
- small: 9,
75
- medium: 11,
76
- large: 13,
77
- xlarge: 18
78
- }
79
- };
80
- const Content = styled('div')`
81
- display: flex;
82
- justify-content: center;
83
- align-items: center;
84
-
85
- &:hover {
86
- opacity: 0.9;
87
- }
88
-
89
- .wallet-action__logo {
90
- width: auto;
91
- height: auto;
92
- max-width: ${props => sizes.logo[props.size]}px;
93
- margin-left: 5px;
94
- }
95
-
96
- .wallet-action__text {
97
- padding: 8px;
98
- display: flex;
99
- height: 100%;
100
- flex-direction: column;
101
- justify-content: space-between;
102
- align-items: flex-start;
103
- }
104
-
105
- .wallet-action__action {
106
- font-size: ${props => sizes.font[props.size]}px;
107
- text-transform: capitalize;
108
- margin-bottom: 1px;
109
- color: ${props => props.color || colors.primary.main};
110
- letter-spacing: 1px;
111
- }
112
-
113
- .wallet-action__title {
114
- font-size: ${props => sizes.font[props.size] * 1.5}px;
115
- text-transform: capitalize;
116
- color: ${props => props.color || colors.primary.main};
117
- letter-spacing: 1px;
118
- }
119
- `;