import _extends from "@babel/runtime/helpers/esm/extends";
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
var _class, _Spinner;
import React from 'react';
import { ThemeContext } from "../../../lib/theming/ThemeContext";
import { SpinnerIcon } from "../../../internal/SpinnerIcon/SpinnerIcon";
import { CommonWrapper } from "../../../internal/CommonWrapper";
import { cx } from "../../../lib/theming/Emotion";
import { rootNode } from "../../../lib/rootNode";
import { createPropsGetter } from "../../../lib/createPropsGetter";
import { styles } from "../Spinner.styles";
var types = ['big', 'mini', 'normal'];
export var SpinnerDataTids = {
  root: 'Spinner__root'
};

/**
 * `Spinner` — это зацикленный индикатор, не отображающий прогресс выполнения задачи.
 *
 * Используйте `Spinner`, чтобы показать, что система выполняет команду, которую дал пользователь.
 * Не применяйте `Spinner` для заполнения паузы при загрузке контента, для этого предназначен GlobalLoader.
 *
 * Используйте компонент `Spinner`, если вам нужен спиннер, без дополнительного функционала, который предоставляет компонент Loader.
 */
export var Spinner = rootNode(_class = (_Spinner = /*#__PURE__*/function (_React$Component) {
  function Spinner() {
    var _this;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
    _this.getProps = createPropsGetter(Spinner.defaultProps);
    _this.renderSpinner = function (type, dimmed, inline) {
      var _cx;
      return /*#__PURE__*/(
        React.createElement(SpinnerIcon, {
          size: type,
          className: cx((_cx = {}, _cx[styles.circle(_this.theme)] = !dimmed && !_this.props.color, _cx[styles.circleDimmedColor(_this.theme)] = dimmed, _cx[styles.circleWithoutColorAnimation()] = dimmed || !!_this.props.color, _cx)),
          dimmed: dimmed,
          width: _this.props.width,
          color: _this.props.color,
          inline: inline
        })
      );
    };
    _this.renderCaption = function (type, caption) {
      return /*#__PURE__*/(
        React.createElement("span", {
          className: cx(styles[type](_this.theme), styles.captionColor(_this.theme))
        }, caption)
      );
    };
    return _this;
  }
  _inheritsLoose(Spinner, _React$Component);
  var _proto = Spinner.prototype;
  _proto.render = function render() {
    var _this2 = this;
    return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
      _this2.theme = theme;
      return _this2.renderMain();
    });
  };
  _proto.renderMain = function renderMain() {
    var _this$props = this.props,
      _this$props$caption = _this$props.caption,
      caption = _this$props$caption === void 0 ? null : _this$props$caption,
      dimmed = _this$props.dimmed,
      inline = _this$props.inline;
    var type = this.getProps().type;
    return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
      rootNodeRef: this.setRootNode
    }, this.props), /*#__PURE__*/React.createElement("div", {
      "data-tid": SpinnerDataTids.root,
      className: styles.spinner()
    }, /*#__PURE__*/React.createElement("span", {
      className: styles.inner()
    }, this.renderSpinner(type, dimmed, inline)), caption && this.renderCaption(type, caption)));
  };
  return Spinner;
}(React.Component), _Spinner.__KONTUR_REACT_UI__ = 'Spinner', _Spinner.displayName = 'Spinner', _Spinner.defaultProps = {
  type: 'normal'
}, _Spinner.Types = Object.assign.apply(Object, [{}].concat(types.map(function (type) {
  var _ref;
  return _ref = {}, _ref[type] = type, _ref;
}))), _Spinner)) || _class;