{"version":3,"file":"static/chunks/1380-7130db27ca942f20.js","mappings":"AAAA","sources":["webpack://_N_E/./node_modules/rc-dropdown/es/placements.js","webpack://_N_E/./node_modules/rc-dropdown/es/hooks/useAccessibility.js","webpack://_N_E/./node_modules/rc-dropdown/es/Dropdown.js","webpack://_N_E/./node_modules/rc-dropdown/es/index.js","webpack://_N_E/./node_modules/rc-tabs/es/TabContext.js","webpack://_N_E/./node_modules/rc-tabs/es/TabPanelList/TabPane.js","webpack://_N_E/./node_modules/rc-tabs/es/TabPanelList/index.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useRaf.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/TabNode.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useOffsets.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useVisibleRange.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/AddButton.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/OperationNode.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useTouchMove.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useRefs.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useSyncState.js","webpack://_N_E/./node_modules/rc-tabs/es/util.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/ExtraContent.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/index.js","webpack://_N_E/./node_modules/rc-tabs/es/TabNavList/Wrapper.js","webpack://_N_E/./node_modules/rc-tabs/es/hooks/useAnimateConfig.js","webpack://_N_E/./node_modules/rc-tabs/es/Tabs.js","webpack://_N_E/./node_modules/rc-tabs/es/index.js","webpack://_N_E/<anon>"],"sourcesContent":["var autoAdjustOverflow = {\n  adjustX: 1,\n  adjustY: 1\n};\nvar targetOffset = [0, 0];\nvar placements = {\n  topLeft: {\n    points: ['bl', 'tl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  topCenter: {\n    points: ['bc', 'tc'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  topRight: {\n    points: ['br', 'tr'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  bottomLeft: {\n    points: ['tl', 'bl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  },\n  bottomCenter: {\n    points: ['tc', 'bc'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  },\n  bottomRight: {\n    points: ['tr', 'br'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  }\n};\nexport default placements;","import * as React from 'react';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport raf from \"rc-util/es/raf\";\nimport { getFocusNodeList } from \"rc-util/es/Dom/focus\";\nvar ESC = KeyCode.ESC,\n    TAB = KeyCode.TAB;\nexport default function useAccessibility(_ref) {\n  var visible = _ref.visible,\n      setTriggerVisible = _ref.setTriggerVisible,\n      triggerRef = _ref.triggerRef,\n      onVisibleChange = _ref.onVisibleChange,\n      autoFocus = _ref.autoFocus;\n  var focusMenuRef = React.useRef(false);\n\n  var handleCloseMenuAndReturnFocus = function handleCloseMenuAndReturnFocus() {\n    if (visible && triggerRef.current) {\n      var _triggerRef$current, _triggerRef$current$t, _triggerRef$current$t2, _triggerRef$current$t3;\n\n      (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$t = _triggerRef$current.triggerRef) === null || _triggerRef$current$t === void 0 ? void 0 : (_triggerRef$current$t2 = _triggerRef$current$t.current) === null || _triggerRef$current$t2 === void 0 ? void 0 : (_triggerRef$current$t3 = _triggerRef$current$t2.focus) === null || _triggerRef$current$t3 === void 0 ? void 0 : _triggerRef$current$t3.call(_triggerRef$current$t2);\n      setTriggerVisible(false);\n\n      if (typeof onVisibleChange === 'function') {\n        onVisibleChange(false);\n      }\n    }\n  };\n\n  var focusMenu = function focusMenu() {\n    var _triggerRef$current2, _triggerRef$current2$, _triggerRef$current2$2, _triggerRef$current2$3;\n\n    var elements = getFocusNodeList((_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.popupRef) === null || _triggerRef$current2$ === void 0 ? void 0 : (_triggerRef$current2$2 = _triggerRef$current2$.current) === null || _triggerRef$current2$2 === void 0 ? void 0 : (_triggerRef$current2$3 = _triggerRef$current2$2.getElement) === null || _triggerRef$current2$3 === void 0 ? void 0 : _triggerRef$current2$3.call(_triggerRef$current2$2));\n    var firstElement = elements[0];\n\n    if (firstElement === null || firstElement === void 0 ? void 0 : firstElement.focus) {\n      firstElement.focus();\n      focusMenuRef.current = true;\n      return true;\n    }\n\n    return false;\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    switch (event.keyCode) {\n      case ESC:\n        handleCloseMenuAndReturnFocus();\n        break;\n\n      case TAB:\n        {\n          var focusResult = false;\n\n          if (!focusMenuRef.current) {\n            focusResult = focusMenu();\n          }\n\n          if (focusResult) {\n            event.preventDefault();\n          } else {\n            handleCloseMenuAndReturnFocus();\n          }\n\n          break;\n        }\n    }\n  };\n\n  React.useEffect(function () {\n    if (visible) {\n      window.addEventListener('keydown', handleKeyDown);\n\n      if (autoFocus) {\n        // FIXME: hack with raf\n        raf(focusMenu, 3);\n      }\n\n      return function () {\n        window.removeEventListener('keydown', handleKeyDown);\n        focusMenuRef.current = false;\n      };\n    }\n\n    return function () {\n      focusMenuRef.current = false;\n    };\n  }, [visible]); // eslint-disable-line react-hooks/exhaustive-deps\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"arrow\", \"prefixCls\", \"transitionName\", \"animation\", \"align\", \"placement\", \"placements\", \"getPopupContainer\", \"showAction\", \"hideAction\", \"overlayClassName\", \"overlayStyle\", \"visible\", \"trigger\", \"autoFocus\"];\nimport * as React from 'react';\nimport Trigger from 'rc-trigger';\nimport classNames from 'classnames';\nimport Placements from './placements';\nimport useAccessibility from './hooks/useAccessibility';\n\nfunction Dropdown(props, ref) {\n  var _props$arrow = props.arrow,\n      arrow = _props$arrow === void 0 ? false : _props$arrow,\n      _props$prefixCls = props.prefixCls,\n      prefixCls = _props$prefixCls === void 0 ? 'rc-dropdown' : _props$prefixCls,\n      transitionName = props.transitionName,\n      animation = props.animation,\n      align = props.align,\n      _props$placement = props.placement,\n      placement = _props$placement === void 0 ? 'bottomLeft' : _props$placement,\n      _props$placements = props.placements,\n      placements = _props$placements === void 0 ? Placements : _props$placements,\n      getPopupContainer = props.getPopupContainer,\n      showAction = props.showAction,\n      hideAction = props.hideAction,\n      overlayClassName = props.overlayClassName,\n      overlayStyle = props.overlayStyle,\n      visible = props.visible,\n      _props$trigger = props.trigger,\n      trigger = _props$trigger === void 0 ? ['hover'] : _props$trigger,\n      autoFocus = props.autoFocus,\n      otherProps = _objectWithoutProperties(props, _excluded);\n\n  var _React$useState = React.useState(),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      triggerVisible = _React$useState2[0],\n      setTriggerVisible = _React$useState2[1];\n\n  var mergedVisible = 'visible' in props ? visible : triggerVisible;\n  var triggerRef = React.useRef(null);\n  React.useImperativeHandle(ref, function () {\n    return triggerRef.current;\n  });\n  useAccessibility({\n    visible: mergedVisible,\n    setTriggerVisible: setTriggerVisible,\n    triggerRef: triggerRef,\n    onVisibleChange: props.onVisibleChange,\n    autoFocus: autoFocus\n  });\n\n  var getOverlayElement = function getOverlayElement() {\n    var overlay = props.overlay;\n    var overlayElement;\n\n    if (typeof overlay === 'function') {\n      overlayElement = overlay();\n    } else {\n      overlayElement = overlay;\n    }\n\n    return overlayElement;\n  };\n\n  var onClick = function onClick(e) {\n    var onOverlayClick = props.onOverlayClick;\n    setTriggerVisible(false);\n\n    if (onOverlayClick) {\n      onOverlayClick(e);\n    }\n  };\n\n  var onVisibleChange = function onVisibleChange(newVisible) {\n    var onVisibleChangeProp = props.onVisibleChange;\n    setTriggerVisible(newVisible);\n\n    if (typeof onVisibleChangeProp === 'function') {\n      onVisibleChangeProp(newVisible);\n    }\n  };\n\n  var getMenuElement = function getMenuElement() {\n    var overlayElement = getOverlayElement();\n    return /*#__PURE__*/React.createElement(React.Fragment, null, arrow && /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-arrow\")\n    }), overlayElement);\n  };\n\n  var getMenuElementOrLambda = function getMenuElementOrLambda() {\n    var overlay = props.overlay;\n\n    if (typeof overlay === 'function') {\n      return getMenuElement;\n    }\n\n    return getMenuElement();\n  };\n\n  var getMinOverlayWidthMatchTrigger = function getMinOverlayWidthMatchTrigger() {\n    var minOverlayWidthMatchTrigger = props.minOverlayWidthMatchTrigger,\n        alignPoint = props.alignPoint;\n\n    if ('minOverlayWidthMatchTrigger' in props) {\n      return minOverlayWidthMatchTrigger;\n    }\n\n    return !alignPoint;\n  };\n\n  var getOpenClassName = function getOpenClassName() {\n    var openClassName = props.openClassName;\n\n    if (openClassName !== undefined) {\n      return openClassName;\n    }\n\n    return \"\".concat(prefixCls, \"-open\");\n  };\n\n  var renderChildren = function renderChildren() {\n    var children = props.children;\n    var childrenProps = children.props ? children.props : {};\n    var childClassName = classNames(childrenProps.className, getOpenClassName());\n    return mergedVisible && children ? /*#__PURE__*/React.cloneElement(children, {\n      className: childClassName\n    }) : children;\n  };\n\n  var triggerHideAction = hideAction;\n\n  if (!triggerHideAction && trigger.indexOf('contextMenu') !== -1) {\n    triggerHideAction = ['click'];\n  }\n\n  return /*#__PURE__*/React.createElement(Trigger, _objectSpread(_objectSpread({\n    builtinPlacements: placements\n  }, otherProps), {}, {\n    prefixCls: prefixCls,\n    ref: triggerRef,\n    popupClassName: classNames(overlayClassName, _defineProperty({}, \"\".concat(prefixCls, \"-show-arrow\"), arrow)),\n    popupStyle: overlayStyle,\n    action: trigger,\n    showAction: showAction,\n    hideAction: triggerHideAction || [],\n    popupPlacement: placement,\n    popupAlign: align,\n    popupTransitionName: transitionName,\n    popupAnimation: animation,\n    popupVisible: mergedVisible,\n    stretch: getMinOverlayWidthMatchTrigger() ? 'minWidth' : '',\n    popup: getMenuElementOrLambda(),\n    onPopupVisibleChange: onVisibleChange,\n    onPopupClick: onClick,\n    getPopupContainer: getPopupContainer\n  }), renderChildren());\n}\n\nexport default /*#__PURE__*/React.forwardRef(Dropdown);","import Dropdown from './Dropdown';\nexport default Dropdown;","import { createContext } from 'react';\nexport default /*#__PURE__*/createContext(null);","import * as React from 'react';\nimport classNames from 'classnames';\nvar TabPane = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n  var prefixCls = _ref.prefixCls,\n      className = _ref.className,\n      style = _ref.style,\n      id = _ref.id,\n      active = _ref.active,\n      tabKey = _ref.tabKey,\n      children = _ref.children;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    id: id && \"\".concat(id, \"-panel-\").concat(tabKey),\n    role: \"tabpanel\",\n    tabIndex: active ? 0 : -1,\n    \"aria-labelledby\": id && \"\".concat(id, \"-tab-\").concat(tabKey),\n    \"aria-hidden\": !active,\n    style: style,\n    className: classNames(prefixCls, active && \"\".concat(prefixCls, \"-active\"), className),\n    ref: ref\n  }, children);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  TabPane.displayName = 'TabPane';\n}\n\nexport default TabPane;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"key\", \"forceRender\", \"style\", \"className\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport TabContext from '../TabContext';\nimport TabPane from './TabPane';\nexport default function TabPanelList(_ref) {\n  var id = _ref.id,\n      activeKey = _ref.activeKey,\n      animated = _ref.animated,\n      tabPosition = _ref.tabPosition,\n      destroyInactiveTabPane = _ref.destroyInactiveTabPane;\n\n  var _React$useContext = React.useContext(TabContext),\n      prefixCls = _React$useContext.prefixCls,\n      tabs = _React$useContext.tabs;\n\n  var tabPaneAnimated = animated.tabPane;\n  var tabPanePrefixCls = \"\".concat(prefixCls, \"-tabpane\");\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-content-holder\"))\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-content\"), \"\".concat(prefixCls, \"-content-\").concat(tabPosition), _defineProperty({}, \"\".concat(prefixCls, \"-content-animated\"), tabPaneAnimated))\n  }, tabs.map(function (_ref2) {\n    var key = _ref2.key,\n        forceRender = _ref2.forceRender,\n        paneStyle = _ref2.style,\n        paneClassName = _ref2.className,\n        restTabProps = _objectWithoutProperties(_ref2, _excluded);\n\n    var active = key === activeKey;\n    return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n      key: key,\n      visible: active,\n      forceRender: forceRender,\n      removeOnLeave: !!destroyInactiveTabPane,\n      leavedClassName: \"\".concat(tabPanePrefixCls, \"-hidden\")\n    }, animated.tabPaneMotion), function (_ref3, ref) {\n      var motionStyle = _ref3.style,\n          motionClassName = _ref3.className;\n      return /*#__PURE__*/React.createElement(TabPane, _extends({}, restTabProps, {\n        prefixCls: tabPanePrefixCls,\n        id: id,\n        tabKey: key,\n        animated: tabPaneAnimated,\n        active: active,\n        style: _objectSpread(_objectSpread({}, paneStyle), motionStyle),\n        className: classNames(paneClassName, motionClassName),\n        ref: ref\n      }));\n    });\n  })));\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useRef, useState, useEffect } from 'react';\nimport raf from \"rc-util/es/raf\";\nexport default function useRaf(callback) {\n  var rafRef = useRef();\n  var removedRef = useRef(false);\n\n  function trigger() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (!removedRef.current) {\n      raf.cancel(rafRef.current);\n      rafRef.current = raf(function () {\n        callback.apply(void 0, args);\n      });\n    }\n  }\n\n  useEffect(function () {\n    //be compatible with react 18 StrictMode in dev\n    removedRef.current = false;\n    return function () {\n      removedRef.current = true;\n      raf.cancel(rafRef.current);\n    };\n  }, []);\n  return trigger;\n}\nexport function useRafState(defaultState) {\n  var batchRef = useRef([]);\n\n  var _useState = useState({}),\n      _useState2 = _slicedToArray(_useState, 2),\n      forceUpdate = _useState2[1];\n\n  var state = useRef(typeof defaultState === 'function' ? defaultState() : defaultState);\n  var flushUpdate = useRaf(function () {\n    var current = state.current;\n    batchRef.current.forEach(function (callback) {\n      current = callback(current);\n    });\n    batchRef.current = [];\n    state.current = current;\n    forceUpdate({});\n  });\n\n  function updater(callback) {\n    batchRef.current.push(callback);\n    flushUpdate();\n  }\n\n  return [state.current, updater];\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\n\nfunction TabNode(_ref, ref) {\n  var _classNames;\n\n  var prefixCls = _ref.prefixCls,\n      id = _ref.id,\n      active = _ref.active,\n      _ref$tab = _ref.tab,\n      key = _ref$tab.key,\n      label = _ref$tab.label,\n      disabled = _ref$tab.disabled,\n      closeIcon = _ref$tab.closeIcon,\n      closable = _ref.closable,\n      renderWrapper = _ref.renderWrapper,\n      removeAriaLabel = _ref.removeAriaLabel,\n      editable = _ref.editable,\n      onClick = _ref.onClick,\n      onRemove = _ref.onRemove,\n      onFocus = _ref.onFocus,\n      style = _ref.style;\n  var tabPrefix = \"\".concat(prefixCls, \"-tab\");\n  React.useEffect(function () {\n    return onRemove;\n  }, []);\n  var removable = editable && closable !== false && !disabled;\n\n  function onInternalClick(e) {\n    if (disabled) {\n      return;\n    }\n\n    onClick(e);\n  }\n\n  function onRemoveTab(event) {\n    event.preventDefault();\n    event.stopPropagation();\n    editable.onEdit('remove', {\n      key: key,\n      event: event\n    });\n  }\n\n  var node = /*#__PURE__*/React.createElement(\"div\", {\n    key: key,\n    ref: ref,\n    className: classNames(tabPrefix, (_classNames = {}, _defineProperty(_classNames, \"\".concat(tabPrefix, \"-with-remove\"), removable), _defineProperty(_classNames, \"\".concat(tabPrefix, \"-active\"), active), _defineProperty(_classNames, \"\".concat(tabPrefix, \"-disabled\"), disabled), _classNames)),\n    style: style,\n    onClick: onInternalClick\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    role: \"tab\",\n    \"aria-selected\": active,\n    id: id && \"\".concat(id, \"-tab-\").concat(key),\n    className: \"\".concat(tabPrefix, \"-btn\"),\n    \"aria-controls\": id && \"\".concat(id, \"-panel-\").concat(key),\n    \"aria-disabled\": disabled,\n    tabIndex: disabled ? null : 0,\n    onClick: function onClick(e) {\n      e.stopPropagation();\n      onInternalClick(e);\n    },\n    onKeyDown: function onKeyDown(e) {\n      if ([KeyCode.SPACE, KeyCode.ENTER].includes(e.which)) {\n        e.preventDefault();\n        onInternalClick(e);\n      }\n    },\n    onFocus: onFocus\n  }, label), removable && /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    \"aria-label\": removeAriaLabel || 'remove',\n    tabIndex: 0,\n    className: \"\".concat(tabPrefix, \"-remove\"),\n    onClick: function onClick(e) {\n      e.stopPropagation();\n      onRemoveTab(e);\n    }\n  }, closeIcon || editable.removeIcon || '×'));\n  return renderWrapper ? renderWrapper(node) : node;\n}\n\nexport default /*#__PURE__*/React.forwardRef(TabNode);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { useMemo } from 'react';\nvar DEFAULT_SIZE = {\n  width: 0,\n  height: 0,\n  left: 0,\n  top: 0\n};\nexport default function useOffsets(tabs, tabSizes, holderScrollWidth) {\n  return useMemo(function () {\n    var _tabs$;\n\n    var map = new Map();\n    var lastOffset = tabSizes.get((_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key) || DEFAULT_SIZE;\n    var rightOffset = lastOffset.left + lastOffset.width;\n\n    for (var i = 0; i < tabs.length; i += 1) {\n      var key = tabs[i].key;\n      var data = tabSizes.get(key); // Reuse last one when not exist yet\n\n      if (!data) {\n        var _tabs;\n\n        data = tabSizes.get((_tabs = tabs[i - 1]) === null || _tabs === void 0 ? void 0 : _tabs.key) || DEFAULT_SIZE;\n      }\n\n      var entity = map.get(key) || _objectSpread({}, data); // Right\n\n\n      entity.right = rightOffset - entity.left - entity.width; // Update entity\n\n      map.set(key, entity);\n    }\n\n    return map;\n  }, [tabs.map(function (tab) {\n    return tab.key;\n  }).join('_'), tabSizes, holderScrollWidth]);\n}","import { useMemo } from 'react';\nvar DEFAULT_SIZE = {\n  width: 0,\n  height: 0,\n  left: 0,\n  top: 0,\n  right: 0\n};\nexport default function useVisibleRange(tabOffsets, visibleTabContentValue, transform, tabContentSizeValue, addNodeSizeValue, operationNodeSizeValue, _ref) {\n  var tabs = _ref.tabs,\n      tabPosition = _ref.tabPosition,\n      rtl = _ref.rtl;\n  var charUnit;\n  var position;\n  var transformSize;\n\n  if (['top', 'bottom'].includes(tabPosition)) {\n    charUnit = 'width';\n    position = rtl ? 'right' : 'left';\n    transformSize = Math.abs(transform);\n  } else {\n    charUnit = 'height';\n    position = 'top';\n    transformSize = -transform;\n  }\n\n  return useMemo(function () {\n    if (!tabs.length) {\n      return [0, 0];\n    }\n\n    var len = tabs.length;\n    var endIndex = len;\n\n    for (var i = 0; i < len; i += 1) {\n      var offset = tabOffsets.get(tabs[i].key) || DEFAULT_SIZE;\n\n      if (offset[position] + offset[charUnit] > transformSize + visibleTabContentValue) {\n        endIndex = i - 1;\n        break;\n      }\n    }\n\n    var startIndex = 0;\n\n    for (var _i = len - 1; _i >= 0; _i -= 1) {\n      var _offset = tabOffsets.get(tabs[_i].key) || DEFAULT_SIZE;\n\n      if (_offset[position] < transformSize) {\n        startIndex = _i + 1;\n        break;\n      }\n    }\n\n    return [startIndex, endIndex];\n  }, [tabOffsets, visibleTabContentValue, tabContentSizeValue, addNodeSizeValue, operationNodeSizeValue, transformSize, tabPosition, tabs.map(function (tab) {\n    return tab.key;\n  }).join('_'), rtl]);\n}","import * as React from 'react';\n\nfunction AddButton(_ref, ref) {\n  var prefixCls = _ref.prefixCls,\n      editable = _ref.editable,\n      locale = _ref.locale,\n      style = _ref.style;\n\n  if (!editable || editable.showAdd === false) {\n    return null;\n  }\n\n  return /*#__PURE__*/React.createElement(\"button\", {\n    ref: ref,\n    type: \"button\",\n    className: \"\".concat(prefixCls, \"-nav-add\"),\n    style: style,\n    \"aria-label\": (locale === null || locale === void 0 ? void 0 : locale.addAriaLabel) || 'Add tab',\n    onClick: function onClick(event) {\n      editable.onEdit('add', {\n        event: event\n      });\n    }\n  }, editable.addIcon || '+');\n}\n\nexport default /*#__PURE__*/React.forwardRef(AddButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useState, useEffect } from 'react';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport Menu, { MenuItem } from 'rc-menu';\nimport Dropdown from 'rc-dropdown';\nimport AddButton from './AddButton';\n\nfunction OperationNode(_ref, ref) {\n  var prefixCls = _ref.prefixCls,\n      id = _ref.id,\n      tabs = _ref.tabs,\n      locale = _ref.locale,\n      mobile = _ref.mobile,\n      _ref$moreIcon = _ref.moreIcon,\n      moreIcon = _ref$moreIcon === void 0 ? 'More' : _ref$moreIcon,\n      moreTransitionName = _ref.moreTransitionName,\n      style = _ref.style,\n      className = _ref.className,\n      editable = _ref.editable,\n      tabBarGutter = _ref.tabBarGutter,\n      rtl = _ref.rtl,\n      removeAriaLabel = _ref.removeAriaLabel,\n      onTabClick = _ref.onTabClick,\n      getPopupContainer = _ref.getPopupContainer,\n      popupClassName = _ref.popupClassName;\n\n  // ======================== Dropdown ========================\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      open = _useState2[0],\n      setOpen = _useState2[1];\n\n  var _useState3 = useState(null),\n      _useState4 = _slicedToArray(_useState3, 2),\n      selectedKey = _useState4[0],\n      setSelectedKey = _useState4[1];\n\n  var popupId = \"\".concat(id, \"-more-popup\");\n  var dropdownPrefix = \"\".concat(prefixCls, \"-dropdown\");\n  var selectedItemId = selectedKey !== null ? \"\".concat(popupId, \"-\").concat(selectedKey) : null;\n  var dropdownAriaLabel = locale === null || locale === void 0 ? void 0 : locale.dropdownAriaLabel;\n\n  function onRemoveTab(event, key) {\n    event.preventDefault();\n    event.stopPropagation();\n    editable.onEdit('remove', {\n      key: key,\n      event: event\n    });\n  }\n\n  var menu = /*#__PURE__*/React.createElement(Menu, {\n    onClick: function onClick(_ref2) {\n      var key = _ref2.key,\n          domEvent = _ref2.domEvent;\n      onTabClick(key, domEvent);\n      setOpen(false);\n    },\n    prefixCls: \"\".concat(dropdownPrefix, \"-menu\"),\n    id: popupId,\n    tabIndex: -1,\n    role: \"listbox\",\n    \"aria-activedescendant\": selectedItemId,\n    selectedKeys: [selectedKey],\n    \"aria-label\": dropdownAriaLabel !== undefined ? dropdownAriaLabel : 'expanded dropdown'\n  }, tabs.map(function (tab) {\n    var removable = editable && tab.closable !== false && !tab.disabled;\n    return /*#__PURE__*/React.createElement(MenuItem, {\n      key: tab.key,\n      id: \"\".concat(popupId, \"-\").concat(tab.key),\n      role: \"option\",\n      \"aria-controls\": id && \"\".concat(id, \"-panel-\").concat(tab.key),\n      disabled: tab.disabled\n    }, /*#__PURE__*/React.createElement(\"span\", null, tab.label), removable && /*#__PURE__*/React.createElement(\"button\", {\n      type: \"button\",\n      \"aria-label\": removeAriaLabel || 'remove',\n      tabIndex: 0,\n      className: \"\".concat(dropdownPrefix, \"-menu-item-remove\"),\n      onClick: function onClick(e) {\n        e.stopPropagation();\n        onRemoveTab(e, tab.key);\n      }\n    }, tab.closeIcon || editable.removeIcon || '×'));\n  }));\n\n  function selectOffset(offset) {\n    var enabledTabs = tabs.filter(function (tab) {\n      return !tab.disabled;\n    });\n    var selectedIndex = enabledTabs.findIndex(function (tab) {\n      return tab.key === selectedKey;\n    }) || 0;\n    var len = enabledTabs.length;\n\n    for (var i = 0; i < len; i += 1) {\n      selectedIndex = (selectedIndex + offset + len) % len;\n      var tab = enabledTabs[selectedIndex];\n\n      if (!tab.disabled) {\n        setSelectedKey(tab.key);\n        return;\n      }\n    }\n  }\n\n  function onKeyDown(e) {\n    var which = e.which;\n\n    if (!open) {\n      if ([KeyCode.DOWN, KeyCode.SPACE, KeyCode.ENTER].includes(which)) {\n        setOpen(true);\n        e.preventDefault();\n      }\n\n      return;\n    }\n\n    switch (which) {\n      case KeyCode.UP:\n        selectOffset(-1);\n        e.preventDefault();\n        break;\n\n      case KeyCode.DOWN:\n        selectOffset(1);\n        e.preventDefault();\n        break;\n\n      case KeyCode.ESC:\n        setOpen(false);\n        break;\n\n      case KeyCode.SPACE:\n      case KeyCode.ENTER:\n        if (selectedKey !== null) onTabClick(selectedKey, e);\n        break;\n    }\n  } // ========================= Effect =========================\n\n\n  useEffect(function () {\n    // We use query element here to avoid React strict warning\n    var ele = document.getElementById(selectedItemId);\n\n    if (ele && ele.scrollIntoView) {\n      ele.scrollIntoView(false);\n    }\n  }, [selectedKey]);\n  useEffect(function () {\n    if (!open) {\n      setSelectedKey(null);\n    }\n  }, [open]); // ========================= Render =========================\n\n  var moreStyle = _defineProperty({}, rtl ? 'marginRight' : 'marginLeft', tabBarGutter);\n\n  if (!tabs.length) {\n    moreStyle.visibility = 'hidden';\n    moreStyle.order = 1;\n  }\n\n  var overlayClassName = classNames(_defineProperty({}, \"\".concat(dropdownPrefix, \"-rtl\"), rtl));\n  var moreNode = mobile ? null : /*#__PURE__*/React.createElement(Dropdown, {\n    prefixCls: dropdownPrefix,\n    overlay: menu,\n    trigger: ['hover'],\n    visible: tabs.length ? open : false,\n    transitionName: moreTransitionName,\n    onVisibleChange: setOpen,\n    overlayClassName: classNames(overlayClassName, popupClassName),\n    mouseEnterDelay: 0.1,\n    mouseLeaveDelay: 0.1,\n    getPopupContainer: getPopupContainer\n  }, /*#__PURE__*/React.createElement(\"button\", {\n    type: \"button\",\n    className: \"\".concat(prefixCls, \"-nav-more\"),\n    style: moreStyle,\n    tabIndex: -1,\n    \"aria-hidden\": \"true\",\n    \"aria-haspopup\": \"listbox\",\n    \"aria-controls\": popupId,\n    id: \"\".concat(id, \"-more\"),\n    \"aria-expanded\": open,\n    onKeyDown: onKeyDown\n  }, moreIcon));\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-nav-operations\"), className),\n    style: style,\n    ref: ref\n  }, moreNode, /*#__PURE__*/React.createElement(AddButton, {\n    prefixCls: prefixCls,\n    locale: locale,\n    editable: editable\n  }));\n}\n\nexport default /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(OperationNode), function (_, next) {\n  return (// https://github.com/ant-design/ant-design/issues/32544\n    // We'd better remove syntactic sugar in `rc-menu` since this has perf issue\n    next.tabMoving\n  );\n});","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useState, useRef } from 'react';\nvar MIN_SWIPE_DISTANCE = 0.1;\nvar STOP_SWIPE_DISTANCE = 0.01;\nvar REFRESH_INTERVAL = 20;\nvar SPEED_OFF_MULTIPLE = Math.pow(0.995, REFRESH_INTERVAL); // ================================= Hook =================================\n\nexport default function useTouchMove(ref, onOffset) {\n  var _useState = useState(),\n      _useState2 = _slicedToArray(_useState, 2),\n      touchPosition = _useState2[0],\n      setTouchPosition = _useState2[1];\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      lastTimestamp = _useState4[0],\n      setLastTimestamp = _useState4[1];\n\n  var _useState5 = useState(0),\n      _useState6 = _slicedToArray(_useState5, 2),\n      lastTimeDiff = _useState6[0],\n      setLastTimeDiff = _useState6[1];\n\n  var _useState7 = useState(),\n      _useState8 = _slicedToArray(_useState7, 2),\n      lastOffset = _useState8[0],\n      setLastOffset = _useState8[1];\n\n  var motionRef = useRef(); // ========================= Events =========================\n  // >>> Touch events\n\n  function onTouchStart(e) {\n    var _e$touches$ = e.touches[0],\n        screenX = _e$touches$.screenX,\n        screenY = _e$touches$.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    window.clearInterval(motionRef.current);\n  }\n\n  function onTouchMove(e) {\n    if (!touchPosition) return;\n    e.preventDefault();\n    var _e$touches$2 = e.touches[0],\n        screenX = _e$touches$2.screenX,\n        screenY = _e$touches$2.screenY;\n    setTouchPosition({\n      x: screenX,\n      y: screenY\n    });\n    var offsetX = screenX - touchPosition.x;\n    var offsetY = screenY - touchPosition.y;\n    onOffset(offsetX, offsetY);\n    var now = Date.now();\n    setLastTimestamp(now);\n    setLastTimeDiff(now - lastTimestamp);\n    setLastOffset({\n      x: offsetX,\n      y: offsetY\n    });\n  }\n\n  function onTouchEnd() {\n    if (!touchPosition) return;\n    setTouchPosition(null);\n    setLastOffset(null); // Swipe if needed\n\n    if (lastOffset) {\n      var distanceX = lastOffset.x / lastTimeDiff;\n      var distanceY = lastOffset.y / lastTimeDiff;\n      var absX = Math.abs(distanceX);\n      var absY = Math.abs(distanceY); // Skip swipe if low distance\n\n      if (Math.max(absX, absY) < MIN_SWIPE_DISTANCE) return;\n      var currentX = distanceX;\n      var currentY = distanceY;\n      motionRef.current = window.setInterval(function () {\n        if (Math.abs(currentX) < STOP_SWIPE_DISTANCE && Math.abs(currentY) < STOP_SWIPE_DISTANCE) {\n          window.clearInterval(motionRef.current);\n          return;\n        }\n\n        currentX *= SPEED_OFF_MULTIPLE;\n        currentY *= SPEED_OFF_MULTIPLE;\n        onOffset(currentX * REFRESH_INTERVAL, currentY * REFRESH_INTERVAL);\n      }, REFRESH_INTERVAL);\n    }\n  } // >>> Wheel event\n\n\n  var lastWheelDirectionRef = useRef();\n\n  function onWheel(e) {\n    var deltaX = e.deltaX,\n        deltaY = e.deltaY; // Convert both to x & y since wheel only happened on PC\n\n    var mixed = 0;\n    var absX = Math.abs(deltaX);\n    var absY = Math.abs(deltaY);\n\n    if (absX === absY) {\n      mixed = lastWheelDirectionRef.current === 'x' ? deltaX : deltaY;\n    } else if (absX > absY) {\n      mixed = deltaX;\n      lastWheelDirectionRef.current = 'x';\n    } else {\n      mixed = deltaY;\n      lastWheelDirectionRef.current = 'y';\n    }\n\n    if (onOffset(-mixed, -mixed)) {\n      e.preventDefault();\n    }\n  } // ========================= Effect =========================\n\n\n  var touchEventsRef = useRef(null);\n  touchEventsRef.current = {\n    onTouchStart: onTouchStart,\n    onTouchMove: onTouchMove,\n    onTouchEnd: onTouchEnd,\n    onWheel: onWheel\n  };\n  React.useEffect(function () {\n    function onProxyTouchStart(e) {\n      touchEventsRef.current.onTouchStart(e);\n    }\n\n    function onProxyTouchMove(e) {\n      touchEventsRef.current.onTouchMove(e);\n    }\n\n    function onProxyTouchEnd(e) {\n      touchEventsRef.current.onTouchEnd(e);\n    }\n\n    function onProxyWheel(e) {\n      touchEventsRef.current.onWheel(e);\n    }\n\n    document.addEventListener('touchmove', onProxyTouchMove, {\n      passive: false\n    });\n    document.addEventListener('touchend', onProxyTouchEnd, {\n      passive: false\n    }); // No need to clean up since element removed\n\n    ref.current.addEventListener('touchstart', onProxyTouchStart, {\n      passive: false\n    });\n    ref.current.addEventListener('wheel', onProxyWheel);\n    return function () {\n      document.removeEventListener('touchmove', onProxyTouchMove);\n      document.removeEventListener('touchend', onProxyTouchEnd);\n    };\n  }, []);\n}","import * as React from 'react';\nimport { useRef } from 'react';\nexport default function useRefs() {\n  var cacheRefs = useRef(new Map());\n\n  function getRef(key) {\n    if (!cacheRefs.current.has(key)) {\n      cacheRefs.current.set(key, /*#__PURE__*/React.createRef());\n    }\n\n    return cacheRefs.current.get(key);\n  }\n\n  function removeRef(key) {\n    cacheRefs.current.delete(key);\n  }\n\n  return [getRef, removeRef];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default function useSyncState(defaultState, onChange) {\n  var stateRef = React.useRef(defaultState);\n\n  var _React$useState = React.useState({}),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      forceUpdate = _React$useState2[1];\n\n  function setState(updater) {\n    var newValue = typeof updater === 'function' ? updater(stateRef.current) : updater;\n\n    if (newValue !== stateRef.current) {\n      onChange(newValue, stateRef.current);\n    }\n\n    stateRef.current = newValue;\n    forceUpdate({});\n  }\n\n  return [stateRef.current, setState];\n}","/**\n * We trade Map as deps which may change with same value but different ref object.\n * We should make it as hash for deps\n * */\nexport function stringify(obj) {\n  var tgt;\n\n  if (obj instanceof Map) {\n    tgt = {};\n    obj.forEach(function (v, k) {\n      tgt[k] = v;\n    });\n  } else {\n    tgt = obj;\n  }\n\n  return JSON.stringify(tgt);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport * as React from 'react';\nvar ExtraContent = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n  var position = _ref.position,\n      prefixCls = _ref.prefixCls,\n      extra = _ref.extra;\n  if (!extra) return null;\n  var content; // Parse extra\n\n  var assertExtra = {};\n\n  if (_typeof(extra) === 'object' && ! /*#__PURE__*/React.isValidElement(extra)) {\n    assertExtra = extra;\n  } else {\n    assertExtra.right = extra;\n  }\n\n  if (position === 'right') {\n    content = assertExtra.right;\n  }\n\n  if (position === 'left') {\n    content = assertExtra.left;\n  }\n\n  return content ? /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-extra-content\"),\n    ref: ref\n  }, content) : null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  ExtraContent.displayName = 'ExtraContent';\n}\n\nexport default ExtraContent;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport raf from \"rc-util/es/raf\";\nimport { useComposeRef } from \"rc-util/es/ref\";\nimport ResizeObserver from 'rc-resize-observer';\nimport useRaf, { useRafState } from '../hooks/useRaf';\nimport TabNode from './TabNode';\nimport useOffsets from '../hooks/useOffsets';\nimport useVisibleRange from '../hooks/useVisibleRange';\nimport OperationNode from './OperationNode';\nimport TabContext from '../TabContext';\nimport useTouchMove from '../hooks/useTouchMove';\nimport useRefs from '../hooks/useRefs';\nimport AddButton from './AddButton';\nimport useSyncState from '../hooks/useSyncState';\nimport { stringify } from '../util';\nimport ExtraContent from './ExtraContent';\n\nvar getSize = function getSize(refObj) {\n  var _ref = refObj.current || {},\n      _ref$offsetWidth = _ref.offsetWidth,\n      offsetWidth = _ref$offsetWidth === void 0 ? 0 : _ref$offsetWidth,\n      _ref$offsetHeight = _ref.offsetHeight,\n      offsetHeight = _ref$offsetHeight === void 0 ? 0 : _ref$offsetHeight;\n\n  return [offsetWidth, offsetHeight];\n};\n/**\n * Convert `SizeInfo` to unit value. Such as [123, 456] with `top` position get `123`\n */\n\n\nvar getUnitValue = function getUnitValue(size, tabPositionTopOrBottom) {\n  return size[tabPositionTopOrBottom ? 0 : 1];\n};\n\nfunction TabNavList(props, ref) {\n  var _classNames;\n\n  var _React$useContext = React.useContext(TabContext),\n      prefixCls = _React$useContext.prefixCls,\n      tabs = _React$useContext.tabs;\n\n  var className = props.className,\n      style = props.style,\n      id = props.id,\n      animated = props.animated,\n      activeKey = props.activeKey,\n      rtl = props.rtl,\n      extra = props.extra,\n      editable = props.editable,\n      locale = props.locale,\n      tabPosition = props.tabPosition,\n      tabBarGutter = props.tabBarGutter,\n      children = props.children,\n      onTabClick = props.onTabClick,\n      onTabScroll = props.onTabScroll;\n  var containerRef = useRef();\n  var extraLeftRef = useRef();\n  var extraRightRef = useRef();\n  var tabsWrapperRef = useRef();\n  var tabListRef = useRef();\n  var operationsRef = useRef();\n  var innerAddButtonRef = useRef();\n\n  var _useRefs = useRefs(),\n      _useRefs2 = _slicedToArray(_useRefs, 2),\n      getBtnRef = _useRefs2[0],\n      removeBtnRef = _useRefs2[1];\n\n  var tabPositionTopOrBottom = tabPosition === 'top' || tabPosition === 'bottom';\n\n  var _useSyncState = useSyncState(0, function (next, prev) {\n    if (tabPositionTopOrBottom && onTabScroll) {\n      onTabScroll({\n        direction: next > prev ? 'left' : 'right'\n      });\n    }\n  }),\n      _useSyncState2 = _slicedToArray(_useSyncState, 2),\n      transformLeft = _useSyncState2[0],\n      setTransformLeft = _useSyncState2[1];\n\n  var _useSyncState3 = useSyncState(0, function (next, prev) {\n    if (!tabPositionTopOrBottom && onTabScroll) {\n      onTabScroll({\n        direction: next > prev ? 'top' : 'bottom'\n      });\n    }\n  }),\n      _useSyncState4 = _slicedToArray(_useSyncState3, 2),\n      transformTop = _useSyncState4[0],\n      setTransformTop = _useSyncState4[1];\n\n  var _useState = useState([0, 0]),\n      _useState2 = _slicedToArray(_useState, 2),\n      containerExcludeExtraSize = _useState2[0],\n      setContainerExcludeExtraSize = _useState2[1];\n\n  var _useState3 = useState([0, 0]),\n      _useState4 = _slicedToArray(_useState3, 2),\n      tabContentSize = _useState4[0],\n      setTabContentSize = _useState4[1];\n\n  var _useState5 = useState([0, 0]),\n      _useState6 = _slicedToArray(_useState5, 2),\n      addSize = _useState6[0],\n      setAddSize = _useState6[1];\n\n  var _useState7 = useState([0, 0]),\n      _useState8 = _slicedToArray(_useState7, 2),\n      operationSize = _useState8[0],\n      setOperationSize = _useState8[1];\n\n  var _useRafState = useRafState(new Map()),\n      _useRafState2 = _slicedToArray(_useRafState, 2),\n      tabSizes = _useRafState2[0],\n      setTabSizes = _useRafState2[1];\n\n  var tabOffsets = useOffsets(tabs, tabSizes, tabContentSize[0]); // ========================== Unit =========================\n\n  var containerExcludeExtraSizeValue = getUnitValue(containerExcludeExtraSize, tabPositionTopOrBottom);\n  var tabContentSizeValue = getUnitValue(tabContentSize, tabPositionTopOrBottom);\n  var addSizeValue = getUnitValue(addSize, tabPositionTopOrBottom);\n  var operationSizeValue = getUnitValue(operationSize, tabPositionTopOrBottom);\n  var needScroll = containerExcludeExtraSizeValue < tabContentSizeValue + addSizeValue;\n  var visibleTabContentValue = needScroll ? containerExcludeExtraSizeValue - operationSizeValue : containerExcludeExtraSizeValue - addSizeValue; // ========================== Util =========================\n\n  var operationsHiddenClassName = \"\".concat(prefixCls, \"-nav-operations-hidden\");\n  var transformMin = 0;\n  var transformMax = 0;\n\n  if (!tabPositionTopOrBottom) {\n    transformMin = Math.min(0, visibleTabContentValue - tabContentSizeValue);\n    transformMax = 0;\n  } else if (rtl) {\n    transformMin = 0;\n    transformMax = Math.max(0, tabContentSizeValue - visibleTabContentValue);\n  } else {\n    transformMin = Math.min(0, visibleTabContentValue - tabContentSizeValue);\n    transformMax = 0;\n  }\n\n  function alignInRange(value) {\n    if (value < transformMin) {\n      return transformMin;\n    }\n\n    if (value > transformMax) {\n      return transformMax;\n    }\n\n    return value;\n  } // ========================= Mobile ========================\n\n\n  var touchMovingRef = useRef();\n\n  var _useState9 = useState(),\n      _useState10 = _slicedToArray(_useState9, 2),\n      lockAnimation = _useState10[0],\n      setLockAnimation = _useState10[1];\n\n  function doLockAnimation() {\n    setLockAnimation(Date.now());\n  }\n\n  function clearTouchMoving() {\n    window.clearTimeout(touchMovingRef.current);\n  }\n\n  useTouchMove(tabsWrapperRef, function (offsetX, offsetY) {\n    function doMove(setState, offset) {\n      setState(function (value) {\n        var newValue = alignInRange(value + offset);\n        return newValue;\n      });\n    } // Skip scroll if place is enough\n\n\n    if (containerExcludeExtraSizeValue >= tabContentSizeValue) {\n      return false;\n    }\n\n    if (tabPositionTopOrBottom) {\n      doMove(setTransformLeft, offsetX);\n    } else {\n      doMove(setTransformTop, offsetY);\n    }\n\n    clearTouchMoving();\n    doLockAnimation();\n    return true;\n  });\n  useEffect(function () {\n    clearTouchMoving();\n\n    if (lockAnimation) {\n      touchMovingRef.current = window.setTimeout(function () {\n        setLockAnimation(0);\n      }, 100);\n    }\n\n    return clearTouchMoving;\n  }, [lockAnimation]); // ===================== Visible Range =====================\n  // Render tab node & collect tab offset\n\n  var _useVisibleRange = useVisibleRange(tabOffsets, // Container\n  visibleTabContentValue, // Transform\n  tabPositionTopOrBottom ? transformLeft : transformTop, // Tabs\n  tabContentSizeValue, // Add\n  addSizeValue, // Operation\n  operationSizeValue, _objectSpread(_objectSpread({}, props), {}, {\n    tabs: tabs\n  })),\n      _useVisibleRange2 = _slicedToArray(_useVisibleRange, 2),\n      visibleStart = _useVisibleRange2[0],\n      visibleEnd = _useVisibleRange2[1]; // ========================= Scroll ========================\n\n\n  var scrollToTab = function scrollToTab() {\n    var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeKey;\n    var tabOffset = tabOffsets.get(key) || {\n      width: 0,\n      height: 0,\n      left: 0,\n      right: 0,\n      top: 0\n    };\n\n    if (tabPositionTopOrBottom) {\n      // ============ Align with top & bottom ============\n      var newTransform = transformLeft; // RTL\n\n      if (rtl) {\n        if (tabOffset.right < transformLeft) {\n          newTransform = tabOffset.right;\n        } else if (tabOffset.right + tabOffset.width > transformLeft + visibleTabContentValue) {\n          newTransform = tabOffset.right + tabOffset.width - visibleTabContentValue;\n        }\n      } // LTR\n      else if (tabOffset.left < -transformLeft) {\n        newTransform = -tabOffset.left;\n      } else if (tabOffset.left + tabOffset.width > -transformLeft + visibleTabContentValue) {\n        newTransform = -(tabOffset.left + tabOffset.width - visibleTabContentValue);\n      }\n\n      setTransformTop(0);\n      setTransformLeft(alignInRange(newTransform));\n    } else {\n      // ============ Align with left & right ============\n      var _newTransform = transformTop;\n\n      if (tabOffset.top < -transformTop) {\n        _newTransform = -tabOffset.top;\n      } else if (tabOffset.top + tabOffset.height > -transformTop + visibleTabContentValue) {\n        _newTransform = -(tabOffset.top + tabOffset.height - visibleTabContentValue);\n      }\n\n      setTransformLeft(0);\n      setTransformTop(alignInRange(_newTransform));\n    }\n  }; // ========================== Tab ==========================\n\n\n  var tabNodeStyle = {};\n\n  if (tabPosition === 'top' || tabPosition === 'bottom') {\n    tabNodeStyle[rtl ? 'marginRight' : 'marginLeft'] = tabBarGutter;\n  } else {\n    tabNodeStyle.marginTop = tabBarGutter;\n  }\n\n  var tabNodes = tabs.map(function (tab, i) {\n    var key = tab.key;\n    return /*#__PURE__*/React.createElement(TabNode, {\n      id: id,\n      prefixCls: prefixCls,\n      key: key,\n      tab: tab\n      /* first node should not have margin left */\n      ,\n      style: i === 0 ? undefined : tabNodeStyle,\n      closable: tab.closable,\n      editable: editable,\n      active: key === activeKey,\n      renderWrapper: children,\n      removeAriaLabel: locale === null || locale === void 0 ? void 0 : locale.removeAriaLabel,\n      ref: getBtnRef(key),\n      onClick: function onClick(e) {\n        onTabClick(key, e);\n      },\n      onRemove: function onRemove() {\n        removeBtnRef(key);\n      },\n      onFocus: function onFocus() {\n        scrollToTab(key);\n        doLockAnimation();\n\n        if (!tabsWrapperRef.current) {\n          return;\n        } // Focus element will make scrollLeft change which we should reset back\n\n\n        if (!rtl) {\n          tabsWrapperRef.current.scrollLeft = 0;\n        }\n\n        tabsWrapperRef.current.scrollTop = 0;\n      }\n    });\n  });\n  var onListHolderResize = useRaf(function () {\n    // Update wrapper records\n    var containerSize = getSize(containerRef);\n    var extraLeftSize = getSize(extraLeftRef);\n    var extraRightSize = getSize(extraRightRef);\n    setContainerExcludeExtraSize([containerSize[0] - extraLeftSize[0] - extraRightSize[0], containerSize[1] - extraLeftSize[1] - extraRightSize[1]]);\n    var newAddSize = getSize(innerAddButtonRef);\n    setAddSize(newAddSize);\n    var newOperationSize = getSize(operationsRef);\n    setOperationSize(newOperationSize); // Which includes add button size\n\n    var tabContentFullSize = getSize(tabListRef);\n    setTabContentSize([tabContentFullSize[0] - newAddSize[0], tabContentFullSize[1] - newAddSize[1]]); // Update buttons records\n\n    setTabSizes(function () {\n      var newSizes = new Map();\n      tabs.forEach(function (_ref2) {\n        var key = _ref2.key;\n        var btnNode = getBtnRef(key).current;\n\n        if (btnNode) {\n          newSizes.set(key, {\n            width: btnNode.offsetWidth,\n            height: btnNode.offsetHeight,\n            left: btnNode.offsetLeft,\n            top: btnNode.offsetTop\n          });\n        }\n      });\n      return newSizes;\n    });\n  }); // ======================== Dropdown =======================\n\n  var startHiddenTabs = tabs.slice(0, visibleStart);\n  var endHiddenTabs = tabs.slice(visibleEnd + 1);\n  var hiddenTabs = [].concat(_toConsumableArray(startHiddenTabs), _toConsumableArray(endHiddenTabs)); // =================== Link & Operations ===================\n\n  var _useState11 = useState(),\n      _useState12 = _slicedToArray(_useState11, 2),\n      inkStyle = _useState12[0],\n      setInkStyle = _useState12[1];\n\n  var activeTabOffset = tabOffsets.get(activeKey); // Delay set ink style to avoid remove tab blink\n\n  var inkBarRafRef = useRef();\n\n  function cleanInkBarRaf() {\n    raf.cancel(inkBarRafRef.current);\n  }\n\n  useEffect(function () {\n    var newInkStyle = {};\n\n    if (activeTabOffset) {\n      if (tabPositionTopOrBottom) {\n        if (rtl) {\n          newInkStyle.right = activeTabOffset.right;\n        } else {\n          newInkStyle.left = activeTabOffset.left;\n        }\n\n        newInkStyle.width = activeTabOffset.width;\n      } else {\n        newInkStyle.top = activeTabOffset.top;\n        newInkStyle.height = activeTabOffset.height;\n      }\n    }\n\n    cleanInkBarRaf();\n    inkBarRafRef.current = raf(function () {\n      setInkStyle(newInkStyle);\n    });\n    return cleanInkBarRaf;\n  }, [activeTabOffset, tabPositionTopOrBottom, rtl]); // ========================= Effect ========================\n\n  useEffect(function () {\n    scrollToTab(); // eslint-disable-next-line\n  }, [activeKey, stringify(activeTabOffset), stringify(tabOffsets), tabPositionTopOrBottom]); // Should recalculate when rtl changed\n\n  useEffect(function () {\n    onListHolderResize(); // eslint-disable-next-line\n  }, [rtl]); // ========================= Render ========================\n\n  var hasDropdown = !!hiddenTabs.length;\n  var wrapPrefix = \"\".concat(prefixCls, \"-nav-wrap\");\n  var pingLeft;\n  var pingRight;\n  var pingTop;\n  var pingBottom;\n\n  if (tabPositionTopOrBottom) {\n    if (rtl) {\n      pingRight = transformLeft > 0;\n      pingLeft = transformLeft + containerExcludeExtraSizeValue < tabContentSizeValue;\n    } else {\n      pingLeft = transformLeft < 0;\n      pingRight = -transformLeft + containerExcludeExtraSizeValue < tabContentSizeValue;\n    }\n  } else {\n    pingTop = transformTop < 0;\n    pingBottom = -transformTop + containerExcludeExtraSizeValue < tabContentSizeValue;\n  }\n\n  return /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    ref: useComposeRef(ref, containerRef),\n    role: \"tablist\",\n    className: classNames(\"\".concat(prefixCls, \"-nav\"), className),\n    style: style,\n    onKeyDown: function onKeyDown() {\n      // No need animation when use keyboard\n      doLockAnimation();\n    }\n  }, /*#__PURE__*/React.createElement(ExtraContent, {\n    ref: extraLeftRef,\n    position: \"left\",\n    extra: extra,\n    prefixCls: prefixCls\n  }), /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(wrapPrefix, (_classNames = {}, _defineProperty(_classNames, \"\".concat(wrapPrefix, \"-ping-left\"), pingLeft), _defineProperty(_classNames, \"\".concat(wrapPrefix, \"-ping-right\"), pingRight), _defineProperty(_classNames, \"\".concat(wrapPrefix, \"-ping-top\"), pingTop), _defineProperty(_classNames, \"\".concat(wrapPrefix, \"-ping-bottom\"), pingBottom), _classNames)),\n    ref: tabsWrapperRef\n  }, /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\n  }, /*#__PURE__*/React.createElement(\"div\", {\n    ref: tabListRef,\n    className: \"\".concat(prefixCls, \"-nav-list\"),\n    style: {\n      transform: \"translate(\".concat(transformLeft, \"px, \").concat(transformTop, \"px)\"),\n      transition: lockAnimation ? 'none' : undefined\n    }\n  }, tabNodes, /*#__PURE__*/React.createElement(AddButton, {\n    ref: innerAddButtonRef,\n    prefixCls: prefixCls,\n    locale: locale,\n    editable: editable,\n    style: _objectSpread(_objectSpread({}, tabNodes.length === 0 ? undefined : tabNodeStyle), {}, {\n      visibility: hasDropdown ? 'hidden' : null\n    })\n  }), /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-ink-bar\"), _defineProperty({}, \"\".concat(prefixCls, \"-ink-bar-animated\"), animated.inkBar)),\n    style: inkStyle\n  })))), /*#__PURE__*/React.createElement(OperationNode, _extends({}, props, {\n    removeAriaLabel: locale === null || locale === void 0 ? void 0 : locale.removeAriaLabel,\n    ref: operationsRef,\n    prefixCls: prefixCls,\n    tabs: hiddenTabs,\n    className: !hasDropdown && operationsHiddenClassName,\n    tabMoving: !!lockAnimation\n  })), /*#__PURE__*/React.createElement(ExtraContent, {\n    ref: extraRightRef,\n    position: \"right\",\n    extra: extra,\n    prefixCls: prefixCls\n  })));\n  /* eslint-enable */\n}\n\nexport default /*#__PURE__*/React.forwardRef(TabNavList);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"renderTabBar\"],\n    _excluded2 = [\"label\", \"key\"];\nimport React from \"react\";\n// zombieJ: To compatible with `renderTabBar` usage.\nimport TabNavList from '.';\nimport { useContext } from 'react';\nimport TabContext from '../TabContext';\nimport TabPane from '../TabPanelList/TabPane'; // We have to create a TabNavList components.\n\nexport default function TabNavListWrapper(_ref) {\n  var renderTabBar = _ref.renderTabBar,\n      restProps = _objectWithoutProperties(_ref, _excluded);\n\n  var _useContext = useContext(TabContext),\n      tabs = _useContext.tabs;\n\n  if (renderTabBar) {\n    var tabNavBarProps = _objectSpread(_objectSpread({}, restProps), {}, {\n      // Legacy support. We do not use this actually\n      panes: tabs.map(function (_ref2) {\n        var label = _ref2.label,\n            key = _ref2.key,\n            restTabProps = _objectWithoutProperties(_ref2, _excluded2);\n\n        return /*#__PURE__*/React.createElement(TabPane, _extends({\n          tab: label,\n          key: key,\n          tabKey: key\n        }, restTabProps));\n      })\n    });\n\n    return renderTabBar(tabNavBarProps, TabNavList);\n  }\n\n  return /*#__PURE__*/React.createElement(TabNavList, restProps);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport warning from \"rc-util/es/warning\";\nexport default function useAnimateConfig() {\n  var animated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    inkBar: true,\n    tabPane: false\n  };\n  var mergedAnimated;\n\n  if (animated === false) {\n    mergedAnimated = {\n      inkBar: false,\n      tabPane: false\n    };\n  } else if (animated === true) {\n    mergedAnimated = {\n      inkBar: true,\n      tabPane: false\n    };\n  } else {\n    mergedAnimated = _objectSpread({\n      inkBar: true\n    }, _typeof(animated) === 'object' ? animated : {});\n  } // Enable tabPane animation if provide motion\n\n\n  if (mergedAnimated.tabPaneMotion && mergedAnimated.tabPane === undefined) {\n    mergedAnimated.tabPane = true;\n  }\n\n  if (!mergedAnimated.tabPaneMotion && mergedAnimated.tabPane) {\n    if (process.env.NODE_ENV !== 'production') {\n      warning(false, '`animated.tabPane` is true but `animated.tabPaneMotion` is not provided. Motion will not work.');\n    }\n\n    mergedAnimated.tabPane = false;\n  }\n\n  return mergedAnimated;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"id\", \"prefixCls\", \"className\", \"items\", \"direction\", \"activeKey\", \"defaultActiveKey\", \"editable\", \"animated\", \"tabPosition\", \"tabBarGutter\", \"tabBarStyle\", \"tabBarExtraContent\", \"locale\", \"moreIcon\", \"moreTransitionName\", \"destroyInactiveTabPane\", \"renderTabBar\", \"onChange\", \"onTabClick\", \"onTabScroll\", \"getPopupContainer\", \"popupClassName\"];\n// Accessibility https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role\nimport * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport isMobile from \"rc-util/es/isMobile\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport TabPanelList from './TabPanelList';\nimport TabContext from './TabContext';\nimport TabNavListWrapper from './TabNavList/Wrapper';\nimport useAnimateConfig from './hooks/useAnimateConfig';\n/**\n * Should added antd:\n * - type\n *\n * Removed:\n * - onNextClick\n * - onPrevClick\n * - keyboard\n */\n// Used for accessibility\n\nvar uuid = 0;\n\nfunction Tabs(_ref, ref) {\n  var _classNames;\n\n  var id = _ref.id,\n      _ref$prefixCls = _ref.prefixCls,\n      prefixCls = _ref$prefixCls === void 0 ? 'rc-tabs' : _ref$prefixCls,\n      className = _ref.className,\n      items = _ref.items,\n      direction = _ref.direction,\n      activeKey = _ref.activeKey,\n      defaultActiveKey = _ref.defaultActiveKey,\n      editable = _ref.editable,\n      animated = _ref.animated,\n      _ref$tabPosition = _ref.tabPosition,\n      tabPosition = _ref$tabPosition === void 0 ? 'top' : _ref$tabPosition,\n      tabBarGutter = _ref.tabBarGutter,\n      tabBarStyle = _ref.tabBarStyle,\n      tabBarExtraContent = _ref.tabBarExtraContent,\n      locale = _ref.locale,\n      moreIcon = _ref.moreIcon,\n      moreTransitionName = _ref.moreTransitionName,\n      destroyInactiveTabPane = _ref.destroyInactiveTabPane,\n      renderTabBar = _ref.renderTabBar,\n      onChange = _ref.onChange,\n      onTabClick = _ref.onTabClick,\n      onTabScroll = _ref.onTabScroll,\n      getPopupContainer = _ref.getPopupContainer,\n      popupClassName = _ref.popupClassName,\n      restProps = _objectWithoutProperties(_ref, _excluded);\n\n  var tabs = React.useMemo(function () {\n    return (items || []).filter(function (item) {\n      return item && _typeof(item) === 'object' && 'key' in item;\n    });\n  }, [items]);\n  var rtl = direction === 'rtl';\n  var mergedAnimated = useAnimateConfig(animated); // ======================== Mobile ========================\n\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      mobile = _useState2[0],\n      setMobile = _useState2[1];\n\n  useEffect(function () {\n    // Only update on the client side\n    setMobile(isMobile());\n  }, []); // ====================== Active Key ======================\n\n  var _useMergedState = useMergedState(function () {\n    var _tabs$;\n\n    return (_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.key;\n  }, {\n    value: activeKey,\n    defaultValue: defaultActiveKey\n  }),\n      _useMergedState2 = _slicedToArray(_useMergedState, 2),\n      mergedActiveKey = _useMergedState2[0],\n      setMergedActiveKey = _useMergedState2[1];\n\n  var _useState3 = useState(function () {\n    return tabs.findIndex(function (tab) {\n      return tab.key === mergedActiveKey;\n    });\n  }),\n      _useState4 = _slicedToArray(_useState3, 2),\n      activeIndex = _useState4[0],\n      setActiveIndex = _useState4[1]; // Reset active key if not exist anymore\n\n\n  useEffect(function () {\n    var newActiveIndex = tabs.findIndex(function (tab) {\n      return tab.key === mergedActiveKey;\n    });\n\n    if (newActiveIndex === -1) {\n      var _tabs$newActiveIndex;\n\n      newActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));\n      setMergedActiveKey((_tabs$newActiveIndex = tabs[newActiveIndex]) === null || _tabs$newActiveIndex === void 0 ? void 0 : _tabs$newActiveIndex.key);\n    }\n\n    setActiveIndex(newActiveIndex);\n  }, [tabs.map(function (tab) {\n    return tab.key;\n  }).join('_'), mergedActiveKey, activeIndex]); // ===================== Accessibility ====================\n\n  var _useMergedState3 = useMergedState(null, {\n    value: id\n  }),\n      _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n      mergedId = _useMergedState4[0],\n      setMergedId = _useMergedState4[1]; // Async generate id to avoid ssr mapping failed\n\n\n  useEffect(function () {\n    if (!id) {\n      setMergedId(\"rc-tabs-\".concat(process.env.NODE_ENV === 'test' ? 'test' : uuid));\n      uuid += 1;\n    }\n  }, []); // ======================== Events ========================\n\n  function onInternalTabClick(key, e) {\n    onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(key, e);\n    var isActiveChanged = key !== mergedActiveKey;\n    setMergedActiveKey(key);\n\n    if (isActiveChanged) {\n      onChange === null || onChange === void 0 ? void 0 : onChange(key);\n    }\n  } // ======================== Render ========================\n\n\n  var sharedProps = {\n    id: mergedId,\n    activeKey: mergedActiveKey,\n    animated: mergedAnimated,\n    tabPosition: tabPosition,\n    rtl: rtl,\n    mobile: mobile\n  };\n  var tabNavBar;\n\n  var tabNavBarProps = _objectSpread(_objectSpread({}, sharedProps), {}, {\n    editable: editable,\n    locale: locale,\n    moreIcon: moreIcon,\n    moreTransitionName: moreTransitionName,\n    tabBarGutter: tabBarGutter,\n    onTabClick: onInternalTabClick,\n    onTabScroll: onTabScroll,\n    extra: tabBarExtraContent,\n    style: tabBarStyle,\n    panes: null,\n    getPopupContainer: getPopupContainer,\n    popupClassName: popupClassName\n  });\n\n  return /*#__PURE__*/React.createElement(TabContext.Provider, {\n    value: {\n      tabs: tabs,\n      prefixCls: prefixCls\n    }\n  }, /*#__PURE__*/React.createElement(\"div\", _extends({\n    ref: ref,\n    id: id,\n    className: classNames(prefixCls, \"\".concat(prefixCls, \"-\").concat(tabPosition), (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-mobile\"), mobile), _defineProperty(_classNames, \"\".concat(prefixCls, \"-editable\"), editable), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), rtl), _classNames), className)\n  }, restProps), tabNavBar, /*#__PURE__*/React.createElement(TabNavListWrapper, _extends({}, tabNavBarProps, {\n    renderTabBar: renderTabBar\n  })), /*#__PURE__*/React.createElement(TabPanelList, _extends({\n    destroyInactiveTabPane: destroyInactiveTabPane\n  }, sharedProps, {\n    animated: mergedAnimated\n  }))));\n}\n\nvar ForwardTabs = /*#__PURE__*/React.forwardRef(Tabs);\n\nif (process.env.NODE_ENV !== 'production') {\n  ForwardTabs.displayName = 'Tabs';\n}\n\nexport default ForwardTabs;","import Tabs from './Tabs';\nexport default Tabs;"],"names":[],"sourceRoot":""}