{"version":3,"sources":["webpack:///./node_modules/antd/es/grid/style/css.js","webpack:///./node_modules/@ant-design/icons-svg/lib/asn/EllipsisOutlined.js","webpack:///./src/resources/data.js","webpack:///./node_modules/@ant-design/icons-svg/lib/asn/PlusOutlined.js","webpack:///./node_modules/@ant-design/icons/EllipsisOutlined.js","webpack:///./node_modules/@ant-design/icons/PlusOutlined.js","webpack:///./node_modules/antd/es/card/Grid.js","webpack:///./node_modules/antd/es/card/Meta.js","webpack:///./node_modules/rc-util/es/hooks/useMergedState.js","webpack:///./node_modules/rc-tabs/es/hooks/useRaf.js","webpack:///./node_modules/rc-tabs/es/TabNavList/TabNode.js","webpack:///./node_modules/rc-tabs/es/hooks/useOffsets.js","webpack:///./node_modules/rc-tabs/es/hooks/useVisibleRange.js","webpack:///./node_modules/rc-dropdown/es/placements.js","webpack:///./node_modules/rc-dropdown/es/Dropdown.js","webpack:///./node_modules/rc-dropdown/es/index.js","webpack:///./node_modules/rc-tabs/es/TabNavList/AddButton.js","webpack:///./node_modules/rc-tabs/es/TabNavList/OperationNode.js","webpack:///./node_modules/rc-tabs/es/TabContext.js","webpack:///./node_modules/rc-tabs/es/hooks/useTouchMove.js","webpack:///./node_modules/rc-tabs/es/hooks/useSyncState.js","webpack:///./node_modules/rc-tabs/es/TabNavList/index.js","webpack:///./node_modules/rc-tabs/es/hooks/useRefs.js","webpack:///./node_modules/rc-tabs/es/TabPanelList/index.js","webpack:///./node_modules/rc-tabs/es/TabPanelList/TabPane.js","webpack:///./node_modules/rc-tabs/es/Tabs.js","webpack:///./node_modules/rc-tabs/es/index.js","webpack:///./node_modules/antd/es/tabs/index.js","webpack:///./node_modules/antd/es/_util/responsiveObserve.js","webpack:///./node_modules/antd/es/grid/row.js","webpack:///./node_modules/antd/es/row/index.js","webpack:///./node_modules/antd/es/card/index.js","webpack:///./src/pages/community.tsx","webpack:///./node_modules/@ant-design/icons/lib/icons/EllipsisOutlined.js","webpack:///./node_modules/antd/es/grid/col.js","webpack:///./node_modules/antd/es/col/index.js","webpack:///./node_modules/antd/es/grid/RowContext.js","webpack:///./node_modules/antd/es/col/style/css.js","webpack:///./node_modules/rc-resize-observer/es/index.js","webpack:///./node_modules/@ant-design/icons/lib/icons/PlusOutlined.js"],"names":["Object","defineProperty","exports","value","default","pmc","name","github","image","Databases","title","href","imgName","obj","_default","__esModule","module","__rest","s","e","t","p","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","props","_ref","getPrefixCls","customizePrefixCls","prefixCls","className","_props$hoverable","hoverable","others","classString","concat","avatar","description","avatarDom","titleDom","descriptionDom","MetaDetail","_slicedToArray","arr","Array","isArray","_arrayWithHoles","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","push","err","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","useControlledState","defaultStateValue","option","defaultValue","onChange","postState","_React$useState2","innerValue","setInnerValue","mergedValue","firstRenderRef","current","newValue","useRaf","callback","rafRef","removedRef","cancel","_len","arguments","args","_key","apply","ref","_classNames","id","active","rtl","_ref$tab","tab","key","disabled","closeIcon","tabBarGutter","tabPosition","closable","renderWrapper","removeAriaLabel","editable","onClick","onRemove","onFocus","tabPrefix","nodeStyle","marginBottom","removable","onInternalClick","node","style","role","tabIndex","stopPropagation","onKeyDown","KeyCode","SPACE","ENTER","includes","which","preventDefault","type","event","onEdit","removeIcon","ownKeys","object","enumerableOnly","keys","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","target","source","forEach","getOwnPropertyDescriptors","defineProperties","DEFAULT_SIZE","width","height","left","top","right","autoAdjustOverflow","adjustX","adjustY","targetOffset","topLeft","points","overflow","offset","topCenter","topRight","bottomLeft","bottomCenter","bottomRight","_props$arrow","arrow","_props$prefixCls","transitionName","animation","align","_props$placement","placement","_props$placements","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","_props$trigger","trigger","otherProps","_React$useState","triggerVisible","setTriggerVisible","mergedVisible","triggerRef","openClassName","children","childrenProps","childClassName","minOverlayWidthMatchTrigger","alignPoint","getOverlayElement","overlay","onOverlayClick","overlayProps","getMenuElement","overlayElement","extraOverlayProps","triggerHideAction","assign","popupClassName","popupStyle","builtinPlacements","action","popupPlacement","popupAlign","popupTransitionName","popupAnimation","popupVisible","stretch","popup","onPopupVisibleChange","onVisibleChange","locale","showAdd","addAriaLabel","addIcon","tabs","mobile","_ref$moreIcon","moreIcon","moreTransitionName","onTabClick","_useState","_useState2","open","setOpen","_useState3","_useState4","selectedKey","setSelectedKey","popupId","dropdownPrefix","selectedItemId","dropdownAriaLabel","menu","_ref2","domEvent","selectedKeys","map","selectOffset","enabledTabs","selectedIndex","findIndex","ele","document","getElementById","scrollIntoView","moreStyle","visibility","order","moreNode","UP","DOWN","ESC","SPEED_OFF_MULTIPLE","Math","pow","useSyncState","defaultState","stateRef","forceUpdate","updater","cacheRefs","_React$useContext","TabContext","animated","activeKey","extra","onTabScroll","tabsWrapperRef","tabListRef","operationsRef","innerAddButtonRef","_useRefs","Map","has","set","get","delete","_useRefs2","getBtnRef","removeBtnRef","tabPositionTopOrBottom","_useSyncState","prev","direction","_useSyncState2","transformLeft","setTransformLeft","_useSyncState3","_useSyncState4","transformTop","setTransformTop","wrapperScrollWidth","setWrapperScrollWidth","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","batchRef","state","flushUpdate","useRafState","_useRafState2","tabSizes","setTabSizes","tabOffsets","holderScrollWidth","_tabs$","lastOffset","rightOffset","_tabs","data","entity","join","useOffsets","operationsHiddenClassName","transformMin","transformMax","alignInRange","max","min","touchMovingRef","_useState17","_useState18","lockAnimation","setLockAnimation","doLockAnimation","Date","now","clearTouchMoving","window","clearTimeout","scrollToTab","tabOffset","newTransform","_newTransform","onOffset","touchPosition","setTouchPosition","lastTimestamp","setLastTimestamp","lastTimeDiff","setLastTimeDiff","setLastOffset","motionRef","lastWheelTimestampRef","lastWheelPreventRef","lastWheelDirectionRef","touchEventsRef","onTouchStart","_e$touches$","touches","screenX","screenY","x","y","clearInterval","onTouchMove","_e$touches$2","offsetX","offsetY","onTouchEnd","distanceX","distanceY","absX","abs","absY","currentX","currentY","setInterval","onWheel","deltaX","deltaY","mixed","onProxyTouchMove","onProxyTouchEnd","addEventListener","passive","removeEventListener","useTouchMove","doMove","setState","_alignInRange","_alignInRange2","needPrevent","setTimeout","_useVisibleRange","containerSize","tabContentNodeSize","addNodeSize","unit","position","transformSize","basicSize","tabContentSize","addSize","mergedBasicSize","endIndex","startIndex","useVisibleRange","_useVisibleRange2","visibleStart","visibleEnd","tabNodes","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","newSizes","btnNode","offsetLeft","offsetTop","startHiddenTabs","endHiddenTabs","hiddenTabs","_useState19","_useState20","inkStyle","setInkStyle","activeTabOffset","inkBarRafRef","cleanInkBarRaf","newInkStyle","pingLeft","pingRight","pingTop","pingBottom","hasDropdown","wrapPrefix","onResize","transform","transition","inkBar","TabPanelList","destroyInactiveTabPane","tabPaneAnimated","tabPane","activeIndex","tabKey","TabPane","forceRender","visited","setVisited","mergedStyle","overflowY","display","uuid","ForwardTabs","mergedAnimated","_ref$prefixCls","defaultActiveKey","_ref$tabPosition","tabBarStyle","tabBarExtraContent","renderTabBar","restProps","toArray","String","parseTabList","setMobile","agent","navigator","userAgent","vendor","opera","substr","_useMergedState","_useMergedState2","mergedActiveKey","setMergedActiveKey","setActiveIndex","_tabs$newActiveIndex","newActiveIndex","_useMergedState3","_useMergedState4","mergedId","setMergedId","mergedTabPosition","tabNavBar","sharedProps","tabNavBarProps","panes","Provider","_a","size","_onEdit","hideAdd","centered","editType","devWarning","responsiveArray","responsiveMap","xs","sm","md","lg","xl","xxl","subscribers","subUid","matchHandlers","dispatch","pointMap","func","subscribe","this","register","unsubscribe","token","unregister","_this","screen","matchMediaQuery","handler","mql","removeListener","listener","clear","_this2","matches","matchMedia","addListener","Row","screens","setScreens","gutterRef","gutter","currentGutter","renderRow","justify","results","_props$gutter","g","index","breakpoint","getGutter","classes","rowStyle","marginLeft","marginRight","marginTop","RowContext","displayName","_extends2","head","SizeContext","_props$headStyle","headStyle","_props$bodyStyle","bodyStyle","loading","_props$bordered","bordered","customizeSize","cover","actions","tabList","activeTabKey","defaultActiveTabKey","_props$tabProps","tabProps","loadingBlockStyle","padding","block","loadingBlock","span","hasActiveTabKey","extraProps","onTabChange","item","containGrid","coverDom","body","actionDom","getAction","divProps","mergedSize","element","Grid","Meta","links","titleContainer","communityContainer","getInvolvedContainer","Community","pmcList","rel","alt","src","GithubOutlined","css","link","post","_interopRequireDefault","_interopRequireWildcard","React","_EllipsisOutlined","_AntdIcon","EllipsisOutlined","createElement","icon","forwardRef","Col","renderCol","pull","flex","sizeClassObj","sizeProps","propSize","Consumer","paddingLeft","paddingRight","paddingTop","paddingBottom","parseFlex","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","result","Super","NewTarget","ReactResizeObserver","_React$Component","_super","resizeObserver","childNode","currentElement","entries","_target$getBoundingCl","getBoundingClientRect","fixedWidth","floor","fixedHeight","setChildNode","onComponentUpdated","destroyObserver","observe","disconnect","childNodes","_PlusOutlined","PlusOutlined"],"mappings":"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","file":"component---src-pages-community-tsx-c43b5fcf883d8eab60e6.js","sourcesContent":["import '../../style/index.css';\nimport './index.css';","\"use strict\"; // This icon file is generated automatically.\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar EllipsisOutlined = {\n  \"icon\": {\n    \"tag\": \"svg\",\n    \"attrs\": {\n      \"viewBox\": \"64 64 896 896\",\n      \"focusable\": \"false\"\n    },\n    \"children\": [{\n      \"tag\": \"path\",\n      \"attrs\": {\n        \"d\": \"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z\"\n      }\n    }]\n  },\n  \"name\": \"ellipsis\",\n  \"theme\": \"outlined\"\n};\nexports.default = EllipsisOutlined;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nexport const pmc = [\n  {\n    name: ' Aaron Suddjian',\n    github: 'https://github.com/suddjian',\n    image: 'https://github.com/suddjian.png',\n  },\n  {\n    name: 'Beto Dealmeida',\n    github: 'https://github.com/betodealmeida',\n    image: 'https://github.com/betodealmeida.png',\n  },\n  {\n    name: 'Bogdan Kyryliuk',\n    github: 'https://github.com/bkyryliuk',\n    image: 'https://github.com/bkyryliuk.png',\n  },\n  {\n    name: 'Chris Williams',\n    github: 'https://github.com/williaster',\n    image: 'https://github.com/williaster.png',\n  },\n  {\n    name: 'Craig Rueda',\n    github: 'https://github.com/craig-rueda',\n    image: 'https://github.com/craig-rueda.png',\n  },\n  {\n    name: 'Daniel Gaspar',\n    github: 'https://github.com/dpgaspar',\n    image: 'https://github.com/dpgaspar.png',\n  },\n  {\n    name: 'Erik Ritker',\n    github: 'https://github.com/etr2460',\n    image: 'https://github.com/etr2460.png',\n  },\n  {\n    name: 'Evan Rusackas',\n    github: 'https://github.com/rusackas',\n    image: 'https://github.com/rusackas.png',\n  },\n\n  {\n    name: 'Grace Guo',\n    github: 'https://github.com/graceguo-supercat',\n    image: 'https://github.com/graceguo-supercat.png',\n  },\n\n  {\n    name: 'Jeff Feng',\n    github: 'https://github.com/jfeng15',\n    image: 'https://github.com/jfeng15.png',\n  },\n\n  {\n    name: 'Jesse Yang',\n    github: 'https://github.com/ktmud',\n    image: 'https://github.com/ktmud.png',\n  },\n\n  {\n    name: 'John Bodley',\n    github: 'https://github.com/john-bodley',\n    image: 'https://github.com/john-bodley.png',\n  },\n\n  {\n    name: 'Krist Wongsuphasawat',\n    github: 'https://github.com/kristw',\n    image: 'https://github.com/kristw.png',\n  },\n  {\n    name: 'Maxime Beauchemin',\n    github: 'https://github.com/mistercrunch',\n    image: 'https://github.com/mistercrunch.png',\n  },\n\n  {\n    name: 'Michelle Thomas',\n    github: 'https://github.com/michellethomas',\n    image: 'https://github.com/michellethomas.png',\n  },\n\n  {\n    name: 'Nishant Bangarwa',\n    github: 'https://github.com/nishantmonu51',\n    image: 'https://github.com/nishantmonu51.png',\n  },\n\n  {\n    name: 'Tai Dupree',\n    github: 'https://github.com/nytai',\n    image: 'https://github.com/nytai.png',\n  },\n\n  {\n    name: 'Ville Brofeldt',\n    github: 'https://github.com/villebro',\n    image: 'https://github.com/villebro.png',\n  },\n  {\n    name: 'Will Barrett',\n    github: 'https://github.com/willbarrett',\n    image: 'https://github.com/willbarrett.png',\n  },\n];\n\nexport const Databases = [\n  {\n    title: 'Amazon Redshfit',\n    href: 'https://aws.amazon.com/redshift/',\n    imgName: 'aws-redshift.png',\n  },\n  {\n    title: 'Apache Druid',\n    href: 'http://druid.io/',\n    imgName: 'druid.png',\n  },\n  {\n    title: 'Apache Kylin',\n    href: 'http://kylin.apache.org/',\n    imgName: 'apache-kylin.png',\n  },\n  {\n    title: 'BigQuery',\n    href: 'https://cloud.google.com/bigquery/',\n    imgName: 'googleBQ.png',\n  },\n  {\n    title: 'ClickHouse',\n    href: 'https://clickhouse.tech/',\n    imgName: 'clickhouse.png',\n  },\n  {\n    title: 'Exasol',\n    href: 'https://www.exasol.com/en/',\n    imgName: 'exasol.png',\n  },\n  {\n    title: 'FireBirdSql',\n    href: 'https://firebirdsql.org/',\n    imgName: 'firebird.png',\n  },\n  {\n    title: 'Green Plum',\n    href: 'https://greenplum.org/',\n    imgName: 'greenplum.png',\n  },\n  {\n    title: 'IBM Db2',\n    href: 'https://www.ibm.com/analytics/db2',\n    imgName: 'ibmdb2.png',\n  },\n  {\n    title: 'MySQL',\n    href: 'https://www.mysql.com/',\n    imgName: 'mysql.png',\n  },\n  {\n    title: 'Microsoft SqlServer',\n    href: 'https://www.microsoft.com/en-us/sql-server',\n    imgName: 'msql.png',\n  },\n  {\n    title: 'MonetDB',\n    href: 'https://www.monetdb.org/',\n    imgName: 'monet.png',\n  },\n  {\n    title: 'Oracle',\n    href: 'https://www.oracle.com/database/',\n    imgName: 'oraclelogo.png',\n  },\n  {\n    title: 'PostgresSQL',\n    href: 'https://www.postgresql.org/',\n    imgName: 'postsql.png',\n  },\n  {\n    title: 'Presto',\n    href: 'https://prestodb.io/',\n    imgName: 'presto-og.png',\n  },\n  {\n    title: 'Snowflake',\n    href: 'https://www.snowflake.com/',\n    imgName: 'snowflake.png',\n  },\n  {\n    title: 'SQLite',\n    href: 'https://www.sqlite.org/index.html',\n    imgName: 'sqllite.png',\n  },\n  {\n    title: 'Vertica',\n    href: 'https://www.vertica.com/',\n    imgName: 'vertica.png',\n  },\n];\n","\"use strict\"; // This icon file is generated automatically.\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar PlusOutlined = {\n  \"icon\": {\n    \"tag\": \"svg\",\n    \"attrs\": {\n      \"viewBox\": \"64 64 896 896\",\n      \"focusable\": \"false\"\n    },\n    \"children\": [{\n      \"tag\": \"defs\",\n      \"attrs\": {},\n      \"children\": [{\n        \"tag\": \"style\",\n        \"attrs\": {}\n      }]\n    }, {\n      \"tag\": \"path\",\n      \"attrs\": {\n        \"d\": \"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\"\n      }\n    }, {\n      \"tag\": \"path\",\n      \"attrs\": {\n        \"d\": \"M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z\"\n      }\n    }]\n  },\n  \"name\": \"plus\",\n  \"theme\": \"outlined\"\n};\nexports.default = PlusOutlined;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _EllipsisOutlined = _interopRequireDefault(require('./lib/icons/EllipsisOutlined'));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _default = _EllipsisOutlined;\nexports.default = _default;\nmodule.exports = _default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _PlusOutlined = _interopRequireDefault(require('./lib/icons/PlusOutlined'));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _default = _PlusOutlined;\nexports.default = _default;\nmodule.exports = _default;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\n\nvar Grid = function Grid(props) {\n  return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (_ref) {\n    var getPrefixCls = _ref.getPrefixCls;\n\n    var customizePrefixCls = props.prefixCls,\n        className = props.className,\n        _props$hoverable = props.hoverable,\n        hoverable = _props$hoverable === void 0 ? true : _props$hoverable,\n        others = __rest(props, [\"prefixCls\", \"className\", \"hoverable\"]);\n\n    var prefixCls = getPrefixCls('card', customizePrefixCls);\n    var classString = classNames(\"\".concat(prefixCls, \"-grid\"), className, _defineProperty({}, \"\".concat(prefixCls, \"-grid-hoverable\"), hoverable));\n    return /*#__PURE__*/React.createElement(\"div\", _extends({}, others, {\n      className: classString\n    }));\n  });\n};\n\nexport default Grid;","import _extends from \"@babel/runtime/helpers/extends\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\n\nvar Meta = function Meta(props) {\n  return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (_ref) {\n    var getPrefixCls = _ref.getPrefixCls;\n\n    var customizePrefixCls = props.prefixCls,\n        className = props.className,\n        avatar = props.avatar,\n        title = props.title,\n        description = props.description,\n        others = __rest(props, [\"prefixCls\", \"className\", \"avatar\", \"title\", \"description\"]);\n\n    var prefixCls = getPrefixCls('card', customizePrefixCls);\n    var classString = classNames(\"\".concat(prefixCls, \"-meta\"), className);\n    var avatarDom = avatar ? /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-meta-avatar\")\n    }, avatar) : null;\n    var titleDom = title ? /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-meta-title\")\n    }, title) : null;\n    var descriptionDom = description ? /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-meta-description\")\n    }, description) : null;\n    var MetaDetail = titleDom || descriptionDom ? /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-meta-detail\")\n    }, titleDom, descriptionDom) : null;\n    return /*#__PURE__*/React.createElement(\"div\", _extends({}, others, {\n      className: classString\n    }), avatarDom, MetaDetail);\n  });\n};\n\nexport default Meta;","function _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nimport * as React from 'react';\nexport default function useControlledState(defaultStateValue, option) {\n  var _ref = option || {},\n      defaultValue = _ref.defaultValue,\n      value = _ref.value,\n      onChange = _ref.onChange,\n      postState = _ref.postState;\n\n  var _React$useState = React.useState(function () {\n    if (value !== undefined) {\n      return value;\n    }\n\n    if (defaultValue !== undefined) {\n      return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n    }\n\n    return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue;\n  }),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      innerValue = _React$useState2[0],\n      setInnerValue = _React$useState2[1];\n\n  var mergedValue = value !== undefined ? value : innerValue;\n\n  if (postState) {\n    mergedValue = postState(mergedValue);\n  }\n\n  function triggerChange(newValue) {\n    setInnerValue(newValue);\n\n    if (mergedValue !== newValue && onChange) {\n      onChange(newValue, mergedValue);\n    }\n  } // Effect of reset value to `undefined`\n\n\n  var firstRenderRef = React.useRef(true);\n  React.useEffect(function () {\n    if (firstRenderRef.current) {\n      firstRenderRef.current = false;\n      return;\n    }\n\n    if (value === undefined) {\n      setInnerValue(value);\n    }\n  }, [value]);\n  return [mergedValue, triggerChange];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useRef, useState, useEffect } from 'react';\nimport raf from '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    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      rtl = _ref.rtl,\n      _ref$tab = _ref.tab,\n      key = _ref$tab.key,\n      tab = _ref$tab.tab,\n      disabled = _ref$tab.disabled,\n      closeIcon = _ref$tab.closeIcon,\n      tabBarGutter = _ref.tabBarGutter,\n      tabPosition = _ref.tabPosition,\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  var tabPrefix = \"\".concat(prefixCls, \"-tab\");\n  React.useEffect(function () {\n    return onRemove;\n  }, []);\n  var nodeStyle = {};\n\n  if (tabPosition === 'top' || tabPosition === 'bottom') {\n    nodeStyle[rtl ? 'marginLeft' : 'marginRight'] = tabBarGutter;\n  } else {\n    nodeStyle.marginBottom = tabBarGutter;\n  }\n\n  var removable = editable && closable !== false && !disabled;\n\n  function onInternalClick(e) {\n    if (disabled) return;\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 = 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: nodeStyle,\n    onClick: onInternalClick\n  }, 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  }, tab), removable && 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\n  if (renderWrapper) {\n    node = renderWrapper(node);\n  }\n\n  return node;\n}\n\nexport default React.forwardRef(TabNode);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\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, containerSize, tabContentNodeSize, addNodeSize, _ref) {\n  var tabs = _ref.tabs,\n      tabPosition = _ref.tabPosition,\n      rtl = _ref.rtl;\n  var unit;\n  var position;\n  var transformSize;\n\n  if (['top', 'bottom'].includes(tabPosition)) {\n    unit = 'width';\n    position = rtl ? 'right' : 'left';\n    transformSize = Math.abs(containerSize.left);\n  } else {\n    unit = 'height';\n    position = 'top';\n    transformSize = -containerSize.top;\n  }\n\n  var basicSize = containerSize[unit];\n  var tabContentSize = tabContentNodeSize[unit];\n  var addSize = addNodeSize[unit];\n  var mergedBasicSize = basicSize;\n\n  if (tabContentSize + addSize > basicSize) {\n    mergedBasicSize = basicSize - addSize;\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[unit] > transformSize + mergedBasicSize) {\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, transformSize, mergedBasicSize, tabPosition, tabs.map(function (tab) {\n    return tab.key;\n  }).join('_'), rtl]);\n}","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 _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport Trigger from 'rc-trigger';\nimport classNames from 'classnames';\nimport Placements from './placements';\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      otherProps = _objectWithoutProperties(props, [\"arrow\", \"prefixCls\", \"transitionName\", \"animation\", \"align\", \"placement\", \"placements\", \"getPopupContainer\", \"showAction\", \"hideAction\", \"overlayClassName\", \"overlayStyle\", \"visible\", \"trigger\"]);\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\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    var overlayProps = getOverlayElement().props;\n    setTriggerVisible(false);\n\n    if (onOverlayClick) {\n      onOverlayClick(e);\n    }\n\n    if (overlayProps.onClick) {\n      overlayProps.onClick(e);\n    }\n  };\n\n  var onVisibleChange = function onVisibleChange(visible) {\n    var onVisibleChange = props.onVisibleChange;\n    setTriggerVisible(visible);\n\n    if (typeof onVisibleChange === 'function') {\n      onVisibleChange(visible);\n    }\n  };\n\n  var getMenuElement = function getMenuElement() {\n    var overlayElement = getOverlayElement();\n    var extraOverlayProps = {\n      prefixCls: \"\".concat(prefixCls, \"-menu\"),\n      onClick: onClick\n    };\n\n    if (typeof overlayElement.type === 'string') {\n      delete extraOverlayProps.prefixCls;\n    }\n\n    return React.createElement(React.Fragment, null, arrow && React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-arrow\")\n    }), React.cloneElement(overlayElement, extraOverlayProps));\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 triggerVisible && children ? 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 React.createElement(Trigger, Object.assign({}, otherProps, {\n    prefixCls: prefixCls,\n    ref: triggerRef,\n    popupClassName: classNames(overlayClassName, _defineProperty({}, \"\".concat(prefixCls, \"-show-arrow\"), arrow)),\n    popupStyle: overlayStyle,\n    builtinPlacements: placements,\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    getPopupContainer: getPopupContainer\n  }), renderChildren());\n}\n\nexport default React.forwardRef(Dropdown);","import Dropdown from './Dropdown';\nexport default Dropdown;","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 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 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      onTabClick = _ref.onTabClick; // ======================== Dropdown ========================\n\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  var menu = 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    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    return 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    }, tab.tab);\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 ? 'marginLeft' : 'marginRight', 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 : React.createElement(Dropdown, {\n    prefixCls: dropdownPrefix,\n    overlay: menu,\n    trigger: ['hover'],\n    visible: open,\n    transitionName: moreTransitionName,\n    onVisibleChange: setOpen,\n    overlayClassName: overlayClassName\n  }, 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 React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-nav-operations\"), className),\n    style: style,\n    ref: ref\n  }, moreNode, React.createElement(AddButton, {\n    prefixCls: prefixCls,\n    locale: locale,\n    editable: editable\n  }));\n}\n\nexport default React.forwardRef(OperationNode);","import { createContext } from 'react';\nexport default createContext(null);","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); // ========================= Check if is a mobile =========================\n\nexport function isMobile() {\n  var agent = navigator.userAgent || navigator.vendor || window.opera;\n\n  if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent.substr(0, 4))) {\n    return true;\n  }\n\n  return false;\n} // ================================= 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 lastWheelTimestampRef = useRef(0);\n  var lastWheelPreventRef = useRef(false);\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    } // Optimize mac touch scroll\n\n\n    var now = Date.now();\n\n    if (now - lastWheelTimestampRef.current > 100) {\n      lastWheelPreventRef.current = false;\n    }\n\n    if (onOffset(-mixed, -mixed) || lastWheelPreventRef.current) {\n      e.preventDefault();\n      lastWheelPreventRef.current = true;\n    }\n\n    lastWheelTimestampRef.current = now;\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 _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}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nimport * as React from 'react';\nimport { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport raf from '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\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, false];\n    }\n\n    if (value > transformMax) {\n      return [transformMax, false];\n    }\n\n    return [value, true];\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    var preventDefault = false;\n\n    function doMove(setState, offset) {\n      setState(function (value) {\n        var _alignInRange = alignInRange(value + offset),\n            _alignInRange2 = _slicedToArray(_alignInRange, 2),\n            newValue = _alignInRange2[0],\n            needPrevent = _alignInRange2[1];\n\n        preventDefault = needPrevent;\n        return newValue;\n      });\n    }\n\n    if (tabPositionTopOrBottom) {\n      // Skip scroll if place is enough\n      if (wrapperWidth >= wrapperScrollWidth) {\n        return preventDefault;\n      }\n\n      doMove(setTransformLeft, offsetX);\n    } else {\n      if (wrapperHeight >= wrapperScrollHeight) {\n        return preventDefault;\n      }\n\n      doMove(setTransformTop, offsetY);\n    }\n\n    clearTouchMoving();\n    doLockAnimation();\n    return preventDefault;\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    if (!tabOffset) return;\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)[0]);\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)[0]);\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 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 (_ref) {\n        var key = _ref.key;\n        var btnNode = getBtnRef(key).current;\n        newSizes.set(key, {\n          width: btnNode.offsetWidth,\n          height: btnNode.offsetHeight,\n          left: btnNode.offsetLeft,\n          top: btnNode.offsetTop\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 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  }, React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\n  }, 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  }, React.createElement(ResizeObserver, {\n    onResize: onListHolderResize\n  }, 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, React.createElement(AddButton, {\n    ref: innerAddButtonRef,\n    prefixCls: prefixCls,\n    locale: locale,\n    editable: editable,\n    style: {\n      visibility: hasDropdown ? 'hidden' : null\n    }\n  }), React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-ink-bar\"), _defineProperty({}, \"\".concat(prefixCls, \"-ink-bar-animated\"), animated.inkBar)),\n    style: inkStyle\n  }))))), React.createElement(OperationNode, Object.assign({}, props, {\n    ref: operationsRef,\n    prefixCls: prefixCls,\n    tabs: hiddenTabs,\n    className: !hasDropdown && operationsHiddenClassName\n  })), extra && React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-extra-content\")\n  }, extra));\n  /* eslint-enable */\n}\n\nexport default React.forwardRef(TabNavList);","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, 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 _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport TabContext from '../TabContext';\nexport default function TabPanelList(_ref) {\n  var id = _ref.id,\n      activeKey = _ref.activeKey,\n      animated = _ref.animated,\n      tabPosition = _ref.tabPosition,\n      rtl = _ref.rtl,\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 activeIndex = tabs.findIndex(function (tab) {\n    return tab.key === activeKey;\n  });\n  return React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-content-holder\"))\n  }, React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-content\"), \"\".concat(prefixCls, \"-content-\").concat(tabPosition), _defineProperty({}, \"\".concat(prefixCls, \"-content-animated\"), tabPaneAnimated)),\n    style: activeIndex && tabPaneAnimated ? _defineProperty({}, rtl ? 'marginRight' : 'marginLeft', \"-\".concat(activeIndex, \"00%\")) : null\n  }, tabs.map(function (tab) {\n    return React.cloneElement(tab.node, {\n      key: tab.key,\n      prefixCls: prefixCls,\n      tabKey: tab.key,\n      id: id,\n      animated: tabPaneAnimated,\n      active: tab.key === activeKey,\n      destroyInactiveTabPane: destroyInactiveTabPane\n    });\n  })));\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nexport default function TabPane(_ref) {\n  var prefixCls = _ref.prefixCls,\n      forceRender = _ref.forceRender,\n      className = _ref.className,\n      style = _ref.style,\n      id = _ref.id,\n      active = _ref.active,\n      animated = _ref.animated,\n      destroyInactiveTabPane = _ref.destroyInactiveTabPane,\n      tabKey = _ref.tabKey,\n      children = _ref.children;\n\n  var _React$useState = React.useState(forceRender),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      visited = _React$useState2[0],\n      setVisited = _React$useState2[1];\n\n  React.useEffect(function () {\n    if (active) {\n      setVisited(true);\n    } else if (destroyInactiveTabPane) {\n      setVisited(false);\n    }\n  }, [active, destroyInactiveTabPane]);\n  var mergedStyle = {};\n\n  if (!active) {\n    if (animated) {\n      mergedStyle.visibility = 'hidden';\n      mergedStyle.height = 0;\n      mergedStyle.overflowY = 'hidden';\n    } else {\n      mergedStyle.display = 'none';\n    }\n  }\n\n  return 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: _objectSpread(_objectSpread({}, mergedStyle), style),\n    className: classNames(\"\".concat(prefixCls, \"-tabpane\"), active && \"\".concat(prefixCls, \"-tabpane-active\"), className)\n  }, (active || visited || forceRender) && children);\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n} // Accessibility https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role\n\n\nimport * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport TabNavList from './TabNavList';\nimport TabPanelList from './TabPanelList';\nimport TabPane from './TabPanelList/TabPane';\nimport TabContext from './TabContext';\nimport { isMobile } from './hooks/useTouchMove';\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 parseTabList(children) {\n  return toArray(children).map(function (node) {\n    if (React.isValidElement(node)) {\n      var key = node.key !== undefined ? String(node.key) : undefined;\n      return _objectSpread(_objectSpread({\n        key: key\n      }, node.props), {}, {\n        node: node\n      });\n    }\n\n    return null;\n  }).filter(function (tab) {\n    return tab;\n  });\n}\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      children = _ref.children,\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      restProps = _objectWithoutProperties(_ref, [\"id\", \"prefixCls\", \"className\", \"children\", \"direction\", \"activeKey\", \"defaultActiveKey\", \"editable\", \"animated\", \"tabPosition\", \"tabBarGutter\", \"tabBarStyle\", \"tabBarExtraContent\", \"locale\", \"moreIcon\", \"moreTransitionName\", \"destroyInactiveTabPane\", \"renderTabBar\", \"onChange\", \"onTabClick\", \"onTabScroll\"]);\n\n  var tabs = parseTabList(children);\n  var rtl = direction === 'rtl';\n  var mergedAnimated;\n\n  if (animated === false) {\n    mergedAnimated = {\n      inkBar: false,\n      tabPane: false\n    };\n  } else {\n    mergedAnimated = _objectSpread({\n      inkBar: true,\n      tabPane: false\n    }, animated !== true ? animated : null);\n  } // ======================== Mobile ========================\n\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];\n\n  var mergedTabPosition = tabPosition;\n\n  if (mobile && !['left', 'right'].includes(tabPosition)) {\n    mergedTabPosition = 'top';\n  } // 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    setMergedActiveKey(key);\n    onChange === null || onChange === void 0 ? void 0 : onChange(key);\n  } // ======================== Render ========================\n\n\n  var sharedProps = {\n    id: mergedId,\n    activeKey: mergedActiveKey,\n    animated: mergedAnimated,\n    tabPosition: mergedTabPosition,\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: children\n  });\n\n  if (renderTabBar) {\n    tabNavBar = renderTabBar(tabNavBarProps, TabNavList);\n  } else {\n    tabNavBar = React.createElement(TabNavList, Object.assign({}, tabNavBarProps));\n  }\n\n  return React.createElement(TabContext.Provider, {\n    value: {\n      tabs: tabs,\n      prefixCls: prefixCls\n    }\n  }, React.createElement(\"div\", Object.assign({\n    ref: ref,\n    id: id,\n    className: classNames(prefixCls, \"\".concat(prefixCls, \"-\").concat(mergedTabPosition), (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-mobile\"), mobile), _defineProperty(_classNames, \"\".concat(prefixCls, \"-editable\"), editable), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), rtl), _classNames), className)\n  }, restProps), tabNavBar, React.createElement(TabPanelList, Object.assign({\n    destroyInactiveTabPane: destroyInactiveTabPane\n  }, sharedProps, {\n    animated: mergedAnimated\n  }))));\n}\n\nvar ForwardTabs = React.forwardRef(Tabs);\nForwardTabs.TabPane = TabPane;\nexport default ForwardTabs;","import Tabs from './Tabs';\nimport TabPane from './TabPanelList/TabPane';\nexport { TabPane };\nexport default Tabs;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport RcTabs, { TabPane } from 'rc-tabs';\nimport classNames from 'classnames';\nimport EllipsisOutlined from '@ant-design/icons/EllipsisOutlined';\nimport PlusOutlined from '@ant-design/icons/PlusOutlined';\nimport CloseOutlined from '@ant-design/icons/CloseOutlined';\nimport devWarning from '../_util/devWarning';\nimport { ConfigContext } from '../config-provider';\n\nfunction Tabs(_a) {\n  var _classNames;\n\n  var type = _a.type,\n      className = _a.className,\n      size = _a.size,\n      _onEdit = _a.onEdit,\n      hideAdd = _a.hideAdd,\n      centered = _a.centered,\n      addIcon = _a.addIcon,\n      props = __rest(_a, [\"type\", \"className\", \"size\", \"onEdit\", \"hideAdd\", \"centered\", \"addIcon\"]);\n\n  var customizePrefixCls = props.prefixCls;\n\n  var _React$useContext = React.useContext(ConfigContext),\n      getPrefixCls = _React$useContext.getPrefixCls,\n      direction = _React$useContext.direction;\n\n  var prefixCls = getPrefixCls('tabs', customizePrefixCls);\n  var editable;\n\n  if (type === 'editable-card') {\n    editable = {\n      onEdit: function onEdit(editType, _ref) {\n        var key = _ref.key,\n            event = _ref.event;\n        _onEdit === null || _onEdit === void 0 ? void 0 : _onEdit(editType === 'add' ? event : key, editType);\n      },\n      removeIcon: /*#__PURE__*/React.createElement(CloseOutlined, null),\n      addIcon: addIcon || /*#__PURE__*/React.createElement(PlusOutlined, null),\n      showAdd: hideAdd !== true\n    };\n  }\n\n  devWarning(!('onPrevClick' in props) && !('onNextClick' in props), 'Tabs', '`onPrevClick` and `onNextClick` has been removed. Please use `onTabScroll` instead.');\n  return /*#__PURE__*/React.createElement(RcTabs, _extends({\n    direction: direction\n  }, props, {\n    moreTransitionName: \"slide-up\",\n    className: classNames(className, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(size), size), _defineProperty(_classNames, \"\".concat(prefixCls, \"-card\"), ['card', 'editable-card'].includes(type)), _defineProperty(_classNames, \"\".concat(prefixCls, \"-editable-card\"), type === 'editable-card'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-centered\"), centered), _classNames)),\n    editable: editable,\n    moreIcon: /*#__PURE__*/React.createElement(EllipsisOutlined, null),\n    prefixCls: prefixCls\n  }));\n}\n\nTabs.TabPane = TabPane;\nexport default Tabs;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nexport var responsiveArray = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\nexport var responsiveMap = {\n  xs: '(max-width: 575px)',\n  sm: '(min-width: 576px)',\n  md: '(min-width: 768px)',\n  lg: '(min-width: 992px)',\n  xl: '(min-width: 1200px)',\n  xxl: '(min-width: 1600px)'\n};\nvar subscribers = new Map();\nvar subUid = -1;\nvar screens = {};\nvar responsiveObserve = {\n  matchHandlers: {},\n  dispatch: function dispatch(pointMap) {\n    screens = pointMap;\n    subscribers.forEach(function (func) {\n      return func(screens);\n    });\n    return subscribers.size >= 1;\n  },\n  subscribe: function subscribe(func) {\n    if (!subscribers.size) this.register();\n    subUid += 1;\n    subscribers.set(subUid, func);\n    func(screens);\n    return subUid;\n  },\n  unsubscribe: function unsubscribe(token) {\n    subscribers[\"delete\"](token);\n    if (!subscribers.size) this.unregister();\n  },\n  unregister: function unregister() {\n    var _this = this;\n\n    Object.keys(responsiveMap).forEach(function (screen) {\n      var matchMediaQuery = responsiveMap[screen];\n      var handler = _this.matchHandlers[matchMediaQuery];\n      handler === null || handler === void 0 ? void 0 : handler.mql.removeListener(handler === null || handler === void 0 ? void 0 : handler.listener);\n    });\n    subscribers.clear();\n  },\n  register: function register() {\n    var _this2 = this;\n\n    Object.keys(responsiveMap).forEach(function (screen) {\n      var matchMediaQuery = responsiveMap[screen];\n\n      var listener = function listener(_ref) {\n        var matches = _ref.matches;\n\n        _this2.dispatch(_extends(_extends({}, screens), _defineProperty({}, screen, matches)));\n      };\n\n      var mql = window.matchMedia(matchMediaQuery);\n      mql.addListener(listener);\n      _this2.matchHandlers[matchMediaQuery] = {\n        mql: mql,\n        listener: listener\n      };\n      listener(mql);\n    });\n  }\n};\nexport default responsiveObserve;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\nimport RowContext from './RowContext';\nimport { tuple } from '../_util/type';\nimport ResponsiveObserve, { responsiveArray } from '../_util/responsiveObserve';\nvar RowAligns = tuple('top', 'middle', 'bottom', 'stretch');\nvar RowJustify = tuple('start', 'end', 'center', 'space-around', 'space-between');\nvar Row = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var _React$useState = React.useState({\n    xs: true,\n    sm: true,\n    md: true,\n    lg: true,\n    xl: true,\n    xxl: true\n  }),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      screens = _React$useState2[0],\n      setScreens = _React$useState2[1];\n\n  var gutterRef = React.useRef();\n  gutterRef.current = props.gutter;\n  React.useEffect(function () {\n    var token = ResponsiveObserve.subscribe(function (screen) {\n      var currentGutter = gutterRef.current || 0;\n\n      if (!Array.isArray(currentGutter) && _typeof(currentGutter) === 'object' || Array.isArray(currentGutter) && (_typeof(currentGutter[0]) === 'object' || _typeof(currentGutter[1]) === 'object')) {\n        setScreens(screen);\n      }\n    });\n    return function () {\n      ResponsiveObserve.unsubscribe(token);\n    };\n  }, []);\n\n  var getGutter = function getGutter() {\n    var results = [0, 0];\n    var _props$gutter = props.gutter,\n        gutter = _props$gutter === void 0 ? 0 : _props$gutter;\n    var normalizedGutter = Array.isArray(gutter) ? gutter : [gutter, 0];\n    normalizedGutter.forEach(function (g, index) {\n      if (_typeof(g) === 'object') {\n        for (var i = 0; i < responsiveArray.length; i++) {\n          var breakpoint = responsiveArray[i];\n\n          if (screens[breakpoint] && g[breakpoint] !== undefined) {\n            results[index] = g[breakpoint];\n            break;\n          }\n        }\n      } else {\n        results[index] = g || 0;\n      }\n    });\n    return results;\n  };\n\n  var renderRow = function renderRow(_ref) {\n    var _classNames;\n\n    var getPrefixCls = _ref.getPrefixCls,\n        direction = _ref.direction;\n\n    var customizePrefixCls = props.prefixCls,\n        justify = props.justify,\n        align = props.align,\n        className = props.className,\n        style = props.style,\n        children = props.children,\n        others = __rest(props, [\"prefixCls\", \"justify\", \"align\", \"className\", \"style\", \"children\"]);\n\n    var prefixCls = getPrefixCls('row', customizePrefixCls);\n    var gutter = getGutter();\n    var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(justify), justify), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(align), align), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className);\n\n    var rowStyle = _extends(_extends(_extends({}, gutter[0] > 0 ? {\n      marginLeft: gutter[0] / -2,\n      marginRight: gutter[0] / -2\n    } : {}), gutter[1] > 0 ? {\n      marginTop: gutter[1] / -2,\n      marginBottom: gutter[1] / 2\n    } : {}), style);\n\n    var otherProps = _extends({}, others);\n\n    delete otherProps.gutter;\n    return /*#__PURE__*/React.createElement(RowContext.Provider, {\n      value: {\n        gutter: gutter\n      }\n    }, /*#__PURE__*/React.createElement(\"div\", _extends({}, otherProps, {\n      className: classes,\n      style: rowStyle,\n      ref: ref\n    }), children));\n  };\n\n  return /*#__PURE__*/React.createElement(ConfigConsumer, null, renderRow);\n});\nRow.displayName = 'Row';\nexport default Row;","import { Row } from '../grid';\nexport default Row;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from 'omit.js';\nimport Grid from './Grid';\nimport Meta from './Meta';\nimport Tabs from '../tabs';\nimport Row from '../row';\nimport Col from '../col';\nimport { ConfigContext } from '../config-provider';\nimport SizeContext from '../config-provider/SizeContext';\n\nfunction getAction(actions) {\n  var actionList = actions.map(function (action, index) {\n    return (\n      /*#__PURE__*/\n      // eslint-disable-next-line react/no-array-index-key\n      React.createElement(\"li\", {\n        style: {\n          width: \"\".concat(100 / actions.length, \"%\")\n        },\n        key: \"action-\".concat(index)\n      }, /*#__PURE__*/React.createElement(\"span\", null, action))\n    );\n  });\n  return actionList;\n}\n\nvar Card = function Card(props) {\n  var _extends2, _classNames;\n\n  var _React$useContext = React.useContext(ConfigContext),\n      getPrefixCls = _React$useContext.getPrefixCls,\n      direction = _React$useContext.direction;\n\n  var size = React.useContext(SizeContext);\n\n  var onTabChange = function onTabChange(key) {\n    if (props.onTabChange) {\n      props.onTabChange(key);\n    }\n  };\n\n  var isContainGrid = function isContainGrid() {\n    var containGrid;\n    React.Children.forEach(props.children, function (element) {\n      if (element && element.type && element.type === Grid) {\n        containGrid = true;\n      }\n    });\n    return containGrid;\n  };\n\n  var customizePrefixCls = props.prefixCls,\n      className = props.className,\n      extra = props.extra,\n      _props$headStyle = props.headStyle,\n      headStyle = _props$headStyle === void 0 ? {} : _props$headStyle,\n      _props$bodyStyle = props.bodyStyle,\n      bodyStyle = _props$bodyStyle === void 0 ? {} : _props$bodyStyle,\n      title = props.title,\n      loading = props.loading,\n      _props$bordered = props.bordered,\n      bordered = _props$bordered === void 0 ? true : _props$bordered,\n      customizeSize = props.size,\n      type = props.type,\n      cover = props.cover,\n      actions = props.actions,\n      tabList = props.tabList,\n      children = props.children,\n      activeTabKey = props.activeTabKey,\n      defaultActiveTabKey = props.defaultActiveTabKey,\n      tabBarExtraContent = props.tabBarExtraContent,\n      hoverable = props.hoverable,\n      _props$tabProps = props.tabProps,\n      tabProps = _props$tabProps === void 0 ? {} : _props$tabProps,\n      others = __rest(props, [\"prefixCls\", \"className\", \"extra\", \"headStyle\", \"bodyStyle\", \"title\", \"loading\", \"bordered\", \"size\", \"type\", \"cover\", \"actions\", \"tabList\", \"children\", \"activeTabKey\", \"defaultActiveTabKey\", \"tabBarExtraContent\", \"hoverable\", \"tabProps\"]);\n\n  var prefixCls = getPrefixCls('card', customizePrefixCls);\n  var loadingBlockStyle = bodyStyle.padding === 0 || bodyStyle.padding === '0px' ? {\n    padding: 24\n  } : undefined;\n  var block = /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-loading-block\")\n  });\n  var loadingBlock = /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-loading-content\"),\n    style: loadingBlockStyle\n  }, /*#__PURE__*/React.createElement(Row, {\n    gutter: 8\n  }, /*#__PURE__*/React.createElement(Col, {\n    span: 22\n  }, block)), /*#__PURE__*/React.createElement(Row, {\n    gutter: 8\n  }, /*#__PURE__*/React.createElement(Col, {\n    span: 8\n  }, block), /*#__PURE__*/React.createElement(Col, {\n    span: 15\n  }, block)), /*#__PURE__*/React.createElement(Row, {\n    gutter: 8\n  }, /*#__PURE__*/React.createElement(Col, {\n    span: 6\n  }, block), /*#__PURE__*/React.createElement(Col, {\n    span: 18\n  }, block)), /*#__PURE__*/React.createElement(Row, {\n    gutter: 8\n  }, /*#__PURE__*/React.createElement(Col, {\n    span: 13\n  }, block), /*#__PURE__*/React.createElement(Col, {\n    span: 9\n  }, block)), /*#__PURE__*/React.createElement(Row, {\n    gutter: 8\n  }, /*#__PURE__*/React.createElement(Col, {\n    span: 4\n  }, block), /*#__PURE__*/React.createElement(Col, {\n    span: 3\n  }, block), /*#__PURE__*/React.createElement(Col, {\n    span: 16\n  }, block)));\n  var hasActiveTabKey = activeTabKey !== undefined;\n\n  var extraProps = _extends(_extends({}, tabProps), (_extends2 = {}, _defineProperty(_extends2, hasActiveTabKey ? 'activeKey' : 'defaultActiveKey', hasActiveTabKey ? activeTabKey : defaultActiveTabKey), _defineProperty(_extends2, \"tabBarExtraContent\", tabBarExtraContent), _extends2));\n\n  var head;\n  var tabs = tabList && tabList.length ? /*#__PURE__*/React.createElement(Tabs, _extends({\n    size: \"large\"\n  }, extraProps, {\n    className: \"\".concat(prefixCls, \"-head-tabs\"),\n    onChange: onTabChange\n  }), tabList.map(function (item) {\n    return /*#__PURE__*/React.createElement(Tabs.TabPane, {\n      tab: item.tab,\n      disabled: item.disabled,\n      key: item.key\n    });\n  })) : null;\n\n  if (title || extra || tabs) {\n    head = /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-head\"),\n      style: headStyle\n    }, /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-head-wrapper\")\n    }, title && /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-head-title\")\n    }, title), extra && /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-extra\")\n    }, extra)), tabs);\n  }\n\n  var coverDom = cover ? /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-cover\")\n  }, cover) : null;\n  var body = /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-body\"),\n    style: bodyStyle\n  }, loading ? loadingBlock : children);\n  var actionDom = actions && actions.length ? /*#__PURE__*/React.createElement(\"ul\", {\n    className: \"\".concat(prefixCls, \"-actions\")\n  }, getAction(actions)) : null;\n  var divProps = omit(others, ['onTabChange']);\n  var mergedSize = customizeSize || size;\n  var classString = classNames(prefixCls, className, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-loading\"), loading), _defineProperty(_classNames, \"\".concat(prefixCls, \"-bordered\"), bordered), _defineProperty(_classNames, \"\".concat(prefixCls, \"-hoverable\"), hoverable), _defineProperty(_classNames, \"\".concat(prefixCls, \"-contain-grid\"), isContainGrid()), _defineProperty(_classNames, \"\".concat(prefixCls, \"-contain-tabs\"), tabList && tabList.length), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(mergedSize), mergedSize), _defineProperty(_classNames, \"\".concat(prefixCls, \"-type-\").concat(type), !!type), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames));\n  return /*#__PURE__*/React.createElement(\"div\", _extends({}, divProps, {\n    className: classString\n  }), head, coverDom, body, actionDom);\n};\n\nCard.Grid = Grid;\nCard.Meta = Meta;\nexport default Card;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport React from 'react';\nimport { css } from '@emotion/core';\nimport { Card } from 'antd';\nimport { GithubOutlined } from '@ant-design/icons';\nimport SEO from '../components/seo';\nimport Layout from '../components/layout';\nimport { pmc } from '../resources/data';\n\nconst { Meta } = Card;\n\nconst links = [\n  [\n    'https://apache-superset.slack.com/join/shared_invite/zt-g8lpruog-HeqpgYrwdfrD5OYhlU7hPQ#/',\n    'Slack',\n    'interact with other Superset users and community members',\n  ],\n  [\n    'https://github.com/apache/incubator-superset',\n    'GitHub',\n    'create tickets to report issues, report bugs, and suggest new features',\n  ],\n  [\n    'https://lists.apache.org/list.html?dev@superset.apache.org',\n    'dev@ Mailing List',\n    'participate in conversations with committers and contributors',\n  ],\n  [\n    'https://stackoverflow.com/questions/tagged/superset+apache-superset',\n    'Stack Overflow',\n    'our growing knowledge base',\n  ],\n  [\n    'https://www.meetup.com/Global-Apache-Superset-Community-Meetup/',\n    'Superset Meetup Group',\n    'join our monthly virtual meetups and register for any upcoming events',\n  ],\n  [\n    'https://github.com/apache/incubator-superset/blob/master/INTHEWILD.md',\n    'Organizations',\n    'a list of some of the organizations using Superset in production',\n  ],\n  [\n    'https://github.com/apache-superset/awesome-apache-superset',\n    'Contributors Guide',\n    'Interested in contributing? Learn how to contribute and best practices',\n  ],\n];\n\nconst titleContainer = css`\n  text-align: center;\n  background: #fff;\n  padding-bottom: 200px;\n`;\n\nconst title = css`\n  margin-top: 150px;\n  font-size: 60px;\n`;\n\nconst communityContainer = css`\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-around;\n  max-width: 1000px;\n  margin: 0 auto;\n  overflow: auto;\n  .communityCard {\n    margin: 10px 20px;\n    .ant-card-meta-title {\n      text-overflow: clip;\n      white-space: normal;\n      font-size: 13px;\n    }\n  }\n`;\n\nconst getInvolvedContainer = css`\n  padding: 40px 0;\n  margin-bottom: 25px;\n  .resources {\n    display: block;\n    font-size: 17px;\n    margin: 20px 0;\n    text-align: left;\n  }\n  .title {\n    font-size: 45px;\n  }\n  .section {\n    border-top: 1px solid #ccc;\n    max-width: 800px;\n    margin: 0 auto;\n    padding: 30px 0;\n    border-bottom: 1px solid #ccc;\n  }\n  .ppm {\n    margin-top: 100px;\n    margin-bottom: 100px;\n  }\n`;\n\nconst Community = () => {\n  const pmcList = pmc.map((e) => {\n    const name = e.name.indexOf(' ');\n    return (\n      <a href={e.github} target=\"_blank\" rel=\"noreferrer\" key={name}>\n        <Card\n          className=\"communityCard\"\n          hoverable\n          style={{ width: '140px' }}\n          size=\"small\"\n          cover={<img alt=\"example\" src={e.image} />}\n        >\n          <GithubOutlined />\n          <Meta title={e.name} />\n        </Card>\n      </a>\n    );\n  });\n  return (\n    <Layout>\n      <SEO title=\"Community\" />\n      <div css={titleContainer}>\n        <h1 css={title}>Community</h1>\n        <h2>Get involved in our welcoming, fast growing community!</h2>\n        <div css={getInvolvedContainer}>\n          <div className=\"joinCommunity section\">\n            <h2 className=\"title\">How to get involved:</h2>\n            <span className=\"resources\">\n              {links.map(([href, link, post]) => (\n                <>\n                  <a href={href}>{link}</a>\n                  {' '}\n                  -\n                  {post}\n                  <br />\n                </>\n              ))}\n            </span>\n          </div>\n          <h3 className=\"title ppm\">Apache Committers</h3>\n          <div css={communityContainer}>{pmcList}</div>\n        </div>\n      </div>\n    </Layout>\n  );\n};\n\nexport default Community;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _EllipsisOutlined = _interopRequireDefault(require(\"@ant-design/icons-svg/lib/asn/EllipsisOutlined\"));\n\nvar _AntdIcon = _interopRequireDefault(require(\"../components/AntdIcon\")); // GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n\nvar EllipsisOutlined = function EllipsisOutlined(props, ref) {\n  return React.createElement(_AntdIcon.default, Object.assign({}, props, {\n    ref: ref,\n    icon: _EllipsisOutlined.default\n  }));\n};\n\nEllipsisOutlined.displayName = 'EllipsisOutlined';\n\nvar _default = React.forwardRef(EllipsisOutlined);\n\nexports.default = _default;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport RowContext from './RowContext';\nimport { ConfigConsumer } from '../config-provider';\n\nfunction parseFlex(flex) {\n  if (typeof flex === 'number') {\n    return \"\".concat(flex, \" \").concat(flex, \" auto\");\n  }\n\n  if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) {\n    return \"0 0 \".concat(flex);\n  }\n\n  return flex;\n}\n\nvar Col = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var renderCol = function renderCol(_ref) {\n    var _classNames;\n\n    var getPrefixCls = _ref.getPrefixCls,\n        direction = _ref.direction;\n\n    var customizePrefixCls = props.prefixCls,\n        span = props.span,\n        order = props.order,\n        offset = props.offset,\n        push = props.push,\n        pull = props.pull,\n        className = props.className,\n        children = props.children,\n        flex = props.flex,\n        style = props.style,\n        others = __rest(props, [\"prefixCls\", \"span\", \"order\", \"offset\", \"push\", \"pull\", \"className\", \"children\", \"flex\", \"style\"]);\n\n    var prefixCls = getPrefixCls('col', customizePrefixCls);\n    var sizeClassObj = {};\n    ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].forEach(function (size) {\n      var _extends2;\n\n      var sizeProps = {};\n      var propSize = props[size];\n\n      if (typeof propSize === 'number') {\n        sizeProps.span = propSize;\n      } else if (_typeof(propSize) === 'object') {\n        sizeProps = propSize || {};\n      }\n\n      delete others[size];\n      sizeClassObj = _extends(_extends({}, sizeClassObj), (_extends2 = {}, _defineProperty(_extends2, \"\".concat(prefixCls, \"-\").concat(size, \"-\").concat(sizeProps.span), sizeProps.span !== undefined), _defineProperty(_extends2, \"\".concat(prefixCls, \"-\").concat(size, \"-order-\").concat(sizeProps.order), sizeProps.order || sizeProps.order === 0), _defineProperty(_extends2, \"\".concat(prefixCls, \"-\").concat(size, \"-offset-\").concat(sizeProps.offset), sizeProps.offset || sizeProps.offset === 0), _defineProperty(_extends2, \"\".concat(prefixCls, \"-\").concat(size, \"-push-\").concat(sizeProps.push), sizeProps.push || sizeProps.push === 0), _defineProperty(_extends2, \"\".concat(prefixCls, \"-\").concat(size, \"-pull-\").concat(sizeProps.pull), sizeProps.pull || sizeProps.pull === 0), _defineProperty(_extends2, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _extends2));\n    });\n    var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(span), span !== undefined), _defineProperty(_classNames, \"\".concat(prefixCls, \"-order-\").concat(order), order), _defineProperty(_classNames, \"\".concat(prefixCls, \"-offset-\").concat(offset), offset), _defineProperty(_classNames, \"\".concat(prefixCls, \"-push-\").concat(push), push), _defineProperty(_classNames, \"\".concat(prefixCls, \"-pull-\").concat(pull), pull), _classNames), className, sizeClassObj);\n    return /*#__PURE__*/React.createElement(RowContext.Consumer, null, function (_ref2) {\n      var gutter = _ref2.gutter;\n\n      var mergedStyle = _extends({}, style);\n\n      if (gutter) {\n        mergedStyle = _extends(_extends(_extends({}, gutter[0] > 0 ? {\n          paddingLeft: gutter[0] / 2,\n          paddingRight: gutter[0] / 2\n        } : {}), gutter[1] > 0 ? {\n          paddingTop: gutter[1] / 2,\n          paddingBottom: gutter[1] / 2\n        } : {}), mergedStyle);\n      }\n\n      if (flex) {\n        mergedStyle.flex = parseFlex(flex);\n      }\n\n      return /*#__PURE__*/React.createElement(\"div\", _extends({}, others, {\n        style: mergedStyle,\n        className: classes,\n        ref: ref\n      }), children);\n    });\n  };\n\n  return /*#__PURE__*/React.createElement(ConfigConsumer, null, renderCol);\n});\nCol.displayName = 'Col';\nexport default Col;","import { Col } from '../grid';\nexport default Col;","import { createContext } from 'react';\nvar RowContext = /*#__PURE__*/createContext({});\nexport default RowContext;","import '../../style/index.css'; // style dependencies\n// deps-lint-skip: grid\n\nimport '../../grid/style/css';","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nimport * as React from 'react';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport toArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport ResizeObserver from 'resize-observer-polyfill';\nvar INTERNAL_PREFIX_KEY = 'rc-observer-key'; // Still need to be compatible with React 15, we use class component here\n\nvar ReactResizeObserver =\n/** @class */\nfunction () {\n  var ReactResizeObserver = /*#__PURE__*/function (_React$Component) {\n    _inherits(ReactResizeObserver, _React$Component);\n\n    var _super = _createSuper(ReactResizeObserver);\n\n    function ReactResizeObserver() {\n      var _this;\n\n      _classCallCheck(this, ReactResizeObserver);\n\n      _this = _super.apply(this, arguments);\n      _this.resizeObserver = null;\n      _this.childNode = null;\n      _this.currentElement = null;\n      _this.state = {\n        width: 0,\n        height: 0\n      };\n\n      _this.onResize = function (entries) {\n        var onResize = _this.props.onResize;\n        var target = entries[0].target;\n\n        var _target$getBoundingCl = target.getBoundingClientRect(),\n            width = _target$getBoundingCl.width,\n            height = _target$getBoundingCl.height;\n\n        var offsetWidth = target.offsetWidth,\n            offsetHeight = target.offsetHeight;\n        /**\n         * Resize observer trigger when content size changed.\n         * In most case we just care about element size,\n         * let's use `boundary` instead of `contentRect` here to avoid shaking.\n         */\n\n        var fixedWidth = Math.floor(width);\n        var fixedHeight = Math.floor(height);\n\n        if (_this.state.width !== fixedWidth || _this.state.height !== fixedHeight) {\n          var size = {\n            width: fixedWidth,\n            height: fixedHeight\n          };\n\n          _this.setState(size);\n\n          if (onResize) {\n            onResize(_objectSpread(_objectSpread({}, size), {}, {\n              offsetWidth: offsetWidth,\n              offsetHeight: offsetHeight\n            }));\n          }\n        }\n      };\n\n      _this.setChildNode = function (node) {\n        _this.childNode = node;\n      };\n\n      return _this;\n    }\n\n    _createClass(ReactResizeObserver, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        this.onComponentUpdated();\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate() {\n        this.onComponentUpdated();\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.destroyObserver();\n      }\n    }, {\n      key: \"onComponentUpdated\",\n      value: function onComponentUpdated() {\n        var disabled = this.props.disabled; // Unregister if disabled\n\n        if (disabled) {\n          this.destroyObserver();\n          return;\n        } // Unregister if element changed\n\n\n        var element = findDOMNode(this.childNode || this);\n        var elementChanged = element !== this.currentElement;\n\n        if (elementChanged) {\n          this.destroyObserver();\n          this.currentElement = element;\n        }\n\n        if (!this.resizeObserver && element) {\n          this.resizeObserver = new ResizeObserver(this.onResize);\n          this.resizeObserver.observe(element);\n        }\n      }\n    }, {\n      key: \"destroyObserver\",\n      value: function destroyObserver() {\n        if (this.resizeObserver) {\n          this.resizeObserver.disconnect();\n          this.resizeObserver = null;\n        }\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var children = this.props.children;\n        var childNodes = toArray(children);\n\n        if (childNodes.length > 1) {\n          warning(false, 'Find more than one child node with `children` in ResizeObserver. Will only observe first one.');\n        } else if (childNodes.length === 0) {\n          warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');\n          return null;\n        }\n\n        var childNode = childNodes[0];\n\n        if (React.isValidElement(childNode) && supportRef(childNode)) {\n          var ref = childNode.ref;\n          childNodes[0] = React.cloneElement(childNode, {\n            ref: composeRef(ref, this.setChildNode)\n          });\n        }\n\n        return childNodes.length === 1 ? childNodes[0] : childNodes.map(function (node, index) {\n          if (!React.isValidElement(node) || 'key' in node && node.key !== null) {\n            return node;\n          }\n\n          return React.cloneElement(node, {\n            key: \"\".concat(INTERNAL_PREFIX_KEY, \"-\").concat(index)\n          });\n        });\n      }\n    }]);\n\n    return ReactResizeObserver;\n  }(React.Component);\n\n  ReactResizeObserver.displayName = 'ResizeObserver';\n  return ReactResizeObserver;\n}();\n\nexport default ReactResizeObserver;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _PlusOutlined = _interopRequireDefault(require(\"@ant-design/icons-svg/lib/asn/PlusOutlined\"));\n\nvar _AntdIcon = _interopRequireDefault(require(\"../components/AntdIcon\")); // GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n\nvar PlusOutlined = function PlusOutlined(props, ref) {\n  return React.createElement(_AntdIcon.default, Object.assign({}, props, {\n    ref: ref,\n    icon: _PlusOutlined.default\n  }));\n};\n\nPlusOutlined.displayName = 'PlusOutlined';\n\nvar _default = React.forwardRef(PlusOutlined);\n\nexports.default = _default;"],"sourceRoot":""}