{"version":3,"file":"static/js/614.3806fc27.chunk.js","mappings":"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","sources":["assets/backToTop.svg","webpack://wddse-spa/./src/components/common/BackToTopBtn/BackToTopBtn.scss?8086","components/common/BackToTopBtn/BackToTopBtn.js","components/common/ContentPageLayout/ContentPageLayout.js","webpack://wddse-spa/./src/components/common/ContentPageLayout/ContentPageNav.scss?4dc9","components/common/ContentPageLayout/ContentPageNav.js","webpack://wddse-spa/./src/scss/_variables.scss?aaf3","components/layout/ScrollSpy/ScrollSpy.js"],"sourcesContent":["var _defs, _g;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgBackToTop(_ref, svgRef) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 60 60\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null)), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, /*#__PURE__*/React.createElement(\"rect\", {\n    width: 60,\n    height: 60,\n    fill: \"#0071BC\",\n    rx: 30\n  }), /*#__PURE__*/React.createElement(\"g\", {\n    fill: \"#FFF\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M30.825 11.498l5.799 6.077a.634.634 0 010 .877l-.355.366a.587.587 0 01-.85 0L30.4 13.54l-5.019 5.273a.587.587 0 01-.85 0l-.355-.366a.634.634 0 010-.877l5.8-6.078a.592.592 0 01.849.006z\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"nonzero\",\n    d: \"M21.012 32c.552 0 1.028-.108 1.428-.324.4-.216.702-.508.906-.876.204-.368.306-.776.306-1.224 0-.456-.116-.86-.348-1.212a2.172 2.172 0 00-.864-.78c.28-.136.524-.354.732-.654.208-.3.312-.674.312-1.122 0-.656-.216-1.188-.648-1.596-.432-.408-1.072-.612-1.92-.612H17.64a.249.249 0 00-.192.078.297.297 0 00-.072.21v7.836c0 .08.024.146.072.198a.249.249 0 00.192.078h3.372zm-.276-4.836h-2.232v-2.616h2.232c.528 0 .926.108 1.194.324.268.216.402.532.402.948 0 .424-.136.754-.408.99-.272.236-.668.354-1.188.354zm.12 3.888h-2.352V28.1h2.352c.512 0 .914.136 1.206.408.292.272.438.628.438 1.068 0 .432-.146.786-.438 1.062-.292.276-.694.414-1.206.414zm6.096 1.068c.528 0 .96-.088 1.296-.264.336-.176.592-.396.768-.66v.528c0 .08.024.146.072.198a.249.249 0 00.192.078h.528a.268.268 0 00.276-.276v-3.9c0-.624-.194-1.144-.582-1.56-.388-.416-1.03-.624-1.926-.624-.52 0-.96.09-1.32.27-.36.18-.626.392-.798.636-.172.244-.258.458-.258.642 0 .072.026.134.078.186a.254.254 0 00.186.078h.468a.239.239 0 00.15-.042.388.388 0 00.102-.162c.104-.2.268-.374.492-.522.224-.148.52-.222.888-.222.952 0 1.428.412 1.428 1.236v.348l-1.8.252c-.744.112-1.332.336-1.764.672-.432.336-.648.768-.648 1.296 0 .336.098.642.294.918.196.276.46.494.792.654.332.16.694.24 1.086.24zm.24-.876c-.368 0-.686-.088-.954-.264a.851.851 0 01-.402-.756c0-.288.148-.528.444-.72.296-.192.732-.328 1.308-.408l1.404-.204v.336c0 .656-.168 1.156-.504 1.5-.336.344-.768.516-1.296.516zm7.128.876c.576 0 1.062-.104 1.458-.312.396-.208.692-.464.888-.768.196-.304.302-.604.318-.9a.22.22 0 00-.078-.192.284.284 0 00-.198-.084h-.528c-.08 0-.14.018-.18.054a.565.565 0 00-.12.198c-.144.392-.34.67-.588.834-.248.164-.568.246-.96.246-.504 0-.904-.156-1.2-.468-.296-.312-.456-.788-.48-1.428l-.012-.42.012-.42c.024-.64.184-1.116.48-1.428.296-.312.696-.468 1.2-.468.384 0 .702.082.954.246.252.164.45.442.594.834.04.096.08.162.12.198.04.036.1.054.18.054h.528a.284.284 0 00.198-.084.22.22 0 00.078-.192 1.858 1.858 0 00-.318-.912c-.196-.304-.492-.558-.888-.762-.396-.204-.882-.306-1.458-.306-.856 0-1.524.242-2.004.726s-.732 1.162-.756 2.034l-.012.48.012.48c.024.872.276 1.55.756 2.034.48.484 1.148.726 2.004.726zm4.908-.12a.268.268 0 00.276-.276v-2.496l2.712 2.568c.096.088.17.144.222.168a.665.665 0 00.258.036h.588c.072 0 .13-.024.174-.072a.256.256 0 00.066-.18c0-.064-.044-.14-.132-.228l-3.108-2.976 2.808-2.304c.088-.08.132-.156.132-.228a.252.252 0 00-.066-.186.235.235 0 00-.174-.066h-.6a.539.539 0 00-.228.036c-.048.024-.132.08-.252.168l-2.4 1.98v-4.188a.268.268 0 00-.276-.276h-.516a.28.28 0 00-.198.072.264.264 0 00-.078.204v7.968a.268.268 0 00.276.276h.516zM16.422 46c.08 0 .144-.026.192-.078a.28.28 0 00.072-.198v-.396a.28.28 0 00-.072-.198.249.249 0 00-.192-.078h-.732c-.32 0-.546-.104-.678-.312-.132-.208-.198-.516-.198-.924v-3.132h1.488a.28.28 0 00.198-.072.249.249 0 00.078-.192v-.384a.268.268 0 00-.276-.276h-1.488v-2.004a.268.268 0 00-.276-.276h-.528a.249.249 0 00-.192.078.28.28 0 00-.072.198v2.004h-.948a.249.249 0 00-.192.078.28.28 0 00-.072.198v.384c0 .08.024.144.072.192a.26.26 0 00.192.072h.948V43.9c0 1.4.62 2.1 1.86 2.1h.816zm3.972.12c.88 0 1.558-.248 2.034-.744.476-.496.73-1.156.762-1.98a5.7 5.7 0 000-1.032c-.032-.824-.29-1.484-.774-1.98-.484-.496-1.158-.744-2.022-.744-.864 0-1.538.248-2.022.744-.484.496-.742 1.156-.774 1.98l-.012.516.012.516c.032.824.286 1.484.762 1.98.476.496 1.154.744 2.034.744zm0-.9c-.512 0-.918-.162-1.218-.486-.3-.324-.462-.79-.486-1.398l-.012-.456.012-.456c.024-.608.186-1.074.486-1.398.3-.324.706-.486 1.218-.486s.918.162 1.218.486c.3.324.462.79.486 1.398.008.08.012.232.012.456v.126a4.181 4.181 0 01-.012.33c-.024.608-.186 1.074-.486 1.398-.3.324-.706.486-1.218.486zm10.128.78c.08 0 .148-.026.204-.078a.258.258 0 00.084-.198v-7.092h2.304a.268.268 0 00.276-.276v-.468a.297.297 0 00-.072-.21.264.264 0 00-.204-.078h-5.76a.268.268 0 00-.198.078.284.284 0 00-.078.21v.468a.268.268 0 00.276.276h2.316v7.092a.268.268 0 00.276.276h.576zm6.612.12c.88 0 1.558-.248 2.034-.744.476-.496.73-1.156.762-1.98a5.7 5.7 0 000-1.032c-.032-.824-.29-1.484-.774-1.98-.484-.496-1.158-.744-2.022-.744-.864 0-1.538.248-2.022.744-.484.496-.742 1.156-.774 1.98l-.012.516.012.516c.032.824.286 1.484.762 1.98.476.496 1.154.744 2.034.744zm0-.9c-.512 0-.918-.162-1.218-.486-.3-.324-.462-.79-.486-1.398l-.012-.456.012-.456c.024-.608.186-1.074.486-1.398.3-.324.706-.486 1.218-.486s.918.162 1.218.486c.3.324.462.79.486 1.398.008.08.012.232.012.456v.126a4.181 4.181 0 01-.012.33c-.024.608-.186 1.074-.486 1.398-.3.324-.706.486-1.218.486zm5.16 3.06a.268.268 0 00.276-.276v-2.796c.44.608 1.088.912 1.944.912.84 0 1.47-.268 1.89-.804.42-.536.642-1.212.666-2.028.008-.088.012-.224.012-.408 0-.184-.004-.32-.012-.408-.024-.824-.246-1.502-.666-2.034-.42-.532-1.05-.798-1.89-.798-.856 0-1.516.308-1.98.924v-.528c0-.088-.024-.156-.072-.204-.048-.048-.116-.072-.204-.072h-.504a.28.28 0 00-.198.072.264.264 0 00-.078.204v7.968c0 .088.026.156.078.204a.28.28 0 00.198.072h.54zm1.992-3.096c-.544 0-.962-.178-1.254-.534a2.045 2.045 0 01-.462-1.266 6.063 6.063 0 01-.012-.468v-.126c.002-.158.006-.272.012-.342.016-.504.166-.942.45-1.314.284-.372.706-.558 1.266-.558 1.136 0 1.704.768 1.704 2.304 0 .152-.004.268-.012.348-.024.584-.168 1.056-.432 1.416-.264.36-.684.54-1.26.54z\"\n  })))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgBackToTop);\nexport default __webpack_public_path__ + \"static/media/backToTop.f851185e53dbf911db20352932a8345a.svg\";\nexport { ForwardRef as ReactComponent };","// extracted by mini-css-extract-plugin\nexport default {\"btnSize\":\"60px\",\"btnOffsetBottom\":\"50px\"};","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport Fade from 'react-bootstrap/Fade'\nimport PropTypes from 'prop-types'\nimport backToTopImg from '../../../assets/backToTop.svg'\n\nimport scssVar from './BackToTopBtn.scss'\n\nconst btnSize = parseInt(scssVar.btnSize || '60px', 10)\nconst btnOffsetBottom = parseInt(scssVar.btnOffsetBottom || '50px', 10)\n\nfunction scrollToTop () {\n  window.scroll({\n    top: 0,\n    left: 0,\n    behavior: 'smooth'\n  })\n}\n\n/**\n * Determine if top edge of the viewport is scrolled passed a given ref's top edge\n * @param {object} ref - React ref (start ref)\n * @param {number} currentScrollTop\n * @param {number} thresholdPadding - adds padding to make a positive determination lower on the page than the actual ref's top\n * @returns {boolean}\n */\nexport function determineIfScrolledPassedTop (ref, currentScrollTop = 0, thresholdPadding = 400) {\n  if (!ref.current) { return false }\n  const { top } = ref.current.getBoundingClientRect()\n  // original spec from DatasetPage was to have the button show up halfway down the first section, but\n  // since this is now being used everywhere and articles can have very long first sections, we will\n  // use a fixed number to pad the threshold of when the button shows (per discussion with design);\n  // this can be prop-based in the future if this needs to be adjusted on a per page basis\n  const threshold = top + currentScrollTop + thresholdPadding\n  return currentScrollTop > threshold\n}\n\n/**\n * Determine if bottom edge of the viewport is scrolled passed a given ref's bottom edge\n * @param {object} ref - React ref (stop ref)\n * @param {number} currentScrollTop\n * @param {number} windowHeight\n * @returns {boolean}\n */\nexport function determineIfScrolledPassedBottom (ref, currentScrollTop = 0, windowHeight = 800) {\n  if (!ref.current) { return false }\n  const { bottom } = ref.current.getBoundingClientRect()\n  const bottomViewportEdge = currentScrollTop + windowHeight\n  return bottomViewportEdge >= bottom + currentScrollTop\n}\n\n/**\n * Calculate the absolute top offset (relative to the <body/>) for the BackToTopBtn to make it\n * appear 'sticky' to the stop ref\n * @param {object} ref - React ref (stop ref)\n * @param {number} currentScrollTop\n * @returns {boolean}\n */\nexport function calculateAbsoluteTopOffset (ref, currentScrollTop) {\n  if (!ref.current) { return false }\n  const { top } = ref.current.getBoundingClientRect()\n  return top + currentScrollTop - btnOffsetBottom - btnSize\n}\n\nfunction BackToTopBtn (props) {\n  const { startRef, stopRef, thresholdTop } = props\n  const [isShowing, setIsShowing] = useState(false)\n  const [absoluteTop, setAbsoluteTop] = useState(null)\n  const timeout = useRef(null)\n\n  const handleWindowEvent = useCallback(() => {\n    if (timeout.current) {\n      window.cancelAnimationFrame(timeout)\n    }\n\n    timeout.current = window.requestAnimationFrame(() => {\n      const currentScrollTop = window.pageYOffset\n      const shouldShow = determineIfScrolledPassedTop(startRef, currentScrollTop, thresholdTop)\n\n      if (isShowing) {\n        const isScrolledPassedBottom = determineIfScrolledPassedBottom(stopRef, currentScrollTop, window.innerHeight)\n\n        const updatedAbsoluteTop = isScrolledPassedBottom\n          ? calculateAbsoluteTopOffset(stopRef, currentScrollTop)\n          : null\n\n        setAbsoluteTop(updatedAbsoluteTop)\n      }\n\n      if (shouldShow !== isShowing) {\n        setIsShowing(shouldShow)\n      }\n    })\n  }, [\n    startRef,\n    stopRef,\n    isShowing,\n    thresholdTop\n  ])\n\n  useEffect(() => {\n    window.addEventListener('scroll', handleWindowEvent)\n    window.addEventListener('resize', handleWindowEvent)\n\n    return () => {\n      window.removeEventListener('scroll', handleWindowEvent)\n      window.removeEventListener('resize', handleWindowEvent)\n    }\n  }, [handleWindowEvent])\n\n  const absolutePositionStyle = useMemo(() => {\n    return absoluteTop !== null\n      ? { position: 'absolute', top: `${absoluteTop}px` }\n      : null\n  }, [absoluteTop])\n\n  return createPortal(\n    <Fade in={isShowing} timeout={500}>\n      <button\n        style={absolutePositionStyle}\n        onClick={scrollToTop}\n        className='BackToTopBtn'\n      >\n        <img src={backToTopImg} alt='back to top' />\n      </button>\n    </Fade>,\n    document.body\n  )\n}\n\nBackToTopBtn.propTypes = {\n  startRef: PropTypes.any,\n  stopRef: PropTypes.any,\n  thresholdTop: PropTypes.number\n}\n\nBackToTopBtn.defaultProps = {\n  thresholdTop: 400\n}\n\nexport default BackToTopBtn\n","import React, { createRef, useMemo } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport ScrollSpy from '../../layout/ScrollSpy/ScrollSpy'\n\nimport './ContentPageLayout.scss'\n\nexport const REPOSITION_EVENT = 'ContentPageLayout:reposition'\n\nexport const TETHER_TARGET_CLASSNAME = 'tetherHeaderTarget'\nexport const NAV_CONTAINER_CLASSNAME = 'ContentPageLayout__nav-container'\n\n/**\n * IMPORTANT: number of sections (with unique id's) must be known before rendering this component\n */\n\nclass ContentPageLayout extends React.PureComponent {\n  constructor (props) {\n    super(props)\n    this.state = {\n      isSectionsMounted: false,\n      currentSectionId: props.sections[0].id,\n      isNavStickyTop: false,\n      isNavStickyBottom: false,\n      contentPageLayoutTotalHeight: 0\n    }\n    this.tether = null\n    this.preRenderSetup()\n  }\n\n  preRenderSetup () {\n    const { sections } = this.props\n\n    this.containerRef = { current: null }\n    this.navRef = { current: null }\n    this.sectionObservers = {}\n    this.sectionObservationEntries = new Array(sections.length)\n    this.sectionRefs = {}\n\n    sections.forEach((section, index) => {\n      this.sectionRefs[section.id] = createRef()\n    })\n  }\n\n  componentDidMount () {\n    window.addEventListener('scroll', this.listenToScroll)\n    document.addEventListener(REPOSITION_EVENT, this.reposition, false)\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('scroll', this.listenToScroll)\n  }\n\n  listenToScroll = () => {\n    // dynamically change position from absolute to fixed based on where the user is on the page\n    if (window.pageYOffset > this.containerRef.current.offsetTop) {\n      // hardcoded 100 to account for the bottom margin and padding\n      if (this.navRef.current && (window.pageYOffset > (this.containerRef.current.offsetTop + this.containerRef.current.clientHeight) - this.navRef.current.clientHeight - 100)) {\n        this.setState({\n          isNavStickyTop: false,\n          isNavStickyBottom: true\n        })\n      } else {\n        this.setState({\n          isNavStickyTop: true,\n          isNavStickyBottom: false\n        })\n      }\n    } else {\n      this.setState({\n        isNavStickyTop: false,\n        isNavStickyBottom: false\n      })\n    }\n  }\n\n  reposition = (_e) => {\n    if (this.tether && this.tether.getTetherInstance()) {\n      this.tether.position()\n    }\n  }\n\n  handleSectionsMounted = () => {\n    this.setState({\n      isSectionsMounted: true\n    })\n  }\n\n  handleSectionsUnmounted = () => {\n    document.removeEventListener(REPOSITION_EVENT, this.reposition)\n  }\n\n  handleSectionActive = (sectionId) => {\n    this.setState({ currentSectionId: sectionId })\n  }\n\n  handleRef = (ref) => {\n    this.containerRef.current = ref\n\n    this.handleSectionsMounted()\n\n    if (ref === null) {\n      // logging shows that ref is only null when the component is being unmounted,\n      // so we can use this trigger the observer disconnects\n      this.handleSectionsUnmounted()\n    }\n  }\n\n  renderSections () {\n    const { sections, renderSection, renderNav } = this.props\n\n    return (\n      <div\n        className={cx({\n          ContentPageLayout__sections: true,\n          withNav: !!(renderNav)\n        })}\n      >\n        {sections.map((section, i) => {\n          const rendered = renderSection(section)\n\n          // assume we should not render a section if the parent returns null/undefined\n          if (!rendered) {\n            return null\n          } else {\n            return (\n              <section\n                className={section.className}\n                style={section.style}\n                key={`${section.id}-${i}`}\n                id={section.id}\n                ref={this.sectionRefs[section.id]}\n              >\n                {rendered}\n              </section>\n            )\n          }\n        })}\n      </div>\n    )\n  }\n\n  renderNav = (ref) => {\n    const {\n      isSectionsMounted,\n      currentSectionId\n    } = this.state\n\n    const {\n      sections,\n      renderNav\n    } = this.props\n    if (isSectionsMounted && renderNav) {\n      return (\n        <div\n          className={`${NAV_CONTAINER_CLASSNAME} ${this.state.isNavStickyTop ? 'fixedTop' : ''} ${this.state.isNavStickyBottom ? 'fixedBottom' : ''}`}\n          ref={_ref => { this.navRef.current = _ref }}\n        >\n          {renderNav({\n            currentSectionId: currentSectionId,\n            sectionRefs: this.sectionRefs,\n            sections: sections.map(section => {\n              return {\n                ...section,\n                ref: this.sectionRefs[section.id],\n                isCurrentSection: currentSectionId === section.id\n              }\n            })\n          })}\n        </div>\n      )\n    } else {\n      return null\n    }\n  }\n\n  render () {\n    const {\n      className,\n      sections\n    } = this.props\n\n    return (\n      <div className={`${cx('ContentPageLayout', className)}`} ref={this.handleRef}>\n        <ScrollSpy\n          sections={sections}\n          onSectionActive={this.handleSectionActive}\n        />\n        {this.renderNav()}\n        {this.renderSections()}\n      </div>\n    )\n  }\n}\n\nContentPageLayout.propTypes = {\n  sections: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.string.isRequired,\n    /* This is used for nav label */\n    label: PropTypes.string,\n    className: PropTypes.string,\n    style: PropTypes.object,\n    /* optional string selector instead of generating internal ref */\n    selector: PropTypes.string,\n    /* since some sections have top padding and some do not, this prop lets the\n    ContentPageNav know to how much offset when a section link is clicked  */\n    scrollTopOffset: PropTypes.number\n  })),\n  renderNav: PropTypes.func,\n  renderSection: PropTypes.func,\n  className: PropTypes.string\n}\n\n/**\n * Dispatch event to trigger refreshing the position of nav\n * for any mounted ContentPageLayout components\n */\nfunction dispatchRepositionEvent () {\n  const event = new window.CustomEvent(REPOSITION_EVENT)\n  document.dispatchEvent(event)\n}\n\nexport default function Enhanced (props) {\n  const { sections } = props\n  const { windowWidth } = useDisplayContext()\n  // detect if sections changed; if so, force re-render (and restart of\n  // component lifecycle) by setting a new key\n  const key = useMemo(() => {\n    return JSON.stringify(sections)\n  }, [sections])\n\n  return (\n    <ContentPageLayout\n      {...props}\n      key={key}\n      windowWidth={windowWidth}\n    />\n  )\n}\n\nEnhanced.propTypes = {\n  sections: PropTypes.array\n}\n\nexport {\n  ContentPageLayout,\n  dispatchRepositionEvent\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"mobileHeaderHeight\":\"77px\",\"mobileNavHeight\":\"51px\"};","import React, { Component, createRef } from 'react'\nimport ReactDOM from 'react-dom'\nimport get from 'lodash/get'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Select from 'react-select'\nimport { ReactComponent as ChevronUpIcon } from '../../../assets/fontawesome/solid/chevron-up.svg'\nimport { ReactComponent as ChevronDownIcon } from '../../../assets/fontawesome/solid/chevron-down.svg'\nimport { trackAnchorClick } from '../../../utilities/analyticsEventHelpers'\n\nimport scssVar from './ContentPageNav.scss'\n\nconst mobileHeaderHeight = parseInt(scssVar.mobileHeaderHeight || '77px', 10)\nconst mobileNavHeight = parseInt(scssVar.mobileNavHeight || '51px', 10)\nconst mobileOffset = mobileHeaderHeight + mobileNavHeight\n\nclass ContentPageNav extends Component {\n  constructor (props) {\n    super(props)\n\n    // we expose the constructor in-order\n    // to have this happen before render\n    this.sectionsWithLinkRefs = props.sections.map(section => {\n      const sectionWithLinkRef = {\n        ...section,\n        aRef: createRef()\n      }\n\n      return sectionWithLinkRef\n    })\n  }\n\n  componentDidMount () {\n    this.inverseActions()\n    document.addEventListener('scroll', this.inverseActions)\n  }\n\n  componentWillUnmount () {\n    // this is essential for site performance\n    document.removeEventListener('scroll', this.inverseActions)\n  }\n\n  inverseActions = () => {\n    const { inverseRefs } = this.props\n    const sectionsWithLinkRefs = this.sectionsWithLinkRefs\n\n    const inverseTopBottom = inverseRefs.map((ref) => {\n      // default values are super high in case there is no bounding\n      // client rect for some reason - this way we will not get a false\n      // pos on inverse status\n      let top = 99999999999\n      let bottom = 99999999999\n\n      // using lodash's safe get method to check if the function\n      // exists - if the current object does not exist this would\n      // cause the page to crash\n      if (get(ref, 'current.getBoundingClientRect')) {\n        const bounding = ref.current.getBoundingClientRect()\n        top = bounding.top\n        bottom = bounding.bottom\n      }\n\n      return {\n        top,\n        bottom\n      }\n    })\n\n    const linksTopBottom = sectionsWithLinkRefs.map(({ aRef }) => {\n      // we do not need to run the check here since we know the\n      // elements are already rendered as this function is called\n      // within component did mount\n      const { top, bottom, height } = aRef.current.getBoundingClientRect()\n      return {\n        ref: aRef,\n        top,\n        bottom,\n        height\n      }\n    })\n\n    inverseTopBottom.every(({\n      top: iTop,\n      bottom: iBottom\n    }) => {\n      let shouldContinue = true\n      linksTopBottom.forEach(({\n        ref,\n        top,\n        bottom,\n        height\n      }) => {\n        // ref is not actually a element so we need to find it\n        const node = ReactDOM.findDOMNode(ref.current)\n\n        if (top + (height / 2) >= iTop && bottom < iBottom) {\n          // add will not trigger an error\n          // or add class if it already exists\n          node.classList.add('is-inverse')\n          shouldContinue = false\n        } else {\n          // remove will not trigger an error\n          // if class does not exist\n          node.classList.remove('is-inverse')\n        }\n      })\n      return shouldContinue\n    })\n  }\n\n  goTo = (ref, scrollTopOffset = 100) => {\n    if (!ref.current) {\n      return\n    }\n\n    const currentScrollTop = window.pageYOffset\n    const refNodeTop = ref.current.getBoundingClientRect().top\n\n    window.scrollTo({\n      top: refNodeTop + currentScrollTop - scrollTopOffset,\n      behavior: 'smooth'\n    })\n  }\n\n  handleDropdownChange = ({ value: section }) => {\n    const { ref, onClick } = section\n    // add in fixed mobile header height to the scroll offset; we can assume\n    // dropdown will only be used in mobile\n    if (onClick) {\n      onClick()\n    } else {\n      this.goTo(ref, mobileOffset)\n    }\n  }\n\n  render () {\n    const { currentSectionId, className } = this.props\n\n    const dropdownOpts = []\n    let currentValue = {}\n\n    this.sectionsWithLinkRefs.forEach(section => {\n      dropdownOpts.push({\n        label: section.label,\n        value: section\n      })\n\n      if (section.id === currentSectionId) {\n        currentValue = {\n          label: section.label,\n          value: section\n        }\n      }\n    })\n\n    return (\n      <>\n        {/*  Mobile */}\n        <div className='ContentPageNav__dropdown'>\n          <Select\n            className='ContentPageNav__dropdown__root'\n            label={null}\n            value={currentValue}\n            options={dropdownOpts}\n            classNamePrefix='ContentPageNav__dropdown'\n            isSearchable={false}\n            isClearable={false}\n            components={{ DropdownIndicator }}\n            onChange={this.handleDropdownChange}\n          />\n        </div>\n\n        {/* Desktop */}\n        <div className={classNames('ContentPageNav', className)}>\n          {/* Default Menu */}\n          <ul className='ContentPageNav__list'>\n            {this.sectionsWithLinkRefs.map(({\n              label,\n              id,\n              ref,\n              aRef, // this is applied to a due to padding/margin\n              color,\n              bold,\n              onClick,\n              scrollTopOffset\n            }, i) => {\n              return (\n                <li key={i} className={classNames({ 'ContentPageNav__list-item-active': id === currentSectionId })}>\n                  <a\n                    ref={aRef}\n                    href={`#${id}`}\n                    className={classNames({\n                      'ContentPageNav__list-item-link-blue': color === 'blue',\n                      'ContentPageNav__list-item-link-bold': bold\n                    })}\n                    onClick={(e) => {\n                      // prevent link action\n                      e.preventDefault()\n                      e.stopPropagation()\n                      trackAnchorClick(label, window.utag)\n                      if (onClick) {\n                        onClick()\n                      } else if (ref) {\n                        this.goTo(ref, scrollTopOffset)\n                      }\n                    }}\n                  >{label}\n                  </a>\n                </li>\n              )\n            })}\n          </ul>\n        </div>\n      </>\n    )\n  }\n}\n\nContentPageNav.propTypes = {\n  className: PropTypes.string,\n  inverseRefs: PropTypes.array, // array of Ref messes up for some reason\n  currentSectionId: PropTypes.string,\n  sections: PropTypes.arrayOf(PropTypes.shape({\n    id: PropTypes.string,\n    label: PropTypes.string,\n    ref: PropTypes.object, // DOM node ref\n    color: PropTypes.string,\n    onClick: PropTypes.func,\n    scrollTopOffset: PropTypes.number\n  }))\n}\n\nContentPageNav.defaultProps = {\n  sections: {},\n  inverseRefs: []\n}\n\nfunction DropdownIndicator (props) {\n  const { selectProps: { menuIsOpen } } = props\n  const className = menuIsOpen ? 'DropdownIndicator isOpen' : 'DropdownIndicator'\n\n  return (\n    <span className={className}>\n      <ChevronUpIcon className='chevron-up' />\n      <ChevronDownIcon className='chevron-down' />\n    </span>\n  )\n}\n\nDropdownIndicator.propTypes = {\n  selectProps: PropTypes.shape({\n    menuIsOpen: PropTypes.bool\n  })\n}\n\nexport default ContentPageNav\n\nconst ContentPageNavLoading = ({ items }) => (\n  <div className='ContentPageNavLoading'>\n    {Array(items).fill({}).map((v, i) => (\n      <div key={i} className='skeleton-box' />\n    ))}\n  </div>\n)\n\nContentPageNavLoading.propTypes = {\n  items: PropTypes.number\n}\n\nContentPageNavLoading.defaultProps = {\n  items: 5\n}\n\nexport {\n  ContentPageNavLoading\n}\n","// extracted by mini-css-extract-plugin\nexport default {};","import React, { useEffect, useCallback, useRef, useMemo } from 'react'\nimport PropTypes from 'prop-types'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport Gumshoe from 'gumshoejs'\nimport uuid from 'uuid'\nimport scssVar from '../../../scss/_variables.scss'\n\nconst mobileHeaderHeight = parseInt((scssVar.mobileHeaderHeight || '77px').split('px')[0], 10)\nconst mobileNavHeight = parseInt((scssVar.mobileNavHeight || '51px').split('px')[0], 10)\nconst desktopOffset = parseInt((scssVar.globalHeaderHeight || '100px').split('px')[0], 10)\n\nconst mobileOffset = mobileHeaderHeight + mobileNavHeight\nconst defaultOptions = {\n  // Active classes\n  navClass: 'active', // applied to the nav list item\n  contentClass: 'active', // applied to the content\n\n  // Nested navigation\n  nested: false, // if true, add classes to parents of active link\n  nestedClass: 'active', // applied to the parent items\n\n  // Offset & reflow\n  offset: desktopOffset, // how far from the top of the page to activate a content area\n  reflow: false, // if true, listen for reflows\n\n  // Event support\n  events: true // if true, emit custom events\n}\n\nconst ScrollSpy = (props) => {\n  const { sections, onSectionActive } = props\n  const { isMobile } = useDisplayContext()\n  const spyRef = useRef(null)\n  const thisId = useRef(uuid())\n  const id = useMemo(() => `ScrollSpy-hidden-nav-${thisId.current}`, [])\n\n  const eventHandler = useCallback((e) => {\n    onSectionActive(e.detail.content.id)\n  }, [onSectionActive])\n\n  useEffect(() => {\n    document.addEventListener('gumshoeActivate', eventHandler)\n\n    return () => {\n      // destroy reference and unlisten upon unmount\n      if (spyRef.current) {\n        spyRef.current.destroy()\n      }\n      document.removeEventListener('gumshoeActivate', eventHandler)\n    }\n    // eslint-disable-next-line\n  }, [])\n\n  useEffect(() => {\n    if (spyRef.current) {\n      // if changing between desktop/mobile, destroy previous instance\n      // before instantiating new one\n      spyRef.current.destroy()\n    }\n\n    spyRef.current = new Gumshoe(`#${id} a`, {\n      ...defaultOptions,\n      // use the plugin's offset option to account for fixed\n      // header and nav when in mobile\n      offset: isMobile\n        ? mobileOffset\n        : desktopOffset\n    })\n  }, [isMobile, id])\n\n  // render hidden nav that is used by the gumshoe plugin to detect active section\n  return (\n    <ul id={id} style={{ display: 'none' }}>\n      {sections.map(section => {\n        return <li key={section.id}><a href={`#${section.id}`}>{section.id}</a></li>\n      })}\n    </ul>\n  )\n}\n\nScrollSpy.propTypes = {\n  /** section objects with unique ids, used for scrollspy selectors */\n  sections: PropTypes.arrayOf(PropTypes.shape({ id: PropTypes.string })),\n  /** calllback for when section becomes active */\n  onSectionActive: PropTypes.func.isRequired\n}\n\nexport default ScrollSpy\n"],"names":["btnSize","parseInt","scssVar","btnOffsetBottom","scrollToTop","window","scroll","top","left","behavior","BackToTopBtn","props","startRef","stopRef","thresholdTop","isShowing","setIsShowing","useState","absoluteTop","setAbsoluteTop","timeout","useRef","handleWindowEvent","useCallback","current","cancelAnimationFrame","requestAnimationFrame","currentScrollTop","pageYOffset","shouldShow","ref","arguments","length","undefined","thresholdPadding","getBoundingClientRect","determineIfScrolledPassedTop","isScrolledPassedBottom","windowHeight","bottom","determineIfScrolledPassedBottom","innerHeight","updatedAbsoluteTop","calculateAbsoluteTopOffset","useEffect","addEventListener","removeEventListener","absolutePositionStyle","useMemo","position","createPortal","_jsx","Fade","in","children","style","onClick","className","src","backToTopImg","alt","document","body","defaultProps","REPOSITION_EVENT","TETHER_TARGET_CLASSNAME","NAV_CONTAINER_CLASSNAME","ContentPageLayout","React","constructor","super","listenToScroll","this","containerRef","offsetTop","navRef","clientHeight","setState","isNavStickyTop","isNavStickyBottom","reposition","_e","tether","getTetherInstance","handleSectionsMounted","isSectionsMounted","handleSectionsUnmounted","handleSectionActive","sectionId","currentSectionId","handleRef","renderNav","state","sections","_ref","sectionRefs","map","section","id","isCurrentSection","contentPageLayoutTotalHeight","preRenderSetup","sectionObservers","sectionObservationEntries","Array","forEach","index","createRef","componentDidMount","componentWillUnmount","renderSections","renderSection","cx","ContentPageLayout__sections","withNav","i","rendered","render","_jsxs","ScrollSpy","onSectionActive","dispatchRepositionEvent","event","CustomEvent","dispatchEvent","Enhanced","windowWidth","useDisplayContext","key","JSON","stringify","_createElement","mobileOffset","ContentPageNav","Component","inverseActions","inverseRefs","sectionsWithLinkRefs","inverseTopBottom","get","bounding","linksTopBottom","aRef","height","every","_ref2","iTop","iBottom","shouldContinue","_ref3","node","ReactDOM","classList","add","remove","goTo","scrollTopOffset","refNodeTop","scrollTo","handleDropdownChange","_ref4","value","dropdownOpts","currentValue","push","label","_Fragment","Select","options","classNamePrefix","isSearchable","isClearable","components","DropdownIndicator","onChange","classNames","_ref5","color","bold","href","e","preventDefault","stopPropagation","trackAnchorClick","utag","selectProps","menuIsOpen","ChevronUpIcon","ChevronDownIcon","ContentPageNavLoading","_ref6","items","fill","v","mobileHeaderHeight","split","mobileNavHeight","desktopOffset","globalHeaderHeight","defaultOptions","navClass","contentClass","nested","nestedClass","offset","reflow","events","isMobile","spyRef","thisId","uuid","eventHandler","detail","content","destroy","Gumshoe","display"],"sourceRoot":""}