@semcore/spin-container 3.1.0 → 5.0.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
+ ## [5.0.0] - 2022-02-22
6
+
7
+ ### BREAK
8
+
9
+ - Add new children component `SpinContainer.Content` when using advanced mode along with `SpinContainer.Overlay`.
10
+
11
+ ## [4.0.1] - 2021-8-26
12
+
13
+ ### Changed
14
+
15
+ - Add 'sideEffect=false' for more optimal build via webpack
16
+
17
+ ## [4.0.0] - 2021-07-05
18
+
19
+ ### BREAK
20
+
21
+ - Replace animation from package `react-transition-group` to `@semcore/animation`.
22
+
23
+ ### Changed
24
+
25
+ - Version of dependence `@semcore/core` has been changed to `1.11`.
26
+ - Improved performance. Removed one component wrapper.
27
+ - The style processing system has been changed.
28
+ - Removed the ability to apply media styles via a plugin `babel-plugin-react-semcore`.
29
+ - [TS] rewrite code from TS to JS.
30
+
5
31
  ## [3.1.0] - 2020-12-17
6
32
 
7
33
  ### Added
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
10
  exports["default"] = void 0;
11
11
 
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
13
 
16
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -23,13 +21,11 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
23
21
 
24
22
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
23
 
26
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
24
+ var _core = _interopRequireWildcard(require("@semcore/core"));
27
25
 
28
26
  var _react = _interopRequireDefault(require("react"));
29
27
 
30
- var _core = _interopRequireWildcard(require("@semcore/core"));
31
-
32
- var _reactTransitionGroup = require("react-transition-group");
28
+ var _animation = require("@semcore/animation");
33
29
 
34
30
  var _spin = _interopRequireDefault(require("@semcore/spin"));
35
31
 
@@ -37,44 +33,36 @@ var _flexBox = require("@semcore/flex-box");
37
33
 
38
34
  var _color = _interopRequireDefault(require("@semcore/utils/lib/color"));
39
35
 
40
- var _getOriginChildren = _interopRequireDefault(require("@semcore/utils/lib/getOriginChildren"));
36
+ var _findComponent = require("@semcore/utils/lib/findComponent");
37
+
38
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
+
40
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
+
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
45
 
42
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
43
47
 
44
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
48
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
49
 
46
50
  /*__reshadow-styles__:"./style/spin-container.shadow.css"*/
47
- var _ref = (
51
+ var style = (
48
52
  /*__reshadow_css_start__*/
49
- (0, _core.__css__)(
53
+ _core.sstyled.insert(
50
54
  /*__inner_css_start__*/
51
- ".___SSpinContainer_122x3_gg_{z-index:0;position:relative;display:block}.___SContent_122x3_gg_{z-index:0;position:relative}.___SOverlay_122x3_gg_{z-index:1;display:flex;width:100%;height:100%;justify-content:center;align-items:center;position:absolute;top:0;left:0;background-color:hsla(0,0%,100%,.85)}._animate--enter_1p3sp_gg_{opacity:.01}._animate--enter-active_1mtt8_gg_,._animate--exit_yqdt9_gg_{opacity:1}._animate--exit-active_15k97_gg_{opacity:.01}"
55
+ ".___SSpinContainer_1fs6p_gg_{z-index:0;position:relative;display:block}.___SContent_1fs6p_gg_{z-index:0;position:relative}.___SOverlay_1fs6p_gg_{z-index:1;display:flex;width:100%;height:100%;justify-content:center;align-items:center;position:absolute;top:0;left:0;background-color:hsla(0,0%,100%,.85)}.___SOverlay_1fs6p_gg_.__background_1fs6p_gg_{background:var(--background_18krv29)}"
52
56
  /*__inner_css_end__*/
53
- , "oca35l_gg_")
57
+ , "18krv29_gg_")
54
58
  /*__reshadow_css_end__*/
55
59
  , {
56
- "__SSpinContainer": "___SSpinContainer_122x3_gg_",
57
- "__SContent": "___SContent_122x3_gg_",
58
- "__SOverlay": "___SOverlay_122x3_gg_",
59
- "animate--enter": "_animate--enter_1p3sp_gg_",
60
- "animate--enter-active": "_animate--enter-active_1mtt8_gg_",
61
- "animate--exit": "_animate--exit_yqdt9_gg_",
62
- "animate--exit-active": "_animate--exit-active_15k97_gg_"
63
- }),
64
- style = (0, _extends2["default"])({}, _ref);
65
-
66
- var styled_c8 = (0, _core.create)([(
67
- /*__reshadow_css_start__*/
68
- (0, _core.__css__)(
69
- /*__inner_css_start__*/
70
- "._animate--enter-active_14twg_gg_,._animate--exit-active_1o8ww_gg_{transition:opacity var(--yk7jne_0) ease-out}"
71
- /*__inner_css_end__*/
72
- , "qcxlle_gg_")
73
- /*__reshadow_css_end__*/
74
- , {
75
- "animate--exit-active": "_animate--exit-active_1o8ww_gg_",
76
- "animate--enter-active": "_animate--enter-active_14twg_gg_"
77
- })]);
60
+ "__SSpinContainer": "___SSpinContainer_1fs6p_gg_",
61
+ "__SContent": "___SContent_1fs6p_gg_",
62
+ "__SOverlay": "___SOverlay_1fs6p_gg_",
63
+ "_background": "__background_1fs6p_gg_",
64
+ "--background": "--background_18krv29"
65
+ });
78
66
 
79
67
  var SpinContainerRoot = /*#__PURE__*/function (_Component) {
80
68
  (0, _inherits2["default"])(SpinContainerRoot, _Component);
@@ -90,11 +78,17 @@ var SpinContainerRoot = /*#__PURE__*/function (_Component) {
90
78
  key: "getOverlayProps",
91
79
  value: function getOverlayProps() {
92
80
  var _this$asProps = this.asProps,
81
+ loading = _this$asProps.loading,
93
82
  background = _this$asProps.background,
83
+ duration = _this$asProps.duration,
94
84
  size = _this$asProps.size,
95
85
  theme = _this$asProps.theme;
96
86
  return {
97
87
  background: background,
88
+ // for Animated
89
+ loading: loading,
90
+ duration: duration,
91
+ // for Spin
98
92
  size: size,
99
93
  theme: theme
100
94
  };
@@ -102,40 +96,15 @@ var SpinContainerRoot = /*#__PURE__*/function (_Component) {
102
96
  }, {
103
97
  key: "render",
104
98
  value: function render() {
105
- var SSpinContainer = this.Root;
106
- var SContent = _flexBox.Box;
99
+ var _ref = this ? this.asProps : arguments[0],
100
+ _ref4;
101
+
102
+ var SSpinContainer = _flexBox.Box;
107
103
  var _this$asProps2 = this.asProps,
108
104
  styles = _this$asProps2.styles,
109
- ChildrenRoot = _this$asProps2.Children,
110
- duration = _this$asProps2.duration,
111
- loading = _this$asProps2.loading;
112
- var transitionDuration = "".concat(duration, "ms");
113
-
114
- var _overlayChildren = overlayChildren(ChildrenRoot, SpinContainer.Overlay),
115
- _overlayChildren2 = (0, _slicedToArray2["default"])(_overlayChildren, 2),
116
- Children = _overlayChildren2[0],
117
- Overlay = _overlayChildren2[1];
118
-
119
- return (0, _core.styled)(((0, _core.set)([styled_c8, styles], {
120
- "--yk7jne_0": transitionDuration
121
- }), /*#__PURE__*/_react["default"].createElement(SSpinContainer, (0, _core.map)("SSpinContainer", {
122
- render: _flexBox.Box,
123
- $$style: _core.styled.$$style
124
- }), /*#__PURE__*/_react["default"].createElement(SContent, {
125
- className: _core.styled.styles["__SContent"]
126
- }, Children), /*#__PURE__*/_react["default"].createElement(_reactTransitionGroup.CSSTransition, (0, _core.map)("CSSTransition", {
127
- "in": loading,
128
- timeout: duration,
129
- classNames: {
130
- enterActive: _core.styled.styles['animate--enter-active'],
131
- exitActive: _core.styled.styles['animate--exit-active'],
132
- enter: _core.styled.styles['animate--enter'],
133
- exit: _core.styled.styles['animate--exit']
134
- },
135
- unmountOnExit: true
136
- }), Overlay || /*#__PURE__*/_react["default"].createElement(SpinContainer.Overlay, {
137
- className: _core.styled.styles["__SpinContainer.Overlay"]
138
- })))));
105
+ Children = _this$asProps2.Children;
106
+ var advanceMode = (0, _findComponent.isAdvanceMode)(Children, [SpinContainer.Content.displayName, SpinContainer.Overlay.displayName]);
107
+ return _ref4 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SSpinContainer, _ref4.cn("SSpinContainer", _objectSpread({}, (0, _core.assignProps)({}, _ref))), advanceMode ? /*#__PURE__*/_react["default"].createElement(Children, _ref4.cn("Children", {})) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(SpinContainer.Content, null, /*#__PURE__*/_react["default"].createElement(Children, _ref4.cn("Children", {}))), /*#__PURE__*/_react["default"].createElement(SpinContainer.Overlay, null)));
139
108
  }
140
109
  }]);
141
110
  return SpinContainerRoot;
@@ -149,47 +118,6 @@ var SpinContainerRoot = /*#__PURE__*/function (_Component) {
149
118
  duration: 200
150
119
  });
151
120
 
152
- function overlayChildren(Children, Overlay) {
153
- var children = (0, _getOriginChildren["default"])(Children);
154
-
155
- if (typeof children === 'function') {
156
- return [/*#__PURE__*/_react["default"].createElement(Children, null), null];
157
- }
158
-
159
- var OverlayChildren = null;
160
- return [_react["default"].Children.toArray(children).map(function (element) {
161
- if (! /*#__PURE__*/_react["default"].isValidElement(element)) return element;
162
- if (element.type === _react["default"].Fragment) return element;
163
-
164
- if (element.type[_core.CHILDREN_COMPONENT]) {
165
- return overlayChildren(element.type, Overlay);
166
- } // @ts-ignore
167
-
168
-
169
- var inheritedNames = element.type[_core.INHERITED_NAME] || [element.type.displayName];
170
-
171
- if (inheritedNames.includes(Overlay.displayName)) {
172
- OverlayChildren = element;
173
- return null;
174
- }
175
-
176
- return element;
177
- }), OverlayChildren];
178
- }
179
-
180
- var styled_12c = (0, _core.create)([(
181
- /*__reshadow_css_start__*/
182
- (0, _core.__css__)(
183
- /*__inner_css_start__*/
184
- ".___SOverlay_vnp1p_gg_.__background_vnp1p_gg_{background:var(--yk7jne_0)}"
185
- /*__inner_css_end__*/
186
- , "h4gl6o_gg_")
187
- /*__reshadow_css_end__*/
188
- , {
189
- "__SOverlay": "___SOverlay_vnp1p_gg_",
190
- "_background": "__background_vnp1p_gg_"
191
- })]);
192
-
193
121
  var Overlay = /*#__PURE__*/function (_Component2) {
194
122
  (0, _inherits2["default"])(Overlay, _Component2);
195
123
 
@@ -203,25 +131,29 @@ var Overlay = /*#__PURE__*/function (_Component2) {
203
131
  (0, _createClass2["default"])(Overlay, [{
204
132
  key: "render",
205
133
  value: function render() {
206
- var SOverlay = this.Root;
134
+ var _ref2 = this ? this.asProps : arguments[0],
135
+ _ref5;
136
+
137
+ var SOverlay = _flexBox.Box;
207
138
  var _this$asProps3 = this.asProps,
139
+ styles = _this$asProps3.styles,
208
140
  background = _this$asProps3.background,
209
- styles = _this$asProps3.styles;
210
- return (0, _core.styled)(((0, _core.set)([styled_12c, styles], {
211
- "--yk7jne_0": (0, _color["default"])(background)
212
- }), /*#__PURE__*/_react["default"].createElement(SOverlay, (0, _core.map)("SOverlay", {
213
- render: _flexBox.Box,
214
- background: background,
215
- $$style: _core.styled.$$style
216
- }))));
141
+ loading = _this$asProps3.loading,
142
+ duration = _this$asProps3.duration;
143
+ return _ref5 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(_animation.FadeInOut, _ref5.cn("FadeInOut", {
144
+ "visible": loading,
145
+ "duration": duration
146
+ }), /*#__PURE__*/_react["default"].createElement(SOverlay, _ref5.cn("SOverlay", _objectSpread({}, (0, _core.assignProps)({
147
+ "use:background": (0, _color["default"])(background)
148
+ }, _ref2)))));
217
149
  }
218
150
  }]);
219
151
  return Overlay;
220
152
  }(_core.Component);
221
153
 
222
- (0, _defineProperty2["default"])(Overlay, "defaultProps", function (_ref2) {
223
- var size = _ref2.size,
224
- theme = _ref2.theme;
154
+ (0, _defineProperty2["default"])(Overlay, "defaultProps", function (_ref7) {
155
+ var size = _ref7.size,
156
+ theme = _ref7.theme;
225
157
  return {
226
158
  children: /*#__PURE__*/_react["default"].createElement(_spin["default"], {
227
159
  size: size,
@@ -229,8 +161,19 @@ var Overlay = /*#__PURE__*/function (_Component2) {
229
161
  })
230
162
  };
231
163
  });
164
+
165
+ function Content(props) {
166
+ var _ref3 = this ? this.asProps : arguments[0],
167
+ _ref6;
168
+
169
+ var SContent = _flexBox.Box;
170
+ var styles = props.styles;
171
+ return _ref6 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SContent, _ref6.cn("SContent", _objectSpread({}, (0, _core.assignProps)({}, _ref3))));
172
+ }
173
+
232
174
  var SpinContainer = (0, _core["default"])(SpinContainerRoot, {
233
- Overlay: Overlay
175
+ Overlay: Overlay,
176
+ Content: Content
234
177
  });
235
178
  var _default = SpinContainer;
236
179
  exports["default"] = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/SpinContainer.tsx"],"names":["SpinContainerRoot","asProps","background","size","theme","SSpinContainer","Root","SContent","Box","styles","ChildrenRoot","Children","duration","loading","transitionDuration","overlayChildren","SpinContainer","Overlay","enterActive","styled","exitActive","enter","exit","Component","style","children","OverlayChildren","React","toArray","map","element","isValidElement","type","Fragment","CHILDREN_COMPONENT","inheritedNames","INHERITED_NAME","displayName","includes","SOverlay"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport createComponent, {\n CHILDREN_COMPONENT,\n Component,\n INHERITED_NAME,\n Merge,\n PropGetter,\n styled,\n} from '@semcore/core';\nimport { CSSTransition } from 'react-transition-group';\nimport Spin, { ISpinProps } from '@semcore/spin';\nimport { Box, IBoxProps } from '@semcore/flex-box';\nimport resolveColor from '@semcore/utils/lib/color';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\n\nimport style from './style/spin-container.shadow.css';\n\nexport interface ISpinContainerProps extends IBoxProps, ISpinProps {\n /**\n * Color of container spinner; you can use your own color\n */\n background?: string;\n /** Duration of animation displaying in ms\n * @default 200\n */\n duration?: number;\n /**\n * Property responsible for displaying the spinner\n * */\n loading?: boolean;\n}\n\nexport interface ISpinContainerContext extends ISpinContainerProps {\n getOverlayProps: PropGetter<SpinContainerRoot['getOverlayProps']>;\n}\n\nclass SpinContainerRoot extends Component<ISpinContainerProps> {\n static displayName = 'SpinContainer';\n static style = style;\n static defaultProps = {\n size: 'xxl',\n theme: 'dark',\n duration: 200,\n };\n\n getOverlayProps() {\n const { background, size, theme } = this.asProps;\n return {\n background,\n size,\n theme,\n };\n }\n\n render() {\n const SSpinContainer = this.Root;\n const SContent = Box;\n const { styles, Children: ChildrenRoot, duration, loading } = this.asProps;\n const transitionDuration = `${duration}ms`;\n\n const [Children, Overlay] = overlayChildren(ChildrenRoot, SpinContainer.Overlay);\n\n return styled(styles)`\n .animate--exit-active,\n .animate--enter-active {\n transition: opacity ${transitionDuration} ease-out;\n }\n `(\n <SSpinContainer render={Box}>\n <SContent>{Children}</SContent>\n <CSSTransition\n in={loading}\n timeout={duration}\n classNames={{\n enterActive: styled.styles['animate--enter-active'],\n exitActive: styled.styles['animate--exit-active'],\n enter: styled.styles['animate--enter'],\n exit: styled.styles['animate--exit'],\n }}\n unmountOnExit\n >\n {Overlay || <SpinContainer.Overlay />}\n </CSSTransition>\n </SSpinContainer>,\n );\n }\n}\n\nfunction overlayChildren(Children: any, Overlay: React.ComponentType) {\n const children = getOriginChildren(Children);\n if (typeof children === 'function') {\n return [<Children />, null];\n }\n\n let OverlayChildren = null;\n return [\n React.Children.toArray(children).map((element) => {\n if (!React.isValidElement(element)) return element;\n if (element.type === React.Fragment) return element;\n if (element.type[CHILDREN_COMPONENT]) {\n return overlayChildren(element.type, Overlay);\n }\n // @ts-ignore\n const inheritedNames = element.type[INHERITED_NAME] || [element.type.displayName];\n if (inheritedNames.includes(Overlay.displayName)) {\n OverlayChildren = element;\n return null;\n }\n return element;\n }),\n OverlayChildren,\n ];\n}\n\nexport interface ISpinContainerOverlayProps extends IBoxProps {\n background?: string;\n}\n\nclass Overlay extends Component<ISpinContainerOverlayProps> {\n static defaultProps = ({ size, theme }) => ({\n children: <Spin size={size} theme={theme} />,\n });\n\n render() {\n const SOverlay = this.Root;\n const { background, styles } = this.asProps;\n\n return styled(styles)`\n SOverlay[background] {\n background: ${resolveColor(background)};\n }\n `(<SOverlay render={Box} background={background} />);\n }\n}\n\nconst SpinContainer = createComponent<\n Merge<ISpinContainerProps, HTMLAttributes<HTMLDivElement>>,\n {\n Overlay: Merge<ISpinContainerOverlayProps, HTMLAttributes<HTMLDivElement>>;\n },\n ISpinContainerContext\n>(SpinContainerRoot, { Overlay });\n\nexport default SpinContainer;\n"],"file":"SpinContainer.js"}
1
+ {"version":3,"sources":["../../src/SpinContainer.js"],"names":["SpinContainerRoot","asProps","loading","background","duration","size","theme","SSpinContainer","Box","styles","Children","advanceMode","SpinContainer","Content","displayName","Overlay","Component","style","SOverlay","children","props","SContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA;;AADA;;AAEA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIMA,iB;;;;;;;;;;;;WASJ,2BAAkB;AAChB,0BAAuD,KAAKC,OAA5D;AAAA,UAAQC,OAAR,iBAAQA,OAAR;AAAA,UAAiBC,UAAjB,iBAAiBA,UAAjB;AAAA,UAA6BC,QAA7B,iBAA6BA,QAA7B;AAAA,UAAuCC,IAAvC,iBAAuCA,IAAvC;AAAA,UAA6CC,KAA7C,iBAA6CA,KAA7C;AACA,aAAO;AACLH,QAAAA,UAAU,EAAVA,UADK;AAEL;AACAD,QAAAA,OAAO,EAAPA,OAHK;AAILE,QAAAA,QAAQ,EAARA,QAJK;AAKL;AACAC,QAAAA,IAAI,EAAJA,IANK;AAOLC,QAAAA,KAAK,EAALA;AAPK,OAAP;AASD;;;WAED,kBAAS;AAAA;AAAA;;AACP,UAAMC,cAAc,GASMC,YAT1B;AACA,2BAA6B,KAAKP,OAAlC;AAAA,UAAQQ,MAAR,kBAAQA,MAAR;AAAA,UAAgBC,QAAhB,kBAAgBA,QAAhB;AAEA,UAAMC,WAAW,GAAG,kCAAcD,QAAd,EAAwB,CAC1CE,aAAa,CAACC,OAAd,CAAsBC,WADoB,EAE1CF,aAAa,CAACG,OAAd,CAAsBD,WAFoB,CAAxB,CAApB;AAKA,qBAAO,mBAAQL,MAAR,CAAP,eACE,gCAAC,cAAD,mFACGE,WAAW,gBACV,gCAAC,QAAD,2BADU,gBAGV,+EACE,gCAAC,aAAD,CAAe,OAAf,qBACE,gCAAC,QAAD,2BADF,CADF,eAIE,gCAAC,aAAD,CAAe,OAAf,OAJF,CAJJ,CADF;AAcD;;;EA7C6BK,e;;iCAA1BhB,iB,iBACiB,e;iCADjBA,iB,WAEWiB,K;iCAFXjB,iB,kBAGkB;AACpBK,EAAAA,IAAI,EAAE,KADc;AAEpBC,EAAAA,KAAK,EAAE,MAFa;AAGpBF,EAAAA,QAAQ,EAAE;AAHU,C;;IA6ClBW,O;;;;;;;;;;;;WAKJ,kBAAS;AAAA;AAAA;;AACP,UAAMG,QAAQ,GAKQV,YALtB;AACA,2BAAkD,KAAKP,OAAvD;AAAA,UAAQQ,MAAR,kBAAQA,MAAR;AAAA,UAAgBN,UAAhB,kBAAgBA,UAAhB;AAAA,UAA4BD,OAA5B,kBAA4BA,OAA5B;AAAA,UAAqCE,QAArC,kBAAqCA,QAArC;AAEA,qBAAO,mBAAQK,MAAR,CAAP,eACE,gCAAC,oBAAD;AAAA,mBAAoBP,OAApB;AAAA,oBAAuCE;AAAvC,uBACE,gCAAC,QAAD;AAAA,0BAAuC,uBAAaD,UAAb;AAAvC,kBADF,CADF;AAKD;;;EAdmBa,e;;iCAAhBD,O,kBACkB;AAAA,MAAGV,IAAH,SAAGA,IAAH;AAAA,MAASC,KAAT,SAASA,KAAT;AAAA,SAAsB;AAC1Ca,IAAAA,QAAQ,eAAE,gCAAC,gBAAD;AAAM,MAAA,IAAI,EAAEd,IAAZ;AAAkB,MAAA,KAAK,EAAEC;AAAzB;AADgC,GAAtB;AAAA,C;;AAgBxB,SAASO,OAAT,CAAiBO,KAAjB,EAAwB;AAAA;AAAA;;AACtB,MAAMC,QAAQ,GAE2Bb,YAFzC;AACA,MAAQC,MAAR,GAAmBW,KAAnB,CAAQX,MAAR;AACA,iBAAO,mBAAQA,MAAR,CAAP,eAAuB,gCAAC,QAAD,6EAAvB;AACD;;AAED,IAAMG,aAAa,GAAG,sBAAgBZ,iBAAhB,EAAmC;AACvDe,EAAAA,OAAO,EAAPA,OADuD;AAEvDF,EAAAA,OAAO,EAAPA;AAFuD,CAAnC,CAAtB;eAKeD,a","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport { FadeInOut } from '@semcore/animation';\nimport Spin from '@semcore/spin';\nimport { Box } from '@semcore/flex-box';\nimport resolveColor from '@semcore/utils/lib/color';\nimport { isAdvanceMode } from '@semcore/utils/lib/findComponent';\n\nimport style from './style/spin-container.shadow.css';\n\nclass SpinContainerRoot extends Component {\n static displayName = 'SpinContainer';\n static style = style;\n static defaultProps = {\n size: 'xxl',\n theme: 'dark',\n duration: 200,\n };\n\n getOverlayProps() {\n const { loading, background, duration, size, theme } = this.asProps;\n return {\n background,\n // for Animated\n loading,\n duration,\n // for Spin\n size,\n theme,\n };\n }\n\n render() {\n const SSpinContainer = Root;\n const { styles, Children } = this.asProps;\n\n const advanceMode = isAdvanceMode(Children, [\n SpinContainer.Content.displayName,\n SpinContainer.Overlay.displayName,\n ]);\n\n return sstyled(styles)(\n <SSpinContainer render={Box}>\n {advanceMode ? (\n <Children />\n ) : (\n <>\n <SpinContainer.Content>\n <Children />\n </SpinContainer.Content>\n <SpinContainer.Overlay />\n </>\n )}\n </SSpinContainer>,\n );\n }\n}\n\nclass Overlay extends Component {\n static defaultProps = ({ size, theme }) => ({\n children: <Spin size={size} theme={theme} />,\n });\n\n render() {\n const SOverlay = Root;\n const { styles, background, loading, duration } = this.asProps;\n\n return sstyled(styles)(\n <FadeInOut visible={loading} duration={duration}>\n <SOverlay render={Box} use:background={resolveColor(background)} />\n </FadeInOut>,\n );\n }\n}\n\nfunction Content(props) {\n const SContent = Root;\n const { styles } = props;\n return sstyled(styles)(<SContent render={Box} />);\n}\n\nconst SpinContainer = createComponent(SpinContainerRoot, {\n Overlay,\n Content,\n});\n\nexport default SpinContainer;\n"],"file":"SpinContainer.js"}
package/lib/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -18,6 +18,7 @@ var _SpinContainer = _interopRequireWildcard(require("./SpinContainer"));
18
18
  Object.keys(_SpinContainer).forEach(function (key) {
19
19
  if (key === "default" || key === "__esModule") return;
20
20
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
21
+ if (key in exports && exports[key] === _SpinContainer[key]) return;
21
22
  Object.defineProperty(exports, key, {
22
23
  enumerable: true,
23
24
  get: function get() {
@@ -25,4 +26,8 @@ Object.keys(_SpinContainer).forEach(function (key) {
25
26
  }
26
27
  });
27
28
  });
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export { default } from './SpinContainer';\nexport * from './SpinContainer';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export { default } from './SpinContainer';\nexport * from './SpinContainer';\n"],"file":"index.js"}
@@ -24,15 +24,6 @@ SOverlay {
24
24
  background-color: rgba(255, 255, 255, 0.85);
25
25
  }
26
26
 
27
- .animate--enter {
28
- opacity: 0.01;
29
- }
30
-
31
- .animate--enter-active,
32
- .animate--exit {
33
- opacity: 1;
34
- }
35
-
36
- .animate--exit-active {
37
- opacity: 0.01;
27
+ SOverlay[background] {
28
+ background: var(--background);
38
29
  }
@@ -1,56 +1,46 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
2
  import _createClass from "@babel/runtime/helpers/createClass";
4
3
  import _inherits from "@babel/runtime/helpers/inherits";
5
4
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
5
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
6
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
- import _extends from "@babel/runtime/helpers/extends";
7
+ import { sstyled as _sstyled } from "@semcore/core";
8
+ import { assignProps as _assignProps3 } from "@semcore/core";
9
+ import { assignProps as _assignProps2 } from "@semcore/core";
10
+ import { assignProps as _assignProps } from "@semcore/core";
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
15
 
10
16
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
11
17
 
12
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
18
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
13
19
 
14
20
  import React from 'react';
15
- import createComponent, { CHILDREN_COMPONENT, Component, INHERITED_NAME, styled, css, __css__, set, create, map } from '@semcore/core';
16
- import { CSSTransition } from 'react-transition-group';
21
+ import createComponent, { Component, sstyled, Root } from '@semcore/core';
22
+ import { FadeInOut } from '@semcore/animation';
17
23
  import Spin from '@semcore/spin';
18
24
  import { Box } from '@semcore/flex-box';
19
25
  import resolveColor from '@semcore/utils/lib/color';
20
- import getOriginChildren from '@semcore/utils/lib/getOriginChildren';
26
+ import { isAdvanceMode } from '@semcore/utils/lib/findComponent';
21
27
 
22
28
  /*__reshadow-styles__:"./style/spin-container.shadow.css"*/
23
- var _ref = (
24
- /*__reshadow_css_start__*/
25
- __css__(
26
- /*__inner_css_start__*/
27
- ".___SSpinContainer_122x3_gg_{z-index:0;position:relative;display:block}.___SContent_122x3_gg_{z-index:0;position:relative}.___SOverlay_122x3_gg_{z-index:1;display:flex;width:100%;height:100%;justify-content:center;align-items:center;position:absolute;top:0;left:0;background-color:hsla(0,0%,100%,.85)}._animate--enter_1p3sp_gg_{opacity:.01}._animate--enter-active_1mtt8_gg_,._animate--exit_yqdt9_gg_{opacity:1}._animate--exit-active_15k97_gg_{opacity:.01}"
28
- /*__inner_css_end__*/
29
- , "oca35l_gg_")
30
- /*__reshadow_css_end__*/
31
- , {
32
- "__SSpinContainer": "___SSpinContainer_122x3_gg_",
33
- "__SContent": "___SContent_122x3_gg_",
34
- "__SOverlay": "___SOverlay_122x3_gg_",
35
- "animate--enter": "_animate--enter_1p3sp_gg_",
36
- "animate--enter-active": "_animate--enter-active_1mtt8_gg_",
37
- "animate--exit": "_animate--exit_yqdt9_gg_",
38
- "animate--exit-active": "_animate--exit-active_15k97_gg_"
39
- }),
40
- style = _extends({}, _ref);
41
-
42
- var styled_c8 = create([(
29
+ var style = (
43
30
  /*__reshadow_css_start__*/
44
- __css__(
31
+ _sstyled.insert(
45
32
  /*__inner_css_start__*/
46
- "._animate--enter-active_14twg_gg_,._animate--exit-active_1o8ww_gg_{transition:opacity var(--yk7jne_0) ease-out}"
33
+ ".___SSpinContainer_1fs6p_gg_{z-index:0;position:relative;display:block}.___SContent_1fs6p_gg_{z-index:0;position:relative}.___SOverlay_1fs6p_gg_{z-index:1;display:flex;width:100%;height:100%;justify-content:center;align-items:center;position:absolute;top:0;left:0;background-color:hsla(0,0%,100%,.85)}.___SOverlay_1fs6p_gg_.__background_1fs6p_gg_{background:var(--background_18krv29)}"
47
34
  /*__inner_css_end__*/
48
- , "qcxlle_gg_")
35
+ , "18krv29_gg_")
49
36
  /*__reshadow_css_end__*/
50
37
  , {
51
- "animate--exit-active": "_animate--exit-active_1o8ww_gg_",
52
- "animate--enter-active": "_animate--enter-active_14twg_gg_"
53
- })]);
38
+ "__SSpinContainer": "___SSpinContainer_1fs6p_gg_",
39
+ "__SContent": "___SContent_1fs6p_gg_",
40
+ "__SOverlay": "___SOverlay_1fs6p_gg_",
41
+ "_background": "__background_1fs6p_gg_",
42
+ "--background": "--background_18krv29"
43
+ });
54
44
 
55
45
  var SpinContainerRoot = /*#__PURE__*/function (_Component) {
56
46
  _inherits(SpinContainerRoot, _Component);
@@ -67,11 +57,17 @@ var SpinContainerRoot = /*#__PURE__*/function (_Component) {
67
57
  key: "getOverlayProps",
68
58
  value: function getOverlayProps() {
69
59
  var _this$asProps = this.asProps,
60
+ loading = _this$asProps.loading,
70
61
  background = _this$asProps.background,
62
+ duration = _this$asProps.duration,
71
63
  size = _this$asProps.size,
72
64
  theme = _this$asProps.theme;
73
65
  return {
74
66
  background: background,
67
+ // for Animated
68
+ loading: loading,
69
+ duration: duration,
70
+ // for Spin
75
71
  size: size,
76
72
  theme: theme
77
73
  };
@@ -79,40 +75,15 @@ var SpinContainerRoot = /*#__PURE__*/function (_Component) {
79
75
  }, {
80
76
  key: "render",
81
77
  value: function render() {
82
- var SSpinContainer = this.Root;
83
- var SContent = Box;
78
+ var _ref = this ? this.asProps : arguments[0],
79
+ _ref4;
80
+
81
+ var SSpinContainer = Box;
84
82
  var _this$asProps2 = this.asProps,
85
83
  styles = _this$asProps2.styles,
86
- ChildrenRoot = _this$asProps2.Children,
87
- duration = _this$asProps2.duration,
88
- loading = _this$asProps2.loading;
89
- var transitionDuration = "".concat(duration, "ms");
90
-
91
- var _overlayChildren = overlayChildren(ChildrenRoot, SpinContainer.Overlay),
92
- _overlayChildren2 = _slicedToArray(_overlayChildren, 2),
93
- Children = _overlayChildren2[0],
94
- Overlay = _overlayChildren2[1];
95
-
96
- return styled((set([styled_c8, styles], {
97
- "--yk7jne_0": transitionDuration
98
- }), /*#__PURE__*/React.createElement(SSpinContainer, map("SSpinContainer", {
99
- render: Box,
100
- $$style: styled.$$style
101
- }), /*#__PURE__*/React.createElement(SContent, {
102
- className: styled.styles["__SContent"]
103
- }, Children), /*#__PURE__*/React.createElement(CSSTransition, map("CSSTransition", {
104
- "in": loading,
105
- timeout: duration,
106
- classNames: {
107
- enterActive: styled.styles['animate--enter-active'],
108
- exitActive: styled.styles['animate--exit-active'],
109
- enter: styled.styles['animate--enter'],
110
- exit: styled.styles['animate--exit']
111
- },
112
- unmountOnExit: true
113
- }), Overlay || /*#__PURE__*/React.createElement(SpinContainer.Overlay, {
114
- className: styled.styles["__SpinContainer.Overlay"]
115
- })))));
84
+ Children = _this$asProps2.Children;
85
+ var advanceMode = isAdvanceMode(Children, [SpinContainer.Content.displayName, SpinContainer.Overlay.displayName]);
86
+ return _ref4 = sstyled(styles), /*#__PURE__*/React.createElement(SSpinContainer, _ref4.cn("SSpinContainer", _objectSpread({}, _assignProps({}, _ref))), advanceMode ? /*#__PURE__*/React.createElement(Children, _ref4.cn("Children", {})) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SpinContainer.Content, null, /*#__PURE__*/React.createElement(Children, _ref4.cn("Children", {}))), /*#__PURE__*/React.createElement(SpinContainer.Overlay, null)));
116
87
  }
117
88
  }]);
118
89
 
@@ -129,47 +100,6 @@ _defineProperty(SpinContainerRoot, "defaultProps", {
129
100
  duration: 200
130
101
  });
131
102
 
132
- function overlayChildren(Children, Overlay) {
133
- var children = getOriginChildren(Children);
134
-
135
- if (typeof children === 'function') {
136
- return [/*#__PURE__*/React.createElement(Children, null), null];
137
- }
138
-
139
- var OverlayChildren = null;
140
- return [React.Children.toArray(children).map(function (element) {
141
- if (! /*#__PURE__*/React.isValidElement(element)) return element;
142
- if (element.type === React.Fragment) return element;
143
-
144
- if (element.type[CHILDREN_COMPONENT]) {
145
- return overlayChildren(element.type, Overlay);
146
- } // @ts-ignore
147
-
148
-
149
- var inheritedNames = element.type[INHERITED_NAME] || [element.type.displayName];
150
-
151
- if (inheritedNames.includes(Overlay.displayName)) {
152
- OverlayChildren = element;
153
- return null;
154
- }
155
-
156
- return element;
157
- }), OverlayChildren];
158
- }
159
-
160
- var styled_12c = create([(
161
- /*__reshadow_css_start__*/
162
- __css__(
163
- /*__inner_css_start__*/
164
- ".___SOverlay_vnp1p_gg_.__background_vnp1p_gg_{background:var(--yk7jne_0)}"
165
- /*__inner_css_end__*/
166
- , "h4gl6o_gg_")
167
- /*__reshadow_css_end__*/
168
- , {
169
- "__SOverlay": "___SOverlay_vnp1p_gg_",
170
- "_background": "__background_vnp1p_gg_"
171
- })]);
172
-
173
103
  var Overlay = /*#__PURE__*/function (_Component2) {
174
104
  _inherits(Overlay, _Component2);
175
105
 
@@ -184,26 +114,30 @@ var Overlay = /*#__PURE__*/function (_Component2) {
184
114
  _createClass(Overlay, [{
185
115
  key: "render",
186
116
  value: function render() {
187
- var SOverlay = this.Root;
117
+ var _ref2 = this ? this.asProps : arguments[0],
118
+ _ref5;
119
+
120
+ var SOverlay = Box;
188
121
  var _this$asProps3 = this.asProps,
122
+ styles = _this$asProps3.styles,
189
123
  background = _this$asProps3.background,
190
- styles = _this$asProps3.styles;
191
- return styled((set([styled_12c, styles], {
192
- "--yk7jne_0": resolveColor(background)
193
- }), /*#__PURE__*/React.createElement(SOverlay, map("SOverlay", {
194
- render: Box,
195
- background: background,
196
- $$style: styled.$$style
197
- }))));
124
+ loading = _this$asProps3.loading,
125
+ duration = _this$asProps3.duration;
126
+ return _ref5 = sstyled(styles), /*#__PURE__*/React.createElement(FadeInOut, _ref5.cn("FadeInOut", {
127
+ "visible": loading,
128
+ "duration": duration
129
+ }), /*#__PURE__*/React.createElement(SOverlay, _ref5.cn("SOverlay", _objectSpread({}, _assignProps2({
130
+ "use:background": resolveColor(background)
131
+ }, _ref2)))));
198
132
  }
199
133
  }]);
200
134
 
201
135
  return Overlay;
202
136
  }(Component);
203
137
 
204
- _defineProperty(Overlay, "defaultProps", function (_ref2) {
205
- var size = _ref2.size,
206
- theme = _ref2.theme;
138
+ _defineProperty(Overlay, "defaultProps", function (_ref7) {
139
+ var size = _ref7.size,
140
+ theme = _ref7.theme;
207
141
  return {
208
142
  children: /*#__PURE__*/React.createElement(Spin, {
209
143
  size: size,
@@ -212,8 +146,18 @@ _defineProperty(Overlay, "defaultProps", function (_ref2) {
212
146
  };
213
147
  });
214
148
 
149
+ function Content(props) {
150
+ var _ref3 = this ? this.asProps : arguments[0],
151
+ _ref6;
152
+
153
+ var SContent = Box;
154
+ var styles = props.styles;
155
+ return _ref6 = sstyled(styles), /*#__PURE__*/React.createElement(SContent, _ref6.cn("SContent", _objectSpread({}, _assignProps3({}, _ref3))));
156
+ }
157
+
215
158
  var SpinContainer = createComponent(SpinContainerRoot, {
216
- Overlay: Overlay
159
+ Overlay: Overlay,
160
+ Content: Content
217
161
  });
218
162
  export default SpinContainer;
219
163
  //# sourceMappingURL=SpinContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/SpinContainer.tsx"],"names":["React","createComponent","CHILDREN_COMPONENT","Component","INHERITED_NAME","styled","CSSTransition","Spin","Box","resolveColor","getOriginChildren","SpinContainerRoot","asProps","background","size","theme","SSpinContainer","Root","SContent","styles","ChildrenRoot","Children","duration","loading","transitionDuration","overlayChildren","SpinContainer","Overlay","enterActive","exitActive","enter","exit","style","children","OverlayChildren","toArray","map","element","isValidElement","type","Fragment","inheritedNames","displayName","includes","SOverlay"],"mappings":";;;;;;;;;;;;;AAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,OAAOC,eAAP,IACEC,kBADF,EAEEC,SAFF,EAGEC,cAHF,EAMEC,MANF,wCAOO,qBAPP;AAQA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,IAAP,MAAiC,qBAAjC;AACA,SAASC,GAAT,QAA+B,yBAA/B;AACA,OAAOC,YAAP,MAAyB,gCAAzB;AACA,OAAOC,iBAAP,MAA8B,4CAA9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuBMC,iB;;;;;;;;;;;;;sCASc;AAAA,0BACoB,KAAKC,OADzB;AAAA,UACRC,UADQ,iBACRA,UADQ;AAAA,UACIC,IADJ,iBACIA,IADJ;AAAA,UACUC,KADV,iBACUA,KADV;AAEhB,aAAO;AACLF,QAAAA,UAAU,EAAVA,UADK;AAELC,QAAAA,IAAI,EAAJA,IAFK;AAGLC,QAAAA,KAAK,EAALA;AAHK,OAAP;AAKD;;;6BAEQ;AACP,UAAMC,cAAc,GAAG,KAAKC,IAA5B;AACA,UAAMC,QAAQ,GAAGV,GAAjB;AAFO,2BAGuD,KAAKI,OAH5D;AAAA,UAGCO,MAHD,kBAGCA,MAHD;AAAA,UAGmBC,YAHnB,kBAGSC,QAHT;AAAA,UAGiCC,QAHjC,kBAGiCA,QAHjC;AAAA,UAG2CC,OAH3C,kBAG2CA,OAH3C;AAIP,UAAMC,kBAAkB,aAAMF,QAAN,OAAxB;;AAJO,6BAMqBG,eAAe,CAACL,YAAD,EAAeM,aAAa,CAACC,OAA7B,CANpC;AAAA;AAAA,UAMAN,QANA;AAAA,UAMUM,OANV;;AAQP,aAAO,wBAAOR,MAAP;AAAA,sBAGmBK;AAHnB,uBAML,oBAAC,cAAD;AAAA,gBAAwBhB,GAAxB;AAAA;AAAA,uBACE,oBAAC,QAAD;AAAA;AAAA,SAAWa,QAAX,CADF,eAEE,oBAAC,aAAD;AAAA,cACME,OADN;AAAA,iBAEWD,QAFX;AAAA,oBAGc;AACVM,UAAAA,WAAW,EAAEvB,MAAM,CAACc,MAAP,CAAc,uBAAd,CADH;AAEVU,UAAAA,UAAU,EAAExB,MAAM,CAACc,MAAP,CAAc,sBAAd,CAFF;AAGVW,UAAAA,KAAK,EAAEzB,MAAM,CAACc,MAAP,CAAc,gBAAd,CAHG;AAIVY,UAAAA,IAAI,EAAE1B,MAAM,CAACc,MAAP,CAAc,eAAd;AAJI,SAHd;AAAA;AAAA,UAWGQ,OAAO,iBAAI,oBAAC,aAAD,CAAe,OAAf;AAAA;AAAA,QAXd,CAFF,CANK,EAAP;AAuBD;;;;EAjD6BxB,S;;gBAA1BQ,iB,iBACiB,e;;gBADjBA,iB,WAEWqB,K;;gBAFXrB,iB,kBAGkB;AACpBG,EAAAA,IAAI,EAAE,KADc;AAEpBC,EAAAA,KAAK,EAAE,MAFa;AAGpBO,EAAAA,QAAQ,EAAE;AAHU,C;;AAiDxB,SAASG,eAAT,CAAyBJ,QAAzB,EAAwCM,OAAxC,EAAsE;AACpE,MAAMM,QAAQ,GAAGvB,iBAAiB,CAACW,QAAD,CAAlC;;AACA,MAAI,OAAOY,QAAP,KAAoB,UAAxB,EAAoC;AAClC,WAAO,cAAC,oBAAC,QAAD,OAAD,EAAe,IAAf,CAAP;AACD;;AAED,MAAIC,eAAe,GAAG,IAAtB;AACA,SAAO,CACLlC,KAAK,CAACqB,QAAN,CAAec,OAAf,CAAuBF,QAAvB,EAAiCG,GAAjC,CAAqC,UAACC,OAAD,EAAa;AAChD,QAAI,eAACrC,KAAK,CAACsC,cAAN,CAAqBD,OAArB,CAAL,EAAoC,OAAOA,OAAP;AACpC,QAAIA,OAAO,CAACE,IAAR,KAAiBvC,KAAK,CAACwC,QAA3B,EAAqC,OAAOH,OAAP;;AACrC,QAAIA,OAAO,CAACE,IAAR,CAAarC,kBAAb,CAAJ,EAAsC;AACpC,aAAOuB,eAAe,CAACY,OAAO,CAACE,IAAT,EAAeZ,OAAf,CAAtB;AACD,KAL+C,CAMhD;;;AACA,QAAMc,cAAc,GAAGJ,OAAO,CAACE,IAAR,CAAanC,cAAb,KAAgC,CAACiC,OAAO,CAACE,IAAR,CAAaG,WAAd,CAAvD;;AACA,QAAID,cAAc,CAACE,QAAf,CAAwBhB,OAAO,CAACe,WAAhC,CAAJ,EAAkD;AAChDR,MAAAA,eAAe,GAAGG,OAAlB;AACA,aAAO,IAAP;AACD;;AACD,WAAOA,OAAP;AACD,GAbD,CADK,EAeLH,eAfK,CAAP;AAiBD;;;;;;;;;;;;;;;IAMKP,O;;;;;;;;;;;;;6BAKK;AACP,UAAMiB,QAAQ,GAAG,KAAK3B,IAAtB;AADO,2BAEwB,KAAKL,OAF7B;AAAA,UAECC,UAFD,kBAECA,UAFD;AAAA,UAEaM,MAFb,kBAEaA,MAFb;AAIP,aAAO,yBAAOA,MAAP;AAAA,sBAEWV,YAAY,CAACI,UAAD;AAFvB,uBAIL,oBAAC,QAAD;AAAA,gBAAkBL,GAAlB;AAAA,oBAAmCK,UAAnC;AAAA;AAAA,SAJK,EAAP;AAKD;;;;EAdmBV,S;;gBAAhBwB,O,kBACkB;AAAA,MAAGb,IAAH,SAAGA,IAAH;AAAA,MAASC,KAAT,SAASA,KAAT;AAAA,SAAsB;AAC1CkB,IAAAA,QAAQ,eAAE,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAEnB,IAAZ;AAAkB,MAAA,KAAK,EAAEC;AAAzB;AADgC,GAAtB;AAAA,C;;AAgBxB,IAAMW,aAAa,GAAGzB,eAAe,CAMnCU,iBANmC,EAMhB;AAAEgB,EAAAA,OAAO,EAAPA;AAAF,CANgB,CAArC;AAQA,eAAeD,aAAf","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport createComponent, {\n CHILDREN_COMPONENT,\n Component,\n INHERITED_NAME,\n Merge,\n PropGetter,\n styled,\n} from '@semcore/core';\nimport { CSSTransition } from 'react-transition-group';\nimport Spin, { ISpinProps } from '@semcore/spin';\nimport { Box, IBoxProps } from '@semcore/flex-box';\nimport resolveColor from '@semcore/utils/lib/color';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\n\nimport style from './style/spin-container.shadow.css';\n\nexport interface ISpinContainerProps extends IBoxProps, ISpinProps {\n /**\n * Color of container spinner; you can use your own color\n */\n background?: string;\n /** Duration of animation displaying in ms\n * @default 200\n */\n duration?: number;\n /**\n * Property responsible for displaying the spinner\n * */\n loading?: boolean;\n}\n\nexport interface ISpinContainerContext extends ISpinContainerProps {\n getOverlayProps: PropGetter<SpinContainerRoot['getOverlayProps']>;\n}\n\nclass SpinContainerRoot extends Component<ISpinContainerProps> {\n static displayName = 'SpinContainer';\n static style = style;\n static defaultProps = {\n size: 'xxl',\n theme: 'dark',\n duration: 200,\n };\n\n getOverlayProps() {\n const { background, size, theme } = this.asProps;\n return {\n background,\n size,\n theme,\n };\n }\n\n render() {\n const SSpinContainer = this.Root;\n const SContent = Box;\n const { styles, Children: ChildrenRoot, duration, loading } = this.asProps;\n const transitionDuration = `${duration}ms`;\n\n const [Children, Overlay] = overlayChildren(ChildrenRoot, SpinContainer.Overlay);\n\n return styled(styles)`\n .animate--exit-active,\n .animate--enter-active {\n transition: opacity ${transitionDuration} ease-out;\n }\n `(\n <SSpinContainer render={Box}>\n <SContent>{Children}</SContent>\n <CSSTransition\n in={loading}\n timeout={duration}\n classNames={{\n enterActive: styled.styles['animate--enter-active'],\n exitActive: styled.styles['animate--exit-active'],\n enter: styled.styles['animate--enter'],\n exit: styled.styles['animate--exit'],\n }}\n unmountOnExit\n >\n {Overlay || <SpinContainer.Overlay />}\n </CSSTransition>\n </SSpinContainer>,\n );\n }\n}\n\nfunction overlayChildren(Children: any, Overlay: React.ComponentType) {\n const children = getOriginChildren(Children);\n if (typeof children === 'function') {\n return [<Children />, null];\n }\n\n let OverlayChildren = null;\n return [\n React.Children.toArray(children).map((element) => {\n if (!React.isValidElement(element)) return element;\n if (element.type === React.Fragment) return element;\n if (element.type[CHILDREN_COMPONENT]) {\n return overlayChildren(element.type, Overlay);\n }\n // @ts-ignore\n const inheritedNames = element.type[INHERITED_NAME] || [element.type.displayName];\n if (inheritedNames.includes(Overlay.displayName)) {\n OverlayChildren = element;\n return null;\n }\n return element;\n }),\n OverlayChildren,\n ];\n}\n\nexport interface ISpinContainerOverlayProps extends IBoxProps {\n background?: string;\n}\n\nclass Overlay extends Component<ISpinContainerOverlayProps> {\n static defaultProps = ({ size, theme }) => ({\n children: <Spin size={size} theme={theme} />,\n });\n\n render() {\n const SOverlay = this.Root;\n const { background, styles } = this.asProps;\n\n return styled(styles)`\n SOverlay[background] {\n background: ${resolveColor(background)};\n }\n `(<SOverlay render={Box} background={background} />);\n }\n}\n\nconst SpinContainer = createComponent<\n Merge<ISpinContainerProps, HTMLAttributes<HTMLDivElement>>,\n {\n Overlay: Merge<ISpinContainerOverlayProps, HTMLAttributes<HTMLDivElement>>;\n },\n ISpinContainerContext\n>(SpinContainerRoot, { Overlay });\n\nexport default SpinContainer;\n"],"file":"SpinContainer.js"}
1
+ {"version":3,"sources":["../../src/SpinContainer.js"],"names":["React","createComponent","Component","sstyled","Root","FadeInOut","Spin","Box","resolveColor","isAdvanceMode","SpinContainerRoot","asProps","loading","background","duration","size","theme","SSpinContainer","styles","Children","advanceMode","SpinContainer","Content","displayName","Overlay","style","SOverlay","children","props","SContent"],"mappings":"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","sourcesContent":["import React from 'react';\nimport createComponent, { Component, sstyled, Root } from '@semcore/core';\nimport { FadeInOut } from '@semcore/animation';\nimport Spin from '@semcore/spin';\nimport { Box } from '@semcore/flex-box';\nimport resolveColor from '@semcore/utils/lib/color';\nimport { isAdvanceMode } from '@semcore/utils/lib/findComponent';\n\nimport style from './style/spin-container.shadow.css';\n\nclass SpinContainerRoot extends Component {\n static displayName = 'SpinContainer';\n static style = style;\n static defaultProps = {\n size: 'xxl',\n theme: 'dark',\n duration: 200,\n };\n\n getOverlayProps() {\n const { loading, background, duration, size, theme } = this.asProps;\n return {\n background,\n // for Animated\n loading,\n duration,\n // for Spin\n size,\n theme,\n };\n }\n\n render() {\n const SSpinContainer = Root;\n const { styles, Children } = this.asProps;\n\n const advanceMode = isAdvanceMode(Children, [\n SpinContainer.Content.displayName,\n SpinContainer.Overlay.displayName,\n ]);\n\n return sstyled(styles)(\n <SSpinContainer render={Box}>\n {advanceMode ? (\n <Children />\n ) : (\n <>\n <SpinContainer.Content>\n <Children />\n </SpinContainer.Content>\n <SpinContainer.Overlay />\n </>\n )}\n </SSpinContainer>,\n );\n }\n}\n\nclass Overlay extends Component {\n static defaultProps = ({ size, theme }) => ({\n children: <Spin size={size} theme={theme} />,\n });\n\n render() {\n const SOverlay = Root;\n const { styles, background, loading, duration } = this.asProps;\n\n return sstyled(styles)(\n <FadeInOut visible={loading} duration={duration}>\n <SOverlay render={Box} use:background={resolveColor(background)} />\n </FadeInOut>,\n );\n }\n}\n\nfunction Content(props) {\n const SContent = Root;\n const { styles } = props;\n return sstyled(styles)(<SContent render={Box} />);\n}\n\nconst SpinContainer = createComponent(SpinContainerRoot, {\n Overlay,\n Content,\n});\n\nexport default SpinContainer;\n"],"file":"SpinContainer.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,iBAAxB;AACA,cAAc,iBAAd","sourcesContent":["export { default } from './SpinContainer';\nexport * from './SpinContainer';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.js"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,iBAAxB;AACA,cAAc,iBAAd","sourcesContent":["export { default } from './SpinContainer';\nexport * from './SpinContainer';\n"],"file":"index.js"}
@@ -24,15 +24,6 @@ SOverlay {
24
24
  background-color: rgba(255, 255, 255, 0.85);
25
25
  }
26
26
 
27
- .animate--enter {
28
- opacity: 0.01;
29
- }
30
-
31
- .animate--enter-active,
32
- .animate--exit {
33
- opacity: 1;
34
- }
35
-
36
- .animate--exit-active {
37
- opacity: 0.01;
27
+ SOverlay[background] {
28
+ background: var(--background);
38
29
  }
@@ -1,2 +1,38 @@
1
- export { default } from './SpinContainer';
2
- export * from './SpinContainer';
1
+ import { PropGetterFn, ReturnEl, CProps } from '@semcore/core';
2
+ import { ISpinProps } from '@semcore/spin';
3
+ import { IBoxProps } from '@semcore/flex-box';
4
+
5
+ export interface ISpinContainerProps extends IBoxProps, ISpinProps {
6
+ /**
7
+ * Color of container spinner; you can use your own color
8
+ */
9
+ background?: string;
10
+ /** Duration of animation displaying in ms
11
+ * @default 200
12
+ */
13
+ duration?: number;
14
+ /**
15
+ * Property responsible for displaying the spinner
16
+ * */
17
+ loading?: boolean;
18
+ }
19
+
20
+ export interface ISpinContainerContext {
21
+ getOverlayProps: PropGetterFn;
22
+ }
23
+
24
+ export interface ISpinContainerOverlayProps extends IBoxProps {
25
+ /**
26
+ * Css background; you can use your own color
27
+ */
28
+ background?: string;
29
+ }
30
+
31
+ declare const SpinContainer: (<T>(
32
+ props: CProps<ISpinContainerProps & T, ISpinContainerContext>,
33
+ ) => ReturnEl) & {
34
+ Content: typeof Box;
35
+ Overlay: <T>(props: ISpinContainerOverlayProps & T) => ReturnEl;
36
+ };
37
+
38
+ export default SpinContainer;
package/package.json CHANGED
@@ -1,27 +1,28 @@
1
1
  {
2
2
  "name": "@semcore/spin-container",
3
3
  "description": "SEMRush SpinContainer Component",
4
- "version": "3.1.0",
4
+ "version": "5.0.0",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es6/index.js",
7
7
  "types": "lib/types/index.d.ts",
8
+ "sideEffects": false,
8
9
  "author": "Roman Lysov <r.lysov@semrush.com>",
9
10
  "license": "MIT",
10
11
  "scripts": {
11
- "build": "build",
12
+ "build": "build --source=js",
12
13
  "test": "jest"
13
14
  },
14
15
  "dependencies": {
15
- "@semcore/utils": "^3.15",
16
+ "@semcore/utils": "^3.31",
16
17
  "@semcore/spin": "^3",
17
18
  "@semcore/flex-box": "^4",
18
- "react-transition-group": "^4.4"
19
+ "@semcore/animation": "^1"
19
20
  },
20
21
  "peerDependencies": {
21
- "@semcore/core": "^1",
22
+ "@semcore/core": "^1.11",
22
23
  "react": "16.8 - 17"
23
24
  },
24
25
  "jest": {
25
- "preset": "jest-preset-ui"
26
+ "preset": "@semcore/jest-preset-ui"
26
27
  }
27
28
  }
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+ import createComponent, { Component, sstyled, Root } from '@semcore/core';
3
+ import { FadeInOut } from '@semcore/animation';
4
+ import Spin from '@semcore/spin';
5
+ import { Box } from '@semcore/flex-box';
6
+ import resolveColor from '@semcore/utils/lib/color';
7
+ import { isAdvanceMode } from '@semcore/utils/lib/findComponent';
8
+
9
+ import style from './style/spin-container.shadow.css';
10
+
11
+ class SpinContainerRoot extends Component {
12
+ static displayName = 'SpinContainer';
13
+ static style = style;
14
+ static defaultProps = {
15
+ size: 'xxl',
16
+ theme: 'dark',
17
+ duration: 200,
18
+ };
19
+
20
+ getOverlayProps() {
21
+ const { loading, background, duration, size, theme } = this.asProps;
22
+ return {
23
+ background,
24
+ // for Animated
25
+ loading,
26
+ duration,
27
+ // for Spin
28
+ size,
29
+ theme,
30
+ };
31
+ }
32
+
33
+ render() {
34
+ const SSpinContainer = Root;
35
+ const { styles, Children } = this.asProps;
36
+
37
+ const advanceMode = isAdvanceMode(Children, [
38
+ SpinContainer.Content.displayName,
39
+ SpinContainer.Overlay.displayName,
40
+ ]);
41
+
42
+ return sstyled(styles)(
43
+ <SSpinContainer render={Box}>
44
+ {advanceMode ? (
45
+ <Children />
46
+ ) : (
47
+ <>
48
+ <SpinContainer.Content>
49
+ <Children />
50
+ </SpinContainer.Content>
51
+ <SpinContainer.Overlay />
52
+ </>
53
+ )}
54
+ </SSpinContainer>,
55
+ );
56
+ }
57
+ }
58
+
59
+ class Overlay extends Component {
60
+ static defaultProps = ({ size, theme }) => ({
61
+ children: <Spin size={size} theme={theme} />,
62
+ });
63
+
64
+ render() {
65
+ const SOverlay = Root;
66
+ const { styles, background, loading, duration } = this.asProps;
67
+
68
+ return sstyled(styles)(
69
+ <FadeInOut visible={loading} duration={duration}>
70
+ <SOverlay render={Box} use:background={resolveColor(background)} />
71
+ </FadeInOut>,
72
+ );
73
+ }
74
+ }
75
+
76
+ function Content(props) {
77
+ const SContent = Root;
78
+ const { styles } = props;
79
+ return sstyled(styles)(<SContent render={Box} />);
80
+ }
81
+
82
+ const SpinContainer = createComponent(SpinContainerRoot, {
83
+ Overlay,
84
+ Content,
85
+ });
86
+
87
+ export default SpinContainer;
package/src/index.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { PropGetterFn, ReturnEl, CProps } from '@semcore/core';
2
+ import { ISpinProps } from '@semcore/spin';
3
+ import { IBoxProps } from '@semcore/flex-box';
4
+
5
+ export interface ISpinContainerProps extends IBoxProps, ISpinProps {
6
+ /**
7
+ * Color of container spinner; you can use your own color
8
+ */
9
+ background?: string;
10
+ /** Duration of animation displaying in ms
11
+ * @default 200
12
+ */
13
+ duration?: number;
14
+ /**
15
+ * Property responsible for displaying the spinner
16
+ * */
17
+ loading?: boolean;
18
+ }
19
+
20
+ export interface ISpinContainerContext {
21
+ getOverlayProps: PropGetterFn;
22
+ }
23
+
24
+ export interface ISpinContainerOverlayProps extends IBoxProps {
25
+ /**
26
+ * Css background; you can use your own color
27
+ */
28
+ background?: string;
29
+ }
30
+
31
+ declare const SpinContainer: (<T>(
32
+ props: CProps<ISpinContainerProps & T, ISpinContainerContext>,
33
+ ) => ReturnEl) & {
34
+ Content: typeof Box;
35
+ Overlay: <T>(props: ISpinContainerOverlayProps & T) => ReturnEl;
36
+ };
37
+
38
+ export default SpinContainer;
File without changes
@@ -24,15 +24,6 @@ SOverlay {
24
24
  background-color: rgba(255, 255, 255, 0.85);
25
25
  }
26
26
 
27
- .animate--enter {
28
- opacity: 0.01;
29
- }
30
-
31
- .animate--enter-active,
32
- .animate--exit {
33
- opacity: 1;
34
- }
35
-
36
- .animate--exit-active {
37
- opacity: 0.01;
27
+ SOverlay[background] {
28
+ background: var(--background);
38
29
  }
@@ -1,45 +0,0 @@
1
- import React, { HTMLAttributes } from 'react';
2
- import { Component, Merge, PropGetter } from '@semcore/core';
3
- import { ISpinProps } from '@semcore/spin';
4
- import { IBoxProps } from '@semcore/flex-box';
5
- export interface ISpinContainerProps extends IBoxProps, ISpinProps {
6
- /**
7
- * Color of container spinner; you can use your own color
8
- */
9
- background?: string;
10
- /** Duration of animation displaying in ms
11
- * @default 200
12
- */
13
- duration?: number;
14
- /**
15
- * Property responsible for displaying the spinner
16
- * */
17
- loading?: boolean;
18
- }
19
- export interface ISpinContainerContext extends ISpinContainerProps {
20
- getOverlayProps: PropGetter<SpinContainerRoot['getOverlayProps']>;
21
- }
22
- declare class SpinContainerRoot extends Component<ISpinContainerProps> {
23
- static displayName: string;
24
- static style: any;
25
- static defaultProps: {
26
- size: string;
27
- theme: string;
28
- duration: number;
29
- };
30
- getOverlayProps(): {
31
- background: string;
32
- size: "s" | "xxs" | "xs" | "m" | "l" | "xl" | "xxl";
33
- theme: string;
34
- };
35
- render(): any;
36
- }
37
- export interface ISpinContainerOverlayProps extends IBoxProps {
38
- background?: string;
39
- }
40
- declare const SpinContainer: import("@semcore/core").ComponentType<Merge<ISpinContainerProps, React.HTMLAttributes<HTMLDivElement>>, {
41
- Overlay: Merge<ISpinContainerOverlayProps, HTMLAttributes<HTMLDivElement>>;
42
- }, ISpinContainerContext, {
43
- [key: string]: (arg: unknown) => void;
44
- }, null>;
45
- export default SpinContainer;
@@ -1,144 +0,0 @@
1
- import React, { HTMLAttributes } from 'react';
2
- import createComponent, {
3
- CHILDREN_COMPONENT,
4
- Component,
5
- INHERITED_NAME,
6
- Merge,
7
- PropGetter,
8
- styled,
9
- } from '@semcore/core';
10
- import { CSSTransition } from 'react-transition-group';
11
- import Spin, { ISpinProps } from '@semcore/spin';
12
- import { Box, IBoxProps } from '@semcore/flex-box';
13
- import resolveColor from '@semcore/utils/lib/color';
14
- import getOriginChildren from '@semcore/utils/lib/getOriginChildren';
15
-
16
- import style from './style/spin-container.shadow.css';
17
-
18
- export interface ISpinContainerProps extends IBoxProps, ISpinProps {
19
- /**
20
- * Color of container spinner; you can use your own color
21
- */
22
- background?: string;
23
- /** Duration of animation displaying in ms
24
- * @default 200
25
- */
26
- duration?: number;
27
- /**
28
- * Property responsible for displaying the spinner
29
- * */
30
- loading?: boolean;
31
- }
32
-
33
- export interface ISpinContainerContext extends ISpinContainerProps {
34
- getOverlayProps: PropGetter<SpinContainerRoot['getOverlayProps']>;
35
- }
36
-
37
- class SpinContainerRoot extends Component<ISpinContainerProps> {
38
- static displayName = 'SpinContainer';
39
- static style = style;
40
- static defaultProps = {
41
- size: 'xxl',
42
- theme: 'dark',
43
- duration: 200,
44
- };
45
-
46
- getOverlayProps() {
47
- const { background, size, theme } = this.asProps;
48
- return {
49
- background,
50
- size,
51
- theme,
52
- };
53
- }
54
-
55
- render() {
56
- const SSpinContainer = this.Root;
57
- const SContent = Box;
58
- const { styles, Children: ChildrenRoot, duration, loading } = this.asProps;
59
- const transitionDuration = `${duration}ms`;
60
-
61
- const [Children, Overlay] = overlayChildren(ChildrenRoot, SpinContainer.Overlay);
62
-
63
- return styled(styles)`
64
- .animate--exit-active,
65
- .animate--enter-active {
66
- transition: opacity ${transitionDuration} ease-out;
67
- }
68
- `(
69
- <SSpinContainer render={Box}>
70
- <SContent>{Children}</SContent>
71
- <CSSTransition
72
- in={loading}
73
- timeout={duration}
74
- classNames={{
75
- enterActive: styled.styles['animate--enter-active'],
76
- exitActive: styled.styles['animate--exit-active'],
77
- enter: styled.styles['animate--enter'],
78
- exit: styled.styles['animate--exit'],
79
- }}
80
- unmountOnExit
81
- >
82
- {Overlay || <SpinContainer.Overlay />}
83
- </CSSTransition>
84
- </SSpinContainer>,
85
- );
86
- }
87
- }
88
-
89
- function overlayChildren(Children: any, Overlay: React.ComponentType) {
90
- const children = getOriginChildren(Children);
91
- if (typeof children === 'function') {
92
- return [<Children />, null];
93
- }
94
-
95
- let OverlayChildren = null;
96
- return [
97
- React.Children.toArray(children).map((element) => {
98
- if (!React.isValidElement(element)) return element;
99
- if (element.type === React.Fragment) return element;
100
- if (element.type[CHILDREN_COMPONENT]) {
101
- return overlayChildren(element.type, Overlay);
102
- }
103
- // @ts-ignore
104
- const inheritedNames = element.type[INHERITED_NAME] || [element.type.displayName];
105
- if (inheritedNames.includes(Overlay.displayName)) {
106
- OverlayChildren = element;
107
- return null;
108
- }
109
- return element;
110
- }),
111
- OverlayChildren,
112
- ];
113
- }
114
-
115
- export interface ISpinContainerOverlayProps extends IBoxProps {
116
- background?: string;
117
- }
118
-
119
- class Overlay extends Component<ISpinContainerOverlayProps> {
120
- static defaultProps = ({ size, theme }) => ({
121
- children: <Spin size={size} theme={theme} />,
122
- });
123
-
124
- render() {
125
- const SOverlay = this.Root;
126
- const { background, styles } = this.asProps;
127
-
128
- return styled(styles)`
129
- SOverlay[background] {
130
- background: ${resolveColor(background)};
131
- }
132
- `(<SOverlay render={Box} background={background} />);
133
- }
134
- }
135
-
136
- const SpinContainer = createComponent<
137
- Merge<ISpinContainerProps, HTMLAttributes<HTMLDivElement>>,
138
- {
139
- Overlay: Merge<ISpinContainerOverlayProps, HTMLAttributes<HTMLDivElement>>;
140
- },
141
- ISpinContainerContext
142
- >(SpinContainerRoot, { Overlay });
143
-
144
- export default SpinContainer;