{"version":3,"sources":["webpack:///./node_modules/antd/es/button/index.js","webpack:///./node_modules/antd/es/button/style/css.js","webpack:///./node_modules/antd/es/_util/unreachableException.js","webpack:///./node_modules/antd/es/button/button-group.js","webpack:///./node_modules/@ant-design/css-animation/es/Event.js","webpack:///./node_modules/antd/es/_util/wave.js","webpack:///./node_modules/antd/es/_util/raf.js","webpack:///./node_modules/antd/es/button/LoadingIcon.js","webpack:///./node_modules/antd/es/button/button.js"],"names":["UnreachableException","value","this","Error","concat","JSON","stringify","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","props","_ref","_classNames","getPrefixCls","direction","customizePrefixCls","prefixCls","size","className","others","sizeCls","undefined","console","warn","classes","START_EVENT_NAME_MAP","transitionstart","transition","WebkitTransition","MozTransition","OTransition","msTransition","animationstart","animation","WebkitAnimation","MozAnimation","OAnimation","msAnimation","END_EVENT_NAME_MAP","transitionend","animationend","startEvents","endEvents","addEventListener","node","eventName","eventListener","removeEventListener","window","document","style","createElement","process","EVENT_NAME_MAP","events","baseEventName","baseEvents","styleName","push","detectEvents","styleForPseudo","addStartEventListener","forEach","startEvent","setTimeout","removeStartEventListener","addEndEventListener","endEvent","removeEndEventListener","id","ids","wrapperRaf","callback","delayFrames","arguments","myId","restFrames","internalCallback","isHidden","element","offsetParent","isNotGrey","color","match","cancel","pid","_React$Component","Wave","_super","_this","apply","animationStart","destroyed","onClick","waveColor","insertExtraNode","extraNode","context","attributeName","getAttributeName","setAttribute","test","csp","nonce","borderColor","innerHTML","body","contains","appendChild","onTransitionStart","onTransitionEnd","target","resetEffect","animationName","bindAnimationEvent","getAttribute","tagName","getComputedStyle","getPropertyValue","clickWaveTimeoutId","animationStartId","renderWave","children","key","nodeType","instance","clearTimeout","Element","removeChild","contextType","getCollapsedWidth","width","opacity","transform","getRealWidth","scrollWidth","LoadingIcon","visible","loading","existIcon","motionName","removeOnLeave","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","_ref2","ref","rxTwoCNChar","isTwoCNChar","bind","isUnborderedButtonType","type","spaceChildren","needInserted","isPrevChildPure","childList","child","isCurrentChildPure","lastIndex","lastChild","map","SPACE","split","join","insertSpace","convertLegacyProps","danger","loadingOrDelay","shape","customizeSize","icon","ghost","block","rest","SizeContext","_React$useState","_React$useState2","innerLoading","setLoading","_React$useState3","_React$useState4","hasTwoCNChar","setHasTwoCNChar","_React$useContext","autoInsertSpaceInButton","buttonRef","delayTimeoutRef","isNeedInserted","count","delay","current","buttonText","textContent","fixTwoCNChar","handleClick","devWarning","autoInsertSpace","iconType","iconNode","kids","linkButtonRestProps","href","_a","htmlType","otherProps","buttonNode","Button","displayName","defaultProps","Group","__ANT_BUTTON"],"mappings":"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","file":"e4e130b3661e65331f30f24eedf6cfe1a041075a-5c2aedbfbed9ee7f07d4.js","sourcesContent":["import Button from './button';\nexport default Button;","import '../../style/index.css';\nimport './index.css';","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\n\nvar UnreachableException = function UnreachableException(value) {\n  _classCallCheck(this, UnreachableException);\n\n  return new Error(\"unreachable case: \".concat(JSON.stringify(value)));\n};\n\nexport { UnreachableException as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\nimport UnreachableException from '../_util/unreachableException';\n\nvar ButtonGroup = function ButtonGroup(props) {\n  return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (_ref) {\n    var _classNames;\n\n    var getPrefixCls = _ref.getPrefixCls,\n        direction = _ref.direction;\n\n    var customizePrefixCls = props.prefixCls,\n        size = props.size,\n        className = props.className,\n        others = __rest(props, [\"prefixCls\", \"size\", \"className\"]);\n\n    var prefixCls = getPrefixCls('btn-group', customizePrefixCls); // large => lg\n    // small => sm\n\n    var sizeCls = '';\n\n    switch (size) {\n      case 'large':\n        sizeCls = 'lg';\n        break;\n\n      case 'small':\n        sizeCls = 'sm';\n        break;\n\n      case 'middle':\n      case undefined:\n        break;\n\n      default:\n        // eslint-disable-next-line no-console\n        console.warn(new UnreachableException(size));\n    }\n\n    var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(sizeCls), sizeCls), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className);\n    return /*#__PURE__*/React.createElement(\"div\", _extends({}, others, {\n      className: classes\n    }));\n  });\n};\n\nexport default ButtonGroup;","var START_EVENT_NAME_MAP = {\n  transitionstart: {\n    transition: 'transitionstart',\n    WebkitTransition: 'webkitTransitionStart',\n    MozTransition: 'mozTransitionStart',\n    OTransition: 'oTransitionStart',\n    msTransition: 'MSTransitionStart'\n  },\n  animationstart: {\n    animation: 'animationstart',\n    WebkitAnimation: 'webkitAnimationStart',\n    MozAnimation: 'mozAnimationStart',\n    OAnimation: 'oAnimationStart',\n    msAnimation: 'MSAnimationStart'\n  }\n};\nvar END_EVENT_NAME_MAP = {\n  transitionend: {\n    transition: 'transitionend',\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'mozTransitionEnd',\n    OTransition: 'oTransitionEnd',\n    msTransition: 'MSTransitionEnd'\n  },\n  animationend: {\n    animation: 'animationend',\n    WebkitAnimation: 'webkitAnimationEnd',\n    MozAnimation: 'mozAnimationEnd',\n    OAnimation: 'oAnimationEnd',\n    msAnimation: 'MSAnimationEnd'\n  }\n};\nvar startEvents = [];\nvar endEvents = [];\n\nfunction detectEvents() {\n  var testEl = document.createElement('div');\n  var style = testEl.style;\n\n  if (!('AnimationEvent' in window)) {\n    delete START_EVENT_NAME_MAP.animationstart.animation;\n    delete END_EVENT_NAME_MAP.animationend.animation;\n  }\n\n  if (!('TransitionEvent' in window)) {\n    delete START_EVENT_NAME_MAP.transitionstart.transition;\n    delete END_EVENT_NAME_MAP.transitionend.transition;\n  }\n\n  function process(EVENT_NAME_MAP, events) {\n    for (var baseEventName in EVENT_NAME_MAP) {\n      if (EVENT_NAME_MAP.hasOwnProperty(baseEventName)) {\n        var baseEvents = EVENT_NAME_MAP[baseEventName];\n\n        for (var styleName in baseEvents) {\n          if (styleName in style) {\n            events.push(baseEvents[styleName]);\n            break;\n          }\n        }\n      }\n    }\n  }\n\n  process(START_EVENT_NAME_MAP, startEvents);\n  process(END_EVENT_NAME_MAP, endEvents);\n}\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n  detectEvents();\n}\n\nfunction addEventListener(node, eventName, eventListener) {\n  node.addEventListener(eventName, eventListener, false);\n}\n\nfunction removeEventListener(node, eventName, eventListener) {\n  node.removeEventListener(eventName, eventListener, false);\n}\n\nvar TransitionEvents = {\n  // Start events\n  startEvents: startEvents,\n  addStartEventListener: function addStartEventListener(node, eventListener) {\n    if (startEvents.length === 0) {\n      window.setTimeout(eventListener, 0);\n      return;\n    }\n\n    startEvents.forEach(function (startEvent) {\n      addEventListener(node, startEvent, eventListener);\n    });\n  },\n  removeStartEventListener: function removeStartEventListener(node, eventListener) {\n    if (startEvents.length === 0) {\n      return;\n    }\n\n    startEvents.forEach(function (startEvent) {\n      removeEventListener(node, startEvent, eventListener);\n    });\n  },\n  // End events\n  endEvents: endEvents,\n  addEndEventListener: function addEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      window.setTimeout(eventListener, 0);\n      return;\n    }\n\n    endEvents.forEach(function (endEvent) {\n      addEventListener(node, endEvent, eventListener);\n    });\n  },\n  removeEndEventListener: function removeEndEventListener(node, eventListener) {\n    if (endEvents.length === 0) {\n      return;\n    }\n\n    endEvents.forEach(function (endEvent) {\n      removeEventListener(node, endEvent, eventListener);\n    });\n  }\n};\nexport default TransitionEvents;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/createSuper\";\nimport * as React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport TransitionEvents from \"@ant-design/css-animation/es/Event\";\nimport raf from './raf';\nimport { ConfigConsumer, ConfigContext } from '../config-provider';\nvar styleForPseudo; // Where el is the DOM element you'd like to test for visibility\n\nfunction isHidden(element) {\n  if (process.env.NODE_ENV === 'test') {\n    return false;\n  }\n\n  return !element || element.offsetParent === null;\n}\n\nfunction isNotGrey(color) {\n  // eslint-disable-next-line no-useless-escape\n  var match = (color || '').match(/rgba?\\((\\d*), (\\d*), (\\d*)(, [\\d.]*)?\\)/);\n\n  if (match && match[1] && match[2] && match[3]) {\n    return !(match[1] === match[2] && match[2] === match[3]);\n  }\n\n  return true;\n}\n\nvar Wave = /*#__PURE__*/function (_React$Component) {\n  _inherits(Wave, _React$Component);\n\n  var _super = _createSuper(Wave);\n\n  function Wave() {\n    var _this;\n\n    _classCallCheck(this, Wave);\n\n    _this = _super.apply(this, arguments);\n    _this.animationStart = false;\n    _this.destroyed = false;\n\n    _this.onClick = function (node, waveColor) {\n      if (!node || isHidden(node) || node.className.indexOf('-leave') >= 0) {\n        return;\n      }\n\n      var insertExtraNode = _this.props.insertExtraNode;\n      _this.extraNode = document.createElement('div');\n\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          extraNode = _assertThisInitialize.extraNode;\n\n      var getPrefixCls = _this.context.getPrefixCls;\n      extraNode.className = \"\".concat(getPrefixCls(''), \"-click-animating-node\");\n\n      var attributeName = _this.getAttributeName();\n\n      node.setAttribute(attributeName, 'true'); // Not white or transparent or grey\n\n      styleForPseudo = styleForPseudo || document.createElement('style');\n\n      if (waveColor && waveColor !== '#ffffff' && waveColor !== 'rgb(255, 255, 255)' && isNotGrey(waveColor) && !/rgba\\((?:\\d*, ){3}0\\)/.test(waveColor) && // any transparent rgba color\n      waveColor !== 'transparent') {\n        // Add nonce if CSP exist\n        if (_this.csp && _this.csp.nonce) {\n          styleForPseudo.nonce = _this.csp.nonce;\n        }\n\n        extraNode.style.borderColor = waveColor;\n        styleForPseudo.innerHTML = \"\\n      [\".concat(getPrefixCls(''), \"-click-animating-without-extra-node='true']::after, .\").concat(getPrefixCls(''), \"-click-animating-node {\\n        --antd-wave-shadow-color: \").concat(waveColor, \";\\n      }\");\n\n        if (!document.body.contains(styleForPseudo)) {\n          document.body.appendChild(styleForPseudo);\n        }\n      }\n\n      if (insertExtraNode) {\n        node.appendChild(extraNode);\n      }\n\n      TransitionEvents.addStartEventListener(node, _this.onTransitionStart);\n      TransitionEvents.addEndEventListener(node, _this.onTransitionEnd);\n    };\n\n    _this.onTransitionStart = function (e) {\n      if (_this.destroyed) {\n        return;\n      }\n\n      var node = findDOMNode(_assertThisInitialized(_this));\n\n      if (!e || e.target !== node || _this.animationStart) {\n        return;\n      }\n\n      _this.resetEffect(node);\n    };\n\n    _this.onTransitionEnd = function (e) {\n      if (!e || e.animationName !== 'fadeEffect') {\n        return;\n      }\n\n      _this.resetEffect(e.target);\n    };\n\n    _this.bindAnimationEvent = function (node) {\n      if (!node || !node.getAttribute || node.getAttribute('disabled') || node.className.indexOf('disabled') >= 0) {\n        return;\n      }\n\n      var onClick = function onClick(e) {\n        // Fix radio button click twice\n        if (e.target.tagName === 'INPUT' || isHidden(e.target)) {\n          return;\n        }\n\n        _this.resetEffect(node); // Get wave color from target\n\n\n        var waveColor = getComputedStyle(node).getPropertyValue('border-top-color') || // Firefox Compatible\n        getComputedStyle(node).getPropertyValue('border-color') || getComputedStyle(node).getPropertyValue('background-color');\n        _this.clickWaveTimeoutId = window.setTimeout(function () {\n          return _this.onClick(node, waveColor);\n        }, 0);\n        raf.cancel(_this.animationStartId);\n        _this.animationStart = true; // Render to trigger transition event cost 3 frames. Let's delay 10 frames to reset this.\n\n        _this.animationStartId = raf(function () {\n          _this.animationStart = false;\n        }, 10);\n      };\n\n      node.addEventListener('click', onClick, true);\n      return {\n        cancel: function cancel() {\n          node.removeEventListener('click', onClick, true);\n        }\n      };\n    };\n\n    _this.renderWave = function (_ref) {\n      var csp = _ref.csp;\n      var children = _this.props.children;\n      _this.csp = csp;\n      return children;\n    };\n\n    return _this;\n  }\n\n  _createClass(Wave, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var node = findDOMNode(this);\n\n      if (!node || node.nodeType !== 1) {\n        return;\n      }\n\n      this.instance = this.bindAnimationEvent(node);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.instance) {\n        this.instance.cancel();\n      }\n\n      if (this.clickWaveTimeoutId) {\n        clearTimeout(this.clickWaveTimeoutId);\n      }\n\n      this.destroyed = true;\n    }\n  }, {\n    key: \"getAttributeName\",\n    value: function getAttributeName() {\n      var getPrefixCls = this.context.getPrefixCls;\n      var insertExtraNode = this.props.insertExtraNode;\n      return insertExtraNode ? \"\".concat(getPrefixCls(''), \"-click-animating\") : \"\".concat(getPrefixCls(''), \"-click-animating-without-extra-node\");\n    }\n  }, {\n    key: \"resetEffect\",\n    value: function resetEffect(node) {\n      if (!node || node === this.extraNode || !(node instanceof Element)) {\n        return;\n      }\n\n      var insertExtraNode = this.props.insertExtraNode;\n      var attributeName = this.getAttributeName();\n      node.setAttribute(attributeName, 'false'); // edge has bug on `removeAttribute` #14466\n\n      if (styleForPseudo) {\n        styleForPseudo.innerHTML = '';\n      }\n\n      if (insertExtraNode && this.extraNode && node.contains(this.extraNode)) {\n        node.removeChild(this.extraNode);\n      }\n\n      TransitionEvents.removeStartEventListener(node, this.onTransitionStart);\n      TransitionEvents.removeEndEventListener(node, this.onTransitionEnd);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(ConfigConsumer, null, this.renderWave);\n    }\n  }]);\n\n  return Wave;\n}(React.Component);\n\nexport { Wave as default };\nWave.contextType = ConfigContext;","import raf from 'raf';\nvar id = 0;\nvar ids = {}; // Support call raf with delay specified frame\n\nexport default function wrapperRaf(callback) {\n  var delayFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var myId = id++;\n  var restFrames = delayFrames;\n\n  function internalCallback() {\n    restFrames -= 1;\n\n    if (restFrames <= 0) {\n      callback();\n      delete ids[myId];\n    } else {\n      ids[myId] = raf(internalCallback);\n    }\n  }\n\n  ids[myId] = raf(internalCallback);\n  return myId;\n}\n\nwrapperRaf.cancel = function cancel(pid) {\n  if (pid === undefined) return;\n  raf.cancel(ids[pid]);\n  delete ids[pid];\n};\n\nwrapperRaf.ids = ids; // export this for test usage","import * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport LoadingOutlined from '@ant-design/icons/LoadingOutlined';\n\nvar getCollapsedWidth = function getCollapsedWidth() {\n  return {\n    width: 0,\n    opacity: 0,\n    transform: 'scale(0)'\n  };\n};\n\nvar getRealWidth = function getRealWidth(node) {\n  return {\n    width: node.scrollWidth,\n    opacity: 1,\n    transform: 'scale(1)'\n  };\n};\n\nexport default function LoadingIcon(_ref) {\n  var prefixCls = _ref.prefixCls,\n      loading = _ref.loading,\n      existIcon = _ref.existIcon;\n  var visible = !!loading;\n\n  if (existIcon) {\n    return /*#__PURE__*/React.createElement(\"span\", {\n      className: \"\".concat(prefixCls, \"-loading-icon\")\n    }, /*#__PURE__*/React.createElement(LoadingOutlined, null));\n  }\n\n  return /*#__PURE__*/React.createElement(CSSMotion, {\n    visible: visible // We do not really use this motionName\n    ,\n    motionName: \"\".concat(prefixCls, \"-loading-icon-motion\"),\n    removeOnLeave: true,\n    onAppearStart: getCollapsedWidth,\n    onAppearActive: getRealWidth,\n    onEnterStart: getCollapsedWidth,\n    onEnterActive: getRealWidth,\n    onLeaveStart: getRealWidth,\n    onLeaveActive: getCollapsedWidth\n  }, function (_ref2, ref) {\n    var className = _ref2.className,\n        style = _ref2.style;\n    return /*#__PURE__*/React.createElement(\"span\", {\n      className: \"\".concat(prefixCls, \"-loading-icon\"),\n      style: style,\n      ref: ref\n    }, /*#__PURE__*/React.createElement(LoadingOutlined, {\n      className: classNames(className)\n    }));\n  });\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n/* eslint-disable react/button-has-type */\n\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from 'omit.js';\nimport Group from './button-group';\nimport { ConfigContext } from '../config-provider';\nimport Wave from '../_util/wave';\nimport { tuple } from '../_util/type';\nimport devWarning from '../_util/devWarning';\nimport SizeContext from '../config-provider/SizeContext';\nimport LoadingIcon from './LoadingIcon';\nimport { cloneElement } from '../_util/reactNode';\nvar rxTwoCNChar = /^[\\u4e00-\\u9fa5]{2}$/;\nvar isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar);\n\nfunction isString(str) {\n  return typeof str === 'string';\n}\n\nfunction isUnborderedButtonType(type) {\n  return type === 'text' || type === 'link';\n} // Insert one space between two chinese characters automatically.\n\n\nfunction insertSpace(child, needInserted) {\n  // Check the child if is undefined or null.\n  if (child == null) {\n    return;\n  }\n\n  var SPACE = needInserted ? ' ' : ''; // strictNullChecks oops.\n\n  if (typeof child !== 'string' && typeof child !== 'number' && isString(child.type) && isTwoCNChar(child.props.children)) {\n    return cloneElement(child, {\n      children: child.props.children.split('').join(SPACE)\n    });\n  }\n\n  if (typeof child === 'string') {\n    if (isTwoCNChar(child)) {\n      child = child.split('').join(SPACE);\n    }\n\n    return /*#__PURE__*/React.createElement(\"span\", null, child);\n  }\n\n  return child;\n}\n\nfunction spaceChildren(children, needInserted) {\n  var isPrevChildPure = false;\n  var childList = [];\n  React.Children.forEach(children, function (child) {\n    var type = _typeof(child);\n\n    var isCurrentChildPure = type === 'string' || type === 'number';\n\n    if (isPrevChildPure && isCurrentChildPure) {\n      var lastIndex = childList.length - 1;\n      var lastChild = childList[lastIndex];\n      childList[lastIndex] = \"\".concat(lastChild).concat(child);\n    } else {\n      childList.push(child);\n    }\n\n    isPrevChildPure = isCurrentChildPure;\n  }); // Pass to React.Children.map to auto fill key\n\n  return React.Children.map(childList, function (child) {\n    return insertSpace(child, needInserted);\n  });\n}\n\nvar ButtonTypes = tuple('default', 'primary', 'ghost', 'dashed', 'link', 'text');\nvar ButtonShapes = tuple('circle', 'round');\nvar ButtonHTMLTypes = tuple('submit', 'button', 'reset');\nexport function convertLegacyProps(type) {\n  if (type === 'danger') {\n    return {\n      danger: true\n    };\n  }\n\n  return {\n    type: type\n  };\n}\n\nvar InternalButton = function InternalButton(props, ref) {\n  var _classNames;\n\n  var loading = props.loading,\n      customizePrefixCls = props.prefixCls,\n      type = props.type,\n      danger = props.danger,\n      shape = props.shape,\n      customizeSize = props.size,\n      className = props.className,\n      children = props.children,\n      icon = props.icon,\n      ghost = props.ghost,\n      block = props.block,\n      rest = __rest(props, [\"loading\", \"prefixCls\", \"type\", \"danger\", \"shape\", \"size\", \"className\", \"children\", \"icon\", \"ghost\", \"block\"]);\n\n  var size = React.useContext(SizeContext);\n\n  var _React$useState = React.useState(!!loading),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      innerLoading = _React$useState2[0],\n      setLoading = _React$useState2[1];\n\n  var _React$useState3 = React.useState(false),\n      _React$useState4 = _slicedToArray(_React$useState3, 2),\n      hasTwoCNChar = _React$useState4[0],\n      setHasTwoCNChar = _React$useState4[1];\n\n  var _React$useContext = React.useContext(ConfigContext),\n      getPrefixCls = _React$useContext.getPrefixCls,\n      autoInsertSpaceInButton = _React$useContext.autoInsertSpaceInButton,\n      direction = _React$useContext.direction;\n\n  var buttonRef = ref || /*#__PURE__*/React.createRef();\n  var delayTimeoutRef = React.useRef();\n\n  var isNeedInserted = function isNeedInserted() {\n    return React.Children.count(children) === 1 && !icon && !isUnborderedButtonType(type);\n  };\n\n  var fixTwoCNChar = function fixTwoCNChar() {\n    // Fix for HOC usage like <FormatMessage />\n    if (!buttonRef || !buttonRef.current || autoInsertSpaceInButton === false) {\n      return;\n    }\n\n    var buttonText = buttonRef.current.textContent;\n\n    if (isNeedInserted() && isTwoCNChar(buttonText)) {\n      if (!hasTwoCNChar) {\n        setHasTwoCNChar(true);\n      }\n    } else if (hasTwoCNChar) {\n      setHasTwoCNChar(false);\n    }\n  }; // =============== Update Loading ===============\n\n\n  var loadingOrDelay;\n\n  if (_typeof(loading) === 'object' && loading.delay) {\n    loadingOrDelay = loading.delay || true;\n  } else {\n    loadingOrDelay = !!loading;\n  }\n\n  React.useEffect(function () {\n    clearTimeout(delayTimeoutRef.current);\n\n    if (typeof loadingOrDelay === 'number') {\n      delayTimeoutRef.current = window.setTimeout(function () {\n        setLoading(loadingOrDelay);\n      }, loadingOrDelay);\n    } else {\n      setLoading(loadingOrDelay);\n    }\n  }, [loadingOrDelay]);\n  React.useEffect(function () {\n    fixTwoCNChar();\n  }, [buttonRef]);\n\n  var handleClick = function handleClick(e) {\n    var onClick = props.onClick;\n\n    if (innerLoading) {\n      return;\n    }\n\n    if (onClick) {\n      onClick(e);\n    }\n  };\n\n  devWarning(!(typeof icon === 'string' && icon.length > 2), 'Button', \"`icon` is using ReactNode instead of string naming in v4. Please check `\".concat(icon, \"` at https://ant.design/components/icon\"));\n  devWarning(!(ghost && isUnborderedButtonType(type)), 'Button', \"`link` or `text` button can't be a `ghost` button.\");\n  var prefixCls = getPrefixCls('btn', customizePrefixCls);\n  var autoInsertSpace = autoInsertSpaceInButton !== false; // large => lg\n  // small => sm\n\n  var sizeCls = '';\n\n  switch (customizeSize || size) {\n    case 'large':\n      sizeCls = 'lg';\n      break;\n\n    case 'small':\n      sizeCls = 'sm';\n      break;\n\n    default:\n      break;\n  }\n\n  var iconType = innerLoading ? 'loading' : icon;\n  var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(type), type), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(shape), shape), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(sizeCls), sizeCls), _defineProperty(_classNames, \"\".concat(prefixCls, \"-icon-only\"), !children && children !== 0 && iconType), _defineProperty(_classNames, \"\".concat(prefixCls, \"-background-ghost\"), ghost && !isUnborderedButtonType(type)), _defineProperty(_classNames, \"\".concat(prefixCls, \"-loading\"), innerLoading), _defineProperty(_classNames, \"\".concat(prefixCls, \"-two-chinese-chars\"), hasTwoCNChar && autoInsertSpace), _defineProperty(_classNames, \"\".concat(prefixCls, \"-block\"), block), _defineProperty(_classNames, \"\".concat(prefixCls, \"-dangerous\"), !!danger), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className);\n  var iconNode = icon && !innerLoading ? icon : /*#__PURE__*/React.createElement(LoadingIcon, {\n    existIcon: !!icon,\n    prefixCls: prefixCls,\n    loading: !!innerLoading\n  });\n  var kids = children || children === 0 ? spaceChildren(children, isNeedInserted() && autoInsertSpace) : null;\n  var linkButtonRestProps = omit(rest, ['htmlType', 'loading', 'navigate']);\n\n  if (linkButtonRestProps.href !== undefined) {\n    return /*#__PURE__*/React.createElement(\"a\", _extends({}, linkButtonRestProps, {\n      className: classes,\n      onClick: handleClick,\n      ref: buttonRef\n    }), iconNode, kids);\n  } // React does not recognize the `htmlType` prop on a DOM element. Here we pick it out of `rest`.\n\n\n  var _a = rest,\n      htmlType = _a.htmlType,\n      otherProps = __rest(_a, [\"htmlType\"]);\n\n  var buttonNode = /*#__PURE__*/React.createElement(\"button\", _extends({}, omit(otherProps, ['loading']), {\n    type: htmlType,\n    className: classes,\n    onClick: handleClick,\n    ref: buttonRef\n  }), iconNode, kids);\n\n  if (isUnborderedButtonType(type)) {\n    return buttonNode;\n  }\n\n  return /*#__PURE__*/React.createElement(Wave, null, buttonNode);\n};\n\nvar Button = /*#__PURE__*/React.forwardRef(InternalButton);\nButton.displayName = 'Button';\nButton.defaultProps = {\n  loading: false,\n  ghost: false,\n  block: false,\n  htmlType: 'button'\n};\nButton.Group = Group;\nButton.__ANT_BUTTON = true;\nexport default Button;"],"sourceRoot":""}