{"version":3,"file":"static/js/848.c2aba9e2.chunk.js","mappings":"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","sources":["components/Footer.jsx","components/Header.jsx","components/Page.jsx","pages/SignIn.jsx","session_storage.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport {\n  KitFlexRow,\n  KitIcon,\n  KitLink,\n  KitLocalePicker,\n  KitUtilCommon,\n  KitUtilLocale,\n  ThemeColors as colors,\n  ThemeConstants,\n} from '@chargepoint/cp-toolkit';\nimport localStorage from '../localStorage';\nimport utils from '../common/utils';\n\nconst { breakpoints, fontSize, spacing } = ThemeConstants;\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  @media all and (max-width: ${breakpoints.md}px) {\n    flex-direction: column;\n    justify-content: center;\n  }\n  align-items: center;\n  background-color: ${colors.gray_10};\n  padding: ${spacing.m}rem;\n  & * {\n    font-size: ${fontSize.text_14}rem;\n  }\n`;\n\nconst Copyright = styled.div`\n  order: 0;\n  @media all and (max-width: ${breakpoints.md}px) {\n    order: 1;\n  }\n`;\n\nconst Links = styled(KitFlexRow)`\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  order: 1;\n  @media all and (max-width: ${breakpoints.md}px) {\n    order: 0;\n  }\n  & > * {\n    margin-left: ${spacing.m}rem;\n  }\n  & > *:first-child {\n    margin-left: 0;\n  }\n`;\n\nconst LocalePickerContainer = styled(KitFlexRow)`\n  align-items: center;\n`;\n\nconst LanguageIcon = styled(KitIcon)`\n  margin-right: ${spacing.xs}rem;\n`;\n\nfunction Footer() {\n  const history = useHistory();\n  const { t, i18n } = useTranslation();\n  const [showLocalePicker, setShowLocalePicker] = useState(false);\n  const [localePickerResult, setLocalePickerResult] = useState(null);\n  const [supportedLocales, setSupportedLocales] = useState(undefined);\n\n  useEffect(() => {\n    const subdomain = utils.getSubdomain();\n    const regionCode = KitUtilLocale.getRegionCodeForSSOSubdomain(t, subdomain);\n    const defaultLocaleCode = KitUtilLocale.getDefaultLocaleCodeForRegionCode(t, regionCode);\n    const localeCode = localStorage.getLocaleCode(defaultLocaleCode);\n    setLocalePickerResult(KitLocalePicker.getKitLocalePickerResult(t, regionCode, localeCode));\n  }, [t, setLocalePickerResult]);\n\n  const footerCopyright = t('footer_copyright', {\n    year: new Date().getFullYear(),\n    company_name: window.cp_constants.STRING_COMPANY_NAME,\n  });\n\n  const onLocaleChanged = (result) => {\n    setShowLocalePicker(false);\n\n    localStorage.setLocaleCode(result.localeCode);\n\n    const supportedLocale = KitUtilLocale.getSupportedLocale(result.nosCookieLocale);\n\n    i18n.changeLanguage(supportedLocale);\n\n    const currentSubdomain = utils.getSubdomain();\n    if (currentSubdomain !== result.ssoSubdomain) {\n      // Switch subdomain aka NOSLETs\n      const queryParamsObject = KitUtilCommon.getQueryObject(window.location.search);\n      queryParamsObject.locale = result.localeCode; // Forcing locale to be loaded on new subdomain via query param!!!\n      // IMPORTANT: If there's a username query param it should be deleted before redirecting to another NOSLET otherwise\n      // backend could force a redirect back to the users proper region NOSLET. Ping pong redirection is bad.\n      delete queryParamsObject.username;\n      const redirectTo = `${window.location.protocol}//${\n        result.ssoSubdomain\n      }.${utils.getDomain()}/${KitUtilCommon.getQueryString(queryParamsObject)}`;\n      window.location = redirectTo;\n    } else {\n      // IMPORTANT:\n      // Need to remove the \"locale\" query param and refresh page.\n      // Otherwise, that \"locale\" query param will take priority over users selected region/locale.\n      let path = window.location.pathname;\n      const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n      if (redirectQueryParam) {\n        path += KitUtilCommon.getQueryString({\n          redirect: redirectQueryParam,\n        });\n      }\n      history.push(path);\n    }\n  };\n\n  let corpAboutUrl;\n  let corpContactUrl;\n  let privacyPolicyUrl;\n  if (localePickerResult) {\n    corpAboutUrl = `https://${localePickerResult.corporateUrl}/about`;\n    corpContactUrl = `https://${localePickerResult.corporateUrl}/support`;\n    privacyPolicyUrl = utils.makePrivacyPolicyUrl(localePickerResult);\n  }\n\n  let californiaPrivacyNoticeLink;\n  if (localePickerResult && localePickerResult.displayCaliforniaPrivacy) {\n    const policyUrl = utils.makeCaliforniaPrivacyUrl(localePickerResult);\n    californiaPrivacyNoticeLink = (\n      <a href={policyUrl} target='_blank' rel='noopener noreferrer'>\n        {t('california_privacy_notice')}\n      </a>\n    );\n  }\n\n  const currentLocalizedLanguageName = localePickerResult?.localizedLanguageName || 'English';\n  const localePickerAriaLabel = t('footer_language_picker_link_aria_label', {\n    language: currentLocalizedLanguageName,\n  });\n\n  const getSupportedLocales = () => {\n    return fetch(\n      `https://account.${window.cp_constants.ENV_DOMAIN}/account/v1/metadata/languages`,\n      {\n        method: 'GET',\n      }\n    )\n      .then((response) => {\n        return response.json();\n      })\n      .then((languages) => {\n        return languages.filter((l) => l.locale !== '').map((l) => l.locale);\n      });\n  };\n\n  const openLocalePicker = async () => {\n    try {\n      setSupportedLocales(await getSupportedLocales());\n      setShowLocalePicker(true);\n    } catch (err) {\n      console.error(err);\n    }\n  };\n\n  return (\n    <Container>\n      <Copyright>{footerCopyright}</Copyright>\n      <Links>\n        <KitLink onClick={openLocalePicker} aria-label={localePickerAriaLabel}>\n          <LocalePickerContainer>\n            <LanguageIcon\n              icon='web'\n              size={`${ThemeConstants.iconSize.m}rem`}\n              fill={colors.blue_55}\n            />\n            {currentLocalizedLanguageName}\n          </LocalePickerContainer>\n        </KitLink>\n        <a href={corpAboutUrl} target='_blank' rel='noopener noreferrer'>\n          {t('about_us')}\n        </a>\n        <a href={corpContactUrl} target='_blank' rel='noopener noreferrer'>\n          {t('contact_us')}\n        </a>\n        <a href={privacyPolicyUrl} target='_blank' rel='noopener noreferrer'>\n          {t('privacy_policy')}\n        </a>\n        {californiaPrivacyNoticeLink}\n      </Links>\n      <KitLocalePicker\n        selectedLocale='en-US'\n        show={showLocalePicker}\n        onHide={() => setShowLocalePicker(false)}\n        onSelect={onLocaleChanged}\n        t={t}\n        supportedLocales={supportedLocales}\n      />\n    </Container>\n  );\n}\n\nexport default Footer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport { ThemeConstants, ThemeColors, KitFlexRow, CPLogo } from '@chargepoint/cp-toolkit';\n\nconst Container = styled(KitFlexRow)`\n  justify-content: flex-start;\n  align-items: center;\n  background-color: ${ThemeColors.gray_10};\n  height: 64px;\n  padding-left: ${ThemeConstants.spacing.m}rem;\n  padding-right: ${ThemeConstants.spacing.m}rem;\n`;\n\nfunction Header() {\n  const { t } = useTranslation();\n  return (\n    <Container>\n      <CPLogo width={176} t={t} />\n    </Container>\n  );\n}\n\nexport default Header;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { KitPage, KitAppLayout } from '@chargepoint/cp-toolkit';\nimport Footer from './Footer';\nimport Header from './Header';\n\n// eslint-disable-next-line react/prop-types\nfunction Page({ title, children }) {\n  const { i18n } = useTranslation();\n\n  return (\n    <KitPage title={title} locale={i18n.language}>\n      <KitAppLayout.Header>\n        <Header />\n      </KitAppLayout.Header>\n      <KitAppLayout.Body>{children}</KitAppLayout.Body>\n      <KitAppLayout.Footer>\n        <Footer />\n      </KitAppLayout.Footer>\n    </KitPage>\n  );\n}\n\nPage.propTypes = {\n  children: PropTypes.node,\n};\n\nPage.defaultProps = {\n  children: undefined,\n};\n\nexport default Page;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Link, useHistory, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport {\n  KitButton,\n  KitFlexCol,\n  KitFlexRow,\n  KitFlexRowCentered,\n  KitFlexRowEnd,\n  KitLink,\n  KitModal,\n  KitRadio,\n  KitSpinner,\n  KitInput,\n  KitForm,\n  KitUtilCommon,\n  KitUtilLocale,\n  KitLocalePicker,\n  ThemeConstants,\n} from '@chargepoint/cp-toolkit';\nimport Page from '../components/Page';\nimport { setLoginPath, setUserLogin } from '../session_storage';\nimport utils from '../common/utils';\nimport banner from '../images/web-signup-header-min.png';\nimport localStorage from '../localStorage';\n\nconst BannerImg = styled.img`\n  max-width: 100%;\n  margin-bottom: ${ThemeConstants.spacing.l}rem;\n`;\n\nconst Title = styled.h1`\n  text-align: center;\n  font-weight: normal;\n  margin-bottom: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst StyledForm = styled.form`\n  min-width: 476px;\n  @media all and (max-width: ${ThemeConstants.breakpoints.md}px) {\n    min-width: 300px;\n  }\n`;\n\nconst CenteredDiv = styled.div`\n  text-align: center;\n`;\n\nconst ForgotFlexRow = styled(KitFlexRow)`\n  margin-top: ${ThemeConstants.spacing.s}rem;\n`;\n\nconst SubmitFlexRowCentered = styled(KitFlexRowCentered)`\n  margin-top: ${ThemeConstants.spacing.xl}rem;\n  margin-bottom: ${ThemeConstants.spacing.xl}rem;\n`;\n\nconst SubmitButton = styled(KitButton)`\n  min-width: 120px;\n`;\n\nconst ValidatedUsernameDiv = styled.div`\n  display: ${(props) => (props.show ? 'block' : 'none')};\n  margin-bottom: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst SignupLine = styled.div`\n  margin-top: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst SignInState = {\n  username_validation: 0,\n  username_validating: 1,\n  username_validation_error: 2,\n  username_validation_success: 3,\n  password_validating: 4,\n  password_validation_error: 5,\n  password_validation_success: 6,\n  select_usernames: 7,\n};\nObject.freeze(SignInState);\n\nfunction SignIn() {\n  const { t, i18n } = useTranslation();\n  const history = useHistory();\n  const usernameQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'username');\n  const [username, setUsername] = useState(usernameQueryParam ? usernameQueryParam : '');\n  const [password, setPassword] = useState('');\n  const [selectUsernames, setSelectUsernames] = useState([]);\n  const [selectedUsernameIndex, setSelectedUsernameIndex] = useState(0);\n  const [signInState, setSignInState] = useState(SignInState.username_validation);\n  const [lastErrorMessage, setLastErrorMessage] = useState('');\n  const [localePickerResult, setLocalePickerResult] = useState(null);\n  const usernameRef = useRef(null);\n  const passwordRef = useRef(null);\n  const { search } = useLocation()\n\n  useEffect(() => {\n    const subdomain = utils.getSubdomain();\n    const regionCode = KitUtilLocale.getRegionCodeForSSOSubdomain(t, subdomain);\n    const defaultLocaleCode = KitUtilLocale.getDefaultLocaleCodeForRegionCode(t, regionCode);\n    const localeCode = localStorage.getLocaleCode(defaultLocaleCode);\n    setLocalePickerResult(KitLocalePicker.getKitLocalePickerResult(t, regionCode, localeCode));\n  }, [t, setLocalePickerResult]);\n\n  useEffect(() => {\n    let loginPath = window.location.pathname;\n    const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n    if (redirectQueryParam) {\n      loginPath += KitUtilCommon.getQueryString({\n        redirect: redirectQueryParam,\n      });\n    }\n    setLoginPath(loginPath);\n  }, []);\n\n  useEffect(() => {\n    if (signInState === SignInState.username_validation) {\n      // Initial state should set focus to username input\n      usernameRef.current.focus();\n    }\n    if (signInState === SignInState.username_validation_success) {\n      // Username is validated... set focus to password input\n      passwordRef.current.focus();\n    }\n  }, [signInState]);\n\n  const changeUsernameClicked = () => {\n    setSignInState(SignInState.username_validation);\n  };\n\n  const displayUnknownError = () => {\n    const unknown = t('error_ids.unknown');\n    setLastErrorMessage(\n      t('error_with_message', {\n        message: unknown,\n      })\n    );\n  };\n\n  const checkForAlreadyLoggedInUser = async () => {\n    try {\n      const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n      let apiUrl = utils.makeSsoApiUrl('/v1/user/current');\n      const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n      if (redirectQueryParam) {\n        apiUrl += `?redirect=${encodeURIComponent(redirectQueryParam)}`;\n      }\n\n      const response = await fetch(apiUrl, {\n        method: 'GET',\n        credentials: 'include',\n        headers: requestHeaders,\n      });\n      const data = await response.json();\n\n      const { hasOwnProperty } = Object.prototype;\n\n      switch (response.status) {\n        case 200:\n          if (hasOwnProperty.call(data, 'challenge_response')) {\n            const { challenge_response: challengeResponse } = data;\n            if (challengeResponse === 'LANDING_PAGE_REDIRECT') {\n              window.location = data.redirect_url;\n            }\n          }\n          break;\n        default:\n          // Just drop to the SSO login\n          break;\n      }\n    } catch (err) {\n      console.error(`Unknown Error: ${err}`);\n    }\n  };\n\n  const validateUsername = async () => {\n    try {\n      const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n      const requestBody = {\n        username,\n        timezone_offset: new Date().getTimezoneOffset(),\n        timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n      };\n\n      const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n      if (redirectQueryParam) {\n        requestBody.redirect = redirectQueryParam;\n      }\n\n      const apiUrl = utils.makeSsoApiUrl('/v1/user/login');\n      const response = await fetch(apiUrl, {\n        method: 'POST',\n        credentials: 'include',\n        headers: requestHeaders,\n        body: JSON.stringify(requestBody),\n      });\n      const data = await response.json();\n\n      const { hasOwnProperty } = Object.prototype;\n\n      switch (response.status) {\n        case 200:\n          if (hasOwnProperty.call(data, 'challenge_response')) {\n            setUserLogin(username);\n            const { challenge_response: challengeResponse } = data;\n            if (challengeResponse === 'PASSWORD') {\n              setSignInState(SignInState.username_validation_success);\n            } else if (\n              challengeResponse === 'IDP_LOGIN' ||\n              challengeResponse === 'NOSLET_REDIRECT'\n            ) {\n              window.location = data.redirect_url;\n            } else {\n              displayUnknownError();\n              console.error(`Unexpected challenge response: ${challengeResponse}`);\n              setSignInState(SignInState.username_validation_error);\n            }\n          } else {\n            setLastErrorMessage('Error validating user: Missing challenge response');\n            setSignInState(SignInState.username_validation_error);\n          }\n          break;\n        default:\n          if (hasOwnProperty.call(data, 'error_message')) {\n            // Returned error_message will be localized by SSO backend\n            setLastErrorMessage(data.error_message);\n          } else {\n            setLastErrorMessage(\n              t('error_with_message', {\n                message: `[${response.status}] ${response.statusText}`,\n              })\n            );\n          }\n          setSignInState(SignInState.username_validation_error);\n          break;\n      }\n    } catch (err) {\n      displayUnknownError();\n      console.error(`Unknown Error: ${err}`);\n      setSignInState(SignInState.username_validation_error);\n    }\n  };\n\n  useEffect(() => {\n    async function performStartupChecks() {\n      await checkForAlreadyLoggedInUser();\n\n      if (usernameQueryParam) {\n        // This will skip directly to password entry as the username query param is present.\n        // IMPORTANT: Needs to call validateUsername in the edge case this user account is in a separate region/noslet.\n        // See NOSLET_REDIRECT challenge response!!!\n        setSignInState(SignInState.username_validating);\n        await validateUsername();\n      }\n    }\n\n    performStartupChecks();\n  }, []);\n\n  const attemptLogin = async () => {\n    try {\n      const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n      const requestBody = {\n        username,\n        password,\n        timezone_offset: new Date().getTimezoneOffset(),\n        timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n      };\n\n      const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n      if (redirectQueryParam) {\n        requestBody.redirect = redirectQueryParam;\n      }\n\n      const apiUrl = utils.makeSsoApiUrl('/v1/user/login');\n      const response = await fetch(apiUrl, {\n        method: 'POST',\n        credentials: 'include',\n        headers: requestHeaders,\n        body: JSON.stringify(requestBody),\n      });\n      const data = await response.json();\n\n      const { hasOwnProperty } = Object.prototype;\n\n      switch (response.status) {\n        case 200:\n          if (hasOwnProperty.call(data, 'challenge_response')) {\n            const { challenge_response: challengeResponse } = data;\n            if (challengeResponse === 'SELECT_USERNAMES') {\n              const { data: usernamesData } = data;\n              if (usernamesData.length > 0) {\n                setSelectUsernames(usernamesData);\n                setUsername(usernamesData[0]);\n                setSignInState(SignInState.select_usernames);\n              } else {\n                displayUnknownError();\n                console.error('SELECT_USERNAMES challenge missing usernames');\n                setSignInState(SignInState.username_validation_error);\n              }\n            } else if (challengeResponse === 'NOSLET_REDIRECT') {\n              window.location = data.redirect_url;\n            } else if (challengeResponse === 'LANDING_PAGE_REDIRECT') {\n              if (data.redirect_url.indexOf(window.location.origin) !== -1) {\n                history.push(data.redirect_url.replace(window.location.origin, ''));\n              } else {\n                window.location = data.redirect_url;\n              }\n            } else {\n              displayUnknownError();\n              console.error(`Unexpected challenge response: ${challengeResponse}`);\n              setSignInState(SignInState.username_validation_error);\n            }\n          } else if (hasOwnProperty.call(data, 'redirect_url')) {\n            setSignInState(SignInState.password_validation_success);\n            window.location = data.redirect_url;\n          } else {\n            setLastErrorMessage('Missing redirect_url');\n            setSignInState(SignInState.password_validation_error);\n          }\n          break;\n        default:\n          if (hasOwnProperty.call(data, 'error_message')) {\n            // Returned error_message will be localized by SSO backend\n            setLastErrorMessage(data.error_message);\n          } else {\n            setLastErrorMessage(\n              t('error_with_message', {\n                message: `[${response.status}] ${response.statusText}`,\n              })\n            );\n          }\n          setSignInState(SignInState.password_validation_error);\n          break;\n      }\n    } catch (err) {\n      displayUnknownError();\n      console.error(`Unknown Error: ${err}`);\n      setSignInState(SignInState.password_validation_error);\n    }\n  };\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    switch (signInState) {\n      case SignInState.username_validation:\n      case SignInState.username_validation_error:\n        setSignInState(SignInState.username_validating);\n        validateUsername();\n        break;\n      case SignInState.username_validation_success:\n      case SignInState.password_validation_error:\n        setSignInState(SignInState.password_validating);\n        attemptLogin();\n        break;\n      default:\n        break;\n    }\n  };\n\n  const [signupText, signupLink] = utils.getSignupLinkWithText(search, localePickerResult)\n\n  let buttonDisabled = false;\n  let buttonTitle = t('next');\n  if (signInState >= SignInState.username_validation_success) {\n    buttonTitle = t('login_button');\n  }\n\n  if (\n    signInState === SignInState.username_validating ||\n    signInState === SignInState.password_validating\n  ) {\n    buttonDisabled = true;\n    buttonTitle = <KitSpinner size='s' t={t} />;\n  }\n\n  const forgotUsernamePath = '/forgot-username';\n\n  let forgotPasswordPath = '/forgot-password';\n  forgotPasswordPath += KitUtilCommon.getQueryString({\n    username,\n  });\n\n  let usernameError;\n  if (signInState === SignInState.username_validation_error) {\n    usernameError = lastErrorMessage;\n  }\n\n  let passwordError;\n  if (signInState === SignInState.password_validation_error) {\n    passwordError = lastErrorMessage;\n  }\n\n  let selectUsernameModal;\n  if (signInState === SignInState.select_usernames) {\n    const radios = [];\n\n    const onSelectUsername = (i) => {\n      setSelectedUsernameIndex(i);\n      setUsername(selectUsernames[i]);\n    };\n\n    for (let i = 0; i < selectUsernames.length; i += 1) {\n      const uname = selectUsernames[i];\n      const radioId = `radio_${uname}`;\n      radios.push(\n        <KitRadio\n          key={uname}\n          data-qa-id={radioId}\n          checked={selectedUsernameIndex === i}\n          name='username'\n          label={uname}\n          value={uname}\n          onChange={() => onSelectUsername(i)}\n        />\n      );\n    }\n\n    const onContinue = () => {\n      setSelectedUsernameIndex(0);\n      setSignInState(SignInState.password_validating);\n      attemptLogin();\n    };\n\n    selectUsernameModal = (\n      <KitModal show closeOnClickOutside={false} position='center'>\n        <KitModal.Header t={t}>\n          <KitModal.Title>{t('multiple_usernames_found')}</KitModal.Title>\n        </KitModal.Header>\n        <KitModal.Body>\n          <p>{t('select_username_to_continue_logging_in')}</p>\n          <div>{radios}</div>\n        </KitModal.Body>\n        <KitModal.Footer>\n          <KitFlexRowEnd>\n            <KitButton data-qa-id='select_username_continue' onClick={onContinue}>\n              {t('continue')}\n            </KitButton>\n          </KitFlexRowEnd>\n        </KitModal.Footer>\n      </KitModal>\n    );\n  }\n\n  return (\n    <Page title={t('login_title')}>\n      <KitFlexCol>\n        <KitFlexRowCentered>\n          <BannerImg src={banner} alt='ChargePoint' />\n        </KitFlexRowCentered>\n        <Title>{t('login_title')}</Title>\n        <KitFlexRowCentered>\n          <StyledForm onSubmit={handleSubmit} noValidate>\n            <ValidatedUsernameDiv\n              show={signInState >= SignInState.username_validation_success ? 1 : 0}\n            >\n              <CenteredDiv>{username}</CenteredDiv>\n              <CenteredDiv>\n                <KitLink data-qa-id='change_username_link' onClick={changeUsernameClicked}>\n                  {t('change')}\n                </KitLink>\n              </CenteredDiv>\n            </ValidatedUsernameDiv>\n            {signInState < SignInState.username_validation_success && (\n              <>\n                <KitForm.Label text={t('email_or_username_hint')} htmlFor='username' />\n                <KitInput\n                  id='username'\n                  data-qa-id='username'\n                  name='username'\n                  ref={usernameRef}\n                  aria-label={t('email_or_username_hint')}\n                  type='text'\n                  disabled={signInState === SignInState.username_validating}\n                  value={username}\n                  onChange={(e) => setUsername(e.target.value)}\n                  isError={!!usernameError}\n                />\n                <KitForm.InfoText\n                  text={usernameError}\n                  isError={!!usernameError}\n                  id='usernameError'\n                />\n                <ForgotFlexRow>\n                  <Link data-qa-id='forgot_username_link' to={forgotUsernamePath}>\n                    {t('forgot_username')}\n                  </Link>\n                </ForgotFlexRow>\n              </>\n            )}\n            {signInState >= SignInState.username_validation_success && (\n              <>\n                <KitForm.Label text={t('password_hint')} htmlFor='password' />\n                <KitInput\n                  id='password'\n                  data-qa-id='password'\n                  name='password'\n                  ref={passwordRef}\n                  aria-label={t('password_hint')}\n                  type='password'\n                  disabled={signInState === SignInState.username_validating}\n                  value={password}\n                  onChange={(e) => setPassword(e.target.value)}\n                  isError={!!passwordError}\n                />\n                <KitForm.InfoText\n                  text={passwordError}\n                  isError={!!passwordError}\n                  id='passwordError'\n                />\n                <ForgotFlexRow>\n                  <Link data-qa-id='forgot_password_link' to={forgotPasswordPath}>\n                    {t('forgot_password')}\n                  </Link>\n                </ForgotFlexRow>\n              </>\n            )}\n            <SubmitFlexRowCentered>\n              <SubmitButton\n                data-qa-id='form_submit_button'\n                variant='primary'\n                type='submit'\n                disabled={buttonDisabled}\n              >\n                {buttonTitle}\n              </SubmitButton>\n            </SubmitFlexRowCentered>\n            <KitFlexRowCentered>\n              <SignupLine>\n                {signupText}{' '}\n                <KitLink data-qa-id='sign_up_link' href={signupLink}>\n                  {t('sign_up')}\n                </KitLink>\n              </SignupLine>\n            </KitFlexRowCentered>\n          </StyledForm>\n        </KitFlexRowCentered>\n      </KitFlexCol>\n      {selectUsernameModal}\n    </Page>\n  );\n}\n\nexport default SignIn;\n","const LOGIN_PATH_KEY = 'login_path';\nconst USER_LOGIN_KEY = 'user_login';\n\nexport const setLoginPath = (url) => {\n  window.sessionStorage.setItem(LOGIN_PATH_KEY, url);\n};\n\nexport const getLoginPath = () => {\n  let loginPath = window.sessionStorage.getItem(LOGIN_PATH_KEY);\n  if (!loginPath) {\n    // At a minimum if we don't know where to redirect to just go to \"/\" login page route.\n    loginPath = '/';\n  }\n  return loginPath;\n};\n\nexport const setUserLogin = (login) => {\n  window.sessionStorage.setItem(USER_LOGIN_KEY, login);\n};\n\nexport const getUserLogin = () => {\n  const userLogin = window.sessionStorage.getItem(USER_LOGIN_KEY);\n  return userLogin ? userLogin : '';\n};\n"],"names":["breakpoints","ThemeConstants","fontSize","spacing","Container","styled","div","md","colors","gray_10","m","text_14","Copyright","Links","KitFlexRow","LocalePickerContainer","LanguageIcon","KitIcon","xs","history","useHistory","useTranslation","t","i18n","useState","showLocalePicker","setShowLocalePicker","localePickerResult","setLocalePickerResult","undefined","supportedLocales","setSupportedLocales","useEffect","subdomain","utils","getSubdomain","regionCode","KitUtilLocale","getRegionCodeForSSOSubdomain","defaultLocaleCode","getDefaultLocaleCodeForRegionCode","localeCode","localStorage","getLocaleCode","KitLocalePicker","getKitLocalePickerResult","corpAboutUrl","corpContactUrl","privacyPolicyUrl","californiaPrivacyNoticeLink","footerCopyright","year","Date","getFullYear","company_name","window","cp_constants","STRING_COMPANY_NAME","corporateUrl","makePrivacyPolicyUrl","displayCaliforniaPrivacy","policyUrl","makeCaliforniaPrivacyUrl","href","target","rel","currentLocalizedLanguageName","localizedLanguageName","localePickerAriaLabel","language","openLocalePicker","fetch","ENV_DOMAIN","method","then","response","json","languages","filter","l","locale","map","console","error","onClick","icon","size","iconSize","fill","blue_55","selectedLocale","show","onHide","onSelect","result","setLocaleCode","supportedLocale","getSupportedLocale","nosCookieLocale","changeLanguage","ssoSubdomain","queryParamsObject","KitUtilCommon","getQueryObject","location","search","username","redirectTo","protocol","getDomain","getQueryString","path","pathname","redirectQueryParam","getQueryParam","redirect","push","ThemeColors","width","Page","title","children","Header","Body","Footer","defaultProps","BannerImg","img","Title","h1","StyledForm","form","CenteredDiv","ForgotFlexRow","s","SubmitFlexRowCentered","KitFlexRowCentered","xl","SubmitButton","KitButton","ValidatedUsernameDiv","props","SignupLine","SignInState","username_validation","username_validating","username_validation_error","username_validation_success","password_validating","password_validation_error","password_validation_success","select_usernames","Object","freeze","usernameQueryParam","setUsername","password","setPassword","selectUsernames","setSelectUsernames","selectedUsernameIndex","setSelectedUsernameIndex","signInState","setSignInState","lastErrorMessage","setLastErrorMessage","usernameRef","useRef","passwordRef","useLocation","loginPath","setLoginPath","current","focus","displayUnknownError","unknown","message","checkForAlreadyLoggedInUser","requestHeaders","getCommonRequestHeaders","apiUrl","makeSsoApiUrl","encodeURIComponent","credentials","headers","data","hasOwnProperty","prototype","status","call","challenge_response","redirect_url","validateUsername","requestBody","timezone_offset","getTimezoneOffset","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","body","JSON","stringify","setUserLogin","challengeResponse","error_message","statusText","performStartupChecks","attemptLogin","usernamesData","length","indexOf","origin","replace","getSignupLinkWithText","signupText","signupLink","buttonDisabled","buttonTitle","usernameError","passwordError","selectUsernameModal","forgotPasswordPath","radios","i","uname","radioId","checked","name","label","value","onChange","onSelectUsername","closeOnClickOutside","position","src","banner","alt","onSubmit","e","preventDefault","noValidate","Label","text","htmlFor","id","ref","type","disabled","isError","InfoText","to","variant","LOGIN_PATH_KEY","USER_LOGIN_KEY","url","sessionStorage","setItem","getLoginPath","getItem","login","getUserLogin","userLogin"],"sourceRoot":""}