{"version":3,"sources":["webpack:///./node_modules/@ant-design/react-slick/lib/track.js","webpack:///./node_modules/antd/es/grid/col.js","webpack:///./node_modules/@ant-design/react-slick/lib/arrows.js","webpack:///./node_modules/@ant-design/react-slick/lib/utils/innerSliderUtils.js","webpack:///./node_modules/antd/es/config-provider/SizeContext.js","webpack:///./node_modules/antd/es/grid/style/css.js","webpack:///./node_modules/gatsby-image/index.js","webpack:///./node_modules/antd/es/_util/responsiveObserve.js","webpack:///./node_modules/string-convert/camel2hyphen.js","webpack:///./node_modules/antd/es/row/index.js","webpack:///./node_modules/@ant-design/react-slick/lib/initial-state.js","webpack:///./node_modules/antd/es/row/style/css.js","webpack:///./node_modules/@ant-design/react-slick/lib/index.js","webpack:///./src/resources/data.js","webpack:///./node_modules/antd/es/carousel/index.js","webpack:///./node_modules/@ant-design/icons-svg/es/asn/FireOutlined.js","webpack:///./node_modules/@ant-design/icons/es/icons/FireOutlined.js","webpack:///./node_modules/@ant-design/icons-svg/es/asn/DatabaseOutlined.js","webpack:///./node_modules/@ant-design/icons/es/icons/DatabaseOutlined.js","webpack:///./node_modules/@ant-design/icons-svg/es/asn/DeploymentUnitOutlined.js","webpack:///./node_modules/@ant-design/icons/es/icons/DeploymentUnitOutlined.js","webpack:///./node_modules/@ant-design/icons-svg/es/asn/DotChartOutlined.js","webpack:///./node_modules/@ant-design/icons/es/icons/DotChartOutlined.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/react-github-btn/index.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./src/components/image.tsx","webpack:///./src/components/DbImage.tsx","webpack:///./src/pages/index.tsx","webpack:///./node_modules/@ant-design/react-slick/lib/slider.js","webpack:///./node_modules/@ant-design/icons/lib/icons/LoadingOutlined.js","webpack:///./node_modules/@ant-design/react-slick/lib/default-props.js","webpack:///./node_modules/@ant-design/react-slick/lib/dots.js","webpack:///./src/images/superset-logo-horiz-apache.svg","webpack:///./node_modules/@ant-design/icons/LoadingOutlined.js","webpack:///./node_modules/@ant-design/react-slick/lib/inner-slider.js","webpack:///./node_modules/antd/es/col/index.js","webpack:///./node_modules/@superset-ui/style/esm/index.js","webpack:///./node_modules/antd/es/grid/RowContext.js","webpack:///./node_modules/json2mq/index.js","webpack:///./node_modules/github-buttons/dist/buttons.esm.js","webpack:///./node_modules/antd/es/grid/row.js","webpack:///./node_modules/antd/es/col/style/css.js","webpack:///./node_modules/@ant-design/icons-svg/lib/asn/LoadingOutlined.js","webpack:///./node_modules/emotion-theming/dist/emotion-theming.browser.esm.js"],"names":["_interopRequireDefault","Object","defineProperty","exports","value","Track","_extends2","_classCallCheck2","_createClass2","_assertThisInitialized2","_inherits2","_createSuper2","_defineProperty2","_objectSpread2","_react","_classnames","_innerSliderUtils","getSlideClasses","spec","slickActive","slickCenter","slickCloned","centerOffset","index","rtl","slideCount","centerMode","Math","floor","slidesToShow","currentSlide","getKey","child","fallbackKey","key","renderSlides","slides","preCloneSlides","postCloneSlides","childrenCount","Children","count","children","startIndex","lazyStartIndex","endIndex","lazyEndIndex","forEach","elem","childOnClickOptions","message","slidesToScroll","lazyLoad","lazyLoadedList","indexOf","createElement","childStyle","style","undefined","variableWidth","width","slideWidth","fade","position","vertical","top","parseInt","slideHeight","left","opacity","transition","speed","cssEase","getSlideStyle","slideClass","props","className","slideClasses","push","cloneElement","tabIndex","outline","onClick","e","focusOnSelect","infinite","preCloneNo","getPreClones","concat","reverse","_React$PureComponent","_super","_this","this","_len","arguments","length","args","Array","_key","call","apply","ref","node","_this$props","mouseEvents","onMouseEnter","onMouseOver","onMouseLeave","handleRef","trackStyle","PureComponent","__rest","s","t","p","prototype","hasOwnProperty","getOwnPropertySymbols","i","propertyIsEnumerable","Col","renderCol","_ref","_classNames","getPrefixCls","direction","customizePrefixCls","prefixCls","span","order","offset","pull","flex","others","sizeClassObj","size","sizeProps","propSize","classes","Consumer","_ref2","gutter","mergedStyle","paddingLeft","paddingRight","paddingTop","paddingBottom","test","parseFlex","displayName","NextArrow","PrevArrow","options","preventDefault","clickHandler","prevClasses","prevHandler","bind","prevArrowProps","display","customProps","prevArrow","type","_React$PureComponent2","_super2","nextClasses","nextHandler","canGoNext","nextArrowProps","nextArrow","canUseDOM","slidesOnLeft","slidesOnRight","siblingDirection","getTotalSlides","getPostClones","getTrackLeft","getTrackAnimateCSS","getTrackCSS","checkSpecKeys","getSlideCount","checkNavigable","getNavigableIndexes","swipeEnd","swipeMove","swipeStart","keyHandler","changeSlide","slideHandler","initializedState","extractObject","getSwipeDirection","getHeight","getWidth","lazySlidesOnRight","lazySlidesOnLeft","getRequiredLazySlides","getOnDemandLazySlides","onDemandSlides","slideIndex","requiredSlides","centerPadding","offsetWidth","offsetHeight","touchObject","xDist","yDist","r","swipeAngle","verticalSwiping","startX","curX","startY","curY","atan2","round","PI","abs","canGo","keys","newObject","listNode","listRef","listWidth","ceil","trackNode","trackRef","trackWidth","centerPaddingAdj","slice","querySelector","listHeight","initialSlide","slidesToLoad","state","autoplaying","autoplay","waitForAnimate","animating","useCSS","finalSlide","animationLeft","finalLeft","animationSlide","nextState","swipeLeft","indexOffset","previousInt","slideOffset","targetSlide","Number","accessibility","target","tagName","match","keyCode","swipe","draggable","dragging","touches","pageX","clientX","pageY","clientY","scrolling","swipeToSlide","edgeFriction","edgeDragged","onEdge","swiped","swiping","swipeEvent","curLeft","swipeLength","sqrt","pow","verticalSwipeLength","positionOffset","dotCount","swipeDirection","touchSwipeLength","touchThreshold","onSwipe","minSwipe","newSlide","currentLeft","max","breakpoint","counter","indexes","min","navigables","prevNavigable","n","swipedSlide","querySelectorAll","from","every","slide","offsetTop","offsetLeft","currentIndex","dataset","keysArray","reduce","console","error","trackHeight","trackChildren","WebkitTransition","useTransform","WebkitTransform","transform","msTransform","height","window","addEventListener","attachEvent","marginTop","marginLeft","unslick","targetLeft","slidesToOffset","targetSlideIndex","trackElem","childNodes","right","document","SizeContext","require","__esModule","default","io","_inheritsLoose2","_objectWithoutPropertiesLoose2","_propTypes","convertProps","convertedProps","resolutions","sizes","critical","fixed","fluid","loading","groupByMedia","matchesMedia","media","isBrowser","matchMedia","matches","getImageCacheKey","srcData","getCurrentSrcData","src","currentData","isArray","some","image","hasArtDirectionSupport","foundMedia","findIndex","noMedia","imageCache","create","inImageCache","cacheKey","hasNativeLazyLoadSupport","HTMLImageElement","hasIOSupport","IntersectionObserver","listeners","WeakMap","generateImageSources","imageVariants","map","_ref3","srcSet","srcSetWebp","Fragment","withMedia","without","variant","generateTracedSVGSources","_ref4","tracedSVG","generateBase64Sources","_ref5","base64","generateNoscriptSource","_ref6","isWebp","listenToIntersections","el","cb","observer","entries","entry","has","get","isIntersecting","intersectionRatio","unobserve","delete","rootMargin","observe","set","noscriptImg","title","alt","crossOrigin","join","Placeholder","forwardRef","generateSources","spreadProps","ariaHidden","baseImage","Img","onLoad","onError","otherProps","objectFit","objectPosition","propTypes","object","func","Image","_React$Component","seenBefore","isCritical","addNoScript","fadeIn","useIOSupport","isVisible","imgLoaded","imgCached","imageRef","createRef","placeholderRef","handleImageLoaded","_proto","componentDidMount","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","setState","currentSrc","render","_convertProps","_convertProps$style","_convertProps$imgStyl","imgStyle","_convertProps$placeho","placeholderStyle","placeholderClassName","backgroundColor","durationFadeIn","Tag","itemProp","shouldReveal","shouldFadeIn","imageStyle","bgColor","delayHideStyle","transitionDelay","imagePlaceholderStyle","placeholderImageProps","overflow","maxWidth","maxHeight","JSON","stringify","aspectRatio","bottom","dangerouslySetInnerHTML","__html","_imageVariants","_image","divStyle","Component","defaultProps","fixedObject","shape","number","isRequired","string","srcWebp","fluidObject","requireFixedOrFluid","originalPropTypes","propName","componentName","_PropTypes$checkPropT","Error","checkPropTypes","oneOfType","arrayOf","bool","oneOf","_default","responsiveArray","responsiveMap","xs","sm","md","lg","xl","xxl","subscribers","Map","subUid","screens","responsiveObserve","matchHandlers","dispatch","pointMap","subscribe","register","unsubscribe","token","unregister","screen","matchMediaQuery","handler","mql","removeListener","listener","clear","addListener","module","str","replace","toLowerCase","currentDirection","initialized","pmc","name","github","Databases","href","imgName","Carousel","saveSlick","slick","onWindowResized","innerSlider","autoPlay","renderCarousel","_a","effect","dotPosition","getDotPosition","enableDots","dots","dsClass","dotsClass","leading","prevProps","goTo","removeEventListener","cancel","_this$props$dotPositi","slickNext","slickPrev","dontAnimate","slickGoTo","arrows","AntdIcon","assign","icon","_defineProperty","obj","enumerable","configurable","writable","_defineProperties","descriptor","_setPrototypeOf","o","setPrototypeOf","__proto__","_typeof","Symbol","iterator","constructor","_possibleConstructorReturn","self","ReferenceError","_getPrototypeOf","getPrototypeOf","ownKeys","enumerableOnly","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","source","getOwnPropertyDescriptors","defineProperties","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","_isNativeReflectConstruct","result","Super","NewTarget","_PureComponent","subClass","superClass","TypeError","_inherits","GitHubButton","Constructor","protoProps","staticProps","instance","_classCallCheck","$","_","paint","reset","appendChild","then","parentNode","replaceChild","lastChild","imageName","data","useStaticQuery","childImageSharp","DbImage","allImages","edges","originalName","colors","supersetTheme","mainPageStyle","css","alert","base","warning","info","success","secondary","titleContainer","mq","secondaryHeading","featureSectionStyle","grayscale","dark2","integrationSection","linkCarousel","primary","Feature","descr","theme","config","useConfig","slider","useRef","useState","setSlideIndex","logo","data-size","data-show-count","aria-label","to","role","afterChange","rel","_innerSlider","_json2mq","_defaultProps","Slider","pause","_responsiveMediaHandlers","query","responsive","breakpoints","breakpt","sort","x","y","bQuery","minWidth","settings","newProps","_this3","resp","toArray","trim","rows","slidesPerRow","warn","newChildren","currentWidth","j","row","k","InnerSlider","innerSliderRefHandler","_interopRequireWildcard","React","_LoadingOutlined","_AntdIcon","LoadingOutlined","adaptiveHeight","appendDots","autoplaySpeed","beforeChange","customPaging","easing","onInit","onLazyLoadError","onReInit","pauseOnDotsHover","pauseOnFocus","pauseOnHover","touchMove","Dots","split","leftBound","rightBound","dotOptions","_objectWithoutProperties2","_typeof2","_initialState","_debounce","_track","_dots","_arrows","_resizeObserverPolyfill","list","track","ssrInit","prevState","onLazyLoad","updateState","adaptHeight","lazyLoadTimer","setInterval","progressiveLazyLoad","ro","callbackTimers","setTimeout","onfocus","onSlideFocus","onblur","onSlideBlur","animationEndCallback","clearTimeout","clearInterval","timer","detachEvent","autoplayTimer","disconnect","nextProps","setTrackStyle","_i","_Object$keys","checkImagesLoad","debouncedResize","resizeWindow","isTrackMounted","Boolean","callback","updatedState","_trackWidth","_trackLeft","childrenWidths","preClones","postClones","_i2","_i3","_trackStyle","trackLeft","images","imagesCount","loadedCount","onclick","prevClickHandler","focus","onload","onerror","_index","_this$props2","asNavFor","_slideHandler","firstBatch","clickable","stopPropagation","dir","ontouchmove","event","returnValue","disableBodyScroll","triggerSlideHandler","enableBodyScroll","isNaN","nextIndex","playType","play","pauseType","trackProps","onTrackOver","onTrackLeave","selectHandler","dotProps","onDotsLeave","onDotsOver","arrowProps","verticalHeightStyle","centerPaddingStyle","padding","listStyle","listProps","onMouseDown","onMouseMove","onMouseUp","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onKeyDown","innerSliderProps","listRefHandler","trackRefHandler","styled","withTheme","ThemeProvider","useTheme","_styled","_emotionTheming","borderRadius","dark1","light1","light2","light3","light4","light5","dark3","light","mediumLight","mediumHeavy","heavy","typography","families","sansSerif","serif","monospace","weights","normal","bold","xxs","m","l","zIndex","aboveDashboardCharts","dropdown","transitionTiming","gridUnit","RowContext","camel2hyphen","obj2mq","features","feature","isDimension","q","HTMLElement","XMLHttpRequest","createElementInDocument","tag","prop","val","setAttribute","len","createTextNode","domain","useXHR","useShadowDOM","attachShadow","onEvent","eventName","offEvent","widgetColorSchemes","dark","getColorSchemeMediaQuery","systemColorScheme","widgetColorScheme","getColorScheme","declarations","colorSchemes","sep","eq","decodeURIComponent","params","parse","octicon","defaultHeight","heights","svg","path","queues","fetch","url","queue","onceToken","dispatchOnce","shift","xhr","responseText","status","open","send","contentWindow","json","meta","script","async","onloadend","readyState","regex","onceReadyStateChange","getElementsByTagName","root","ownerDocument","cssText","styleSheet","isLarge","btn","innerHTML","widget","hostname","substring","removeAttribute","pathname","property","api","html_url","devicePixelRatio","ceilPixel","px","render$1","getAttribute","anchor","attribute","textContent","innerText","parseOptions","host","mode","iframe","allowtransparency","frameBorder","border","body","removeChild","getBoundingClientRect","boundingClientRect","onceEvent","iframeURL","encodeURIComponent","Row","_React$useState","_React$useState2","setScreens","gutterRef","currentGutter","renderRow","justify","align","results","_props$gutter","g","getGutter","rowStyle","marginRight","marginBottom","Provider","getTheme","outerTheme","createCacheWithTheme","WithTheme","useContext"],"mappings":"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","file":"component---src-pages-index-tsx-a9762b43f878d172a989.js","sourcesContent":["\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Track = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _createSuper2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createSuper\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _innerSliderUtils = require(\"./utils/innerSliderUtils\"); // given specifications/props for a slide, fetch all the classes that need to be applied to the slide\n\n\nvar getSlideClasses = function getSlideClasses(spec) {\n  var slickActive, slickCenter, slickCloned;\n  var centerOffset, index;\n\n  if (spec.rtl) {\n    index = spec.slideCount - 1 - spec.index;\n  } else {\n    index = spec.index;\n  }\n\n  slickCloned = index < 0 || index >= spec.slideCount;\n\n  if (spec.centerMode) {\n    centerOffset = Math.floor(spec.slidesToShow / 2);\n    slickCenter = (index - spec.currentSlide) % spec.slideCount === 0;\n\n    if (index > spec.currentSlide - centerOffset - 1 && index <= spec.currentSlide + centerOffset) {\n      slickActive = true;\n    }\n  } else {\n    slickActive = spec.currentSlide <= index && index < spec.currentSlide + spec.slidesToShow;\n  }\n\n  var slickCurrent = index === spec.currentSlide;\n  return {\n    \"slick-slide\": true,\n    \"slick-active\": slickActive,\n    \"slick-center\": slickCenter,\n    \"slick-cloned\": slickCloned,\n    \"slick-current\": slickCurrent // dubious in case of RTL\n\n  };\n};\n\nvar getSlideStyle = function getSlideStyle(spec) {\n  var style = {};\n\n  if (spec.variableWidth === undefined || spec.variableWidth === false) {\n    style.width = spec.slideWidth;\n  }\n\n  if (spec.fade) {\n    style.position = \"relative\";\n\n    if (spec.vertical) {\n      style.top = -spec.index * parseInt(spec.slideHeight);\n    } else {\n      style.left = -spec.index * parseInt(spec.slideWidth);\n    }\n\n    style.opacity = spec.currentSlide === spec.index ? 1 : 0;\n    style.transition = \"opacity \" + spec.speed + \"ms \" + spec.cssEase + \", \" + \"visibility \" + spec.speed + \"ms \" + spec.cssEase;\n  }\n\n  return style;\n};\n\nvar getKey = function getKey(child, fallbackKey) {\n  return child.key + \"-\" + fallbackKey;\n};\n\nvar renderSlides = function renderSlides(spec) {\n  var key;\n  var slides = [];\n  var preCloneSlides = [];\n  var postCloneSlides = [];\n\n  var childrenCount = _react[\"default\"].Children.count(spec.children);\n\n  var startIndex = (0, _innerSliderUtils.lazyStartIndex)(spec);\n  var endIndex = (0, _innerSliderUtils.lazyEndIndex)(spec);\n\n  _react[\"default\"].Children.forEach(spec.children, function (elem, index) {\n    var child;\n    var childOnClickOptions = {\n      message: \"children\",\n      index: index,\n      slidesToScroll: spec.slidesToScroll,\n      currentSlide: spec.currentSlide\n    }; // in case of lazyLoad, whether or not we want to fetch the slide\n\n    if (!spec.lazyLoad || spec.lazyLoad && spec.lazyLoadedList.indexOf(index) >= 0) {\n      child = elem;\n    } else {\n      child = /*#__PURE__*/_react[\"default\"].createElement(\"div\", null);\n    }\n\n    var childStyle = getSlideStyle((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      index: index\n    }));\n    var slideClass = child.props.className || \"\";\n    var slideClasses = getSlideClasses((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      index: index\n    })); // push a cloned element of the desired slide\n\n    slides.push( /*#__PURE__*/_react[\"default\"].cloneElement(child, {\n      key: \"original\" + getKey(child, index),\n      \"data-index\": index,\n      className: (0, _classnames[\"default\"])(slideClasses, slideClass),\n      tabIndex: \"-1\",\n      \"aria-hidden\": !slideClasses[\"slick-active\"],\n      style: (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({\n        outline: \"none\"\n      }, child.props.style || {}), childStyle),\n      onClick: function onClick(e) {\n        child.props && child.props.onClick && child.props.onClick(e);\n\n        if (spec.focusOnSelect) {\n          spec.focusOnSelect(childOnClickOptions);\n        }\n      }\n    })); // if slide needs to be precloned or postcloned\n\n    if (spec.infinite && spec.fade === false) {\n      var preCloneNo = childrenCount - index;\n\n      if (preCloneNo <= (0, _innerSliderUtils.getPreClones)(spec) && childrenCount !== spec.slidesToShow) {\n        key = -preCloneNo;\n\n        if (key >= startIndex) {\n          child = elem;\n        }\n\n        slideClasses = getSlideClasses((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n          index: key\n        }));\n        preCloneSlides.push( /*#__PURE__*/_react[\"default\"].cloneElement(child, {\n          key: \"precloned\" + getKey(child, key),\n          \"data-index\": key,\n          tabIndex: \"-1\",\n          className: (0, _classnames[\"default\"])(slideClasses, slideClass),\n          \"aria-hidden\": !slideClasses[\"slick-active\"],\n          style: (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, child.props.style || {}), childStyle),\n          onClick: function onClick(e) {\n            child.props && child.props.onClick && child.props.onClick(e);\n\n            if (spec.focusOnSelect) {\n              spec.focusOnSelect(childOnClickOptions);\n            }\n          }\n        }));\n      }\n\n      if (childrenCount !== spec.slidesToShow) {\n        key = childrenCount + index;\n\n        if (key < endIndex) {\n          child = elem;\n        }\n\n        slideClasses = getSlideClasses((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n          index: key\n        }));\n        postCloneSlides.push( /*#__PURE__*/_react[\"default\"].cloneElement(child, {\n          key: \"postcloned\" + getKey(child, key),\n          \"data-index\": key,\n          tabIndex: \"-1\",\n          className: (0, _classnames[\"default\"])(slideClasses, slideClass),\n          \"aria-hidden\": !slideClasses[\"slick-active\"],\n          style: (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, child.props.style || {}), childStyle),\n          onClick: function onClick(e) {\n            child.props && child.props.onClick && child.props.onClick(e);\n\n            if (spec.focusOnSelect) {\n              spec.focusOnSelect(childOnClickOptions);\n            }\n          }\n        }));\n      }\n    }\n  });\n\n  if (spec.rtl) {\n    return preCloneSlides.concat(slides, postCloneSlides).reverse();\n  } else {\n    return preCloneSlides.concat(slides, postCloneSlides);\n  }\n};\n\nvar Track = /*#__PURE__*/function (_React$PureComponent) {\n  (0, _inherits2[\"default\"])(Track, _React$PureComponent);\n\n  var _super = (0, _createSuper2[\"default\"])(Track);\n\n  function Track() {\n    var _this;\n\n    (0, _classCallCheck2[\"default\"])(this, Track);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"node\", null);\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"handleRef\", function (ref) {\n      _this.node = ref;\n    });\n    return _this;\n  }\n\n  (0, _createClass2[\"default\"])(Track, [{\n    key: \"render\",\n    value: function render() {\n      var slides = renderSlides(this.props);\n      var _this$props = this.props,\n          onMouseEnter = _this$props.onMouseEnter,\n          onMouseOver = _this$props.onMouseOver,\n          onMouseLeave = _this$props.onMouseLeave;\n      var mouseEvents = {\n        onMouseEnter: onMouseEnter,\n        onMouseOver: onMouseOver,\n        onMouseLeave: onMouseLeave\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n        ref: this.handleRef,\n        className: \"slick-track\",\n        style: this.props.trackStyle\n      }, mouseEvents), slides);\n    }\n  }]);\n  return Track;\n}(_react[\"default\"].PureComponent);\n\nexports.Track = Track;","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;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NextArrow = exports.PrevArrow = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _createSuper2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createSuper\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _innerSliderUtils = require(\"./utils/innerSliderUtils\");\n\nvar PrevArrow = /*#__PURE__*/function (_React$PureComponent) {\n  (0, _inherits2[\"default\"])(PrevArrow, _React$PureComponent);\n\n  var _super = (0, _createSuper2[\"default\"])(PrevArrow);\n\n  function PrevArrow() {\n    (0, _classCallCheck2[\"default\"])(this, PrevArrow);\n    return _super.apply(this, arguments);\n  }\n\n  (0, _createClass2[\"default\"])(PrevArrow, [{\n    key: \"clickHandler\",\n    value: function clickHandler(options, e) {\n      if (e) {\n        e.preventDefault();\n      }\n\n      this.props.clickHandler(options, e);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var prevClasses = {\n        \"slick-arrow\": true,\n        \"slick-prev\": true\n      };\n      var prevHandler = this.clickHandler.bind(this, {\n        message: \"previous\"\n      });\n\n      if (!this.props.infinite && (this.props.currentSlide === 0 || this.props.slideCount <= this.props.slidesToShow)) {\n        prevClasses[\"slick-disabled\"] = true;\n        prevHandler = null;\n      }\n\n      var prevArrowProps = {\n        key: \"0\",\n        \"data-role\": \"none\",\n        className: (0, _classnames[\"default\"])(prevClasses),\n        style: {\n          display: \"block\"\n        },\n        onClick: prevHandler\n      };\n      var customProps = {\n        currentSlide: this.props.currentSlide,\n        slideCount: this.props.slideCount\n      };\n      var prevArrow;\n\n      if (this.props.prevArrow) {\n        prevArrow = /*#__PURE__*/_react[\"default\"].cloneElement(this.props.prevArrow, (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, prevArrowProps), customProps));\n      } else {\n        prevArrow = /*#__PURE__*/_react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({\n          key: \"0\",\n          type: \"button\"\n        }, prevArrowProps), \" \", \"Previous\");\n      }\n\n      return prevArrow;\n    }\n  }]);\n  return PrevArrow;\n}(_react[\"default\"].PureComponent);\n\nexports.PrevArrow = PrevArrow;\n\nvar NextArrow = /*#__PURE__*/function (_React$PureComponent2) {\n  (0, _inherits2[\"default\"])(NextArrow, _React$PureComponent2);\n\n  var _super2 = (0, _createSuper2[\"default\"])(NextArrow);\n\n  function NextArrow() {\n    (0, _classCallCheck2[\"default\"])(this, NextArrow);\n    return _super2.apply(this, arguments);\n  }\n\n  (0, _createClass2[\"default\"])(NextArrow, [{\n    key: \"clickHandler\",\n    value: function clickHandler(options, e) {\n      if (e) {\n        e.preventDefault();\n      }\n\n      this.props.clickHandler(options, e);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var nextClasses = {\n        \"slick-arrow\": true,\n        \"slick-next\": true\n      };\n      var nextHandler = this.clickHandler.bind(this, {\n        message: \"next\"\n      });\n\n      if (!(0, _innerSliderUtils.canGoNext)(this.props)) {\n        nextClasses[\"slick-disabled\"] = true;\n        nextHandler = null;\n      }\n\n      var nextArrowProps = {\n        key: \"1\",\n        \"data-role\": \"none\",\n        className: (0, _classnames[\"default\"])(nextClasses),\n        style: {\n          display: \"block\"\n        },\n        onClick: nextHandler\n      };\n      var customProps = {\n        currentSlide: this.props.currentSlide,\n        slideCount: this.props.slideCount\n      };\n      var nextArrow;\n\n      if (this.props.nextArrow) {\n        nextArrow = /*#__PURE__*/_react[\"default\"].cloneElement(this.props.nextArrow, (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, nextArrowProps), customProps));\n      } else {\n        nextArrow = /*#__PURE__*/_react[\"default\"].createElement(\"button\", (0, _extends2[\"default\"])({\n          key: \"1\",\n          type: \"button\"\n        }, nextArrowProps), \" \", \"Next\");\n      }\n\n      return nextArrow;\n    }\n  }]);\n  return NextArrow;\n}(_react[\"default\"].PureComponent);\n\nexports.NextArrow = NextArrow;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.canUseDOM = exports.slidesOnLeft = exports.slidesOnRight = exports.siblingDirection = exports.getTotalSlides = exports.getPostClones = exports.getPreClones = exports.getTrackLeft = exports.getTrackAnimateCSS = exports.getTrackCSS = exports.checkSpecKeys = exports.getSlideCount = exports.checkNavigable = exports.getNavigableIndexes = exports.swipeEnd = exports.swipeMove = exports.swipeStart = exports.keyHandler = exports.changeSlide = exports.slideHandler = exports.initializedState = exports.extractObject = exports.canGoNext = exports.getSwipeDirection = exports.getHeight = exports.getWidth = exports.lazySlidesOnRight = exports.lazySlidesOnLeft = exports.lazyEndIndex = exports.lazyStartIndex = exports.getRequiredLazySlides = exports.getOnDemandLazySlides = void 0;\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar getOnDemandLazySlides = function getOnDemandLazySlides(spec) {\n  var onDemandSlides = [];\n  var startIndex = lazyStartIndex(spec);\n  var endIndex = lazyEndIndex(spec);\n\n  for (var slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {\n    if (spec.lazyLoadedList.indexOf(slideIndex) < 0) {\n      onDemandSlides.push(slideIndex);\n    }\n  }\n\n  return onDemandSlides;\n}; // return list of slides that need to be present\n\n\nexports.getOnDemandLazySlides = getOnDemandLazySlides;\n\nvar getRequiredLazySlides = function getRequiredLazySlides(spec) {\n  var requiredSlides = [];\n  var startIndex = lazyStartIndex(spec);\n  var endIndex = lazyEndIndex(spec);\n\n  for (var slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {\n    requiredSlides.push(slideIndex);\n  }\n\n  return requiredSlides;\n}; // startIndex that needs to be present\n\n\nexports.getRequiredLazySlides = getRequiredLazySlides;\n\nvar lazyStartIndex = function lazyStartIndex(spec) {\n  return spec.currentSlide - lazySlidesOnLeft(spec);\n};\n\nexports.lazyStartIndex = lazyStartIndex;\n\nvar lazyEndIndex = function lazyEndIndex(spec) {\n  return spec.currentSlide + lazySlidesOnRight(spec);\n};\n\nexports.lazyEndIndex = lazyEndIndex;\n\nvar lazySlidesOnLeft = function lazySlidesOnLeft(spec) {\n  return spec.centerMode ? Math.floor(spec.slidesToShow / 2) + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : 0;\n};\n\nexports.lazySlidesOnLeft = lazySlidesOnLeft;\n\nvar lazySlidesOnRight = function lazySlidesOnRight(spec) {\n  return spec.centerMode ? Math.floor((spec.slidesToShow - 1) / 2) + 1 + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : spec.slidesToShow;\n}; // get width of an element\n\n\nexports.lazySlidesOnRight = lazySlidesOnRight;\n\nvar getWidth = function getWidth(elem) {\n  return elem && elem.offsetWidth || 0;\n};\n\nexports.getWidth = getWidth;\n\nvar getHeight = function getHeight(elem) {\n  return elem && elem.offsetHeight || 0;\n};\n\nexports.getHeight = getHeight;\n\nvar getSwipeDirection = function getSwipeDirection(touchObject) {\n  var verticalSwiping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var xDist, yDist, r, swipeAngle;\n  xDist = touchObject.startX - touchObject.curX;\n  yDist = touchObject.startY - touchObject.curY;\n  r = Math.atan2(yDist, xDist);\n  swipeAngle = Math.round(r * 180 / Math.PI);\n\n  if (swipeAngle < 0) {\n    swipeAngle = 360 - Math.abs(swipeAngle);\n  }\n\n  if (swipeAngle <= 45 && swipeAngle >= 0 || swipeAngle <= 360 && swipeAngle >= 315) {\n    return \"left\";\n  }\n\n  if (swipeAngle >= 135 && swipeAngle <= 225) {\n    return \"right\";\n  }\n\n  if (verticalSwiping === true) {\n    if (swipeAngle >= 35 && swipeAngle <= 135) {\n      return \"up\";\n    } else {\n      return \"down\";\n    }\n  }\n\n  return \"vertical\";\n}; // whether or not we can go next\n\n\nexports.getSwipeDirection = getSwipeDirection;\n\nvar canGoNext = function canGoNext(spec) {\n  var canGo = true;\n\n  if (!spec.infinite) {\n    if (spec.centerMode && spec.currentSlide >= spec.slideCount - 1) {\n      canGo = false;\n    } else if (spec.slideCount <= spec.slidesToShow || spec.currentSlide >= spec.slideCount - spec.slidesToShow) {\n      canGo = false;\n    }\n  }\n\n  return canGo;\n}; // given an object and a list of keys, return new object with given keys\n\n\nexports.canGoNext = canGoNext;\n\nvar extractObject = function extractObject(spec, keys) {\n  var newObject = {};\n  keys.forEach(function (key) {\n    return newObject[key] = spec[key];\n  });\n  return newObject;\n}; // get initialized state\n\n\nexports.extractObject = extractObject;\n\nvar initializedState = function initializedState(spec) {\n  // spec also contains listRef, trackRef\n  var slideCount = _react[\"default\"].Children.count(spec.children);\n\n  var listNode = spec.listRef;\n  var listWidth = Math.ceil(getWidth(listNode));\n  var trackNode = spec.trackRef && spec.trackRef.node;\n  var trackWidth = Math.ceil(getWidth(trackNode));\n  var slideWidth;\n\n  if (!spec.vertical) {\n    var centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2;\n\n    if (typeof spec.centerPadding === \"string\" && spec.centerPadding.slice(-1) === \"%\") {\n      centerPaddingAdj *= listWidth / 100;\n    }\n\n    slideWidth = Math.ceil((listWidth - centerPaddingAdj) / spec.slidesToShow);\n  } else {\n    slideWidth = listWidth;\n  }\n\n  var slideHeight = listNode && getHeight(listNode.querySelector('[data-index=\"0\"]'));\n  var listHeight = slideHeight * spec.slidesToShow;\n  var currentSlide = spec.currentSlide === undefined ? spec.initialSlide : spec.currentSlide;\n\n  if (spec.rtl && spec.currentSlide === undefined) {\n    currentSlide = slideCount - 1 - spec.initialSlide;\n  }\n\n  var lazyLoadedList = spec.lazyLoadedList || [];\n  var slidesToLoad = getOnDemandLazySlides((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n    currentSlide: currentSlide,\n    lazyLoadedList: lazyLoadedList\n  }));\n  lazyLoadedList.concat(slidesToLoad);\n  var state = {\n    slideCount: slideCount,\n    slideWidth: slideWidth,\n    listWidth: listWidth,\n    trackWidth: trackWidth,\n    currentSlide: currentSlide,\n    slideHeight: slideHeight,\n    listHeight: listHeight,\n    lazyLoadedList: lazyLoadedList\n  };\n\n  if (spec.autoplaying === null && spec.autoplay) {\n    state[\"autoplaying\"] = \"playing\";\n  }\n\n  return state;\n};\n\nexports.initializedState = initializedState;\n\nvar slideHandler = function slideHandler(spec) {\n  var waitForAnimate = spec.waitForAnimate,\n      animating = spec.animating,\n      fade = spec.fade,\n      infinite = spec.infinite,\n      index = spec.index,\n      slideCount = spec.slideCount,\n      lazyLoadedList = spec.lazyLoadedList,\n      lazyLoad = spec.lazyLoad,\n      currentSlide = spec.currentSlide,\n      centerMode = spec.centerMode,\n      slidesToScroll = spec.slidesToScroll,\n      slidesToShow = spec.slidesToShow,\n      useCSS = spec.useCSS;\n  if (waitForAnimate && animating) return {};\n  var animationSlide = index,\n      finalSlide,\n      animationLeft,\n      finalLeft;\n  var state = {},\n      nextState = {};\n\n  if (fade) {\n    if (!infinite && (index < 0 || index >= slideCount)) return {};\n\n    if (index < 0) {\n      animationSlide = index + slideCount;\n    } else if (index >= slideCount) {\n      animationSlide = index - slideCount;\n    }\n\n    if (lazyLoad && lazyLoadedList.indexOf(animationSlide) < 0) {\n      lazyLoadedList.push(animationSlide);\n    }\n\n    state = {\n      animating: true,\n      currentSlide: animationSlide,\n      lazyLoadedList: lazyLoadedList\n    };\n    nextState = {\n      animating: false\n    };\n  } else {\n    finalSlide = animationSlide;\n\n    if (animationSlide < 0) {\n      finalSlide = animationSlide + slideCount;\n      if (!infinite) finalSlide = 0;else if (slideCount % slidesToScroll !== 0) finalSlide = slideCount - slideCount % slidesToScroll;\n    } else if (!canGoNext(spec) && animationSlide > currentSlide) {\n      animationSlide = finalSlide = currentSlide;\n    } else if (centerMode && animationSlide >= slideCount) {\n      animationSlide = infinite ? slideCount : slideCount - 1;\n      finalSlide = infinite ? 0 : slideCount - 1;\n    } else if (animationSlide >= slideCount) {\n      finalSlide = animationSlide - slideCount;\n      if (!infinite) finalSlide = slideCount - slidesToShow;else if (slideCount % slidesToScroll !== 0) finalSlide = 0;\n    }\n\n    animationLeft = getTrackLeft((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      slideIndex: animationSlide\n    }));\n    finalLeft = getTrackLeft((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      slideIndex: finalSlide\n    }));\n\n    if (!infinite) {\n      if (animationLeft === finalLeft) animationSlide = finalSlide;\n      animationLeft = finalLeft;\n    }\n\n    lazyLoad && lazyLoadedList.concat(getOnDemandLazySlides((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      currentSlide: animationSlide\n    })));\n\n    if (!useCSS) {\n      state = {\n        currentSlide: finalSlide,\n        trackStyle: getTrackCSS((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n          left: finalLeft\n        })),\n        lazyLoadedList: lazyLoadedList\n      };\n    } else {\n      state = {\n        animating: true,\n        currentSlide: finalSlide,\n        trackStyle: getTrackAnimateCSS((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n          left: animationLeft\n        })),\n        lazyLoadedList: lazyLoadedList\n      };\n      nextState = {\n        animating: false,\n        currentSlide: finalSlide,\n        trackStyle: getTrackCSS((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n          left: finalLeft\n        })),\n        swipeLeft: null\n      };\n    }\n  }\n\n  return {\n    state: state,\n    nextState: nextState\n  };\n};\n\nexports.slideHandler = slideHandler;\n\nvar changeSlide = function changeSlide(spec, options) {\n  var indexOffset, previousInt, slideOffset, unevenOffset, targetSlide;\n  var slidesToScroll = spec.slidesToScroll,\n      slidesToShow = spec.slidesToShow,\n      slideCount = spec.slideCount,\n      currentSlide = spec.currentSlide,\n      lazyLoad = spec.lazyLoad,\n      infinite = spec.infinite;\n  unevenOffset = slideCount % slidesToScroll !== 0;\n  indexOffset = unevenOffset ? 0 : (slideCount - currentSlide) % slidesToScroll;\n\n  if (options.message === \"previous\") {\n    slideOffset = indexOffset === 0 ? slidesToScroll : slidesToShow - indexOffset;\n    targetSlide = currentSlide - slideOffset;\n\n    if (lazyLoad && !infinite) {\n      previousInt = currentSlide - slideOffset;\n      targetSlide = previousInt === -1 ? slideCount - 1 : previousInt;\n    }\n  } else if (options.message === \"next\") {\n    slideOffset = indexOffset === 0 ? slidesToScroll : indexOffset;\n    targetSlide = currentSlide + slideOffset;\n\n    if (lazyLoad && !infinite) {\n      targetSlide = (currentSlide + slidesToScroll) % slideCount + indexOffset;\n    }\n  } else if (options.message === \"dots\") {\n    // Click on dots\n    targetSlide = options.index * options.slidesToScroll;\n\n    if (targetSlide === options.currentSlide) {\n      return null;\n    }\n  } else if (options.message === \"children\") {\n    // Click on the slides\n    targetSlide = options.index;\n\n    if (targetSlide === options.currentSlide) {\n      return null;\n    }\n\n    if (infinite) {\n      var direction = siblingDirection((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n        targetSlide: targetSlide\n      }));\n\n      if (targetSlide > options.currentSlide && direction === \"left\") {\n        targetSlide = targetSlide - slideCount;\n      } else if (targetSlide < options.currentSlide && direction === \"right\") {\n        targetSlide = targetSlide + slideCount;\n      }\n    }\n  } else if (options.message === \"index\") {\n    targetSlide = Number(options.index);\n\n    if (targetSlide === options.currentSlide) {\n      return null;\n    }\n  }\n\n  return targetSlide;\n};\n\nexports.changeSlide = changeSlide;\n\nvar keyHandler = function keyHandler(e, accessibility, rtl) {\n  if (e.target.tagName.match(\"TEXTAREA|INPUT|SELECT\") || !accessibility) return \"\";\n  if (e.keyCode === 37) return rtl ? \"next\" : \"previous\";\n  if (e.keyCode === 39) return rtl ? \"previous\" : \"next\";\n  return \"\";\n};\n\nexports.keyHandler = keyHandler;\n\nvar swipeStart = function swipeStart(e, swipe, draggable) {\n  e.target.tagName === \"IMG\" && e.preventDefault();\n  if (!swipe || !draggable && e.type.indexOf(\"mouse\") !== -1) return \"\";\n  return {\n    dragging: true,\n    touchObject: {\n      startX: e.touches ? e.touches[0].pageX : e.clientX,\n      startY: e.touches ? e.touches[0].pageY : e.clientY,\n      curX: e.touches ? e.touches[0].pageX : e.clientX,\n      curY: e.touches ? e.touches[0].pageY : e.clientY\n    }\n  };\n};\n\nexports.swipeStart = swipeStart;\n\nvar swipeMove = function swipeMove(e, spec) {\n  // spec also contains, trackRef and slideIndex\n  var scrolling = spec.scrolling,\n      animating = spec.animating,\n      vertical = spec.vertical,\n      swipeToSlide = spec.swipeToSlide,\n      verticalSwiping = spec.verticalSwiping,\n      rtl = spec.rtl,\n      currentSlide = spec.currentSlide,\n      edgeFriction = spec.edgeFriction,\n      edgeDragged = spec.edgeDragged,\n      onEdge = spec.onEdge,\n      swiped = spec.swiped,\n      swiping = spec.swiping,\n      slideCount = spec.slideCount,\n      slidesToScroll = spec.slidesToScroll,\n      infinite = spec.infinite,\n      touchObject = spec.touchObject,\n      swipeEvent = spec.swipeEvent,\n      listHeight = spec.listHeight,\n      listWidth = spec.listWidth;\n  if (scrolling) return;\n  if (animating) return e.preventDefault();\n  if (vertical && swipeToSlide && verticalSwiping) e.preventDefault();\n  var swipeLeft,\n      state = {};\n  var curLeft = getTrackLeft(spec);\n  touchObject.curX = e.touches ? e.touches[0].pageX : e.clientX;\n  touchObject.curY = e.touches ? e.touches[0].pageY : e.clientY;\n  touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curX - touchObject.startX, 2)));\n  var verticalSwipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curY - touchObject.startY, 2)));\n\n  if (!verticalSwiping && !swiping && verticalSwipeLength > 10) {\n    return {\n      scrolling: true\n    };\n  }\n\n  if (verticalSwiping) touchObject.swipeLength = verticalSwipeLength;\n  var positionOffset = (!rtl ? 1 : -1) * (touchObject.curX > touchObject.startX ? 1 : -1);\n  if (verticalSwiping) positionOffset = touchObject.curY > touchObject.startY ? 1 : -1;\n  var dotCount = Math.ceil(slideCount / slidesToScroll);\n  var swipeDirection = getSwipeDirection(spec.touchObject, verticalSwiping);\n  var touchSwipeLength = touchObject.swipeLength;\n\n  if (!infinite) {\n    if (currentSlide === 0 && swipeDirection === \"right\" || currentSlide + 1 >= dotCount && swipeDirection === \"left\" || !canGoNext(spec) && swipeDirection === \"left\") {\n      touchSwipeLength = touchObject.swipeLength * edgeFriction;\n\n      if (edgeDragged === false && onEdge) {\n        onEdge(swipeDirection);\n        state[\"edgeDragged\"] = true;\n      }\n    }\n  }\n\n  if (!swiped && swipeEvent) {\n    swipeEvent(swipeDirection);\n    state[\"swiped\"] = true;\n  }\n\n  if (!vertical) {\n    if (!rtl) {\n      swipeLeft = curLeft + touchSwipeLength * positionOffset;\n    } else {\n      swipeLeft = curLeft - touchSwipeLength * positionOffset;\n    }\n  } else {\n    swipeLeft = curLeft + touchSwipeLength * (listHeight / listWidth) * positionOffset;\n  }\n\n  if (verticalSwiping) {\n    swipeLeft = curLeft + touchSwipeLength * positionOffset;\n  }\n\n  state = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, state), {}, {\n    touchObject: touchObject,\n    swipeLeft: swipeLeft,\n    trackStyle: getTrackCSS((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      left: swipeLeft\n    }))\n  });\n\n  if (Math.abs(touchObject.curX - touchObject.startX) < Math.abs(touchObject.curY - touchObject.startY) * 0.8) {\n    return state;\n  }\n\n  if (touchObject.swipeLength > 10) {\n    state[\"swiping\"] = true;\n    e.preventDefault();\n  }\n\n  return state;\n};\n\nexports.swipeMove = swipeMove;\n\nvar swipeEnd = function swipeEnd(e, spec) {\n  var dragging = spec.dragging,\n      swipe = spec.swipe,\n      touchObject = spec.touchObject,\n      listWidth = spec.listWidth,\n      touchThreshold = spec.touchThreshold,\n      verticalSwiping = spec.verticalSwiping,\n      listHeight = spec.listHeight,\n      currentSlide = spec.currentSlide,\n      swipeToSlide = spec.swipeToSlide,\n      scrolling = spec.scrolling,\n      onSwipe = spec.onSwipe;\n\n  if (!dragging) {\n    if (swipe) e.preventDefault();\n    return {};\n  }\n\n  var minSwipe = verticalSwiping ? listHeight / touchThreshold : listWidth / touchThreshold;\n  var swipeDirection = getSwipeDirection(touchObject, verticalSwiping); // reset the state of touch related state variables.\n\n  var state = {\n    dragging: false,\n    edgeDragged: false,\n    scrolling: false,\n    swiping: false,\n    swiped: false,\n    swipeLeft: null,\n    touchObject: {}\n  };\n\n  if (scrolling) {\n    return state;\n  }\n\n  if (!touchObject.swipeLength) {\n    return state;\n  }\n\n  if (touchObject.swipeLength > minSwipe) {\n    e.preventDefault();\n\n    if (onSwipe) {\n      onSwipe(swipeDirection);\n    }\n\n    var slideCount, newSlide;\n\n    switch (swipeDirection) {\n      case \"left\":\n      case \"up\":\n        newSlide = currentSlide + getSlideCount(spec);\n        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;\n        state[\"currentDirection\"] = 0;\n        break;\n\n      case \"right\":\n      case \"down\":\n        newSlide = currentSlide - getSlideCount(spec);\n        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;\n        state[\"currentDirection\"] = 1;\n        break;\n\n      default:\n        slideCount = currentSlide;\n    }\n\n    state[\"triggerSlideHandler\"] = slideCount;\n  } else {\n    // Adjust the track back to it's original position.\n    var currentLeft = getTrackLeft(spec);\n    state[\"trackStyle\"] = getTrackAnimateCSS((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n      left: currentLeft\n    }));\n  }\n\n  return state;\n};\n\nexports.swipeEnd = swipeEnd;\n\nvar getNavigableIndexes = function getNavigableIndexes(spec) {\n  var max = spec.infinite ? spec.slideCount * 2 : spec.slideCount;\n  var breakpoint = spec.infinite ? spec.slidesToShow * -1 : 0;\n  var counter = spec.infinite ? spec.slidesToShow * -1 : 0;\n  var indexes = [];\n\n  while (breakpoint < max) {\n    indexes.push(breakpoint);\n    breakpoint = counter + spec.slidesToScroll;\n    counter += Math.min(spec.slidesToScroll, spec.slidesToShow);\n  }\n\n  return indexes;\n};\n\nexports.getNavigableIndexes = getNavigableIndexes;\n\nvar checkNavigable = function checkNavigable(spec, index) {\n  var navigables = getNavigableIndexes(spec);\n  var prevNavigable = 0;\n\n  if (index > navigables[navigables.length - 1]) {\n    index = navigables[navigables.length - 1];\n  } else {\n    for (var n in navigables) {\n      if (index < navigables[n]) {\n        index = prevNavigable;\n        break;\n      }\n\n      prevNavigable = navigables[n];\n    }\n  }\n\n  return index;\n};\n\nexports.checkNavigable = checkNavigable;\n\nvar getSlideCount = function getSlideCount(spec) {\n  var centerOffset = spec.centerMode ? spec.slideWidth * Math.floor(spec.slidesToShow / 2) : 0;\n\n  if (spec.swipeToSlide) {\n    var swipedSlide;\n    var slickList = spec.listRef;\n    var slides = slickList.querySelectorAll(\".slick-slide\");\n    Array.from(slides).every(function (slide) {\n      if (!spec.vertical) {\n        if (slide.offsetLeft - centerOffset + getWidth(slide) / 2 > spec.swipeLeft * -1) {\n          swipedSlide = slide;\n          return false;\n        }\n      } else {\n        if (slide.offsetTop + getHeight(slide) / 2 > spec.swipeLeft * -1) {\n          swipedSlide = slide;\n          return false;\n        }\n      }\n\n      return true;\n    });\n\n    if (!swipedSlide) {\n      return 0;\n    }\n\n    var currentIndex = spec.rtl === true ? spec.slideCount - spec.currentSlide : spec.currentSlide;\n    var slidesTraversed = Math.abs(swipedSlide.dataset.index - currentIndex) || 1;\n    return slidesTraversed;\n  } else {\n    return spec.slidesToScroll;\n  }\n};\n\nexports.getSlideCount = getSlideCount;\n\nvar checkSpecKeys = function checkSpecKeys(spec, keysArray) {\n  return keysArray.reduce(function (value, key) {\n    return value && spec.hasOwnProperty(key);\n  }, true) ? null : console.error(\"Keys Missing:\", spec);\n};\n\nexports.checkSpecKeys = checkSpecKeys;\n\nvar getTrackCSS = function getTrackCSS(spec) {\n  checkSpecKeys(spec, [\"left\", \"variableWidth\", \"slideCount\", \"slidesToShow\", \"slideWidth\"]);\n  var trackWidth, trackHeight;\n  var trackChildren = spec.slideCount + 2 * spec.slidesToShow;\n\n  if (!spec.vertical) {\n    trackWidth = getTotalSlides(spec) * spec.slideWidth;\n  } else {\n    trackHeight = trackChildren * spec.slideHeight;\n  }\n\n  var style = {\n    opacity: 1,\n    transition: \"\",\n    WebkitTransition: \"\"\n  };\n\n  if (spec.useTransform) {\n    var WebkitTransform = !spec.vertical ? \"translate3d(\" + spec.left + \"px, 0px, 0px)\" : \"translate3d(0px, \" + spec.left + \"px, 0px)\";\n    var transform = !spec.vertical ? \"translate3d(\" + spec.left + \"px, 0px, 0px)\" : \"translate3d(0px, \" + spec.left + \"px, 0px)\";\n    var msTransform = !spec.vertical ? \"translateX(\" + spec.left + \"px)\" : \"translateY(\" + spec.left + \"px)\";\n    style = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, style), {}, {\n      WebkitTransform: WebkitTransform,\n      transform: transform,\n      msTransform: msTransform\n    });\n  } else {\n    if (spec.vertical) {\n      style[\"top\"] = spec.left;\n    } else {\n      style[\"left\"] = spec.left;\n    }\n  }\n\n  if (spec.fade) style = {\n    opacity: 1\n  };\n  if (trackWidth) style.width = trackWidth;\n  if (trackHeight) style.height = trackHeight; // Fallback for IE8\n\n  if (window && !window.addEventListener && window.attachEvent) {\n    if (!spec.vertical) {\n      style.marginLeft = spec.left + \"px\";\n    } else {\n      style.marginTop = spec.left + \"px\";\n    }\n  }\n\n  return style;\n};\n\nexports.getTrackCSS = getTrackCSS;\n\nvar getTrackAnimateCSS = function getTrackAnimateCSS(spec) {\n  checkSpecKeys(spec, [\"left\", \"variableWidth\", \"slideCount\", \"slidesToShow\", \"slideWidth\", \"speed\", \"cssEase\"]);\n  var style = getTrackCSS(spec); // useCSS is true by default so it can be undefined\n\n  if (spec.useTransform) {\n    style.WebkitTransition = \"-webkit-transform \" + spec.speed + \"ms \" + spec.cssEase;\n    style.transition = \"transform \" + spec.speed + \"ms \" + spec.cssEase;\n  } else {\n    if (spec.vertical) {\n      style.transition = \"top \" + spec.speed + \"ms \" + spec.cssEase;\n    } else {\n      style.transition = \"left \" + spec.speed + \"ms \" + spec.cssEase;\n    }\n  }\n\n  return style;\n};\n\nexports.getTrackAnimateCSS = getTrackAnimateCSS;\n\nvar getTrackLeft = function getTrackLeft(spec) {\n  if (spec.unslick) {\n    return 0;\n  }\n\n  checkSpecKeys(spec, [\"slideIndex\", \"trackRef\", \"infinite\", \"centerMode\", \"slideCount\", \"slidesToShow\", \"slidesToScroll\", \"slideWidth\", \"listWidth\", \"variableWidth\", \"slideHeight\"]);\n  var slideIndex = spec.slideIndex,\n      trackRef = spec.trackRef,\n      infinite = spec.infinite,\n      centerMode = spec.centerMode,\n      slideCount = spec.slideCount,\n      slidesToShow = spec.slidesToShow,\n      slidesToScroll = spec.slidesToScroll,\n      slideWidth = spec.slideWidth,\n      listWidth = spec.listWidth,\n      variableWidth = spec.variableWidth,\n      slideHeight = spec.slideHeight,\n      fade = spec.fade,\n      vertical = spec.vertical;\n  var slideOffset = 0;\n  var targetLeft;\n  var targetSlide;\n  var verticalOffset = 0;\n\n  if (fade || spec.slideCount === 1) {\n    return 0;\n  }\n\n  var slidesToOffset = 0;\n\n  if (infinite) {\n    slidesToOffset = -getPreClones(spec); // bring active slide to the beginning of visual area\n    // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children\n\n    if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {\n      slidesToOffset = -(slideIndex > slideCount ? slidesToShow - (slideIndex - slideCount) : slideCount % slidesToScroll);\n    } // shift current slide to center of the frame\n\n\n    if (centerMode) {\n      slidesToOffset += parseInt(slidesToShow / 2);\n    }\n  } else {\n    if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {\n      slidesToOffset = slidesToShow - slideCount % slidesToScroll;\n    }\n\n    if (centerMode) {\n      slidesToOffset = parseInt(slidesToShow / 2);\n    }\n  }\n\n  slideOffset = slidesToOffset * slideWidth;\n  verticalOffset = slidesToOffset * slideHeight;\n\n  if (!vertical) {\n    targetLeft = slideIndex * slideWidth * -1 + slideOffset;\n  } else {\n    targetLeft = slideIndex * slideHeight * -1 + verticalOffset;\n  }\n\n  if (variableWidth === true) {\n    var targetSlideIndex;\n    var trackElem = trackRef && trackRef.node;\n    targetSlideIndex = slideIndex + getPreClones(spec);\n    targetSlide = trackElem && trackElem.childNodes[targetSlideIndex];\n    targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;\n\n    if (centerMode === true) {\n      targetSlideIndex = infinite ? slideIndex + getPreClones(spec) : slideIndex;\n      targetSlide = trackElem && trackElem.children[targetSlideIndex];\n      targetLeft = 0;\n\n      for (var slide = 0; slide < targetSlideIndex; slide++) {\n        targetLeft -= trackElem && trackElem.children[slide] && trackElem.children[slide].offsetWidth;\n      }\n\n      targetLeft -= parseInt(spec.centerPadding);\n      targetLeft += targetSlide && (listWidth - targetSlide.offsetWidth) / 2;\n    }\n  }\n\n  return targetLeft;\n};\n\nexports.getTrackLeft = getTrackLeft;\n\nvar getPreClones = function getPreClones(spec) {\n  if (spec.unslick || !spec.infinite) {\n    return 0;\n  }\n\n  if (spec.variableWidth) {\n    return spec.slideCount;\n  }\n\n  return spec.slidesToShow + (spec.centerMode ? 1 : 0);\n};\n\nexports.getPreClones = getPreClones;\n\nvar getPostClones = function getPostClones(spec) {\n  if (spec.unslick || !spec.infinite) {\n    return 0;\n  }\n\n  return spec.slideCount;\n};\n\nexports.getPostClones = getPostClones;\n\nvar getTotalSlides = function getTotalSlides(spec) {\n  return spec.slideCount === 1 ? 1 : getPreClones(spec) + spec.slideCount + getPostClones(spec);\n};\n\nexports.getTotalSlides = getTotalSlides;\n\nvar siblingDirection = function siblingDirection(spec) {\n  if (spec.targetSlide > spec.currentSlide) {\n    if (spec.targetSlide > spec.currentSlide + slidesOnRight(spec)) {\n      return \"left\";\n    }\n\n    return \"right\";\n  } else {\n    if (spec.targetSlide < spec.currentSlide - slidesOnLeft(spec)) {\n      return \"right\";\n    }\n\n    return \"left\";\n  }\n};\n\nexports.siblingDirection = siblingDirection;\n\nvar slidesOnRight = function slidesOnRight(_ref) {\n  var slidesToShow = _ref.slidesToShow,\n      centerMode = _ref.centerMode,\n      rtl = _ref.rtl,\n      centerPadding = _ref.centerPadding; // returns no of slides on the right of active slide\n\n  if (centerMode) {\n    var right = (slidesToShow - 1) / 2 + 1;\n    if (parseInt(centerPadding) > 0) right += 1;\n    if (rtl && slidesToShow % 2 === 0) right += 1;\n    return right;\n  }\n\n  if (rtl) {\n    return 0;\n  }\n\n  return slidesToShow - 1;\n};\n\nexports.slidesOnRight = slidesOnRight;\n\nvar slidesOnLeft = function slidesOnLeft(_ref2) {\n  var slidesToShow = _ref2.slidesToShow,\n      centerMode = _ref2.centerMode,\n      rtl = _ref2.rtl,\n      centerPadding = _ref2.centerPadding; // returns no of slides on the left of active slide\n\n  if (centerMode) {\n    var left = (slidesToShow - 1) / 2 + 1;\n    if (parseInt(centerPadding) > 0) left += 1;\n    if (!rtl && slidesToShow % 2 === 0) left += 1;\n    return left;\n  }\n\n  if (rtl) {\n    return slidesToShow - 1;\n  }\n\n  return 0;\n};\n\nexports.slidesOnLeft = slidesOnLeft;\n\nvar canUseDOM = function canUseDOM() {\n  return !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n};\n\nexports.canUseDOM = canUseDOM;","import * as React from 'react';\nvar SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport var SizeContextProvider = function SizeContextProvider(_ref) {\n  var children = _ref.children,\n      size = _ref.size;\n  return /*#__PURE__*/React.createElement(SizeContext.Consumer, null, function (originSize) {\n    return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n      value: size || originSize\n    }, children);\n  });\n};\nexport default SizeContext;","import '../../style/index.css';\nimport './index.css';","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar logDeprecationNotice = function logDeprecationNotice(prop, replacement) {\n  if (process.env.NODE_ENV === \"production\") {\n    return;\n  }\n\n  console.log(\"\\n    The \\\"\" + prop + \"\\\" prop is now deprecated and will be removed in the next major version\\n    of \\\"gatsby-image\\\".\\n    \");\n\n  if (replacement) {\n    console.log(\"Please use \" + replacement + \" instead of \\\"\" + prop + \"\\\".\");\n  }\n}; // Handle legacy props during their deprecation phase\n\n\nvar convertProps = function convertProps(props) {\n  var convertedProps = (0, _extends2.default)({}, props);\n  var resolutions = convertedProps.resolutions,\n      sizes = convertedProps.sizes,\n      critical = convertedProps.critical;\n\n  if (resolutions) {\n    convertedProps.fixed = resolutions;\n    delete convertedProps.resolutions;\n  }\n\n  if (sizes) {\n    convertedProps.fluid = sizes;\n    delete convertedProps.sizes;\n  }\n\n  if (critical) {\n    logDeprecationNotice(\"critical\", \"the native \\\"loading\\\" attribute\");\n    convertedProps.loading = \"eager\";\n  } // convert fluid & fixed to arrays so we only have to work with arrays\n\n\n  if (convertedProps.fluid) {\n    convertedProps.fluid = groupByMedia([].concat(convertedProps.fluid));\n  }\n\n  if (convertedProps.fixed) {\n    convertedProps.fixed = groupByMedia([].concat(convertedProps.fixed));\n  }\n\n  return convertedProps;\n};\n/**\n * Checks if fluid or fixed are art-direction arrays.\n *\n * @param currentData  {{media?: string}[]}   The props to check for images.\n * @return {boolean}\n */\n\n\nvar hasArtDirectionSupport = function hasArtDirectionSupport(currentData) {\n  return !!currentData && Array.isArray(currentData) && currentData.some(function (image) {\n    return typeof image.media !== \"undefined\";\n  });\n};\n/**\n * Tries to detect if a media query matches the current viewport.\n * @property media   {{media?: string}}  A media query string.\n * @return {boolean}\n */\n\n\nvar matchesMedia = function matchesMedia(_ref) {\n  var media = _ref.media;\n  return media ? isBrowser && !!window.matchMedia(media).matches : false;\n};\n/**\n * Find the source of an image to use as a key in the image cache.\n * Use `the first image in either `fixed` or `fluid`\n * @param {{fluid: {src: string, media?: string}[], fixed: {src: string, media?: string}[]}} args\n * @return {string?} Returns image src or undefined it not given.\n */\n\n\nvar getImageCacheKey = function getImageCacheKey(_ref2) {\n  var fluid = _ref2.fluid,\n      fixed = _ref2.fixed;\n  var srcData = getCurrentSrcData(fluid || fixed || []);\n  return srcData && srcData.src;\n};\n/**\n * Returns the current src - Preferably with art-direction support.\n * @param currentData  {{media?: string}[], maxWidth?: Number, maxHeight?: Number}   The fluid or fixed image array.\n * @return {{src: string, media?: string, maxWidth?: Number, maxHeight?: Number}}\n */\n\n\nvar getCurrentSrcData = function getCurrentSrcData(currentData) {\n  if (isBrowser && hasArtDirectionSupport(currentData)) {\n    // Do we have an image for the current Viewport?\n    var foundMedia = currentData.findIndex(matchesMedia);\n\n    if (foundMedia !== -1) {\n      return currentData[foundMedia];\n    } // No media matches, select first element without a media condition\n\n\n    var noMedia = currentData.findIndex(function (image) {\n      return typeof image.media === \"undefined\";\n    });\n\n    if (noMedia !== -1) {\n      return currentData[noMedia];\n    }\n  } // Else return the first image.\n\n\n  return currentData[0];\n}; // Cache if we've seen an image before so we don't bother with\n// lazy-loading & fading in on subsequent mounts.\n\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props) {\n  var convertedProps = convertProps(props);\n  var cacheKey = getImageCacheKey(convertedProps);\n  return imageCache[cacheKey] || false;\n};\n\nvar activateCacheForImage = function activateCacheForImage(props) {\n  var convertedProps = convertProps(props);\n  var cacheKey = getImageCacheKey(convertedProps);\n\n  if (cacheKey) {\n    imageCache[cacheKey] = true;\n  }\n}; // Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\n\n\nvar hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nvar isBrowser = typeof window !== \"undefined\";\nvar hasIOSupport = isBrowser && window.IntersectionObserver;\nvar io;\nvar listeners = new WeakMap();\n\nfunction getIO() {\n  if (typeof io === \"undefined\" && typeof window !== \"undefined\" && window.IntersectionObserver) {\n    io = new window.IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (listeners.has(entry.target)) {\n          var cb = listeners.get(entry.target); // Edge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n\n          if (entry.isIntersecting || entry.intersectionRatio > 0) {\n            io.unobserve(entry.target);\n            listeners.delete(entry.target);\n            cb();\n          }\n        }\n      });\n    }, {\n      rootMargin: \"200px\"\n    });\n  }\n\n  return io;\n}\n\nfunction generateImageSources(imageVariants) {\n  return imageVariants.map(function (_ref3) {\n    var src = _ref3.src,\n        srcSet = _ref3.srcSet,\n        srcSetWebp = _ref3.srcSetWebp,\n        media = _ref3.media,\n        sizes = _ref3.sizes;\n    return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {\n      key: src\n    }, srcSetWebp && /*#__PURE__*/_react.default.createElement(\"source\", {\n      type: \"image/webp\",\n      media: media,\n      srcSet: srcSetWebp,\n      sizes: sizes\n    }), /*#__PURE__*/_react.default.createElement(\"source\", {\n      media: media,\n      srcSet: srcSet,\n      sizes: sizes\n    }));\n  });\n} // Return an array ordered by elements having a media prop, does not use\n// native sort, as a stable sort is not guaranteed by all browsers/versions\n\n\nfunction groupByMedia(imageVariants) {\n  var withMedia = [];\n  var without = [];\n  imageVariants.forEach(function (variant) {\n    return (variant.media ? withMedia : without).push(variant);\n  });\n\n  if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n    console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n  }\n\n  return [].concat(withMedia, without);\n}\n\nfunction generateTracedSVGSources(imageVariants) {\n  return imageVariants.map(function (_ref4) {\n    var src = _ref4.src,\n        media = _ref4.media,\n        tracedSVG = _ref4.tracedSVG;\n    return /*#__PURE__*/_react.default.createElement(\"source\", {\n      key: src,\n      media: media,\n      srcSet: tracedSVG\n    });\n  });\n}\n\nfunction generateBase64Sources(imageVariants) {\n  return imageVariants.map(function (_ref5) {\n    var src = _ref5.src,\n        media = _ref5.media,\n        base64 = _ref5.base64;\n    return /*#__PURE__*/_react.default.createElement(\"source\", {\n      key: src,\n      media: media,\n      srcSet: base64\n    });\n  });\n}\n\nfunction generateNoscriptSource(_ref6, isWebp) {\n  var srcSet = _ref6.srcSet,\n      srcSetWebp = _ref6.srcSetWebp,\n      media = _ref6.media,\n      sizes = _ref6.sizes;\n  var src = isWebp ? srcSetWebp : srcSet;\n  var mediaAttr = media ? \"media=\\\"\" + media + \"\\\" \" : \"\";\n  var typeAttr = isWebp ? \"type='image/webp' \" : \"\";\n  var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\" \" : \"\";\n  return \"<source \" + typeAttr + mediaAttr + \"srcset=\\\"\" + src + \"\\\" \" + sizesAttr + \"/>\";\n}\n\nfunction generateNoscriptSources(imageVariants) {\n  return imageVariants.map(function (variant) {\n    return (variant.srcSetWebp ? generateNoscriptSource(variant, true) : \"\") + generateNoscriptSource(variant);\n  }).join(\"\");\n}\n\nvar listenToIntersections = function listenToIntersections(el, cb) {\n  var observer = getIO();\n\n  if (observer) {\n    observer.observe(el);\n    listeners.set(el, cb);\n  }\n\n  return function () {\n    observer.unobserve(el);\n    listeners.delete(el);\n  };\n};\n\nvar noscriptImg = function noscriptImg(props) {\n  // Check if prop exists before adding each attribute to the string output below to prevent\n  // HTML validation issues caused by empty values like width=\"\" and height=\"\"\n  var src = props.src ? \"src=\\\"\" + props.src + \"\\\" \" : \"src=\\\"\\\" \"; // required attribute\n\n  var sizes = props.sizes ? \"sizes=\\\"\" + props.sizes + \"\\\" \" : \"\";\n  var srcSet = props.srcSet ? \"srcset=\\\"\" + props.srcSet + \"\\\" \" : \"\";\n  var title = props.title ? \"title=\\\"\" + props.title + \"\\\" \" : \"\";\n  var alt = props.alt ? \"alt=\\\"\" + props.alt + \"\\\" \" : \"alt=\\\"\\\" \"; // required attribute\n\n  var width = props.width ? \"width=\\\"\" + props.width + \"\\\" \" : \"\";\n  var height = props.height ? \"height=\\\"\" + props.height + \"\\\" \" : \"\";\n  var crossOrigin = props.crossOrigin ? \"crossorigin=\\\"\" + props.crossOrigin + \"\\\" \" : \"\";\n  var loading = props.loading ? \"loading=\\\"\" + props.loading + \"\\\" \" : \"\";\n  var draggable = props.draggable ? \"draggable=\\\"\" + props.draggable + \"\\\" \" : \"\";\n  var sources = generateNoscriptSources(props.imageVariants);\n  return \"<picture>\" + sources + \"<img \" + loading + width + height + sizes + srcSet + src + alt + title + crossOrigin + draggable + \"style=\\\"position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center\\\"/></picture>\";\n}; // Earlier versions of gatsby-image during the 2.x cycle did not wrap\n// the `Img` component in a `picture` element. This maintains compatibility\n// until a breaking change can be introduced in the next major release\n\n\nvar Placeholder = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n  var src = props.src,\n      imageVariants = props.imageVariants,\n      generateSources = props.generateSources,\n      spreadProps = props.spreadProps,\n      ariaHidden = props.ariaHidden;\n\n  var baseImage = /*#__PURE__*/_react.default.createElement(Img, (0, _extends2.default)({\n    ref: ref,\n    src: src\n  }, spreadProps, {\n    ariaHidden: ariaHidden\n  }));\n\n  return imageVariants.length > 1 ? /*#__PURE__*/_react.default.createElement(\"picture\", null, generateSources(imageVariants), baseImage) : baseImage;\n});\n\nvar Img = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n  var sizes = props.sizes,\n      srcSet = props.srcSet,\n      src = props.src,\n      style = props.style,\n      onLoad = props.onLoad,\n      onError = props.onError,\n      loading = props.loading,\n      draggable = props.draggable,\n      ariaHidden = props.ariaHidden,\n      otherProps = (0, _objectWithoutPropertiesLoose2.default)(props, [\"sizes\", \"srcSet\", \"src\", \"style\", \"onLoad\", \"onError\", \"loading\", \"draggable\", \"ariaHidden\"]);\n  return /*#__PURE__*/_react.default.createElement(\"img\", (0, _extends2.default)({\n    \"aria-hidden\": ariaHidden,\n    sizes: sizes,\n    srcSet: srcSet,\n    src: src\n  }, otherProps, {\n    onLoad: onLoad,\n    onError: onError,\n    ref: ref,\n    loading: loading,\n    draggable: draggable,\n    style: (0, _extends2.default)({\n      position: \"absolute\",\n      top: 0,\n      left: 0,\n      width: \"100%\",\n      height: \"100%\",\n      objectFit: \"cover\",\n      objectPosition: \"center\"\n    }, style)\n  }));\n});\n\nImg.propTypes = {\n  style: _propTypes.default.object,\n  onError: _propTypes.default.func,\n  onLoad: _propTypes.default.func\n};\n\nvar Image = /*#__PURE__*/function (_React$Component) {\n  (0, _inheritsLoose2.default)(Image, _React$Component);\n\n  function Image(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this; // If this image has already been loaded before then we can assume it's\n    // already in the browser cache so it's cheap to just show directly.\n\n    _this.seenBefore = isBrowser && inImageCache(props);\n    _this.isCritical = props.loading === \"eager\" || props.critical;\n    _this.addNoScript = !(_this.isCritical && !props.fadeIn);\n    _this.useIOSupport = !hasNativeLazyLoadSupport && hasIOSupport && !_this.isCritical && !_this.seenBefore;\n    var isVisible = _this.isCritical || isBrowser && (hasNativeLazyLoadSupport || !_this.useIOSupport);\n    _this.state = {\n      isVisible: isVisible,\n      imgLoaded: false,\n      imgCached: false,\n      fadeIn: !_this.seenBefore && props.fadeIn\n    };\n    _this.imageRef = /*#__PURE__*/_react.default.createRef();\n    _this.placeholderRef = props.placeholderRef || /*#__PURE__*/_react.default.createRef();\n    _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2.default)(_this));\n    _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n    return _this;\n  }\n\n  var _proto = Image.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n      this.props.onStartLoad({\n        wasCached: inImageCache(this.props)\n      });\n    }\n\n    if (this.isCritical) {\n      var img = this.imageRef.current;\n\n      if (img && img.complete) {\n        this.handleImageLoaded();\n      }\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.cleanUpListeners) {\n      this.cleanUpListeners();\n    }\n  } // Specific to IntersectionObserver based lazy-load support\n  ;\n\n  _proto.handleRef = function handleRef(ref) {\n    var _this2 = this;\n\n    if (this.useIOSupport && ref) {\n      this.cleanUpListeners = listenToIntersections(ref, function () {\n        var imageInCache = inImageCache(_this2.props);\n\n        if (!_this2.state.isVisible && typeof _this2.props.onStartLoad === \"function\") {\n          _this2.props.onStartLoad({\n            wasCached: imageInCache\n          });\n        } // imgCached and imgLoaded must update after isVisible,\n        // Once isVisible is true, imageRef becomes accessible, which imgCached needs access to.\n        // imgLoaded and imgCached are in a 2nd setState call to be changed together,\n        // avoiding initiating unnecessary animation frames from style changes.\n\n\n        _this2.setState({\n          isVisible: true\n        }, function () {\n          _this2.setState({\n            imgLoaded: imageInCache,\n            // `currentSrc` should be a string, but can be `undefined` in IE,\n            // !! operator validates the value is not undefined/null/\"\"\n            // for lazyloaded components this might be null\n            // TODO fix imgCached behaviour as it's now false when it's lazyloaded\n            imgCached: !!(_this2.imageRef.current && _this2.imageRef.current.currentSrc)\n          });\n        });\n      });\n    }\n  };\n\n  _proto.handleImageLoaded = function handleImageLoaded() {\n    activateCacheForImage(this.props);\n    this.setState({\n      imgLoaded: true\n    });\n\n    if (this.props.onLoad) {\n      this.props.onLoad();\n    }\n  };\n\n  _proto.render = function render() {\n    var _convertProps = convertProps(this.props),\n        title = _convertProps.title,\n        alt = _convertProps.alt,\n        className = _convertProps.className,\n        _convertProps$style = _convertProps.style,\n        style = _convertProps$style === void 0 ? {} : _convertProps$style,\n        _convertProps$imgStyl = _convertProps.imgStyle,\n        imgStyle = _convertProps$imgStyl === void 0 ? {} : _convertProps$imgStyl,\n        _convertProps$placeho = _convertProps.placeholderStyle,\n        placeholderStyle = _convertProps$placeho === void 0 ? {} : _convertProps$placeho,\n        placeholderClassName = _convertProps.placeholderClassName,\n        fluid = _convertProps.fluid,\n        fixed = _convertProps.fixed,\n        backgroundColor = _convertProps.backgroundColor,\n        durationFadeIn = _convertProps.durationFadeIn,\n        Tag = _convertProps.Tag,\n        itemProp = _convertProps.itemProp,\n        loading = _convertProps.loading,\n        draggable = _convertProps.draggable;\n\n    var shouldReveal = this.state.fadeIn === false || this.state.imgLoaded;\n    var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached;\n    var imageStyle = (0, _extends2.default)({\n      opacity: shouldReveal ? 1 : 0,\n      transition: shouldFadeIn ? \"opacity \" + durationFadeIn + \"ms\" : \"none\"\n    }, imgStyle);\n    var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : backgroundColor;\n    var delayHideStyle = {\n      transitionDelay: durationFadeIn + \"ms\"\n    };\n    var imagePlaceholderStyle = (0, _extends2.default)({\n      opacity: this.state.imgLoaded ? 0 : 1\n    }, shouldFadeIn && delayHideStyle, imgStyle, placeholderStyle);\n    var placeholderImageProps = {\n      title: title,\n      alt: !this.state.isVisible ? alt : \"\",\n      style: imagePlaceholderStyle,\n      className: placeholderClassName,\n      itemProp: itemProp\n    };\n\n    if (fluid) {\n      var imageVariants = fluid;\n      var image = getCurrentSrcData(fluid);\n      return /*#__PURE__*/_react.default.createElement(Tag, {\n        className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n        style: (0, _extends2.default)({\n          position: \"relative\",\n          overflow: \"hidden\",\n          maxWidth: image.maxWidth ? image.maxWidth + \"px\" : null,\n          maxHeight: image.maxHeight ? image.maxHeight + \"px\" : null\n        }, style),\n        ref: this.handleRef,\n        key: \"fluid-\" + JSON.stringify(image.srcSet)\n      }, /*#__PURE__*/_react.default.createElement(Tag, {\n        \"aria-hidden\": true,\n        style: {\n          width: \"100%\",\n          paddingBottom: 100 / image.aspectRatio + \"%\"\n        }\n      }), bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n        \"aria-hidden\": true,\n        title: title,\n        style: (0, _extends2.default)({\n          backgroundColor: bgColor,\n          position: \"absolute\",\n          top: 0,\n          bottom: 0,\n          opacity: !this.state.imgLoaded ? 1 : 0,\n          right: 0,\n          left: 0\n        }, shouldFadeIn && delayHideStyle)\n      }), image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n        ariaHidden: true,\n        ref: this.placeholderRef,\n        src: image.base64,\n        spreadProps: placeholderImageProps,\n        imageVariants: imageVariants,\n        generateSources: generateBase64Sources\n      }), image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n        ariaHidden: true,\n        ref: this.placeholderRef,\n        src: image.tracedSVG,\n        spreadProps: placeholderImageProps,\n        imageVariants: imageVariants,\n        generateSources: generateTracedSVGSources\n      }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n        alt: alt,\n        title: title,\n        sizes: image.sizes,\n        src: image.src,\n        crossOrigin: this.props.crossOrigin,\n        srcSet: image.srcSet,\n        style: imageStyle,\n        ref: this.imageRef,\n        onLoad: this.handleImageLoaded,\n        onError: this.props.onError,\n        itemProp: itemProp,\n        loading: loading,\n        draggable: draggable\n      })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n        dangerouslySetInnerHTML: {\n          __html: noscriptImg((0, _extends2.default)({\n            alt: alt,\n            title: title,\n            loading: loading\n          }, image, {\n            imageVariants: imageVariants\n          }))\n        }\n      }));\n    }\n\n    if (fixed) {\n      var _imageVariants = fixed;\n\n      var _image = getCurrentSrcData(fixed);\n\n      var divStyle = (0, _extends2.default)({\n        position: \"relative\",\n        overflow: \"hidden\",\n        display: \"inline-block\",\n        width: _image.width,\n        height: _image.height\n      }, style);\n\n      if (style.display === \"inherit\") {\n        delete divStyle.display;\n      }\n\n      return /*#__PURE__*/_react.default.createElement(Tag, {\n        className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n        style: divStyle,\n        ref: this.handleRef,\n        key: \"fixed-\" + JSON.stringify(_image.srcSet)\n      }, bgColor && /*#__PURE__*/_react.default.createElement(Tag, {\n        \"aria-hidden\": true,\n        title: title,\n        style: (0, _extends2.default)({\n          backgroundColor: bgColor,\n          width: _image.width,\n          opacity: !this.state.imgLoaded ? 1 : 0,\n          height: _image.height\n        }, shouldFadeIn && delayHideStyle)\n      }), _image.base64 && /*#__PURE__*/_react.default.createElement(Placeholder, {\n        ariaHidden: true,\n        ref: this.placeholderRef,\n        src: _image.base64,\n        spreadProps: placeholderImageProps,\n        imageVariants: _imageVariants,\n        generateSources: generateBase64Sources\n      }), _image.tracedSVG && /*#__PURE__*/_react.default.createElement(Placeholder, {\n        ariaHidden: true,\n        ref: this.placeholderRef,\n        src: _image.tracedSVG,\n        spreadProps: placeholderImageProps,\n        imageVariants: _imageVariants,\n        generateSources: generateTracedSVGSources\n      }), this.state.isVisible && /*#__PURE__*/_react.default.createElement(\"picture\", null, generateImageSources(_imageVariants), /*#__PURE__*/_react.default.createElement(Img, {\n        alt: alt,\n        title: title,\n        width: _image.width,\n        height: _image.height,\n        sizes: _image.sizes,\n        src: _image.src,\n        crossOrigin: this.props.crossOrigin,\n        srcSet: _image.srcSet,\n        style: imageStyle,\n        ref: this.imageRef,\n        onLoad: this.handleImageLoaded,\n        onError: this.props.onError,\n        itemProp: itemProp,\n        loading: loading,\n        draggable: draggable\n      })), this.addNoScript && /*#__PURE__*/_react.default.createElement(\"noscript\", {\n        dangerouslySetInnerHTML: {\n          __html: noscriptImg((0, _extends2.default)({\n            alt: alt,\n            title: title,\n            loading: loading\n          }, _image, {\n            imageVariants: _imageVariants\n          }))\n        }\n      }));\n    }\n\n    return null;\n  };\n\n  return Image;\n}(_react.default.Component);\n\nImage.defaultProps = {\n  fadeIn: true,\n  durationFadeIn: 500,\n  alt: \"\",\n  Tag: \"div\",\n  // We set it to `lazy` by default because it's best to default to a performant\n  // setting and let the user \"opt out\" to `eager`\n  loading: \"lazy\"\n};\n\nvar fixedObject = _propTypes.default.shape({\n  width: _propTypes.default.number.isRequired,\n  height: _propTypes.default.number.isRequired,\n  src: _propTypes.default.string.isRequired,\n  srcSet: _propTypes.default.string.isRequired,\n  base64: _propTypes.default.string,\n  tracedSVG: _propTypes.default.string,\n  srcWebp: _propTypes.default.string,\n  srcSetWebp: _propTypes.default.string,\n  media: _propTypes.default.string\n});\n\nvar fluidObject = _propTypes.default.shape({\n  aspectRatio: _propTypes.default.number.isRequired,\n  src: _propTypes.default.string.isRequired,\n  srcSet: _propTypes.default.string.isRequired,\n  sizes: _propTypes.default.string.isRequired,\n  base64: _propTypes.default.string,\n  tracedSVG: _propTypes.default.string,\n  srcWebp: _propTypes.default.string,\n  srcSetWebp: _propTypes.default.string,\n  media: _propTypes.default.string,\n  maxWidth: _propTypes.default.number,\n  maxHeight: _propTypes.default.number\n});\n\nfunction requireFixedOrFluid(originalPropTypes) {\n  return function (props, propName, componentName) {\n    var _PropTypes$checkPropT;\n\n    if (!props.fixed && !props.fluid) {\n      throw new Error(\"The prop `fluid` or `fixed` is marked as required in `\" + componentName + \"`, but their values are both `undefined`.\");\n    }\n\n    _propTypes.default.checkPropTypes((_PropTypes$checkPropT = {}, _PropTypes$checkPropT[propName] = originalPropTypes, _PropTypes$checkPropT), props, \"prop\", componentName);\n  };\n} // If you modify these propTypes, please don't forget to update following files as well:\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/index.d.ts\n// https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-image/README.md#gatsby-image-props\n// https://github.com/gatsbyjs/gatsby/blob/master/docs/docs/gatsby-image.md#gatsby-image-props\n\n\nImage.propTypes = {\n  resolutions: fixedObject,\n  sizes: fluidObject,\n  fixed: requireFixedOrFluid(_propTypes.default.oneOfType([fixedObject, _propTypes.default.arrayOf(fixedObject)])),\n  fluid: requireFixedOrFluid(_propTypes.default.oneOfType([fluidObject, _propTypes.default.arrayOf(fluidObject)])),\n  fadeIn: _propTypes.default.bool,\n  durationFadeIn: _propTypes.default.number,\n  title: _propTypes.default.string,\n  alt: _propTypes.default.string,\n  className: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]),\n  // Support Glamor's css prop.\n  critical: _propTypes.default.bool,\n  crossOrigin: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n  style: _propTypes.default.object,\n  imgStyle: _propTypes.default.object,\n  placeholderStyle: _propTypes.default.object,\n  placeholderClassName: _propTypes.default.string,\n  backgroundColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool]),\n  onLoad: _propTypes.default.func,\n  onError: _propTypes.default.func,\n  onStartLoad: _propTypes.default.func,\n  Tag: _propTypes.default.string,\n  itemProp: _propTypes.default.string,\n  loading: _propTypes.default.oneOf([\"auto\", \"lazy\", \"eager\"]),\n  draggable: _propTypes.default.bool\n};\nvar _default = Image;\nexports.default = _default;","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;","var camel2hyphen = function camel2hyphen(str) {\n  return str.replace(/[A-Z]/g, function (match) {\n    return '-' + match.toLowerCase();\n  }).toLowerCase();\n};\n\nmodule.exports = camel2hyphen;","import { Row } from '../grid';\nexport default Row;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\nvar initialState = {\n  animating: false,\n  autoplaying: null,\n  currentDirection: 0,\n  currentLeft: null,\n  currentSlide: 0,\n  direction: 1,\n  dragging: false,\n  edgeDragged: false,\n  initialized: false,\n  lazyLoadedList: [],\n  listHeight: null,\n  listWidth: null,\n  scrolling: false,\n  slideCount: null,\n  slideHeight: null,\n  slideWidth: null,\n  swipeLeft: null,\n  swiped: false,\n  // used by swipeEvent. differentites between touch and swipe.\n  swiping: false,\n  touchObject: {\n    startX: 0,\n    startY: 0,\n    curX: 0,\n    curY: 0\n  },\n  trackStyle: {},\n  trackWidth: 0\n};\nvar _default = initialState;\nexports[\"default\"] = _default;","import '../../style/index.css'; // style dependencies\n// deps-lint-skip: grid\n\nimport '../../grid/style/css';","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _slider = _interopRequireDefault(require(\"./slider\"));\n\nvar _default = _slider[\"default\"];\nexports[\"default\"] = _default;","/**\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    width: 50,\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","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/createSuper\";\nimport * as React from 'react';\nimport debounce from 'lodash/debounce';\nimport SlickCarousel from '@ant-design/react-slick';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\n\nvar Carousel = /*#__PURE__*/function (_React$Component) {\n  _inherits(Carousel, _React$Component);\n\n  var _super = _createSuper(Carousel);\n\n  function Carousel(props) {\n    var _this;\n\n    _classCallCheck(this, Carousel);\n\n    _this = _super.call(this, props);\n\n    _this.saveSlick = function (node) {\n      _this.slick = node;\n    };\n\n    _this.onWindowResized = function () {\n      // Fix https://github.com/ant-design/ant-design/issues/2550\n      var autoplay = _this.props.autoplay;\n\n      if (autoplay && _this.slick && _this.slick.innerSlider && _this.slick.innerSlider.autoPlay) {\n        _this.slick.innerSlider.autoPlay();\n      }\n    };\n\n    _this.renderCarousel = function (_ref) {\n      var _classNames;\n\n      var getPrefixCls = _ref.getPrefixCls,\n          direction = _ref.direction;\n\n      var _a;\n\n      var props = _extends({}, _this.props);\n\n      if (props.effect === 'fade') {\n        props.fade = true;\n      }\n\n      var prefixCls = getPrefixCls('carousel', props.prefixCls);\n      var dotsClass = 'slick-dots';\n\n      var dotPosition = _this.getDotPosition();\n\n      props.vertical = dotPosition === 'left' || dotPosition === 'right';\n      var enableDots = !!props.dots;\n      var dsClass = classNames(dotsClass, \"\".concat(dotsClass, \"-\").concat(dotPosition || 'bottom'), typeof props.dots === 'boolean' ? false : (_a = props.dots) === null || _a === void 0 ? void 0 : _a.className);\n      var className = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-vertical\"), props.vertical), _classNames));\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: className\n      }, /*#__PURE__*/React.createElement(SlickCarousel, _extends({\n        ref: _this.saveSlick\n      }, props, {\n        dots: enableDots,\n        dotsClass: dsClass\n      })));\n    };\n\n    _this.onWindowResized = debounce(_this.onWindowResized, 500, {\n      leading: false\n    });\n    return _this;\n  }\n\n  _createClass(Carousel, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var autoplay = this.props.autoplay;\n\n      if (autoplay) {\n        window.addEventListener('resize', this.onWindowResized);\n      } // https://github.com/ant-design/ant-design/issues/7191\n\n\n      this.innerSlider = this.slick && this.slick.innerSlider;\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (React.Children.count(this.props.children) !== React.Children.count(prevProps.children)) {\n        this.goTo(this.props.initialSlide || 0, false);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var autoplay = this.props.autoplay;\n\n      if (autoplay) {\n        window.removeEventListener('resize', this.onWindowResized);\n        this.onWindowResized.cancel();\n      }\n    }\n  }, {\n    key: \"getDotPosition\",\n    value: function getDotPosition() {\n      var _this$props$dotPositi = this.props.dotPosition,\n          dotPosition = _this$props$dotPositi === void 0 ? 'bottom' : _this$props$dotPositi;\n      return dotPosition;\n    }\n  }, {\n    key: \"next\",\n    value: function next() {\n      this.slick.slickNext();\n    }\n  }, {\n    key: \"prev\",\n    value: function prev() {\n      this.slick.slickPrev();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(slide) {\n      var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      this.slick.slickGoTo(slide, dontAnimate);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(ConfigConsumer, null, this.renderCarousel);\n    }\n  }]);\n\n  return Carousel;\n}(React.Component);\n\nexport { Carousel as default };\nCarousel.defaultProps = {\n  dots: true,\n  arrows: false,\n  draggable: false\n};","// This icon file is generated automatically.\nvar FireOutlined = {\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\": \"M834.1 469.2A347.49 347.49 0 00751.2 354l-29.1-26.7a8.09 8.09 0 00-13 3.3l-13 37.3c-8.1 23.4-23 47.3-44.1 70.8-1.4 1.5-3 1.9-4.1 2-1.1.1-2.8-.1-4.3-1.5-1.4-1.2-2.1-3-2-4.8 3.7-60.2-14.3-128.1-53.7-202C555.3 171 510 123.1 453.4 89.7l-41.3-24.3c-5.4-3.2-12.3 1-12 7.3l2.2 48c1.5 32.8-2.3 61.8-11.3 85.9-11 29.5-26.8 56.9-47 81.5a295.64 295.64 0 01-47.5 46.1 352.6 352.6 0 00-100.3 121.5A347.75 347.75 0 00160 610c0 47.2 9.3 92.9 27.7 136a349.4 349.4 0 0075.5 110.9c32.4 32 70 57.2 111.9 74.7C418.5 949.8 464.5 959 512 959s93.5-9.2 136.9-27.3A348.6 348.6 0 00760.8 857c32.4-32 57.8-69.4 75.5-110.9a344.2 344.2 0 0027.7-136c0-48.8-10-96.2-29.9-140.9zM713 808.5c-53.7 53.2-125 82.4-201 82.4s-147.3-29.2-201-82.4c-53.5-53.1-83-123.5-83-198.4 0-43.5 9.8-85.2 29.1-124 18.8-37.9 46.8-71.8 80.8-97.9a349.6 349.6 0 0058.6-56.8c25-30.5 44.6-64.5 58.2-101a240 240 0 0012.1-46.5c24.1 22.2 44.3 49 61.2 80.4 33.4 62.6 48.8 118.3 45.8 165.7a74.01 74.01 0 0024.4 59.8 73.36 73.36 0 0053.4 18.8c19.7-1 37.8-9.7 51-24.4 13.3-14.9 24.8-30.1 34.4-45.6 14 17.9 25.7 37.4 35 58.4 15.9 35.8 24 73.9 24 113.1 0 74.9-29.5 145.4-83 198.4z\"\n      }\n    }]\n  },\n  \"name\": \"fire\",\n  \"theme\": \"outlined\"\n};\nexport default FireOutlined;","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport FireOutlinedSvg from \"@ant-design/icons-svg/es/asn/FireOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar FireOutlined = function FireOutlined(props, ref) {\n  return React.createElement(AntdIcon, Object.assign({}, props, {\n    ref: ref,\n    icon: FireOutlinedSvg\n  }));\n};\n\nFireOutlined.displayName = 'FireOutlined';\nexport default React.forwardRef(FireOutlined);","// This icon file is generated automatically.\nvar DatabaseOutlined = {\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\": \"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z\"\n      }\n    }]\n  },\n  \"name\": \"database\",\n  \"theme\": \"outlined\"\n};\nexport default DatabaseOutlined;","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport DatabaseOutlinedSvg from \"@ant-design/icons-svg/es/asn/DatabaseOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DatabaseOutlined = function DatabaseOutlined(props, ref) {\n  return React.createElement(AntdIcon, Object.assign({}, props, {\n    ref: ref,\n    icon: DatabaseOutlinedSvg\n  }));\n};\n\nDatabaseOutlined.displayName = 'DatabaseOutlined';\nexport default React.forwardRef(DatabaseOutlined);","// This icon file is generated automatically.\nvar DeploymentUnitOutlined = {\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\": \"M888.3 693.2c-42.5-24.6-94.3-18-129.2 12.8l-53-30.7V523.6c0-15.7-8.4-30.3-22-38.1l-136-78.3v-67.1c44.2-15 76-56.8 76-106.1 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 49.3 31.8 91.1 76 106.1v67.1l-136 78.3c-13.6 7.8-22 22.4-22 38.1v151.6l-53 30.7c-34.9-30.8-86.8-37.4-129.2-12.8-53.5 31-71.7 99.4-41 152.9 30.8 53.5 98.9 71.9 152.2 41 42.5-24.6 62.7-73 53.6-118.8l48.7-28.3 140.6 81c6.8 3.9 14.4 5.9 22 5.9s15.2-2 22-5.9L674.5 740l48.7 28.3c-9.1 45.7 11.2 94.2 53.6 118.8 53.3 30.9 121.5 12.6 152.2-41 30.8-53.6 12.6-122-40.7-152.9zm-673 138.4a47.6 47.6 0 01-65.2-17.6c-13.2-22.9-5.4-52.3 17.5-65.5a47.6 47.6 0 0165.2 17.6c13.2 22.9 5.4 52.3-17.5 65.5zM522 463.8zM464 234a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm170 446.2l-122 70.3-122-70.3V539.8l122-70.3 122 70.3v140.4zm239.9 133.9c-13.2 22.9-42.4 30.8-65.2 17.6-22.8-13.2-30.7-42.6-17.5-65.5s42.4-30.8 65.2-17.6c22.9 13.2 30.7 42.5 17.5 65.5z\"\n      }\n    }]\n  },\n  \"name\": \"deployment-unit\",\n  \"theme\": \"outlined\"\n};\nexport default DeploymentUnitOutlined;","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport DeploymentUnitOutlinedSvg from \"@ant-design/icons-svg/es/asn/DeploymentUnitOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DeploymentUnitOutlined = function DeploymentUnitOutlined(props, ref) {\n  return React.createElement(AntdIcon, Object.assign({}, props, {\n    ref: ref,\n    icon: DeploymentUnitOutlinedSvg\n  }));\n};\n\nDeploymentUnitOutlined.displayName = 'DeploymentUnitOutlined';\nexport default React.forwardRef(DeploymentUnitOutlined);","// This icon file is generated automatically.\nvar DotChartOutlined = {\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\": \"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z\"\n      }\n    }]\n  },\n  \"name\": \"dot-chart\",\n  \"theme\": \"outlined\"\n};\nexport default DotChartOutlined;","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport DotChartOutlinedSvg from \"@ant-design/icons-svg/es/asn/DotChartOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar DotChartOutlined = function DotChartOutlined(props, ref) {\n  return React.createElement(AntdIcon, Object.assign({}, props, {\n    ref: ref,\n    icon: DotChartOutlinedSvg\n  }));\n};\n\nDotChartOutlined.displayName = 'DotChartOutlined';\nexport default React.forwardRef(DotChartOutlined);","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","export default function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","import _defineProperty from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/Users/max/code/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\n\nvar GitHubButton = /*#__PURE__*/function (_PureComponent) {\n  _inherits(GitHubButton, _PureComponent);\n\n  var _super = _createSuper(GitHubButton);\n\n  function GitHubButton(props) {\n    var _this;\n\n    _classCallCheck(this, GitHubButton);\n\n    _this = _super.call(this, props);\n    _this.$ = React.createRef();\n    _this._ = React.createRef();\n    return _this;\n  }\n\n  _createClass(GitHubButton, [{\n    key: \"render\",\n    value: function render() {\n      return React.createElement('span', {\n        ref: this.$\n      }, React.createElement('a', _objectSpread(_objectSpread({}, this.props), {}, {\n        ref: this._\n      }), this.props.children));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.paint();\n    }\n  }, {\n    key: \"getSnapshotBeforeUpdate\",\n    value: function getSnapshotBeforeUpdate() {\n      this.reset();\n      return null;\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.paint();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.reset();\n    }\n  }, {\n    key: \"paint\",\n    value: function paint() {\n      var _this2 = this;\n\n      var _ = this.$.current.appendChild(document.createElement('span'));\n\n      import(\n      /* webpackMode: \"eager\" */\n      'github-buttons').then(function (_ref) {\n        var render = _ref.render;\n        render(_.appendChild(_this2._.current), function (el) {\n          try {\n            _.parentNode.replaceChild(el, _);\n          } catch (_) {}\n        });\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.$.current.replaceChild(this._.current, this.$.current.lastChild);\n    }\n  }]);\n\n  return GitHubButton;\n}(PureComponent);\n\nexport default GitHubButton;","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","/**\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 { useStaticQuery, graphql } from 'gatsby';\nimport Img from 'gatsby-image';\n\ninterface Props {\n  imageName?: string;\n  width?: string;\n  height?: string;\n  otherProps?: any;\n}\n\nconst Image = ({\n  imageName, width, height, ...otherProps\n}: Props) => {\n  const data = useStaticQuery(graphql`\n    query {\n      logoSm: file(relativePath: { eq: \"src/images/s.png\" }) {\n        childImageSharp {\n          fixed(height: 30) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n\n      logoLg: file(relativePath: { eq: \"src/images/s.png\" }) {\n        childImageSharp {\n          fixed(width: 150) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n\n      incubatorSm: file(relativePath: { eq: \"src/images/incubator.png\" }) {\n        childImageSharp {\n          fixed(width: 300) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n\n      stackoverflow: file(\n        relativePath: { eq: \"src/images/stack_overflow.png\" }\n      ) {\n        childImageSharp {\n          fixed(width: 60) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n\n      docker: file(relativePath: { eq: \"src/images/docker.png\" }) {\n        childImageSharp {\n          fixed(width: 100) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n\n      preset: file(relativePath: { eq: \"src/images/preset.png\" }) {\n        childImageSharp {\n          fixed(width: 100) {\n            ...GatsbyImageSharpFixed\n          }\n        }\n      }\n    }\n  `);\n\n  return <Img fixed={data[imageName]?.childImageSharp?.fixed} {...otherProps} />;\n};\n\nexport default Image;\n","/**\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 { useStaticQuery, graphql } from 'gatsby';\nimport Img from 'gatsby-image';\n\ninterface Props {\n  imageName?: string;\n}\n\nconst DbImage = ({ imageName }: Props) => {\n  const data = useStaticQuery(graphql`\n    query {\n      allImages: allFile(filter: {relativeDirectory: {eq: \"src/images/databases\"}}) {\n        edges {\n          node {\n            childImageSharp {\n              fixed(height: 50) {\n                ...GatsbyImageSharpFixed\n                originalName\n              }\n            }\n          }\n        }\n      }\n    }\n  `);\n  const images = data.allImages.edges.map((img) => img.node?.childImageSharp?.fixed);\n  const filter = images.filter((img) => img?.originalName === imageName);\n  return <Img fixed={filter[0]} />;\n};\n\nexport default DbImage;\n","/**\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, { useRef, useState } from 'react';\nimport { theme, useConfig } from 'docz';\nimport { Link } from 'gatsby';\nimport { ThemeProvider } from 'theme-ui';\nimport {\n  Button, Col, Row, Carousel,\n} from 'antd';\nimport { css } from '@emotion/core';\nimport { supersetTheme } from '@superset-ui/style';\nimport {\n  DeploymentUnitOutlined,\n  FireOutlined,\n  DotChartOutlined,\n  DatabaseOutlined,\n} from '@ant-design/icons';\nimport GitHubButton from 'react-github-btn';\n\nimport { Databases } from '../resources/data';\nimport Layout from '../components/layout';\nimport Image from '../components/image';\nimport DbImage from '../components/DbImage';\nimport 'antd/dist/antd.css';\nimport SEO from '../components/seo';\nimport logo from '../images/superset-logo-horiz-apache.svg';\nimport { mq } from '../utils';\n\nconst { colors } = supersetTheme;\n\nconst mainPageStyle = css`\n  text-align: center;\n  .alert {\n    color: ${colors.alert.base};\n  }\n  .error {\n    color: ${colors.error.base};\n  }\n  .warning {\n    color: ${colors.warning.base};\n  }\n  .info {\n    color: ${colors.info.base};\n  }\n  .success {\n    color: ${colors.success.base};\n  }\n  .secondary {\n    color: ${colors.secondary.base};\n  }\n  .info-text {\n    font-size: 32px;\n    font-weight: normal;\n    max-width: 600px;\n    margin: auto;\n  }\n  .info-text-smaller {\n    font-size: 24px;\n    max-width: 800px;\n  }\n`;\n\nconst titleContainer = css`\n  position: relative;\n  padding-top: 131px;\n  padding-bottom: 80px;\n  padding-left: 20px;\n  padding-right: 20px;\n  background-image: url('/images/data-point.jpg');\n  background-size: cover;\n  background-position-x: right;\n  .github-section {\n    margin-bottom: 40px;\n    margin-top: 40px;\n    .github-button {\n      margin: 5px;\n    }\n  }\n  .logo-horiz {\n    margin-top: 20px;\n    margin-bottom: 20px;\n    width: 600px;\n    max-width: 100%;\n    ${[mq[3]]} {\n      width: 550px;\n    }\n    ${[mq[2]]} {\n      width: 450px;\n    }\n    ${[mq[1]]} {\n      width: 425px;\n    }\n    ${[mq[0]]} {\n      width: 400px;\n    }\n  }\n  .incubator {\n    margin-top: 40px;\n    margin-bottom: 30px;\n  }\n  .alert {\n    color: #0c5460;\n    background-color: #d1ecf1;\n    border-color: #bee5eb;\n    max-width: 600px;\n    margin: 0 auto;\n    padding: 0.75rem 1.25rem;\n    margin-top: 83px;\n    border: 1px solid transparent;\n    border-radius: 0.25rem;\n  }\n`;\n\nconst secondaryHeading = css`\n  font-size: 55px;\n  text-align: center;\n`;\n\nconst featureSectionStyle = css`\n  background: #fff;\n  padding: 5vw 0;\n  margin-top: 0px;\n  margin-bottom: 30px;\n  .featureList {\n    padding: 40px;\n    width: 100%;\n    list-style-type: none;\n    margin: 0 auto;\n    max-width: 1000px;\n    .feature {\n      padding: 20px;\n      text-align: center;\n      margin-bottom: 40px;\n      .imagePlaceHolder {\n        svg {\n          width: 70px;\n          height: 70px;\n        }\n        margin-bottom: 15px;\n      }\n      .featureText {\n        color: ${colors.grayscale.dark2};\n        font-size: 16px;\n        strong {\n          font-size: 22px;\n        }\n      }\n    }\n  }\n  .heading {\n    font-size: 22px;\n    margin: 0 auto;\n    text-align: center;\n  }\n`;\n\nconst integrationSection = css`\n  background: white;\n  margin-bottom: 64px;\n  .databaseSub {\n    text-align: center;\n    display: block;\n    margin-bottom: 40px;\n    font-size: 18px;\n  }\n\n  .database-list {\n    margin-top: 100px;\n    list-style-type: none;\n    padding: 0px;\n    max-width: 1000px;\n    margin: 0 auto;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-around;\n    margin-bottom: 50px;\n    a {\n      margin: 15px;\n    }\n  }\n`;\n\nconst linkCarousel = css`\n  .toggleContainer {\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 100px;\n    position: relative;\n    .toggleBtns {\n      display: flex;\n      flex-direction: row;\n      /* ${[mq[0]]} {\n        flex-direction: column;\n      } */\n      justify-content: center;\n      .toggle {\n        margin: 10px;\n        color: #666;\n        border: 1px solid #888;\n        background-color: #20a7c911;\n        border-radius: 3px;\n        padding: 16px;\n        transition: all 0.25s;\n        overflow: visible;\n        ${[mq[0]]} {\n          > span {\n            display: none;\n            position: absolute;\n            bottom: 0px;\n            left: 50%;\n            width: 100%;\n            transform: translate(-50%, 100%);\n          }\n          h2 {\n            font-size: 14px;\n            margin: 0;\n          }\n        }\n        &:hover {\n          cursor: pointer;\n          color: ${colors.primary.base};\n          border: 1px solid ${colors.primary.base};\n        }\n        &.active {\n          background: red;\n          background: #20a7c933;\n          ${[mq[0]]} {\n            > span {\n              display: block;\n            }\n          }\n        }\n      }\n    }\n    .imageContainer {\n      img {\n        margin: 0 auto;\n        width: 80%;\n        box-shadow: 0 0 3px #aaa;\n        margin-top: 5px;\n        margin-bottom: 5px;\n      }\n    }\n  }\n`;\ninterface featureProps {\n  icon: React.ReactNode,\n  title: string,\n  descr: string,\n}\nconst Feature = ({ icon, title, descr }: featureProps) => (\n  <li className=\"feature\">\n    <div className=\"imagePlaceHolder\">\n      {icon}\n    </div>\n    <div className=\"featureText\">\n      <h3>{title}</h3>\n      {descr}\n    </div>\n  </li>\n);\nconst Theme = () => {\n  const config = useConfig();\n  const slider = useRef(null);\n\n  const [slideIndex, setSlideIndex] = useState(0);\n\n  const onChange = (index) => {\n    setSlideIndex(index);\n  };\n\n  return (\n    <ThemeProvider theme={config}>\n      <SEO title=\"Superset\" />\n      <Layout>\n        <div css={mainPageStyle}>\n          <div css={titleContainer}>\n            <img className=\"logo-horiz\" src={logo} alt=\"logo-horiz\" />\n            <div className=\"info-text\">\n              Apache Superset is a modern data exploration and visualization\n              platform\n            </div>\n            <div className=\"github-section\">\n              <span className=\"github-button\">\n                <GitHubButton\n                  href=\"https://github.com/apache/incubator-superset\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Star apache/incubator-superset on GitHub\"\n                >\n                  Star\n                </GitHubButton>\n              </span>\n              <span className=\"github-button\">\n                <GitHubButton\n                  href=\"https://github.com/apache/incubator-superset/subscription\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Watch apache/incubator-superset on GitHub\"\n                >\n                  Watch\n                </GitHubButton>\n              </span>\n              <span className=\"github-button\">\n                <GitHubButton\n                  href=\"https://github.com/apache/incubator-superset/fork\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Fork apache/incubator-superset on GitHub\"\n                >\n                  Fork\n                </GitHubButton>\n              </span>\n            </div>\n            <div className=\"incubator\">\n              <Image imageName=\"incubatorSm\" />\n            </div>\n            <div>\n              <Link to=\"/docs/intro\">\n                <Button type=\"primary\" size=\"medium\">\n                  Get Started\n                </Button>\n              </Link>\n            </div>\n          </div>\n\n          <div css={featureSectionStyle}>\n            <h2 css={secondaryHeading}>Overview</h2>\n            <div className=\"info-text info-text-smaller\">\n              Superset is fast, lightweight, intuitive, and loaded with options\n              that make it easy for users of all skill sets to explore and\n              visualize their data, from simple line charts to highly detailed\n              geospatial charts.\n            </div>\n            <ul className=\"featureList ant-row\">\n              <Row>\n                <Col sm={24} md={12}>\n                  <Feature\n                    icon={<FireOutlined className=\"warning\" />}\n                    title=\"Powerful yet easy to use\"\n                    descr={`\n                    Quickly and easily integrate and explore your data, using\n                    either our simple no-code viz builder or state of the art SQL\n                    IDE.\n                  `}\n                  />\n                </Col>\n\n                <Col sm={24} md={12}>\n                  <Feature\n                    icon={<DatabaseOutlined className=\"info\" />}\n                    title=\"Integrates with modern databases\"\n                    descr={`\n                    Superset can connect to any SQL based datasource\n                    through SQL Alchemy, including modern cloud native databases\n                    and engines at petabyte scale.\n                  `}\n                  />\n                </Col>\n              </Row>\n              <Row>\n                <Col sm={24} md={12}>\n                  <Feature\n                    icon={<DeploymentUnitOutlined className=\"success\" />}\n                    title=\"Modern architecture\"\n                    descr={`\n                    Superset is lightweight and highly scalable, leveraging the\n                    power of your existing data infrastructure without requiring\n                    yet another ingestion layer.\n                  `}\n                  />\n                </Col>\n                <Col sm={24} md={12}>\n                  <Feature\n                    icon={<DotChartOutlined className=\"alert\" />}\n                    title=\"Rich visualizations and dashboards\"\n                    descr={`\n                    Superset ships with a wide array of beautiful visualizations.\n                    Our visualization plug-in architecture makes it easy to build\n                    custom visualizations that drop directly into Superset.\n                  `}\n                  />\n                </Col>\n              </Row>\n            </ul>\n          </div>\n\n          <div css={linkCarousel}>\n            <h2 css={secondaryHeading}>Explore</h2>\n            <div className=\"toggleContainer\">\n              <div className=\"toggleBtns\">\n                <div\n                  className={`toggle ${slideIndex === 0 ? 'active' : null}`}\n                  onClick={() => slider.current.goTo(0)}\n                  role=\"button\"\n                >\n                  <h2>Explore</h2>\n                  <span>\n                    Explore your data using the array of data visualizations.\n                  </span>\n                </div>\n\n                <div\n                  className={`toggle ${slideIndex === 1 ? 'active' : null}`}\n                  onClick={() => slider.current.goTo(1)}\n                  role=\"button\"\n                >\n                  <h2>View</h2>\n                  <span>View your data through interactive dashboards</span>\n                </div>\n                <div\n                  className={`toggle ${slideIndex === 2 ? 'active' : null}`}\n                  onClick={() => slider.current.goTo(2)}\n                  role=\"button\"\n                >\n                  <h2>Investigate</h2>\n                  <span>Use SQL Lab to write queries to explore your data</span>\n                </div>\n              </div>\n              <Carousel ref={slider} effect=\"scrollx\" afterChange={onChange}>\n                <div className=\"imageContainer\">\n                  <img src=\"/images/explorer.png\" alt=\"\" />\n                </div>\n                <div className=\"imageContainer\">\n                  <img src=\"/images/dashboard3.png\" alt=\"\" />\n                </div>\n                <div className=\"imageContainer\">\n                  <img src=\"/images/sqllab1.png\" alt=\"\" />\n                </div>\n              </Carousel>\n            </div>\n          </div>\n          <div css={integrationSection}>\n            <h2 css={secondaryHeading}>Supported Databases</h2>\n\n            <ul className=\"database-list\">\n              {Databases.map(\n                ({\n                  title, href, imgName: imageName, width, height,\n                }) => (\n                  <a\n                    href={href}\n                    target=\"_blank\"\n                    key={imageName}\n                    rel=\"noreferrer\"\n                  >\n                    <DbImage\n                      {...{\n                        imageName,\n                        width,\n                        height,\n                        alt: title,\n                      }}\n                    />\n                  </a>\n                ),\n              )}\n            </ul>\n            <span className=\"databaseSub\">\n              {' '}\n              ... and any other SQLAlchemy\n              {' '}\n              <a href=\"https://superset.incubator.apache.org/installation.html#database-dependencies\">\n                {' '}\n                compatible databases\n                {' '}\n              </a>\n              {' '}\n            </span>\n          </div>\n        </div>\n      </Layout>\n    </ThemeProvider>\n  );\n};\n\n// @ts-ignore\nexport default theme()(Theme);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _createSuper2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createSuper\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _innerSlider = require(\"./inner-slider\");\n\nvar _json2mq = _interopRequireDefault(require(\"json2mq\"));\n\nvar _defaultProps = _interopRequireDefault(require(\"./default-props\"));\n\nvar _innerSliderUtils = require(\"./utils/innerSliderUtils\");\n\nvar Slider = /*#__PURE__*/function (_React$Component) {\n  (0, _inherits2[\"default\"])(Slider, _React$Component);\n\n  var _super = (0, _createSuper2[\"default\"])(Slider);\n\n  function Slider(props) {\n    var _this;\n\n    (0, _classCallCheck2[\"default\"])(this, Slider);\n    _this = _super.call(this, props);\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"innerSliderRefHandler\", function (ref) {\n      return _this.innerSlider = ref;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickPrev\", function () {\n      return _this.innerSlider.slickPrev();\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickNext\", function () {\n      return _this.innerSlider.slickNext();\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickGoTo\", function (slide) {\n      var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return _this.innerSlider.slickGoTo(slide, dontAnimate);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickPause\", function () {\n      return _this.innerSlider.pause(\"paused\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickPlay\", function () {\n      return _this.innerSlider.autoPlay(\"play\");\n    });\n    _this.state = {\n      breakpoint: null\n    };\n    _this._responsiveMediaHandlers = [];\n    return _this;\n  }\n\n  (0, _createClass2[\"default\"])(Slider, [{\n    key: \"media\",\n    value: function media(query, handler) {\n      // javascript handler for  css media query\n      var mql = window.matchMedia(query);\n\n      var listener = function listener(_ref) {\n        var matches = _ref.matches;\n\n        if (matches) {\n          handler();\n        }\n      };\n\n      mql.addListener(listener);\n      listener(mql);\n\n      this._responsiveMediaHandlers.push({\n        mql: mql,\n        query: query,\n        listener: listener\n      });\n    } // handles responsive breakpoints\n\n  }, {\n    key: \"UNSAFE_componentWillMount\",\n    value: function UNSAFE_componentWillMount() {\n      var _this2 = this; // performance monitoring\n      //if (process.env.NODE_ENV !== 'production') {\n      //const { whyDidYouUpdate } = require('why-did-you-update')\n      //whyDidYouUpdate(React)\n      //}\n\n\n      if (this.props.responsive) {\n        var breakpoints = this.props.responsive.map(function (breakpt) {\n          return breakpt.breakpoint;\n        }); // sort them in increasing order of their numerical value\n\n        breakpoints.sort(function (x, y) {\n          return x - y;\n        });\n        breakpoints.forEach(function (breakpoint, index) {\n          // media query for each breakpoint\n          var bQuery;\n\n          if (index === 0) {\n            bQuery = (0, _json2mq[\"default\"])({\n              minWidth: 0,\n              maxWidth: breakpoint\n            });\n          } else {\n            bQuery = (0, _json2mq[\"default\"])({\n              minWidth: breakpoints[index - 1] + 1,\n              maxWidth: breakpoint\n            });\n          } // when not using server side rendering\n\n\n          (0, _innerSliderUtils.canUseDOM)() && _this2.media(bQuery, function () {\n            _this2.setState({\n              breakpoint: breakpoint\n            });\n          });\n        }); // Register media query for full screen. Need to support resize from small to large\n        // convert javascript object to media query string\n\n        var query = (0, _json2mq[\"default\"])({\n          minWidth: breakpoints.slice(-1)[0]\n        });\n        (0, _innerSliderUtils.canUseDOM)() && this.media(query, function () {\n          _this2.setState({\n            breakpoint: null\n          });\n        });\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this._responsiveMediaHandlers.forEach(function (obj) {\n        obj.mql.removeListener(obj.listener);\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n\n      var settings;\n      var newProps;\n\n      if (this.state.breakpoint) {\n        newProps = this.props.responsive.filter(function (resp) {\n          return resp.breakpoint === _this3.state.breakpoint;\n        });\n        settings = newProps[0].settings === \"unslick\" ? \"unslick\" : (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _defaultProps[\"default\"]), this.props), newProps[0].settings);\n      } else {\n        settings = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _defaultProps[\"default\"]), this.props);\n      } // force scrolling by one if centerMode is on\n\n\n      if (settings.centerMode) {\n        if (settings.slidesToScroll > 1 && process.env.NODE_ENV !== \"production\") {\n          console.warn(\"slidesToScroll should be equal to 1 in centerMode, you are using \".concat(settings.slidesToScroll));\n        }\n\n        settings.slidesToScroll = 1;\n      } // force showing one slide and scrolling by one if the fade mode is on\n\n\n      if (settings.fade) {\n        if (settings.slidesToShow > 1 && process.env.NODE_ENV !== \"production\") {\n          console.warn(\"slidesToShow should be equal to 1 when fade is true, you're using \".concat(settings.slidesToShow));\n        }\n\n        if (settings.slidesToScroll > 1 && process.env.NODE_ENV !== \"production\") {\n          console.warn(\"slidesToScroll should be equal to 1 when fade is true, you're using \".concat(settings.slidesToScroll));\n        }\n\n        settings.slidesToShow = 1;\n        settings.slidesToScroll = 1;\n      } // makes sure that children is an array, even when there is only 1 child\n\n\n      var children = _react[\"default\"].Children.toArray(this.props.children); // Children may contain false or null, so we should filter them\n      // children may also contain string filled with spaces (in certain cases where we use jsx strings)\n\n\n      children = children.filter(function (child) {\n        if (typeof child === \"string\") {\n          return !!child.trim();\n        }\n\n        return !!child;\n      }); // rows and slidesPerRow logic is handled here\n\n      if (settings.variableWidth && (settings.rows > 1 || settings.slidesPerRow > 1)) {\n        console.warn(\"variableWidth is not supported in case of rows > 1 or slidesPerRow > 1\");\n        settings.variableWidth = false;\n      }\n\n      var newChildren = [];\n      var currentWidth = null;\n\n      for (var i = 0; i < children.length; i += settings.rows * settings.slidesPerRow) {\n        var newSlide = [];\n\n        for (var j = i; j < i + settings.rows * settings.slidesPerRow; j += settings.slidesPerRow) {\n          var row = [];\n\n          for (var k = j; k < j + settings.slidesPerRow; k += 1) {\n            if (settings.variableWidth && children[k].props.style) {\n              currentWidth = children[k].props.style.width;\n            }\n\n            if (k >= children.length) break;\n            row.push( /*#__PURE__*/_react[\"default\"].cloneElement(children[k], {\n              key: 100 * i + 10 * j + k,\n              tabIndex: -1,\n              style: {\n                width: \"\".concat(100 / settings.slidesPerRow, \"%\"),\n                display: \"inline-block\"\n              }\n            }));\n          }\n\n          newSlide.push( /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n            key: 10 * i + j\n          }, row));\n        }\n\n        if (settings.variableWidth) {\n          newChildren.push( /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n            key: i,\n            style: {\n              width: currentWidth\n            }\n          }, newSlide));\n        } else {\n          newChildren.push( /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n            key: i\n          }, newSlide));\n        }\n      }\n\n      if (settings === \"unslick\") {\n        var className = \"regular slider \" + (this.props.className || \"\");\n        return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n          className: className\n        }, children);\n      } else if (newChildren.length <= settings.slidesToShow) {\n        settings.unslick = true;\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(_innerSlider.InnerSlider, (0, _extends2[\"default\"])({\n        style: this.props.style,\n        ref: this.innerSliderRefHandler\n      }, settings), newChildren);\n    }\n  }]);\n  return Slider;\n}(_react[\"default\"].Component);\n\nexports[\"default\"] = Slider;","\"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 _LoadingOutlined = _interopRequireDefault(require(\"@ant-design/icons-svg/lib/asn/LoadingOutlined\"));\n\nvar _AntdIcon = _interopRequireDefault(require(\"../components/AntdIcon\")); // GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\n\n\nvar LoadingOutlined = function LoadingOutlined(props, ref) {\n  return React.createElement(_AntdIcon.default, Object.assign({}, props, {\n    ref: ref,\n    icon: _LoadingOutlined.default\n  }));\n};\n\nLoadingOutlined.displayName = 'LoadingOutlined';\n\nvar _default = React.forwardRef(LoadingOutlined);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar defaultProps = {\n  accessibility: true,\n  adaptiveHeight: false,\n  afterChange: null,\n  appendDots: function appendDots(dots) {\n    return /*#__PURE__*/_react[\"default\"].createElement(\"ul\", {\n      style: {\n        display: \"block\"\n      }\n    }, dots);\n  },\n  arrows: true,\n  autoplay: false,\n  autoplaySpeed: 3000,\n  beforeChange: null,\n  centerMode: false,\n  centerPadding: \"50px\",\n  className: \"\",\n  cssEase: \"ease\",\n  customPaging: function customPaging(i) {\n    return /*#__PURE__*/_react[\"default\"].createElement(\"button\", null, i + 1);\n  },\n  dots: false,\n  dotsClass: \"slick-dots\",\n  draggable: true,\n  easing: \"linear\",\n  edgeFriction: 0.35,\n  fade: false,\n  focusOnSelect: false,\n  infinite: true,\n  initialSlide: 0,\n  lazyLoad: null,\n  nextArrow: null,\n  onEdge: null,\n  onInit: null,\n  onLazyLoadError: null,\n  onReInit: null,\n  pauseOnDotsHover: false,\n  pauseOnFocus: false,\n  pauseOnHover: true,\n  prevArrow: null,\n  responsive: null,\n  rows: 1,\n  rtl: false,\n  slide: \"div\",\n  slidesPerRow: 1,\n  slidesToScroll: 1,\n  slidesToShow: 1,\n  speed: 500,\n  swipe: true,\n  swipeEvent: null,\n  swipeToSlide: false,\n  touchMove: true,\n  touchThreshold: 5,\n  useCSS: true,\n  useTransform: true,\n  variableWidth: false,\n  vertical: false,\n  waitForAnimate: true\n};\nvar _default = defaultProps;\nexports[\"default\"] = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Dots = void 0;\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _createSuper2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createSuper\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar getDotCount = function getDotCount(spec) {\n  var dots;\n\n  if (spec.infinite) {\n    dots = Math.ceil(spec.slideCount / spec.slidesToScroll);\n  } else {\n    dots = Math.ceil((spec.slideCount - spec.slidesToShow) / spec.slidesToScroll) + 1;\n  }\n\n  return dots;\n};\n\nvar Dots = /*#__PURE__*/function (_React$PureComponent) {\n  (0, _inherits2[\"default\"])(Dots, _React$PureComponent);\n\n  var _super = (0, _createSuper2[\"default\"])(Dots);\n\n  function Dots() {\n    (0, _classCallCheck2[\"default\"])(this, Dots);\n    return _super.apply(this, arguments);\n  }\n\n  (0, _createClass2[\"default\"])(Dots, [{\n    key: \"clickHandler\",\n    value: function clickHandler(options, e) {\n      // In Autoplay the focus stays on clicked button even after transition\n      // to next slide. That only goes away by click somewhere outside\n      e.preventDefault();\n      this.props.clickHandler(options);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this = this;\n\n      var dotCount = getDotCount({\n        slideCount: this.props.slideCount,\n        slidesToScroll: this.props.slidesToScroll,\n        slidesToShow: this.props.slidesToShow,\n        infinite: this.props.infinite\n      }); // Apply join & split to Array to pre-fill it for IE8\n      //\n      // Credit: http://stackoverflow.com/a/13735425/1849458\n\n      var _this$props = this.props,\n          onMouseEnter = _this$props.onMouseEnter,\n          onMouseOver = _this$props.onMouseOver,\n          onMouseLeave = _this$props.onMouseLeave;\n      var mouseEvents = {\n        onMouseEnter: onMouseEnter,\n        onMouseOver: onMouseOver,\n        onMouseLeave: onMouseLeave\n      };\n      var dots = Array.apply(null, Array(dotCount + 1).join(\"0\").split(\"\")).map(function (x, i) {\n        var leftBound = i * _this.props.slidesToScroll;\n        var rightBound = i * _this.props.slidesToScroll + (_this.props.slidesToScroll - 1);\n        var className = (0, _classnames[\"default\"])({\n          \"slick-active\": _this.props.currentSlide >= leftBound && _this.props.currentSlide <= rightBound\n        });\n        var dotOptions = {\n          message: \"dots\",\n          index: i,\n          slidesToScroll: _this.props.slidesToScroll,\n          currentSlide: _this.props.currentSlide\n        };\n\n        var onClick = _this.clickHandler.bind(_this, dotOptions);\n\n        return /*#__PURE__*/_react[\"default\"].createElement(\"li\", {\n          key: i,\n          className: className\n        }, /*#__PURE__*/_react[\"default\"].cloneElement(_this.props.customPaging(i), {\n          onClick: onClick\n        }));\n      });\n      return /*#__PURE__*/_react[\"default\"].cloneElement(this.props.appendDots(dots), (0, _objectSpread2[\"default\"])({\n        className: this.props.dotsClass\n      }, mouseEvents));\n    }\n  }]);\n  return Dots;\n}(_react[\"default\"].PureComponent);\n\nexports.Dots = Dots;","module.exports = __webpack_public_path__ + \"static/superset-logo-horiz-apache-ac1a91de27eed9f5c53944c555a39c6f.svg\";","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _LoadingOutlined = _interopRequireDefault(require('./lib/icons/LoadingOutlined'));\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    'default': obj\n  };\n}\n\nvar _default = _LoadingOutlined;\nexports.default = _default;\nmodule.exports = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.InnerSlider = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _objectSpread2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectSpread2\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _createSuper2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createSuper\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _initialState = _interopRequireDefault(require(\"./initial-state\"));\n\nvar _debounce = _interopRequireDefault(require(\"lodash/debounce\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _innerSliderUtils = require(\"./utils/innerSliderUtils\");\n\nvar _track = require(\"./track\");\n\nvar _dots = require(\"./dots\");\n\nvar _arrows = require(\"./arrows\");\n\nvar _resizeObserverPolyfill = _interopRequireDefault(require(\"resize-observer-polyfill\"));\n\nvar InnerSlider = /*#__PURE__*/function (_React$Component) {\n  (0, _inherits2[\"default\"])(InnerSlider, _React$Component);\n\n  var _super = (0, _createSuper2[\"default\"])(InnerSlider);\n\n  function InnerSlider(props) {\n    var _this;\n\n    (0, _classCallCheck2[\"default\"])(this, InnerSlider);\n    _this = _super.call(this, props);\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"listRefHandler\", function (ref) {\n      return _this.list = ref;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"trackRefHandler\", function (ref) {\n      return _this.track = ref;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"adaptHeight\", function () {\n      if (_this.props.adaptiveHeight && _this.list) {\n        var elem = _this.list.querySelector(\"[data-index=\\\"\".concat(_this.state.currentSlide, \"\\\"]\"));\n\n        _this.list.style.height = (0, _innerSliderUtils.getHeight)(elem) + \"px\";\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"UNSAFE_componentWillMount\", function () {\n      _this.ssrInit();\n\n      _this.props.onInit && _this.props.onInit();\n\n      if (_this.props.lazyLoad) {\n        var slidesToLoad = (0, _innerSliderUtils.getOnDemandLazySlides)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state));\n\n        if (slidesToLoad.length > 0) {\n          _this.setState(function (prevState) {\n            return {\n              lazyLoadedList: prevState.lazyLoadedList.concat(slidesToLoad)\n            };\n          });\n\n          if (_this.props.onLazyLoad) {\n            _this.props.onLazyLoad(slidesToLoad);\n          }\n        }\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"componentDidMount\", function () {\n      var spec = (0, _objectSpread2[\"default\"])({\n        listRef: _this.list,\n        trackRef: _this.track\n      }, _this.props);\n\n      _this.updateState(spec, true, function () {\n        _this.adaptHeight();\n\n        _this.props.autoplay && _this.autoPlay(\"update\");\n      });\n\n      if (_this.props.lazyLoad === \"progressive\") {\n        _this.lazyLoadTimer = setInterval(_this.progressiveLazyLoad, 1000);\n      }\n\n      _this.ro = new _resizeObserverPolyfill[\"default\"](function () {\n        if (_this.state.animating) {\n          _this.onWindowResized(false); // don't set trackStyle hence don't break animation\n\n\n          _this.callbackTimers.push(setTimeout(function () {\n            return _this.onWindowResized();\n          }, _this.props.speed));\n        } else {\n          _this.onWindowResized();\n        }\n      });\n\n      _this.ro.observe(_this.list);\n\n      Array.prototype.forEach.call(document.querySelectorAll(\".slick-slide\"), function (slide) {\n        slide.onfocus = _this.props.pauseOnFocus ? _this.onSlideFocus : null;\n        slide.onblur = _this.props.pauseOnFocus ? _this.onSlideBlur : null;\n      });\n\n      if (window.addEventListener) {\n        window.addEventListener(\"resize\", _this.onWindowResized);\n      } else {\n        window.attachEvent(\"onresize\", _this.onWindowResized);\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"componentWillUnmount\", function () {\n      if (_this.animationEndCallback) {\n        clearTimeout(_this.animationEndCallback);\n      }\n\n      if (_this.lazyLoadTimer) {\n        clearInterval(_this.lazyLoadTimer);\n      }\n\n      if (_this.callbackTimers.length) {\n        _this.callbackTimers.forEach(function (timer) {\n          return clearTimeout(timer);\n        });\n\n        _this.callbackTimers = [];\n      }\n\n      if (window.addEventListener) {\n        window.removeEventListener(\"resize\", _this.onWindowResized);\n      } else {\n        window.detachEvent(\"onresize\", _this.onWindowResized);\n      }\n\n      if (_this.autoplayTimer) {\n        clearInterval(_this.autoplayTimer);\n      }\n\n      _this.ro.disconnect();\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"UNSAFE_componentWillReceiveProps\", function (nextProps) {\n      var _this$props = _this.props,\n          autoplay = _this$props.autoplay,\n          autoplaySpeed = _this$props.autoplaySpeed;\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({\n        listRef: _this.list,\n        trackRef: _this.track\n      }, nextProps), _this.state);\n      var setTrackStyle = false;\n\n      for (var _i = 0, _Object$keys = Object.keys(_this.props); _i < _Object$keys.length; _i++) {\n        var key = _Object$keys[_i];\n\n        if (!nextProps.hasOwnProperty(key)) {\n          setTrackStyle = true;\n          break;\n        }\n\n        if ((0, _typeof2[\"default\"])(nextProps[key]) === \"object\" || typeof nextProps[key] === \"function\") {\n          continue;\n        }\n\n        if (nextProps[key] !== _this.props[key]) {\n          setTrackStyle = true;\n          break;\n        }\n      }\n\n      _this.updateState(spec, setTrackStyle, function () {\n        if (_this.state.currentSlide >= _react[\"default\"].Children.count(nextProps.children)) {\n          _this.changeSlide({\n            message: \"index\",\n            index: _react[\"default\"].Children.count(nextProps.children) - nextProps.slidesToShow,\n            currentSlide: _this.state.currentSlide\n          });\n        }\n\n        if (autoplay !== nextProps.autoplay || autoplaySpeed !== nextProps.autoplaySpeed) {\n          if (nextProps.autoplay) {\n            _this.autoPlay(\"update\");\n          } else {\n            _this.pause(\"paused\");\n          }\n        }\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"componentDidUpdate\", function () {\n      _this.checkImagesLoad();\n\n      _this.props.onReInit && _this.props.onReInit();\n\n      if (_this.props.lazyLoad) {\n        var slidesToLoad = (0, _innerSliderUtils.getOnDemandLazySlides)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state));\n\n        if (slidesToLoad.length > 0) {\n          _this.setState(function (prevState) {\n            return {\n              lazyLoadedList: prevState.lazyLoadedList.concat(slidesToLoad)\n            };\n          });\n\n          if (_this.props.onLazyLoad) {\n            _this.props.onLazyLoad(slidesToLoad);\n          }\n        }\n      } // if (this.props.onLazyLoad) {\n      //   this.props.onLazyLoad([leftMostSlide])\n      // }\n\n\n      _this.adaptHeight();\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onWindowResized\", function (setTrackStyle) {\n      if (_this.debouncedResize) _this.debouncedResize.cancel();\n      _this.debouncedResize = (0, _debounce[\"default\"])(function () {\n        return _this.resizeWindow(setTrackStyle);\n      }, 50);\n\n      _this.debouncedResize();\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"resizeWindow\", function () {\n      var setTrackStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      var isTrackMounted = Boolean(_this.track && _this.track.node); // prevent warning: setting state on unmounted component (server side rendering)\n\n      if (!isTrackMounted) return;\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({\n        listRef: _this.list,\n        trackRef: _this.track\n      }, _this.props), _this.state);\n\n      _this.updateState(spec, setTrackStyle, function () {\n        if (_this.props.autoplay) _this.autoPlay(\"update\");else _this.pause(\"paused\");\n      }); // animating state should be cleared while resizing, otherwise autoplay stops working\n\n\n      _this.setState({\n        animating: false\n      });\n\n      clearTimeout(_this.animationEndCallback);\n      delete _this.animationEndCallback;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"updateState\", function (spec, setTrackStyle, callback) {\n      var updatedState = (0, _innerSliderUtils.initializedState)(spec);\n      spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), updatedState), {}, {\n        slideIndex: updatedState.currentSlide\n      });\n      var targetLeft = (0, _innerSliderUtils.getTrackLeft)(spec);\n      spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, spec), {}, {\n        left: targetLeft\n      });\n      var trackStyle = (0, _innerSliderUtils.getTrackCSS)(spec);\n\n      if (setTrackStyle || _react[\"default\"].Children.count(_this.props.children) !== _react[\"default\"].Children.count(spec.children)) {\n        updatedState[\"trackStyle\"] = trackStyle;\n      }\n\n      _this.setState(updatedState, callback);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"ssrInit\", function () {\n      if (_this.props.variableWidth) {\n        var _trackWidth = 0,\n            _trackLeft = 0;\n        var childrenWidths = [];\n        var preClones = (0, _innerSliderUtils.getPreClones)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state), {}, {\n          slideCount: _this.props.children.length\n        }));\n        var postClones = (0, _innerSliderUtils.getPostClones)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state), {}, {\n          slideCount: _this.props.children.length\n        }));\n\n        _this.props.children.forEach(function (child) {\n          childrenWidths.push(child.props.style.width);\n          _trackWidth += child.props.style.width;\n        });\n\n        for (var i = 0; i < preClones; i++) {\n          _trackLeft += childrenWidths[childrenWidths.length - 1 - i];\n          _trackWidth += childrenWidths[childrenWidths.length - 1 - i];\n        }\n\n        for (var _i2 = 0; _i2 < postClones; _i2++) {\n          _trackWidth += childrenWidths[_i2];\n        }\n\n        for (var _i3 = 0; _i3 < _this.state.currentSlide; _i3++) {\n          _trackLeft += childrenWidths[_i3];\n        }\n\n        var _trackStyle = {\n          width: _trackWidth + \"px\",\n          left: -_trackLeft + \"px\"\n        };\n\n        if (_this.props.centerMode) {\n          var currentWidth = \"\".concat(childrenWidths[_this.state.currentSlide], \"px\");\n          _trackStyle.left = \"calc(\".concat(_trackStyle.left, \" + (100% - \").concat(currentWidth, \") / 2 ) \");\n        }\n\n        _this.setState({\n          trackStyle: _trackStyle\n        });\n\n        return;\n      }\n\n      var childrenCount = _react[\"default\"].Children.count(_this.props.children);\n\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state), {}, {\n        slideCount: childrenCount\n      });\n      var slideCount = (0, _innerSliderUtils.getPreClones)(spec) + (0, _innerSliderUtils.getPostClones)(spec) + childrenCount;\n      var trackWidth = 100 / _this.props.slidesToShow * slideCount;\n      var slideWidth = 100 / slideCount;\n      var trackLeft = -slideWidth * ((0, _innerSliderUtils.getPreClones)(spec) + _this.state.currentSlide) * trackWidth / 100;\n\n      if (_this.props.centerMode) {\n        trackLeft += (100 - slideWidth * trackWidth / 100) / 2;\n      }\n\n      var trackStyle = {\n        width: trackWidth + \"%\",\n        left: trackLeft + \"%\"\n      };\n\n      _this.setState({\n        slideWidth: slideWidth + \"%\",\n        trackStyle: trackStyle\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"checkImagesLoad\", function () {\n      var images = _this.list.querySelectorAll(\".slick-slide img\");\n\n      var imagesCount = images.length,\n          loadedCount = 0;\n      Array.prototype.forEach.call(images, function (image) {\n        var handler = function handler() {\n          return ++loadedCount && loadedCount >= imagesCount && _this.onWindowResized();\n        };\n\n        if (!image.onclick) {\n          image.onclick = function () {\n            return image.parentNode.focus();\n          };\n        } else {\n          var prevClickHandler = image.onclick;\n\n          image.onclick = function () {\n            prevClickHandler();\n            image.parentNode.focus();\n          };\n        }\n\n        if (!image.onload) {\n          if (_this.props.lazyLoad) {\n            image.onload = function () {\n              _this.adaptHeight();\n\n              _this.callbackTimers.push(setTimeout(_this.onWindowResized, _this.props.speed));\n            };\n          } else {\n            image.onload = handler;\n\n            image.onerror = function () {\n              handler();\n              _this.props.onLazyLoadError && _this.props.onLazyLoadError();\n            };\n          }\n        }\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"progressiveLazyLoad\", function () {\n      var slidesToLoad = [];\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state);\n\n      for (var index = _this.state.currentSlide; index < _this.state.slideCount + (0, _innerSliderUtils.getPostClones)(spec); index++) {\n        if (_this.state.lazyLoadedList.indexOf(index) < 0) {\n          slidesToLoad.push(index);\n          break;\n        }\n      }\n\n      for (var _index = _this.state.currentSlide - 1; _index >= -(0, _innerSliderUtils.getPreClones)(spec); _index--) {\n        if (_this.state.lazyLoadedList.indexOf(_index) < 0) {\n          slidesToLoad.push(_index);\n          break;\n        }\n      }\n\n      if (slidesToLoad.length > 0) {\n        _this.setState(function (state) {\n          return {\n            lazyLoadedList: state.lazyLoadedList.concat(slidesToLoad)\n          };\n        });\n\n        if (_this.props.onLazyLoad) {\n          _this.props.onLazyLoad(slidesToLoad);\n        }\n      } else {\n        if (_this.lazyLoadTimer) {\n          clearInterval(_this.lazyLoadTimer);\n          delete _this.lazyLoadTimer;\n        }\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slideHandler\", function (index) {\n      var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var _this$props2 = _this.props,\n          asNavFor = _this$props2.asNavFor,\n          beforeChange = _this$props2.beforeChange,\n          onLazyLoad = _this$props2.onLazyLoad,\n          speed = _this$props2.speed,\n          afterChange = _this$props2.afterChange; // capture currentslide before state is updated\n\n      var currentSlide = _this.state.currentSlide;\n\n      var _slideHandler = (0, _innerSliderUtils.slideHandler)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({\n        index: index\n      }, _this.props), _this.state), {}, {\n        trackRef: _this.track,\n        useCSS: _this.props.useCSS && !dontAnimate\n      })),\n          state = _slideHandler.state,\n          nextState = _slideHandler.nextState;\n\n      if (!state) return;\n      beforeChange && beforeChange(currentSlide, state.currentSlide);\n      var slidesToLoad = state.lazyLoadedList.filter(function (value) {\n        return _this.state.lazyLoadedList.indexOf(value) < 0;\n      });\n      onLazyLoad && slidesToLoad.length > 0 && onLazyLoad(slidesToLoad);\n\n      _this.setState(state, function () {\n        asNavFor && asNavFor.innerSlider.slideHandler(index);\n        if (!nextState) return;\n        _this.animationEndCallback = setTimeout(function () {\n          var animating = nextState.animating,\n              firstBatch = (0, _objectWithoutProperties2[\"default\"])(nextState, [\"animating\"]);\n\n          _this.setState(firstBatch, function () {\n            _this.callbackTimers.push(setTimeout(function () {\n              return _this.setState({\n                animating: animating\n              });\n            }, 10));\n\n            afterChange && afterChange(state.currentSlide);\n            delete _this.animationEndCallback;\n          });\n        }, speed);\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"changeSlide\", function (options) {\n      var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state);\n      var targetSlide = (0, _innerSliderUtils.changeSlide)(spec, options);\n      if (targetSlide !== 0 && !targetSlide) return;\n\n      if (dontAnimate === true) {\n        _this.slideHandler(targetSlide, dontAnimate);\n      } else {\n        _this.slideHandler(targetSlide);\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"clickHandler\", function (e) {\n      if (_this.clickable === false) {\n        e.stopPropagation();\n        e.preventDefault();\n      }\n\n      _this.clickable = true;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"keyHandler\", function (e) {\n      var dir = (0, _innerSliderUtils.keyHandler)(e, _this.props.accessibility, _this.props.rtl);\n      dir !== \"\" && _this.changeSlide({\n        message: dir\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"selectHandler\", function (options) {\n      _this.changeSlide(options);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"disableBodyScroll\", function () {\n      var preventDefault = function preventDefault(e) {\n        e = e || window.event;\n        if (e.preventDefault) e.preventDefault();\n        e.returnValue = false;\n      };\n\n      window.ontouchmove = preventDefault;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"enableBodyScroll\", function () {\n      window.ontouchmove = null;\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"swipeStart\", function (e) {\n      if (_this.props.verticalSwiping) {\n        _this.disableBodyScroll();\n      }\n\n      var state = (0, _innerSliderUtils.swipeStart)(e, _this.props.swipe, _this.props.draggable);\n      state !== \"\" && _this.setState(state);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"swipeMove\", function (e) {\n      var state = (0, _innerSliderUtils.swipeMove)(e, (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state), {}, {\n        trackRef: _this.track,\n        listRef: _this.list,\n        slideIndex: _this.state.currentSlide\n      }));\n      if (!state) return;\n\n      if (state[\"swiping\"]) {\n        _this.clickable = false;\n      }\n\n      _this.setState(state);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"swipeEnd\", function (e) {\n      var state = (0, _innerSliderUtils.swipeEnd)(e, (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state), {}, {\n        trackRef: _this.track,\n        listRef: _this.list,\n        slideIndex: _this.state.currentSlide\n      }));\n      if (!state) return;\n      var triggerSlideHandler = state[\"triggerSlideHandler\"];\n      delete state[\"triggerSlideHandler\"];\n\n      _this.setState(state);\n\n      if (triggerSlideHandler === undefined) return;\n\n      _this.slideHandler(triggerSlideHandler);\n\n      if (_this.props.verticalSwiping) {\n        _this.enableBodyScroll();\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickPrev\", function () {\n      // this and fellow methods are wrapped in setTimeout\n      // to make sure initialize setState has happened before\n      // any of such methods are called\n      _this.callbackTimers.push(setTimeout(function () {\n        return _this.changeSlide({\n          message: \"previous\"\n        });\n      }, 0));\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickNext\", function () {\n      _this.callbackTimers.push(setTimeout(function () {\n        return _this.changeSlide({\n          message: \"next\"\n        });\n      }, 0));\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"slickGoTo\", function (slide) {\n      var dontAnimate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      slide = Number(slide);\n      if (isNaN(slide)) return \"\";\n\n      _this.callbackTimers.push(setTimeout(function () {\n        return _this.changeSlide({\n          message: \"index\",\n          index: slide,\n          currentSlide: _this.state.currentSlide\n        }, dontAnimate);\n      }, 0));\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"play\", function () {\n      var nextIndex;\n\n      if (_this.props.rtl) {\n        nextIndex = _this.state.currentSlide - _this.props.slidesToScroll;\n      } else {\n        if ((0, _innerSliderUtils.canGoNext)((0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state))) {\n          nextIndex = _this.state.currentSlide + _this.props.slidesToScroll;\n        } else {\n          return false;\n        }\n      }\n\n      _this.slideHandler(nextIndex);\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"autoPlay\", function (playType) {\n      if (_this.autoplayTimer) {\n        clearInterval(_this.autoplayTimer);\n      }\n\n      var autoplaying = _this.state.autoplaying;\n\n      if (playType === \"update\") {\n        if (autoplaying === \"hovered\" || autoplaying === \"focused\" || autoplaying === \"paused\") {\n          return;\n        }\n      } else if (playType === \"leave\") {\n        if (autoplaying === \"paused\" || autoplaying === \"focused\") {\n          return;\n        }\n      } else if (playType === \"blur\") {\n        if (autoplaying === \"paused\" || autoplaying === \"hovered\") {\n          return;\n        }\n      }\n\n      _this.autoplayTimer = setInterval(_this.play, _this.props.autoplaySpeed + 50);\n\n      _this.setState({\n        autoplaying: \"playing\"\n      });\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"pause\", function (pauseType) {\n      if (_this.autoplayTimer) {\n        clearInterval(_this.autoplayTimer);\n        _this.autoplayTimer = null;\n      }\n\n      var autoplaying = _this.state.autoplaying;\n\n      if (pauseType === \"paused\") {\n        _this.setState({\n          autoplaying: \"paused\"\n        });\n      } else if (pauseType === \"focused\") {\n        if (autoplaying === \"hovered\" || autoplaying === \"playing\") {\n          _this.setState({\n            autoplaying: \"focused\"\n          });\n        }\n      } else {\n        // pauseType  is 'hovered'\n        if (autoplaying === \"playing\") {\n          _this.setState({\n            autoplaying: \"hovered\"\n          });\n        }\n      }\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onDotsOver\", function () {\n      return _this.props.autoplay && _this.pause(\"hovered\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onDotsLeave\", function () {\n      return _this.props.autoplay && _this.state.autoplaying === \"hovered\" && _this.autoPlay(\"leave\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onTrackOver\", function () {\n      return _this.props.autoplay && _this.pause(\"hovered\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onTrackLeave\", function () {\n      return _this.props.autoplay && _this.state.autoplaying === \"hovered\" && _this.autoPlay(\"leave\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onSlideFocus\", function () {\n      return _this.props.autoplay && _this.pause(\"focused\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"onSlideBlur\", function () {\n      return _this.props.autoplay && _this.state.autoplaying === \"focused\" && _this.autoPlay(\"blur\");\n    });\n    (0, _defineProperty2[\"default\"])((0, _assertThisInitialized2[\"default\"])(_this), \"render\", function () {\n      var className = (0, _classnames[\"default\"])(\"slick-slider\", _this.props.className, {\n        \"slick-vertical\": _this.props.vertical,\n        \"slick-initialized\": true\n      });\n      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.props), _this.state);\n      var trackProps = (0, _innerSliderUtils.extractObject)(spec, [\"fade\", \"cssEase\", \"speed\", \"infinite\", \"centerMode\", \"focusOnSelect\", \"currentSlide\", \"lazyLoad\", \"lazyLoadedList\", \"rtl\", \"slideWidth\", \"slideHeight\", \"listHeight\", \"vertical\", \"slidesToShow\", \"slidesToScroll\", \"slideCount\", \"trackStyle\", \"variableWidth\", \"unslick\", \"centerPadding\"]);\n      var pauseOnHover = _this.props.pauseOnHover;\n      trackProps = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, trackProps), {}, {\n        onMouseEnter: pauseOnHover ? _this.onTrackOver : null,\n        onMouseLeave: pauseOnHover ? _this.onTrackLeave : null,\n        onMouseOver: pauseOnHover ? _this.onTrackOver : null,\n        focusOnSelect: _this.props.focusOnSelect ? _this.selectHandler : null\n      });\n      var dots;\n\n      if (_this.props.dots === true && _this.state.slideCount >= _this.props.slidesToShow) {\n        var dotProps = (0, _innerSliderUtils.extractObject)(spec, [\"dotsClass\", \"slideCount\", \"slidesToShow\", \"currentSlide\", \"slidesToScroll\", \"clickHandler\", \"children\", \"customPaging\", \"infinite\", \"appendDots\"]);\n        var pauseOnDotsHover = _this.props.pauseOnDotsHover;\n        dotProps = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, dotProps), {}, {\n          clickHandler: _this.changeSlide,\n          onMouseEnter: pauseOnDotsHover ? _this.onDotsLeave : null,\n          onMouseOver: pauseOnDotsHover ? _this.onDotsOver : null,\n          onMouseLeave: pauseOnDotsHover ? _this.onDotsLeave : null\n        });\n        dots = /*#__PURE__*/_react[\"default\"].createElement(_dots.Dots, dotProps);\n      }\n\n      var prevArrow, nextArrow;\n      var arrowProps = (0, _innerSliderUtils.extractObject)(spec, [\"infinite\", \"centerMode\", \"currentSlide\", \"slideCount\", \"slidesToShow\", \"prevArrow\", \"nextArrow\"]);\n      arrowProps.clickHandler = _this.changeSlide;\n\n      if (_this.props.arrows) {\n        prevArrow = /*#__PURE__*/_react[\"default\"].createElement(_arrows.PrevArrow, arrowProps);\n        nextArrow = /*#__PURE__*/_react[\"default\"].createElement(_arrows.NextArrow, arrowProps);\n      }\n\n      var verticalHeightStyle = null;\n\n      if (_this.props.vertical) {\n        verticalHeightStyle = {\n          height: _this.state.listHeight\n        };\n      }\n\n      var centerPaddingStyle = null;\n\n      if (_this.props.vertical === false) {\n        if (_this.props.centerMode === true) {\n          centerPaddingStyle = {\n            padding: \"0px \" + _this.props.centerPadding\n          };\n        }\n      } else {\n        if (_this.props.centerMode === true) {\n          centerPaddingStyle = {\n            padding: _this.props.centerPadding + \" 0px\"\n          };\n        }\n      }\n\n      var listStyle = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, verticalHeightStyle), centerPaddingStyle);\n      var touchMove = _this.props.touchMove;\n      var listProps = {\n        className: \"slick-list\",\n        style: listStyle,\n        onClick: _this.clickHandler,\n        onMouseDown: touchMove ? _this.swipeStart : null,\n        onMouseMove: _this.state.dragging && touchMove ? _this.swipeMove : null,\n        onMouseUp: touchMove ? _this.swipeEnd : null,\n        onMouseLeave: _this.state.dragging && touchMove ? _this.swipeEnd : null,\n        onTouchStart: touchMove ? _this.swipeStart : null,\n        onTouchMove: _this.state.dragging && touchMove ? _this.swipeMove : null,\n        onTouchEnd: touchMove ? _this.swipeEnd : null,\n        onTouchCancel: _this.state.dragging && touchMove ? _this.swipeEnd : null,\n        onKeyDown: _this.props.accessibility ? _this.keyHandler : null\n      };\n      var innerSliderProps = {\n        className: className,\n        dir: \"ltr\",\n        style: _this.props.style\n      };\n\n      if (_this.props.unslick) {\n        listProps = {\n          className: \"slick-list\"\n        };\n        innerSliderProps = {\n          className: className\n        };\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", innerSliderProps, !_this.props.unslick ? prevArrow : \"\", /*#__PURE__*/_react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({\n        ref: _this.listRefHandler\n      }, listProps), /*#__PURE__*/_react[\"default\"].createElement(_track.Track, (0, _extends2[\"default\"])({\n        ref: _this.trackRefHandler\n      }, trackProps), _this.props.children)), !_this.props.unslick ? nextArrow : \"\", !_this.props.unslick ? dots : \"\");\n    });\n    _this.list = null;\n    _this.track = null;\n    _this.state = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _initialState[\"default\"]), {}, {\n      currentSlide: _this.props.initialSlide,\n      slideCount: _react[\"default\"].Children.count(_this.props.children)\n    });\n    _this.callbackTimers = [];\n    _this.clickable = true;\n    _this.debouncedResize = null;\n    return _this;\n  }\n\n  return InnerSlider;\n}(_react[\"default\"].Component);\n\nexports.InnerSlider = InnerSlider;","import { Col } from '../grid';\nexport default Col;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.supersetTheme = exports.styled = exports.withTheme = exports.ThemeProvider = exports.useTheme = void 0;\n\nvar _styled = _interopRequireDefault(require(\"@emotion/styled\"));\n\nvar _emotionTheming = require(\"emotion-theming\");\n\nexports.useTheme = _emotionTheming.useTheme;\nexports.ThemeProvider = _emotionTheming.ThemeProvider;\nexports.withTheme = _emotionTheming.withTheme;\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n/**\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 */\n\n\nvar defaultTheme = {\n  borderRadius: 4,\n  colors: {\n    primary: {\n      base: '#20A7C9',\n      dark1: '#1A85A0',\n      dark2: '#156378',\n      light1: '#79CADE',\n      light2: '#A5DAE9',\n      light3: '#D2EDF4',\n      light4: '#E9F6F9',\n      light5: '#F3F8FA'\n    },\n    secondary: {\n      base: '#444E7C',\n      dark1: '#363E63',\n      dark2: '#282E4A',\n      dark3: '#1B1F31',\n      light1: '#8E94B0',\n      light2: '#B4B8CA',\n      light3: '#D9DBE4',\n      light4: '#ECEEF2',\n      light5: '#F5F5F8'\n    },\n    grayscale: {\n      base: '#666666',\n      dark1: '#323232',\n      dark2: '#000000',\n      light1: '#B2B2B2',\n      light2: '#E0E0E0',\n      light3: '#F0F0F0',\n      light4: '#F7F7F7',\n      light5: '#FFFFFF'\n    },\n    error: {\n      base: '#E04355',\n      dark1: '#A7323F',\n      dark2: '#6F212A',\n      light1: '#EFA1AA',\n      light2: '#FAEDEE'\n    },\n    warning: {\n      base: '#FF7F44',\n      dark1: '#BF5E33',\n      dark2: '#7F3F21',\n      light1: '#FEC0A1',\n      light2: '#FFF2EC'\n    },\n    alert: {\n      base: '#FCC700',\n      dark1: '#BC9501',\n      dark2: '#7D6300',\n      light1: '#FDE380',\n      light2: '#FEF9E6'\n    },\n    success: {\n      base: '#5AC189',\n      dark1: '#439066',\n      dark2: '#2B6144',\n      light1: '#ACE1C4',\n      light2: '#EEF8F3'\n    },\n    info: {\n      base: '#66BCFE',\n      dark1: '#4D8CBE',\n      dark2: '#315E7E',\n      light1: '#B3DEFE',\n      light2: '#EFF8FE'\n    }\n  },\n  opacity: {\n    light: '10%',\n    mediumLight: '35%',\n    mediumHeavy: '60%',\n    heavy: '80%'\n  },\n  typography: {\n    families: {\n      sansSerif: \"'Inter', Helvetica, Arial\",\n      serif: \"Georgia, 'Times New Roman', Times, serif\",\n      monospace: \"'Fira Code', 'Courier New', monospace\"\n    },\n    weights: {\n      light: 200,\n      normal: 400,\n      bold: 700\n    },\n    sizes: {\n      xxs: 9,\n      xs: 10,\n      s: 12,\n      m: 14,\n      l: 16,\n      xl: 21,\n      xxl: 28\n    }\n  },\n  zIndex: {\n    aboveDashboardCharts: 10,\n    dropdown: 11,\n    max: 3000\n  },\n  transitionTiming: 0.3,\n  gridUnit: 4\n};\nvar styled = _styled.default;\nexports.styled = styled;\nvar supersetTheme = defaultTheme;\nexports.supersetTheme = supersetTheme;\nvar _default = styled;\nexports.default = _default;","import { createContext } from 'react';\nvar RowContext = /*#__PURE__*/createContext({});\nexport default RowContext;","var camel2hyphen = require('string-convert/camel2hyphen');\n\nvar isDimension = function isDimension(feature) {\n  var re = /[height|width]$/;\n  return re.test(feature);\n};\n\nvar obj2mq = function obj2mq(obj) {\n  var mq = '';\n  var features = Object.keys(obj);\n  features.forEach(function (feature, index) {\n    var value = obj[feature];\n    feature = camel2hyphen(feature); // Add px to dimension features\n\n    if (isDimension(feature) && typeof value === 'number') {\n      value = value + 'px';\n    }\n\n    if (value === true) {\n      mq += feature;\n    } else if (value === false) {\n      mq += 'not ' + feature;\n    } else {\n      mq += '(' + feature + ': ' + value + ')';\n    }\n\n    if (index < features.length - 1) {\n      mq += ' and ';\n    }\n  });\n  return mq;\n};\n\nvar json2mq = function json2mq(query) {\n  var mq = '';\n\n  if (typeof query === 'string') {\n    return query;\n  } // Handling array of media queries\n\n\n  if (query instanceof Array) {\n    query.forEach(function (q, index) {\n      mq += obj2mq(q);\n\n      if (index < query.length - 1) {\n        mq += ', ';\n      }\n    });\n    return mq;\n  } // Handling single media query\n\n\n  return obj2mq(query);\n};\n\nmodule.exports = json2mq;","/*!\n * github-buttons v2.14.0\n * (c) 2020 なつき\n * @license BSD-2-Clause\n */\nvar document = window.document;\nvar Math = window.Math;\nvar HTMLElement = window.HTMLElement;\nvar XMLHttpRequest = window.XMLHttpRequest;\n\nvar createElementInDocument = function createElementInDocument(document) {\n  return function (tag, props, children) {\n    var el = document.createElement(tag);\n\n    if (props != null) {\n      for (var prop in props) {\n        var val = props[prop];\n\n        if (val != null) {\n          if (el[prop] != null) {\n            el[prop] = val;\n          } else {\n            el.setAttribute(prop, val);\n          }\n        }\n      }\n    }\n\n    if (children != null) {\n      for (var i = 0, len = children.length; i < len; i++) {\n        var child = children[i];\n        el.appendChild(typeof child === 'string' ? document.createTextNode(child) : child);\n      }\n    }\n\n    return el;\n  };\n};\n\nvar createElement = createElementInDocument(document);\n\nvar dispatchOnce = function dispatchOnce(func) {\n  var onceToken;\n  return function () {\n    if (!onceToken) {\n      onceToken = 1;\n      func.apply(this, arguments);\n    }\n  };\n};\n\nvar hasOwnProperty = function hasOwnProperty(obj, prop) {\n  return {}.hasOwnProperty.call(obj, prop);\n};\n\nvar toLowerCase = function toLowerCase(obj) {\n  return ('' + obj).toLowerCase();\n};\n\nvar name = \"github-buttons\";\nvar version = \"2.14.0\";\nvar iframeURL = 'https://' + (\n/* istanbul ignore next */\n'unpkg.com/' + name + '@' + version + '/dist') + '/buttons.html';\nvar domain = 'github.com';\nvar apiBaseURL = 'https://api.' + domain;\nvar useXHR = XMLHttpRequest && 'prototype' in XMLHttpRequest && 'withCredentials' in XMLHttpRequest.prototype;\nvar useShadowDOM = useXHR && HTMLElement && 'attachShadow' in HTMLElement.prototype && !('prototype' in HTMLElement.prototype.attachShadow);\n\nvar onEvent = function onEvent(target, eventName, func) {\n  /* istanbul ignore else: IE lt 9 */\n  if (target.addEventListener) {\n    target.addEventListener(eventName, func, false);\n  } else {\n    target.attachEvent('on' + eventName, func);\n  }\n};\n\nvar offEvent = function offEvent(target, eventName, func) {\n  /* istanbul ignore else: IE lt 9 */\n  if (target.removeEventListener) {\n    target.removeEventListener(eventName, func, false);\n  } else {\n    target.detachEvent('on' + eventName, func);\n  }\n};\n\nvar onceEvent = function onceEvent(target, eventName, func) {\n  var callback = function callback() {\n    offEvent(target, eventName, callback);\n    return func.apply(this, arguments);\n  };\n\n  onEvent(target, eventName, callback);\n};\n\nvar onceReadyStateChange =\n/* istanbul ignore next: IE lt 9 */\nfunction onceReadyStateChange(target, regex, func) {\n  var eventName = 'readystatechange';\n\n  var callback = function callback() {\n    if (regex.test(target.readyState)) {\n      offEvent(target, eventName, callback);\n      return func.apply(this, arguments);\n    }\n  };\n\n  onEvent(target, eventName, callback);\n};\n\nvar parseOptions = function parseOptions(anchor) {\n  var options = {\n    href: anchor.href,\n    title: anchor.title,\n    'aria-label': anchor.getAttribute('aria-label')\n  };\n  var ref = ['icon', 'color-scheme', 'text', 'size', 'show-count'];\n\n  for (var i = 0, len = ref.length; i < len; i++) {\n    var attribute = 'data-' + ref[i];\n    options[attribute] = anchor.getAttribute(attribute);\n  }\n\n  if (options['data-text'] == null) {\n    options['data-text'] = anchor.textContent || anchor.innerText;\n  }\n\n  return options;\n};\n\nvar buttonsCssText = \"body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}\";\nvar light = \".btn{color:#24292e;background-color:#eff3f6;border-color:#c5c9cc;border-color:rgba(27,31,35,.2);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23fafbfc'/%3e%3cstop offset='90%25' stop-color='%23eff3f6'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #fafbfc, #eff3f6 90%);background-image:linear-gradient(180deg, #fafbfc, #eff3f6 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFFAFBFC', endColorstr='#FFEEF2F5')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#e6ebf1;background-position:-0.5em;border-color:#9fa4a9;border-color:rgba(27,31,35,.35);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f0f3f6'/%3e%3cstop offset='90%25' stop-color='%23e6ebf1'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #f0f3f6, #e6ebf1 90%);background-image:linear-gradient(180deg, #f0f3f6, #e6ebf1 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF0F3F6', endColorstr='#FFE5EAF0')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e9ecef;border-color:#a1a4a8;border-color:rgba(27,31,35,.35);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#24292e;background-color:#fff;border-color:#d1d2d3;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#0366d6}.octicon-heart{color:#ea4aaa}\";\nvar dark = \".btn{color:#fafbfc;background-color:#202428;border-color:#1f2327;border-color:rgba(27,31,35,.2);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232f363d'/%3e%3cstop offset='90%25' stop-color='%23202428'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #2f363d, #202428 90%);background-image:linear-gradient(180deg, #2f363d, #202428 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2F363D', endColorstr='#FF1E2226')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#1b1f23;background-position:-0.5em;border-color:#1b1f23;border-color:rgba(27,31,35,.5);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232b3137'/%3e%3cstop offset='90%25' stop-color='%231b1f23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #2b3137, #1b1f23 90%);background-image:linear-gradient(180deg, #2b3137, #1b1f23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2B3137', endColorstr='#FF191D21')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#181b1f;border-color:#1a1d21;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#fafbfc;background-color:#1b1f23;border-color:#1b1f23;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#2188ff}.octicon-heart{color:#ec6cb9}\";\n\nvar stringify = function stringify(obj, sep, eq, encodeURIComponent) {\n  if (sep == null) {\n    sep = '&';\n  }\n\n  if (eq == null) {\n    eq = '=';\n  }\n\n  if (encodeURIComponent == null) {\n    encodeURIComponent = window.encodeURIComponent;\n  }\n\n  var params = [];\n\n  for (var name in obj) {\n    var value = obj[name];\n\n    if (value != null) {\n      params.push(encodeURIComponent(name) + eq + encodeURIComponent(value));\n    }\n  }\n\n  return params.join(sep);\n};\n\nvar parse = function parse(str, sep, eq, decodeURIComponent) {\n  if (sep == null) {\n    sep = '&';\n  }\n\n  if (eq == null) {\n    eq = '=';\n  }\n\n  if (decodeURIComponent == null) {\n    decodeURIComponent = window.decodeURIComponent;\n  }\n\n  var obj = {};\n  var params = str.split(sep);\n\n  for (var i = 0, len = params.length; i < len; i++) {\n    var entry = params[i];\n\n    if (entry !== '') {\n      var ref = entry.split(eq);\n      obj[decodeURIComponent(ref[0])] = ref[1] != null ? decodeURIComponent(ref.slice(1).join(eq)) : undefined;\n    }\n  }\n\n  return obj;\n};\n\nvar widgetColorSchemes = {\n  light: light,\n  dark: dark\n};\n\nvar getColorSchemeMediaQuery = function getColorSchemeMediaQuery(systemColorScheme, widgetColorScheme) {\n  return '@media(prefers-color-scheme:' + systemColorScheme + '){' + widgetColorSchemes[hasOwnProperty(widgetColorSchemes, widgetColorScheme) ? widgetColorScheme : systemColorScheme] + '}';\n};\n\nvar getColorScheme = function getColorScheme(declarations) {\n  if (declarations == null) {\n    return widgetColorSchemes.light;\n  }\n\n  if (hasOwnProperty(widgetColorSchemes, declarations)) {\n    return widgetColorSchemes[declarations];\n  }\n\n  var colorSchemes = parse(declarations, ';', ':', function (str) {\n    return str.replace(/^[ \\t\\n\\f\\r]+|[ \\t\\n\\f\\r]+$/g, '');\n  });\n  return widgetColorSchemes[hasOwnProperty(widgetColorSchemes, colorSchemes['no-preference']) ? colorSchemes['no-preference'] : 'light'] + getColorSchemeMediaQuery('light', colorSchemes.light) + getColorSchemeMediaQuery('dark', colorSchemes.dark);\n};\n\nvar data = {\n  \"mark-github\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z\\\"></path>\"\n      }\n    }\n  },\n  \"heart\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z\\\"></path>\"\n      }\n    }\n  },\n  \"eye\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z\\\"></path>\"\n      }\n    }\n  },\n  \"star\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z\\\"></path>\"\n      }\n    }\n  },\n  \"repo-forked\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z\\\"></path>\"\n      }\n    }\n  },\n  \"repo-template\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M6 .75A.75.75 0 016.75 0h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 .75zm5 0a.75.75 0 01.75-.75h1.5a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V1.5h-.75A.75.75 0 0111 .75zM4.992.662a.75.75 0 01-.636.848c-.436.063-.783.41-.846.846a.75.75 0 01-1.485-.212A2.501 2.501 0 014.144.025a.75.75 0 01.848.637zM2.75 4a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 012.75 4zm10.5 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5a.75.75 0 01.75-.75zM2.75 8a.75.75 0 01.75.75v.268A1.72 1.72 0 013.75 9h.5a.75.75 0 010 1.5h-.5a.25.25 0 00-.25.25v.75c0 .28.114.532.3.714a.75.75 0 01-1.05 1.072A2.495 2.495 0 012 11.5V8.75A.75.75 0 012.75 8zm10.5 0a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-2.5a.75.75 0 010-1.5h1.75v-2h-.75a.75.75 0 010-1.5h.75v-.25a.75.75 0 01.75-.75zM6 9.75A.75.75 0 016.75 9h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 9.75zm-1 2.5v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z\\\"></path>\"\n      }\n    }\n  },\n  \"issue-opened\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z\\\"></path>\"\n      }\n    }\n  },\n  \"download\": {\n    \"heights\": {\n      \"16\": {\n        \"width\": 16,\n        \"path\": \"<path fill-rule=\\\"evenodd\\\" d=\\\"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z\\\"></path>\"\n      }\n    }\n  }\n};\n\nvar octicon = function octicon(icon, height) {\n  icon = toLowerCase(icon).replace(/^octicon-/, '');\n\n  if (!hasOwnProperty(data, icon)) {\n    icon = 'mark-github';\n  }\n\n  var defaultHeight = height >= 24 &&\n  /* istanbul ignore next */\n  24 in data[icon].heights ?\n  /* istanbul ignore next */\n  24 : 16;\n  var svg = data[icon].heights[defaultHeight];\n  return '<svg viewBox=\"0 0 ' + svg.width + ' ' + defaultHeight + '\" width=\"' + height * svg.width / defaultHeight + '\" height=\"' + height + '\" class=\"octicon octicon-' + icon + '\" aria-hidden=\"true\">' + svg.path + '</svg>';\n};\n\nvar queues = {};\n\nvar fetch = function fetch(url, func) {\n  var queue = queues[url] || (queues[url] = []);\n\n  if (queue.push(func) > 1) {\n    return;\n  }\n\n  var callback = dispatchOnce(function () {\n    delete queues[url];\n\n    while (func = queue.shift()) {\n      func.apply(null, arguments);\n    }\n  });\n\n  if (useXHR) {\n    var xhr = new XMLHttpRequest();\n    onEvent(xhr, 'abort', callback);\n    onEvent(xhr, 'error', callback);\n    onEvent(xhr, 'load', function () {\n      var data;\n\n      try {\n        data = JSON.parse(this.responseText);\n      } catch (error) {\n        callback(error);\n        return;\n      }\n\n      callback(this.status !== 200, data);\n    });\n    xhr.open('GET', url);\n    xhr.send();\n  } else {\n    var contentWindow = this || window;\n\n    contentWindow._ = function (json) {\n      contentWindow._ = null;\n      callback(json.meta.status !== 200, json.data);\n    };\n\n    var script = createElementInDocument(contentWindow.document)('script', {\n      async: true,\n      src: url + (url.indexOf('?') !== -1 ? '&' : '?') + 'callback=_'\n    });\n\n    var onloadend =\n    /* istanbul ignore next: IE lt 9 */\n    function onloadend() {\n      if (contentWindow._) {\n        contentWindow._({\n          meta: {}\n        });\n      }\n    };\n\n    onEvent(script, 'load', onloadend);\n    onEvent(script, 'error', onloadend);\n    /* istanbul ignore if: IE lt 9 */\n\n    if (script.readyState) {\n      onceReadyStateChange(script, /de|m/, onloadend);\n    }\n\n    contentWindow.document.getElementsByTagName('head')[0].appendChild(script);\n  }\n};\n\nvar render = function render(root, options, func) {\n  var createElement = createElementInDocument(root.ownerDocument);\n  var style = root.appendChild(createElement('style', {\n    type: 'text/css'\n  }));\n  var cssText = buttonsCssText + getColorScheme(options['data-color-scheme']);\n  /* istanbul ignore if: IE lt 9 */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = cssText;\n  } else {\n    style.appendChild(root.ownerDocument.createTextNode(cssText));\n  }\n\n  var isLarge = toLowerCase(options['data-size']) === 'large';\n  var btn = createElement('a', {\n    className: 'btn',\n    href: options.href,\n    rel: 'noopener',\n    target: '_blank',\n    title: options.title || undefined,\n    'aria-label': options['aria-label'] || undefined,\n    innerHTML: octicon(options['data-icon'], isLarge ? 16 : 14)\n  }, [' ', createElement('span', {}, [options['data-text'] || ''])]);\n  var widget = root.appendChild(createElement('div', {\n    className: 'widget' + (isLarge ? ' widget-lg' : '')\n  }, [btn]));\n  var hostname = btn.hostname.replace(/\\.$/, '');\n\n  if (hostname.length < domain.length || ('.' + hostname).substring(hostname.length - domain.length) !== '.' + domain) {\n    btn.removeAttribute('href');\n    func(widget);\n    return;\n  }\n\n  var path = (' /' + btn.pathname).split(/\\/+/);\n\n  if ((hostname === domain || hostname === 'gist.' + domain) && path[3] === 'archive' || hostname === domain && path[3] === 'releases' && (path[4] === 'download' || path[4] === 'latest' && path[5] === 'download') || hostname === 'codeload.' + domain) {\n    btn.target = '_top';\n  }\n\n  if (toLowerCase(options['data-show-count']) !== 'true' || hostname !== domain) {\n    func(widget);\n    return;\n  }\n\n  var href, property;\n\n  if (!path[2] && path[1]) {\n    property = 'followers';\n    href = '?tab=followers';\n  } else if (!path[3] && path[2]) {\n    property = 'stargazers_count';\n    href = '/stargazers';\n  } else if (!path[4] && path[3] === 'subscription') {\n    property = 'subscribers_count';\n    href = '/watchers';\n  } else if (!path[4] && path[3] === 'fork') {\n    property = 'forks_count';\n    href = '/network/members';\n  } else if (path[3] === 'issues') {\n    property = 'open_issues_count';\n    href = '/issues';\n  } else {\n    func(widget);\n    return;\n  }\n\n  var api = path[2] ? '/repos/' + path[1] + '/' + path[2] : '/users/' + path[1];\n  fetch.call(this, apiBaseURL + api, function (error, json) {\n    if (!error) {\n      var data = json[property];\n      widget.appendChild(createElement('a', {\n        className: 'social-count',\n        href: json.html_url + href,\n        rel: 'noopener',\n        target: '_blank',\n        'aria-label': data + ' ' + property.replace(/_count$/, '').replace('_', ' ').slice(0, data < 2 ? -1 : undefined) + ' on GitHub'\n      }, [('' + data).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')]));\n    }\n\n    func(widget);\n  });\n};\n\nvar devicePixelRatio = window.devicePixelRatio ||\n/* istanbul ignore next */\n1;\n\nvar ceilPixel = function ceilPixel(px) {\n  return (devicePixelRatio > 1 ? Math.ceil(Math.round(px * devicePixelRatio) / devicePixelRatio * 2) / 2 : Math.ceil(px)) || 0;\n};\n\nvar get = function get(el) {\n  var width = el.offsetWidth;\n  var height = el.offsetHeight;\n\n  if (el.getBoundingClientRect) {\n    var boundingClientRect = el.getBoundingClientRect();\n    width = Math.max(width, ceilPixel(boundingClientRect.width));\n    height = Math.max(height, ceilPixel(boundingClientRect.height));\n  }\n\n  return [width, height];\n};\n\nvar set = function set(el, size) {\n  el.style.width = size[0] + 'px';\n  el.style.height = size[1] + 'px';\n};\n\nvar render$1 = function render$1(options, func) {\n  if (options == null || func == null) {\n    return;\n  }\n\n  if (options.getAttribute) {\n    options = parseOptions(options);\n  }\n\n  if (useShadowDOM) {\n    var host = createElement('span');\n    render(host.attachShadow({\n      mode: 'closed'\n    }), options, function () {\n      func(host);\n    });\n  } else {\n    var iframe = createElement('iframe', {\n      src: 'javascript:0',\n      title: options.title || undefined,\n      allowtransparency: true,\n      scrolling: 'no',\n      frameBorder: 0\n    });\n    set(iframe, [0, 0]);\n    iframe.style.border = 'none';\n\n    var callback = function callback() {\n      var contentWindow = iframe.contentWindow;\n      var body;\n\n      try {\n        body = contentWindow.document.body;\n      } catch (_)\n      /* istanbul ignore next: IE 11 */\n      {\n        document.body.appendChild(iframe.parentNode.removeChild(iframe));\n        return;\n      }\n\n      offEvent(iframe, 'load', callback);\n      render.call(contentWindow, body, options, function (widget) {\n        var size = get(widget);\n        iframe.parentNode.removeChild(iframe);\n        onceEvent(iframe, 'load', function () {\n          set(iframe, size);\n        });\n        iframe.src = iframeURL + '#' + (iframe.name = stringify(options));\n        func(iframe);\n      });\n    };\n\n    onEvent(iframe, 'load', callback);\n    document.body.appendChild(iframe);\n  }\n};\n\nexport { render$1 as render };","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 '../../style/index.css'; // style dependencies\n// deps-lint-skip: grid\n\nimport '../../grid/style/css';","\"use strict\"; // This icon file is generated automatically.\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar LoadingOutlined = {\n  \"icon\": {\n    \"tag\": \"svg\",\n    \"attrs\": {\n      \"viewBox\": \"0 0 1024 1024\",\n      \"focusable\": \"false\"\n    },\n    \"children\": [{\n      \"tag\": \"path\",\n      \"attrs\": {\n        \"d\": \"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\"\n      }\n    }]\n  },\n  \"name\": \"loading\",\n  \"theme\": \"outlined\"\n};\nexports.default = LoadingOutlined;","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport React__default, { createElement, forwardRef } from 'react';\nimport { ThemeContext } from '@emotion/core';\nimport weakMemoize from '@emotion/weak-memoize';\nimport _extends from '@babel/runtime/helpers/extends';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\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(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(source).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n      throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n    }\n\n    return mergedTheme;\n  }\n\n  if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n    throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n  }\n\n  return _objectSpread({}, outerTheme, {}, theme);\n};\n\nvar createCacheWithTheme = weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n});\n\nvar ThemeProvider = function ThemeProvider(props) {\n  return createElement(ThemeContext.Consumer, null, function (theme) {\n    if (props.theme !== theme) {\n      theme = createCacheWithTheme(theme)(props.theme);\n    }\n\n    return createElement(ThemeContext.Provider, {\n      value: theme\n    }, props.children);\n  });\n}; // should we change this to be forwardRef/withCSSContext style so it doesn't merge with props?\n\n\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n\n  var render = function render(props, ref) {\n    return createElement(ThemeContext.Consumer, null, function (theme) {\n      return createElement(Component, _extends({\n        theme: theme,\n        ref: ref\n      }, props));\n    });\n  }; // $FlowFixMe\n\n\n  var WithTheme = forwardRef(render);\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nfunction useTheme() {\n  return React__default.useContext(ThemeContext);\n}\n\nexport { ThemeProvider, useTheme, withTheme };"],"sourceRoot":""}