{"version":3,"sources":["webpack:///./node_modules/@ant-design/react-slick/lib/track.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/gatsby-image/index.js","webpack:///./node_modules/string-convert/camel2hyphen.js","webpack:///./node_modules/@ant-design/react-slick/lib/initial-state.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/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/react-slick/lib/inner-slider.js","webpack:///./node_modules/@superset-ui/style/esm/index.js","webpack:///./node_modules/json2mq/index.js","webpack:///./node_modules/github-buttons/dist/buttons.esm.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","targetSlide","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","useCSS","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","NextArrow","PrevArrow","options","preventDefault","clickHandler","prevClasses","prevHandler","bind","prevArrowProps","display","customProps","prevArrow","type","_React$PureComponent2","_super2","nextClasses","nextHandler","canGoNext","nextArrowProps","nextArrow","clamp","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","number","lowerBound","upperBound","max","min","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","finalSlide","animationLeft","finalLeft","animationSlide","nextState","swipeLeft","indexOffset","previousInt","slideOffset","previousTargetSlide","direction","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","activeSlide","currentLeft","breakpoint","counter","indexes","navigables","prevNavigable","n","swipedSlide","querySelectorAll","from","every","slide","offsetTop","offsetLeft","currentIndex","dataset","keysArray","reduce","hasOwnProperty","console","error","trackHeight","trackChildren","WebkitTransition","useTransform","WebkitTransform","transform","msTransform","height","window","addEventListener","attachEvent","marginTop","marginLeft","unslick","targetLeft","slidesToOffset","targetSlideIndex","trackElem","childNodes","_ref","right","_ref2","document","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","prototype","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","isHydrated","imageRef","createRef","placeholderRef","handleImageLoaded","_proto","componentDidMount","setState","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","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","paddingBottom","aspectRatio","bottom","dangerouslySetInnerHTML","__html","divStyle","Component","defaultProps","fixedObject","shape","isRequired","string","srcWebp","fluidObject","requireFixedOrFluid","originalPropTypes","propName","componentName","_PropTypes$checkPropT","Error","checkPropTypes","oneOfType","arrayOf","bool","oneOf","_default","module","str","replace","toLowerCase","currentDirection","initialized","pmc","name","github","Databases","href","imgName","Carousel","saveSlick","slick","onWindowResized","innerSlider","autoPlay","renderCarousel","_classNames","_a","getPrefixCls","effect","prefixCls","dotPosition","getDotPosition","enableDots","dots","dsClass","dotsClass","leading","prevProps","goTo","removeEventListener","cancel","_this$props$dotPositi","slickNext","slickPrev","dontAnimate","slickGoTo","arrows","AntdIcon","assign","icon","displayName","_defineProperty","obj","enumerable","configurable","writable","_defineProperties","i","descriptor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_typeof","Symbol","iterator","constructor","_possibleConstructorReturn","self","ReferenceError","_getPrototypeOf","getPrototypeOf","ownKeys","enumerableOnly","getOwnPropertySymbols","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","size","sm","md","role","afterChange","rel","_innerSlider","_json2mq","_defaultProps","Slider","pause","_responsiveMediaHandlers","query","handler","mql","listener","addListener","responsive","breakpoints","breakpt","sort","x","y","bQuery","minWidth","removeListener","settings","newProps","_this3","resp","toArray","trim","rows","slidesPerRow","warn","newChildren","currentWidth","j","row","k","InnerSlider","innerSliderRefHandler","adaptiveHeight","appendDots","autoplaySpeed","beforeChange","customPaging","easing","onInit","onLazyLoadError","onReInit","pauseOnDotsHover","pauseOnFocus","pauseOnHover","touchMove","Dots","_rightBound","rightBound","_leftBound","leftBound","dotOptions","_typeof2","_objectWithoutProperties2","_initialState","_debounce","_track","_dots","_arrows","_resizeObserverPolyfill","list","track","prevState","onLazyLoad","updateState","adaptHeight","lazyLoadTimer","setInterval","progressiveLazyLoad","ro","callbackTimers","setTimeout","onfocus","onSlideFocus","onblur","onSlideBlur","animationEndCallback","clearTimeout","clearInterval","timer","detachEvent","autoplayTimer","disconnect","checkImagesLoad","setTrackStyle","didPropsChange","debouncedResize","resizeWindow","isTrackMounted","Boolean","callback","updatedState","_trackWidth","_trackLeft","childrenWidths","preClones","postClones","_i","_i2","_trackStyle","trackLeft","images","imagesCount","loadedCount","onclick","prevClickHandler","focus","onload","onerror","_index","asNavFor","_slideHandler","asNavForIndex","firstBatch","nodes","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","touchEnd","onTouchCancel","onKeyDown","innerSliderProps","listRefHandler","trackRefHandler","ssrState","ssrInit","_i3","_Object$keys","styled","withTheme","ThemeProvider","useTheme","_styled","_emotionTheming","_core","borderRadius","dark1","light1","light2","light3","light4","light5","dark3","light","mediumLight","mediumHeavy","heavy","typography","families","sansSerif","serif","monospace","weights","normal","bold","xxs","xs","s","m","l","xl","xxl","zIndex","aboveDashboardCharts","dropdown","transitionTiming","gridUnit","camel2hyphen","obj2mq","features","feature","test","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","split","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","getTheme","outerTheme","createCacheWithTheme","Consumer","Provider","WithTheme","useContext"],"mappings":"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","file":"component---src-pages-index-tsx-c550f180ad40b6212269.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 focusedSlide;\n\n  if (spec.targetSlide < 0) {\n    focusedSlide = spec.targetSlide + spec.slideCount;\n  } else if (spec.targetSlide >= spec.slideCount) {\n    focusedSlide = spec.targetSlide - spec.slideCount;\n  } else {\n    focusedSlide = spec.targetSlide;\n  }\n\n  var slickCurrent = index === focusedSlide;\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\n    if (spec.useCSS) {\n      style.transition = \"opacity \" + spec.speed + \"ms \" + spec.cssEase + \", \" + \"visibility \" + spec.speed + \"ms \" + spec.cssEase;\n    }\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;","\"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.clamp = clamp;\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\nfunction clamp(number, lowerBound, upperBound) {\n  return Math.max(lowerBound, Math.min(number, upperBound));\n}\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  var targetSlide = infinite ? index : clamp(index, 0, slideCount - 1);\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    if (!infinite && animationSlide + slidesToShow >= slideCount) {\n      finalSlide = slideCount - slidesToShow;\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        targetSlide: targetSlide\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        targetSlide: targetSlide\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        targetSlide: targetSlide\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      previousTargetSlide = spec.targetSlide,\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\n    if (!infinite) {\n      targetSlide = previousTargetSlide - slidesToScroll;\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\n    if (!infinite) {\n      targetSlide = previousTargetSlide + slidesToScroll;\n    }\n  } else if (options.message === \"dots\") {\n    // Click on dots\n    targetSlide = options.index * options.slidesToScroll;\n  } else if (options.message === \"children\") {\n    // Click on the slides\n    targetSlide = options.index;\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\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      swipeToSlide = spec.swipeToSlide,\n      scrolling = spec.scrolling,\n      onSwipe = spec.onSwipe,\n      targetSlide = spec.targetSlide,\n      currentSlide = spec.currentSlide,\n      infinite = spec.infinite;\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    var activeSlide = infinite ? currentSlide : targetSlide;\n\n    switch (swipeDirection) {\n      case \"left\":\n      case \"up\":\n        newSlide = activeSlide + getSlideCount(spec);\n        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;\n        state[\"currentDirection\"] = 0;\n        break;\n\n      case \"right\":\n      case \"down\":\n        newSlide = activeSlide - getSlideCount(spec);\n        slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;\n        state[\"currentDirection\"] = 1;\n        break;\n\n      default:\n        slideCount = activeSlide;\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 (// eslint-disable-next-line no-prototype-builtins\n    keysArray.reduce(function (value, key) {\n      return value && spec.hasOwnProperty(key);\n    }, true) ? null : console.error(\"Keys Missing:\", spec)\n  );\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;","\"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    logDeprecationNotice(\"resolutions\", \"the gatsby-image v2 prop \\\"fixed\\\"\");\n    delete convertedProps.resolutions;\n  }\n\n  if (sizes) {\n    convertedProps.fluid = sizes;\n    logDeprecationNotice(\"sizes\", \"the gatsby-image v2 prop \\\"fluid\\\"\");\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    }), srcSet && /*#__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      isHydrated: false\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    this.setState({\n      isHydrated: isBrowser\n    });\n\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 imageVariants = fluid || fixed; // Abort early if missing image data (#25371)\n\n    if (!imageVariants) {\n      return null;\n    }\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    }; // Initial client render state needs to match SSR until hydration finishes.\n    // Once hydration completes, render again to update to the correct image.\n    // `imageVariants` is always an Array type at this point due to `convertProps()`\n\n    var image = !this.state.isHydrated ? imageVariants[0] : getCurrentSrcData(imageVariants);\n\n    if (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 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;","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;","\"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  targetSlide: 0\n};\nvar _default = initialState;\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 _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: 'Dremio',\n    href: 'https://dremio.com/',\n    imgName: 'dremio.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/evan/GitHub/incubator-superset_preset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"/Users/evan/GitHub/incubator-superset_preset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/Users/evan/GitHub/incubator-superset_preset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"/Users/evan/GitHub/incubator-superset_preset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/Users/evan/GitHub/incubator-superset_preset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/Users/evan/GitHub/incubator-superset_preset/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 nofollow\"\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: \"componentDidMount\",\n    value: function componentDidMount() {\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\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 _innerSliderUtils = require(\"./utils/innerSliderUtils\");\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$props = this.props,\n          onMouseEnter = _this$props.onMouseEnter,\n          onMouseOver = _this$props.onMouseOver,\n          onMouseLeave = _this$props.onMouseLeave,\n          infinite = _this$props.infinite,\n          slidesToScroll = _this$props.slidesToScroll,\n          slidesToShow = _this$props.slidesToShow,\n          slideCount = _this$props.slideCount,\n          currentSlide = _this$props.currentSlide;\n      var dotCount = getDotCount({\n        slideCount: slideCount,\n        slidesToScroll: slidesToScroll,\n        slidesToShow: slidesToShow,\n        infinite: infinite\n      });\n      var mouseEvents = {\n        onMouseEnter: onMouseEnter,\n        onMouseOver: onMouseOver,\n        onMouseLeave: onMouseLeave\n      };\n      var dots = [];\n\n      for (var i = 0; i < dotCount; i++) {\n        var _rightBound = (i + 1) * slidesToScroll - 1;\n\n        var rightBound = infinite ? _rightBound : (0, _innerSliderUtils.clamp)(_rightBound, 0, slideCount - 1);\n\n        var _leftBound = rightBound - (slidesToScroll - 1);\n\n        var leftBound = infinite ? _leftBound : (0, _innerSliderUtils.clamp)(_leftBound, 0, slideCount - 1);\n        var className = (0, _classnames[\"default\"])({\n          \"slick-active\": infinite ? currentSlide >= leftBound && currentSlide <= rightBound : currentSlide === leftBound\n        });\n        var dotOptions = {\n          message: \"dots\",\n          index: i,\n          slidesToScroll: slidesToScroll,\n          currentSlide: currentSlide\n        };\n        var onClick = this.clickHandler.bind(this, dotOptions);\n        dots = dots.concat( /*#__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\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\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.InnerSlider = void 0;\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\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 _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), \"componentDidMount\", function () {\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      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), \"componentDidUpdate\", function (prevProps) {\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      var spec = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({\n        listRef: _this.list,\n        trackRef: _this.track\n      }, _this.props), _this.state);\n\n      var setTrackStyle = _this.didPropsChange(prevProps);\n\n      setTrackStyle && _this.updateState(spec, setTrackStyle, function () {\n        if (_this.state.currentSlide >= _react[\"default\"].Children.count(_this.props.children)) {\n          _this.changeSlide({\n            message: \"index\",\n            index: _react[\"default\"].Children.count(_this.props.children) - _this.props.slidesToShow,\n            currentSlide: _this.state.currentSlide\n          });\n        }\n\n        if (prevProps.autoplay !== _this.props.autoplay || prevProps.autoplaySpeed !== _this.props.autoplaySpeed) {\n          if (_this.props.autoplay) {\n            _this.autoPlay(\"update\");\n          } else {\n            _this.pause(\"paused\");\n          }\n        }\n      });\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 _i = 0; _i < postClones; _i++) {\n          _trackWidth += childrenWidths[_i];\n        }\n\n        for (var _i2 = 0; _i2 < _this.state.currentSlide; _i2++) {\n          _trackLeft += childrenWidths[_i2];\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        return {\n          trackStyle: _trackStyle\n        };\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      return {\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$props = _this.props,\n          asNavFor = _this$props.asNavFor,\n          beforeChange = _this$props.beforeChange,\n          onLazyLoad = _this$props.onLazyLoad,\n          speed = _this$props.speed,\n          afterChange = _this$props.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      if (!_this.props.waitForAnimate && _this.animationEndCallback) {\n        clearTimeout(_this.animationEndCallback);\n        afterChange && afterChange(currentSlide);\n        delete _this.animationEndCallback;\n      }\n\n      _this.setState(state, function () {\n        // asNavForIndex check is to avoid recursive calls of slideHandler in waitForAnimate=false mode\n        if (asNavFor && _this.asNavForIndex !== index) {\n          _this.asNavForIndex = index;\n          asNavFor.innerSlider.slideHandler(index);\n        }\n\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      _this.props.autoplay && _this.autoPlay(\"update\");\n\n      if (_this.props.focusOnSelect) {\n        var nodes = _this.list.querySelectorAll(\".slick-current\");\n\n        nodes[0] && nodes[0].focus();\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), \"touchEnd\", function (e) {\n      _this.swipeEnd(e);\n\n      _this.clickable = true;\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\", \"targetSlide\", \"useCSS\"]);\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.clickable ? _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.touchEnd : 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\n    var ssrState = _this.ssrInit();\n\n    _this.state = (0, _objectSpread2[\"default\"])((0, _objectSpread2[\"default\"])({}, _this.state), ssrState);\n    return _this;\n  }\n\n  (0, _createClass2[\"default\"])(InnerSlider, [{\n    key: \"didPropsChange\",\n    value: function didPropsChange(prevProps) {\n      var setTrackStyle = false;\n\n      for (var _i3 = 0, _Object$keys = Object.keys(this.props); _i3 < _Object$keys.length; _i3++) {\n        var key = _Object$keys[_i3]; // eslint-disable-next-line no-prototype-builtins\n\n        if (!prevProps.hasOwnProperty(key)) {\n          setTrackStyle = true;\n          break;\n        }\n\n        if ((0, _typeof2[\"default\"])(prevProps[key]) === \"object\" || typeof prevProps[key] === \"function\") {\n          continue;\n        }\n\n        if (prevProps[key] !== this.props[key]) {\n          setTrackStyle = true;\n          break;\n        }\n      }\n\n      return setTrackStyle || _react[\"default\"].Children.count(this.props.children) !== _react[\"default\"].Children.count(prevProps.children);\n    }\n  }]);\n  return InnerSlider;\n}(_react[\"default\"].Component);\n\nexports.InnerSlider = InnerSlider;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.supersetTheme = exports.styled = exports.css = 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\nvar _core = require(\"@emotion/core\");\n\nexports.css = _core.css;\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;","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 _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":""}