@arcblock/ux 2.6.8 → 2.7.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 (164) hide show
  1. package/babel.config.es.js +12 -0
  2. package/es/ActionButton/index.js +99 -0
  3. package/es/ActivityIndicator/index.js +180 -0
  4. package/es/Address/compact-text.js +105 -0
  5. package/es/Address/did-address.js +211 -0
  6. package/es/Address/index.js +23 -0
  7. package/es/Address/responsive-did-address.js +88 -0
  8. package/es/Alert/index.js +134 -0
  9. package/es/AnimationWaiter/default-animation.json +1 -0
  10. package/es/AnimationWaiter/index.js +239 -0
  11. package/es/Async/index.js +38 -0
  12. package/es/Avatar/did-motif.js +64 -0
  13. package/es/Avatar/etherscan-blockies.js +83 -0
  14. package/es/Avatar/index.js +176 -0
  15. package/es/Badge/index.js +98 -0
  16. package/es/Blocklet/blocklet.js +298 -0
  17. package/es/Blocklet/index.js +4 -0
  18. package/es/Blocklet/utils.js +52 -0
  19. package/es/BlockletNFT/index.js +412 -0
  20. package/es/Button/index.js +8 -0
  21. package/es/Button/wrap.js +140 -0
  22. package/es/ButtonGroup/index.js +6 -0
  23. package/es/CardSelector/index.js +131 -0
  24. package/es/Center/index.js +41 -0
  25. package/es/ClickToCopy/copy-button.js +72 -0
  26. package/es/ClickToCopy/hook.js +39 -0
  27. package/es/ClickToCopy/index.js +93 -0
  28. package/es/CodeBlock/LightBox.js +85 -0
  29. package/es/CodeBlock/index.js +226 -0
  30. package/es/Colors/index.js +2 -0
  31. package/es/Colors/themes/default.js +78 -0
  32. package/es/ContactForm/index.js +230 -0
  33. package/es/CookieConsent/index.js +113 -0
  34. package/es/CountDown/index.js +178 -0
  35. package/es/DID/index.js +105 -0
  36. package/es/Datatable/CustomToolbar.js +396 -0
  37. package/es/Datatable/DatatableContext.js +34 -0
  38. package/es/Datatable/TableSearch.js +165 -0
  39. package/es/Datatable/index.js +627 -0
  40. package/es/Datatable/utils.js +132 -0
  41. package/es/Dialog/confirm.js +90 -0
  42. package/es/Dialog/dialog.js +192 -0
  43. package/es/Dialog/index.js +3 -0
  44. package/es/DidLogo/index.js +31 -0
  45. package/es/DriftBot/index.js +70 -0
  46. package/es/Earth/countries.json +8057 -0
  47. package/es/Earth/index.js +521 -0
  48. package/es/Earth/util.js +51 -0
  49. package/es/Empty/index.js +64 -0
  50. package/es/ErrorBoundary/fallback.js +73 -0
  51. package/es/ErrorBoundary/index.js +1 -0
  52. package/es/Footer/index.js +172 -0
  53. package/es/Header/auto-hidden.js +35 -0
  54. package/es/Header/header.js +211 -0
  55. package/es/Header/index.js +2 -0
  56. package/es/Header/responsive-header.js +111 -0
  57. package/es/Icon/image.js +65 -0
  58. package/es/Icon/index.js +84 -0
  59. package/es/Img/index.js +217 -0
  60. package/es/InfoRow/index.js +87 -0
  61. package/es/Layout/dashboard/external-link.js +58 -0
  62. package/es/Layout/dashboard/full-page.js +53 -0
  63. package/es/Layout/dashboard/index.js +275 -0
  64. package/es/Layout/dashboard/sidebar.js +209 -0
  65. package/es/Layout/dashboard-legacy/header.js +174 -0
  66. package/es/Layout/dashboard-legacy/index.js +149 -0
  67. package/es/Layout/dashboard-legacy/sidebar.js +129 -0
  68. package/es/Layout/index.js +335 -0
  69. package/es/Locale/browser-lang.js +52 -0
  70. package/es/Locale/context.js +114 -0
  71. package/es/Locale/languages.js +60 -0
  72. package/es/Locale/selector.js +180 -0
  73. package/es/Locale/util.js +13 -0
  74. package/es/Logo/images/logo-dark-text.svg +3 -0
  75. package/es/Logo/images/logo-dark-top.svg +6 -0
  76. package/es/Logo/images/logo-light-text.svg +3 -0
  77. package/es/Logo/images/logo-light-top.svg +6 -0
  78. package/es/Logo/index.js +136 -0
  79. package/es/Metric/index.js +132 -0
  80. package/es/NFTDisplay/README.md +59 -0
  81. package/es/NFTDisplay/aspect-ratio-container.js +39 -0
  82. package/es/NFTDisplay/broken.js +18 -0
  83. package/es/NFTDisplay/demo/data/asset-state-display-url.json +7 -0
  84. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-1-1.json +10 -0
  85. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-374-130.json +10 -0
  86. package/es/NFTDisplay/demo/data/asset-state-gzipped-svg-with-foreign-object.json +20 -0
  87. package/es/NFTDisplay/demo/data/asset-state-svg.json +29 -0
  88. package/es/NFTDisplay/demo/data/asset-state-url.json +10 -0
  89. package/es/NFTDisplay/index.js +323 -0
  90. package/es/NFTDisplay/loading.js +18 -0
  91. package/es/NFTDisplay/svg-embedder/img.js +45 -0
  92. package/es/NFTDisplay/svg-embedder/inline-svg.js +39 -0
  93. package/es/NavMenu/index.js +2 -0
  94. package/es/NavMenu/nav-menu.js +286 -0
  95. package/es/NavMenu/style.js +176 -0
  96. package/es/PageScroller/index.js +286 -0
  97. package/es/PageScroller/story/FifthComponent.js +9 -0
  98. package/es/PageScroller/story/FirstComponent.js +9 -0
  99. package/es/PageScroller/story/FourthComponent.js +12 -0
  100. package/es/PageScroller/story/FullPage.js +47 -0
  101. package/es/PageScroller/story/PageContain.js +59 -0
  102. package/es/PageScroller/story/SecondComponent.js +9 -0
  103. package/es/PageScroller/story/ThirdComponent.js +9 -0
  104. package/es/PageScroller/story/index.css +115 -0
  105. package/es/PageScroller/usePrevValue.js +9 -0
  106. package/es/PricingTable/PricingPlan.js +124 -0
  107. package/es/PricingTable/index.js +53 -0
  108. package/es/QRCode/index.js +72 -0
  109. package/es/RelativeTime/index.js +98 -0
  110. package/es/Result/common.js +140 -0
  111. package/es/Result/demo/fixtures/result-image-404.svg +1 -0
  112. package/es/Result/index.js +33 -0
  113. package/es/Result/result.js +59 -0
  114. package/es/Result/translations.js +54 -0
  115. package/es/Screenshot/BaseScreenshot/index.js +91 -0
  116. package/es/Screenshot/BaseScreenshot/shells/Macbook.js +51 -0
  117. package/es/Screenshot/BaseScreenshot/shells/Phone.js +36 -0
  118. package/es/Screenshot/demo/images/bg-00.jpg +0 -0
  119. package/es/Screenshot/demo/images/bg-01.jpg +0 -0
  120. package/es/Screenshot/demo/images/bg-02.jpg +0 -0
  121. package/es/Screenshot/demo/images/bg-03.jpg +0 -0
  122. package/es/Screenshot/demo/images/bg-04.jpg +0 -0
  123. package/es/Screenshot/demo/images/bg-05.jpg +0 -0
  124. package/es/Screenshot/demo/images/bg-06.jpg +0 -0
  125. package/es/Screenshot/demo/images/bg-07.jpg +0 -0
  126. package/es/Screenshot/demo/images/bg-08.jpg +0 -0
  127. package/es/Screenshot/demo/images/bg-09.jpg +0 -0
  128. package/es/Screenshot/devices.css +1366 -0
  129. package/es/Screenshot/index.js +299 -0
  130. package/es/SessionManager/federated-login-detecter.js +166 -0
  131. package/es/SessionManager/index.js +468 -0
  132. package/es/SessionManager/user-popper.js +132 -0
  133. package/es/Sparkline/index.js +193 -0
  134. package/es/Spinner/index.js +28 -0
  135. package/es/SplitButton/index.js +144 -0
  136. package/es/Switch/index.js +96 -0
  137. package/es/Tabs/index.js +48 -0
  138. package/es/Tag/index.js +108 -0
  139. package/es/TextCollapse/index.js +92 -0
  140. package/es/Theme/index.js +16 -0
  141. package/es/Theme/theme-provider.js +39 -0
  142. package/es/Theme/theme.js +133 -0
  143. package/es/Toast/index.js +95 -0
  144. package/es/Util/deprecate.js +28 -0
  145. package/es/Util/index.js +298 -0
  146. package/es/Util/wallet.js +32 -0
  147. package/es/Video/index.js +89 -0
  148. package/es/Wallet/Action.js +119 -0
  149. package/es/Wallet/Download.js +331 -0
  150. package/es/Wallet/Open.js +45 -0
  151. package/es/Wallet/images/abtwallet.png +0 -0
  152. package/es/Wallet/images/android_download.svg +23 -0
  153. package/es/Wallet/images/app-store.svg +20 -0
  154. package/es/Wallet/images/google-play.svg +70 -0
  155. package/es/WebWalletSWKeeper/index.js +115 -0
  156. package/es/WechatPrompt/images/android.png +0 -0
  157. package/es/WechatPrompt/images/ios.png +0 -0
  158. package/es/WechatPrompt/index.js +88 -0
  159. package/es/index.js +38 -0
  160. package/es/withTheme/index.js +69 -0
  161. package/es/withTracker/README.md +34 -0
  162. package/es/withTracker/error_boundary.js +34 -0
  163. package/es/withTracker/index.js +56 -0
  164. package/package.json +272 -5
@@ -0,0 +1,521 @@
1
+ /* eslint-disable consistent-return */
2
+ import { useReducer, useRef, useEffect } from 'react';
3
+ import useSpring from 'react-use/lib/useSpring';
4
+ import PropTypes from 'prop-types';
5
+ import * as d3 from 'd3-geo';
6
+ import * as topojson from 'topojson-client';
7
+ import versor from 'versor';
8
+ import json from './countries.json';
9
+ import util from './util';
10
+ import { withDeprecated } from '../Util/deprecate';
11
+ import { styled } from '../Theme';
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ const geoJson = topojson.feature(json, json.objects.ne_110m_admin_0_countries);
15
+ const themes = {
16
+ light: {
17
+ ocean: '#EDF4F4',
18
+ graticule: '#EDF4F4',
19
+ land: '#CCEAEA',
20
+ activeLand: '#AFD3D3',
21
+ border: '#AFD3D3',
22
+ marker: '#4E6AF6',
23
+ activeMarker: '#4E6AF6'
24
+ },
25
+ dark: {
26
+ ocean: '#09233B',
27
+ graticule: '#09233B',
28
+ land: '#0D2344',
29
+ activeLand: '#173159',
30
+ border: '#89DDD9',
31
+ marker: '#ffffff',
32
+ activeMarker: '#FFD159'
33
+ }
34
+ };
35
+ function stateReducer(state, action) {
36
+ switch (action.type) {
37
+ case 'dragEnd':
38
+ return {
39
+ ...state,
40
+ isDragging: false
41
+ };
42
+ case 'dragStart':
43
+ return {
44
+ ...state,
45
+ isDragging: true,
46
+ animationDuration: 1,
47
+ mousePosition: action.payload.mousePosition
48
+ };
49
+ case 'tooltip':
50
+ case 'rotate':
51
+ return Object.assign({}, state, action.payload);
52
+ default:
53
+ return state;
54
+ }
55
+ }
56
+ function Earth({
57
+ theme,
58
+ width,
59
+ height,
60
+ enableRotation,
61
+ rotationSpeed,
62
+ markers,
63
+ activeMarkerId,
64
+ colors
65
+ }) {
66
+ Object.assign(colors, themes[theme]);
67
+ const [state, dispatch] = useReducer(stateReducer, {
68
+ rotation: [0, 0, 0],
69
+ isDragging: false,
70
+ animateDuration: 1,
71
+ mousePosition: null,
72
+ tooltipIndex: -1
73
+ });
74
+ const svgRef = useRef(null);
75
+
76
+ // variables used to track drag and rotate
77
+ const dragRef = useRef({
78
+ v0: undefined,
79
+ r0: undefined,
80
+ q0: undefined
81
+ });
82
+
83
+ // variables used to track start and end position when there is active marker
84
+ const rotateRef = useRef({
85
+ p1: null,
86
+ p2: [0, 0],
87
+ r1: null,
88
+ r2: [0, 0, 0],
89
+ step: 0,
90
+ markerId: null,
91
+ iv: null
92
+ });
93
+
94
+ // console.log('renderGlobe', state, dragRef.current, rotateRef.current, geoJson);
95
+ const t = useSpring(state.animateDuration, 170, 26);
96
+ const isValid = activeMarkerId && rotateRef.current.markerId !== activeMarkerId && markers.some(x => x.id === activeMarkerId);
97
+
98
+ // Setup path for globe
99
+ const projection = d3.geoOrthographic().fitExtent([[30, 30], [width - 30, height - 30]], geoJson).rotate(t <= 1 || state.isDragging || !activeMarkerId ? state.rotation : rotateRef.current.iv(t / state.animateDuration));
100
+ const pathGenerator = d3.geoPath().projection(projection).pointRadius(2);
101
+ useEffect(() => {
102
+ // Rotate to active marker
103
+ if (isValid) {
104
+ // eslint-disable-next-line prefer-const
105
+ let {
106
+ p1,
107
+ p2,
108
+ r1,
109
+ r2,
110
+ markerId
111
+ } = rotateRef.current;
112
+ // We should only start new animation if the marker has changed
113
+ if (markerId !== activeMarkerId && !state.isDragging) {
114
+ const marker = markers.find(x => x.id === activeMarkerId);
115
+ p1 = p2;
116
+ p2 = [marker.longitude, marker.latitude];
117
+ r1 = r2;
118
+ r2 = [-p2[0], 20 - p2[1], projection.rotate()[2]];
119
+ const iv = util.interpolateAngles(r1, r2);
120
+ Object.assign(rotateRef.current, {
121
+ p1,
122
+ p2,
123
+ r1,
124
+ r2,
125
+ iv,
126
+ markerId: activeMarkerId
127
+ });
128
+ const duration = state.animateDuration * 2;
129
+ dispatch({
130
+ type: 'rotate',
131
+ payload: {
132
+ animateDuration: duration > 1e3 ? 2 : duration
133
+ }
134
+ });
135
+ }
136
+
137
+ // Enable auto rotation
138
+ } else if (enableRotation) {
139
+ const handler = window.requestAnimationFrame(() => {
140
+ const newRotation = [state.rotation[0] + 2 / rotationSpeed, state.rotation[1], state.rotation[2]];
141
+ dispatch({
142
+ type: 'rotate',
143
+ payload: {
144
+ rotation: newRotation
145
+ }
146
+ });
147
+ });
148
+ return function cleanup() {
149
+ window.cancelAnimationFrame(handler);
150
+ };
151
+ }
152
+ });
153
+ const getMousePosition = event => {
154
+ const node = svgRef.current;
155
+ const rect = node.getBoundingClientRect();
156
+ const mousePosition = [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
157
+ return mousePosition;
158
+ };
159
+ const onDragStart = event => {
160
+ const mousePosition = getMousePosition(event);
161
+ if (!mousePosition[0]) {
162
+ return;
163
+ }
164
+ dragRef.current.v0 = versor.cartesian(projection.invert(mousePosition));
165
+ dragRef.current.r0 = projection.rotate();
166
+ dragRef.current.q0 = versor(dragRef.current.r0);
167
+ dispatch({
168
+ type: 'dragStart',
169
+ payload: {
170
+ mousePosition
171
+ }
172
+ });
173
+ };
174
+ const onDrag = event => {
175
+ if (state.isDragging === false) {
176
+ return;
177
+ }
178
+ const mousePosition = getMousePosition(event);
179
+ const {
180
+ r0,
181
+ v0,
182
+ q0
183
+ } = dragRef.current;
184
+ const v1 = versor.cartesian(projection.rotate(r0).invert(mousePosition));
185
+ const q1 = versor.multiply(q0, versor.delta(v0, v1));
186
+ const r1 = versor.rotation(q1);
187
+ dispatch({
188
+ type: 'rotate',
189
+ payload: {
190
+ rotation: r1,
191
+ mousePosition
192
+ }
193
+ });
194
+ };
195
+ const onDragEnd = () => {
196
+ setTimeout(() => {
197
+ dispatch({
198
+ type: 'dragEnd',
199
+ payload: {}
200
+ });
201
+ }, 200);
202
+ };
203
+ const onShowTooltip = (event, i) => dispatch({
204
+ type: 'tooltip',
205
+ payload: {
206
+ tooltipIndex: i,
207
+ mousePosition: getMousePosition(event)
208
+ }
209
+ });
210
+ const onHideTooltip = () => dispatch({
211
+ type: 'tooltip',
212
+ payload: {
213
+ tooltipIndex: -1,
214
+ mousePosition: null
215
+ }
216
+ });
217
+ const renderMarkers = () => markers.map((x, i) => {
218
+ const areaCoords = [x.longitude, x.latitude];
219
+ const distance = d3.geoDistance(areaCoords, projection.invert([width / 2, height / 2]));
220
+ const sphereCoords = projection(areaCoords);
221
+ const isActive = activeMarkerId === x.id;
222
+ // eslint-disable-next-line no-nested-ternary
223
+ const fill = distance > 1.57 ? 'none' : isActive ? colors.activeMarker : colors.marker;
224
+ const radius = isActive ? 9 : 6;
225
+ return /*#__PURE__*/_jsxs("g", {
226
+ className: `marker ${isActive ? 'marker--active' : ''}`,
227
+ onFocus: event => onShowTooltip(event, i),
228
+ onBlur: onHideTooltip,
229
+ onMouseOver: event => onShowTooltip(event, i),
230
+ onMouseOut: onHideTooltip,
231
+ children: [/*#__PURE__*/_jsx("circle", {
232
+ className: "marker__inner",
233
+ r: radius,
234
+ cx: sphereCoords[0],
235
+ cy: sphereCoords[1],
236
+ fill: fill,
237
+ style: {
238
+ fillOpacity: isActive ? 1 : 0.5
239
+ }
240
+ }, "marker-inner"), /*#__PURE__*/_jsx("circle", {
241
+ className: "marker__outer",
242
+ r: radius * 2,
243
+ cx: sphereCoords[0],
244
+ cy: sphereCoords[1],
245
+ fill: fill,
246
+ style: {
247
+ animationDuration: isActive ? '800ms' : '1600ms',
248
+ animationDelay: `${i * 0.2}s`,
249
+ transformOrigin: `${sphereCoords[0]}px ${sphereCoords[1]}px`
250
+ }
251
+ }, "marker-outer")]
252
+ }, x.id);
253
+ });
254
+ const renderTooltip = () => {
255
+ if (state.tooltipIndex >= 0) {
256
+ const marker = markers[state.tooltipIndex];
257
+ return /*#__PURE__*/_jsxs(Tooltip, {
258
+ style: {
259
+ left: state.mousePosition[0],
260
+ top: state.mousePosition[1]
261
+ },
262
+ children: [/*#__PURE__*/_jsx("p", {
263
+ className: "title",
264
+ children: marker.title
265
+ }), /*#__PURE__*/_jsx("p", {
266
+ className: "description",
267
+ children: marker.description
268
+ }), /*#__PURE__*/_jsxs("p", {
269
+ className: "description",
270
+ children: ["ID: ", marker.id]
271
+ })]
272
+ });
273
+ }
274
+ };
275
+ let activeCountry = null;
276
+ if (activeMarkerId && markers.some(x => x.id === activeMarkerId)) {
277
+ const activeMarker = markers.find(x => x.id === activeMarkerId);
278
+ activeCountry = geoJson.features.findIndex(x => x.properties && x.properties.name && x.properties.name === activeMarker.country);
279
+ }
280
+ return /*#__PURE__*/_jsxs(Container, {
281
+ width: width,
282
+ height: height,
283
+ theme: theme,
284
+ colors: colors,
285
+ onMouseLeave: onDragEnd,
286
+ children: [renderTooltip(), /*#__PURE__*/_jsxs("svg", {
287
+ className: "earth",
288
+ width: width,
289
+ height: height,
290
+ onMouseDown: onDragStart,
291
+ onMouseMove: onDrag,
292
+ onMouseUp: onDragEnd,
293
+ ref: svgRef,
294
+ children: [/*#__PURE__*/_jsx("rect", {
295
+ className: "frame",
296
+ width: width,
297
+ height: height
298
+ }), /*#__PURE__*/_jsx("circle", {
299
+ cx: width / 2,
300
+ cy: height / 2,
301
+ r: projection.scale(),
302
+ className: "globe",
303
+ filter: "url(#glow)"
304
+ }), /*#__PURE__*/_jsx("path", {
305
+ className: "graticule",
306
+ d: pathGenerator(d3.geoGraticule().step([10, 10])())
307
+ }), /*#__PURE__*/_jsx("g", {
308
+ className: "features",
309
+ children: geoJson.features.map((x, i) => /*#__PURE__*/_jsx("path", {
310
+ className: `country ${activeCountry === i ? 'country--active' : ''}`,
311
+ d: pathGenerator(x)
312
+ }, x.properties.name))
313
+ }), /*#__PURE__*/_jsx("g", {
314
+ className: "markers",
315
+ children: renderMarkers()
316
+ }), state.isDragging && state.mousePosition && /*#__PURE__*/_jsx("path", {
317
+ className: "point point-mouse",
318
+ d: pathGenerator({
319
+ type: 'Point',
320
+ coordinates: projection.invert(state.mousePosition)
321
+ })
322
+ })]
323
+ }), /*#__PURE__*/_jsx("svg", {
324
+ className: "defs",
325
+ children: /*#__PURE__*/_jsxs("defs", {
326
+ children: [/*#__PURE__*/_jsxs("linearGradient", {
327
+ id: "gradBlue",
328
+ x1: "0%",
329
+ y1: "0%",
330
+ x2: "100%",
331
+ y2: "0%",
332
+ children: [/*#__PURE__*/_jsx("stop", {
333
+ offset: "0%",
334
+ style: {
335
+ stopColor: '#005C99',
336
+ stopOpacity: 1
337
+ }
338
+ }), /*#__PURE__*/_jsx("stop", {
339
+ offset: "100%",
340
+ style: {
341
+ stopColor: '#0099FF',
342
+ stopOpacity: 1
343
+ }
344
+ })]
345
+ }), /*#__PURE__*/_jsxs("filter", {
346
+ id: "glow",
347
+ children: [/*#__PURE__*/_jsx("feColorMatrix", {
348
+ type: "matrix",
349
+ values: "0 0 0 0 0 0 0 0 0.9 0 0 0 0 0.9 0 0 0 0 1 0"
350
+ }), /*#__PURE__*/_jsx("feGaussianBlur", {
351
+ stdDeviation: "5.5",
352
+ result: "coloredBlur"
353
+ }), /*#__PURE__*/_jsxs("feMerge", {
354
+ children: [/*#__PURE__*/_jsx("feMergeNode", {
355
+ in: "coloredBlur"
356
+ }), /*#__PURE__*/_jsx("feMergeNode", {
357
+ in: "SourceGraphic"
358
+ })]
359
+ })]
360
+ })]
361
+ })
362
+ })]
363
+ });
364
+ }
365
+ Earth.propTypes = {
366
+ theme: PropTypes.oneOf(['light', 'dark']),
367
+ width: PropTypes.number,
368
+ height: PropTypes.number,
369
+ enableRotation: PropTypes.bool,
370
+ rotationSpeed: PropTypes.number,
371
+ activeMarkerId: PropTypes.string,
372
+ markers: PropTypes.arrayOf(PropTypes.shape({
373
+ id: PropTypes.string.isRequired,
374
+ title: PropTypes.string.isRequired,
375
+ description: PropTypes.string.isRequired,
376
+ country: PropTypes.string.isRequired,
377
+ latitude: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
378
+ longitude: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired
379
+ })),
380
+ colors: PropTypes.shape({
381
+ ocean: PropTypes.string,
382
+ graticule: PropTypes.string,
383
+ land: PropTypes.string,
384
+ activeLand: PropTypes.string,
385
+ border: PropTypes.string,
386
+ marker: PropTypes.string,
387
+ activeMarker: PropTypes.string
388
+ })
389
+ };
390
+ Earth.defaultProps = {
391
+ theme: 'dark',
392
+ width: 1200,
393
+ height: 600,
394
+ enableRotation: false,
395
+ rotationSpeed: 5,
396
+ markers: [],
397
+ activeMarkerId: undefined,
398
+ colors: {}
399
+ };
400
+ export default withDeprecated(Earth, {
401
+ name: 'Earth'
402
+ });
403
+ const Container = styled('div')`
404
+ background-color: ${props => props.theme === 'light' ? '#f7f7f7' : '#222'};
405
+ width: ${props => props.width}px;
406
+ height: ${props => props.height}px;
407
+ position: relative;
408
+ animation-name: zoomIn;
409
+ animation-duration: 1s;
410
+ animation-iteration-count: 1;
411
+ animation-timing-function: ease;
412
+ user-select: none;
413
+
414
+ .defs {
415
+ height: 0;
416
+ width: 0;
417
+ }
418
+
419
+ .frame {
420
+ fill: none;
421
+ pointer-events: all;
422
+ }
423
+
424
+ .country {
425
+ fill: ${props => props.colors.land};
426
+ stroke: ${props => props.colors.border};
427
+ stroke-width: 0.5px;
428
+ transition: fill 300ms ease;
429
+
430
+ &:hover {
431
+ fill: ${props => props.colors.activeLand};
432
+ }
433
+ }
434
+
435
+ .country--active {
436
+ fill: ${props => props.colors.activeLand};
437
+ }
438
+
439
+ .globe {
440
+ fill: ${props => props.colors.ocean};
441
+ stroke: rgba(255, 255, 255, 0.5);
442
+ stroke-width: 0.25px;
443
+ }
444
+
445
+ .graticule {
446
+ fill: none;
447
+ stroke: ${props => props.colors.graticule};
448
+ }
449
+
450
+ .star {
451
+ fill: #fff;
452
+ stroke: rgba(255, 255, 255, 0.5);
453
+ stroke-width: 0.25px;
454
+ }
455
+
456
+ .marker {
457
+ .marker__outer {
458
+ fill-opacity: 0;
459
+ animation: scaleIn 2s infinite ease-in-out;
460
+ }
461
+ }
462
+
463
+ @keyframes zoomIn {
464
+ from {
465
+ opacity: 0;
466
+ transform: scale3d(0.1, 0.1, 0.1);
467
+ }
468
+
469
+ 50% {
470
+ opacity: 1;
471
+ }
472
+ }
473
+
474
+ @keyframes scaleIn {
475
+ from {
476
+ fill-opacity: 0.3;
477
+ transform: scale3d(0.5, 0.5, 0.5);
478
+ }
479
+ to {
480
+ fill-opacity: 0;
481
+ transform: scale3d(1.5, 1.5, 1.5);
482
+ }
483
+ }
484
+ `;
485
+ const Tooltip = styled('div')`
486
+ position: absolute;
487
+ width: auto;
488
+ min-width: 90px;
489
+ max-width: 320px;
490
+ padding: 8px 12px;
491
+ font-size: 14px;
492
+ background-color: #4a4a4a;
493
+ border-radius: 2px;
494
+ animation-name: fadeIn;
495
+ animation-duration: 250ms;
496
+ animation-iteration-count: 1;
497
+ animation-timing-function: ease;
498
+
499
+ .title,
500
+ .description {
501
+ margin: 0;
502
+ font-size: 16px;
503
+ color: #fff;
504
+ }
505
+
506
+ .description {
507
+ margin-top: ${props => props.theme.spacing(1)}px;
508
+ color: #fff;
509
+ font-size: 12px;
510
+ }
511
+
512
+ @keyframes fadeIn {
513
+ from {
514
+ opacity: 0;
515
+ }
516
+
517
+ to {
518
+ opacity: 1;
519
+ }
520
+ }
521
+ `;
@@ -0,0 +1,51 @@
1
+ /* eslint-disable */
2
+ // Code from: https://observablehq.com/@d3/world-tour
3
+ export default class Util {
4
+ static fromAngles([l, p, g]) {
5
+ l *= Math.PI / 360;
6
+ p *= Math.PI / 360;
7
+ g *= Math.PI / 360;
8
+ const sl = Math.sin(l);
9
+ const cl = Math.cos(l);
10
+ const sp = Math.sin(p);
11
+ const cp = Math.cos(p);
12
+ const sg = Math.sin(g);
13
+ const cg = Math.cos(g);
14
+ return [cl * cp * cg + sl * sp * sg, sl * cp * cg - cl * sp * sg, cl * sp * cg + sl * cp * sg, cl * cp * sg - sl * sp * cg];
15
+ }
16
+ static toAngles([a, b, c, d]) {
17
+ return [Math.atan2(2 * (a * b + c * d), 1 - 2 * (b * b + c * c)) * 180 / Math.PI, Math.asin(Math.max(-1, Math.min(1, 2 * (a * c - d * b)))) * 180 / Math.PI, Math.atan2(2 * (a * d + b * c), 1 - 2 * (c * c + d * d)) * 180 / Math.PI];
18
+ }
19
+ static interpolateAngles(a, b) {
20
+ const i = Util.interpolate(Util.fromAngles(a), Util.fromAngles(b));
21
+ return t => Util.toAngles(i(t));
22
+ }
23
+ static interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]) {
24
+ a2 -= a1, b2 -= b1, c2 -= c1, d2 -= d1;
25
+ const x = new Array(4);
26
+ return t => {
27
+ const l = Math.hypot(x[0] = a1 + a2 * t, x[1] = b1 + b2 * t, x[2] = c1 + c2 * t, x[3] = d1 + d2 * t);
28
+ x[0] /= l, x[1] /= l, x[2] /= l, x[3] /= l;
29
+ return x;
30
+ };
31
+ }
32
+ static interpolate([a1, b1, c1, d1], [a2, b2, c2, d2]) {
33
+ let dot = a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2;
34
+ if (dot < 0) a2 = -a2, b2 = -b2, c2 = -c2, d2 = -d2, dot = -dot;
35
+ if (dot > 0.9995) return Util.interpolateLinear([a1, b1, c1, d1], [a2, b2, c2, d2]);
36
+ const theta0 = Math.acos(Math.max(-1, Math.min(1, dot)));
37
+ const x = new Array(4);
38
+ const l = Math.hypot(a2 -= a1 * dot, b2 -= b1 * dot, c2 -= c1 * dot, d2 -= d1 * dot);
39
+ a2 /= l, b2 /= l, c2 /= l, d2 /= l;
40
+ return t => {
41
+ const theta = theta0 * t;
42
+ const s = Math.sin(theta);
43
+ const c = Math.cos(theta);
44
+ x[0] = a1 * c + a2 * s;
45
+ x[1] = b1 * c + b2 * s;
46
+ x[2] = c1 * c + c2 * s;
47
+ x[3] = d1 * c + d2 * s;
48
+ return x;
49
+ };
50
+ }
51
+ }
@@ -0,0 +1,64 @@
1
+ import PropTypes from 'prop-types';
2
+ import EmptyIcon from '@arcblock/icons/lib/EmptyIcon';
3
+ import { styled } from '../Theme';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ const Wrapper = styled('div')`
7
+ display: flex;
8
+ justify-content: center;
9
+ align-items: center;
10
+ flex-direction: column;
11
+ height: 100%;
12
+ min-height: 100px;
13
+ color: #999;
14
+ .empty-icon {
15
+ margin: 10px 0;
16
+ }
17
+ `;
18
+
19
+ /**
20
+ * Empty component to display empty state
21
+ * @typedef {{
22
+ * color?: string;
23
+ * size?: number;
24
+ * children?: import('react').ReactNode;
25
+ * } & import('react').ComponentPropsWithoutRef<"div"> } EmptyProps
26
+ */
27
+
28
+ /**
29
+ * Empty state component
30
+ * @param {EmptyProps} props
31
+ * @returns {JSX.Element}
32
+ */
33
+ function Empty({
34
+ color,
35
+ size,
36
+ children,
37
+ ...rest
38
+ }) {
39
+ return /*#__PURE__*/_jsxs(Wrapper, {
40
+ ...rest,
41
+ children: [/*#__PURE__*/_jsx(EmptyIcon, {
42
+ style: {
43
+ width: size,
44
+ height: size,
45
+ color
46
+ },
47
+ className: "empty-icon"
48
+ }), /*#__PURE__*/_jsx("div", {
49
+ className: "empty-content",
50
+ children: children
51
+ })]
52
+ });
53
+ }
54
+ Empty.propTypes = {
55
+ color: PropTypes.string,
56
+ size: PropTypes.number,
57
+ children: PropTypes.any
58
+ };
59
+ Empty.defaultProps = {
60
+ color: 'inherit',
61
+ size: 36,
62
+ children: null
63
+ };
64
+ export default Empty;
@@ -0,0 +1,73 @@
1
+ import PropTypes from 'prop-types';
2
+ import { red } from '@mui/material/colors';
3
+ import Button from '../Button';
4
+ import { styled } from '../Theme';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ import { jsxs as _jsxs } from "react/jsx-runtime";
7
+ function InternalErrorFallback({
8
+ title,
9
+ desc,
10
+ retryFunc
11
+ }) {
12
+ return /*#__PURE__*/_jsxs(Root, {
13
+ role: "alert",
14
+ children: [/*#__PURE__*/_jsx("h3", {
15
+ children: title
16
+ }), /*#__PURE__*/_jsx("pre", {
17
+ children: desc
18
+ }), retryFunc && /*#__PURE__*/_jsx(Button, {
19
+ variant: "contained",
20
+ color: "error",
21
+ size: "small",
22
+ onClick: retryFunc,
23
+ children: "Try again"
24
+ })]
25
+ });
26
+ }
27
+ InternalErrorFallback.propTypes = {
28
+ title: PropTypes.string,
29
+ desc: PropTypes.string.isRequired,
30
+ retryFunc: PropTypes.func
31
+ };
32
+ InternalErrorFallback.defaultProps = {
33
+ title: 'Something went wrong...',
34
+ retryFunc: null
35
+ };
36
+ export function ErrorFallback({
37
+ error
38
+ }) {
39
+ return /*#__PURE__*/_jsx(InternalErrorFallback, {
40
+ desc: error.message
41
+ });
42
+ }
43
+ ErrorFallback.propTypes = {
44
+ error: PropTypes.instanceOf(Error).isRequired
45
+ };
46
+ export function ErrorFallbackRetry({
47
+ error,
48
+ resetErrorBoundary
49
+ }) {
50
+ return /*#__PURE__*/_jsx(InternalErrorFallback, {
51
+ desc: error.message,
52
+ retryFunc: resetErrorBoundary
53
+ });
54
+ }
55
+ ErrorFallbackRetry.propTypes = {
56
+ error: PropTypes.instanceOf(Error).isRequired,
57
+ resetErrorBoundary: PropTypes.func.isRequired
58
+ };
59
+ const Root = styled('div')`
60
+ padding: 16px;
61
+ border: 2px solid ${props => props.theme.palette.error.main};
62
+ border-radius: 4px;
63
+ color: ${props => props.theme.palette.error.main};
64
+ background-color: ${red[50]};
65
+ font-size: 14px;
66
+ h3 {
67
+ margin: 0;
68
+ font-size: 16px;
69
+ }
70
+ pre {
71
+ white-space: normal;
72
+ }
73
+ `;
@@ -0,0 +1 @@
1
+ export * from './fallback';