{"version":3,"file":"js/68334-87ed051f949d4e5e156b.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isNil.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Spinner/Spinner.module.scss?04df","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Spinner/Spinner.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/VisuallyHidden/VisuallyHidden.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/Alert.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/AlertProvider/AlertContext.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/Input.module.scss?39a2","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/Input.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/icons/dist/ActionsVisibleDisabledNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/icons/dist/ActionsVisibleNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/PasswordInput.module.scss?488e","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/PasswordInput.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/RegistrationInput/RegistrationInput.module.scss?70f3","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/RegistrationInput/RegistrationInput.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/EmailRegistrationForm.module.scss?ddf9","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/EmailRegistrationForm.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/email-registration-api.ts","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelCircleHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCheckCircleOnMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationWarningHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationInformationNormalMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelNormalSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/react-hooks/src/use-interval/useInterval.hook.js","webpack://StravaModern/./node_modules/@strava/ui/VisuallyHidden/VisuallyHidden.tsx","webpack://StravaModern/./node_modules/@strava/ui/Alert/Alert.module.scss?7e0f","webpack://StravaModern/./node_modules/@strava/ui/Alert/Alert.tsx","webpack://StravaModern/./node_modules/@strava/ui/Alert/AlertProvider/AlertContext.tsx","webpack://StravaModern/./node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.tsx","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_freeGlobal.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_root.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_Symbol.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_arrayMap.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/isArray.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_getRawTag.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_objectToString.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_baseGetTag.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/isObjectLike.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/_baseToString.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/toString.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/lodash-es/replace.js","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/@strava/utils/src/externalSocialPartners/externalSocialPartners.ts","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/node_modules/@strava/utils/src/externalSocialPartners/useApple.ts","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/src/LohRegistrationPanel.module.scss?4fc4","webpack://StravaModern/./node_modules/@strava/loh-registration-panel-ui/src/LohRegistrationPanel.tsx","webpack://StravaModern/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://StravaModern/./node_modules/lodash-es/_Symbol.js","webpack://StravaModern/./node_modules/lodash-es/_getRawTag.js","webpack://StravaModern/./node_modules/lodash-es/_objectToString.js","webpack://StravaModern/./node_modules/lodash-es/_baseGetTag.js","webpack://StravaModern/./node_modules/lodash-es/_baseSlice.js","webpack://StravaModern/./node_modules/lodash-es/_arrayMap.js","webpack://StravaModern/./node_modules/lodash-es/_baseToString.js","webpack://StravaModern/./node_modules/lodash-es/_castSlice.js","webpack://StravaModern/./node_modules/lodash-es/_freeGlobal.js","webpack://StravaModern/./node_modules/lodash-es/_hasUnicode.js","webpack://StravaModern/./node_modules/lodash-es/_root.js","webpack://StravaModern/./node_modules/lodash-es/_asciiToArray.js","webpack://StravaModern/./node_modules/lodash-es/_unicodeToArray.js","webpack://StravaModern/./node_modules/lodash-es/_stringToArray.js","webpack://StravaModern/./node_modules/lodash-es/camelCase.js","webpack://StravaModern/./node_modules/lodash-es/capitalize.js","webpack://StravaModern/./node_modules/lodash-es/isArray.js","webpack://StravaModern/./node_modules/lodash-es/isObjectLike.js","webpack://StravaModern/./node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/lodash-es/toString.js","webpack://StravaModern/./node_modules/lodash-es/_createCaseFirst.js","webpack://StravaModern/./node_modules/lodash-es/upperFirst.js"],"sourcesContent":["/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","// extracted by mini-css-extract-plugin\nexport default {\"spinner\":\"Spinner--spinner--OPlEZ\",\"graphic\":\"Spinner--graphic--FY9vz\",\"spin\":\"Spinner--spin--AJhwi\"};","import React from 'react';\nimport clsx from '../clsx';\n\nimport styles from './Spinner.module.scss';\n\nexport type SpinnerProps = {\n color?: 'default' | 'white';\n size?: number;\n};\n\nconst Spinner = ({ color = 'default', size = 20 }: SpinnerProps) => (\n \n \n \n);\n\nexport default Spinner;\n","import React, { forwardRef } from 'react';\n\ntype VisuallyHiddenProps = React.ComponentPropsWithoutRef<'span'>;\n\n// visually hidden styling comes from https://www.a11yproject.com/posts/how-to-hide-content/\nconst VisuallyHidden = forwardRef(\n ({ style, ...props }, ref) => {\n return (\n \n );\n }\n);\n\nexport default VisuallyHidden;\n","import React, { ComponentPropsWithoutRef, ReactNode, useState } from 'react';\n// import ReachAlert from '@reach/alert';\nimport {\n ActionsCancelCircleHighlightedMedium as ErrorIcon,\n ActionsCheckCircleOnMedium as SuccessIcon,\n NavigationWarningHighlightedMedium as WarningIcon,\n NavigationInformationNormalMedium as InfoIcon,\n ActionsCancelNormalSmall as CancelIcon\n} from '@strava/icons';\nimport { useInterval } from '@strava/react-hooks';\nimport { isTest } from '@strava/utils';\nimport clsx from '../clsx';\nimport VisuallyHidden from '../VisuallyHidden';\nimport styles from './Alert.module.scss';\n\nexport const AlertStatus = {\n ERROR: 'error',\n SUCCESS: 'success',\n WARNING: 'warning',\n INFO: 'info'\n} as const;\n\nexport type AlertStatusType = (typeof AlertStatus)[keyof typeof AlertStatus];\n\nexport type AlertStyleType =\n | 'hasError'\n | 'hasSuccess'\n | 'hasWarning'\n | 'hasInfo';\nexport type AlertButtonStyleType =\n | 'buttonError'\n | 'buttonSuccess'\n | 'buttonWarning'\n | 'buttonInfo';\n\nconst ALERT_DELAY = 8000;\n\nconst getAlertDetails = ({\n type,\n iconSize\n}: {\n type: AlertStatusType;\n iconSize: number;\n}): {\n indicatorIcon: ReactNode;\n messageType: AlertStatusType;\n alertStyle: AlertStyleType;\n buttonStyle: AlertButtonStyleType;\n} =>\n ({\n [AlertStatus.ERROR]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.ERROR,\n alertStyle: 'hasError' as const,\n buttonStyle: 'buttonError' as const\n },\n [AlertStatus.SUCCESS]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.SUCCESS,\n alertStyle: 'hasSuccess' as const,\n buttonStyle: 'buttonSuccess' as const\n },\n [AlertStatus.WARNING]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.WARNING,\n alertStyle: 'hasWarning' as const,\n buttonStyle: 'buttonWarning' as const\n },\n [AlertStatus.INFO]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.INFO,\n alertStyle: 'hasInfo' as const,\n buttonStyle: 'buttonInfo' as const\n }\n }[type]);\n\nconst fadeStyles = {\n enter: isTest() ? '' : 'fadeIn',\n exit: isTest() ? '' : 'fadeOut'\n};\n\nexport interface AlertProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n alertType?: AlertStatusType;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n className?: string;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport const Alert = ({\n children,\n className,\n alertType = AlertStatus.ERROR,\n autoDismiss = false,\n autoDismissDelay = ALERT_DELAY,\n contentPosition = 'left',\n hideCloseButton = false,\n hideIcon = true,\n iconSize = 32,\n onClose = () => {},\n ...options\n}: AlertProps) => {\n const { indicatorIcon, messageType, alertStyle, buttonStyle } =\n getAlertDetails({ type: alertType, iconSize });\n const [fadeStyle, setFadeStyle] = useState(fadeStyles.enter);\n\n const handleOnClose = async () => {\n setFadeStyle(fadeStyles.exit);\n // eslint-disable-next-line no-unused-expressions\n !isTest() && (await new Promise((resolve) => setTimeout(resolve, 0)));\n onClose();\n };\n\n useInterval(\n () => {\n handleOnClose();\n },\n autoDismiss ? autoDismissDelay : null\n );\n\n return (\n \n
\n {/* Icon */}\n {!hideIcon && (\n
{indicatorIcon}
\n )}\n\n {/* Content */}\n \n {messageType}: \n
{children}
\n
\n\n {/* Close Button */}\n {!hideCloseButton && (\n
\n \n \n \n
\n )}\n \n\n {/* Auto Dismiss Progress */}\n {autoDismiss && (\n \n
\n
\n )}\n \n );\n};\n\nexport default Alert;\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo\n} from 'react';\nimport { useQueue } from '@strava/react-hooks';\nimport { generateRandomId } from '@strava/utils';\nimport { AlertStatusType } from '../Alert';\n\nexport interface AlertConfig {\n alertType: AlertStatusType;\n content: ReactNode;\n containerId?: string;\n id?: string;\n className?: string;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport interface AlertState {\n alerts: AlertConfig[];\n showAlert: (config: AlertConfig) => string;\n hideAlert: (id: string) => void;\n clearAlerts: (containerId?: string) => void;\n}\n\nconst AlertContext = createContext(undefined);\nAlertContext.displayName = 'AlertContext';\n\nexport const useAlertContext = () => {\n const context = useContext(AlertContext);\n\n // Fail fast if useAlertContext hook is used outside the Provider.\n if (!context) {\n throw new Error(`useAlertContext must be used within the AlertProvider`);\n }\n\n return context;\n};\n\ninterface AlertProviderProps {\n children: ReactNode;\n}\n\nexport const AlertProvider = ({ children }: AlertProviderProps) => {\n const { queue, updateQueue, clearQueue } = useQueue({\n initialValues: []\n });\n\n /**\n * @description Display an alert.\n *\n * @param {Object} alertConfig\n * @param {'error' | 'warning' | 'info' | 'success'} alertConfig.alertType\n * @param {ReactNode} alertConfig.content - Message to display in the the content of the Alert Component.\n * @param {string} [alertConfig.containerId=\"base\"] - It's used to identify which `AlertContainer` the alert is associated to.\n * @param {string | number} [alertConfig.id] - Optional; by default id is randomly generated. Used to update or close alert.\n * @param {string} [alertConfig.className] - The className passed to Alert component.\n * @param {boolean} [alertConfig.autoDismiss=false] - Determine if alert will auto dismiss/close.\n * @param {number} [alertConfig.autoDismissDelay=8000] - Delay in ms that alert will auto dismiss.\n * @param {'left' | 'center' | 'right'} [alertConfig.contentPosition=\"left\"] - Position to align content inside of alert container.\n * @param {boolean} [alertConfig.hideCloseButton=false] - Hides the close button, alert can only be closed programmatically.\n * @param {boolean} [alertConfig.hideIcon=false] - Display or hide alert icon.\n * @param {number} [alertConfig.iconSize=32] - The Alert's SVG icon's width and height.\n * @param {Function} [alertConfig.onClose] - Callback fn; called when alert closes.\n *\n * @return {string} - Alert ID\n */\n const showAlert = useCallback(\n (alertConfig: AlertConfig) => {\n const id = alertConfig.id ?? generateRandomId();\n const containerId = alertConfig.containerId ?? 'base';\n\n updateQueue((alerts) => {\n const hasAlert =\n alertConfig?.id &&\n alerts.some((alert) => alert.id === alertConfig.id);\n // Check if alert exist in queue.\n // If true then return hasAlerts\n // Else add/append alert to queue.\n if (hasAlert) {\n return alerts;\n }\n\n return [...alerts, { ...alertConfig, id, containerId }];\n });\n\n return `${id}`;\n },\n [updateQueue]\n );\n\n /**\n * @description Hide an alert by id.\n *\n * @param {string} id - Unique id to hide/remove alert.\n *\n * @return {boolean}\n * */\n const hideAlert = useCallback(\n (id) =>\n updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.id === id) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n ),\n [updateQueue]\n );\n\n /**\n * @description Clears/remove all alerts.\n * If no `containerId` provided then removes ALL alerts. Else if `containerId`\n * provided then clears alerts for specific container when working with multiple containers.\n *\n * @param {string} [containerId] - Optional; Clear alerts for specific container when working with multiple containers.\n *\n * @return {boolean}\n * */\n const clearAlerts = useCallback(\n (containerId) => {\n // If containerId is passed then remove all alerts for specific container\n if (containerId) {\n return updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.containerId === containerId) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n );\n }\n // Else clear entire queue\n return clearQueue();\n },\n [updateQueue, clearQueue]\n );\n\n const providerState = useMemo(\n () => ({\n alerts: queue,\n showAlert,\n hideAlert,\n clearAlerts\n }),\n [queue, showAlert, hideAlert, clearAlerts]\n );\n\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\nimport { AlertConfig, useAlertContext } from './AlertContext';\nimport Alert from '../Alert';\nimport styles from './AlertContainer.module.scss';\n\nconst defaultTranslateAlertInfoText = (\n totalAlertsShown: number,\n totalAlerts: number\n) => `Showing ${totalAlertsShown} of ${totalAlerts} alerts`;\n\ninterface AlertContainerProps {\n containerId?: string;\n limit?: number;\n shouldShowAlertInfoText?: boolean;\n translateAlertInfoText?: typeof defaultTranslateAlertInfoText;\n}\n\nexport const AlertContainer = ({\n containerId = 'base',\n limit,\n shouldShowAlertInfoText = true,\n translateAlertInfoText = defaultTranslateAlertInfoText\n}: AlertContainerProps) => {\n const { alerts, hideAlert } = useAlertContext();\n\n const handleOnClose = (id?: string) => {\n if (id) {\n hideAlert(id);\n }\n };\n\n const filterLimit = (_: unknown, index: number) => !limit || index < limit;\n const filterContainer = (alert: AlertConfig) =>\n alert?.containerId === containerId;\n\n const totalAlerts = alerts.filter(filterContainer).length;\n const totalAlertsShown = alerts\n .filter(filterContainer)\n .filter(filterLimit).length;\n\n return (\n <>\n {alerts\n .filter(filterContainer)\n .filter(filterLimit)\n .map(\n ({\n alertType,\n id,\n content,\n containerId: containerIdProp,\n ...rest\n }) => (\n handleOnClose(id)}\n >\n {content}\n \n )\n )}\n {shouldShowAlertInfoText && totalAlerts > totalAlertsShown && (\n \n
\n {translateAlertInfoText(totalAlertsShown, totalAlerts)}\n
\n \n )}\n \n );\n};\n\nexport default AlertContainer;\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"Input--input--19CTT\"};","import React, { forwardRef } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport styles from './Input.module.scss';\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\n\nexport const Input = forwardRef(\n ({ className, ...props }, ref) => (\n \n )\n);\n\nexport default Input;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsVisibleDisabledNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsVisibleDisabledNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsVisibleDisabledNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsVisibleDisabledNormalSmall;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsVisibleNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsVisibleNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsVisibleNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsVisibleNormalSmall;\n","// extracted by mini-css-extract-plugin\nexport default {\"passwordInput\":\"Input--passwordInput--xTJYp\",\"showPasswordButton\":\"Input--showPasswordButton--9CSLK\"};","import React, { forwardRef, useState } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport ActionsVisibleDisabledNormalSmall from '@strava/icons/ActionsVisibleDisabledNormalSmall';\nimport ActionsVisibleNormalSmall from '@strava/icons/ActionsVisibleNormalSmall';\nimport VisuallyHidden from '../VisuallyHidden';\nimport Input from '.';\n\nimport styles from './PasswordInput.module.scss';\n\nexport type PasswordInputProps = React.ComponentPropsWithoutRef<'input'> & {\n showPasswordText: string; // translated text for accessibility. Should inform users that clicking show password button will display the password on the screen\n hidePasswordText: string;\n};\n\nconst PasswordInput = forwardRef(\n ({ showPasswordText, hidePasswordText, className, ...props }, ref) => {\n const [passwordIsVisible, setPasswordIsVisible] = useState(false);\n\n return (\n
\n \n setPasswordIsVisible((prev) => !prev)}\n className={styles.showPasswordButton}\n type=\"button\"\n role=\"switch\"\n aria-checked={passwordIsVisible}\n title={passwordIsVisible ? hidePasswordText : showPasswordText}\n >\n {passwordIsVisible ? (\n \n ) : (\n \n )}\n \n {passwordIsVisible ? hidePasswordText : showPasswordText}\n \n \n
\n );\n }\n);\n\nexport default PasswordInput;\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"RegistrationInput--input--AQh-V\",\"label\":\"RegistrationInput--label--0tXB5\",\"light\":\"RegistrationInput--light--xymPQ\",\"textInput\":\"RegistrationInput--textInput--zLJDS\",\"message\":\"RegistrationInput--message--zQeRu\",\"error\":\"RegistrationInput--error--40No1\"};","import React, { forwardRef } from 'react';\nimport Input, { PasswordInput } from '@strava/ui/Input';\nimport styles from './RegistrationInput.module.scss';\nimport { ThemeTypes } from '@strava/authentication-ui';\nimport clsx from '@strava/ui/clsx';\n\ntype RegistrationInputProps = React.ComponentPropsWithoutRef<'input'> &\n (\n | {\n // type just has to not be 'password' or string for the conditional to work\n type: 'email' | 'text';\n hidePasswordText?: string;\n showPasswordText?: string;\n }\n | {\n type: 'password';\n hidePasswordText: string;\n showPasswordText: string;\n }\n ) & {\n label: string;\n inputMessage?: string | null;\n errorMessage?: string | null;\n errorMessageTestId?: string;\n theme?: ThemeTypes;\n };\n\nexport const RegistrationInput = forwardRef<\n HTMLInputElement,\n RegistrationInputProps\n>(\n (\n {\n label,\n id,\n type,\n inputMessage,\n errorMessage,\n errorMessageTestId,\n hidePasswordText,\n showPasswordText,\n theme = 'dark',\n ...props\n },\n ref\n ) => (\n
\n \n {type === 'password' ? (\n \n ) : (\n \n )}\n {inputMessage && !errorMessage && (\n

{inputMessage}

\n )}\n {errorMessage && (\n
\n {errorMessage}\n
\n )}\n
\n )\n);\n\nexport default RegistrationInput;\n","// extracted by mini-css-extract-plugin\nexport default {\"emailCaption\":\"EmailRegistrationForm--emailCaption--Ccjzm\",\"submitButton\":\"EmailRegistrationForm--submitButton--4ptar\"};","import React, { useState, useRef } from 'react';\nimport Button from '@strava/ui/Button';\nimport * as EmailValidator from 'email-validator';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { isNil } from 'lodash-es';\nimport Spinner from '@strava/ui/Spinner';\nimport { AlertStatus, AlertStatusType } from '@strava/ui/Alert';\nimport {\n elemAttrForAnalytics,\n EMAIL,\n ThemeTypes\n} from '@strava/authentication-ui';\nimport RegistrationInput from '../RegistrationInput';\nimport {\n submitFormData,\n isAlreadyRegisteredEmail\n} from './email-registration-api';\n\nimport {\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\n\nimport styles from './EmailRegistrationForm.module.scss';\n\nconst i18nPrefix = 'authentication_ui.email_registration_form';\n\n// these props are passed into the parent component from the active\nexport interface EmailRegistrationFormProps {\n reCaptchaSiteKey: string | null;\n clubId?: number;\n isPremium: boolean;\n challengeId?: number;\n autoJoinChallenge?: boolean;\n honeyPot: string;\n plan?: string;\n formAuthToken?: string;\n}\n\nexport type AlertTypes = {\n severity: AlertStatusType;\n message: string;\n} | null;\n\ntype FormInputTypes = {\n email: string;\n password: string;\n honeyPot: string;\n};\n\ntype EmailValidationStateTypes = {\n message: string;\n isExistingEmail: boolean;\n isValidEmail: boolean;\n};\n\nexport type AnalyticsFieldsTypes = {\n action: string;\n element?: string;\n properties?: Record;\n};\n\nconst EmailRegistrationForm = ({\n authorizationUrl,\n reCaptchaSiteKey,\n honeyPot,\n isPremium,\n clubId,\n plan,\n challengeId,\n autoJoinChallenge,\n formAuthToken,\n setAlert,\n track,\n className,\n theme = 'dark',\n idPrefix\n}: EmailRegistrationFormProps & {\n // these props are passed in from the parent component\n authorizationUrl: string; // this url generally still comes from active\n setAlert: (obj: AlertTypes) => void;\n track: (fields: AnalyticsFieldsTypes) => void;\n className?: string;\n idPrefix: string;\n theme?: ThemeTypes;\n}) => {\n const [formInput, setFormInput] = useState({\n email: '',\n password: '',\n honeyPot: '' // if this field gets filled out, user is probably a bot\n });\n const [passwordErrorMsg, setPasswordErrMsg] = useState(null);\n const [emailValidationState, setEmailValidationState] =\n useState(null);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const emailInput = useRef(null);\n const passwordInput = useRef(null);\n const recaptchaRef = useRef(null);\n\n const useRecaptcha = !!reCaptchaSiteKey;\n\n const { logError } = useStravaErrorLogging();\n const { t } = useStravaTranslations();\n\n const getRecaptchaToken = async () => {\n if (useRecaptcha) {\n return (await recaptchaRef?.current?.executeAsync()) ?? '';\n }\n return '';\n };\n\n const handleEmailFormSubmit = async () => {\n const recaptchaToken = await getRecaptchaToken();\n\n const element = elemAttrForAnalytics(EMAIL);\n const { email, password, honeyPot } = formInput;\n\n const formData = new FormData();\n formData.append('web_registration_form', 'true');\n formData.append('email', email);\n formData.append('password', password);\n formData.append('g-recaptcha-response', recaptchaToken);\n formData.append('checkbox_agreed_to_terms', 'on');\n formData.append(honeyPot, honeyPot);\n formData.append('plan', String(plan));\n formData.append('authenticity_token', String(formAuthToken));\n\n if (isPremium) {\n formData.append('premium', 'true');\n }\n if (!isNil(clubId)) {\n formData.append('club_id', String(clubId));\n }\n if (!isNil(challengeId)) {\n formData.append('challenge_id', String(challengeId));\n }\n if (!isNil(autoJoinChallenge)) {\n formData.append('auto_join_challenge', String(autoJoinChallenge));\n }\n\n try {\n const response = await submitFormData({\n formData,\n url: authorizationUrl,\n logError\n });\n\n if ('error' in response) {\n // join request failed server-side validations,\n // flash message is populated and shown if an error occurred\n setAlert({\n severity: AlertStatus.ERROR,\n message: response.error\n });\n setIsProcessing(false); // let user try again\n } else {\n const { pathType, load } = response;\n track({\n action: 'redirect',\n element,\n properties: {\n path_type: pathType,\n redirect_url: load\n }\n });\n\n // navigate to onboarding flow if no errors were encountered\n window.location.href = load;\n }\n } catch (error) {\n logError(error);\n\n // generic \"something went wrong\" alert\n setAlert({\n severity: AlertStatus.ERROR,\n message: t(`${i18nPrefix}.error_message`)\n });\n setIsProcessing(false); // let user try again\n }\n };\n\n /**\n * Validate athlete email -\n * 1 - value should be provided (required)\n * 2 - valid email address should be entered (eg. should have @)\n * 3 - email address should not be already registered on strava\n *\n * @returns {Object} result\n * @returns {boolean} result.isValidEmail - true when the email has passed all validation criteria\n * @returns {string} result.isExistingEmail - true when the email is already registered on strava\n * @returns {string} result.message - string message to display to athlete when an error occurs\n */\n const validateEmail = async () => {\n const { email } = formInput;\n if (emailValidationState) {\n // avoid validating email if there is already an error that is not addressed by the athlete yet\n // this prevents making an unnecessary api call to check if email is already registered (see #isAlreadyRegisteredEmail)\n return emailValidationState;\n } else {\n let isValidEmail = true;\n let isExistingEmail = false;\n let message = null;\n\n if (!(email && email.length > 0)) {\n message = t(`${i18nPrefix}.email_required`);\n isValidEmail = false;\n } else if (!EmailValidator.validate(email)) {\n message = t(`${i18nPrefix}.email_invalid`);\n isValidEmail = false;\n } else {\n try {\n const isUniqueEmail = await isAlreadyRegisteredEmail(email);\n if (!isUniqueEmail) {\n message = t(`${i18nPrefix}.email_taken`);\n isExistingEmail = true;\n }\n } catch (error) {\n logError(error);\n isValidEmail = false;\n\n // generic \"something went wrong\" alert\n setAlert({\n severity: AlertStatus.ERROR,\n message: t(`${i18nPrefix}.error_message`)\n });\n }\n }\n setEmailValidationState({ isExistingEmail, isValidEmail, message });\n return { message, isValidEmail, isExistingEmail };\n }\n };\n\n /**\n * Validates athlete password\n * - value should be provided (required)\n * - max length of 40 chars\n * - min length of 8 chars\n *\n * @returns {boolean} result true when the password is valid\n */\n const validatePassword = () => {\n const { password } = formInput;\n\n if (!passwordErrorMsg) {\n // avoid validating email if there is already an error that is not addressed by the athlete yet\n let isValidPassword = true;\n let passwordValidationMsg = null;\n if (!(password && password.length > 0)) {\n passwordValidationMsg = t(`${i18nPrefix}.password_required`);\n isValidPassword = false;\n } else if (password.length > 40) {\n passwordValidationMsg = t(`${i18nPrefix}.password_max_length`);\n isValidPassword = false;\n } else if (password.length < 8) {\n passwordValidationMsg = t(`${i18nPrefix}.password_min_length`);\n isValidPassword = false;\n }\n setPasswordErrMsg(passwordValidationMsg);\n return isValidPassword;\n }\n return false;\n };\n\n const validateForm = async () => {\n return {\n ...(await validateEmail()),\n isValidPassword: validatePassword()\n };\n };\n\n /**\n * Actions to perform when a user hits the \"sign up\" button (account registration using email).\n * - validate user input (email and password)\n * - submit form if input is valid\n * - focus on invalid inputs if input is invalid\n */\n const handleFormSubmission = async (\n event: React.FormEvent\n ) => {\n event.preventDefault();\n setIsProcessing(true); // prevent impatient submit clicks\n\n const { isValidEmail, isValidPassword, isExistingEmail } =\n await validateForm();\n\n track({\n action: 'click',\n element: 'signup',\n properties: {\n is_valid_email: isValidEmail,\n is_valid_password: isValidPassword,\n is_existing_email: isExistingEmail\n }\n });\n\n if (isValidEmail && !isExistingEmail && isValidPassword) {\n handleEmailFormSubmit();\n } else {\n setIsProcessing(false); // let user try again\n\n if (recaptchaRef.current) {\n recaptchaRef.current.reset();\n }\n if (!isValidPassword) {\n passwordInput?.current?.focus();\n }\n // prioritize focus on email input if both password and email inputs are invalid\n if (!isValidEmail || isExistingEmail) {\n emailInput?.current?.focus();\n }\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent) => {\n const { target } = event;\n const { name } = target;\n\n // save honeyPot input as 'honeyPot' instead of whatever the value of honeyPot is\n // (server determines honeyPot value)\n setFormInput((prev) => {\n return { ...prev, [name === honeyPot ? 'honeyPot' : name]: target.value };\n });\n\n // clear input specific errors\n if (name === 'email' && emailValidationState?.message) {\n setEmailValidationState(null);\n } else if (passwordErrorMsg) {\n setPasswordErrMsg(null);\n }\n // clear alerts on all input changes\n setAlert(null);\n };\n\n return (\n \n \n\n \n\n {/**\n * Honeypot input is hidden to real users but visible to bots.\n * It should be a value that seems legit to bots but one we don't actually use/care about.\n * If the input is populated, we know it's a bot. */}\n
\n \n \n
\n\n {useRecaptcha && (\n \n )}\n\n \n {isProcessing ? : t(`${i18nPrefix}.sign_up`)}\n \n \n );\n};\n\nexport default EmailRegistrationForm;\n","import apiClient from '@strava/api/lib/axios-client';\n\ntype SubmitFormDataSuccessResponse = {\n success: boolean;\n pathType: string;\n load: string;\n};\n\ntype SubmitFormDataErrorResponse = {\n error: string;\n};\n\ntype SubmitFormDataResponseType =\n | SubmitFormDataSuccessResponse\n | SubmitFormDataErrorResponse;\n\nexport const submitFormData = async ({\n formData,\n url,\n logError\n}: {\n formData: FormData;\n url: string;\n logError: (s: string | unknown) => void;\n}): Promise => {\n return new Promise((resolve, reject) => {\n apiClient({\n options: {\n headers: { 'Content-Type': 'multipart/form-data' }\n }\n })\n .post(url, formData)\n .then((response: { data: SubmitFormDataResponseType }) => {\n resolve(response.data);\n })\n .catch((error: unknown) => {\n logError(error);\n reject(error);\n });\n });\n};\n\nexport const isAlreadyRegisteredEmail = async (email: string) => {\n return new Promise((resolve, reject) => {\n apiClient()\n .get('/athletes/email_unique', { params: { email } })\n .then(({ data }: { data: boolean }) => {\n resolve(data);\n })\n .catch((error: unknown) => {\n reject(error);\n });\n });\n};\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCancelCircleHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCancelCircleHighlightedMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCancelCircleHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCancelCircleHighlightedMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCheckCircleOnMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCheckCircleOnMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCheckCircleOnMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCheckCircleOnMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgNavigationWarningHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgNavigationWarningHighlightedMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgNavigationWarningHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgNavigationWarningHighlightedMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgNavigationInformationNormalMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgNavigationInformationNormalMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgNavigationInformationNormalMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgNavigationInformationNormalMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCancelNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCancelNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCancelNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCancelNormalSmall;\n","import { useRef, useEffect } from 'react';\n\n/**\n * Declarative setInterval React hook.\n *\n * `useInterval` uses the same API as setInterval, but the arguments of this hook is \"dynamic\".\n * Set your `callback` function as the first argument and the `delay` as the second argument.\n * When passing `null` or `undefined` to the `delay` arg then it will stop/pause the interval.\n *\n * For implementation details explanation, why to use useInterval hook, and an example see Dan Abramov's blog post\n * 👀: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n * */\nexport const useInterval = (callback, delay) => {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n // If no delay then pause/stop the interval.\n // Delay of 0 is valid delay.\n if ((!delay && delay !== 0) || delay < 0) {\n return;\n }\n\n const id = setInterval(() => savedCallback.current(), delay);\n // eslint-disable-next-line consistent-return\n return () => clearInterval(id);\n }, [delay]);\n};\n\nexport default useInterval;\n","import React, { forwardRef } from 'react';\n\ntype VisuallyHiddenProps = React.ComponentPropsWithoutRef<'span'>;\n\n// visually hidden styling comes from https://www.a11yproject.com/posts/how-to-hide-content/\nconst VisuallyHidden = forwardRef(\n ({ style, ...props }, ref) => {\n return (\n \n );\n }\n);\n\nexport default VisuallyHidden;\n","// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"Alert--alert--mHJG0\",\"alertInner\":\"Alert--alertInner--Cohht\",\"hasError\":\"Alert--hasError--6H8nL\",\"buttonError\":\"Alert--buttonError--JNCju\",\"hasWarning\":\"Alert--hasWarning--XMcB+\",\"buttonWarning\":\"Alert--buttonWarning--B8+01\",\"hasSuccess\":\"Alert--hasSuccess--HEVyx\",\"buttonSuccess\":\"Alert--buttonSuccess--8cDF1\",\"hasInfo\":\"Alert--hasInfo--cIXeI\",\"buttonInfo\":\"Alert--buttonInfo--3W2YL\",\"alertContent\":\"Alert--alertContent--Ady-v\",\"alignLeft\":\"Alert--alignLeft--TWc3-\",\"alignCenter\":\"Alert--alignCenter--Wjvd+\",\"alignRight\":\"Alert--alignRight--GltzN\",\"indicatorIcon\":\"Alert--indicatorIcon--mcHuS\",\"closeButtonContainer\":\"Alert--closeButtonContainer--0bGld\",\"button\":\"Alert--button--j9wSm\",\"autoDismissBar\":\"Alert--autoDismissBar--mBh+B\",\"countdown\":\"Alert--countdown--4hdDW\",\"fadeIn\":\"Alert--fadeIn--m0c6K\",\"fadeOut\":\"Alert--fadeOut--V2zHS\",\"enterFadeOut\":\"Alert--enterFadeOut--ZHCGw\",\"newKudo\":\"Alert--newKudo--xwJ9a\"};","import React, { ComponentPropsWithoutRef, ReactNode, useState } from 'react';\n// import ReachAlert from '@reach/alert';\nimport {\n ActionsCancelCircleHighlightedMedium as ErrorIcon,\n ActionsCheckCircleOnMedium as SuccessIcon,\n NavigationWarningHighlightedMedium as WarningIcon,\n NavigationInformationNormalMedium as InfoIcon,\n ActionsCancelNormalSmall as CancelIcon\n} from '@strava/icons';\nimport { useInterval } from '@strava/react-hooks';\nimport { isTest } from '@strava/utils';\nimport clsx from '../clsx';\nimport VisuallyHidden from '../VisuallyHidden';\nimport styles from './Alert.module.scss';\n\nexport const AlertStatus = {\n ERROR: 'error',\n SUCCESS: 'success',\n WARNING: 'warning',\n INFO: 'info'\n} as const;\n\nexport type AlertStatusType = (typeof AlertStatus)[keyof typeof AlertStatus];\n\nexport type AlertStyleType =\n | 'hasError'\n | 'hasSuccess'\n | 'hasWarning'\n | 'hasInfo';\nexport type AlertButtonStyleType =\n | 'buttonError'\n | 'buttonSuccess'\n | 'buttonWarning'\n | 'buttonInfo';\n\nconst ALERT_DELAY = 8000;\n\nconst getAlertDetails = ({\n type,\n iconSize\n}: {\n type: AlertStatusType;\n iconSize: number;\n}): {\n indicatorIcon: ReactNode;\n messageType: AlertStatusType;\n alertStyle: AlertStyleType;\n buttonStyle: AlertButtonStyleType;\n} =>\n ({\n [AlertStatus.ERROR]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.ERROR,\n alertStyle: 'hasError' as const,\n buttonStyle: 'buttonError' as const\n },\n [AlertStatus.SUCCESS]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.SUCCESS,\n alertStyle: 'hasSuccess' as const,\n buttonStyle: 'buttonSuccess' as const\n },\n [AlertStatus.WARNING]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.WARNING,\n alertStyle: 'hasWarning' as const,\n buttonStyle: 'buttonWarning' as const\n },\n [AlertStatus.INFO]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.INFO,\n alertStyle: 'hasInfo' as const,\n buttonStyle: 'buttonInfo' as const\n }\n }[type]);\n\nconst fadeStyles = {\n enter: isTest() ? '' : 'fadeIn',\n exit: isTest() ? '' : 'fadeOut'\n};\n\nexport interface AlertProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n alertType?: AlertStatusType;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n className?: string;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport const Alert = ({\n children,\n className,\n alertType = AlertStatus.ERROR,\n autoDismiss = false,\n autoDismissDelay = ALERT_DELAY,\n contentPosition = 'left',\n hideCloseButton = false,\n hideIcon = true,\n iconSize = 32,\n onClose = () => {},\n ...options\n}: AlertProps) => {\n const { indicatorIcon, messageType, alertStyle, buttonStyle } =\n getAlertDetails({ type: alertType, iconSize });\n const [fadeStyle, setFadeStyle] = useState(fadeStyles.enter);\n\n const handleOnClose = async () => {\n setFadeStyle(fadeStyles.exit);\n // eslint-disable-next-line no-unused-expressions\n !isTest() && (await new Promise((resolve) => setTimeout(resolve, 0)));\n onClose();\n };\n\n useInterval(\n () => {\n handleOnClose();\n },\n autoDismiss ? autoDismissDelay : null\n );\n\n return (\n \n
\n {/* Icon */}\n {!hideIcon && (\n
{indicatorIcon}
\n )}\n\n {/* Content */}\n \n {messageType}: \n
{children}
\n
\n\n {/* Close Button */}\n {!hideCloseButton && (\n
\n \n \n \n
\n )}\n \n\n {/* Auto Dismiss Progress */}\n {autoDismiss && (\n \n
\n
\n )}\n \n );\n};\n\nexport default Alert;\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo\n} from 'react';\nimport { useQueue } from '@strava/react-hooks';\nimport { generateRandomId } from '@strava/utils';\nimport { AlertStatusType } from '../Alert';\n\nexport interface AlertConfig {\n alertType: AlertStatusType;\n content: ReactNode;\n containerId?: string;\n id?: string;\n className?: string;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport interface AlertState {\n alerts: AlertConfig[];\n showAlert: (config: AlertConfig) => string;\n hideAlert: (id: string) => void;\n clearAlerts: (containerId?: string) => void;\n}\n\nconst AlertContext = createContext(undefined);\nAlertContext.displayName = 'AlertContext';\n\nexport const useAlertContext = () => {\n const context = useContext(AlertContext);\n\n // Fail fast if useAlertContext hook is used outside the Provider.\n if (!context) {\n throw new Error(`useAlertContext must be used within the AlertProvider`);\n }\n\n return context;\n};\n\ninterface AlertProviderProps {\n children: ReactNode;\n}\n\nexport const AlertProvider = ({ children }: AlertProviderProps) => {\n const { queue, updateQueue, clearQueue } = useQueue({\n initialValues: []\n });\n\n /**\n * @description Display an alert.\n *\n * @param {Object} alertConfig\n * @param {'error' | 'warning' | 'info' | 'success'} alertConfig.alertType\n * @param {ReactNode} alertConfig.content - Message to display in the the content of the Alert Component.\n * @param {string} [alertConfig.containerId=\"base\"] - It's used to identify which `AlertContainer` the alert is associated to.\n * @param {string | number} [alertConfig.id] - Optional; by default id is randomly generated. Used to update or close alert.\n * @param {string} [alertConfig.className] - The className passed to Alert component.\n * @param {boolean} [alertConfig.autoDismiss=false] - Determine if alert will auto dismiss/close.\n * @param {number} [alertConfig.autoDismissDelay=8000] - Delay in ms that alert will auto dismiss.\n * @param {'left' | 'center' | 'right'} [alertConfig.contentPosition=\"left\"] - Position to align content inside of alert container.\n * @param {boolean} [alertConfig.hideCloseButton=false] - Hides the close button, alert can only be closed programmatically.\n * @param {boolean} [alertConfig.hideIcon=false] - Display or hide alert icon.\n * @param {number} [alertConfig.iconSize=32] - The Alert's SVG icon's width and height.\n * @param {Function} [alertConfig.onClose] - Callback fn; called when alert closes.\n *\n * @return {string} - Alert ID\n */\n const showAlert = useCallback(\n (alertConfig: AlertConfig) => {\n const id = alertConfig.id ?? generateRandomId();\n const containerId = alertConfig.containerId ?? 'base';\n\n updateQueue((alerts) => {\n const hasAlert =\n alertConfig?.id &&\n alerts.some((alert) => alert.id === alertConfig.id);\n // Check if alert exist in queue.\n // If true then return hasAlerts\n // Else add/append alert to queue.\n if (hasAlert) {\n return alerts;\n }\n\n return [...alerts, { ...alertConfig, id, containerId }];\n });\n\n return `${id}`;\n },\n [updateQueue]\n );\n\n /**\n * @description Hide an alert by id.\n *\n * @param {string} id - Unique id to hide/remove alert.\n *\n * @return {boolean}\n * */\n const hideAlert = useCallback(\n (id) =>\n updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.id === id) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n ),\n [updateQueue]\n );\n\n /**\n * @description Clears/remove all alerts.\n * If no `containerId` provided then removes ALL alerts. Else if `containerId`\n * provided then clears alerts for specific container when working with multiple containers.\n *\n * @param {string} [containerId] - Optional; Clear alerts for specific container when working with multiple containers.\n *\n * @return {boolean}\n * */\n const clearAlerts = useCallback(\n (containerId) => {\n // If containerId is passed then remove all alerts for specific container\n if (containerId) {\n return updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.containerId === containerId) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n );\n }\n // Else clear entire queue\n return clearQueue();\n },\n [updateQueue, clearQueue]\n );\n\n const providerState = useMemo(\n () => ({\n alerts: queue,\n showAlert,\n hideAlert,\n clearAlerts\n }),\n [queue, showAlert, hideAlert, clearAlerts]\n );\n\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\nimport { AlertConfig, useAlertContext } from './AlertContext';\nimport Alert from '../Alert';\nimport styles from './AlertContainer.module.scss';\n\nconst defaultTranslateAlertInfoText = (\n totalAlertsShown: number,\n totalAlerts: number\n) => `Showing ${totalAlertsShown} of ${totalAlerts} alerts`;\n\ninterface AlertContainerProps {\n containerId?: string;\n limit?: number;\n shouldShowAlertInfoText?: boolean;\n translateAlertInfoText?: typeof defaultTranslateAlertInfoText;\n}\n\nexport const AlertContainer = ({\n containerId = 'base',\n limit,\n shouldShowAlertInfoText = true,\n translateAlertInfoText = defaultTranslateAlertInfoText\n}: AlertContainerProps) => {\n const { alerts, hideAlert } = useAlertContext();\n\n const handleOnClose = (id?: string) => {\n if (id) {\n hideAlert(id);\n }\n };\n\n const filterLimit = (_: unknown, index: number) => !limit || index < limit;\n const filterContainer = (alert: AlertConfig) =>\n alert?.containerId === containerId;\n\n const totalAlerts = alerts.filter(filterContainer).length;\n const totalAlertsShown = alerts\n .filter(filterContainer)\n .filter(filterLimit).length;\n\n return (\n <>\n {alerts\n .filter(filterContainer)\n .filter(filterLimit)\n .map(\n ({\n alertType,\n id,\n content,\n containerId: containerIdProp,\n ...rest\n }) => (\n handleOnClose(id)}\n >\n {content}\n \n )\n )}\n {shouldShowAlertInfoText && totalAlerts > totalAlertsShown && (\n \n
\n {translateAlertInfoText(totalAlertsShown, totalAlerts)}\n
\n \n )}\n \n );\n};\n\nexport default AlertContainer;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import toString from './toString.js';\n\n/**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\nfunction replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n}\n\nexport default replace;\n","import { replace } from 'lodash-es';\n\nexport type LogError = (e: Error | string) => void;\n\ndeclare global {\n interface Window {\n AppleID: {\n stravaInit: boolean;\n auth: {\n init: (params: {\n clientId: string;\n scope: string;\n redirectURI: string;\n state: string;\n }) => void;\n signIn: () => void;\n };\n };\n fbAsyncInit: () => void;\n FB: {\n init: (params: {\n appId: string;\n xfbml: boolean;\n version: string;\n status: boolean;\n cookie: boolean;\n }) => void;\n };\n Strava: {\n fbInitialized: boolean;\n };\n }\n}\n\nconst appendScriptToBody = ({\n script,\n name,\n logError\n}: {\n script: Node;\n name: string;\n logError: LogError;\n}) => {\n if (document.querySelector('body')) {\n document.querySelector('body')?.appendChild(script);\n } else {\n const e = new Error(`Failed to inject ${name} script`);\n logError(e);\n }\n};\n\n// this injects window.google and not the legacy window.gapi JS api\nexport const injectGoogleScript = ({\n callback,\n logError\n}: {\n callback: () => void;\n logError: LogError;\n}) => {\n if (!window.google) {\n const script = document.createElement('script');\n script.src = 'https://accounts.google.com/gsi/client';\n script.async = true;\n script.onload = callback;\n script.id = 'google-client-script';\n appendScriptToBody({ script, name: 'google gsi', logError });\n } else {\n callback();\n }\n};\n\nexport const injectAppleScript = ({\n logError,\n locale = 'en_US'\n}: {\n logError: LogError;\n locale?: string;\n}) => {\n if (!window.AppleID) {\n const script = window.document.createElement('script');\n const formattedLocale = replace(locale, '-', '_');\n script.src = `https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/${formattedLocale}/appleid.auth.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'apple', logError });\n }\n};\n\nexport const injectFacebookScript = ({\n logError,\n appId,\n version,\n callback,\n locale = 'en_US'\n}: {\n logError: LogError;\n appId: string;\n version: string;\n callback: () => void;\n locale?: string;\n}) => {\n // make sure haml FB injection has not already injected script and also make sure nothing else\n // has injected FB script\n if (!window.Strava?.fbInitialized && !window.FB) {\n window.fbAsyncInit = () => {\n // ref - https://developers.facebook.com/docs/javascript/reference/FB.init/v13.0\n window.FB.init({\n appId,\n xfbml: true,\n version,\n status: true,\n cookie: true\n });\n callback();\n };\n\n // facebook uses format ll_CC - see https://developers.facebook.com/docs/javascript/internationalization\n const formattedLocale = replace(locale, '-', '_');\n\n const script = window.document.createElement('script');\n script.src = `https://connect.facebook.net/${formattedLocale}/sdk.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'facebook-jssdk', logError });\n } else {\n callback();\n }\n};\n","import { useEffect } from 'react';\nimport { injectAppleScript, LogError } from './externalSocialPartners';\n\n/**\n *\n * @param {String} state https://developer.apple.com/documentation/sign_in_with_apple/clientconfigi/3230956-state\n */\nexport const useApple = (state: string, logError: LogError) => {\n useEffect(() => {\n injectAppleScript({ logError });\n }, [logError]);\n\n const signin = () => {\n if (!window.AppleID.stravaInit) {\n window.AppleID.auth.init({\n clientId: 'com.strava.app.sign.in',\n scope: 'name email',\n redirectURI: 'https://www.strava.com/o_auth/apple',\n state\n });\n window.AppleID.stravaInit = true;\n }\n window.AppleID.auth.signIn();\n };\n\n return { signin };\n};\n\nexport default useApple;\n","// extracted by mini-css-extract-plugin\nexport default {\"alreadyAMember\":\"src--alreadyAMember--QUWuY\"};","import React, { useMemo, useState, useCallback } from 'react';\nimport {\n AccountAuthButton,\n AlertTypes,\n AuthButtonVariantTypes,\n DisclaimerText,\n EmailRegistrationForm,\n EmailRegistrationFormProps,\n OrDivider\n} from '@strava/authentication-ui';\n\nimport {\n useStravaTranslations,\n useStravaAnalytics,\n useStravaErrorLogging\n} from '@strava/container-context';\nimport { Alert, AlertStatus } from '@strava/ui/Alert';\nimport { useApple } from '@strava/utils';\nimport styles from './LohRegistrationPanel.module.scss';\n\nexport enum SignupOption {\n apple = 'apple',\n email = 'email',\n facebook = 'facebook',\n google = 'google'\n}\n\nexport interface LohRegistrationPanelProps extends EmailRegistrationFormProps {\n authorizationUrls: {\n [SignupOption.google]: string;\n [SignupOption.facebook]: string;\n };\n config: {\n appleEnabled: boolean;\n appleState: string;\n };\n flashMessage?: string;\n}\n\nconst I18N_PREFIX = 'strava.landing_page';\n\nconst theme = 'light';\n\nconst LohRegistrationPanel = ({\n authorizationUrls,\n config,\n flashMessage,\n reCaptchaSiteKey,\n honeyPot,\n isPremium,\n formAuthToken\n}: LohRegistrationPanelProps) => {\n const [alert, setAlert] = useState(\n flashMessage ? { severity: AlertStatus.ERROR, message: flashMessage } : null\n );\n\n const { logError } = useStravaErrorLogging();\n\n const { t: _t } = useStravaTranslations();\n const { track: _track } = useStravaAnalytics();\n const { signin: appleSignin } = useApple(config.appleState, logError);\n\n const t = useMemo(\n () => (key: string, params?: object) =>\n _t(`${I18N_PREFIX}.${key}`, { ...params }),\n [_t]\n );\n\n const track = useCallback(\n (fields) => {\n _track({\n category: 'onboarding',\n page: 'home',\n ...fields,\n properties: {\n ...fields.properties\n }\n });\n },\n [_track]\n );\n\n const socialAuthConfig = {\n [SignupOption.facebook]: {\n variant: 'facebook',\n enabled: true,\n authUrl: authorizationUrls[SignupOption.facebook]\n },\n [SignupOption.google]: {\n variant: 'google',\n enabled: true,\n authUrl: authorizationUrls[SignupOption.google]\n },\n [SignupOption.apple]: {\n variant: 'apple',\n enabled: config.appleEnabled,\n authUrl: '' // apple uses SDK (useApple hook) to redirect to apple auth screen\n }\n };\n\n const handleSocialBtnClick = (option: SignupOption, authUrl: string) => {\n track({\n action: 'click',\n element: `${option}_signup`\n });\n\n if (option === SignupOption.apple) {\n // apple uses SDK (useApple hook) to redirect to apple auth screen\n appleSignin();\n } else {\n window.location.assign(authUrl);\n }\n };\n\n return (\n <>\n {alert && (\n \n {alert.message}\n \n )}\n\n {Object.entries(socialAuthConfig).map(\n ([key, { enabled, variant, authUrl }]) =>\n enabled && (\n handleSocialBtnClick(key as SignupOption, authUrl)}\n data-testid={`${key}_auth_btn`}\n >\n {t(`here_to_join.${key}_cta_v2`)}\n \n )\n )}\n\n \n\n \n\n \n

\n {t(`already_a_member`)}{' '}\n {\n track({ action: 'click', element: 'already_member_login' });\n }}\n >\n {t(`log_in`)}\n \n

\n \n );\n};\n\nexport default LohRegistrationPanel;\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n"],"names":["value","_ref","color","size","React","className","styles","clsx","style","width","height","forwardRef","ref","props","clip","clipPath","overflow","position","whiteSpace","AlertStatus","ERROR","SUCCESS","WARNING","INFO","AlertContext","createContext","undefined","displayName","type","SvgActionsVisibleDisabledNormalSmall","title","titleId","fill","xmlns","viewBox","id","d","defaultProps","propTypes","PropTypes","SvgActionsVisibleNormalSmall","showPasswordText","hidePasswordText","passwordIsVisible","setPasswordIsVisible","useState","Input","_extends","onClick","prev","role","ActionsVisibleNormalSmall","ActionsVisibleDisabledNormalSmall","VisuallyHidden","RegistrationInput","label","inputMessage","errorMessage","errorMessageTestId","theme","htmlFor","PasswordInput","i18nPrefix","authorizationUrl","reCaptchaSiteKey","honeyPot","isPremium","clubId","plan","challengeId","autoJoinChallenge","formAuthToken","setAlert","track","idPrefix","formInput","setFormInput","email","password","passwordErrorMsg","setPasswordErrMsg","emailValidationState","setEmailValidationState","isProcessing","setIsProcessing","emailInput","useRef","passwordInput","recaptchaRef","useRecaptcha","logError","useStravaErrorLogging","t","useStravaTranslations","handleEmailFormSubmit","async","recaptchaToken","current","executeAsync","getRecaptchaToken","element","elemAttrForAnalytics","EMAIL","formData","FormData","append","String","isNil","response","url","Promise","resolve","reject","apiClient","options","headers","post","then","data","catch","error","submitFormData","severity","message","pathType","load","action","properties","path_type","redirect_url","window","location","href","validateEmail","isValidEmail","isExistingEmail","length","EmailValidator","isUniqueEmail","get","params","_ref2","isAlreadyRegisteredEmail","validatePassword","isValidPassword","passwordValidationMsg","handleInputChange","event","target","name","onSubmit","preventDefault","validateForm","is_valid_email","is_valid_password","is_existing_email","reset","focus","noValidate","placeholder","onChange","onBlur","autoComplete","display","ReCAPTCHA","sitekey","Button","variant","disabled","Spinner","SvgActionsCancelCircleHighlightedMedium","fillRule","SvgActionsCheckCircleOnMedium","SvgNavigationWarningHighlightedMedium","SvgNavigationInformationNormalMedium","SvgActionsCancelNormalSmall","useInterval","callback","delay","savedCallback","useEffect","setInterval","clearInterval","ALERT_DELAY","fadeStyles","enter","isTest","exit","Alert","children","alertType","autoDismiss","autoDismissDelay","contentPosition","hideCloseButton","hideIcon","iconSize","onClose","indicatorIcon","messageType","alertStyle","buttonStyle","ErrorIcon","SuccessIcon","WarningIcon","InfoIcon","getAlertDetails","fadeStyle","setFadeStyle","handleOnClose","setTimeout","CancelIcon","global","Object","freeSelf","self","freeGlobal","Function","root","array","iteratee","index","result","Array","isArray","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","Symbol","isOwn","call","tag","unmasked","e","getRawTag","objectToString","isObjectLike","baseGetTag","symbolProto","symbolToString","baseToString","arrayMap","isSymbol","args","arguments","string","replace","appendScriptToBody","script","document","querySelector","appendChild","Error","useApple","state","_ref3","locale","AppleID","createElement","formattedLocale","src","injectAppleScript","signin","stravaInit","auth","init","clientId","scope","redirectURI","signIn","SignupOption","authorizationUrls","config","flashMessage","alert","_t","_track","useStravaAnalytics","appleSignin","appleState","useMemo","key","useCallback","fields","category","page","socialAuthConfig","facebook","enabled","authUrl","google","apple","appleEnabled","entries","map","AccountAuthButton","handleSocialBtnClick","option","assign","OrDivider","text","EmailRegistrationForm","DisclaimerText","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","module","exports","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","concat","targetStatics","sourceStatics","i","descriptor","start","end","g","reHasUnicode","RegExp","test","split","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","join","rsSymbol","reUnicode","match","camelCase","word","toLowerCase","methodName","strSymbols","chr","charAt","trailing","slice"],"sourceRoot":""}