(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{"4t1q":function(e,t,n){"use strict";n("SchZ"),n("TZyB")},HJMW:function(e,t,n){},KBXm:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{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"}}]},name:"ellipsis",theme:"outlined"}},OQrj:function(e,t,n){},Oyq8:function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return r}));var a=[{name:" Aaron Suddjian",github:"https://github.com/suddjian",image:"https://github.com/suddjian.png"},{name:"Beto Dealmeida",github:"https://github.com/betodealmeida",image:"https://github.com/betodealmeida.png"},{name:"Bogdan Kyryliuk",github:"https://github.com/bkyryliuk",image:"https://github.com/bkyryliuk.png"},{name:"Chris Williams",github:"https://github.com/williaster",image:"https://github.com/williaster.png"},{name:"Craig Rueda",github:"https://github.com/craig-rueda",image:"https://github.com/craig-rueda.png"},{name:"Daniel Gaspar",github:"https://github.com/dpgaspar",image:"https://github.com/dpgaspar.png"},{name:"Erik Ritker",github:"https://github.com/etr2460",image:"https://github.com/etr2460.png"},{name:"Evan Rusackas",github:"https://github.com/rusackas",image:"https://github.com/rusackas.png"},{name:"Grace Guo",github:"https://github.com/graceguo-supercat",image:"https://github.com/graceguo-supercat.png"},{name:"Jeff Feng",github:"https://github.com/jfeng15",image:"https://github.com/jfeng15.png"},{name:"Jesse Yang",github:"https://github.com/ktmud",image:"https://github.com/ktmud.png"},{name:"John Bodley",github:"https://github.com/john-bodley",image:"https://github.com/john-bodley.png"},{name:"Krist Wongsuphasawat",github:"https://github.com/kristw",image:"https://github.com/kristw.png"},{name:"Maxime Beauchemin",github:"https://github.com/mistercrunch",image:"https://github.com/mistercrunch.png"},{name:"Michelle Thomas",github:"https://github.com/michellethomas",image:"https://github.com/michellethomas.png"},{name:"Nishant Bangarwa",github:"https://github.com/nishantmonu51",image:"https://github.com/nishantmonu51.png"},{name:"Tai Dupree",github:"https://github.com/nytai",image:"https://github.com/nytai.png"},{name:"Ville Brofeldt",github:"https://github.com/villebro",image:"https://github.com/villebro.png"},{name:"Will Barrett",github:"https://github.com/willbarrett",image:"https://github.com/willbarrett.png"}];void 0!==a&&a&&a===Object(a)&&Object.isExtensible(a)&&!a.hasOwnProperty("__filemeta")&&Object.defineProperty(a,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}}),void 0!==a&&a&&a===Object(a)&&Object.isExtensible(a)&&!a.hasOwnProperty("__filemeta")&&Object.defineProperty(a,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}});var r=[{title:"Amazon Redshfit",href:"https://aws.amazon.com/redshift/",imgName:"aws-redshift.png"},{title:"Apache Druid",href:"http://druid.io/",imgName:"druid.png"},{title:"Apache Kylin",href:"http://kylin.apache.org/",imgName:"apache-kylin.png"},{title:"BigQuery",href:"https://cloud.google.com/bigquery/",imgName:"googleBQ.png"},{title:"ClickHouse",href:"https://clickhouse.tech/",imgName:"clickhouse.png"},{title:"Exasol",href:"https://www.exasol.com/en/",imgName:"exasol.png"},{title:"FireBirdSql",href:"https://firebirdsql.org/",imgName:"firebird.png"},{title:"Green Plum",href:"https://greenplum.org/",imgName:"greenplum.png"},{title:"IBM Db2",href:"https://www.ibm.com/analytics/db2",imgName:"ibmdb2.png"},{title:"MySQL",href:"https://www.mysql.com/",imgName:"mysql.png"},{title:"Microsoft SqlServer",href:"https://www.microsoft.com/en-us/sql-server",imgName:"msql.png"},{title:"MonetDB",href:"https://www.monetdb.org/",imgName:"monet.png"},{title:"Oracle",href:"https://www.oracle.com/database/",imgName:"oraclelogo.png"},{title:"PostgresSQL",href:"https://www.postgresql.org/",imgName:"postsql.png"},{title:"Presto",href:"https://prestodb.io/",imgName:"presto-og.png"},{title:"Snowflake",href:"https://www.snowflake.com/",imgName:"snowflake.png"},{title:"SQLite",href:"https://www.sqlite.org/index.html",imgName:"sqllite.png"},{title:"Vertica",href:"https://www.vertica.com/",imgName:"vertica.png"}];void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}}),void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}})},SRve:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"}},TZyB:function(e,t,n){},cCPh:function(e,t,n){"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(a=n("jiSn"))&&a.__esModule?a:{default:a};t.default=r,e.exports=r},fNCr:function(e,t,n){"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=(a=n("tSko"))&&a.__esModule?a:{default:a};t.default=r,e.exports=r},gbpr:function(e,t,n){"use strict";n.r(t);n("SchZ"),n("HJMW"),n("OQrj"),n("4t1q"),n("rO+z");var a=n("lSNA"),r=n.n(a),o=n("pVnL"),c=n.n(o),i=n("q1tI"),l=n.n(i),s=n("TSYQ"),u=n.n(s),f=n("BGR+"),d=n("H84U"),p=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},b=function(e){return i.createElement(d.a,null,(function(t){var n=t.getPrefixCls,a=e.prefixCls,o=e.className,l=e.hoverable,s=void 0===l||l,f=p(e,["prefixCls","className","hoverable"]),d=n("card",a),b=u()("".concat(d,"-grid"),o,r()({},"".concat(d,"-grid-hoverable"),s));return i.createElement("div",c()({},f,{className:b}))}))},m=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},h=function(e){return i.createElement(d.a,null,(function(t){var n=t.getPrefixCls,a=e.prefixCls,r=e.className,o=e.avatar,l=e.title,s=e.description,f=m(e,["prefixCls","className","avatar","title","description"]),d=n("card",a),p=u()("".concat(d,"-meta"),r),b=o?i.createElement("div",{className:"".concat(d,"-meta-avatar")},o):null,h=l?i.createElement("div",{className:"".concat(d,"-meta-title")},l):null,v=s?i.createElement("div",{className:"".concat(d,"-meta-description")},s):null,g=h||v?i.createElement("div",{className:"".concat(d,"-meta-detail")},h,v):null;return i.createElement("div",c()({},f,{className:p}),b,g)}))},v=n("ODXe"),g=n("Ff2n"),y=n("rePB"),O=n("Zm9Q");function j(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],a=!0,r=!1,o=void 0;try{for(var c,i=e[Symbol.iterator]();!(a=(c=i.next()).done)&&(n.push(c.value),!t||n.length!==t);a=!0);}catch(l){r=!0,o=l}finally{try{a||null==i.return||i.return()}finally{if(r)throw o}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function x(e,t){var n=t||{},a=n.defaultValue,r=n.value,o=n.onChange,c=n.postState,l=j(i.useState((function(){return void 0!==r?r:void 0!==a?"function"==typeof a?a():a:"function"==typeof e?e():e})),2),s=l[0],u=l[1],f=void 0!==r?r:s;c&&(f=c(f));var d=i.useRef(!0);return i.useEffect((function(){d.current?d.current=!1:void 0===r&&u(r)}),[r]),[f,function(e){u(e),f!==e&&o&&o(e,f)}]}var E=n("KQm4"),k=n("xEkU"),P=n.n(k),C=n("t23M");function N(e){var t=Object(i.useRef)(),n=Object(i.useRef)(!1);return Object(i.useEffect)((function(){return function(){n.current=!0,P.a.cancel(t.current)}}),[]),function(){for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];n.current||(P.a.cancel(t.current),t.current=P()((function(){e.apply(void 0,r)})))}}var S=n("4IlW");var R=i.forwardRef((function(e,t){var n,a=e.prefixCls,r=e.id,o=e.active,c=e.rtl,l=e.tab,s=l.key,f=l.tab,d=l.disabled,p=l.closeIcon,b=e.tabBarGutter,m=e.tabPosition,h=e.closable,v=e.renderWrapper,g=e.removeAriaLabel,O=e.editable,j=e.onClick,w=e.onRemove,x=e.onFocus,E="".concat(a,"-tab");i.useEffect((function(){return w}),[]);var k={};"top"===m||"bottom"===m?k[c?"marginLeft":"marginRight"]=b:k.marginBottom=b;var P=O&&!1!==h&&!d;function C(e){d||j(e)}var N=i.createElement("div",{key:s,ref:t,className:u()(E,(n={},Object(y.a)(n,"".concat(E,"-with-remove"),P),Object(y.a)(n,"".concat(E,"-active"),o),Object(y.a)(n,"".concat(E,"-disabled"),d),n)),style:k,onClick:C},i.createElement("div",{role:"tab","aria-selected":o,id:r&&"".concat(r,"-tab-").concat(s),className:"".concat(E,"-btn"),"aria-controls":r&&"".concat(r,"-panel-").concat(s),"aria-disabled":d,tabIndex:d?null:0,onClick:function(e){e.stopPropagation(),C(e)},onKeyDown:function(e){[S.a.SPACE,S.a.ENTER].includes(e.which)&&(e.preventDefault(),C(e))},onFocus:x},f),P&&i.createElement("button",{type:"button","aria-label":g||"remove",tabIndex:0,className:"".concat(E,"-remove"),onClick:function(e){var t;e.stopPropagation(),(t=e).preventDefault(),t.stopPropagation(),O.onEdit("remove",{key:s,event:t})}},p||O.removeIcon||"×"));return v&&(N=v(N)),N}));function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function M(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?T(Object(n),!0).forEach((function(t){Object(y.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var I={width:0,height:0,left:0,top:0};var z={width:0,height:0,left:0,top:0,right:0};var D=n("1j5w"),A=n("uciX"),B={adjustX:1,adjustY:1},_=[0,0],q={topLeft:{points:["bl","tl"],overflow:B,offset:[0,-4],targetOffset:_},topCenter:{points:["bc","tc"],overflow:B,offset:[0,-4],targetOffset:_},topRight:{points:["br","tr"],overflow:B,offset:[0,-4],targetOffset:_},bottomLeft:{points:["tl","bl"],overflow:B,offset:[0,4],targetOffset:_},bottomCenter:{points:["tc","bc"],overflow:B,offset:[0,4],targetOffset:_},bottomRight:{points:["tr","br"],overflow:B,offset:[0,4],targetOffset:_}};var L=i.forwardRef((function(e,t){var n=e.arrow,a=void 0!==n&&n,r=e.prefixCls,o=void 0===r?"rc-dropdown":r,c=e.transitionName,l=e.animation,s=e.align,f=e.placement,d=void 0===f?"bottomLeft":f,p=e.placements,b=void 0===p?q:p,m=e.getPopupContainer,h=e.showAction,O=e.hideAction,j=e.overlayClassName,w=e.overlayStyle,x=e.visible,E=e.trigger,k=void 0===E?["hover"]:E,P=Object(g.a)(e,["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger"]),C=i.useState(),N=Object(v.a)(C,2),S=N[0],R=N[1],T="visible"in e?x:S,M=i.useRef(null);i.useImperativeHandle(t,(function(){return M.current}));var I,z,D,B,_,L,K=function(){var t=e.overlay;return"function"==typeof t?t():t},W=function(t){var n=e.onOverlayClick,a=K().props;R(!1),n&&n(t),a.onClick&&a.onClick(t)},H=function(){var e=K(),t={prefixCls:"".concat(o,"-menu"),onClick:W};return"string"==typeof e.type&&delete t.prefixCls,i.createElement(i.Fragment,null,a&&i.createElement("div",{className:"".concat(o,"-arrow")}),i.cloneElement(e,t))},G=O;return G||-1===k.indexOf("contextMenu")||(G=["click"]),i.createElement(A.a,Object.assign({},P,{prefixCls:o,ref:M,popupClassName:u()(j,Object(y.a)({},"".concat(o,"-show-arrow"),a)),popupStyle:w,builtinPlacements:b,action:k,showAction:h,hideAction:G||[],popupPlacement:d,popupAlign:s,popupTransitionName:c,popupAnimation:l,popupVisible:T,stretch:(_=e.minOverlayWidthMatchTrigger,L=e.alignPoint,("minOverlayWidthMatchTrigger"in e?_:!L)?"minWidth":""),popup:"function"==typeof e.overlay?H:H(),onPopupVisibleChange:function(t){var n=e.onVisibleChange;R(t),"function"==typeof n&&n(t)},getPopupContainer:m}),(z=e.children,D=z.props?z.props:{},B=u()(D.className,void 0!==(I=e.openClassName)?I:"".concat(o,"-open")),S&&z?i.cloneElement(z,{className:B}):z))}));var K=i.forwardRef((function(e,t){var n=e.prefixCls,a=e.editable,r=e.locale,o=e.style;return a&&!1!==a.showAdd?i.createElement("button",{ref:t,type:"button",className:"".concat(n,"-nav-add"),style:o,"aria-label":(null==r?void 0:r.addAriaLabel)||"Add tab",onClick:function(e){a.onEdit("add",{event:e})}},a.addIcon||"+"):null}));var W=i.forwardRef((function(e,t){var n=e.prefixCls,a=e.id,r=e.tabs,o=e.locale,c=e.mobile,l=e.moreIcon,s=void 0===l?"More":l,f=e.moreTransitionName,d=e.style,p=e.className,b=e.editable,m=e.tabBarGutter,h=e.rtl,g=e.onTabClick,O=Object(i.useState)(!1),j=Object(v.a)(O,2),w=j[0],x=j[1],E=Object(i.useState)(null),k=Object(v.a)(E,2),P=k[0],C=k[1],N="".concat(a,"-more-popup"),R="".concat(n,"-dropdown"),T=null!==P?"".concat(N,"-").concat(P):null,M=null==o?void 0:o.dropdownAriaLabel,I=i.createElement(D.f,{onClick:function(e){var t=e.key,n=e.domEvent;g(t,n),x(!1)},id:N,tabIndex:-1,role:"listbox","aria-activedescendant":T,selectedKeys:[P],"aria-label":void 0!==M?M:"expanded dropdown"},r.map((function(e){return i.createElement(D.d,{key:e.key,id:"".concat(N,"-").concat(e.key),role:"option","aria-controls":a&&"".concat(a,"-panel-").concat(e.key),disabled:e.disabled},e.tab)})));function z(e){for(var t=r.filter((function(e){return!e.disabled})),n=t.findIndex((function(e){return e.key===P}))||0,a=t.length,o=0;o<a;o+=1){var c=t[n=(n+e+a)%a];if(!c.disabled)return void C(c.key)}}Object(i.useEffect)((function(){var e=document.getElementById(T);e&&e.scrollIntoView&&e.scrollIntoView(!1)}),[P]),Object(i.useEffect)((function(){w||C(null)}),[w]);var A=Object(y.a)({},h?"marginLeft":"marginRight",m);r.length||(A.visibility="hidden",A.order=1);var B=u()(Object(y.a)({},"".concat(R,"-rtl"),h)),_=c?null:i.createElement(L,{prefixCls:R,overlay:I,trigger:["hover"],visible:w,transitionName:f,onVisibleChange:x,overlayClassName:B},i.createElement("button",{type:"button",className:"".concat(n,"-nav-more"),style:A,tabIndex:-1,"aria-hidden":"true","aria-haspopup":"listbox","aria-controls":N,id:"".concat(a,"-more"),"aria-expanded":w,onKeyDown:function(e){var t=e.which;if(w)switch(t){case S.a.UP:z(-1),e.preventDefault();break;case S.a.DOWN:z(1),e.preventDefault();break;case S.a.ESC:x(!1);break;case S.a.SPACE:case S.a.ENTER:null!==P&&g(P,e)}else[S.a.DOWN,S.a.SPACE,S.a.ENTER].includes(t)&&(x(!0),e.preventDefault())}},s));return i.createElement("div",{className:u()("".concat(n,"-nav-operations"),p),style:d,ref:t},_,i.createElement(K,{prefixCls:n,locale:o,editable:b}))})),H=Object(i.createContext)(null),G=Math.pow(.995,20);function V(e,t){var n=i.useRef(e),a=i.useState({}),r=Object(v.a)(a,2)[1];return[n.current,function(e){var a="function"==typeof e?e(n.current):e;a!==n.current&&t(a,n.current),n.current=a,r({})}]}function Q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function U(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Q(Object(n),!0).forEach((function(t){Object(y.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Q(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var F=i.forwardRef((function(e,t){var n,a,r=i.useContext(H),o=r.prefixCls,c=r.tabs,l=e.className,s=e.style,f=e.id,d=e.animated,p=e.activeKey,b=e.rtl,m=e.extra,h=e.editable,g=e.locale,O=e.tabPosition,j=e.tabBarGutter,w=e.children,x=e.onTabClick,k=e.onTabScroll,S=Object(i.useRef)(),T=Object(i.useRef)(),D=Object(i.useRef)(),A=Object(i.useRef)(),B=(a=Object(i.useRef)(new Map),[function(e){return a.current.has(e)||a.current.set(e,i.createRef()),a.current.get(e)},function(e){a.current.delete(e)}]),_=Object(v.a)(B,2),q=_[0],L=_[1],Q="top"===O||"bottom"===O,F=V(0,(function(e,t){Q&&k&&k({direction:e>t?"left":"right"})})),Y=Object(v.a)(F,2),J=Y[0],X=Y[1],Z=V(0,(function(e,t){!Q&&k&&k({direction:e>t?"top":"bottom"})})),$=Object(v.a)(Z,2),ee=$[0],te=$[1],ne=Object(i.useState)(0),ae=Object(v.a)(ne,2),re=ae[0],oe=ae[1],ce=Object(i.useState)(0),ie=Object(v.a)(ce,2),le=ie[0],se=ie[1],ue=Object(i.useState)(0),fe=Object(v.a)(ue,2),de=fe[0],pe=fe[1],be=Object(i.useState)(0),me=Object(v.a)(be,2),he=me[0],ve=me[1],ge=Object(i.useState)(null),ye=Object(v.a)(ge,2),Oe=ye[0],je=ye[1],we=Object(i.useState)(null),xe=Object(v.a)(we,2),Ee=xe[0],ke=xe[1],Pe=Object(i.useState)(0),Ce=Object(v.a)(Pe,2),Ne=Ce[0],Se=Ce[1],Re=Object(i.useState)(0),Te=Object(v.a)(Re,2),Me=Te[0],Ie=Te[1],ze=function(e){var t=Object(i.useRef)([]),n=Object(i.useState)({}),a=Object(v.a)(n,2)[1],r=Object(i.useRef)("function"==typeof e?e():e),o=N((function(){var e=r.current;t.current.forEach((function(t){e=t(e)})),t.current=[],r.current=e,a({})}));return[r.current,function(e){t.current.push(e),o()}]}(new Map),De=Object(v.a)(ze,2),Ae=De[0],Be=De[1],_e=function(e,t,n){return Object(i.useMemo)((function(){for(var n,a=new Map,r=t.get(null===(n=e[0])||void 0===n?void 0:n.key)||I,o=r.left+r.width,c=0;c<e.length;c+=1){var i,l=e[c].key,s=t.get(l);if(!s)s=t.get(null===(i=e[c-1])||void 0===i?void 0:i.key)||I;var u=a.get(l)||M({},s);u.right=o-u.left-u.width,a.set(l,u)}return a}),[e.map((function(e){return e.key})).join("_"),t,n])}(c,Ae,re),qe="".concat(o,"-nav-operations-hidden"),Le=0,Ke=0;function We(e){return e<Le?[Le,!1]:e>Ke?[Ke,!1]:[e,!0]}Q?b?(Le=0,Ke=Math.max(0,re-Oe)):(Le=Math.min(0,Oe-re),Ke=0):(Le=Math.min(0,Ee-le),Ke=0);var He=Object(i.useRef)(),Ge=Object(i.useState)(),Ve=Object(v.a)(Ge,2),Qe=Ve[0],Ue=Ve[1];function Fe(){Ue(Date.now())}function Ye(){window.clearTimeout(He.current)}function Je(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,t=_e.get(e);if(t)if(Q){var n=J;b?t.right<J?n=t.right:t.right+t.width>J+Oe&&(n=t.right+t.width-Oe):t.left<-J?n=-t.left:t.left+t.width>-J+Oe&&(n=-(t.left+t.width-Oe)),te(0),X(We(n)[0])}else{var a=ee;t.top<-ee?a=-t.top:t.top+t.height>-ee+Ee&&(a=-(t.top+t.height-Ee)),X(0),te(We(a)[0])}}!function(e,t){var n=Object(i.useState)(),a=Object(v.a)(n,2),r=a[0],o=a[1],c=Object(i.useState)(0),l=Object(v.a)(c,2),s=l[0],u=l[1],f=Object(i.useState)(0),d=Object(v.a)(f,2),p=d[0],b=d[1],m=Object(i.useState)(),h=Object(v.a)(m,2),g=h[0],y=h[1],O=Object(i.useRef)(),j=Object(i.useRef)(0),w=Object(i.useRef)(!1),x=Object(i.useRef)(),E=Object(i.useRef)(null);E.current={onTouchStart:function(e){var t=e.touches[0],n=t.screenX,a=t.screenY;o({x:n,y:a}),window.clearInterval(O.current)},onTouchMove:function(e){if(r){e.preventDefault();var n=e.touches[0],a=n.screenX,c=n.screenY;o({x:a,y:c});var i=a-r.x,l=c-r.y;t(i,l);var f=Date.now();u(f),b(f-s),y({x:i,y:l})}},onTouchEnd:function(){if(r&&(o(null),y(null),g)){var e=g.x/p,n=g.y/p,a=Math.abs(e),c=Math.abs(n);if(Math.max(a,c)<.1)return;var i=e,l=n;O.current=window.setInterval((function(){Math.abs(i)<.01&&Math.abs(l)<.01?window.clearInterval(O.current):t(20*(i*=G),20*(l*=G))}),20)}},onWheel:function(e){var n=e.deltaX,a=e.deltaY,r=0,o=Math.abs(n),c=Math.abs(a);o===c?r="x"===x.current?n:a:o>c?(r=n,x.current="x"):(r=a,x.current="y");var i=Date.now();i-j.current>100&&(w.current=!1),(t(-r,-r)||w.current)&&(e.preventDefault(),w.current=!0),j.current=i}},i.useEffect((function(){function t(e){E.current.onTouchMove(e)}function n(e){E.current.onTouchEnd(e)}return document.addEventListener("touchmove",t,{passive:!1}),document.addEventListener("touchend",n,{passive:!1}),e.current.addEventListener("touchstart",(function(e){E.current.onTouchStart(e)}),{passive:!1}),e.current.addEventListener("wheel",(function(e){E.current.onWheel(e)})),function(){document.removeEventListener("touchmove",t),document.removeEventListener("touchend",n)}}),[])}(S,(function(e,t){var n=!1;function a(e,t){e((function(e){var a=We(e+t),r=Object(v.a)(a,2),o=r[0],c=r[1];return n=c,o}))}if(Q){if(Oe>=re)return n;a(X,e)}else{if(Ee>=le)return n;a(te,t)}return Ye(),Fe(),n})),Object(i.useEffect)((function(){return Ye(),Qe&&(He.current=window.setTimeout((function(){Ue(0)}),100)),Ye}),[Qe]);var Xe=function(e,t,n,a,r){var o,c,l,s=r.tabs,u=r.tabPosition,f=r.rtl;["top","bottom"].includes(u)?(o="width",c=f?"right":"left",l=Math.abs(t.left)):(o="height",c="top",l=-t.top);var d=t[o],p=n[o],b=a[o],m=d;return p+b>d&&(m=d-b),Object(i.useMemo)((function(){if(!s.length)return[0,0];for(var t=s.length,n=t,a=0;a<t;a+=1){var r=e.get(s[a].key)||z;if(r[c]+r[o]>l+m){n=a-1;break}}for(var i=0,u=t-1;u>=0;u-=1){if((e.get(s[u].key)||z)[c]<l){i=u+1;break}}return[i,n]}),[e,l,m,u,s.map((function(e){return e.key})).join("_"),f])}(_e,{width:Oe,height:Ee,left:J,top:ee},{width:de,height:he},{width:Ne,height:Me},U(U({},e),{},{tabs:c})),Ze=Object(v.a)(Xe,2),$e=Ze[0],et=Ze[1],tt=c.map((function(e){var t=e.key;return i.createElement(R,{id:f,prefixCls:o,key:t,rtl:b,tab:e,closable:e.closable,editable:h,active:t===p,tabPosition:O,tabBarGutter:j,renderWrapper:w,removeAriaLabel:null==g?void 0:g.removeAriaLabel,ref:q(t),onClick:function(e){x(t,e)},onRemove:function(){L(t)},onFocus:function(){Je(t),Fe(),b||(S.current.scrollLeft=0),S.current.scrollTop=0}})})),nt=N((function(){var e,t,n,a,r,o,i,l,s,u=(null===(e=S.current)||void 0===e?void 0:e.offsetWidth)||0,f=(null===(t=S.current)||void 0===t?void 0:t.offsetHeight)||0,d=(null===(n=A.current)||void 0===n?void 0:n.offsetWidth)||0,p=(null===(a=A.current)||void 0===a?void 0:a.offsetHeight)||0,b=(null===(r=D.current)||void 0===r?void 0:r.offsetWidth)||0,m=(null===(o=D.current)||void 0===o?void 0:o.offsetHeight)||0;je(u),ke(f),Se(d),Ie(p);var h=((null===(i=T.current)||void 0===i?void 0:i.offsetWidth)||0)-d,v=((null===(l=T.current)||void 0===l?void 0:l.offsetHeight)||0)-p;oe(h),se(v);var g=null===(s=D.current)||void 0===s?void 0:s.className.includes(qe);pe(h-(g?0:b)),ve(v-(g?0:m)),Be((function(){var e=new Map;return c.forEach((function(t){var n=t.key,a=q(n).current;e.set(n,{width:a.offsetWidth,height:a.offsetHeight,left:a.offsetLeft,top:a.offsetTop})})),e}))})),at=c.slice(0,$e),rt=c.slice(et+1),ot=[].concat(Object(E.a)(at),Object(E.a)(rt)),ct=Object(i.useState)(),it=Object(v.a)(ct,2),lt=it[0],st=it[1],ut=_e.get(p),ft=Object(i.useRef)();function dt(){P.a.cancel(ft.current)}Object(i.useEffect)((function(){var e={};return ut&&(Q?(b?e.right=ut.right:e.left=ut.left,e.width=ut.width):(e.top=ut.top,e.height=ut.height)),dt(),ft.current=P()((function(){st(e)})),dt}),[ut,Q,b]),Object(i.useEffect)((function(){Je()}),[p,ut,_e,Q]),Object(i.useEffect)((function(){nt()}),[b,j,p,c.map((function(e){return e.key})).join("_")]);var pt,bt,mt,ht,vt=!!ot.length,gt="".concat(o,"-nav-wrap");return Q?b?(bt=J>0,pt=J+Oe<re):(pt=J<0,bt=-J+Oe<re):(mt=ee<0,ht=-ee+Ee<le),i.createElement("div",{ref:t,role:"tablist",className:u()("".concat(o,"-nav"),l),style:s,onKeyDown:function(){Fe()}},i.createElement(C.a,{onResize:nt},i.createElement("div",{className:u()(gt,(n={},Object(y.a)(n,"".concat(gt,"-ping-left"),pt),Object(y.a)(n,"".concat(gt,"-ping-right"),bt),Object(y.a)(n,"".concat(gt,"-ping-top"),mt),Object(y.a)(n,"".concat(gt,"-ping-bottom"),ht),n)),ref:S},i.createElement(C.a,{onResize:nt},i.createElement("div",{ref:T,className:"".concat(o,"-nav-list"),style:{transform:"translate(".concat(J,"px, ").concat(ee,"px)"),transition:Qe?"none":void 0}},tt,i.createElement(K,{ref:A,prefixCls:o,locale:g,editable:h,style:{visibility:vt?"hidden":null}}),i.createElement("div",{className:u()("".concat(o,"-ink-bar"),Object(y.a)({},"".concat(o,"-ink-bar-animated"),d.inkBar)),style:lt}))))),i.createElement(W,Object.assign({},e,{ref:D,prefixCls:o,tabs:ot,className:!vt&&qe})),m&&i.createElement("div",{className:"".concat(o,"-extra-content")},m))}));function Y(e){var t=e.id,n=e.activeKey,a=e.animated,r=e.tabPosition,o=e.rtl,c=e.destroyInactiveTabPane,l=i.useContext(H),s=l.prefixCls,f=l.tabs,d=a.tabPane,p=f.findIndex((function(e){return e.key===n}));return i.createElement("div",{className:u()("".concat(s,"-content-holder"))},i.createElement("div",{className:u()("".concat(s,"-content"),"".concat(s,"-content-").concat(r),Object(y.a)({},"".concat(s,"-content-animated"),d)),style:p&&d?Object(y.a)({},o?"marginRight":"marginLeft","-".concat(p,"00%")):null},f.map((function(e){return i.cloneElement(e.node,{key:e.key,prefixCls:s,tabKey:e.key,id:t,animated:d,active:e.key===n,destroyInactiveTabPane:c})}))))}function J(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function X(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?J(Object(n),!0).forEach((function(t){Object(y.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):J(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Z(e){var t=e.prefixCls,n=e.forceRender,a=e.className,r=e.style,o=e.id,c=e.active,l=e.animated,s=e.destroyInactiveTabPane,f=e.tabKey,d=e.children,p=i.useState(n),b=Object(v.a)(p,2),m=b[0],h=b[1];i.useEffect((function(){c?h(!0):s&&h(!1)}),[c,s]);var g={};return c||(l?(g.visibility="hidden",g.height=0,g.overflowY="hidden"):g.display="none"),i.createElement("div",{id:o&&"".concat(o,"-panel-").concat(f),role:"tabpanel",tabIndex:c?0:-1,"aria-labelledby":o&&"".concat(o,"-tab-").concat(f),"aria-hidden":!c,style:X(X({},g),r),className:u()("".concat(t,"-tabpane"),c&&"".concat(t,"-tabpane-active"),a)},(c||m||n)&&d)}function $(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function ee(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$(Object(n),!0).forEach((function(t){Object(y.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var te=0;var ne=i.forwardRef((function(e,t){var n,a,r=e.id,o=e.prefixCls,c=void 0===o?"rc-tabs":o,l=e.className,s=e.children,f=e.direction,d=e.activeKey,p=e.defaultActiveKey,b=e.editable,m=e.animated,h=e.tabPosition,j=void 0===h?"top":h,w=e.tabBarGutter,E=e.tabBarStyle,k=e.tabBarExtraContent,P=e.locale,C=e.moreIcon,N=e.moreTransitionName,S=e.destroyInactiveTabPane,R=e.renderTabBar,T=e.onChange,M=e.onTabClick,I=e.onTabScroll,z=Object(g.a)(e,["id","prefixCls","className","children","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","moreIcon","moreTransitionName","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll"]),D=function(e){return Object(O.a)(e).map((function(e){return i.isValidElement(e)?ee(ee({key:void 0!==e.key?String(e.key):void 0},e.props),{},{node:e}):null})).filter((function(e){return e}))}(s),A="rtl"===f;a=!1===m?{inkBar:!1,tabPane:!1}:ee({inkBar:!0,tabPane:!1},!0!==m?m:null);var B=Object(i.useState)(!1),_=Object(v.a)(B,2),q=_[0],L=_[1];Object(i.useEffect)((function(){var e;L((e=navigator.userAgent||navigator.vendor||window.opera,!(!/(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(e)&&!/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(e.substr(0,4)))))}),[]);var K=x((function(){var e;return null===(e=D[0])||void 0===e?void 0:e.key}),{value:d,defaultValue:p}),W=Object(v.a)(K,2),G=W[0],V=W[1],Q=Object(i.useState)((function(){return D.findIndex((function(e){return e.key===G}))})),U=Object(v.a)(Q,2),J=U[0],X=U[1];Object(i.useEffect)((function(){var e,t=D.findIndex((function(e){return e.key===G}));-1===t&&(t=Math.max(0,Math.min(J,D.length-1)),V(null===(e=D[t])||void 0===e?void 0:e.key));X(t)}),[D.map((function(e){return e.key})).join("_"),G,J]);var Z=x(null,{value:r}),$=Object(v.a)(Z,2),ne=$[0],ae=$[1],re=j;q&&!["left","right"].includes(j)&&(re="top"),Object(i.useEffect)((function(){r||(ae("rc-tabs-".concat(te)),te+=1)}),[]);var oe,ce={id:ne,activeKey:G,animated:a,tabPosition:re,rtl:A,mobile:q},ie=ee(ee({},ce),{},{editable:b,locale:P,moreIcon:C,moreTransitionName:N,tabBarGutter:w,onTabClick:function(e,t){null==M||M(e,t),V(e),null==T||T(e)},onTabScroll:I,extra:k,style:E,panes:s});return oe=R?R(ie,F):i.createElement(F,Object.assign({},ie)),i.createElement(H.Provider,{value:{tabs:D,prefixCls:c}},i.createElement("div",Object.assign({ref:t,id:r,className:u()(c,"".concat(c,"-").concat(re),(n={},Object(y.a)(n,"".concat(c,"-mobile"),q),Object(y.a)(n,"".concat(c,"-editable"),b),Object(y.a)(n,"".concat(c,"-rtl"),A),n),l)},z),oe,i.createElement(Y,Object.assign({destroyInactiveTabPane:S},ce,{animated:a}))))}));ne.TabPane=Z;var ae=ne,re=n("cCPh"),oe=n.n(re),ce=n("fNCr"),ie=n.n(ce),le=n("V/uB"),se=n.n(le),ue=n("uaoM"),fe=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function de(e){var t,n,a=e.type,o=e.className,l=e.size,s=e.onEdit,f=e.hideAdd,p=e.centered,b=e.addIcon,m=fe(e,["type","className","size","onEdit","hideAdd","centered","addIcon"]),h=m.prefixCls,v=i.useContext(d.b),g=v.getPrefixCls,y=v.direction,O=g("tabs",h);return"editable-card"===a&&(n={onEdit:function(e,t){var n=t.key,a=t.event;null==s||s("add"===e?a:n,e)},removeIcon:i.createElement(se.a,null),addIcon:b||i.createElement(ie.a,null),showAdd:!0!==f}),Object(ue.a)(!("onPrevClick"in m)&&!("onNextClick"in m),"Tabs","`onPrevClick` and `onNextClick` has been removed. Please use `onTabScroll` instead."),i.createElement(ae,c()({direction:y},m,{moreTransitionName:"slide-up",className:u()(o,(t={},r()(t,"".concat(O,"-").concat(l),l),r()(t,"".concat(O,"-card"),["card","editable-card"].includes(a)),r()(t,"".concat(O,"-editable-card"),"editable-card"===a),r()(t,"".concat(O,"-centered"),p),t)),editable:n,moreIcon:i.createElement(oe.a,null),prefixCls:O}))}de.TabPane=Z;var pe=de,be=n("cDf5"),me=n.n(be),he=n("J4zp"),ve=n.n(he),ge=n("o/2+"),ye=n("CWQg"),Oe=["xxl","xl","lg","md","sm","xs"],je={xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)",xxl:"(min-width: 1600px)"},we=new Map,xe=-1,Ee={},ke={matchHandlers:{},dispatch:function(e){return Ee=e,we.forEach((function(e){return e(Ee)})),we.size>=1},subscribe:function(e){return we.size||this.register(),xe+=1,we.set(xe,e),e(Ee),xe},unsubscribe:function(e){we.delete(e),we.size||this.unregister()},unregister:function(){var e=this;Object.keys(je).forEach((function(t){var n=je[t],a=e.matchHandlers[n];null==a||a.mql.removeListener(null==a?void 0:a.listener)})),we.clear()},register:function(){var e=this;Object.keys(je).forEach((function(t){var n=je[t],a=function(n){var a=n.matches;e.dispatch(c()(c()({},Ee),r()({},t,a)))},o=window.matchMedia(n);o.addListener(a),e.matchHandlers[n]={mql:o,listener:a},a(o)}))}},Pe=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},Ce=(Object(ye.a)("top","middle","bottom","stretch"),Object(ye.a)("start","end","center","space-around","space-between"),i.forwardRef((function(e,t){var n=i.useState({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),a=ve()(n,2),o=a[0],l=a[1],s=i.useRef();s.current=e.gutter,i.useEffect((function(){var e=ke.subscribe((function(e){var t=s.current||0;(!Array.isArray(t)&&"object"===me()(t)||Array.isArray(t)&&("object"===me()(t[0])||"object"===me()(t[1])))&&l(e)}));return function(){ke.unsubscribe(e)}}),[]);var f=function(n){var a,l=n.getPrefixCls,s=n.direction,f=e.prefixCls,d=e.justify,p=e.align,b=e.className,m=e.style,h=e.children,v=Pe(e,["prefixCls","justify","align","className","style","children"]),g=l("row",f),y=function(){var t=[0,0],n=e.gutter,a=void 0===n?0:n;return(Array.isArray(a)?a:[a,0]).forEach((function(e,n){if("object"===me()(e))for(var a=0;a<Oe.length;a++){var r=Oe[a];if(o[r]&&void 0!==e[r]){t[n]=e[r];break}}else t[n]=e||0})),t}(),O=u()(g,(a={},r()(a,"".concat(g,"-").concat(d),d),r()(a,"".concat(g,"-").concat(p),p),r()(a,"".concat(g,"-rtl"),"rtl"===s),a),b),j=c()(c()(c()({},y[0]>0?{marginLeft:y[0]/-2,marginRight:y[0]/-2}:{}),y[1]>0?{marginTop:y[1]/-2,marginBottom:y[1]/2}:{}),m),w=c()({},v);return delete w.gutter,i.createElement(ge.a.Provider,{value:{gutter:y}},i.createElement("div",c()({},w,{className:O,style:j,ref:t}),h))};return i.createElement(d.a,null,f)})));Ce.displayName="Row";var Ne=Ce,Se=n("kPKH"),Re=n("3Nzz"),Te=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};var Me=function(e){var t,n,a,o=i.useContext(d.b),l=o.getPrefixCls,s=o.direction,p=i.useContext(Re.a),m=e.prefixCls,h=e.className,v=e.extra,g=e.headStyle,y=void 0===g?{}:g,O=e.bodyStyle,j=void 0===O?{}:O,w=e.title,x=e.loading,E=e.bordered,k=void 0===E||E,P=e.size,C=e.type,N=e.cover,S=e.actions,R=e.tabList,T=e.children,M=e.activeTabKey,I=e.defaultActiveTabKey,z=e.tabBarExtraContent,D=e.hoverable,A=e.tabProps,B=void 0===A?{}:A,_=Te(e,["prefixCls","className","extra","headStyle","bodyStyle","title","loading","bordered","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps"]),q=l("card",m),L=0===j.padding||"0px"===j.padding?{padding:24}:void 0,K=i.createElement("div",{className:"".concat(q,"-loading-block")}),W=i.createElement("div",{className:"".concat(q,"-loading-content"),style:L},i.createElement(Ne,{gutter:8},i.createElement(Se.a,{span:22},K)),i.createElement(Ne,{gutter:8},i.createElement(Se.a,{span:8},K),i.createElement(Se.a,{span:15},K)),i.createElement(Ne,{gutter:8},i.createElement(Se.a,{span:6},K),i.createElement(Se.a,{span:18},K)),i.createElement(Ne,{gutter:8},i.createElement(Se.a,{span:13},K),i.createElement(Se.a,{span:9},K)),i.createElement(Ne,{gutter:8},i.createElement(Se.a,{span:4},K),i.createElement(Se.a,{span:3},K),i.createElement(Se.a,{span:16},K))),H=void 0!==M,G=c()(c()({},B),(t={},r()(t,H?"activeKey":"defaultActiveKey",H?M:I),r()(t,"tabBarExtraContent",z),t)),V=R&&R.length?i.createElement(pe,c()({size:"large"},G,{className:"".concat(q,"-head-tabs"),onChange:function(t){e.onTabChange&&e.onTabChange(t)}}),R.map((function(e){return i.createElement(pe.TabPane,{tab:e.tab,disabled:e.disabled,key:e.key})}))):null;(w||v||V)&&(a=i.createElement("div",{className:"".concat(q,"-head"),style:y},i.createElement("div",{className:"".concat(q,"-head-wrapper")},w&&i.createElement("div",{className:"".concat(q,"-head-title")},w),v&&i.createElement("div",{className:"".concat(q,"-extra")},v)),V));var Q,U=N?i.createElement("div",{className:"".concat(q,"-cover")},N):null,F=i.createElement("div",{className:"".concat(q,"-body"),style:j},x?W:T),Y=S&&S.length?i.createElement("ul",{className:"".concat(q,"-actions")},function(e){return e.map((function(t,n){return i.createElement("li",{style:{width:"".concat(100/e.length,"%")},key:"action-".concat(n)},i.createElement("span",null,t))}))}(S)):null,J=Object(f.a)(_,["onTabChange"]),X=P||p,Z=u()(q,h,(n={},r()(n,"".concat(q,"-loading"),x),r()(n,"".concat(q,"-bordered"),k),r()(n,"".concat(q,"-hoverable"),D),r()(n,"".concat(q,"-contain-grid"),(i.Children.forEach(e.children,(function(e){e&&e.type&&e.type===b&&(Q=!0)})),Q)),r()(n,"".concat(q,"-contain-tabs"),R&&R.length),r()(n,"".concat(q,"-").concat(X),X),r()(n,"".concat(q,"-type-").concat(C),!!C),r()(n,"".concat(q,"-rtl"),"rtl"===s),n));return i.createElement("div",c()({},J,{className:Z}),a,U,F,Y)};Me.Grid=b,Me.Meta=h;var Ie=Me,ze=n("qKvR"),De=n("oN5p"),Ae=n("vrFN"),Be=n("9Dj+"),_e=n("Oyq8"),qe=Ie.Meta,Le=[["https://apache-superset.slack.com/join/shared_invite/zt-g8lpruog-HeqpgYrwdfrD5OYhlU7hPQ#/","Slack","interact with other Superset users and community members"],["https://github.com/apache/incubator-superset","GitHub","create tickets to report issues, report bugs, and suggest new features"],["https://lists.apache.org/list.html?dev@superset.apache.org","dev@ Mailing List","participate in conversations with committers and contributors"],["https://stackoverflow.com/questions/tagged/superset+apache-superset","Stack Overflow","our growing knowledge base"],["https://www.meetup.com/Global-Apache-Superset-Community-Meetup/","Superset Meetup Group","join our monthly virtual meetups and register for any upcoming events"],["https://github.com/apache/incubator-superset/blob/master/INTHEWILD.md","Organizations","a list of some of the organizations using Superset in production"],["https://github.com/apache-superset/awesome-apache-superset","Contributors Guide","Interested in contributing? Learn how to contribute and best practices"]],Ke={name:"l6ewyn",styles:"text-align:center;background:#fff;padding-bottom:200px;"},We={name:"1kyh2h4",styles:"margin-top:150px;font-size:60px;"},He={name:"otrx9o",styles:"display:flex;flex-wrap:wrap;justify-content:space-around;max-width:1000px;margin:0 auto;overflow:auto;.communityCard{margin:10px 20px;.ant-card-meta-title{text-overflow:clip;white-space:normal;font-size:13px;}}"},Ge={name:"adxw9o",styles:"padding:40px 0;margin-bottom:25px;.resources{display:block;font-size:17px;margin:20px 0;text-align:left;}.title{font-size:45px;}.section{border-top:1px solid #ccc;max-width:800px;margin:0 auto;padding:30px 0;border-bottom:1px solid #ccc;}.ppm{margin-top:100px;margin-bottom:100px;}"},Ve=function(){var e=_e.b.map((function(e){var t=e.name.indexOf(" ");return Object(ze.d)("a",{href:e.github,target:"_blank",rel:"noreferrer",key:t},Object(ze.d)(Ie,{className:"communityCard",hoverable:!0,style:{width:"140px"},size:"small",cover:Object(ze.d)("img",{alt:"example",src:e.image})},Object(ze.d)(De.a,null),Object(ze.d)(qe,{title:e.name})))}));return Object(ze.d)(Be.a,null,Object(ze.d)(Ae.a,{title:"Community"}),Object(ze.d)("div",{css:Ke},Object(ze.d)("h1",{css:We},"Community"),Object(ze.d)("h2",null,"Get involved in our welcoming, fast growing community!"),Object(ze.d)("div",{css:Ge},Object(ze.d)("div",{className:"joinCommunity section"},Object(ze.d)("h2",{className:"title"},"How to get involved:"),Object(ze.d)("span",{className:"resources"},Le.map((function(e){var t=e[0],n=e[1],a=e[2];return Object(ze.d)(l.a.Fragment,null,Object(ze.d)("a",{href:t},n)," ","-",a,Object(ze.d)("br",null))})))),Object(ze.d)("h3",{className:"title ppm"},"Apache Committers"),Object(ze.d)("div",{css:He},e))))};t.default=Ve;void 0!==Ve&&Ve&&Ve===Object(Ve)&&Object.isExtensible(Ve)&&!Ve.hasOwnProperty("__filemeta")&&Object.defineProperty(Ve,"__filemeta",{configurable:!0,value:{name:"Community",filename:"src/pages/community.tsx"}})},jiSn:function(e,t,n){"use strict";var a=n("TqRt"),r=n("284h");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n("q1tI")),c=a(n("KBXm")),i=a(n("KQxl")),l=function(e,t){return o.createElement(i.default,Object.assign({},e,{ref:t,icon:c.default}))};l.displayName="EllipsisOutlined";var s=o.forwardRef(l);t.default=s},kPKH:function(e,t,n){"use strict";var a=n("lSNA"),r=n.n(a),o=n("pVnL"),c=n.n(o),i=n("cDf5"),l=n.n(i),s=n("q1tI"),u=n("TSYQ"),f=n.n(u),d=n("o/2+"),p=n("H84U"),b=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};var m=s.forwardRef((function(e,t){var n=function(n){var a,o=n.getPrefixCls,i=n.direction,u=e.prefixCls,p=e.span,m=e.order,h=e.offset,v=e.push,g=e.pull,y=e.className,O=e.children,j=e.flex,w=e.style,x=b(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),E=o("col",u),k={};["xs","sm","md","lg","xl","xxl"].forEach((function(t){var n,a={},o=e[t];"number"==typeof o?a.span=o:"object"===l()(o)&&(a=o||{}),delete x[t],k=c()(c()({},k),(n={},r()(n,"".concat(E,"-").concat(t,"-").concat(a.span),void 0!==a.span),r()(n,"".concat(E,"-").concat(t,"-order-").concat(a.order),a.order||0===a.order),r()(n,"".concat(E,"-").concat(t,"-offset-").concat(a.offset),a.offset||0===a.offset),r()(n,"".concat(E,"-").concat(t,"-push-").concat(a.push),a.push||0===a.push),r()(n,"".concat(E,"-").concat(t,"-pull-").concat(a.pull),a.pull||0===a.pull),r()(n,"".concat(E,"-rtl"),"rtl"===i),n))}));var P=f()(E,(a={},r()(a,"".concat(E,"-").concat(p),void 0!==p),r()(a,"".concat(E,"-order-").concat(m),m),r()(a,"".concat(E,"-offset-").concat(h),h),r()(a,"".concat(E,"-push-").concat(v),v),r()(a,"".concat(E,"-pull-").concat(g),g),a),y,k);return s.createElement(d.a.Consumer,null,(function(e){var n=e.gutter,a=c()({},w);return n&&(a=c()(c()(c()({},n[0]>0?{paddingLeft:n[0]/2,paddingRight:n[0]/2}:{}),n[1]>0?{paddingTop:n[1]/2,paddingBottom:n[1]/2}:{}),a)),j&&(a.flex=function(e){return"number"==typeof e?"".concat(e," ").concat(e," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 ".concat(e):e}(j)),s.createElement("div",c()({},x,{style:a,className:P,ref:t}),O)}))};return s.createElement(p.a,null,n)}));m.displayName="Col";var h=m;t.a=h},"o/2+":function(e,t,n){"use strict";var a=n("q1tI"),r=Object(a.createContext)({});t.a=r},"rO+z":function(e,t,n){"use strict";n("SchZ"),n("4t1q")},t23M:function(e,t,n){"use strict";var a=n("rePB"),r=n("1OyB"),o=n("vuIU"),c=n("Ji7U"),i=n("md7G"),l=n("foSv"),s=n("q1tI"),u=n("m+aA"),f=n("Zm9Q"),d=n("Kwbf"),p=n("c+Xe"),b=n("bdgK");function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function h(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m(Object(n),!0).forEach((function(t){Object(a.a)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,a=Object(l.a)(e);if(t){var r=Object(l.a)(this).constructor;n=Reflect.construct(a,arguments,r)}else n=a.apply(this,arguments);return Object(i.a)(this,n)}}var g=function(){var e=function(e){Object(c.a)(n,e);var t=v(n);function n(){var e;return Object(r.a)(this,n),(e=t.apply(this,arguments)).resizeObserver=null,e.childNode=null,e.currentElement=null,e.state={width:0,height:0},e.onResize=function(t){var n=e.props.onResize,a=t[0].target,r=a.getBoundingClientRect(),o=r.width,c=r.height,i=a.offsetWidth,l=a.offsetHeight,s=Math.floor(o),u=Math.floor(c);if(e.state.width!==s||e.state.height!==u){var f={width:s,height:u};e.setState(f),n&&n(h(h({},f),{},{offsetWidth:i,offsetHeight:l}))}},e.setChildNode=function(t){e.childNode=t},e}return Object(o.a)(n,[{key:"componentDidMount",value:function(){this.onComponentUpdated()}},{key:"componentDidUpdate",value:function(){this.onComponentUpdated()}},{key:"componentWillUnmount",value:function(){this.destroyObserver()}},{key:"onComponentUpdated",value:function(){if(this.props.disabled)this.destroyObserver();else{var e=Object(u.a)(this.childNode||this);e!==this.currentElement&&(this.destroyObserver(),this.currentElement=e),!this.resizeObserver&&e&&(this.resizeObserver=new b.default(this.onResize),this.resizeObserver.observe(e))}}},{key:"destroyObserver",value:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},{key:"render",value:function(){var e=this.props.children,t=Object(f.a)(e);if(t.length>1)Object(d.a)(!1,"Find more than one child node with `children` in ResizeObserver. Will only observe first one.");else if(0===t.length)return Object(d.a)(!1,"`children` of ResizeObserver is empty. Nothing is in observe."),null;var n=t[0];if(s.isValidElement(n)&&Object(p.b)(n)){var a=n.ref;t[0]=s.cloneElement(n,{ref:Object(p.a)(a,this.setChildNode)})}return 1===t.length?t[0]:t.map((function(e,t){return!s.isValidElement(e)||"key"in e&&null!==e.key?e:s.cloneElement(e,{key:"".concat("rc-observer-key","-").concat(t)})}))}}]),n}(s.Component);return e.displayName="ResizeObserver",e}();t.a=g},tSko:function(e,t,n){"use strict";var a=n("TqRt"),r=n("284h");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(n("q1tI")),c=a(n("SRve")),i=a(n("KQxl")),l=function(e,t){return o.createElement(i.default,Object.assign({},e,{ref:t,icon:c.default}))};l.displayName="PlusOutlined";var s=o.forwardRef(l);t.default=s}}]);
//# sourceMappingURL=component---src-pages-community-tsx-c43b5fcf883d8eab60e6.js.map