{"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-4c1232454ad5571a0b75.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":""}