{"version":3,"sources":["webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/util/url.js","webpack:///./node_modules/react-use/lib/useEffectOnce.js","webpack:///./node_modules/react-use/lib/useWindowScroll.js","webpack:///./node_modules/react-side-effect/lib/index.js","webpack:///./node_modules/react-use/lib/util.js","webpack:///./static/logo.png","webpack:///./node_modules/@rocketseat/gatsby-theme-docs-core/util/url.js","webpack:///./node_modules/shallowequal/index.js","webpack:///./node_modules/react-icons/lib/esm/iconsManifest.js","webpack:///./node_modules/react-icons/lib/esm/iconContext.js","webpack:///./node_modules/react-icons/lib/esm/iconBase.js","webpack:///./node_modules/url-join/lib/url-join.js","webpack:///./node_modules/react-helmet/lib/Helmet.js","webpack:///./node_modules/react-fast-compare/index.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/SEO.js","webpack:///./node_modules/react-use/lib/useRafState.js","webpack:///./node_modules/react-helmet/lib/HelmetConstants.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/react-use/lib/useUnmount.js","webpack:///./node_modules/fast-deep-equal/react.js","webpack:///./node_modules/react-use/lib/useWindowSize.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Docs/TOC/styles.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Docs/TOC/index.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/util/slug.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Sidebar/styles.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Sidebar/ExternalLink/index.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Sidebar/InternalLink/index.js","webpack:///./src/@rocketseat/gatsby-theme-docs/components/Logo.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Sidebar/index.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs-core/src/hooks/useSidebar.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Header.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Overlay.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Layout/styles.js","webpack:///./node_modules/@rocketseat/gatsby-theme-docs/src/components/Layout/index.js","webpack:///./node_modules/react-helmet/lib/HelmetUtils.js"],"names":["module","exports","isExternalUrl","url","RegExp","test","Object","defineProperty","value","react_1","default","effect","useEffect","tslib_1","util_1","useRafState_1","__importDefault","_a","x","isClient","window","pageXOffset","y","pageYOffset","state","setState","handler","addEventListener","capture","passive","removeEventListener","_interopDefault","ex","React","React__default","shallowEqual","_defineProperty","obj","key","enumerable","configurable","writable","canUseDOM","document","createElement","reducePropsToState","handleStateChangeOnClient","mapStateOnServer","Error","WrappedComponent","mountedInstances","emitChange","map","instance","props","SideEffect","_Component","subClass","superClass","apply","this","arguments","prototype","create","constructor","__proto__","peek","rewind","recordedState","undefined","_proto","shouldComponentUpdate","nextProps","componentWillMount","push","componentDidUpdate","componentWillUnmount","index","indexOf","splice","render","Component","displayName","name","getDisplayName","isDeepEqual","off","on","args","_i","length","normalizeBasePath","basePath","link","replace","resolveLink","objA","objB","compare","compareContext","ret","call","keysA","keys","keysB","bHasOwnProperty","hasOwnProperty","bind","idx","valueA","valueB","DefaultContext","color","size","className","style","attr","IconContext","__assign","assign","t","s","i","n","p","__rest","e","getOwnPropertySymbols","GenIcon","data","IconBase","Tree2Element","tree","node","tag","child","elem","conf","computedSize","title","svgProps","stroke","fill","strokeWidth","height","width","xmlns","children","Consumer","normalize","strArray","resultArray","TypeError","match","first","shift","component","str","join","parts","split","slice","definition","__esModule","Helmet","_extends","target","source","_createClass","defineProperties","descriptor","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_propTypes2","_reactSideEffect2","_reactFastCompare2","_HelmetUtils","_HelmetConstants","_objectWithoutProperties","_classCallCheck","_possibleConstructorReturn","self","ReferenceError","_class","_temp","HelmetSideEffects","handleClientStateChange","HelmetExport","_React$Component","HelmetWrapper","setPrototypeOf","_inherits","mapNestedChildrenToProps","nestedChildren","type","TAG_NAMES","SCRIPT","NOSCRIPT","innerHTML","STYLE","cssText","flattenArrayTypeChildren","_ref","_extends2","arrayTypeChildren","newChildProps","concat","mapObjectTypeChildren","_ref2","_extends3","_extends4","newProps","TITLE","titleAttributes","BODY","bodyAttributes","HTML","htmlAttributes","mapArrayTypeChildrenToProps","newFlattenedProps","forEach","arrayChildName","_extends5","warnOnInvalidChildren","mapChildrenToProps","_this2","Children","_child$props","childProps","convertReactPropstoHtmlAttributes","LINK","META","_props","set","propTypes","base","object","oneOfType","arrayOf","defaultTitle","string","defer","bool","encodeSpecialCharacters","meta","noscript","onChangeClientState","func","script","titleTemplate","defaultProps","mappedState","baseTag","linkTags","metaTags","noscriptTags","scriptTags","styleTags","renderStatic","isArray","Array","keyList","hasProp","hasElementType","Element","a","b","equal","arrA","arrB","dateA","Date","dateB","getTime","regexpA","regexpB","toString","$$typeof","error","message","number","console","warn","SEO","description","slug","image","useStaticQuery","site","siteMetadata","siteTitle","siteTitleShort","siteUrl","siteImage","siteDescription","siteLanguage","siteAuthor","siteIcon","metaTitle","metaUrl","urljoin","metaImage","metaDescription","schemaOrgJSONLD","alternateName","lang","rel","href","content","httpEquiv","property","JSON","stringify","useUnmount_1","initialState","frame","useRef","useState","setRafState","useCallback","cancelAnimationFrame","current","requestAnimationFrame","ATTRIBUTE_NAMES","BASE","HEAD","REACT_TAG_MAP","VALID_TAG_NAMES","TAG_PROPERTIES","CHARSET","CSS_TEXT","HREF","HTTPEQUIV","INNER_HTML","ITEM_PROP","NAME","PROPERTY","REL","SRC","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","DEFAULT_TITLE","DEFER","ENCODE_SPECIAL_CHARACTERS","ON_CHANGE_CLIENT_STATE","TITLE_TEMPLATE","HTML_TAG_MAP","reduce","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_extendStatics","d","__extends","__","_assign","propertyIsEnumerable","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","pop","__createBinding","o","m","k","k2","get","__exportStar","__values","__read","ar","__spread","__spreadArrays","il","j","jl","__await","__asyncGenerator","asyncIterator","q","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","mod","__classPrivateFieldGet","receiver","privateMap","has","__classPrivateFieldSet","useEffectOnce_1","fn","fnRef","flags","valueOf","initialWidth","initialHeight","Infinity","innerWidth","innerHeight","handler_1","Wrapper","Container","TableOfContents","headings","disableTOC","contentRef","useWindowScroll","theme","useTheme","useWindowSize","offsets","setOffsets","isMobile","allHeadings","querySelectorAll","from","heading","anchor","querySelector","id","offset","offsetTop","filter","Boolean","activeHeading","useMemo","scrollTop","depth","headingSlug","toLowerCase","trim","marginLeft","colors","primary","text","background","isMenuOpen","LogoContainer","List","Heading","Item","shape","SubItem","ExternalLink","InternalLink","to","activeClassName","Logo","src","logo","alt","ListWithSubItems","Sidebar","edges","allSidebarItems","items","item","useSidebar","renderLink","aria-label","aria-hidden","subitems","Header","handleMenuOpen","onClick","Overlay","rest","css","Main","Layout","disableTableOfContents","setMenuOpen","ref","_typeof","_objectAssign2","clock","encode","String","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","lowerCaseAttributeKey","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","tagUnion","rafPolyfill","now","callback","currentTime","setTimeout","cafPolyfill","clearTimeout","webkitRequestAnimationFrame","mozRequestAnimationFrame","global","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","_helmetCallback","commitTagChanges","newState","cb","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","removeAttribute","tags","headElement","head","tagNodes","indexToDelete","newElement","styleSheet","appendChild","createTextNode","some","existingTag","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","tagContent","isSelfClosing","generateTagsAsString","initAttributes","_ref$title"],"mappings":"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","file":"a7629950cb7a18c7593baf47d0acfe798f1cddc4-2745402a1facfb7fde52.js","sourcesContent":["function isExternalUrl(url) {\n  return new RegExp('^((https?:)?//)', 'i').test(url);\n}\n\nmodule.exports = { isExternalUrl };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar react_1 = require(\"react\");\n\nvar useEffectOnce = function useEffectOnce(effect) {\n  react_1.useEffect(effect, []);\n};\n\nexports.default = useEffectOnce;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar tslib_1 = require(\"tslib\");\n\nvar react_1 = require(\"react\");\n\nvar util_1 = require(\"./util\");\n\nvar useRafState_1 = tslib_1.__importDefault(require(\"./useRafState\"));\n\nvar useWindowScroll = function useWindowScroll() {\n  var _a = useRafState_1.default({\n    x: util_1.isClient ? window.pageXOffset : 0,\n    y: util_1.isClient ? window.pageYOffset : 0\n  }),\n      state = _a[0],\n      setState = _a[1];\n\n  react_1.useEffect(function () {\n    var handler = function handler() {\n      setState({\n        x: window.pageXOffset,\n        y: window.pageYOffset\n      });\n    };\n\n    window.addEventListener('scroll', handler, {\n      capture: false,\n      passive: true\n    });\n    return function () {\n      window.removeEventListener('scroll', handler);\n    };\n  }, []);\n  return state;\n};\n\nexports.default = useWindowScroll;","'use strict';\n\nfunction _interopDefault(ex) {\n  return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\n\nvar React = require('react');\n\nvar React__default = _interopDefault(React);\n\nvar shallowEqual = _interopDefault(require('shallowequal'));\n\nfunction _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}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n  if (typeof reducePropsToState !== 'function') {\n    throw new Error('Expected reducePropsToState to be a function.');\n  }\n\n  if (typeof handleStateChangeOnClient !== 'function') {\n    throw new Error('Expected handleStateChangeOnClient to be a function.');\n  }\n\n  if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n    throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n  }\n\n  function getDisplayName(WrappedComponent) {\n    return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n  }\n\n  return function wrap(WrappedComponent) {\n    if (typeof WrappedComponent !== 'function') {\n      throw new Error('Expected WrappedComponent to be a React component.');\n    }\n\n    var mountedInstances = [];\n    var state;\n\n    function emitChange() {\n      state = reducePropsToState(mountedInstances.map(function (instance) {\n        return instance.props;\n      }));\n\n      if (SideEffect.canUseDOM) {\n        handleStateChangeOnClient(state);\n      } else if (mapStateOnServer) {\n        state = mapStateOnServer(state);\n      }\n    }\n\n    var SideEffect = /*#__PURE__*/function (_Component) {\n      _inheritsLoose(SideEffect, _Component);\n\n      function SideEffect() {\n        return _Component.apply(this, arguments) || this;\n      } // Try to use displayName of wrapped component\n      // Expose canUseDOM so tests can monkeypatch it\n\n\n      SideEffect.peek = function peek() {\n        return state;\n      };\n\n      SideEffect.rewind = function rewind() {\n        if (SideEffect.canUseDOM) {\n          throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n        }\n\n        var recordedState = state;\n        state = undefined;\n        mountedInstances = [];\n        return recordedState;\n      };\n\n      var _proto = SideEffect.prototype;\n\n      _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n        return !shallowEqual(nextProps, this.props);\n      };\n\n      _proto.componentWillMount = function componentWillMount() {\n        mountedInstances.push(this);\n        emitChange();\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate() {\n        emitChange();\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        var index = mountedInstances.indexOf(this);\n        mountedInstances.splice(index, 1);\n        emitChange();\n      };\n\n      _proto.render = function render() {\n        return React__default.createElement(WrappedComponent, this.props);\n      };\n\n      return SideEffect;\n    }(React.Component);\n\n    _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n    _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n    return SideEffect;\n  };\n}\n\nmodule.exports = withSideEffect;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isDeepEqual = exports.off = exports.on = exports.isClient = void 0;\n\nvar tslib_1 = require(\"tslib\");\n\nvar react_1 = tslib_1.__importDefault(require(\"fast-deep-equal/react\"));\n\nexports.isClient = typeof window === 'object';\n\nexports.on = function (obj) {\n  var args = [];\n\n  for (var _i = 1; _i < arguments.length; _i++) {\n    args[_i - 1] = arguments[_i];\n  }\n\n  return obj.addEventListener.apply(obj, args);\n};\n\nexports.off = function (obj) {\n  var args = [];\n\n  for (var _i = 1; _i < arguments.length; _i++) {\n    args[_i - 1] = arguments[_i];\n  }\n\n  return obj.removeEventListener.apply(obj, args);\n};\n\nexports.isDeepEqual = react_1.default;","module.exports = __webpack_public_path__ + \"static/logo-f730a0b8e533f2d4da7bd901d2b7ab80.png\";","function normalizeBasePath(basePath, link) {\n  return `/${basePath}/${link}`.replace(/\\/\\/+/g, `/`);\n}\n\nfunction isExternalUrl(url) {\n  return new RegExp('^((https?:)?//)', 'i').test(url);\n}\n\nfunction resolveLink(link, basePath) {\n  return isExternalUrl(link) ? link : normalizeBasePath(basePath, link);\n}\n\nmodule.exports = { resolveLink, normalizeBasePath, isExternalUrl };\n","//\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B.\n\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || ret === void 0 && valueA !== valueB) {\n      return false;\n    }\n  }\n\n  return true;\n};","export var IconsManifest = [{\n  \"id\": \"fa\",\n  \"name\": \"Font Awesome\",\n  \"projectUrl\": \"https://fontawesome.com/\",\n  \"license\": \"CC BY 4.0 License\",\n  \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n}, {\n  \"id\": \"io\",\n  \"name\": \"Ionicons\",\n  \"projectUrl\": \"https://ionicons.com/\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://github.com/ionic-team/ionicons/blob/master/LICENSE\"\n}, {\n  \"id\": \"md\",\n  \"name\": \"Material Design icons\",\n  \"projectUrl\": \"http://google.github.io/material-design-icons/\",\n  \"license\": \"Apache License Version 2.0\",\n  \"licenseUrl\": \"https://github.com/google/material-design-icons/blob/master/LICENSE\"\n}, {\n  \"id\": \"ti\",\n  \"name\": \"Typicons\",\n  \"projectUrl\": \"http://s-ings.com/typicons/\",\n  \"license\": \"CC BY-SA 3.0\",\n  \"licenseUrl\": \"https://creativecommons.org/licenses/by-sa/3.0/\"\n}, {\n  \"id\": \"go\",\n  \"name\": \"Github Octicons icons\",\n  \"projectUrl\": \"https://octicons.github.com/\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://github.com/primer/octicons/blob/master/LICENSE\"\n}, {\n  \"id\": \"fi\",\n  \"name\": \"Feather\",\n  \"projectUrl\": \"https://feathericons.com/\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://github.com/feathericons/feather/blob/master/LICENSE\"\n}, {\n  \"id\": \"gi\",\n  \"name\": \"Game Icons\",\n  \"projectUrl\": \"https://game-icons.net/\",\n  \"license\": \"CC BY 3.0\",\n  \"licenseUrl\": \"https://creativecommons.org/licenses/by/3.0/\"\n}, {\n  \"id\": \"wi\",\n  \"name\": \"Weather Icons\",\n  \"projectUrl\": \"https://erikflowers.github.io/weather-icons/\",\n  \"license\": \"SIL OFL 1.1\",\n  \"licenseUrl\": \"http://scripts.sil.org/OFL\"\n}, {\n  \"id\": \"di\",\n  \"name\": \"Devicons\",\n  \"projectUrl\": \"https://vorillaz.github.io/devicons/\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"ai\",\n  \"name\": \"Ant Design Icons\",\n  \"projectUrl\": \"https://github.com/ant-design/ant-design-icons\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"bs\",\n  \"name\": \"Bootstrap Icons\",\n  \"projectUrl\": \"https://github.com/twbs/icons\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"ri\",\n  \"name\": \"Remix Icon\",\n  \"projectUrl\": \"https://github.com/Remix-Design/RemixIcon\",\n  \"license\": \"Apache License Version 2.0\",\n  \"licenseUrl\": \"http://www.apache.org/licenses/\"\n}, {\n  \"id\": \"fc\",\n  \"name\": \"Flat Color Icons\",\n  \"projectUrl\": \"https://github.com/icons8/flat-color-icons\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"gr\",\n  \"name\": \"Grommet-Icons\",\n  \"projectUrl\": \"https://github.com/grommet/grommet-icons\",\n  \"license\": \"Apache License Version 2.0\",\n  \"licenseUrl\": \"http://www.apache.org/licenses/\"\n}, {\n  \"id\": \"hi\",\n  \"name\": \"Heroicons\",\n  \"projectUrl\": \"https://github.com/refactoringui/heroicons\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"si\",\n  \"name\": \"Simple Icons\",\n  \"projectUrl\": \"https://simpleicons.org/\",\n  \"license\": \"CC0 1.0 Universal\",\n  \"licenseUrl\": \"https://creativecommons.org/publicdomain/zero/1.0/\"\n}, {\n  \"id\": \"im\",\n  \"name\": \"IcoMoon Free\",\n  \"projectUrl\": \"https://github.com/Keyamoon/IcoMoon-Free\",\n  \"license\": \"CC BY 4.0 License\"\n}, {\n  \"id\": \"bi\",\n  \"name\": \"BoxIcons\",\n  \"projectUrl\": \"https://github.com/atisawd/boxicons\",\n  \"license\": \"CC BY 4.0 License\"\n}, {\n  \"id\": \"cg\",\n  \"name\": \"css.gg\",\n  \"projectUrl\": \"https://github.com/astrit/css.gg\",\n  \"license\": \"MIT\",\n  \"licenseUrl\": \"https://opensource.org/licenses/MIT\"\n}, {\n  \"id\": \"vsc\",\n  \"name\": \"VS Code Icons\",\n  \"projectUrl\": \"https://github.com/microsoft/vscode-codicons\",\n  \"license\": \"CC BY 4.0\",\n  \"licenseUrl\": \"https://creativecommons.org/licenses/by/4.0/\"\n}];","import * as React from 'react';\nexport var DefaultContext = {\n  color: undefined,\n  size: undefined,\n  className: undefined,\n  style: undefined,\n  attr: undefined\n};\nexport var IconContext = React.createContext && React.createContext(DefaultContext);","var __assign = this && this.__assign || function () {\n  __assign = Object.assign || function (t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return __assign.apply(this, arguments);\n};\n\nvar __rest = this && this.__rest || function (s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]];\n  }\n  return t;\n};\n\nimport * as React from 'react';\nimport { IconContext, DefaultContext } from './iconContext';\n\nfunction Tree2Element(tree) {\n  return tree && tree.map(function (node, i) {\n    return React.createElement(node.tag, __assign({\n      key: i\n    }, node.attr), Tree2Element(node.child));\n  });\n}\n\nexport function GenIcon(data) {\n  return function (props) {\n    return React.createElement(IconBase, __assign({\n      attr: __assign({}, data.attr)\n    }, props), Tree2Element(data.child));\n  };\n}\nexport function IconBase(props) {\n  var elem = function elem(conf) {\n    var computedSize = props.size || conf.size || \"1em\";\n    var className;\n    if (conf.className) className = conf.className;\n    if (props.className) className = (className ? className + ' ' : '') + props.className;\n\n    var attr = props.attr,\n        title = props.title,\n        svgProps = __rest(props, [\"attr\", \"title\"]);\n\n    return React.createElement(\"svg\", __assign({\n      stroke: \"currentColor\",\n      fill: \"currentColor\",\n      strokeWidth: \"0\"\n    }, conf.attr, attr, svgProps, {\n      className: className,\n      style: __assign({\n        color: props.color || conf.color\n      }, conf.style, props.style),\n      height: computedSize,\n      width: computedSize,\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }), title && React.createElement(\"title\", null, title), props.children);\n  };\n\n  return IconContext !== undefined ? React.createElement(IconContext.Consumer, null, function (conf) {\n    return elem(conf);\n  }) : elem(DefaultContext);\n}","(function (name, context, definition) {\n  if (typeof module !== 'undefined' && module.exports) module.exports = definition();else if (typeof define === 'function' && define.amd) define(definition);else context[name] = definition();\n})('urljoin', this, function () {\n  function normalize(strArray) {\n    var resultArray = [];\n\n    if (strArray.length === 0) {\n      return '';\n    }\n\n    if (typeof strArray[0] !== 'string') {\n      throw new TypeError('Url must be a string. Received ' + strArray[0]);\n    } // If the first part is a plain protocol, we combine it with the next part.\n\n\n    if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n      var first = strArray.shift();\n      strArray[0] = first + strArray[0];\n    } // There must be two or three slashes in the file protocol, two slashes in anything else.\n\n\n    if (strArray[0].match(/^file:\\/\\/\\//)) {\n      strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n    } else {\n      strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n    }\n\n    for (var i = 0; i < strArray.length; i++) {\n      var component = strArray[i];\n\n      if (typeof component !== 'string') {\n        throw new TypeError('Url must be a string. Received ' + component);\n      }\n\n      if (component === '') {\n        continue;\n      }\n\n      if (i > 0) {\n        // Removing the starting slashes for each component but the first.\n        component = component.replace(/^[\\/]+/, '');\n      }\n\n      if (i < strArray.length - 1) {\n        // Removing the ending slashes for each component but the last.\n        component = component.replace(/[\\/]+$/, '');\n      } else {\n        // For the last component we will combine multiple slashes to a single one.\n        component = component.replace(/[\\/]+$/, '/');\n      }\n\n      resultArray.push(component);\n    }\n\n    var str = resultArray.join('/'); // Each input component is now separated by a single slash except the possible first plain protocol part.\n    // remove trailing slash before parameters or hash\n\n    str = str.replace(/\\/(\\?|&|#[^!])/g, '$1'); // replace ? in parameters with &\n\n    var parts = str.split('?');\n    str = parts.shift() + (parts.length > 0 ? '?' : '') + parts.join('&');\n    return str;\n  }\n\n  return function () {\n    var input;\n\n    if (typeof arguments[0] === 'object') {\n      input = arguments[0];\n    } else {\n      input = [].slice.call(arguments);\n    }\n\n    return normalize(input);\n  };\n});","exports.__esModule = true;\nexports.Helmet = undefined;\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _createClass = function () {\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\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactSideEffect = require(\"react-side-effect\");\n\nvar _reactSideEffect2 = _interopRequireDefault(_reactSideEffect);\n\nvar _reactFastCompare = require(\"react-fast-compare\");\n\nvar _reactFastCompare2 = _interopRequireDefault(_reactFastCompare);\n\nvar _HelmetUtils = require(\"./HelmetUtils.js\");\n\nvar _HelmetConstants = require(\"./HelmetConstants.js\");\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar Helmet = function Helmet(Component) {\n  var _class, _temp;\n\n  return _temp = _class = function (_React$Component) {\n    _inherits(HelmetWrapper, _React$Component);\n\n    function HelmetWrapper() {\n      _classCallCheck(this, HelmetWrapper);\n\n      return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n    }\n\n    HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n      return !(0, _reactFastCompare2.default)(this.props, nextProps);\n    };\n\n    HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n      if (!nestedChildren) {\n        return null;\n      }\n\n      switch (child.type) {\n        case _HelmetConstants.TAG_NAMES.SCRIPT:\n        case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n          return {\n            innerHTML: nestedChildren\n          };\n\n        case _HelmetConstants.TAG_NAMES.STYLE:\n          return {\n            cssText: nestedChildren\n          };\n      }\n\n      throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n    };\n\n    HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n      var _extends2;\n\n      var child = _ref.child,\n          arrayTypeChildren = _ref.arrayTypeChildren,\n          newChildProps = _ref.newChildProps,\n          nestedChildren = _ref.nestedChildren;\n      return _extends({}, arrayTypeChildren, (_extends2 = {}, _extends2[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _extends2));\n    };\n\n    HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n      var _extends3, _extends4;\n\n      var child = _ref2.child,\n          newProps = _ref2.newProps,\n          newChildProps = _ref2.newChildProps,\n          nestedChildren = _ref2.nestedChildren;\n\n      switch (child.type) {\n        case _HelmetConstants.TAG_NAMES.TITLE:\n          return _extends({}, newProps, (_extends3 = {}, _extends3[child.type] = nestedChildren, _extends3.titleAttributes = _extends({}, newChildProps), _extends3));\n\n        case _HelmetConstants.TAG_NAMES.BODY:\n          return _extends({}, newProps, {\n            bodyAttributes: _extends({}, newChildProps)\n          });\n\n        case _HelmetConstants.TAG_NAMES.HTML:\n          return _extends({}, newProps, {\n            htmlAttributes: _extends({}, newChildProps)\n          });\n      }\n\n      return _extends({}, newProps, (_extends4 = {}, _extends4[child.type] = _extends({}, newChildProps), _extends4));\n    };\n\n    HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n      var newFlattenedProps = _extends({}, newProps);\n\n      Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n        var _extends5;\n\n        newFlattenedProps = _extends({}, newFlattenedProps, (_extends5 = {}, _extends5[arrayChildName] = arrayTypeChildren[arrayChildName], _extends5));\n      });\n      return newFlattenedProps;\n    };\n\n    HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (!_HelmetConstants.VALID_TAG_NAMES.some(function (name) {\n          return child.type === name;\n        })) {\n          if (typeof child.type === \"function\") {\n            return (0, _HelmetUtils.warn)(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n          }\n\n          return (0, _HelmetUtils.warn)(\"Only elements types \" + _HelmetConstants.VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n        }\n\n        if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n          return typeof nestedChild !== \"string\";\n        }))) {\n          throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n        }\n      }\n\n      return true;\n    };\n\n    HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n      var _this2 = this;\n\n      var arrayTypeChildren = {};\n\n      _react2.default.Children.forEach(children, function (child) {\n        if (!child || !child.props) {\n          return;\n        }\n\n        var _child$props = child.props,\n            nestedChildren = _child$props.children,\n            childProps = _objectWithoutProperties(_child$props, [\"children\"]);\n\n        var newChildProps = (0, _HelmetUtils.convertReactPropstoHtmlAttributes)(childProps);\n\n        _this2.warnOnInvalidChildren(child, nestedChildren);\n\n        switch (child.type) {\n          case _HelmetConstants.TAG_NAMES.LINK:\n          case _HelmetConstants.TAG_NAMES.META:\n          case _HelmetConstants.TAG_NAMES.NOSCRIPT:\n          case _HelmetConstants.TAG_NAMES.SCRIPT:\n          case _HelmetConstants.TAG_NAMES.STYLE:\n            arrayTypeChildren = _this2.flattenArrayTypeChildren({\n              child: child,\n              arrayTypeChildren: arrayTypeChildren,\n              newChildProps: newChildProps,\n              nestedChildren: nestedChildren\n            });\n            break;\n\n          default:\n            newProps = _this2.mapObjectTypeChildren({\n              child: child,\n              newProps: newProps,\n              newChildProps: newChildProps,\n              nestedChildren: nestedChildren\n            });\n            break;\n        }\n      });\n\n      newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n      return newProps;\n    };\n\n    HelmetWrapper.prototype.render = function render() {\n      var _props = this.props,\n          children = _props.children,\n          props = _objectWithoutProperties(_props, [\"children\"]);\n\n      var newProps = _extends({}, props);\n\n      if (children) {\n        newProps = this.mapChildrenToProps(children, newProps);\n      }\n\n      return _react2.default.createElement(Component, newProps);\n    };\n\n    _createClass(HelmetWrapper, null, [{\n      key: \"canUseDOM\",\n      // Component.peek comes from react-side-effect:\n      // For testing, you may use a static peek() method available on the returned component.\n      // It lets you get the current state without resetting the mounted instance stack.\n      // Don’t use it for anything other than testing.\n\n      /**\n       * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n       * @param {Object} bodyAttributes: {\"className\": \"root\"}\n       * @param {String} defaultTitle: \"Default Title\"\n       * @param {Boolean} defer: true\n       * @param {Boolean} encodeSpecialCharacters: true\n       * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n       * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n       * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n       * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n       * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n       * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n       * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n       * @param {String} title: \"Title\"\n       * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n       * @param {String} titleTemplate: \"MySite.com - %s\"\n       */\n      set: function set(canUseDOM) {\n        Component.canUseDOM = canUseDOM;\n      }\n    }]);\n\n    return HelmetWrapper;\n  }(_react2.default.Component), _class.propTypes = {\n    base: _propTypes2.default.object,\n    bodyAttributes: _propTypes2.default.object,\n    children: _propTypes2.default.oneOfType([_propTypes2.default.arrayOf(_propTypes2.default.node), _propTypes2.default.node]),\n    defaultTitle: _propTypes2.default.string,\n    defer: _propTypes2.default.bool,\n    encodeSpecialCharacters: _propTypes2.default.bool,\n    htmlAttributes: _propTypes2.default.object,\n    link: _propTypes2.default.arrayOf(_propTypes2.default.object),\n    meta: _propTypes2.default.arrayOf(_propTypes2.default.object),\n    noscript: _propTypes2.default.arrayOf(_propTypes2.default.object),\n    onChangeClientState: _propTypes2.default.func,\n    script: _propTypes2.default.arrayOf(_propTypes2.default.object),\n    style: _propTypes2.default.arrayOf(_propTypes2.default.object),\n    title: _propTypes2.default.string,\n    titleAttributes: _propTypes2.default.object,\n    titleTemplate: _propTypes2.default.string\n  }, _class.defaultProps = {\n    defer: true,\n    encodeSpecialCharacters: true\n  }, _class.peek = Component.peek, _class.rewind = function () {\n    var mappedState = Component.rewind();\n\n    if (!mappedState) {\n      // provide fallback if mappedState is undefined\n      mappedState = (0, _HelmetUtils.mapStateOnServer)({\n        baseTag: [],\n        bodyAttributes: {},\n        encodeSpecialCharacters: true,\n        htmlAttributes: {},\n        linkTags: [],\n        metaTags: [],\n        noscriptTags: [],\n        scriptTags: [],\n        styleTags: [],\n        title: \"\",\n        titleAttributes: {}\n      });\n    }\n\n    return mappedState;\n  }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n  return null;\n};\n\nvar HelmetSideEffects = (0, _reactSideEffect2.default)(_HelmetUtils.reducePropsToState, _HelmetUtils.handleClientStateChange, _HelmetUtils.mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexports.Helmet = HelmetExport;\nexports.default = HelmetExport;","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\nvar hasElementType = typeof Element !== 'undefined';\n\nfunction equal(a, b) {\n  // fast-deep-equal index.js 2.0.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a),\n        arrB = isArray(b),\n        i,\n        length,\n        key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n\n      for (i = length; i-- !== 0;) {\n        if (!equal(a[i], b[i])) return false;\n      }\n\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n    var dateA = a instanceof Date,\n        dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n    var regexpA = a instanceof RegExp,\n        regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n    var keys = keyList(a);\n    length = keys.length;\n    if (length !== keyList(b).length) return false;\n\n    for (i = length; i-- !== 0;) {\n      if (!hasProp.call(b, keys[i])) return false;\n    } // end fast-deep-equal\n    // start react-fast-compare\n    // custom handling for DOM elements\n\n\n    if (hasElementType && a instanceof Element && b instanceof Element) return a === b; // custom handling for React\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of a react element\n        continue;\n      } else {\n        // all other properties should be traversed as usual\n        if (!equal(a[key], b[key])) return false;\n      }\n    } // end react-fast-compare\n    // fast-deep-equal index.js 2.0.1\n\n\n    return true;\n  }\n\n  return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function exportedEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (error.message && error.message.match(/stack|recursion/i) || error.number === -2146828260) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n      return false;\n    } // some other error. we should definitely know about these\n\n\n    throw error;\n  }\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Helmet from 'react-helmet';\nimport urljoin from 'url-join';\nimport { useStaticQuery, graphql } from 'gatsby';\n\nexport default function SEO({ description, title, slug, image, children }) {\n  const { site } = useStaticQuery(\n    graphql`\n      query {\n        site {\n          siteMetadata {\n            defaultTitle\n            siteTitleShort\n            siteTitle\n            siteImage\n            siteDescription\n            siteLanguage\n            siteUrl\n            siteAuthor\n          }\n        }\n      }\n    `,\n  );\n\n  const {\n    siteTitle,\n    siteTitleShort,\n    siteUrl,\n    defaultTitle,\n    siteImage,\n    siteDescription,\n    siteLanguage,\n    siteAuthor,\n    siteIcon,\n  } = site.siteMetadata;\n\n  const metaTitle = title ? `${title} | ${siteTitle}` : defaultTitle;\n  const metaUrl = urljoin(siteUrl, slug);\n  const metaImage = urljoin(siteUrl, image || siteImage);\n  const metaDescription = description || siteDescription;\n\n  const schemaOrgJSONLD = [\n    {\n      '@context': 'http://schema.org',\n      '@type': 'WebSite',\n      url: metaUrl,\n      name: title,\n      alternateName: siteTitleShort,\n    },\n  ];\n\n  return (\n    <Helmet\n      htmlAttributes={{\n        lang: siteLanguage,\n      }}\n      title={metaTitle}\n    >\n      {siteIcon && <link rel=\"icon\" href={siteIcon} />}\n      <meta name=\"description\" content={metaDescription} />\n      <meta name=\"image\" content={metaImage} />\n\n      <meta httpEquiv=\"x-ua-compatible\" content=\"IE=edge,chrome=1\" />\n      <meta name=\"MobileOptimized\" content=\"320\" />\n      <meta name=\"HandheldFriendly\" content=\"True\" />\n      <meta name=\"google\" content=\"notranslate\" />\n      <meta name=\"referrer\" content=\"no-referrer-when-downgrade\" />\n\n      <meta property=\"og:url\" content={metaUrl} />\n      <meta property=\"og:type\" content=\"website\" />\n      <meta property=\"og:title\" content={metaTitle} />\n      <meta property=\"og:description\" content={metaDescription} />\n      <meta property=\"og:locale\" content={siteLanguage} />\n      <meta property=\"og:site_name\" content={siteTitle} />\n      <meta property=\"og:image\" content={metaImage} />\n      <meta property=\"og:image:secure_url\" content={metaImage} />\n      <meta property=\"og:image:alt\" content=\"Banner\" />\n      <meta property=\"og:image:type\" content=\"image/png\" />\n      <meta property=\"og:image:width\" content=\"1200\" />\n      <meta property=\"og:image:height\" content=\"630\" />\n\n      <meta name=\"twitter:card\" content=\"summary_large_image\" />\n      <meta name=\"twitter:title\" content={metaTitle} />\n      <meta name=\"twitter:site\" content={siteAuthor} />\n      <meta name=\"twitter:creator\" content={siteAuthor} />\n      <meta name=\"twitter:image\" content={metaImage} />\n      <meta name=\"twitter:image:src\" content={metaImage} />\n      <meta name=\"twitter:image:alt\" content=\"Banner\" />\n      <meta name=\"twitter:image:width\" content=\"1200\" />\n      <meta name=\"twitter:image:height\" content=\"630\" />\n\n      <script type=\"application/ld+json\">\n        {JSON.stringify(schemaOrgJSONLD)}\n      </script>\n      {children}\n    </Helmet>\n  );\n}\n\nSEO.propTypes = {\n  title: PropTypes.string,\n  description: PropTypes.string,\n  slug: PropTypes.string,\n  image: PropTypes.string,\n  children: PropTypes.oneOfType([\n    PropTypes.arrayOf(PropTypes.element),\n    PropTypes.node,\n  ]),\n};\n\nSEO.defaultProps = {\n  title: '',\n  description: '',\n  slug: '',\n  image: '',\n  children: '',\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar tslib_1 = require(\"tslib\");\n\nvar react_1 = require(\"react\");\n\nvar useUnmount_1 = tslib_1.__importDefault(require(\"./useUnmount\"));\n\nvar useRafState = function useRafState(initialState) {\n  var frame = react_1.useRef(0);\n\n  var _a = react_1.useState(initialState),\n      state = _a[0],\n      setState = _a[1];\n\n  var setRafState = react_1.useCallback(function (value) {\n    cancelAnimationFrame(frame.current);\n    frame.current = requestAnimationFrame(function () {\n      setState(value);\n    });\n  }, []);\n  useUnmount_1.default(function () {\n    cancelAnimationFrame(frame.current);\n  });\n  return [state, setRafState];\n};\n\nexports.default = useRafState;","exports.__esModule = true;\nvar ATTRIBUTE_NAMES = exports.ATTRIBUTE_NAMES = {\n  BODY: \"bodyAttributes\",\n  HTML: \"htmlAttributes\",\n  TITLE: \"titleAttributes\"\n};\nvar TAG_NAMES = exports.TAG_NAMES = {\n  BASE: \"base\",\n  BODY: \"body\",\n  HEAD: \"head\",\n  HTML: \"html\",\n  LINK: \"link\",\n  META: \"meta\",\n  NOSCRIPT: \"noscript\",\n  SCRIPT: \"script\",\n  STYLE: \"style\",\n  TITLE: \"title\"\n};\nvar VALID_TAG_NAMES = exports.VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n  return TAG_NAMES[name];\n});\nvar TAG_PROPERTIES = exports.TAG_PROPERTIES = {\n  CHARSET: \"charset\",\n  CSS_TEXT: \"cssText\",\n  HREF: \"href\",\n  HTTPEQUIV: \"http-equiv\",\n  INNER_HTML: \"innerHTML\",\n  ITEM_PROP: \"itemprop\",\n  NAME: \"name\",\n  PROPERTY: \"property\",\n  REL: \"rel\",\n  SRC: \"src\"\n};\nvar REACT_TAG_MAP = exports.REACT_TAG_MAP = {\n  accesskey: \"accessKey\",\n  charset: \"charSet\",\n  class: \"className\",\n  contenteditable: \"contentEditable\",\n  contextmenu: \"contextMenu\",\n  \"http-equiv\": \"httpEquiv\",\n  itemprop: \"itemProp\",\n  tabindex: \"tabIndex\"\n};\nvar HELMET_PROPS = exports.HELMET_PROPS = {\n  DEFAULT_TITLE: \"defaultTitle\",\n  DEFER: \"defer\",\n  ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n  ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n  TITLE_TEMPLATE: \"titleTemplate\"\n};\nvar HTML_TAG_MAP = exports.HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n  obj[REACT_TAG_MAP[key]] = key;\n  return obj;\n}, {});\nvar SELF_CLOSING_TAGS = exports.SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = exports.HELMET_ATTRIBUTE = \"data-react-helmet\";","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n  _extendStatics = Object.setPrototypeOf || {\n    __proto__: []\n  } instanceof Array && function (d, b) {\n    d.__proto__ = b;\n  } || function (d, b) {\n    for (var p in b) {\n      if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    }\n  };\n\n  return _extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  _extendStatics(d, b);\n\n  function __() {\n    this.constructor = d;\n  }\n\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n  _assign = Object.assign || function __assign(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n      s = arguments[i];\n\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return _assign.apply(this, arguments);\n};\n\nexport { _assign as __assign };\nexport function __rest(s, e) {\n  var t = {};\n\n  for (var p in s) {\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  }\n\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n}\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexport function __param(paramIndex, decorator) {\n  return function (target, key) {\n    decorator(target, key, paramIndex);\n  };\n}\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function (resolve) {\n      resolve(value);\n    });\n  }\n\n  return new (P || (P = Promise))(function (resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\nexport function __generator(thisArg, body) {\n  var _ = {\n    label: 0,\n    sent: function sent() {\n      if (t[0] & 1) throw t[1];\n      return t[1];\n    },\n    trys: [],\n    ops: []\n  },\n      f,\n      y,\n      t,\n      g;\n  return g = {\n    next: verb(0),\n    \"throw\": verb(1),\n    \"return\": verb(2)\n  }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n    return this;\n  }), g;\n\n  function verb(n) {\n    return function (v) {\n      return step([n, v]);\n    };\n  }\n\n  function step(op) {\n    if (f) throw new TypeError(\"Generator is already executing.\");\n\n    while (_) {\n      try {\n        if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n        if (y = 0, t) op = [op[0] & 2, t.value];\n\n        switch (op[0]) {\n          case 0:\n          case 1:\n            t = op;\n            break;\n\n          case 4:\n            _.label++;\n            return {\n              value: op[1],\n              done: false\n            };\n\n          case 5:\n            _.label++;\n            y = op[1];\n            op = [0];\n            continue;\n\n          case 7:\n            op = _.ops.pop();\n\n            _.trys.pop();\n\n            continue;\n\n          default:\n            if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n              _ = 0;\n              continue;\n            }\n\n            if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n              _.label = op[1];\n              break;\n            }\n\n            if (op[0] === 6 && _.label < t[1]) {\n              _.label = t[1];\n              t = op;\n              break;\n            }\n\n            if (t && _.label < t[2]) {\n              _.label = t[2];\n\n              _.ops.push(op);\n\n              break;\n            }\n\n            if (t[2]) _.ops.pop();\n\n            _.trys.pop();\n\n            continue;\n        }\n\n        op = body.call(thisArg, _);\n      } catch (e) {\n        op = [6, e];\n        y = 0;\n      } finally {\n        f = t = 0;\n      }\n    }\n\n    if (op[0] & 5) throw op[1];\n    return {\n      value: op[0] ? op[1] : void 0,\n      done: true\n    };\n  }\n}\nexport var __createBinding = Object.create ? function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  Object.defineProperty(o, k2, {\n    enumerable: true,\n    get: function get() {\n      return m[k];\n    }\n  });\n} : function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n};\nexport function __exportStar(m, o) {\n  for (var p in m) {\n    if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n  }\n}\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator,\n      m = s && o[s],\n      i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n    next: function next() {\n      if (o && i >= o.length) o = void 0;\n      return {\n        value: o && o[i++],\n        done: !o\n      };\n    }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o),\n      r,\n      ar = [],\n      e;\n\n  try {\n    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n      ar.push(r.value);\n    }\n  } catch (error) {\n    e = {\n      error: error\n    };\n  } finally {\n    try {\n      if (r && !r.done && (m = i[\"return\"])) m.call(i);\n    } finally {\n      if (e) throw e.error;\n    }\n  }\n\n  return ar;\n}\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++) {\n    ar = ar.concat(__read(arguments[i]));\n  }\n\n  return ar;\n}\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n    s += arguments[i].length;\n  }\n\n  for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n    for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n      r[k] = a[j];\n    }\n  }\n\n  return r;\n}\n;\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []),\n      i,\n      q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i;\n\n  function verb(n) {\n    if (g[n]) i[n] = function (v) {\n      return new Promise(function (a, b) {\n        q.push([n, v, a, b]) > 1 || resume(n, v);\n      });\n    };\n  }\n\n  function resume(n, v) {\n    try {\n      step(g[n](v));\n    } catch (e) {\n      settle(q[0][3], e);\n    }\n  }\n\n  function step(r) {\n    r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n  }\n\n  function fulfill(value) {\n    resume(\"next\", value);\n  }\n\n  function reject(value) {\n    resume(\"throw\", value);\n  }\n\n  function settle(f, v) {\n    if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n  }\n}\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n    throw e;\n  }), verb(\"return\"), i[Symbol.iterator] = function () {\n    return this;\n  }, i;\n\n  function verb(n, f) {\n    i[n] = o[n] ? function (v) {\n      return (p = !p) ? {\n        value: __await(o[n](v)),\n        done: n === \"return\"\n      } : f ? f(v) : v;\n    } : f;\n  }\n}\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator],\n      i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n    return this;\n  }, i);\n\n  function verb(n) {\n    i[n] = o[n] && function (v) {\n      return new Promise(function (resolve, reject) {\n        v = o[n](v), settle(resolve, reject, v.done, v.value);\n      });\n    };\n  }\n\n  function settle(resolve, reject, d, v) {\n    Promise.resolve(v).then(function (v) {\n      resolve({\n        value: v,\n        done: d\n      });\n    }, reject);\n  }\n}\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) {\n    Object.defineProperty(cooked, \"raw\", {\n      value: raw\n    });\n  } else {\n    cooked.raw = raw;\n  }\n\n  return cooked;\n}\n;\n\nvar __setModuleDefault = Object.create ? function (o, v) {\n  Object.defineProperty(o, \"default\", {\n    enumerable: true,\n    value: v\n  });\n} : function (o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) {\n    if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  }\n\n  __setModuleDefault(result, mod);\n\n  return result;\n}\nexport function __importDefault(mod) {\n  return mod && mod.__esModule ? mod : {\n    default: mod\n  };\n}\nexport function __classPrivateFieldGet(receiver, privateMap) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to get private field on non-instance\");\n  }\n\n  return privateMap.get(receiver);\n}\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\n  if (!privateMap.has(receiver)) {\n    throw new TypeError(\"attempted to set private field on non-instance\");\n  }\n\n  privateMap.set(receiver, value);\n  return value;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar tslib_1 = require(\"tslib\");\n\nvar react_1 = require(\"react\");\n\nvar useEffectOnce_1 = tslib_1.__importDefault(require(\"./useEffectOnce\"));\n\nvar useUnmount = function useUnmount(fn) {\n  var fnRef = react_1.useRef(fn); // update the ref each render so if it change the newest callback will be invoked\n\n  fnRef.current = fn;\n  useEffectOnce_1.default(function () {\n    return function () {\n      return fnRef.current();\n    };\n  });\n};\n\nexports.default = useUnmount;","'use strict'; // do not edit .js files directly - edit src/index.jst\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n    var length, i, keys;\n\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n\n      for (i = length; i-- !== 0;) {\n        if (!equal(a[i], b[i])) return false;\n      }\n\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;) {\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    }\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (key === '_owner' && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner.\n        //  _owner contains circular references\n        // and is not needed when comparing the actual elements (and not their owners)\n        continue;\n      }\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  } // true if both NaN, false otherwise\n\n\n  return a !== a && b !== b;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar tslib_1 = require(\"tslib\");\n\nvar react_1 = require(\"react\");\n\nvar useRafState_1 = tslib_1.__importDefault(require(\"./useRafState\"));\n\nvar util_1 = require(\"./util\");\n\nvar useWindowSize = function useWindowSize(initialWidth, initialHeight) {\n  if (initialWidth === void 0) {\n    initialWidth = Infinity;\n  }\n\n  if (initialHeight === void 0) {\n    initialHeight = Infinity;\n  }\n\n  var _a = useRafState_1.default({\n    width: util_1.isClient ? window.innerWidth : initialWidth,\n    height: util_1.isClient ? window.innerHeight : initialHeight\n  }),\n      state = _a[0],\n      setState = _a[1];\n\n  react_1.useEffect(function () {\n    if (util_1.isClient) {\n      var handler_1 = function handler_1() {\n        setState({\n          width: window.innerWidth,\n          height: window.innerHeight\n        });\n      };\n\n      window.addEventListener('resize', handler_1);\n      return function () {\n        window.removeEventListener('resize', handler_1);\n      };\n    }\n  }, []);\n  return state;\n};\n\nexports.default = useWindowSize;","import styled from '@emotion/styled';\n\nexport const Wrapper = styled.div`\n  position: sticky;\n  top: 0;\n  order: 2;\n\n  padding-top: 72px;\n  max-height: calc(100vh - 72px);\n  overflow-y: auto;\n  width: 100%;\n  max-width: 200px;\n\n  @media (max-width: 1200px) {\n    position: relative;\n    top: auto;\n    order: 0;\n    max-width: 100%;\n    margin-left: 0;\n    padding-top: 0;\n  }\n`;\n\nexport const Container = styled.div`\n  h2 {\n    text-transform: uppercase;\n    font-size: 14px;\n    font-weight: bold;\n    letter-spacing: 0.142em;\n    margin-top: 0rem;\n    border: none;\n    margin: 0 0 16px 0;\n  }\n\n  nav ul {\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n\n    li {\n      margin-bottom: 12px;\n      line-height: 1.1;\n\n      a {\n        font-size: 14px;\n        font-weight: 400;\n        text-decoration: none;\n        transition: all 0.2s;\n\n        &:hover {\n          text-decoration: underline;\n        }\n      }\n    }\n  }\n\n  @media (max-width: 1200px) {\n    margin: 0 0 24px 0;\n    padding-bottom: 16px;\n    border-bottom: 1px solid rgba(120, 117, 122, 0.2);\n  }\n`;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTheme } from 'emotion-theming';\nimport useWindowScroll from 'react-use/lib/useWindowScroll';\nimport useWindowSize from 'react-use/lib/useWindowSize';\n\nimport slug from '../../../util/slug';\n\nimport { Wrapper, Container } from './styles';\n\nexport default function TableOfContents({ headings, disableTOC, contentRef }) {\n  const { y } = useWindowScroll();\n  const theme = useTheme();\n  const { width, height } = useWindowSize();\n  const [offsets, setOffsets] = useState([]);\n\n  const isMobile = width <= 1200;\n\n  useEffect(() => {\n    if (!isMobile || disableTOC) {\n      const allHeadings = contentRef.current?.querySelectorAll(`h2, h3`);\n\n      setOffsets(\n        allHeadings &&\n          Array.from(allHeadings)\n            .map((heading) => {\n              const anchor = heading.querySelector(`a`);\n              if (!anchor) return {};\n\n              return {\n                id: heading.id,\n                offset: heading.offsetTop + anchor.offsetTop,\n              };\n            })\n            .filter(Boolean),\n      );\n    }\n  }, [width, height, contentRef, isMobile, disableTOC]);\n\n  const activeHeading = useMemo(() => {\n    if (!isMobile || disableTOC) {\n      const windowOffset = height / 2;\n      const scrollTop = y + windowOffset;\n\n      if (offsets) {\n        for (let i = offsets.length - 1; i >= 0; i -= 1) {\n          const { id, offset } = offsets[i];\n          if (scrollTop >= offset) {\n            return id;\n          }\n        }\n      }\n    }\n  }, [offsets, height, y, isMobile, disableTOC]);\n\n  if (!disableTOC) {\n    return (\n      <Wrapper>\n        <Container>\n          <h2>On this page</h2>\n          <nav>\n            <ul>\n              {headings\n                .filter((heading) => heading.depth === 2 || heading.depth === 3)\n                .map((heading) => {\n                  const headingSlug = slug(heading.value);\n\n                  return (\n                    <li\n                      key={heading.value}\n                      style={{\n                        marginLeft: heading.depth === 3 ? `8px` : null,\n                      }}\n                    >\n                      <a\n                        href={`#${headingSlug}`}\n                        style={{\n                          color:\n                            activeHeading === headingSlug\n                              ? theme.colors.primary\n                              : theme.colors.text,\n                        }}\n                      >\n                        {heading.value}\n                      </a>\n                    </li>\n                  );\n                })}\n            </ul>\n          </nav>\n        </Container>\n      </Wrapper>\n    );\n  }\n\n  return <Wrapper />;\n}\n\nTableOfContents.propTypes = {\n  headings: PropTypes.array,\n  disableTOC: PropTypes.bool.isRequired,\n  contentRef: PropTypes.shape({ current: PropTypes.object }),\n};\n\nTableOfContents.defaultProps = {\n  headings: null,\n};\n","export default function(string) {\n  return string\n    .toString() // Cast to string\n    .toLowerCase() // Convert the string to lowercase letters\n    .trim() // Remove whitespace from both sides of a string\n    .replace(/\\s/g, '-') // Replace each space with -\n    .replace(\n      /[^\\w\\-\\u00b4\\u00C0-\\u00C3\\u00c7\\u00C9-\\u00CA\\u00CD\\u00D3-\\u00D5\\u00DA\\u00E0-\\u00E3\\u00E7\\u00E9-\\u00EA\\u00ED\\u00F3-\\u00F5\\u00FA]+/g,\n      '',\n    ); // Removes all chars that aren't words, -, ´ or some latin characters (À Á Â Ã Ç É Ê Í Ó Ô Õ Ú à á â ã ç é ê í ó ô õ ú)\n}\n","import styled from '@emotion/styled';\n\nexport const Container = styled.aside`\n  width: 100%;\n  overflow-y: auto;\n\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-direction: column;\n\n  position: sticky;\n  top: 0;\n  padding-top: 36px;\n  transition: transform 0.5s;\n  height: calc(100vh - 1px);\n\n  nav {\n    width: 100%;\n    padding-top: 24px;\n    align-self: flex-start;\n    flex: 1;\n  }\n\n  @media (max-width: 780px) {\n    max-width: 75%;\n    min-width: auto;\n    z-index: 1001;\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    padding-top: 32px;\n    background: ${({ theme }) => theme.colors.background};\n    transform: translate3d(\n      ${({ isMenuOpen }) => (isMenuOpen ? '0' : '-100%')},\n      0,\n      0\n    );\n  }\n`;\n\nexport const LogoContainer = styled.div`\n  width: 100%;\n\n  a {\n    width: 100%;\n    padding-left: 30px;\n\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n  }\n`;\n\nexport const List = styled.ul`\n  list-style: none;\n  width: 100%;\n  padding-left: 0;\n\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  flex-direction: column;\n`;\n\nexport const Heading = styled.li`\n  padding-left: 30px;\n  width: 100%;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: bold;\n  margin-top: 20px;\n  color: ${({ theme }) => theme.colors.title};\n  letter-spacing: 0.142em;\n`;\n\nexport const Item = styled.li`\n  font-size: 15px;\n  width: 100%;\n  transition: all 200ms ease-in-out;\n  padding: 0 20px;\n  cursor: pointer;\n\n  a,\n  span {\n    display: block;\n    font-size: 15px;\n    color: ${({ theme }) => theme.colors.text};\n    background-color: ${({ theme }) => theme.colors.background};\n    padding: 4px 10px;\n    margin: 4px 0;\n    border-radius: 4px;\n    font-weight: normal;\n\n    text-decoration: none;\n    width: 100%;\n    height: 100%;\n\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n\n    cursor: pointer;\n    margin: 0 auto;\n\n    transition: all 0.2s ease;\n\n    svg {\n      width: 20px;\n      height: 20px;\n      margin-right: 10px;\n    }\n\n    &:not(.active-link):hover {\n      color: ${({ theme }) => theme.colors.primary};\n    }\n\n    &.active-link {\n      color: ${({ theme }) => theme.colors.primary};\n      background-color: ${({ theme }) => theme.colors.shape};\n    }\n\n    @media (max-width: 780px) {\n      &.active-link {\n        background: ${({ theme }) => theme.colors.shape};\n      }\n    }\n  }\n`;\n\nexport const SubItem = styled(List)`\n  margin: 5px 0 0 0;\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FiExternalLink } from 'react-icons/fi';\n\nexport default function ExternalLink({ link, label }) {\n  return (\n    <a href={link} rel=\"noopener noreferrer\">\n      {label}\n      <FiExternalLink\n        style={{ width: '16px', height: '16px', marginLeft: '10px' }}\n      />\n    </a>\n  );\n}\n\nExternalLink.propTypes = {\n  link: PropTypes.string.isRequired,\n  label: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'gatsby';\n\nexport default function InternalLink({ link, label }) {\n  return (\n    <Link to={link} activeClassName=\"active-link\">\n      {label}\n    </Link>\n  );\n}\n\nInternalLink.propTypes = {\n  link: PropTypes.string.isRequired,\n  label: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport logo from '../../../../static/logo.png';\n\nexport default function Logo(props) {\n    return <img src={logo} alt=\"Logo\" width=\"90px\" height=\"80px\"/>;\n}","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useStaticQuery, graphql, Link } from 'gatsby';\nimport { useSidebar } from '@rocketseat/gatsby-theme-docs-core';\n\nimport {\n  Container,\n  LogoContainer,\n  List,\n  Heading,\n  Item,\n  SubItem,\n} from './styles';\nimport { isExternalUrl } from '../../util/url';\nimport ExternalLink from './ExternalLink';\nimport InternalLink from './InternalLink';\nimport Logo from '../Logo';\n\nfunction ListWithSubItems({ children, text }) {\n  return (\n    <>\n      <Heading>{text}</Heading>\n      <SubItem>{children}</SubItem>\n    </>\n  );\n}\n\nexport default function Sidebar({ isMenuOpen }) {\n  const {\n    site: {\n      siteMetadata: { basePath },\n    },\n  } = useStaticQuery(graphql`\n    {\n      site {\n        siteMetadata {\n          basePath\n        }\n      }\n    }\n  `);\n\n  const data = useSidebar();\n\n  function renderLink(link, label) {\n    return isExternalUrl(link) ? (\n      <ExternalLink link={link} label={label} />\n    ) : (\n      <InternalLink link={link} label={label} />\n    );\n  }\n\n  return (\n    <Container isMenuOpen={isMenuOpen}>\n      <LogoContainer>\n        <Link to={basePath} aria-label=\"Go to home page\">\n          <Logo aria-hidden=\"true\" />\n        </Link>\n      </LogoContainer>\n      <nav>\n        <List>\n          {data.map(({ node: { label, link, items, id } }) => {\n            if (Array.isArray(items)) {\n              const subitems = items.map((item) => {\n                return (\n                  <Item key={item.link}>\n                    {renderLink(item.link, item.label)}\n                  </Item>\n                );\n              });\n\n              return (\n                <ListWithSubItems key={id} text={label}>\n                  {subitems}\n                </ListWithSubItems>\n              );\n            }\n\n            return <Item key={id}>{renderLink(link, label)}</Item>;\n          })}\n        </List>\n      </nav>\n    </Container>\n  );\n}\n\nListWithSubItems.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.arrayOf(PropTypes.element),\n    PropTypes.node,\n  ]).isRequired,\n  text: PropTypes.string.isRequired,\n};\n\nSidebar.propTypes = {\n  isMenuOpen: PropTypes.bool.isRequired,\n};\n","import { graphql, useStaticQuery } from 'gatsby';\nimport { resolveLink } from '../../util/url';\n\nexport function useSidebar() {\n  const data = useStaticQuery(graphql`\n    {\n      allSidebarItems {\n        edges {\n          node {\n            label\n            link\n            items {\n              label\n              link\n            }\n            id\n          }\n        }\n      }\n      site {\n        siteMetadata {\n          basePath\n        }\n      }\n    }\n  `);\n\n  const { basePath } = data.site.siteMetadata;\n\n  const {\n    allSidebarItems: { edges },\n  } = data;\n\n  if (basePath) {\n    const normalizedSidebar = edges.map(\n      ({ node: { label, link, items, id } }) => {\n        if (Array.isArray(items)) {\n          items = items.map(item => ({\n            label: item.label,\n            link: resolveLink(item.link, basePath),\n          }));\n        }\n\n        return {\n          node: {\n            id,\n            label,\n            items,\n            link: resolveLink(link, basePath),\n          },\n        };\n      },\n    );\n\n    return normalizedSidebar;\n  }\n\n  return edges;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { GiHamburgerMenu } from 'react-icons/gi';\nimport { useStaticQuery, graphql } from 'gatsby';\n\nconst Container = styled.header`\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n\n  height: 40px;\n  margin-bottom: 24px;\n\n  h2 {\n    margin: 0;\n    border: none;\n    padding: 0;\n    font-size: 18px;\n\n    @media (max-width: 359px) {\n      font-size: 14px;\n    }\n  }\n\n  button {\n    border: none;\n    background: none;\n    cursor: pointer;\n    margin-right: 16px;\n\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n  }\n\n  @media (min-width: 780px) {\n    display: none;\n  }\n`;\n\nexport default function Header({ handleMenuOpen }) {\n  const { site } = useStaticQuery(\n    graphql`\n      query {\n        site {\n          siteMetadata {\n            siteTitle\n          }\n        }\n      }\n    `,\n  );\n\n  const { siteTitle } = site.siteMetadata;\n\n  return (\n    <Container>\n      <button aria-label=\"Open sidebar\" type=\"button\" onClick={handleMenuOpen}>\n        <GiHamburgerMenu size={23} aria-hidden=\"true\" />\n      </button>\n      <h2>{siteTitle}</h2>\n    </Container>\n  );\n}\n\nHeader.propTypes = {\n  handleMenuOpen: PropTypes.func.isRequired,\n};\n","/* @jsx jsx */\nimport React from 'react';\nimport { css, jsx } from '@emotion/core';\nimport PropTypes from 'prop-types';\n\nexport default function Overlay({ isMenuOpen, ...rest }) {\n  return (\n    <div\n      css={css`\n        ::after {\n          content: '';\n          position: fixed;\n          width: 100%;\n          height: 100%;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          background-color: rgba(0, 0, 0, 0.8);\n          z-index: 999;\n          display: ${isMenuOpen ? `block` : `none`};\n        }\n      `}\n      aria-label=\"Close menu\"\n      {...rest}\n    />\n  );\n}\n\nOverlay.propTypes = {\n  isMenuOpen: PropTypes.bool,\n};\n\nOverlay.defaultProps = {\n  isMenuOpen: false,\n};\n","import styled from '@emotion/styled';\n\nexport const Container = styled.div`\n  width: 100%;\n  max-width: 1400px;\n  margin: 0 auto;\n  padding: 0 24px;\n\n  display: grid;\n  grid-template-columns: 280px calc(100% - 320px);\n  grid-auto-flow: row;\n  grid-gap: 40px;\n\n  @media (max-width: 780px) {\n    padding: 24px;\n    grid-template-columns: 100%;\n  }\n`;\n\nexport const Main = styled.main`\n  height: 100%;\n  padding-top: 36px;\n  width: 100%;\n\n  display: flex;\n  justify-content: flex-start;\n  position: relative;\n\n  @media (max-width: 1200px) {\n    flex-direction: column;\n  }\n\n  @media (max-width: 780px) {\n    padding-top: 0;\n  }\n`;\n\nexport const Children = styled.div`\n  width: 100%;\n  max-width: calc(75% - 64px);\n  padding-right: 64px;\n\n  @media (max-width: 1200px) {\n    max-width: 100%;\n    padding-right: 0;\n    order: 3;\n  }\n`;\n","/* @jsx jsx */\nimport React, { useState, useRef } from 'react';\nimport { jsx, css } from '@emotion/core';\nimport PropTypes from 'prop-types';\n\nimport TableOfContents from '../Docs/TOC';\nimport Sidebar from '../Sidebar';\nimport Header from '../Header';\nimport Overlay from '../Overlay';\nimport { Container, Main, Children } from './styles';\n\nexport default function Layout({\n  children,\n  disableTableOfContents,\n  title,\n  headings,\n}) {\n  const contentRef = useRef(null);\n  const [isMenuOpen, setMenuOpen] = useState(false);\n  const disableTOC =\n    disableTableOfContents === true || !headings || headings.length === 0;\n\n  function handleMenuOpen() {\n    setMenuOpen(!isMenuOpen);\n  }\n\n  return (\n    <>\n      <Overlay isMenuOpen={isMenuOpen} onClick={handleMenuOpen} />\n      <Container>\n        <Sidebar isMenuOpen={isMenuOpen} />\n        <Main>\n          <Header handleMenuOpen={handleMenuOpen} />\n          {title && (\n            <h1\n              css={css`\n                display: none;\n\n                @media (max-width: 1200px) {\n                  display: block;\n                }\n              `}\n            >\n              {title}\n            </h1>\n          )}\n          <Children ref={contentRef}>\n            {title && (\n              <h1\n                css={css`\n                  @media (max-width: 1200px) {\n                    display: none;\n                  }\n                `}\n              >\n                {title}\n              </h1>\n            )}\n            {children}\n          </Children>\n          <TableOfContents\n            headings={headings}\n            disableTOC={disableTOC}\n            contentRef={contentRef}\n          />\n        </Main>\n      </Container>\n    </>\n  );\n}\n\nLayout.propTypes = {\n  children: PropTypes.oneOfType([\n    PropTypes.arrayOf(PropTypes.node),\n    PropTypes.node,\n  ]).isRequired,\n  disableTableOfContents: PropTypes.bool,\n  title: PropTypes.string,\n  headings: PropTypes.array,\n};\n\nLayout.defaultProps = {\n  disableTableOfContents: false,\n  title: '',\n  headings: null,\n};\n","exports.__esModule = true;\nexports.warn = exports.requestAnimationFrame = exports.reducePropsToState = exports.mapStateOnServer = exports.handleClientStateChange = exports.convertReactPropstoHtmlAttributes = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _objectAssign = require(\"object-assign\");\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _HelmetConstants = require(\"./HelmetConstants.js\");\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n  var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n  if (encode === false) {\n    return String(str);\n  }\n\n  return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n  var innermostTitle = getInnermostProperty(propsList, _HelmetConstants.TAG_NAMES.TITLE);\n  var innermostTemplate = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.TITLE_TEMPLATE);\n\n  if (innermostTemplate && innermostTitle) {\n    // use function arg to avoid need to escape $ characters\n    return innermostTemplate.replace(/%s/g, function () {\n      return innermostTitle;\n    });\n  }\n\n  var innermostDefaultTitle = getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFAULT_TITLE);\n  return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n  return getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n  return propsList.filter(function (props) {\n    return typeof props[tagType] !== \"undefined\";\n  }).map(function (props) {\n    return props[tagType];\n  }).reduce(function (tagAttrs, current) {\n    return _extends({}, tagAttrs, current);\n  }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n  return propsList.filter(function (props) {\n    return typeof props[_HelmetConstants.TAG_NAMES.BASE] !== \"undefined\";\n  }).map(function (props) {\n    return props[_HelmetConstants.TAG_NAMES.BASE];\n  }).reverse().reduce(function (innermostBaseTag, tag) {\n    if (!innermostBaseTag.length) {\n      var keys = Object.keys(tag);\n\n      for (var i = 0; i < keys.length; i++) {\n        var attributeKey = keys[i];\n        var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n        if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n          return innermostBaseTag.concat(tag);\n        }\n      }\n    }\n\n    return innermostBaseTag;\n  }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n  // Calculate list of tags, giving priority innermost component (end of the propslist)\n  var approvedSeenTags = {};\n  return propsList.filter(function (props) {\n    if (Array.isArray(props[tagName])) {\n      return true;\n    }\n\n    if (typeof props[tagName] !== \"undefined\") {\n      warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n    }\n\n    return false;\n  }).map(function (props) {\n    return props[tagName];\n  }).reverse().reduce(function (approvedTags, instanceTags) {\n    var instanceSeenTags = {};\n    instanceTags.filter(function (tag) {\n      var primaryAttributeKey = void 0;\n      var keys = Object.keys(tag);\n\n      for (var i = 0; i < keys.length; i++) {\n        var attributeKey = keys[i];\n        var lowerCaseAttributeKey = attributeKey.toLowerCase(); // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n\n        if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === _HelmetConstants.TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n          primaryAttributeKey = lowerCaseAttributeKey;\n        } // Special case for innerHTML which doesn't work lowercased\n\n\n        if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attributeKey === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT || attributeKey === _HelmetConstants.TAG_PROPERTIES.ITEM_PROP)) {\n          primaryAttributeKey = attributeKey;\n        }\n      }\n\n      if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n        return false;\n      }\n\n      var value = tag[primaryAttributeKey].toLowerCase();\n\n      if (!approvedSeenTags[primaryAttributeKey]) {\n        approvedSeenTags[primaryAttributeKey] = {};\n      }\n\n      if (!instanceSeenTags[primaryAttributeKey]) {\n        instanceSeenTags[primaryAttributeKey] = {};\n      }\n\n      if (!approvedSeenTags[primaryAttributeKey][value]) {\n        instanceSeenTags[primaryAttributeKey][value] = true;\n        return true;\n      }\n\n      return false;\n    }).reverse().forEach(function (tag) {\n      return approvedTags.push(tag);\n    }); // Update seen tags with tags from this instance\n\n    var keys = Object.keys(instanceSeenTags);\n\n    for (var i = 0; i < keys.length; i++) {\n      var attributeKey = keys[i];\n      var tagUnion = (0, _objectAssign2.default)({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n      approvedSeenTags[attributeKey] = tagUnion;\n    }\n\n    return approvedTags;\n  }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n  for (var i = propsList.length - 1; i >= 0; i--) {\n    var props = propsList[i];\n\n    if (props.hasOwnProperty(property)) {\n      return props[property];\n    }\n  }\n\n  return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n  return {\n    baseTag: getBaseTagFromPropsList([_HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n    bodyAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.BODY, propsList),\n    defer: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.DEFER),\n    encode: getInnermostProperty(propsList, _HelmetConstants.HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n    htmlAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.HTML, propsList),\n    linkTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.LINK, [_HelmetConstants.TAG_PROPERTIES.REL, _HelmetConstants.TAG_PROPERTIES.HREF], propsList),\n    metaTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.META, [_HelmetConstants.TAG_PROPERTIES.NAME, _HelmetConstants.TAG_PROPERTIES.CHARSET, _HelmetConstants.TAG_PROPERTIES.HTTPEQUIV, _HelmetConstants.TAG_PROPERTIES.PROPERTY, _HelmetConstants.TAG_PROPERTIES.ITEM_PROP], propsList),\n    noscriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.NOSCRIPT, [_HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n    onChangeClientState: getOnChangeClientState(propsList),\n    scriptTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.SCRIPT, [_HelmetConstants.TAG_PROPERTIES.SRC, _HelmetConstants.TAG_PROPERTIES.INNER_HTML], propsList),\n    styleTags: getTagsFromPropsList(_HelmetConstants.TAG_NAMES.STYLE, [_HelmetConstants.TAG_PROPERTIES.CSS_TEXT], propsList),\n    title: getTitleFromPropsList(propsList),\n    titleAttributes: getAttributesFromPropsList(_HelmetConstants.ATTRIBUTE_NAMES.TITLE, propsList)\n  };\n};\n\nvar rafPolyfill = function () {\n  var clock = Date.now();\n  return function (callback) {\n    var currentTime = Date.now();\n\n    if (currentTime - clock > 16) {\n      clock = currentTime;\n      callback(currentTime);\n    } else {\n      setTimeout(function () {\n        rafPolyfill(callback);\n      }, 0);\n    }\n  };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n  return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n  return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n  if (_helmetCallback) {\n    cancelAnimationFrame(_helmetCallback);\n  }\n\n  if (newState.defer) {\n    _helmetCallback = requestAnimationFrame(function () {\n      commitTagChanges(newState, function () {\n        _helmetCallback = null;\n      });\n    });\n  } else {\n    commitTagChanges(newState);\n    _helmetCallback = null;\n  }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n  var baseTag = newState.baseTag,\n      bodyAttributes = newState.bodyAttributes,\n      htmlAttributes = newState.htmlAttributes,\n      linkTags = newState.linkTags,\n      metaTags = newState.metaTags,\n      noscriptTags = newState.noscriptTags,\n      onChangeClientState = newState.onChangeClientState,\n      scriptTags = newState.scriptTags,\n      styleTags = newState.styleTags,\n      title = newState.title,\n      titleAttributes = newState.titleAttributes;\n  updateAttributes(_HelmetConstants.TAG_NAMES.BODY, bodyAttributes);\n  updateAttributes(_HelmetConstants.TAG_NAMES.HTML, htmlAttributes);\n  updateTitle(title, titleAttributes);\n  var tagUpdates = {\n    baseTag: updateTags(_HelmetConstants.TAG_NAMES.BASE, baseTag),\n    linkTags: updateTags(_HelmetConstants.TAG_NAMES.LINK, linkTags),\n    metaTags: updateTags(_HelmetConstants.TAG_NAMES.META, metaTags),\n    noscriptTags: updateTags(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags),\n    scriptTags: updateTags(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags),\n    styleTags: updateTags(_HelmetConstants.TAG_NAMES.STYLE, styleTags)\n  };\n  var addedTags = {};\n  var removedTags = {};\n  Object.keys(tagUpdates).forEach(function (tagType) {\n    var _tagUpdates$tagType = tagUpdates[tagType],\n        newTags = _tagUpdates$tagType.newTags,\n        oldTags = _tagUpdates$tagType.oldTags;\n\n    if (newTags.length) {\n      addedTags[tagType] = newTags;\n    }\n\n    if (oldTags.length) {\n      removedTags[tagType] = tagUpdates[tagType].oldTags;\n    }\n  });\n  cb && cb();\n  onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n  return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n  if (typeof title !== \"undefined\" && document.title !== title) {\n    document.title = flattenArray(title);\n  }\n\n  updateAttributes(_HelmetConstants.TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n  var elementTag = document.getElementsByTagName(tagName)[0];\n\n  if (!elementTag) {\n    return;\n  }\n\n  var helmetAttributeString = elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n  var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n  var attributesToRemove = [].concat(helmetAttributes);\n  var attributeKeys = Object.keys(attributes);\n\n  for (var i = 0; i < attributeKeys.length; i++) {\n    var attribute = attributeKeys[i];\n    var value = attributes[attribute] || \"\";\n\n    if (elementTag.getAttribute(attribute) !== value) {\n      elementTag.setAttribute(attribute, value);\n    }\n\n    if (helmetAttributes.indexOf(attribute) === -1) {\n      helmetAttributes.push(attribute);\n    }\n\n    var indexToSave = attributesToRemove.indexOf(attribute);\n\n    if (indexToSave !== -1) {\n      attributesToRemove.splice(indexToSave, 1);\n    }\n  }\n\n  for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n    elementTag.removeAttribute(attributesToRemove[_i]);\n  }\n\n  if (helmetAttributes.length === attributesToRemove.length) {\n    elementTag.removeAttribute(_HelmetConstants.HELMET_ATTRIBUTE);\n  } else if (elementTag.getAttribute(_HelmetConstants.HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n    elementTag.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n  }\n};\n\nvar updateTags = function updateTags(type, tags) {\n  var headElement = document.head || document.querySelector(_HelmetConstants.TAG_NAMES.HEAD);\n  var tagNodes = headElement.querySelectorAll(type + \"[\" + _HelmetConstants.HELMET_ATTRIBUTE + \"]\");\n  var oldTags = Array.prototype.slice.call(tagNodes);\n  var newTags = [];\n  var indexToDelete = void 0;\n\n  if (tags && tags.length) {\n    tags.forEach(function (tag) {\n      var newElement = document.createElement(type);\n\n      for (var attribute in tag) {\n        if (tag.hasOwnProperty(attribute)) {\n          if (attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML) {\n            newElement.innerHTML = tag.innerHTML;\n          } else if (attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n            if (newElement.styleSheet) {\n              newElement.styleSheet.cssText = tag.cssText;\n            } else {\n              newElement.appendChild(document.createTextNode(tag.cssText));\n            }\n          } else {\n            var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n            newElement.setAttribute(attribute, value);\n          }\n        }\n      }\n\n      newElement.setAttribute(_HelmetConstants.HELMET_ATTRIBUTE, \"true\"); // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n\n      if (oldTags.some(function (existingTag, index) {\n        indexToDelete = index;\n        return newElement.isEqualNode(existingTag);\n      })) {\n        oldTags.splice(indexToDelete, 1);\n      } else {\n        newTags.push(newElement);\n      }\n    });\n  }\n\n  oldTags.forEach(function (tag) {\n    return tag.parentNode.removeChild(tag);\n  });\n  newTags.forEach(function (tag) {\n    return headElement.appendChild(tag);\n  });\n  return {\n    oldTags: oldTags,\n    newTags: newTags\n  };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n  return Object.keys(attributes).reduce(function (str, key) {\n    var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n    return str ? str + \" \" + attr : attr;\n  }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n  var attributeString = generateElementAttributesAsString(attributes);\n  var flattenedTitle = flattenArray(title);\n  return attributeString ? \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n  return tags.reduce(function (str, tag) {\n    var attributeHtml = Object.keys(tag).filter(function (attribute) {\n      return !(attribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || attribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT);\n    }).reduce(function (string, attribute) {\n      var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n      return string ? string + \" \" + attr : attr;\n    }, \"\");\n    var tagContent = tag.innerHTML || tag.cssText || \"\";\n    var isSelfClosing = _HelmetConstants.SELF_CLOSING_TAGS.indexOf(type) === -1;\n    return str + \"<\" + type + \" \" + _HelmetConstants.HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n  }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n  var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return Object.keys(attributes).reduce(function (obj, key) {\n    obj[_HelmetConstants.REACT_TAG_MAP[key] || key] = attributes[key];\n    return obj;\n  }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n  var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return Object.keys(props).reduce(function (obj, key) {\n    obj[_HelmetConstants.HTML_TAG_MAP[key] || key] = props[key];\n    return obj;\n  }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n  var _initProps; // assigning into an array to define toString function on it\n\n\n  var initProps = (_initProps = {\n    key: title\n  }, _initProps[_HelmetConstants.HELMET_ATTRIBUTE] = true, _initProps);\n  var props = convertElementAttributestoReactProps(attributes, initProps);\n  return [_react2.default.createElement(_HelmetConstants.TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n  return tags.map(function (tag, i) {\n    var _mappedTag;\n\n    var mappedTag = (_mappedTag = {\n      key: i\n    }, _mappedTag[_HelmetConstants.HELMET_ATTRIBUTE] = true, _mappedTag);\n    Object.keys(tag).forEach(function (attribute) {\n      var mappedAttribute = _HelmetConstants.REACT_TAG_MAP[attribute] || attribute;\n\n      if (mappedAttribute === _HelmetConstants.TAG_PROPERTIES.INNER_HTML || mappedAttribute === _HelmetConstants.TAG_PROPERTIES.CSS_TEXT) {\n        var content = tag.innerHTML || tag.cssText;\n        mappedTag.dangerouslySetInnerHTML = {\n          __html: content\n        };\n      } else {\n        mappedTag[mappedAttribute] = tag[attribute];\n      }\n    });\n    return _react2.default.createElement(type, mappedTag);\n  });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n  switch (type) {\n    case _HelmetConstants.TAG_NAMES.TITLE:\n      return {\n        toComponent: function toComponent() {\n          return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n        },\n        toString: function toString() {\n          return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n        }\n      };\n\n    case _HelmetConstants.ATTRIBUTE_NAMES.BODY:\n    case _HelmetConstants.ATTRIBUTE_NAMES.HTML:\n      return {\n        toComponent: function toComponent() {\n          return convertElementAttributestoReactProps(tags);\n        },\n        toString: function toString() {\n          return generateElementAttributesAsString(tags);\n        }\n      };\n\n    default:\n      return {\n        toComponent: function toComponent() {\n          return generateTagsAsReactComponent(type, tags);\n        },\n        toString: function toString() {\n          return generateTagsAsString(type, tags, encode);\n        }\n      };\n  }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n  var baseTag = _ref.baseTag,\n      bodyAttributes = _ref.bodyAttributes,\n      encode = _ref.encode,\n      htmlAttributes = _ref.htmlAttributes,\n      linkTags = _ref.linkTags,\n      metaTags = _ref.metaTags,\n      noscriptTags = _ref.noscriptTags,\n      scriptTags = _ref.scriptTags,\n      styleTags = _ref.styleTags,\n      _ref$title = _ref.title,\n      title = _ref$title === undefined ? \"\" : _ref$title,\n      titleAttributes = _ref.titleAttributes;\n  return {\n    base: getMethodsForTag(_HelmetConstants.TAG_NAMES.BASE, baseTag, encode),\n    bodyAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n    htmlAttributes: getMethodsForTag(_HelmetConstants.ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n    link: getMethodsForTag(_HelmetConstants.TAG_NAMES.LINK, linkTags, encode),\n    meta: getMethodsForTag(_HelmetConstants.TAG_NAMES.META, metaTags, encode),\n    noscript: getMethodsForTag(_HelmetConstants.TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n    script: getMethodsForTag(_HelmetConstants.TAG_NAMES.SCRIPT, scriptTags, encode),\n    style: getMethodsForTag(_HelmetConstants.TAG_NAMES.STYLE, styleTags, encode),\n    title: getMethodsForTag(_HelmetConstants.TAG_NAMES.TITLE, {\n      title: title,\n      titleAttributes: titleAttributes\n    }, encode)\n  };\n};\n\nexports.convertReactPropstoHtmlAttributes = convertReactPropstoHtmlAttributes;\nexports.handleClientStateChange = handleClientStateChange;\nexports.mapStateOnServer = mapStateOnServer;\nexports.reducePropsToState = reducePropsToState;\nexports.requestAnimationFrame = requestAnimationFrame;\nexports.warn = warn;"],"sourceRoot":""}