bef0153834fd7b60e7c84b65df1566a5.json 55.4 KB
{"ast":null,"code":"import _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 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';\n\nvar ExtraContent = function ExtraContent(_ref) {\n  var position = _ref.position,\n      prefixCls = _ref.prefixCls,\n      extra = _ref.extra;\n  if (!extra) return null;\n  var content;\n  var assertExtra = extra;\n\n  if (position === 'right') {\n    content = assertExtra.right || !assertExtra.left && assertExtra || null;\n  }\n\n  if (position === 'left') {\n    content = assertExtra.left || null;\n  }\n\n  return content ? /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-extra-content\")\n  }, content) : null;\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 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),\n      _useState2 = _slicedToArray(_useState, 2),\n      wrapperScrollWidth = _useState2[0],\n      setWrapperScrollWidth = _useState2[1];\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      wrapperScrollHeight = _useState4[0],\n      setWrapperScrollHeight = _useState4[1];\n\n  var _useState5 = useState(0),\n      _useState6 = _slicedToArray(_useState5, 2),\n      wrapperContentWidth = _useState6[0],\n      setWrapperContentWidth = _useState6[1];\n\n  var _useState7 = useState(0),\n      _useState8 = _slicedToArray(_useState7, 2),\n      wrapperContentHeight = _useState8[0],\n      setWrapperContentHeight = _useState8[1];\n\n  var _useState9 = useState(null),\n      _useState10 = _slicedToArray(_useState9, 2),\n      wrapperWidth = _useState10[0],\n      setWrapperWidth = _useState10[1];\n\n  var _useState11 = useState(null),\n      _useState12 = _slicedToArray(_useState11, 2),\n      wrapperHeight = _useState12[0],\n      setWrapperHeight = _useState12[1];\n\n  var _useState13 = useState(0),\n      _useState14 = _slicedToArray(_useState13, 2),\n      addWidth = _useState14[0],\n      setAddWidth = _useState14[1];\n\n  var _useState15 = useState(0),\n      _useState16 = _slicedToArray(_useState15, 2),\n      addHeight = _useState16[0],\n      setAddHeight = _useState16[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, wrapperScrollWidth); // ========================== 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, wrapperHeight - wrapperScrollHeight);\n    transformMax = 0;\n  } else if (rtl) {\n    transformMin = 0;\n    transformMax = Math.max(0, wrapperScrollWidth - wrapperWidth);\n  } else {\n    transformMin = Math.min(0, wrapperWidth - wrapperScrollWidth);\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 _useState17 = useState(),\n      _useState18 = _slicedToArray(_useState17, 2),\n      lockAnimation = _useState18[0],\n      setLockAnimation = _useState18[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    }\n\n    if (tabPositionTopOrBottom) {\n      // Skip scroll if place is enough\n      if (wrapperWidth >= wrapperScrollWidth) {\n        return false;\n      }\n\n      doMove(setTransformLeft, offsetX);\n    } else {\n      if (wrapperHeight >= wrapperScrollHeight) {\n        return false;\n      }\n\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]); // ========================= Scroll ========================\n\n  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 + wrapperWidth) {\n          newTransform = tabOffset.right + tabOffset.width - wrapperWidth;\n        }\n      } // LTR\n      else if (tabOffset.left < -transformLeft) {\n          newTransform = -tabOffset.left;\n        } else if (tabOffset.left + tabOffset.width > -transformLeft + wrapperWidth) {\n          newTransform = -(tabOffset.left + tabOffset.width - wrapperWidth);\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 + wrapperHeight) {\n        _newTransform = -(tabOffset.top + tabOffset.height - wrapperHeight);\n      }\n\n      setTransformLeft(0);\n      setTransformTop(alignInRange(_newTransform));\n    }\n  } // ========================== Tab ==========================\n  // Render tab node & collect tab offset\n\n\n  var _useVisibleRange = useVisibleRange(tabOffsets, {\n    width: wrapperWidth,\n    height: wrapperHeight,\n    left: transformLeft,\n    top: transformTop\n  }, {\n    width: wrapperContentWidth,\n    height: wrapperContentHeight\n  }, {\n    width: addWidth,\n    height: addHeight\n  }, _objectSpread(_objectSpread({}, props), {}, {\n    tabs: tabs\n  })),\n      _useVisibleRange2 = _slicedToArray(_useVisibleRange, 2),\n      visibleStart = _useVisibleRange2[0],\n      visibleEnd = _useVisibleRange2[1];\n\n  var tabNodes = tabs.map(function (tab) {\n    var key = tab.key;\n    return /*#__PURE__*/React.createElement(TabNode, {\n      id: id,\n      prefixCls: prefixCls,\n      key: key,\n      rtl: rtl,\n      tab: tab,\n      closable: tab.closable,\n      editable: editable,\n      active: key === activeKey,\n      tabPosition: tabPosition,\n      tabBarGutter: tabBarGutter,\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(); // Focus element will make scrollLeft change which we should reset back\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    var _tabsWrapperRef$curre, _tabsWrapperRef$curre2, _innerAddButtonRef$cu, _innerAddButtonRef$cu2, _operationsRef$curren, _operationsRef$curren2, _tabListRef$current, _tabListRef$current2, _operationsRef$curren3; // Update wrapper records\n\n\n    var offsetWidth = ((_tabsWrapperRef$curre = tabsWrapperRef.current) === null || _tabsWrapperRef$curre === void 0 ? void 0 : _tabsWrapperRef$curre.offsetWidth) || 0;\n    var offsetHeight = ((_tabsWrapperRef$curre2 = tabsWrapperRef.current) === null || _tabsWrapperRef$curre2 === void 0 ? void 0 : _tabsWrapperRef$curre2.offsetHeight) || 0;\n    var newAddWidth = ((_innerAddButtonRef$cu = innerAddButtonRef.current) === null || _innerAddButtonRef$cu === void 0 ? void 0 : _innerAddButtonRef$cu.offsetWidth) || 0;\n    var newAddHeight = ((_innerAddButtonRef$cu2 = innerAddButtonRef.current) === null || _innerAddButtonRef$cu2 === void 0 ? void 0 : _innerAddButtonRef$cu2.offsetHeight) || 0;\n    var newOperationWidth = ((_operationsRef$curren = operationsRef.current) === null || _operationsRef$curren === void 0 ? void 0 : _operationsRef$curren.offsetWidth) || 0;\n    var newOperationHeight = ((_operationsRef$curren2 = operationsRef.current) === null || _operationsRef$curren2 === void 0 ? void 0 : _operationsRef$curren2.offsetHeight) || 0;\n    setWrapperWidth(offsetWidth);\n    setWrapperHeight(offsetHeight);\n    setAddWidth(newAddWidth);\n    setAddHeight(newAddHeight);\n    var newWrapperScrollWidth = (((_tabListRef$current = tabListRef.current) === null || _tabListRef$current === void 0 ? void 0 : _tabListRef$current.offsetWidth) || 0) - newAddWidth;\n    var newWrapperScrollHeight = (((_tabListRef$current2 = tabListRef.current) === null || _tabListRef$current2 === void 0 ? void 0 : _tabListRef$current2.offsetHeight) || 0) - newAddHeight;\n    setWrapperScrollWidth(newWrapperScrollWidth);\n    setWrapperScrollHeight(newWrapperScrollHeight);\n    var isOperationHidden = (_operationsRef$curren3 = operationsRef.current) === null || _operationsRef$curren3 === void 0 ? void 0 : _operationsRef$curren3.className.includes(operationsHiddenClassName);\n    setWrapperContentWidth(newWrapperScrollWidth - (isOperationHidden ? 0 : newOperationWidth));\n    setWrapperContentHeight(newWrapperScrollHeight - (isOperationHidden ? 0 : newOperationHeight)); // 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 _useState19 = useState(),\n      _useState20 = _slicedToArray(_useState19, 2),\n      inkStyle = _useState20[0],\n      setInkStyle = _useState20[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();\n  }, [activeKey, activeTabOffset, tabOffsets, tabPositionTopOrBottom]); // Should recalculate when rtl changed\n\n  useEffect(function () {\n    onListHolderResize();\n  }, [rtl, tabBarGutter, activeKey, tabs.map(function (tab) {\n    return tab.key;\n  }).join('_')]); // ========================= 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 + wrapperWidth < wrapperScrollWidth;\n    } else {\n      pingLeft = transformLeft < 0;\n      pingRight = -transformLeft + wrapperWidth < wrapperScrollWidth;\n    }\n  } else {\n    pingTop = transformTop < 0;\n    pingBottom = -transformTop + wrapperHeight < wrapperScrollHeight;\n  }\n  /* eslint-disable jsx-a11y/interactive-supports-focus */\n\n\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: ref,\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    position: \"left\",\n    extra: extra,\n    prefixCls: prefixCls\n  }), /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\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: {\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, Object.assign({}, props, {\n    ref: operationsRef,\n    prefixCls: prefixCls,\n    tabs: hiddenTabs,\n    className: !hasDropdown && operationsHiddenClassName\n  })), /*#__PURE__*/React.createElement(ExtraContent, {\n    position: \"right\",\n    extra: extra,\n    prefixCls: prefixCls\n  }));\n  /* eslint-enable */\n}\n\nexport default /*#__PURE__*/React.forwardRef(TabNavList);","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/rc-tabs/es/TabNavList/index.js"],"names":["_defineProperty","_toConsumableArray","_objectSpread","_slicedToArray","React","useState","useRef","useEffect","classNames","raf","ResizeObserver","useRaf","useRafState","TabNode","useOffsets","useVisibleRange","OperationNode","TabContext","useTouchMove","useRefs","AddButton","useSyncState","ExtraContent","_ref","position","prefixCls","extra","content","assertExtra","right","left","createElement","className","concat","TabNavList","props","ref","_classNames","_React$useContext","useContext","tabs","style","id","animated","activeKey","rtl","editable","locale","tabPosition","tabBarGutter","children","onTabClick","onTabScroll","tabsWrapperRef","tabListRef","operationsRef","innerAddButtonRef","_useRefs","_useRefs2","getBtnRef","removeBtnRef","tabPositionTopOrBottom","_useSyncState","next","prev","direction","_useSyncState2","transformLeft","setTransformLeft","_useSyncState3","_useSyncState4","transformTop","setTransformTop","_useState","_useState2","wrapperScrollWidth","setWrapperScrollWidth","_useState3","_useState4","wrapperScrollHeight","setWrapperScrollHeight","_useState5","_useState6","wrapperContentWidth","setWrapperContentWidth","_useState7","_useState8","wrapperContentHeight","setWrapperContentHeight","_useState9","_useState10","wrapperWidth","setWrapperWidth","_useState11","_useState12","wrapperHeight","setWrapperHeight","_useState13","_useState14","addWidth","setAddWidth","_useState15","_useState16","addHeight","setAddHeight","_useRafState","Map","_useRafState2","tabSizes","setTabSizes","tabOffsets","operationsHiddenClassName","transformMin","transformMax","Math","min","max","alignInRange","value","touchMovingRef","_useState17","_useState18","lockAnimation","setLockAnimation","doLockAnimation","Date","now","clearTouchMoving","window","clearTimeout","current","offsetX","offsetY","doMove","setState","offset","newValue","setTimeout","scrollToTab","key","arguments","length","undefined","tabOffset","get","width","height","top","newTransform","_newTransform","_useVisibleRange","_useVisibleRange2","visibleStart","visibleEnd","tabNodes","map","tab","closable","active","renderWrapper","removeAriaLabel","onClick","e","onRemove","onFocus","scrollLeft","scrollTop","onListHolderResize","_tabsWrapperRef$curre","_tabsWrapperRef$curre2","_innerAddButtonRef$cu","_innerAddButtonRef$cu2","_operationsRef$curren","_operationsRef$curren2","_tabListRef$current","_tabListRef$current2","_operationsRef$curren3","offsetWidth","offsetHeight","newAddWidth","newAddHeight","newOperationWidth","newOperationHeight","newWrapperScrollWidth","newWrapperScrollHeight","isOperationHidden","includes","newSizes","forEach","_ref2","btnNode","set","offsetLeft","offsetTop","startHiddenTabs","slice","endHiddenTabs","hiddenTabs","_useState19","_useState20","inkStyle","setInkStyle","activeTabOffset","inkBarRafRef","cleanInkBarRaf","cancel","newInkStyle","join","hasDropdown","wrapPrefix","pingLeft","pingRight","pingTop","pingBottom","role","onKeyDown","onResize","transform","transition","visibility","inkBar","Object","assign","forwardRef"],"mappings":"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","sourcesContent":["import _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 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';\n\nvar ExtraContent = function ExtraContent(_ref) {\n  var position = _ref.position,\n      prefixCls = _ref.prefixCls,\n      extra = _ref.extra;\n  if (!extra) return null;\n  var content;\n  var assertExtra = extra;\n\n  if (position === 'right') {\n    content = assertExtra.right || !assertExtra.left && assertExtra || null;\n  }\n\n  if (position === 'left') {\n    content = assertExtra.left || null;\n  }\n\n  return content ? /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-extra-content\")\n  }, content) : null;\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 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),\n      _useState2 = _slicedToArray(_useState, 2),\n      wrapperScrollWidth = _useState2[0],\n      setWrapperScrollWidth = _useState2[1];\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      wrapperScrollHeight = _useState4[0],\n      setWrapperScrollHeight = _useState4[1];\n\n  var _useState5 = useState(0),\n      _useState6 = _slicedToArray(_useState5, 2),\n      wrapperContentWidth = _useState6[0],\n      setWrapperContentWidth = _useState6[1];\n\n  var _useState7 = useState(0),\n      _useState8 = _slicedToArray(_useState7, 2),\n      wrapperContentHeight = _useState8[0],\n      setWrapperContentHeight = _useState8[1];\n\n  var _useState9 = useState(null),\n      _useState10 = _slicedToArray(_useState9, 2),\n      wrapperWidth = _useState10[0],\n      setWrapperWidth = _useState10[1];\n\n  var _useState11 = useState(null),\n      _useState12 = _slicedToArray(_useState11, 2),\n      wrapperHeight = _useState12[0],\n      setWrapperHeight = _useState12[1];\n\n  var _useState13 = useState(0),\n      _useState14 = _slicedToArray(_useState13, 2),\n      addWidth = _useState14[0],\n      setAddWidth = _useState14[1];\n\n  var _useState15 = useState(0),\n      _useState16 = _slicedToArray(_useState15, 2),\n      addHeight = _useState16[0],\n      setAddHeight = _useState16[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, wrapperScrollWidth); // ========================== 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, wrapperHeight - wrapperScrollHeight);\n    transformMax = 0;\n  } else if (rtl) {\n    transformMin = 0;\n    transformMax = Math.max(0, wrapperScrollWidth - wrapperWidth);\n  } else {\n    transformMin = Math.min(0, wrapperWidth - wrapperScrollWidth);\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 _useState17 = useState(),\n      _useState18 = _slicedToArray(_useState17, 2),\n      lockAnimation = _useState18[0],\n      setLockAnimation = _useState18[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    }\n\n    if (tabPositionTopOrBottom) {\n      // Skip scroll if place is enough\n      if (wrapperWidth >= wrapperScrollWidth) {\n        return false;\n      }\n\n      doMove(setTransformLeft, offsetX);\n    } else {\n      if (wrapperHeight >= wrapperScrollHeight) {\n        return false;\n      }\n\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]); // ========================= Scroll ========================\n\n  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 + wrapperWidth) {\n          newTransform = tabOffset.right + tabOffset.width - wrapperWidth;\n        }\n      } // LTR\n      else if (tabOffset.left < -transformLeft) {\n          newTransform = -tabOffset.left;\n        } else if (tabOffset.left + tabOffset.width > -transformLeft + wrapperWidth) {\n          newTransform = -(tabOffset.left + tabOffset.width - wrapperWidth);\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 + wrapperHeight) {\n        _newTransform = -(tabOffset.top + tabOffset.height - wrapperHeight);\n      }\n\n      setTransformLeft(0);\n      setTransformTop(alignInRange(_newTransform));\n    }\n  } // ========================== Tab ==========================\n  // Render tab node & collect tab offset\n\n\n  var _useVisibleRange = useVisibleRange(tabOffsets, {\n    width: wrapperWidth,\n    height: wrapperHeight,\n    left: transformLeft,\n    top: transformTop\n  }, {\n    width: wrapperContentWidth,\n    height: wrapperContentHeight\n  }, {\n    width: addWidth,\n    height: addHeight\n  }, _objectSpread(_objectSpread({}, props), {}, {\n    tabs: tabs\n  })),\n      _useVisibleRange2 = _slicedToArray(_useVisibleRange, 2),\n      visibleStart = _useVisibleRange2[0],\n      visibleEnd = _useVisibleRange2[1];\n\n  var tabNodes = tabs.map(function (tab) {\n    var key = tab.key;\n    return /*#__PURE__*/React.createElement(TabNode, {\n      id: id,\n      prefixCls: prefixCls,\n      key: key,\n      rtl: rtl,\n      tab: tab,\n      closable: tab.closable,\n      editable: editable,\n      active: key === activeKey,\n      tabPosition: tabPosition,\n      tabBarGutter: tabBarGutter,\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(); // Focus element will make scrollLeft change which we should reset back\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    var _tabsWrapperRef$curre, _tabsWrapperRef$curre2, _innerAddButtonRef$cu, _innerAddButtonRef$cu2, _operationsRef$curren, _operationsRef$curren2, _tabListRef$current, _tabListRef$current2, _operationsRef$curren3;\n\n    // Update wrapper records\n    var offsetWidth = ((_tabsWrapperRef$curre = tabsWrapperRef.current) === null || _tabsWrapperRef$curre === void 0 ? void 0 : _tabsWrapperRef$curre.offsetWidth) || 0;\n    var offsetHeight = ((_tabsWrapperRef$curre2 = tabsWrapperRef.current) === null || _tabsWrapperRef$curre2 === void 0 ? void 0 : _tabsWrapperRef$curre2.offsetHeight) || 0;\n    var newAddWidth = ((_innerAddButtonRef$cu = innerAddButtonRef.current) === null || _innerAddButtonRef$cu === void 0 ? void 0 : _innerAddButtonRef$cu.offsetWidth) || 0;\n    var newAddHeight = ((_innerAddButtonRef$cu2 = innerAddButtonRef.current) === null || _innerAddButtonRef$cu2 === void 0 ? void 0 : _innerAddButtonRef$cu2.offsetHeight) || 0;\n    var newOperationWidth = ((_operationsRef$curren = operationsRef.current) === null || _operationsRef$curren === void 0 ? void 0 : _operationsRef$curren.offsetWidth) || 0;\n    var newOperationHeight = ((_operationsRef$curren2 = operationsRef.current) === null || _operationsRef$curren2 === void 0 ? void 0 : _operationsRef$curren2.offsetHeight) || 0;\n    setWrapperWidth(offsetWidth);\n    setWrapperHeight(offsetHeight);\n    setAddWidth(newAddWidth);\n    setAddHeight(newAddHeight);\n    var newWrapperScrollWidth = (((_tabListRef$current = tabListRef.current) === null || _tabListRef$current === void 0 ? void 0 : _tabListRef$current.offsetWidth) || 0) - newAddWidth;\n    var newWrapperScrollHeight = (((_tabListRef$current2 = tabListRef.current) === null || _tabListRef$current2 === void 0 ? void 0 : _tabListRef$current2.offsetHeight) || 0) - newAddHeight;\n    setWrapperScrollWidth(newWrapperScrollWidth);\n    setWrapperScrollHeight(newWrapperScrollHeight);\n    var isOperationHidden = (_operationsRef$curren3 = operationsRef.current) === null || _operationsRef$curren3 === void 0 ? void 0 : _operationsRef$curren3.className.includes(operationsHiddenClassName);\n    setWrapperContentWidth(newWrapperScrollWidth - (isOperationHidden ? 0 : newOperationWidth));\n    setWrapperContentHeight(newWrapperScrollHeight - (isOperationHidden ? 0 : newOperationHeight)); // 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 _useState19 = useState(),\n      _useState20 = _slicedToArray(_useState19, 2),\n      inkStyle = _useState20[0],\n      setInkStyle = _useState20[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();\n  }, [activeKey, activeTabOffset, tabOffsets, tabPositionTopOrBottom]); // Should recalculate when rtl changed\n\n  useEffect(function () {\n    onListHolderResize();\n  }, [rtl, tabBarGutter, activeKey, tabs.map(function (tab) {\n    return tab.key;\n  }).join('_')]); // ========================= 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 + wrapperWidth < wrapperScrollWidth;\n    } else {\n      pingLeft = transformLeft < 0;\n      pingRight = -transformLeft + wrapperWidth < wrapperScrollWidth;\n    }\n  } else {\n    pingTop = transformTop < 0;\n    pingBottom = -transformTop + wrapperHeight < wrapperScrollHeight;\n  }\n  /* eslint-disable jsx-a11y/interactive-supports-focus */\n\n\n  return /*#__PURE__*/React.createElement(\"div\", {\n    ref: ref,\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    position: \"left\",\n    extra: extra,\n    prefixCls: prefixCls\n  }), /*#__PURE__*/React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\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: {\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, Object.assign({}, props, {\n    ref: operationsRef,\n    prefixCls: prefixCls,\n    tabs: hiddenTabs,\n    className: !hasDropdown && operationsHiddenClassName\n  })), /*#__PURE__*/React.createElement(ExtraContent, {\n    position: \"right\",\n    extra: extra,\n    prefixCls: prefixCls\n  }));\n  /* eslint-enable */\n}\n\nexport default /*#__PURE__*/React.forwardRef(TabNavList);"]},"metadata":{},"sourceType":"module"}