{"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/possibleConstructorReturn.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/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","_possibleConstructorReturn","self","assertThisInitialized","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","source","getOwnPropertyDescriptors","defineProperties","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","_isNativeReflectConstruct","result","Super","NewTarget","constructor","_PureComponent","subClass","superClass","TypeError","_inherits","GitHubButton","Constructor","protoProps","staticProps","instance","_classCallCheck","$","_","paint","reset","appendChild","then","parentNode","replaceChild","lastChild","DbImage","imageName","useStaticQuery","allImages","edges","childImageSharp","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","_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","data","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","rel","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-27f6c637f9a33a9d3d64.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      targetSlide: animationSlide\n    };\n    nextState = {\n      animating: false,\n      targetSlide: animationSlide\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 Ritter',\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: 'Trino',\n    href: 'https://trino.io/',\n    imgName: 'trino2.jpg',\n  },\n  {\n    title: 'Rockset',\n    href: 'https://rockset.com/',\n    imgName: 'rockset.png',\n  },\n  {\n    title: 'Vertica',\n    href: 'https://www.vertica.com/',\n    imgName: 'vertica.png',\n  },\n  {\n    title: 'Hologres',\n    href: 'https://www.alibabacloud.com/product/hologres',\n    imgName: 'hologres.png',\n  },\n  {\n    title: 'IBM Netezza Performance Server',\n    href: 'https://www.ibm.com/products/netezza',\n    imgName: 'netezza.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}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport assertThisInitialized from \"@babel/runtime/helpers/esm/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 _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 \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/home/runner/work/superset/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\n\nvar GitHubButton = /*#__PURE__*/function (_PureComponent) {\n  _inherits(GitHubButton, _PureComponent);\n\n  var _super = _createSuper(GitHubButton);\n\n  function GitHubButton(props) {\n    var _this;\n\n    _classCallCheck(this, GitHubButton);\n\n    _this = _super.call(this, props);\n    _this.$ = React.createRef();\n    _this._ = React.createRef();\n    return _this;\n  }\n\n  _createClass(GitHubButton, [{\n    key: \"render\",\n    value: function render() {\n      return React.createElement('span', {\n        ref: this.$\n      }, React.createElement('a', _objectSpread(_objectSpread({}, this.props), {}, {\n        ref: this._\n      }), this.props.children));\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.paint();\n    }\n  }, {\n    key: \"getSnapshotBeforeUpdate\",\n    value: function getSnapshotBeforeUpdate() {\n      this.reset();\n      return null;\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.paint();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.reset();\n    }\n  }, {\n    key: \"paint\",\n    value: function paint() {\n      var _this2 = this;\n\n      var _ = this.$.current.appendChild(document.createElement('span'));\n\n      import(\n      /* webpackMode: \"eager\" */\n      'github-buttons').then(function (_ref) {\n        var render = _ref.render;\n        render(_.appendChild(_this2._.current), function (el) {\n          try {\n            _.parentNode.replaceChild(el, _);\n          } catch (_) {}\n        });\n      });\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.$.current.replaceChild(this._.current, this.$.current.lastChild);\n    }\n  }]);\n\n  return GitHubButton;\n}(PureComponent);\n\nexport default GitHubButton;","import setPrototypeOf from \"@babel/runtime/helpers/esm/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}\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 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  .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    li {\n      padding: 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);\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/superset\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Star apache/superset on GitHub\"\n                >\n                  Star\n                </GitHubButton>\n              </span>\n              <span className=\"github-button\">\n                <GitHubButton\n                  href=\"https://github.com/apache/superset/subscription\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Watch apache/superset on GitHub\"\n                >\n                  Watch\n                </GitHubButton>\n              </span>\n              <span className=\"github-button\">\n                <GitHubButton\n                  href=\"https://github.com/apache/superset/fork\"\n                  data-size=\"large\"\n                  data-show-count=\"true\"\n                  aria-label=\"Fork apache/superset on GitHub\"\n                >\n                  Fork\n                </GitHubButton>\n              </span>\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 SQLAlchemy, 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/explorer5.jpg\" alt=\"\" />\n                </div>\n                <div className=\"imageContainer\">\n                  <img src=\"/images/dashboard3.png\" alt=\"\" />\n                </div>\n                <div className=\"imageContainer\">\n                  <img src=\"/images/sqllab5.jpg\" alt=\"\" />\n                </div>\n              </Carousel>\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, imgName: imageName, width, height,\n                  }) => (\n                    <li>\n                      <DbImage\n                        {...{\n                          imageName,\n                          width,\n                          height,\n                          alt: title,\n                        }}\n                      />\n                    </li>\n                  ),\n                )}\n              </ul>\n              <span className=\"databaseSub\">\n                ... and many other\n                <a href=\"docs/databases/installing-database-drivers\">\n                  {' '}\n                  compatible databases\n                  {' '}\n                </a>\n              </span>\n            </div>\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":""}