UNPKG

5.53 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var slicedToArray = require('./slicedToArray-ef426d0f.js');
8require('./unsupportedIterableToArray-8a00e599.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13require('./defineProperty-0921a47c.js');
14require('./toConsumableArray-7f36359f.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./getPrototypeOf-e2d1e599.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21require('./css.js');
22require('./dayjs.min-aa59a48e.js');
23require('./date.js');
24require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-ecfd5d91.js');
28require('./characters.js');
29require('./format.js');
30require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33require('./theme-dark.js');
34require('./theme-light.js');
35var Theme = require('./Theme.js');
36var _extends = require('./extends-40571110.js');
37var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
38var index$1 = require('./index-ecc57c9f.js');
39
40var spin = _styled.keyframes(["from{transform:rotate(0deg);}to{transform:rotate(360deg);}"]);
41var SIZE_SMALL = 14;
42var SIZE_MEDIUM = 24;
43var CONTAINER_SIZE_SMALL = 22;
44var CONTAINER_SIZE_MEDIUM = 24;
45var BORDER_WIDTH_STRONG = 2.5;
46var BORDER_WIDTH_MEDIUM = 1;
47var lastInstanceId = 1;
48
49var _StyledSpan = _styled__default("span").withConfig({
50 displayName: "LoadingRing___StyledSpan",
51 componentId: "iauf6f-0"
52})(["position:relative;display:flex;align-items:center;justify-content:center;width:", "px;height:", "px;"], function (p) {
53 return p._css;
54}, function (p) {
55 return p._css2;
56});
57
58var _StyledCircle = _styled__default("circle").withConfig({
59 displayName: "LoadingRing___StyledCircle",
60 componentId: "iauf6f-1"
61})(["animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear;animation-name:", ";transform-origin:50% 50%;"], function (p) {
62 return p._css3;
63});
64
65var LoadingRing = /*#__PURE__*/React__default.memo(function LoadingRing(_ref) {
66 var paused = _ref.paused,
67 modeProp = _ref.mode,
68 props = objectWithoutProperties._objectWithoutProperties(_ref, ["paused", "mode"]);
69
70 var theme = Theme.useTheme();
71
72 var _useState = React.useState(function () {
73 return "sync-indicator-".concat(lastInstanceId++);
74 }),
75 _useState2 = slicedToArray._slicedToArray(_useState, 1),
76 instanceId = _useState2[0];
77
78 var _useInside = index$1.o('FloatIndicator'),
79 _useInside2 = slicedToArray._slicedToArray(_useInside, 1),
80 insideFloatIndicator = _useInside2[0];
81
82 var mode = modeProp || (insideFloatIndicator ? 'half-circle' : 'two-parts');
83 var containerSize = mode === 'half-circle' ? CONTAINER_SIZE_MEDIUM : CONTAINER_SIZE_SMALL;
84 var borderWidth = mode === 'half-circle' ? BORDER_WIDTH_STRONG : BORDER_WIDTH_MEDIUM;
85 var size = (mode === 'half-circle' ? SIZE_MEDIUM : SIZE_SMALL) - borderWidth;
86
87 var _useMemo = React.useMemo(function () {
88 var length = Math.PI * size; // Both modes display a full circle when paused.
89
90 if (paused) {
91 return [0, length];
92 }
93
94 if (mode === 'two-parts') {
95 return [length / 4, length / 4];
96 } // half-circle
97
98
99 return [length / 2, length / 2];
100 }, [mode, size, paused]),
101 _useMemo2 = slicedToArray._slicedToArray(_useMemo, 2),
102 gapLength = _useMemo2[0],
103 dashLength = _useMemo2[1];
104
105 return /*#__PURE__*/React__default.createElement(_StyledSpan, _extends._extends({}, props, {
106 _css: containerSize,
107 _css2: containerSize
108 }), /*#__PURE__*/React__default.createElement("svg", {
109 width: size + borderWidth,
110 height: size + borderWidth,
111 viewBox: "0 0 ".concat(size + borderWidth, " ").concat(size + borderWidth)
112 }, /*#__PURE__*/React__default.createElement("linearGradient", {
113 id: "".concat(instanceId, "-gradient"),
114 gradientTransform: "rotate(90)"
115 }, /*#__PURE__*/React__default.createElement("stop", {
116 offset: "0%",
117 stopColor: theme.accentEnd
118 }), /*#__PURE__*/React__default.createElement("stop", {
119 offset: "100%",
120 stopColor: theme.accentStart
121 })), insideFloatIndicator && /*#__PURE__*/React__default.createElement("circle", {
122 cx: "50%",
123 cy: "50%",
124 r: size / 2,
125 fill: "transparent",
126 stroke: theme.floatingContent.alpha(0.3),
127 strokeWidth: borderWidth
128 }), /*#__PURE__*/React__default.createElement("mask", {
129 id: "".concat(instanceId, "-mask")
130 }, /*#__PURE__*/React__default.createElement(_StyledCircle, {
131 cx: "50%",
132 cy: "50%",
133 r: size / 2,
134 fill: "transparent",
135 stroke: "url(#".concat(instanceId, "-gradient)"),
136 strokeWidth: borderWidth,
137 strokeDasharray: "".concat(dashLength, " ").concat(gapLength),
138 _css3: paused ? 'none' : spin
139 })), /*#__PURE__*/React__default.createElement("circle", {
140 cx: "50%",
141 cy: "50%",
142 r: size / 2 + borderWidth / 2,
143 fill: "url(#".concat(instanceId, "-gradient)"),
144 mask: "url(#".concat(instanceId, "-mask)")
145 })));
146});
147LoadingRing.propTypes = {
148 mode: index.PropTypes.oneOf(['two-parts', 'half-circle']),
149 paused: index.PropTypes.bool
150};
151LoadingRing.defaultProps = {
152 paused: false
153};
154
155exports.default = LoadingRing;
156//# sourceMappingURL=LoadingRing.js.map