content: import _extends from 'babel-runtime/helpers/extends';
  import _defineProperty from 'babel-runtime/helpers/defineProperty';
  import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
  import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
  import _createClass from 'babel-runtime/helpers/createClass';
  import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
  import _inherits from 'babel-runtime/helpers/inherits';
  import React, { Component } from 'react';
  import PropTypes from 'prop-types';
  var classNames = require('classnames');
  
  function noop() {}
  
  var Switch = function (_Component) {
    _inherits(Switch, _Component);
  
    function Switch(props) {
      _classCallCheck(this, Switch);
  
      var _this = _possibleConstructorReturn(this, (Switch.__proto__ || Object.getPrototypeOf(Switch)).call(this, props));
  
      _initialiseProps.call(_this);
  
      var checked = false;
      if ('checked' in props) {
        checked = !!props.checked;
      } else {
        checked = !!props.defaultChecked;
      }
      _this.state = { checked: checked };
      return _this;
    }
  
    _createClass(Switch, [{
      key: 'componentWillReceiveProps',
      value: function componentWillReceiveProps(nextProps) {
        if ('checked' in nextProps) {
          this.setState({
            checked: !!nextProps.checked
          });
        }
      }
    }, {
      key: 'setChecked',
      value: function setChecked(checked) {
        if (this.props.disabled) {
          return;
        }
        if (!('checked' in this.props)) {
          this.setState({
            checked: checked
          });
        }
        this.props.onChange(checked);
      }
  
      // Handle auto focus when click switch in Chrome
  
    }, {
      key: 'render',
      value: function render() {
        var _classNames;
  
        var _props = this.props,
            className = _props.className,
            prefixCls = _props.prefixCls,
            disabled = _props.disabled,
            checkedChildren = _props.checkedChildren,
            tabIndex = _props.tabIndex,
            unCheckedChildren = _props.unCheckedChildren,
            restProps = _objectWithoutProperties(_props, ['className', 'prefixCls', 'disabled', 'checkedChildren', 'tabIndex', 'unCheckedChildren']);
  
        var checked = this.state.checked;
        var switchTabIndex = disabled ? -1 : tabIndex || 0;
        var switchClassName = classNames((_classNames = {}, _defineProperty(_classNames, className, !!className), _defineProperty(_classNames, prefixCls, true), _defineProperty(_classNames, prefixCls + '-checked', checked), _defineProperty(_classNames, prefixCls + '-disabled', disabled), _classNames));
        return React.createElement(
          'span',
          _extends({}, restProps, {
            className: switchClassName,
            tabIndex: switchTabIndex,
            ref: 'node',
            onKeyDown: this.handleKeyDown,
            onClick: this.toggle,
            onMouseUp: this.handleMouseUp
          }),
          React.createElement(
            'span',
            { className: prefixCls + '-inner' },
            checked ? checkedChildren : unCheckedChildren
          )
        );
      }
    }]);
  
    return Switch;
  }(Component);
  
  var _initialiseProps = function _initialiseProps() {
    var _this2 = this;
  
    this.toggle = function () {
      var onClick = _this2.props.onClick;
  
      var checked = !_this2.state.checked;
      _this2.setChecked(checked);
      onClick(checked);
    };
  
    this.handleKeyDown = function (e) {
      if (e.keyCode === 37) {
        // Left
        _this2.setChecked(false);
      } else if (e.keyCode === 39) {
        // Right
        _this2.setChecked(true);
      } else if (e.keyCode === 32 || e.keyCode === 13) {
        // Space, Enter
        _this2.toggle();
      }
    };
  
    this.handleMouseUp = function (e) {
      if (_this2.refs.node) {
        _this2.refs.node.blur();
      }
      if (_this2.props.onMouseUp) {
        _this2.props.onMouseUp(e);
      }
    };
  };
  
  Switch.propTypes = {
    className: PropTypes.string,
    prefixCls: PropTypes.string,
    disabled: PropTypes.bool,
    checkedChildren: PropTypes.any,
    unCheckedChildren: PropTypes.any,
    onChange: PropTypes.func,
    onMouseUp: PropTypes.func,
    onClick: PropTypes.func,
    tabIndex: PropTypes.number,
    checked: PropTypes.bool,
    defaultChecked: PropTypes.bool
  };
  
  Switch.defaultProps = {
    prefixCls: 'rc-switch',
    checkedChildren: null,
    unCheckedChildren: null,
    className: '',
    defaultChecked: false,
    onChange: noop,
    onClick: noop
  };
  
  export default Switch;