(\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Schema.org markup for Google+ */}\r\n \r\n \r\n \r\n\r\n {/* Twitter Card data */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* Open Graph data */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n )}\r\n />\r\n\r\n)","import { navigate, withPrefix } from 'gatsby'\nimport { setTimeout } from 'requestanimationframe-timer'\nimport { getMs } from './secondsMs'\nimport getPagesPromises from './getPagesPromises'\n\nconst triggerTransition = ({\n\tto,\n\tevent = null,\n\texit = {},\n\tentry = {},\n\tinTransition,\n\tpages,\n\ttrigger,\n\tupdateContext,\n\tlinkState,\n\treplace,\n\tpreventScrollJump,\n}) => {\n\tif (event) {\n\t\tevent.persist()\n\t\tevent.preventDefault()\n\t}\n\n\tif (inTransition) return false\n\n\tlet hash\n\n\t// handle anchor links to ID's\n\tif (to.includes('#')) {\n\t\tconst toSplit = to.split('#')\n\t\tto = toSplit[0]\n\t\thash = toSplit[1]\n\t}\n\n\t// these globals prevent the back button from being pressed during a transition as that can have unexpected results\n\twindow.__tl_inTransition = true\n\twindow.__tl_desiredPathname = withPrefix(to)\n\n\tupdateContext({\n\t\tinTransition: true,\n\t\texitDelay: 0,\n\t\texitLength: 0,\n\t\tappearAfter: 0,\n\t\texitState: {},\n\t})\n\n\tif (trigger && typeof trigger === 'function') {\n\t\ttrigger(pages)\n\t}\n\n\tconst {\n\t\tlength: exitLength = 0,\n\t\tdelay: exitDelay = 0,\n\t\tstate: exitState = {},\n\t\ttrigger: exitTrigger = () => {},\n\t} = exit\n\tconst {\n\t\tlength: entryLength = 1, // this allows scrollposition to be reset when there is no transition.\n\t\tdelay: entryDelay = 0,\n\t\tstate: entryState = {},\n\t\ttrigger: entryTrigger = () => {},\n\t\tappearAfter = 0,\n\t} = entry\n\n\tupdateContext({\n\t\tentryLength: entryLength,\n\t\tentryDelay: entryDelay,\n\t\texitLength: exitLength,\n\t\texitDelay: exitDelay,\n\t\tentryProps: entry,\n\t\texitProps: exit,\n\t\tappearAfter,\n\t\tpreventScrollJump,\n\t\texitTrigger: (exit, node, e) => exitTrigger(exit, node, e),\n\t\tentryTrigger: (entry, node, e) => entryTrigger(entry, node, e),\n\t\te: event,\n\t})\n\n\t// after exitDelay\n\tsetTimeout(() => {\n\t\tnavigate(to, {\n\t\t\tstate: {\n\t\t\t\t...linkState,\n\t\t\t},\n\t\t\treplace,\n\t\t})\n\n\t\tupdateContext({\n\t\t\texitState: exitState,\n\t\t\thash,\n\t\t})\n\t}, getMs(exitDelay))\n\n\tsetTimeout(() => {\n\t\t// wait for entryDelay before we add entry state\n\t\tupdateContext({ entryState: entryState })\n\t}, getMs(exitDelay + entryDelay))\n\n\t// reset entry animation times so they dont apply when using browser back/forward.\n\t// this will be replaced with a better solution in the future\n\tsetTimeout(\n\t\t() =>\n\t\t\tupdateContext({\n\t\t\t\tentryDelay: 0,\n\t\t\t\tappearAfter: 0,\n\t\t\t\tentryLength: 0,\n\t\t\t}),\n\t\tgetMs(exitDelay + entryDelay + entryLength)\n\t)\n\n\tconst finalResetSeconds =\n\t\texitDelay + Math.max(exitLength, entryDelay + entryLength)\n\n\t// reset exit animation times so they dont apply when using browser back/forward.\n\t// this will be replaced with a better solution in the future\n\tsetTimeout(() => {\n\t\t// these globals prevent the back button from being pressed during a transition as that can have unexpected results\n\t\twindow.__tl_inTransition = false\n\t\twindow.__tl_desiredPathname = false\n\t\twindow.__tl_back_button_pressed = false\n\n\t\tupdateContext({\n\t\t\texitDelay: 0,\n\t\t\texitLength: 0,\n\t\t\t// Once all animation is finished, it's safe to start a new animation since we're no longer inTransition.\n\t\t\tinTransition: false,\n\t\t\t// create new page promises for the trigger prop\n\t\t\t...getPagesPromises(),\n\t\t})\n\t}, getMs(finalResetSeconds) + 1)\n}\n\nexport { triggerTransition }\n","import { useRef, useContext, useEffect, useState } from 'react'\n\nimport { publicContext } from '../context/createTransitionContext'\n\nfunction TransitionObserver(props) {\n\tconst innerRef = useRef(null)\n\tconst context = useContext(publicContext)\n\tconst [contextState, updateContextState] = useState(null)\n\tconst [observing, setObserving] = useState(false)\n\n\tconst observerSupport =\n\t\t'IntersectionObserver' in window &&\n\t\t'IntersectionObserverEntry' in window &&\n\t\t'intersectionRatio' in window.IntersectionObserverEntry.prototype\n\n\tuseEffect(() => {\n\t\tif (innerRef && innerRef.current) {\n\t\t\tlet observer\n\n\t\t\tconst options = {\n\t\t\t\tthreshold: 1,\n\t\t\t}\n\n\t\t\tobserver = new IntersectionObserver(observed => {\n\t\t\t\tconst [thisObserved] = observed\n\t\t\t\tsetObserving(!!thisObserved.intersectionRatio)\n\t\t\t}, options)\n\t\t\tobserver.observe(innerRef.current)\n\n\t\t\treturn () => observer.unobserve(innerRef.current)\n\t\t}\n\t}, [innerRef])\n\n\tuseEffect(() => {\n\t\tif (!observerSupport || props.forceRender) {\n\t\t\t// always update the context if there is no intersection\n\t\t\t// observer support or if the prop forceRender is set to true\n\t\t\tupdateContextState(context)\n\t\t} else if (observing) {\n\t\t\tupdateContextState(context)\n\t\t}\n\t}, [context.transitionStatus, innerRef, observing])\n\n\treturn props.children(contextState, innerRef)\n}\n\nexport default TransitionObserver\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import React, { Component } from 'react'\nimport ReactDOM from 'react-dom'\n\nconst portalRoot = typeof document !== `undefined` ? document.body : false\n\nconst PortalContainer = props => {\n\tconst zIndex = (function(level) {\n\t\tswitch (level) {\n\t\t\tcase 'bottom':\n\t\t\t\treturn 1000\n\t\t\tcase 'top':\n\t\t\t\treturn 1200\n\t\t\tdefault:\n\t\t\t\treturn 1100\n\t\t}\n\t})(props.level)\n\n\treturn (\n\t\t\n\t\t\t{props.children}\n\t\t
\n\t)\n}\n\nexport default class TransitionPortal extends Component {\n\tconstructor() {\n\t\tsuper()\n\t\tthis.el =\n\t\t\ttypeof document !== `undefined`\n\t\t\t\t? document.createElement('section')\n\t\t\t\t: false\n\t}\n\n\tcomponentDidMount = () => {\n\t\tportalRoot && portalRoot.appendChild(this.el)\n\t}\n\n\tcomponentWillUnmount = () => {\n\t\tportalRoot && portalRoot.removeChild(this.el)\n\t}\n\n\trender() {\n\t\treturn this.el && portalRoot\n\t\t\t? ReactDOM.createPortal(\n\t\t\t\t\t<>\n\t\t\t\t\t\t{portalRoot && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t>,\n\t\t\t\t\tthis.el\n\t\t\t )\n\t\t\t: null\n\t}\n}\n","import React, { forwardRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'gatsby'\n\nimport { shouldNavigate } from '../utils/shouldNavigate'\nimport { triggerTransition } from '../utils/triggerTransition'\nimport { Consumer } from '../context/createTransitionContext'\n\nif (typeof forwardRef === 'undefined') {\n\tforwardRef = C => C\n}\n\nconst TransitionLink = forwardRef(\n\t(\n\t\t{\n\t\t\tto,\n\t\t\tchildren,\n\t\t\texit,\n\t\t\tentry,\n\t\t\tactiveStyle,\n\t\t\tpartiallyActive,\n\t\t\tstyle,\n\t\t\tclassName,\n\t\t\tactiveClassName,\n\t\t\tstate,\n\t\t\tonClick,\n\t\t\ttrigger,\n\t\t\treplace,\n\t\t\tinnerRef,\n\t\t\tpreventScrollJump,\n\t\t\t...rest\n\t\t},\n\t\tref\n\t) => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{({ disableAnimation, ...context }) => (\n\t\t\t\t\t {\n\t\t\t\t\t\t\t// If the user has set their browser or OS to prefers-reduced-motion\n\t\t\t\t\t\t\t// we should respect that.\n\t\t\t\t\t\t\tif (disableAnimation) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst weShouldNavigate = shouldNavigate(event)\n\n\t\t\t\t\t\t\tif (weShouldNavigate) {\n\t\t\t\t\t\t\t\ttriggerTransition({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\t\t\texit,\n\t\t\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t\t\t\ttrigger,\n\t\t\t\t\t\t\t\t\treplace,\n\t\t\t\t\t\t\t\t\tpreventScrollJump,\n\t\t\t\t\t\t\t\t\tlinkState: state,\n\t\t\t\t\t\t\t\t\t...context,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof onClick === 'function') {\n\t\t\t\t\t\t\t\tonClick(event, weShouldNavigate)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tto={to} // use gatsby link so prefetching still happens. this is prevent defaulted in triggertransition\n\t\t\t\t\t\tref={ref || innerRef}\n\t\t\t\t\t\t{...rest}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t)\n\t}\n)\n\nTransitionLink.propTypes = {\n\tto: PropTypes.string.isRequired,\n\texitLength: PropTypes.number,\n\tentryDelay: PropTypes.number,\n\texitFn: PropTypes.func,\n\tentryState: PropTypes.object,\n}\n\nexport { TransitionLink }\n","import { useContext } from 'react'\nimport { navigate } from 'gatsby'\nimport { Context } from '../context/createTransitionContext'\nimport { triggerTransition } from '../utils/triggerTransition'\n\nconst useTriggerTransition = defaultOptions => {\n\tconst context = useContext(Context)\n\tconst programmaticallyTriggerTransition = calledOptions => {\n\t\t// allow passing an event directly instead of options\n\t\tif (\n\t\t\tcalledOptions instanceof Event ||\n\t\t\t(calledOptions.nativeEvent &&\n\t\t\t\tcalledOptions.nativeEvent instanceof Event)\n\t\t) {\n\t\t\tcalledOptions = {\n\t\t\t\tevent: calledOptions,\n\t\t\t}\n\t\t}\n\n\t\tconst options = {\n\t\t\t...defaultOptions,\n\t\t\t...calledOptions,\n\t\t}\n\n\t\tif (context.disableAnimation) {\n\t\t\t// If the user has set their browser or OS to prefers-reduced-motion\n\t\t\t// we should respect that.\n\t\t\tif (options.event) {\n\t\t\t\toptions.event.persist()\n\t\t\t\toptions.event.preventDefault()\n\t\t\t}\n\t\t\tnavigate(options.to)\n\t\t} else {\n\t\t\ttriggerTransition({\n\t\t\t\t...context,\n\t\t\t\t...options,\n\t\t\t})\n\t\t}\n\t}\n\treturn programmaticallyTriggerTransition\n}\n\nexport { useTriggerTransition }\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyODQuMDggMjkuOTUiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZmZmO30uY2xzLTJ7ZmlsbDojZjU4MjIwO308L3N0eWxlPjwvZGVmcz48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTI1LjMzLDIyLjM1YTQ3LDQ3LDAsMCwxLTIuMzksNi40N0EzNi4yNCwzNi4yNCwwLDAsMSwxNS4yMSwzMEM0LjYyLDMwLDAsMjIuNjgsMCwxNi4wNSwwLDcuMjMsNi43NiwxLjM5LDE2LjMsMS4zOWEzMi43NCwzMi43NCwwLDAsMSw3LjQzLDEuMTNjLjM0LDIuMzUuNjMsNC4xMi44OSw2LjQzbC0xLjMxLjI5QzIyLjE4LDQuNzEsMTkuNTMsMywxNS4yMSwzLDguMzYsMyw0LjcsOC44Niw0LjcsMTUuMjEsNC43LDIzLDkuMiwyOC4zNSwxNS41LDI4LjM1YzQuMTYsMCw2LjQzLTIuMzEsOC41Ny02LjQ2WiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTM5LjA4LDI5LjgzQTMuMjQsMy4yNCwwLDAsMSwzNywyOWEzLjc0LDMuNzQsMCwwLDEtMS0xLjgxYy0xLjY4LDEuMTMtMy43LDIuNjUtNC44OCwyLjY1QTUuMTksNS4xOSwwLDAsMSwyNiwyNC42NmMwLTIuMSwxLjA5LTMuMzYsMy4zNi00LjEyLDIuNTItLjg4LDUuNjMtMiw2LjU1LTIuNzd2LS44NGMwLTIuOTQtMS4zNC00LjYyLTMuMzYtNC42MmEyLjI3LDIuMjcsMCwwLDAtMS44MS44LDcsNywwLDAsMC0xLjIxLDIuODEsMS4yNywxLjI3LDAsMCwxLTEuMzUsMSwyLjE0LDIuMTQsMCwwLDEtMi0xLjg1YzAtLjY3LjU0LTEuMTMsMS4zOC0xLjc2QTE5LjE4LDE5LjE4LDAsMCwxLDM0LDEwLjQyYTUuNjcsNS42NywwLDAsMSwzLjUzLDEuMTNjMS41NSwxLjI2LDIsMywyLDUuMjV2Ny42NWMwLDEuODkuNzIsMi40OCwxLjQzLDIuNDhhMy42NiwzLjY2LDAsMCwwLDEuNTEtLjQybC40MiwxLjEzWk0zNS44OSwxOS4yNGMtLjg4LjQ2LTIuNiwxLjI2LTMuNTMsMS42OC0xLjU1Ljc2LTIuNDMsMS41MS0yLjQzLDMuMDdhMywzLDAsMCwwLDIuODksMy4xOSw1LjA1LDUuMDUsMCwwLDAsMy4wNy0xLjM1WiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTc2LjA2LDguNDljLS43NS0yLjY1LTItNS42My01LjU0LTUuNjNhNC4zNCw0LjM0LDAsMCwwLTQuNTgsNC41M2MwLDIuOTQsMS45Myw0LjM3LDUuMzMsNi4wOXM3LjI3LDMuNzksNy4yNyw4LjQxUzc0Ljc2LDMwLDY5LjA1LDMwYTEzLjM3LDEzLjM3LDAsMCwxLTQuMTItLjYzLDE0LjIyLDE0LjIyLDAsMCwxLTIuMTgtLjg4LDUwLjQyLDUwLjQyLDAsMCwxLTEuMTQtNi42NGwxLjMtLjMzYy42OCwyLjYsMi42NSw2LjkzLDYuOTQsNi45M2E0LjU3LDQuNTcsMCwwLDAsNC45MS00LjkyYzAtMy0yLjIzLTQuNDktNS4zOC02LjE3LTMtMS41Ni03LTMuNy03LTguMzIsMC00LjEyLDMuMzItNy42LDguODItNy42YTE3LjM3LDE3LjM3LDAsMCwxLDUuMzgsMWMuMTYsMS41Mi40MiwzLjIuNzUsNS44NFoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xMDMuNTcsMjkuODNhMy4yOSwzLjI5LDAsMCwxLTIuMDYtLjg0LDMuODIsMy44MiwwLDAsMS0xLTEuODFjLTEuNjcsMS4xMy0zLjY5LDIuNjUtNC44NywyLjY1YTUuMTksNS4xOSwwLDAsMS01LjE2LTUuMTdjMC0yLjEsMS4wOS0zLjM2LDMuMzYtNC4xMiwyLjUyLS44OCw1LjYzLTIsNi41NS0yLjc3di0uODRjMC0yLjk0LTEuMzQtNC42Mi0zLjM2LTQuNjJhMi4yNywyLjI3LDAsMCwwLTEuODEuOEE3LjE1LDcuMTUsMCwwLDAsOTQsMTUuOTJhMS4yNiwxLjI2LDAsMCwxLTEuMzQsMSwyLjE0LDIuMTQsMCwwLDEtMi0xLjg1YzAtLjY3LjU0LTEuMTMsMS4zOC0xLjc2YTE5LjA5LDE5LjA5LDAsMCwxLDYuNDMtMi45NEE1LjY5LDUuNjksMCwwLDEsMTAyLDExLjU1YzEuNTUsMS4yNiwyLDMsMiw1LjI1djcuNjVjMCwxLjg5LjcyLDIuNDgsMS40MywyLjQ4YTMuNywzLjcsMCwwLDAsMS41MS0uNDJsLjQyLDEuMTNabS0zLjE5LTEwLjU5Yy0uODguNDYtMi42MSwxLjI2LTMuNTMsMS42OC0xLjU1Ljc2LTIuNDQsMS41MS0yLjQ0LDMuMDdhMywzLDAsMCwwLDIuOSwzLjE5LDUuMDgsNS4wOCwwLDAsMCwzLjA3LTEuMzVaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTMzLDI1LjcyYy0yLjY0LDMuNC01LjU4LDQuMTYtNyw0LjE2LTUuMjUsMC04LjI3LTQuMi04LjI3LTguOTVhMTAuOCwxMC44LDAsMCwxLDIuODEtNy4zOSw4LjY1LDguNjUsMCwwLDEsNi4yMi0zLjA3LDYuNTMsNi41MywwLDAsMSw2LjM4LDYuNDdjMCwuODQtLjE3LDEuMjItMSwxLjM5LS42Ny4wOC01LjkyLjUtMTAuNzkuNjcuMDgsNS41LDMuMjMsNy44NSw2LjE3LDcuODVhNyw3LDAsMCwwLDQuNzktMi4wNVptLTExLjM4LTguNDljMi4yMywwLDQuNDEsMCw2LjcyLS4xMi43MiwwLDEtLjIxLDEtLjg0LDAtMi4xOS0xLjMtNC4yNS0zLjQ5LTQuMjVDMTI0LDEyLDEyMi4xNywxMy44MywxMjEuNjIsMTcuMjNaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTYwLjk0LDguNEE5LjQzLDkuNDMsMCwwLDAsMTU5LjY4LDVDMTU5LDMuODYsMTU4LDMuNTMsMTU1LDMuNTNoLTNjLTEuMjYsMC0xLjQzLjEyLTEuNDMsMS4zOXY5LjgyaDQuMjFjMy43OCwwLDQtLjM3LDQuNTMtMy4wNmgxLjI2djguMTFoLTEuMjZjLS41LTIuODYtLjc1LTMuMzItNC41My0zLjMyaC00LjIxVjIzLjljMCwzLjcuMzgsMy45MSw0LjE2LDQuMnYxLjIySDE0M1YyOC4xYzMuMjgtLjI1LDMuNjYtLjUsMy42Ni00LjJWNy4zOWMwLTMuNjUtLjM0LTMuODYtMy41Ny00LjExVjJoMTguNzNjLjA1LDEuMzguMjYsNC4xNi40Miw2LjIxWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTE4My41LDI4LjMxYTUxLjIsNTEuMiwwLDAsMC02LjQzLDEuNTJsLS4yOS0uMjZ2LTIuOWEyNi45NCwyNi45NCwwLDAsMS0yLjksMi4wNiw2LjMyLDYuMzIsMCwwLDEtMy4zMiwxLjFjLTIuOTQsMC01LjI1LTEuODEtNS4yNS02LjIyVjE1LjMzYzAtMi4zMS0uMTctMi40OC0yLjU3LTIuOXYtMWE1NS40Nyw1NS40NywwLDAsMCw2LjM5LS43NUMxNjksMTIsMTY5LDE0LDE2OSwxNi44djUuNzJjMCwzLjU3LDEuNzcsNC41NywzLjU3LDQuNTdhNiw2LDAsMCwwLDQuMjUtMS44OVYxNS4zM2MwLTIuMzUtLjIxLTIuNTItMy4xNi0yLjl2LTFhNDguMTIsNDguMTIsMCwwLDAsNi44NS0uNzVWMjQuNTdjMCwyLjE1LjM0LDIuNDQsMS45MywyLjU3bDEuMS4wOFoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yMTguNjksMjUuNjdjLTIuNjUsMy40LTUuNTksNC4xNi03LDQuMTYtNS4yNSwwLTguMjgtNC4yMS04LjI4LTguOTVhMTAuNzksMTAuNzksMCwwLDEsMi44Mi03LjQsOC42Nyw4LjY3LDAsMCwxLDYuMjEtMy4wNiw2LjU0LDYuNTQsMCwwLDEsNi4zOSw2LjQ3YzAsLjg0LS4xNywxLjIyLTEsMS4zOC0uNjcuMDktNS45Mi41MS0xMC44LjY4LjA5LDUuNSwzLjI0LDcuODUsNi4xOCw3Ljg1QTcsNywwLDAsMCwyMTgsMjQuNzRabS0xMS4zOC04LjQ5YzIuMjIsMCw0LjQxLDAsNi43Mi0uMTIuNzEsMCwxLS4yMSwxLS44NSwwLTIuMTgtMS4zLTQuMjQtMy40OC00LjI0QzIwOS42NiwxMiwyMDcuODUsMTMuNzgsMjA3LjMxLDE3LjE4WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTIyNS43NSwxNC44N2MxLjMtMi4yMywzLjA2LTQuNDUsNS00LjQ1YTIuMzksMi4zOSwwLDAsMSwyLjUyLDIuMTgsMi41MywyLjUzLDAsMCwxLTEuNDcsMi4yNywxLDEsMCwwLDEtMS4xMy0uMTMsMi41MywyLjUzLDAsMCwwLTEuODUtLjg0Yy0xLDAtMi4yNywxLjEtMy4xNSwzLjMyVjI1YzAsMi43My4yMSwzLDMuNDUsMy4yNHYxLjEzaC0xMFYyOC4xOWMyLjU2LS4yNSwyLjg1LS41MSwyLjg1LTMuMjRWMTYuMTdjMC0yLjY5LS4yMS0yLjgxLTIuNTItMy4xOVYxMmEyOCwyOCwwLDAsMCw2LjIyLTEuNjh2NC41NFoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNDIuNzUsMjkuMjhhNC4wOCw0LjA4LDAsMCwxLTEuNzIuNTVjLTIuNzcsMC00LjMzLTEuNjQtNC4zMy01VjEyLjY0aC0yLjg1bC0uMTctLjQ2LDEuMTMtMS4yNmgxLjg5VjcuODZMMjM5LjgxLDVsLjU1LjEydjUuOEgyNDZsLTEuMjUsMS43MmgtNC40MVYyMy4zNmMwLDMuMzYsMS40MiwzLjk0LDIuNDgsMy45NGE1LjY2LDUuNjYsMCwwLDAsMi40Ny0uNjNsLjM4LDEuMTRaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTE0LjY2LDI5LjI4YTQuMDgsNC4wOCwwLDAsMS0xLjcyLjU1Yy0yLjc3LDAtNC4zMy0xLjY0LTQuMzMtNVYxMi42NGgtMi44NWwtLjE3LS40NiwxLjEzLTEuMjZoMS44OVY3Ljg2TDExMS43Miw1bC41NS4xMnY1LjhoNS42NmwtMS4yNSwxLjcyaC00LjQxVjIzLjM2YzAsMy4zNiwxLjQzLDMuOTQsMi40OCwzLjk0YTUuNzUsNS43NSwwLDAsMCwyLjQ4LS42M2wuMzcsMS4xNFoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik04Ni41MiwyOS4yOGE0LjA4LDQuMDgsMCwwLDEtMS43Mi41NWMtMi43NywwLTQuMzMtMS42NC00LjMzLTVWMTIuNjRINzcuNjJsLS4xNy0uNDYsMS4xMy0xLjI2aDEuODlWNy44Nkw4My41OCw1bC41NS4xMnY1LjhoNS42NmwtMS4yNSwxLjcySDg0LjEzVjIzLjM2YzAsMy4zNiwxLjQzLDMuOTQsMi40OCwzLjk0YTUuNzUsNS43NSwwLDAsMCwyLjQ4LS42M2wuMzcsMS4xNFoiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0xOTMuNTMsMjYuNjdhNS43MSw1LjcxLDAsMCwxLTIuNDguNjNjLTEsMC0yLjQzLS41Ny0yLjQ3LTMuNzlWMGEzOC4wNSwzOC4wNSwwLDAsMS02LjUxLDEuNDd2MWMyLjYuMjUsMi44NS4zOCwyLjg1LDMuMTVWNy44NmgwVjI1LjQxYTIuNjMsMi42MywwLDAsMCwuMDkuNjZjLjM2LDIuNTMsMS44NCwzLjc2LDQuMjQsMy43NmE0LjE2LDQuMTYsMCwwLDAsMS43Mi0uNTVsMi45NC0xLjQ3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUyLDI2LjY3YTUuNzEsNS43MSwwLDAsMS0yLjQ4LjYzYy0xLDAtMi40Mi0uNTctMi40Ny0zLjc5VjBhMzcuNjIsMzcuNjIsMCwwLDEtNi41MSwxLjQ3djFjMi42LjI1LDIuODYuMzgsMi44NiwzLjE1VjcuODZoMFYyNC43OHMwLDAsMCwuMDd2LjU2YTIuNjUsMi42NSwwLDAsMCwuMDguNjZjLjM2LDIuNTMsMS44NCwzLjc2LDQuMjQsMy43NmE0LjA4LDQuMDgsMCwwLDAsMS43Mi0uNTVsMi45NC0xLjQ3WiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTIwMy4wNiwyNi42N2E1LjY2LDUuNjYsMCwwLDEtMi40Ny42M2MtMSwwLTIuNDMtLjU3LTIuNDgtMy43OVYwYTM3LjYyLDM3LjYyLDAsMCwxLTYuNTEsMS40N3YxYzIuNi4yNSwyLjg2LjM4LDIuODYsMy4xNVY3Ljg2aDBWMjQuNzhzMCwwLDAsLjA3di41NmEyLjY1LDIuNjUsMCwwLDAsLjA4LjY2Yy4zNiwyLjUzLDEuODQsMy43Niw0LjI0LDMuNzZhNC4wOCw0LjA4LDAsMCwwLDEuNzItLjU1bDIuOTQtMS40N1oiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjMuNTUsMTkuNzljMCw2LjgtNC45MiwxMC05LjIsMTBBOS4xMyw5LjEzLDAsMCwxLDI0NSwyMC41NGMwLTYuOTMsNS4zOC0xMC4xMiw5LjM3LTEwLjEyQTkuMTUsOS4xNSwwLDAsMSwyNjMuNTUsMTkuNzlabS0xNC4yNC0uNjNjMCw1LjI5LDIuMTQsOS4yNCw1LjUsOS4yNCwyLjM5LDAsNC40NS0xLjc3LDQuNDUtNy42MSwwLTUuMDgtMS44OS04Ljk0LTUuMzgtOC45NEMyNTEuNDUsMTEuODUsMjQ5LjMxLDE0LjM3LDI0OS4zMSwxOS4xNloiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik0yNzUuMTQsMjkuMzJWMjguMTljMi4zNS0uMjUsMi42NC0uNTUsMi42NC0zLjQ5di03YzAtMy0xLjA5LTQuNjctMy42NS00LjY3YTcuMTUsNy4xNSwwLDAsMC00LjMzLDJWMjVjMCwyLjgyLjI1LDMsMi42MSwzLjI0djEuMTNoLTkuMjlWMjguMTljMi43Ny0uMywzLS41MSwzLTMuMjh2LTguN2MwLTIuNjQtLjI2LTIuNzctMi40OC0zLjE5VjEyYTMwLjUzLDMwLjUzLDAsMCwwLDYuMTctMS43MnYzLjMyYy44NC0uNjMsMS43Mi0xLjI2LDIuNzctMS45M0E2LjExLDYuMTEsMCwwLDEsMjc2LDEwLjQyYzMuMzYsMCw1LjQyLDIuMzUsNS40Miw2LjQzVjI1YzAsMi44Mi4yNSwyLjk0LDIuNjQsMy4yNHYxLjEzWiIvPjwvZz48L2c+PC9zdmc+\"","/*\n * adapted from @reach/router implementation:\n * defintion: https://github.com/reach/router/blob/master/src/index.js#L542-L545\n * usage: https://github.com/reach/router/blob/master/src/index.js#L391-L397\n */\n\nconst shouldNavigate = event =>\n\t!event.defaultPrevented &&\n\tevent.button === 0 &&\n\t!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)\n\nexport { shouldNavigate }\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\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 } // START: Modifications:\n // 1. Extra `has &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n\n\n var it;\n\n if (hasMap && a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n }\n\n return true;\n }\n\n if (hasSet && a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n it = a.entries();\n\n while (!(i = it.next()).done) {\n if (!b.has(i.value[0])) return false;\n }\n\n return true;\n } // END: Modifications\n\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n\n for (i = length; i-- !== 0;) {\n if (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 } // END: fast-deep-equal\n // START: react-fast-compare\n // custom handling for DOM elements\n\n\n if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact\n\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n continue;\n } // all other properties should be traversed as usual\n\n\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n } // END: react-fast-compare\n // START: fast-deep-equal\n\n\n return true;\n }\n\n return a !== a && b !== b;\n} // end fast-deep-equal\n\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message || '').match(/stack|recursion/i)) {\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('react-fast-compare cannot handle circular refs');\n return false;\n } // some other error. we should definitely know about these\n\n\n throw error;\n }\n};","module.exports = __webpack_public_path__ + \"static/the-talk-title-loop-de04c357f8819629a949da48041af34f.gif\";","import { TransitionLink } from './components/TransitionLink'\nimport TransitionHandler from './components/TransitionHandler'\nimport { PublicConsumer as TransitionState } from './context/createTransitionContext'\nimport TransitionPortal from './components/TransitionPortal'\nimport TransitionObserver from './components/TransitionObserver'\nimport { useTriggerTransition } from './hooks'\n\nexport {\n\tTransitionHandler,\n\tTransitionState,\n\tTransitionPortal,\n\tTransitionObserver,\n\tuseTriggerTransition,\n}\nexport default TransitionLink\n","export { useTransitionState } from './useTransitionState'\nexport { useTriggerTransition } from './useTriggerTransition'\n","import \"core-js/modules/es.array.reduce.js\";\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\nvar 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 = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\nvar 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 TARGET: \"target\"\n};\nvar 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 = {\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 = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\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 classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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 _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 inherits = function 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 objectWithoutProperties = function 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\nvar possibleConstructorReturn = function 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\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, \"&\").replace(//g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, 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 Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, 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[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[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 === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === 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 === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === 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 = objectAssign({}, 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([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(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.requestAnimationFrame.bind(window) || 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(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n updateTitle(title, titleAttributes);\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(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(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(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(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + 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 === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === 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(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 + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"\" + type + \">\" : \"<\" + type + \" \" + 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 === TAG_PROPERTIES.INNER_HTML || attribute === 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 = SELF_CLOSING_TAGS.indexOf(type) === -1;\n return str + \"<\" + type + \" \" + 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[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[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[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n return [React.createElement(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[HELMET_ATTRIBUTE] = true, _mappedTag);\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === 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 React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case 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 ATTRIBUTE_NAMES.BODY:\n case 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(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, {\n title: title,\n titleAttributes: titleAttributes\n }, encode)\n };\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 return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(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 TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case 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 _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\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 TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\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 _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + 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 React.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 var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case 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 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 React.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\": \"
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$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.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 = 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 = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\nexport default HelmetExport;\nexport { HelmetExport as Helmet };"],"sourceRoot":""}