{"version":3,"sources":["webpack:///./src/js/modules/snowReportSignup/components/TrailAnimation.js","webpack:///./src/js/modules/snowReportSignup/components/SuccessMessageAnimation.js","webpack:///./src/js/modules/snowReportSignup/hooks/useSnowReportSignup.js","webpack:///./src/js/modules/snowReportSignup/index.js","webpack:///./node_modules/validator/lib/util/assertString.js","webpack:///./src/js/components/react/Svg.js","webpack:///./node_modules/validator/lib/util/merge.js","webpack:///./src/js/components/react/Dropdown.js","webpack:///./node_modules/validator/lib/isIP.js","webpack:///./node_modules/validator/lib/isFQDN.js","webpack:///./node_modules/validator/lib/isByteLength.js","webpack:///./node_modules/validator/lib/isEmail.js"],"names":["TrailAnimation","isValid","delay","children","items","React","Children","toArray","useSprings","length","map","item","i","from","opacity","y","position","visibility","to","reset","reverse","styles","index","div","key","style","propTypes","PropTypes","bool","isRequired","array","SuccessMessageAnimation","springs","textAlign","springContainer","useSpring","elements","useSnowReportSignup","endpoint","countrySelectionErrorMessage","useState","isFirstLoad","setIsFirstLoad","emailAddress","setEmailAddress","isValidEmail","setIsValidEmail","country","setCountry","isValidCountry","setIsValidCountry","expressConsent","setExpressConsent","subscriptions","setSubscriptions","setIsValid","errorMessage","setErrorMessage","isSubmitButtonDisabled","setIsSubmitButtonDisabled","dropdownErrorMessage","setDropdownErrorMessage","useEffect","useFetchData","Axios","method","url","data","passedValidation","errors","message","console","error","handleDropdownOptions","option","value","handleEmailValue","isEmail","handleSelectedOptions","selectedOptions","includes","splice","indexOf","push","handleResetForm","countryOptions","options","SnowReportSignup","title","copy","emailPlaceholder","dropdownOptions","termsCopy","buttonLabel","sortLabel","successMessage","successCopy","successLinkLabel","emailErrorMessage","expressConsentErrorMessage","optionsObject","JSON","parse","className","htmlFor","type","name","id","onChange","checked","label","e","target","required","Dropdown","initialOption","onClick","disabled","Svg","altText","string","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","exports","default","input","String","invalidType","TypeError","concat","module","props","xlinkHref","arguments","undefined","defaults","propOptions","componentRef","useRef","triggerEl","listEl","search","searchTimeout","addUniqueIdsToArrayItems","current","inFocusElement","setInFocusElement","selectedIndex","setSelectedIndex","focusedOptionIndex","setFocusedOptionIndex","isOpen","setIsOpen","handleClickOutside","event","contains","zIndex","close","element","duration","findItemToFocus","character","fromCharCode","trim","open","clearTimeout","find","toLowerCase","startsWith","focusItem","setTimeout","handleOnChange","triggerChange","elementToFocus","querySelector","scrollHeight","clientHeight","scrollBottom","scrollTop","elementBottom","offsetTop","offsetHeight","focus","initialSelectedIndex","findIndex","window","addEventListener","removeEventListener","classNames","ref","aria-haspopup","stopPropagation","removeAttribute","prev","onKeyDown","which","keyCode","DOWN","UP","preventDefault","ESC","tabIndex","role","aria-labelledby","aria-activedescendant","RETURN","deltas","endOfArray","nextItem","data-value","aria-selected","focused","theme","oneOf","arrayOf","shape","func","isIP","str","version","_assertString","IPv4AddressRegExp","test","parts","split","sort","a","b","IPv6AddressRegExp","__esModule","IPv4SegmentFormat","IPv4AddressFormat","RegExp","IPv6SegmentFormat","_merge","default_fqdn_options","allow_trailing_dot","substring","tld","require_tld","allow_numeric_tld","every","part","allow_underscores","_interopRequireDefault","min","max","len","encodeURI","default_email_options","require_display_name","allow_display_name","display_email","match","splitNameAddress","display_name","replace","endsWith","substr","display_name_without_quotes","validateDisplayName","ignore_max_length","domain","pop","user","join","lower_domain","domain_specific_validation","username","_isByteLength","_user_parts","gmailUserPart","_isFQDN","allow_ip_domain","_isIP","noBracketdomain","slice","allow_utf8_local_part","quotedEmailUserUtf8","quotedEmailUser","pattern","emailUserUtf8Part","emailUserPart","user_parts","_i","blacklisted_chars"],"mappings":"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","file":"16.b45e3654ea82fc624dd5.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSprings, a } from '@react-spring/web';\n\nconst TrailAnimation = ({ isValid, delay, children }) => {\n  const items = React.Children.toArray(children);\n  const time = () => {\n    return delay ? 350 : 250;\n  };\n  const springs = useSprings(\n    items.length,\n    items.map((item, i) => {\n      const delayedTime = time() + 50 * i;\n      return {\n        from: {\n          opacity: 1,\n          y: 0,\n          position: 'relative',\n          visibility: 'visible'\n        },\n        to: {\n          opacity: 0,\n          y: -60,\n          position: 'relative',\n          visibility: 'hidden'\n        },\n        delay: delayedTime,\n        reset: isValid,\n        reverse: !isValid\n      };\n    })\n  );\n\n  return springs.map((styles, index) => (\n    <a.div key={index} style={styles}>\n      {items[index]}\n    </a.div>\n  ));\n};\n\nTrailAnimation.propTypes = {\n  isValid: PropTypes.bool.isRequired,\n  children: PropTypes.array.isRequired\n};\n\nexport default TrailAnimation;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSprings, useSpring, a } from '@react-spring/web';\n\nconst SuccessMessageAnimation = ({ isValid, children }) => {\n  const items = React.Children.toArray(children);\n  const springs = useSprings(\n    items.length,\n    items.map((item, i) => ({\n      from: {\n        opacity: 0,\n        y: 0,\n        position: 'relative',\n        visibility: 'hidden'\n      },\n      to: {\n        opacity: 1,\n        y: -30,\n        position: 'relative',\n        visibility: 'visible',\n        textAlign: 'center'\n      },\n      delay: !isValid ? 1500 + 250 + 50 * i : 250 + 50 * i,\n      reset: !isValid,\n      reverse: isValid\n    }))\n  );\n\n  const springContainer = useSpring({\n    from: {\n      opacity: 0\n    },\n    to: {\n      opacity: 1\n    },\n    delay: !isValid ? 1500 : 0,\n    reset: !isValid,\n    reverse: isValid\n  });\n\n  const elements = springs.map((styles, index) => (\n    <a.div key={index} style={styles}>\n      {items[index]}\n    </a.div>\n  ));\n\n  return <a.div style={springContainer}>{elements}</a.div>;\n};\n\nSuccessMessageAnimation.propTypes = {\n  isValid: PropTypes.bool.isRequired,\n  children: PropTypes.array.isRequired\n};\n\nexport default SuccessMessageAnimation;\n","import { useState, useEffect } from 'react';\nimport Axios from 'axios';\nimport isEmail from 'validator/lib/isEmail';\n\nexport const useSnowReportSignup = ({\n  endpoint,\n  countrySelectionErrorMessage\n}) => {\n  const [isFirstLoad, setIsFirstLoad] = useState(true);\n  const [emailAddress, setEmailAddress] = useState('');\n  const [isValidEmail, setIsValidEmail] = useState(null);\n  const [country, setCountry] = useState(null);\n  const [isValidCountry, setIsValidCountry] = useState(null);\n  const [expressConsent, setExpressConsent] = useState(false);\n  const [subscriptions, setSubscriptions] = useState([]);\n  const [isValid, setIsValid] = useState(false);\n  const [errorMessage, setErrorMessage] = useState('');\n  const [isSubmitButtonDisabled, setIsSubmitButtonDisabled] = useState(null);\n  const [dropdownErrorMessage, setDropdownErrorMessage] = useState('');\n\n  useEffect(() => {\n    if (isValidEmail && isValidCountry && expressConsent) {\n      setIsSubmitButtonDisabled(false);\n    } else {\n      setIsSubmitButtonDisabled(true);\n    }\n  }, [isValidEmail, isValidCountry, expressConsent]);\n\n  const useFetchData = async () => {\n    if (isValidEmail && isValidCountry && expressConsent) {\n      try {\n        const { data } = await Axios({\n          method: 'POST',\n          url: endpoint,\n          data: {\n            emailAddress,\n            country,\n            expressConsent,\n            subscriptions\n          }\n        });\n        const { passedValidation, errors } = data;\n        setIsValid(passedValidation);\n        if (errors.length > 0) setErrorMessage(errors[0].message);\n      } catch (error) {\n        console.error();\n      }\n    }\n  };\n\n  const handleSelectedOptions = value => {\n    const selectedOptions = [...subscriptions];\n\n    if (selectedOptions.includes(value)) {\n      selectedOptions.splice(selectedOptions.indexOf(value), 1);\n    } else {\n      selectedOptions.push(value);\n    }\n\n    setSubscriptions(selectedOptions);\n  };\n\n  const handleDropdownOptions = option => {\n    setIsFirstLoad(false);\n    if (option.value) {\n      setDropdownErrorMessage('');\n      setIsValidCountry(true);\n      setCountry(option.value);\n    } else {\n      setDropdownErrorMessage(countrySelectionErrorMessage);\n      setIsValidCountry(false);\n      setCountry(null);\n    }\n  };\n\n  const handleEmailValue = value => {\n    setIsFirstLoad(false);\n    setEmailAddress(value);\n    setIsValidEmail(isEmail(value));\n  };\n\n  const handleResetForm = countryOptions => {\n    setIsFirstLoad(true);\n    setIsValid(false);\n    setEmailAddress('');\n    setIsValidEmail(false);\n    setSubscriptions([]);\n    setCountry(countryOptions.options[0]);\n    setExpressConsent(false);\n    setIsSubmitButtonDisabled(false);\n  };\n\n  return {\n    useFetchData,\n    handleDropdownOptions,\n    handleEmailValue,\n    handleSelectedOptions,\n    handleResetForm,\n    setIsSubmitButtonDisabled,\n    setExpressConsent,\n    isValidCountry,\n    isValidEmail,\n    emailAddress,\n    expressConsent,\n    isFirstLoad,\n    isValid,\n    errorMessage,\n    isSubmitButtonDisabled,\n    dropdownErrorMessage,\n    subscriptions,\n    country\n  };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport parse from 'html-react-parser';\nimport Dropdown from '../../components/react/Dropdown';\nimport TrailAnimation from './components/TrailAnimation';\nimport SuccessMessageAnimation from './components/SuccessMessageAnimation';\nimport { useSnowReportSignup } from './hooks/useSnowReportSignup';\nimport Svg from '../../components/react/Svg';\n\nconst SnowReportSignup = ({\n  endpoint,\n  title,\n  copy,\n  options,\n  emailPlaceholder,\n  dropdownOptions,\n  termsCopy,\n  buttonLabel,\n  sortLabel,\n  successMessage,\n  successCopy,\n  successLinkLabel,\n  emailErrorMessage,\n  countrySelectionErrorMessage,\n  expressConsentErrorMessage\n}) => {\n  const optionsObject = JSON.parse(options);\n  const countryOptions = JSON.parse(dropdownOptions);\n  const {\n    useFetchData,\n    handleDropdownOptions,\n    handleEmailValue,\n    handleSelectedOptions,\n    setExpressConsent,\n    handleResetForm,\n    isValidEmail,\n    emailAddress,\n    expressConsent,\n    isFirstLoad,\n    isValid,\n    errorMessage,\n    isSubmitButtonDisabled,\n    dropdownErrorMessage,\n    subscriptions,\n    country\n  } = useSnowReportSignup({ endpoint, countrySelectionErrorMessage });\n\n  return (\n    <div className=\"snow-report-signup__inner\">\n      <div className=\"snow-report-signup__container\">\n        <TrailAnimation isValid={isValid}>\n          <h2 className=\"snow-report-signup__title\">{title}</h2>\n          <div className=\"snow-report-signup__copy rtf\">{parse(copy)}</div>\n          <div className=\"snow-report-signup__options\">\n            {optionsObject.map((option, i) => {\n              return (\n                <label\n                  key={i}\n                  className=\"snow-report-signup__input\"\n                  htmlFor={option.value}\n                >\n                  <input\n                    type=\"checkbox\"\n                    name=\"subscriptions\"\n                    id={option.value}\n                    value={option.value}\n                    onChange={() => handleSelectedOptions(option.value)}\n                    checked={subscriptions.includes(option.value)}\n                  />\n                  <span className=\"snow-report-signup__checkmark\"></span>\n                  {option.label}\n                </label>\n              );\n            })}\n          </div>\n        </TrailAnimation>\n      </div>\n      <div className=\"snow-report-signup__container\">\n        <TrailAnimation isValid={isValid} delay={250}>\n          <div className=\"snow-report-signup__email-input\">\n            <input\n              type=\"email\"\n              name=\"sign-up-report-email\"\n              id=\"sign-up-report-email\"\n              onChange={e => handleEmailValue(e.target.value)}\n              value={emailAddress}\n              className={\n                !isValidEmail && !isFirstLoad\n                  ? 'snow-report-signup__email-input--error'\n                  : ''\n              }\n              required\n            />\n            <label\n              className={\n                emailAddress\n                  ? 'snow-report-signup__label snow-report-signup__label--with-text'\n                  : 'snow-report-signup__label'\n              }\n              htmlFor=\"sign-up-report-email\"\n            >\n              {emailPlaceholder}\n            </label>\n            {!isValidEmail && !isFirstLoad ? (\n              <p className=\"snow-report-signup__input-error-message\">\n                {emailErrorMessage}\n              </p>\n            ) : (\n              ''\n            )}\n          </div>\n          <div>\n            <Dropdown\n              label={sortLabel}\n              name=\"search-sort-items\"\n              options={JSON.parse(dropdownOptions).options}\n              onChange={handleDropdownOptions}\n              errorMessage={dropdownErrorMessage && dropdownErrorMessage}\n              initialOption={country}\n            />\n          </div>\n          <div className=\"snow-report-signup__terms\">\n            <label className=\"snow-report-signup__input\" htmlFor=\"terms-check\">\n              <input\n                type=\"checkbox\"\n                name=\"terms-check\"\n                id=\"terms-check\"\n                onChange={() => setExpressConsent(!expressConsent)}\n                checked={expressConsent && expressConsent}\n              />\n              <span className=\"snow-report-signup__checkmark\"></span>\n              {termsCopy}\n            </label>\n            {!expressConsent && !isFirstLoad ? (\n              <p className=\"snow-report-signup__input-error-message\">\n                {expressConsentErrorMessage}\n              </p>\n            ) : (\n              ''\n            )}\n          </div>\n          <button\n            type=\"submit\"\n            className=\"btn btn--secondary btn--outline\"\n            onClick={useFetchData}\n            disabled={isSubmitButtonDisabled}\n          >\n            {buttonLabel}\n          </button>\n          {!isValid && (\n            <p className=\"snow-report-signup__input-error-message\">\n              {errorMessage}\n            </p>\n          )}\n        </TrailAnimation>\n      </div>\n      <div\n        className={\n          isValid\n            ? 'snow-report-signup__container'\n            : 'snow-report-signup__container snow-report-signup__container--zIndex'\n        }\n      >\n        <SuccessMessageAnimation isValid={!isValid}>\n          <div className=\"snow-report-signup__icon-container\">\n            <Svg name=\"check-icon-circle\" className=\"snow-report-signup__svg\" altText=\"success\" />\n          </div>\n          <h2 className=\"snow-report-signup__success-title\">\n            {successMessage}\n          </h2>\n          <p className=\"snow-report-signup__success-copy\">{successCopy}</p>\n          <button\n            className=\"snow-report-signup__link\"\n            onClick={() => handleResetForm(countryOptions)}\n          >\n            {successLinkLabel}\n          </button>\n        </SuccessMessageAnimation>\n      </div>\n    </div>\n  );\n};\n\nSnowReportSignup.propTypes = {\n  endpoint: PropTypes.string.isRequired,\n  title: PropTypes.string.isRequired,\n  copy: PropTypes.string.isRequired,\n  options: PropTypes.string.isRequired,\n  emailPlaceholder: PropTypes.string.isRequired,\n  dropdownOptions: PropTypes.string.isRequired,\n  sortLabel: PropTypes.string.isRequired,\n  termsCopy: PropTypes.string.isRequired,\n  buttonLabel: PropTypes.string.isRequired,\n  successMessage: PropTypes.string.isRequired,\n  successCopy: PropTypes.string.isRequired,\n  successLinkLabel: PropTypes.string.isRequired,\n  emailErrorMessage: PropTypes.string.isRequired,\n  countrySelectionErrorMessage: PropTypes.string.isRequired,\n  expressConsentErrorMessage: PropTypes.string.isRequired\n};\n\nexport default SnowReportSignup;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = assertString;\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction assertString(input) {\n  var isString = typeof input === 'string' || input instanceof String;\n\n  if (!isString) {\n    var invalidType = _typeof(input);\n\n    if (input === null) invalidType = 'null';else if (invalidType === 'object') invalidType = input.constructor.name;\n    throw new TypeError(\"Expected a string but received a \".concat(invalidType));\n  }\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Svg = ({ name, altText, ...props}) => (\n  <svg {...props}>\n    <title>{altText}</title>\n    <use xlinkHref={`#${name}`}/>\n  </svg>\n);\n\nSvg.propTypes = {\n  name: PropTypes.string.isRequired,\n  altText: PropTypes.string\n}\n\nexport default Svg;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = merge;\n\nfunction merge() {\n  var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var defaults = arguments.length > 1 ? arguments[1] : undefined;\n\n  for (var key in defaults) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = defaults[key];\n    }\n  }\n\n  return obj;\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Svg from './Svg';\nimport classNames from 'classnames';\nimport { addUniqueIdsToArrayItems, open, close, keyCode } from '../../helpers';\n\nconst Dropdown = ({\n  label,\n  options: propOptions,\n  name,\n  initialOption,\n  onChange,\n  className,\n  errorMessage\n}) => {\n  const componentRef = useRef(null);\n  const triggerEl = useRef(null);\n  const listEl = useRef(null);\n  const search = useRef('');\n  const searchTimeout = useRef(null);\n  const { current: options } = useRef(addUniqueIdsToArrayItems(propOptions));\n  const [inFocusElement, setInFocusElement] = useState(null);\n  const [selectedIndex, setSelectedIndex] = useState(0);\n  const [focusedOptionIndex, setFocusedOptionIndex] = useState(0);\n  const [isOpen, setIsOpen] = useState(false);\n\n  const handleTriggerKeyEvents = e => {\n    const key = e.which || e.keyCode;\n\n    switch (key) {\n      case keyCode.DOWN:\n      case keyCode.UP:\n        e.preventDefault();\n        setIsOpen(true);\n        setInFocusElement(listEl.current);\n        if (!isOpen) open({ element: listEl.current, duration: 0.6 });\n        break;\n      case keyCode.ESC:\n        if (isOpen) close({ element: listEl.current, duration: 0.6 });\n        return setIsOpen(false);\n      default:\n        findItemToFocus(key);\n        break;\n    }\n  };\n\n  const handleTriggerClickEvent = e => {\n    e.stopPropagation();\n    listEl.current.removeAttribute('style');\n    setIsOpen(prev => !prev);\n    !isOpen\n      ? open({ element: listEl.current, duration: 0.6 })\n      : close({ element: listEl.current, duration: 0.6 });\n  };\n\n  const handleClickOutside = event => {\n    if (componentRef.current && !componentRef.current.contains(event.target)) {\n      listEl.current.style.zIndex = '-1'\n      close({ element: listEl.current, duration: 0.6 });\n      setIsOpen(false);\n    }\n  };\n\n  const handleListKeyEvents = e => {\n    e.preventDefault();\n    const key = e.which || e.keyCode;\n\n    switch (key) {\n      case keyCode.ESC:\n      case keyCode.RETURN:\n        setIsOpen(false);\n        close({ element: listEl.current, duration: 0.6 });\n        setInFocusElement(triggerEl.current);\n\n        if (key === keyCode.ESC) {\n          handleOnChange({ index: selectedIndex, triggerChange: false });\n        }\n        if (key === keyCode.RETURN) {\n          handleOnChange({ index: focusedOptionIndex });\n        }\n        break;\n      case keyCode.DOWN:\n      case keyCode.UP:\n        const deltas = { [keyCode.DOWN]: 1, [keyCode.UP]: -1 };\n        const startOfArray = 0;\n        const endOfArray = options.length - 1;\n        const nextItem = focusedOptionIndex + deltas[key];\n\n        if (nextItem < startOfArray) {\n          focusItem(endOfArray);\n        } else if (nextItem > endOfArray) {\n          focusItem(startOfArray);\n        } else {\n          focusItem(nextItem);\n        }\n        break;\n      default:\n        findItemToFocus(key);\n        break;\n    }\n  };\n\n  const findItemToFocus = key => {\n    const character = String.fromCharCode(key).trim();\n\n    if (!character) return;\n\n    if (!isOpen) {\n      setIsOpen(true);\n      open({ element: listEl.current, duration: 0.6 });\n    }\n\n    if (searchTimeout.current) {\n      clearTimeout(searchTimeout.current);\n    }\n\n    search.current += character;\n\n    options.find((option, index) => {\n      if (option.label.toLowerCase().startsWith(search.current.toLowerCase())) {\n        setSelectedIndex(index);\n        focusItem(index);\n        return true;\n      }\n    });\n\n    searchTimeout.current = setTimeout(() => {\n      search.current = '';\n    }, 500);\n  };\n\n  const handleOnChange = ({ index, triggerChange = true }) => {\n    if (isOpen) close({ element: listEl.current, duration: 0.6 });\n    setIsOpen(false);\n    setSelectedIndex(index);\n    focusItem(index);\n    triggerChange && onChange(options[index]);\n  };\n\n  const focusItem = index => {\n    setFocusedOptionIndex(index);\n\n    const { value } = options[index];\n\n    if (!value || !listEl.current) return;\n\n    const elementToFocus = listEl.current.querySelector(\n      `[data-value='${value}']`\n    );\n\n    if (listEl.current.scrollHeight > listEl.current.clientHeight) {\n      const scrollBottom =\n        listEl.current.clientHeight + listEl.current.scrollTop;\n      const elementBottom =\n        elementToFocus.offsetTop + elementToFocus.offsetHeight;\n      if (elementBottom > scrollBottom) {\n        listEl.current.scrollTop = elementBottom - listEl.current.clientHeight;\n      } else if (elementToFocus.offsetTop < listEl.current.scrollTop) {\n        listEl.current.scrollTop = elementToFocus.offsetTop;\n      }\n    }\n  };\n\n  useEffect(() => {\n    inFocusElement?.focus();\n  }, [inFocusElement]);\n\n  useEffect(() => {\n    const initialSelectedIndex = options.findIndex(\n      ({ value }) => initialOption && initialOption.value === value\n    );\n    if (initialSelectedIndex >= 0) {\n      setSelectedIndex(initialSelectedIndex);\n      setFocusedOptionIndex(initialSelectedIndex);\n    }\n    window.addEventListener('mousedown', e => handleClickOutside(e));\n    return () => {\n      window.removeEventListener('mousedown', e => handleClickOutside(e));\n    };\n  }, [initialOption, options]);\n\n  return (\n    <>\n      <div\n        className={classNames(['dropdown', className], { open: isOpen })}\n        ref={componentRef}\n      >\n        <button\n          className=\"dropdown__trigger\"\n          aria-haspopup=\"true\"\n          id={`${name}_button`}\n          onClick={handleTriggerClickEvent}\n          onKeyDown={handleTriggerKeyEvents}\n          ref={triggerEl}\n        >\n          <span>{label}</span>\n          {options[selectedIndex].label}\n          <Svg name=\"chevron-right\" altText=\"toggle dropdown\"/>\n        </button>\n        <ul\n          id={`${name}_list`}\n          tabIndex=\"-1\"\n          role=\"listbox\"\n          aria-labelledby={`${name}_button`}\n          aria-activedescendant={options[selectedIndex].id}\n          className=\"dropdown__list\"\n          onKeyDown={handleListKeyEvents}\n          ref={listEl}\n        >\n          {options.map((option, index) => (\n            <li\n              key={option.id}\n              role=\"option\"\n              id={option.id}\n              data-value={option.value}\n              onClick={() => handleOnChange({ index })}\n              aria-selected={selectedIndex === index}\n              className={classNames('dropdown__list__option', {\n                focused: index === focusedOptionIndex\n              })}\n            >\n              {option.label}\n              <span className=\"dropdown__list__option-decorator\">\n                <span></span>\n              </span>\n            </li>\n          ))}\n        </ul>\n      </div>\n      {errorMessage && (\n        <p className=\"dropdown__error-message\">{errorMessage}</p>\n      )}\n    </>\n  );\n};\n\nDropdown.propTypes = {\n  className: PropTypes.string,\n  theme: PropTypes.oneOf(['light', 'dark']),\n  label: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired\n    })\n  ).isRequired,\n  initialOption: PropTypes.shape({\n    label: PropTypes.string.isRequired,\n    value: PropTypes.string.isRequired\n  }),\n  onChange: PropTypes.func,\n  errorMessage: PropTypes.string\n};\n\nexport default Dropdown;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isIP;\n\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n11.3.  Examples\n\n   The following addresses\n\n             fe80::1234 (on the 1st link of the node)\n             ff02::5678 (on the 5th link of the node)\n             ff08::9abc (on the 10th organization of the node)\n\n   would be represented as follows:\n\n             fe80::1234%1\n             ff02::5678%5\n             ff08::9abc%10\n\n   (Here we assume a natural translation from a zone index to the\n   <zone_id> part, where the Nth zone of any scope is translated into\n   \"N\".)\n\n   If we use interface names as <zone_id>, those addresses could also be\n   represented as follows:\n\n            fe80::1234%ne0\n            ff02::5678%pvc1.3\n            ff08::9abc%interface10\n\n   where the interface \"ne0\" belongs to the 1st link, \"pvc1.3\" belongs\n   to the 5th link, and \"interface10\" belongs to the 10th organization.\n * * */\nvar IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';\nvar IPv4AddressFormat = \"(\".concat(IPv4SegmentFormat, \"[.]){3}\").concat(IPv4SegmentFormat);\nvar IPv4AddressRegExp = new RegExp(\"^\".concat(IPv4AddressFormat, \"$\"));\nvar IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';\nvar IPv6AddressRegExp = new RegExp('^(' + \"(?:\".concat(IPv6SegmentFormat, \":){7}(?:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){6}(?:\").concat(IPv4AddressFormat, \"|:\").concat(IPv6SegmentFormat, \"|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){5}(?::\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,2}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){4}(?:(:\").concat(IPv6SegmentFormat, \"){0,1}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,3}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){3}(?:(:\").concat(IPv6SegmentFormat, \"){0,2}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,4}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){2}(?:(:\").concat(IPv6SegmentFormat, \"){0,3}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,5}|:)|\") + \"(?:\".concat(IPv6SegmentFormat, \":){1}(?:(:\").concat(IPv6SegmentFormat, \"){0,4}:\").concat(IPv4AddressFormat, \"|(:\").concat(IPv6SegmentFormat, \"){1,6}|:)|\") + \"(?::((?::\".concat(IPv6SegmentFormat, \"){0,5}:\").concat(IPv4AddressFormat, \"|(?::\").concat(IPv6SegmentFormat, \"){1,7}|:))\") + ')(%[0-9a-zA-Z-.:]{1,})?$');\n\nfunction isIP(str) {\n  var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  (0, _assertString.default)(str);\n  version = String(version);\n\n  if (!version) {\n    return isIP(str, 4) || isIP(str, 6);\n  }\n\n  if (version === '4') {\n    if (!IPv4AddressRegExp.test(str)) {\n      return false;\n    }\n\n    var parts = str.split('.').sort(function (a, b) {\n      return a - b;\n    });\n    return parts[3] <= 255;\n  }\n\n  if (version === '6') {\n    return !!IPv6AddressRegExp.test(str);\n  }\n\n  return false;\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isFQDN;\n\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\n\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar default_fqdn_options = {\n  require_tld: true,\n  allow_underscores: false,\n  allow_trailing_dot: false,\n  allow_numeric_tld: false\n};\n\nfunction isFQDN(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_fqdn_options);\n  /* Remove the optional trailing dot before checking validity */\n\n  if (options.allow_trailing_dot && str[str.length - 1] === '.') {\n    str = str.substring(0, str.length - 1);\n  }\n\n  var parts = str.split('.');\n  var tld = parts[parts.length - 1];\n\n  if (options.require_tld) {\n    // disallow fqdns without tld\n    if (parts.length < 2) {\n      return false;\n    }\n\n    if (!/^([a-z\\u00a1-\\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {\n      return false;\n    } // disallow spaces && special characers\n\n\n    if (/[\\s\\u2002-\\u200B\\u202F\\u205F\\u3000\\uFEFF\\uDB40\\uDC20\\u00A9\\uFFFD]/.test(tld)) {\n      return false;\n    }\n  } // reject numeric TLDs\n\n\n  if (!options.allow_numeric_tld && /^\\d+$/.test(tld)) {\n    return false;\n  }\n\n  return parts.every(function (part) {\n    if (part.length > 63) {\n      return false;\n    }\n\n    if (!/^[a-z_\\u00a1-\\uffff0-9-]+$/i.test(part)) {\n      return false;\n    } // disallow full-width chars\n\n\n    if (/[\\uff01-\\uff5e]/.test(part)) {\n      return false;\n    } // disallow parts starting or ending with hyphen\n\n\n    if (/^-|-$/.test(part)) {\n      return false;\n    }\n\n    if (!options.allow_underscores && /_/.test(part)) {\n      return false;\n    }\n\n    return true;\n  });\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isByteLength;\n\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-disable prefer-rest-params */\nfunction isByteLength(str, options) {\n  (0, _assertString.default)(str);\n  var min;\n  var max;\n\n  if (_typeof(options) === 'object') {\n    min = options.min || 0;\n    max = options.max;\n  } else {\n    // backwards compatibility: isByteLength(str, min [, max])\n    min = arguments[1];\n    max = arguments[2];\n  }\n\n  var len = encodeURI(str).split(/%..|./).length - 1;\n  return len >= min && (typeof max === 'undefined' || len <= max);\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isEmail;\n\nvar _assertString = _interopRequireDefault(require(\"./util/assertString\"));\n\nvar _merge = _interopRequireDefault(require(\"./util/merge\"));\n\nvar _isByteLength = _interopRequireDefault(require(\"./isByteLength\"));\n\nvar _isFQDN = _interopRequireDefault(require(\"./isFQDN\"));\n\nvar _isIP = _interopRequireDefault(require(\"./isIP\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar default_email_options = {\n  allow_display_name: false,\n  require_display_name: false,\n  allow_utf8_local_part: true,\n  require_tld: true,\n  blacklisted_chars: '',\n  ignore_max_length: false\n};\n/* eslint-disable max-len */\n\n/* eslint-disable no-control-regex */\n\nvar splitNameAddress = /^([^\\x00-\\x1F\\x7F-\\x9F\\cX]+)</i;\nvar emailUserPart = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]+$/i;\nvar gmailUserPart = /^[a-z\\d]+$/;\nvar quotedEmailUser = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]))*$/i;\nvar emailUserUtf8Part = /^[a-z\\d!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+$/i;\nvar quotedEmailUserUtf8 = /^([\\s\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f\\x21\\x23-\\x5b\\x5d-\\x7e\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]|(\\\\[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))*$/i;\nvar defaultMaxEmailLength = 254;\n/* eslint-enable max-len */\n\n/* eslint-enable no-control-regex */\n\n/**\n * Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2\n * @param {String} display_name\n */\n\nfunction validateDisplayName(display_name) {\n  var display_name_without_quotes = display_name.replace(/^\"(.+)\"$/, '$1'); // display name with only spaces is not valid\n\n  if (!display_name_without_quotes.trim()) {\n    return false;\n  } // check whether display name contains illegal character\n\n\n  var contains_illegal = /[\\.\";<>]/.test(display_name_without_quotes);\n\n  if (contains_illegal) {\n    // if contains illegal characters,\n    // must to be enclosed in double-quotes, otherwise it's not a valid display name\n    if (display_name_without_quotes === display_name) {\n      return false;\n    } // the quotes in display name must start with character symbol \\\n\n\n    var all_start_with_back_slash = display_name_without_quotes.split('\"').length === display_name_without_quotes.split('\\\\\"').length;\n\n    if (!all_start_with_back_slash) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction isEmail(str, options) {\n  (0, _assertString.default)(str);\n  options = (0, _merge.default)(options, default_email_options);\n\n  if (options.require_display_name || options.allow_display_name) {\n    var display_email = str.match(splitNameAddress);\n\n    if (display_email) {\n      var display_name = display_email[1]; // Remove display name and angle brackets to get email address\n      // Can be done in the regex but will introduce a ReDOS (See  #1597 for more info)\n\n      str = str.replace(display_name, '').replace(/(^<|>$)/g, ''); // sometimes need to trim the last space to get the display name\n      // because there may be a space between display name and email address\n      // eg. myname <address@gmail.com>\n      // the display name is `myname` instead of `myname `, so need to trim the last space\n\n      if (display_name.endsWith(' ')) {\n        display_name = display_name.substr(0, display_name.length - 1);\n      }\n\n      if (!validateDisplayName(display_name)) {\n        return false;\n      }\n    } else if (options.require_display_name) {\n      return false;\n    }\n  }\n\n  if (!options.ignore_max_length && str.length > defaultMaxEmailLength) {\n    return false;\n  }\n\n  var parts = str.split('@');\n  var domain = parts.pop();\n  var user = parts.join('@');\n  var lower_domain = domain.toLowerCase();\n\n  if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {\n    /*\n      Previously we removed dots for gmail addresses before validating.\n      This was removed because it allows `multiple..dots@gmail.com`\n      to be reported as valid, but it is not.\n      Gmail only normalizes single dots, removing them from here is pointless,\n      should be done in normalizeEmail\n    */\n    user = user.toLowerCase(); // Removing sub-address from username before gmail validation\n\n    var username = user.split('+')[0]; // Dots are not included in gmail length restriction\n\n    if (!(0, _isByteLength.default)(username.replace('.', ''), {\n      min: 6,\n      max: 30\n    })) {\n      return false;\n    }\n\n    var _user_parts = username.split('.');\n\n    for (var i = 0; i < _user_parts.length; i++) {\n      if (!gmailUserPart.test(_user_parts[i])) {\n        return false;\n      }\n    }\n  }\n\n  if (options.ignore_max_length === false && (!(0, _isByteLength.default)(user, {\n    max: 64\n  }) || !(0, _isByteLength.default)(domain, {\n    max: 254\n  }))) {\n    return false;\n  }\n\n  if (!(0, _isFQDN.default)(domain, {\n    require_tld: options.require_tld\n  })) {\n    if (!options.allow_ip_domain) {\n      return false;\n    }\n\n    if (!(0, _isIP.default)(domain)) {\n      if (!domain.startsWith('[') || !domain.endsWith(']')) {\n        return false;\n      }\n\n      var noBracketdomain = domain.substr(1, domain.length - 2);\n\n      if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) {\n        return false;\n      }\n    }\n  }\n\n  if (user[0] === '\"') {\n    user = user.slice(1, user.length - 1);\n    return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);\n  }\n\n  var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;\n  var user_parts = user.split('.');\n\n  for (var _i = 0; _i < user_parts.length; _i++) {\n    if (!pattern.test(user_parts[_i])) {\n      return false;\n    }\n  }\n\n  if (options.blacklisted_chars) {\n    if (user.search(new RegExp(\"[\".concat(options.blacklisted_chars, \"]+\"), 'g')) !== -1) return false;\n  }\n\n  return true;\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;"],"sourceRoot":""}