{"version":3,"file":"js/52765-4ac35684f69314827251.js","mappings":"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","sources":["webpack://StravaModern/./app/javascript/apps/LandingPage/LandingPage.scss?a205","webpack://StravaModern/./app/javascript/apps/LandingPage/LandingPage.js","webpack://StravaModern/./app/javascript/components/StravaAlert/StravaAlert.scss?a1ac","webpack://StravaModern/./app/javascript/components/StravaAlert/StravaAlert.js","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/ButtonWrapper/index.scss?5210","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/ButtonWrapper/ButtonWrapper.js","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/FacebookButton/index.scss?deb1","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/FacebookButton/FacebookButton.js","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/GoogleButton/index.scss?1b4a","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/GoogleButton/GoogleButton.js","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/EmailButton/index.scss?46a9","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/EmailButton/EmailButton.js","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/AccountAuthButton.js","webpack://StravaModern/./app/javascript/hooks/externalSocialPartners/useApple.js","webpack://StravaModern/./app/javascript/components/shared/AccountSignupForm/index.scss?885e","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/AppleButton/index.scss?6e0c","webpack://StravaModern/./app/javascript/components/shared/AccountAuthButton/AppleButton/AppleButton.js","webpack://StravaModern/./app/javascript/components/shared/AccountSignupForm/AccountSignupForm.js","webpack://StravaModern/./app/javascript/components/shared/DisclaimerText/index.scss?253f","webpack://StravaModern/./app/javascript/components/shared/DisclaimerText/DisclaimerText.js","webpack://StravaModern/./app/javascript/components/shared/DropdownDatePicker/styles.scss?7327","webpack://StravaModern/./app/javascript/components/shared/DropdownDatePicker/DropdownDatePicker.js","webpack://StravaModern/./app/javascript/components/shared/SignupAgeGateModal/index.scss?f088","webpack://StravaModern/./app/javascript/components/shared/SignupAgeGateModal/SignupAgeGateModal.js","webpack://StravaModern/./app/javascript/components/shared/StravaDropdownSelect/StravaDropdownSelect.js","webpack://StravaModern/./app/javascript/constants/alerts/alert-types.js","webpack://StravaModern/./app/javascript/constants/appConstants.js","webpack://StravaModern/./app/javascript/externalSocialPartners.js","webpack://StravaModern/./app/javascript/utils/analytics.js","webpack://StravaModern/./app/javascript/utils/generalUtils.js","webpack://StravaModern/./app/javascript/utils/onboarding.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"main\":\"LandingPage--main--tDDqU\",\"header-image\":\"LandingPage--header-image--JoHIr\",\"headerImage\":\"LandingPage--header-image--JoHIr\",\"row\":\"LandingPage--row--lHhfd\",\"col\":\"LandingPage--col--zVQsF\"};","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from 'utils/I18n';\nimport { trackV2 } from 'utils/analytics';\nimport styles from './LandingPage.scss';\nimport AccountSignupForm from '../../components/shared/AccountSignupForm';\nimport { LANDING_PAGE } from '../../utils/onboarding';\n\nimport headerImageSmall from './images/devices-header.jpg';\nimport headerImageLarge from './images/devices-header@2x.jpg';\n\nconst LandingPage = ({\n cohort,\n locale,\n config,\n authorizationUrls,\n flashMessage\n}) => {\n useEffect(() => {\n trackV2({\n category: 'onboarding',\n page: 'home',\n action: 'screen_enter',\n properties: {\n cohort\n }\n });\n }, [cohort]);\n\n return (\n
\n
\n
\n

{I18n.t('components.landing_page.heading')}

\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n );\n};\n\nLandingPage.defaultProps = {\n flashMessage: null\n};\n\nLandingPage.propTypes = {\n cohort: PropTypes.oneOf(['control', 'variant-a']).isRequired,\n locale: PropTypes.string.isRequired,\n config: PropTypes.shape({\n appleEnabled: PropTypes.bool.isRequired,\n appleState: PropTypes.string.isRequired // https://developer.apple.com/documentation/sign_in_with_apple/clientconfigi/3230956-state\n }).isRequired,\n authorizationUrls: PropTypes.shape({\n google: PropTypes.string.isRequired,\n facebook: PropTypes.string.isRequired\n }).isRequired,\n flashMessage: PropTypes.string\n};\n\nexport default LandingPage;\n","// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"StravaAlert--alert--0tRrZ\",\"error\":\"StravaAlert--error--Cha6i\",\"success\":\"StravaAlert--success--52fm+\",\"warning\":\"StravaAlert--warning--JQQmd\",\"info\":\"StravaAlert--info---apjx\"};","import React from 'react';\nimport Alert from '@reach/alert';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport { ALERT_TYPES } from 'constants/alerts/alert-types';\nimport styles from './StravaAlert.scss';\n\nconst StravaAlert = ({ children, className, severity, ...options }) => {\n return (\n \n {children}\n \n );\n};\n\nStravaAlert.defaultProps = {\n className: null\n};\n\nStravaAlert.propTypes = {\n severity: PropTypes.oneOf(Object.values(ALERT_TYPES)).isRequired,\n children: PropTypes.node.isRequired,\n className: PropTypes.string\n};\n\nexport default StravaAlert;\n","// extracted by mini-css-extract-plugin\nexport default {\"auth-button\":\"ButtonWrapper--auth-button--7vRBM\",\"authButton\":\"ButtonWrapper--auth-button--7vRBM\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\n\nexport const LOG_IN = 'log_in';\nexport const SIGN_UP = 'sign_up';\n\nconst ButtonWrapper = ({ children, className, ...options }) => {\n return (\n \n {children}\n \n );\n};\n\nButtonWrapper.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string.isRequired\n};\n\nexport default ButtonWrapper;\n","// extracted by mini-css-extract-plugin\nexport default {\"facebook-button\":\"FacebookButton--facebook-button---mxGR\",\"facebookButton\":\"FacebookButton--facebook-button---mxGR\"};","import React from 'react';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\nimport ButtonWrapper, { LOG_IN, SIGN_UP } from '../ButtonWrapper';\n\nconst FacebookButton = ({ type, onClick }) => {\n const I18nPrefix = 'strava.landing_page';\n\n return (\n \n {type === SIGN_UP\n ? I18n.t(`${I18nPrefix}.here_to_join.facebook_cta`)\n : 'implement_me'}\n \n );\n};\n\nFacebookButton.propTypes = {\n onClick: PropTypes.func,\n type: PropTypes.oneOf([SIGN_UP, LOG_IN]).isRequired\n};\n\nFacebookButton.defaultProps = {\n onClick: () => {}\n};\n\nexport default FacebookButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"google-button\":\"GoogleButton--google-button--oTGb8\",\"googleButton\":\"GoogleButton--google-button--oTGb8\"};","import React from 'react';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\nimport ButtonWrapper, { LOG_IN, SIGN_UP } from '../ButtonWrapper';\n\nconst GoogleButton = ({ type, onClick }) => {\n const I18nPrefix = 'strava.landing_page';\n\n return (\n \n {type === SIGN_UP\n ? I18n.t(`${I18nPrefix}.here_to_join.google_cta`)\n : 'implement_me'}\n \n );\n};\n\nGoogleButton.propTypes = {\n onClick: PropTypes.func,\n type: PropTypes.oneOf([SIGN_UP, LOG_IN]).isRequired\n};\n\nGoogleButton.defaultProps = {\n onClick: () => {}\n};\n\nexport default GoogleButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"email-button\":\"EmailButton--email-button--EJuHg\",\"emailButton\":\"EmailButton--email-button--EJuHg\"};","import React from 'react';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\nimport ButtonWrapper, { LOG_IN, SIGN_UP } from '../ButtonWrapper';\n\nconst AccountAuthEmailButton = ({ type, onClick }) => {\n const I18nPrefix = 'strava.landing_page';\n\n return (\n \n {type === SIGN_UP\n ? I18n.t(`${I18nPrefix}.here_to_join.email_cta`)\n : 'implement_me'}\n \n );\n};\n\nAccountAuthEmailButton.propTypes = {\n onClick: PropTypes.func,\n type: PropTypes.oneOf([SIGN_UP, LOG_IN]).isRequired\n};\n\nAccountAuthEmailButton.defaultProps = {\n onClick: () => {}\n};\n\nexport default AccountAuthEmailButton;\n","import FacebookButton from './FacebookButton';\nimport GoogleButton from './GoogleButton';\nimport EmailButton from './EmailButton';\n\nimport { LOG_IN, SIGN_UP } from './ButtonWrapper';\n\nconst APPLE = 'apple';\nconst EMAIL = 'email';\nconst FACEBOOK = 'facebook';\nconst GOOGLE = 'google';\n\nconst elemAttrForAnalytics = (option) => {\n switch (option) {\n case FACEBOOK:\n return 'facebook_signup';\n case APPLE:\n return 'apple_signup';\n case EMAIL:\n return 'email_signup';\n case GOOGLE:\n return 'google_signup';\n default:\n return 'signup';\n }\n};\n\nexport {\n APPLE,\n EMAIL,\n EmailButton,\n FACEBOOK,\n FacebookButton,\n GOOGLE,\n GoogleButton,\n LOG_IN,\n SIGN_UP,\n elemAttrForAnalytics\n};\n","import { useEffect } from 'react';\nimport { injectAppleScript } from 'externalSocialPartners';\n\n/**\n *\n * @param {String} state https://developer.apple.com/documentation/sign_in_with_apple/clientconfigi/3230956-state\n */\nconst useApple = (state) => {\n useEffect(() => {\n injectAppleScript();\n }, []);\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 {\"hr\":\"AccountSignupForm--hr--UJLN0\",\"hr-text\":\"AccountSignupForm--hr-text--rrMpt\",\"hrText\":\"AccountSignupForm--hr-text--rrMpt\"};","// extracted by mini-css-extract-plugin\nexport default {\"apple-button\":\"AppleButton--apple-button--fZrIp\",\"appleButton\":\"AppleButton--apple-button--fZrIp\"};","import React from 'react';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\nimport ButtonWrapper, { LOG_IN, SIGN_UP } from '../ButtonWrapper';\n\nconst AppleButton = ({ type, onClick }) => {\n const I18nPrefix = 'strava.landing_page';\n\n return (\n \n {type === SIGN_UP\n ? I18n.t(`${I18nPrefix}.here_to_join.apple_cta`)\n : 'implement_me'}\n \n );\n};\n\nAppleButton.propTypes = {\n onClick: PropTypes.func,\n type: PropTypes.oneOf([SIGN_UP, LOG_IN]).isRequired\n};\n\nAppleButton.defaultProps = {\n onClick: () => {}\n};\n\nexport default AppleButton;\n","import React, { useState, useEffect } from 'react';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport useApple from 'hooks/externalSocialPartners/useApple';\nimport { isEmpty } from 'lodash-es';\nimport styles from './index.scss';\nimport DisclaimerText from '../DisclaimerText';\n\nimport SignupAgeGateModal from '../SignupAgeGateModal';\n\nimport {\n FacebookButton,\n GoogleButton,\n EmailButton,\n SIGN_UP,\n FACEBOOK,\n GOOGLE,\n EMAIL,\n APPLE,\n elemAttrForAnalytics\n} from '../AccountAuthButton';\nimport AppleButton from '../AccountAuthButton/AppleButton';\n\nimport {\n LANDING_PAGE,\n PRIVATE_ACTIVITY,\n MOBILE_REGISTRATION_PAGE,\n pageAttrForAnalytics,\n track\n} from '../../../utils/onboarding';\nimport StravaAlert from '../../StravaAlert';\n\nconst AccountSignupForm = ({\n authorizationUrls,\n config,\n locale,\n page,\n flashMessage\n}) => {\n const [openModal, setOpenModal] = useState(false);\n const [option, setOption] = useState(null);\n\n const { signin: appleSignin } = useApple(config.appleState);\n\n const I18nPrefix = 'strava.landing_page';\n\n useEffect(() => {\n if (page !== LANDING_PAGE) {\n track({\n page: pageAttrForAnalytics(page),\n action: 'screen_enter'\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleOnClick = (clickedOption) => {\n track({\n page: pageAttrForAnalytics(page),\n action: 'click',\n element: elemAttrForAnalytics(clickedOption)\n });\n setOption(clickedOption);\n if (clickedOption === EMAIL && page !== MOBILE_REGISTRATION_PAGE) {\n window.location.href = authorizationUrls[EMAIL];\n return;\n }\n setOpenModal(true);\n };\n\n const handleModalDobSubmit = () => {\n setOpenModal(false);\n if (option === APPLE) {\n appleSignin(config.appleState);\n } else {\n window.location.href = authorizationUrls[option];\n }\n };\n\n const orDivider = (\n
\n
{I18n.t(`${I18nPrefix}.or`)}
\n
\n );\n\n return (\n <>\n {!isEmpty(flashMessage) && (\n {flashMessage}\n )}\n handleOnClick(FACEBOOK)} />\n handleOnClick(GOOGLE)} />\n {config.appleEnabled && (\n handleOnClick(APPLE)} />\n )}\n {page === LANDING_PAGE && orDivider}\n handleOnClick(EMAIL)} />\n \n {page === PRIVATE_ACTIVITY && orDivider}\n {\n setOpenModal(false);\n }}\n locale={locale}\n onSuccessCallback={handleModalDobSubmit}\n page={page}\n />\n \n );\n};\n\nAccountSignupForm.defaultProps = {\n flashMessage: null\n};\n\nAccountSignupForm.propTypes = {\n page: PropTypes.oneOf([\n LANDING_PAGE,\n PRIVATE_ACTIVITY,\n MOBILE_REGISTRATION_PAGE\n ]).isRequired,\n config: PropTypes.shape({\n appleEnabled: PropTypes.bool.isRequired,\n appleState: PropTypes.string.isRequired // https://developer.apple.com/documentation/sign_in_with_apple/clientconfigi/3230956-state\n }).isRequired,\n authorizationUrls: PropTypes.shape({\n google: PropTypes.string.isRequired,\n facebook: PropTypes.string.isRequired\n }).isRequired,\n locale: PropTypes.string.isRequired,\n flashMessage: PropTypes.string\n};\n\nexport default AccountSignupForm;\n","// extracted by mini-css-extract-plugin\nexport default {\"disclaimer-text\":\"DisclaimerText--disclaimer-text--T2255\",\"disclaimerText\":\"DisclaimerText--disclaimer-text--T2255\"};","import React from 'react';\nimport { Markup } from 'interweave';\nimport I18n from 'utils/I18n';\nimport PropTypes from 'prop-types';\n\nimport styles from './index.scss';\n\nconst DisclaimerText = ({ showLoginOption }) => {\n const I18nPrefix = 'strava.landing_page';\n\n const legalTerms = I18n.t(\n `${I18nPrefix}.disclaimer_text.by_clicking_cta_html`,\n {\n terms_path: '/legal/terms'\n }\n );\n\n const legalPrivacy = I18n.t(\n `${I18nPrefix}.disclaimer_text.view_privacy_policy_html`,\n {\n privacy_path: '/legal/privacy'\n }\n );\n\n return (\n
\n

\n {' '}\n \n

\n {showLoginOption && (\n

\n {I18n.t(`${I18nPrefix}.already_a_member`)}{' '}\n {I18n.t(`${I18nPrefix}.log_in`)}\n

\n )}\n
\n );\n};\n\nDisclaimerText.propTypes = {\n showLoginOption: PropTypes.bool\n};\n\nDisclaimerText.defaultProps = {\n showLoginOption: true\n};\n\nexport default DisclaimerText;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"DropdownDatePicker--container--Gsl3M\",\"day\":\"DropdownDatePicker--day--SMWsK\",\"year\":\"DropdownDatePicker--year--imWte\",\"month\":\"DropdownDatePicker--month--PYgYy\",\"error\":\"DropdownDatePicker--error--93oPI\"};","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from 'utils/I18n';\nimport { isMobile, dateYearsAgo } from 'utils/generalUtils';\nimport { YOUNGEST_AGE_ON_PLATFORM } from 'constants/appConstants';\nimport { isNil } from 'lodash-es';\nimport styles from './styles.scss';\nimport StravaDropdownSelect from '../StravaDropdownSelect/StravaDropdownSelect';\n\nconst MIN_YEARS_BEFORE_TODAY = 125;\n\nconst I18N_MONTHS = (() => {\n const prefix = 'templates.settings.months.';\n return [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec'\n ].map((m) => prefix + m);\n})();\n\nconst DropdownDatePicker = ({\n className,\n dateMax,\n dateSelected,\n dateChangeCallback,\n erroredControls,\n required,\n disabled,\n locale,\n focusTarget,\n enableDefaultFocus\n}) => {\n // IMPORTANT - using defaultProps does not reflect the mocked global system date\n // that unit tests need for this component uses.\n // ie. new Date() initiated using defaultProps is always the current date while\n // new Date() in the mounted react would be the mocked date.\n //\n // Setting a custom date during tests if very important for this component since\n // we need to be able to test specific scenarios at any time. Because of this need,\n // maxDate default is being handled inside the mounted component.\n // Also, reactjs seems to be on the path to deprecate defaultProps - https://github.com/jsx-eslint/eslint-plugin-react/issues/2396\n // so this approach aligns more with how the future of reactjs will look like.\n const correctedDateMax = isNil(dateMax)\n ? dateYearsAgo(YOUNGEST_AGE_ON_PLATFORM)\n : dateMax;\n\n const [day, setDay] = useState(dateSelected ? dateSelected.getDate() : null);\n const [month, setMonth] = useState(\n dateSelected ? dateSelected.getMonth() + 1 : null\n ); // UI January => numeric value 1\n const [year, setYear] = useState(\n dateSelected ? dateSelected.getFullYear() : null\n );\n\n const yearMax = correctedDateMax.getFullYear();\n const monthMax = correctedDateMax.getMonth() + 1; // UI January => numeric value is 1\n\n // DD\n const daySelectDefault = I18n.t(\n 'templates.settings.birthday_select_defaults.day'\n );\n // MM or MONTH\n const monthSelectDefault = isMobile()\n ? I18n.t('templates.settings.birthday_select_defaults.month')\n : I18n.t('templates.settings.birthday_select_defaults.month_full');\n // YYYY\n const yearSelectDefault = I18n.t(\n 'templates.settings.birthday_select_defaults.year'\n );\n\n /**\n * Helper function\n * given, min =5, max =7 returns array [5,6,7]\n */\n const intArray = (min, max) =>\n Array.from({ length: max - min + 1 }, (_, i) => i + min);\n\n /**\n * Number in days in a given month for a specific year.\n */\n const numDaysInMonth = (y, m) => new Date(y, m, 0).getDate();\n\n const blankOption = { label: '', value: '' };\n\n /**\n * Day options that an athlete can choose from the day dropdown\n */\n const dayOptions = (() => {\n const options = required ? [] : [blankOption];\n intArray(\n 1,\n year === yearMax && month === monthMax\n ? correctedDateMax.getDate()\n : numDaysInMonth(year, month)\n ).forEach((d) => {\n options.push({ label: d.toString(), value: d });\n });\n return options;\n })();\n\n /**\n * Localized Month options that an athlete can choose from the month dropdown\n *\n * Note: January => 1 and December => 12, Unlike JS Date where January => 0\n */\n const monthOptions = (() => {\n const options = required ? [] : [blankOption];\n intArray(1, year === yearMax ? monthMax : 12).forEach((m) => {\n const label = isMobile() ? m.toString() : I18n.t(I18N_MONTHS[m - 1]);\n options.push({ label, value: m });\n });\n return options;\n })();\n\n /**\n * Year options that an athlete can choose from the year dropdown\n */\n const yearOptions = (() => {\n const options = required ? [] : [blankOption];\n intArray(\n correctedDateMax.getFullYear() - MIN_YEARS_BEFORE_TODAY,\n correctedDateMax.getFullYear()\n )\n .reverse() // descending order - current year first\n .forEach((y) => {\n options.push({ label: y.toString(), value: y });\n });\n return options;\n })();\n\n const handleYearChange = (option) => {\n const newYear = option.value;\n setYear(newYear);\n let newDay = day;\n let newMonth = month;\n if (day > numDaysInMonth(newYear, month)) {\n newDay = null;\n setDay(newDay); // clear out the selected day\n }\n if (newYear === yearMax && month > monthMax) {\n newMonth = null;\n setMonth(newMonth); // clear out the month field (this avoids dates that are before the dateMax from being entered)\n }\n dateChangeCallback({ month: newMonth, day: newDay, year: newYear });\n };\n\n const handleMonthChange = (option) => {\n const newMonth = option.value;\n setMonth(newMonth);\n let newDay = day;\n if (day > numDaysInMonth(year, newMonth)) {\n newDay = null;\n setDay(newDay); // clear out the selected day\n }\n dateChangeCallback({ month: newMonth, day: newDay, year });\n };\n\n const handleDayChange = (option) => {\n const newDay = option.value;\n setDay(newDay);\n dateChangeCallback({ month, day: newDay, year });\n };\n\n /**\n * The date control that gains focus\n */\n const defaultFocus = (() => {\n if (enableDefaultFocus) {\n switch (locale) {\n case 'en-US':\n return 'month';\n case 'ko-KR':\n case 'ja-JP':\n return 'year';\n default:\n return 'day';\n }\n }\n return null;\n })();\n\n const monthSelector = (\n o.value === month)}\n onChange={handleMonthChange}\n placeholder={monthSelectDefault}\n ariaLabel={monthSelectDefault}\n data-cy=\"month\"\n hasError={erroredControls.includes('month')}\n isFocused={[focusTarget, defaultFocus].includes('month')}\n />\n );\n\n const daySelector = (\n o.value === day)}\n onChange={handleDayChange}\n placeholder={daySelectDefault}\n ariaLabel={daySelectDefault}\n hasError={erroredControls.includes('day')}\n isFocused={[focusTarget, defaultFocus].includes('day')}\n />\n );\n\n const yearSelector = (\n o.value === year)}\n onChange={handleYearChange}\n placeholder={yearSelectDefault}\n ariaLabel={yearSelectDefault}\n hasError={erroredControls.includes('year')}\n isFocused={[focusTarget, defaultFocus].includes('year')}\n />\n );\n\n /**\n * Determines date layout based on the language\n */\n const buildSelectors = () => {\n switch (locale) {\n case 'en-US':\n return [monthSelector, daySelector, yearSelector];\n case 'ko-KR':\n case 'ja-JP':\n return [yearSelector, monthSelector, daySelector];\n default:\n return [daySelector, monthSelector, yearSelector];\n }\n };\n\n const classNames = [styles.container];\n if (className) {\n classNames.push(className);\n }\n return (\n
\n {buildSelectors()}\n
\n );\n};\n\nDropdownDatePicker.defaultProps = {\n className: null,\n dateMax: null,\n dateSelected: null,\n erroredControls: [],\n required: false,\n locale: window.navigator.userLanguage || window.navigator.language,\n disabled: false,\n focusTarget: null,\n enableDefaultFocus: false\n};\n\nDropdownDatePicker.propTypes = {\n className: PropTypes.string,\n dateMax: PropTypes.instanceOf(Date),\n dateSelected: PropTypes.instanceOf(Date),\n dateChangeCallback: PropTypes.func.isRequired,\n erroredControls: PropTypes.arrayOf(PropTypes.oneOf(['day', 'month', 'year'])),\n locale: PropTypes.string,\n required: PropTypes.bool,\n disabled: PropTypes.bool,\n focusTarget: PropTypes.string,\n enableDefaultFocus: PropTypes.bool\n};\n\nexport default DropdownDatePicker;\n","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"SignupAgeGateModal--modal--smgNx\",\"modal-title\":\"SignupAgeGateModal--modal-title--1dq21\",\"modalTitle\":\"SignupAgeGateModal--modal-title--1dq21\",\"modal-body\":\"SignupAgeGateModal--modal-body--Ur7Jt\",\"modalBody\":\"SignupAgeGateModal--modal-body--Ur7Jt\",\"modal-actions\":\"SignupAgeGateModal--modal-actions--yB7GV\",\"modalActions\":\"SignupAgeGateModal--modal-actions--yB7GV\",\"subtitle\":\"SignupAgeGateModal--subtitle--Nlw+5\",\"text\":\"SignupAgeGateModal--text--HTLTO\",\"datepicker\":\"SignupAgeGateModal--datepicker---45FB\",\"tool-tip\":\"SignupAgeGateModal--tool-tip--F4AYv\",\"toolTip\":\"SignupAgeGateModal--tool-tip--F4AYv\",\"signup-button\":\"SignupAgeGateModal--signup-button--0pBfO\",\"signupButton\":\"SignupAgeGateModal--signup-button--0pBfO\",\"error-message\":\"SignupAgeGateModal--error-message--kjG0B\",\"errorMessage\":\"SignupAgeGateModal--error-message--kjG0B\"};","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Modal, { ModalActions, ModalTitle, ModalBody } from '@strava/ui/Modal';\nimport Button from '@strava/ui/Button';\nimport Tooltip from '@strava/ui/Tooltip';\nimport NavigationHelpNormalXsmall from '@strava/icons/NavigationHelpNormalXsmall';\nimport I18n from 'utils/I18n';\nimport { Markup } from 'interweave';\n\nimport createNetworkingClient from 'utils/networking-client';\nimport { YOUNGEST_AGE_ON_PLATFORM } from 'constants/appConstants';\nimport styles from './index.scss';\nimport DisclaimerText from '../DisclaimerText';\nimport DropdownDatePicker from '../DropdownDatePicker';\nimport {\n LANDING_PAGE,\n MOBILE_REGISTRATION_PAGE,\n pageAttrForAnalytics,\n PRIVATE_ACTIVITY,\n REGISTRATION_PAGE,\n track\n} from '../../../utils/onboarding';\n\nconst SignupAgeGateModal = ({\n open,\n onSuccessCallback,\n onDismissCallback,\n locale,\n page\n}) => {\n const [dob, setDob] = useState({ month: '', day: '', year: '' });\n const [erroredControls, setErroredControls] = useState([]);\n const [errorMessage, setErrorMessage] = useState(null);\n\n const I18nPrefix = 'strava.landing_page';\n\n const copyCantMakeAccount = I18n.t(`${I18nPrefix}.cant_make_account`);\n\n useEffect(() => {\n if (open) {\n setErrorMessage(null);\n track({\n page: 'dob',\n action: 'screen_enter',\n properties: {\n source: pageAttrForAnalytics(page)\n }\n });\n }\n }, [open, page]);\n\n const isCompleteDate = ({ month, day, year }) => {\n let result = true;\n if (month === null || month === '') {\n setErroredControls((prev) => [...prev, 'month']);\n result = false;\n }\n if (day === null || day === '') {\n setErroredControls((prev) => [...prev, 'day']);\n result = false;\n }\n if (year === null || year === '') {\n setErroredControls((prev) => [...prev, 'year']);\n result = false;\n }\n return result;\n };\n\n const dateWithoutTime = (date) => {\n return new Date(date.toDateString());\n };\n\n /**\n * Athlete must be >= 13 years to create an account\n */\n const isAllowedAge = ({ month, day, year }) => {\n const inputDate = dateWithoutTime(new Date(year, month - 1, day)); // Jan => 1 for input UI\n const today = dateWithoutTime(new Date());\n const minDate = dateWithoutTime(\n new Date(\n today.getFullYear() - YOUNGEST_AGE_ON_PLATFORM,\n today.getMonth(),\n today.getDate()\n )\n );\n return inputDate <= minDate;\n };\n\n const remove = (arr, value) => {\n let i = 0;\n while (i < arr.length) {\n if (arr[i] === value) {\n arr.splice(i, 1);\n } else {\n i += 1;\n }\n }\n return arr;\n };\n\n const updateErrorState = ({ month, day, year }) => {\n if (month) {\n setErroredControls((prev) => remove(prev, 'month'));\n }\n if (day) {\n setErroredControls((prev) => remove(prev, 'day'));\n }\n if (year) {\n setErroredControls((prev) => remove(prev, 'year'));\n }\n };\n\n const handleSignup = () => {\n const { month, day, year } = dob;\n\n track({\n page: 'dob',\n action: 'click',\n element: 'agree_signup',\n properties: {\n source: pageAttrForAnalytics(page),\n dob: `${month === '' ? null : month}-${day === '' ? null : day}-${\n year === '' ? null : year\n }`, // eg. track as null-12-2020 instead of -12-2020\n dob_complete: isCompleteDate({ month, day, year }),\n dob_allowed: isCompleteDate({ month, day, year })\n ? isAllowedAge({ month, day, year })\n : false\n }\n });\n\n if (!isCompleteDate({ month, day, year })) {\n return; // block signup process\n }\n if (!isAllowedAge({ month, day, year })) {\n setErrorMessage(copyCantMakeAccount);\n return; // block signup process\n }\n createNetworkingClient()\n .post('/onboarding/age_gate', {\n age_gate_year: year,\n age_gate_month: month,\n age_gate_day: day\n })\n .then((response) => {\n if (response && response.status === 200) {\n onSuccessCallback();\n } else {\n setErrorMessage(I18n.t(`${I18nPrefix}.errors.generic`));\n }\n })\n .catch(() => {\n setErrorMessage(I18n.t(`${I18nPrefix}.errors.generic`));\n });\n };\n\n const handleDobChange = (d) => {\n setDob(d);\n updateErrorState(d);\n setErrorMessage(null);\n };\n\n return (\n \n \n {I18n.t(`${I18nPrefix}.before_you_sign_up`)}\n \n \n
\n
{I18n.t(`${I18nPrefix}.birthday`)}
\n \n }\n position=\"top\"\n className={styles.toolTip}\n >\n \n \n
\n\n \n\n \n\n {errorMessage && (\n \n {errorMessage}\n \n )}\n
\n \n \n {I18n.t(`${I18nPrefix}.agree_and_signup`)}\n \n \n \n );\n};\n\nSignupAgeGateModal.defaultProps = {\n page: ''\n};\n\nSignupAgeGateModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onSuccessCallback: PropTypes.func.isRequired,\n onDismissCallback: PropTypes.func.isRequired,\n locale: PropTypes.string.isRequired,\n page: PropTypes.oneOf([\n LANDING_PAGE,\n PRIVATE_ACTIVITY,\n MOBILE_REGISTRATION_PAGE,\n REGISTRATION_PAGE\n ])\n};\n\nexport default SignupAgeGateModal;\n","import React, { useEffect, useRef } from 'react';\nimport ReactSelect from 'react-select';\nimport PropTypes, { number, string } from 'prop-types';\nimport { isMobile } from 'utils/generalUtils';\n\nimport colors from '@strava/ui/colors';\n\nconst StravaDropdownSelect = ({\n name,\n isFocused,\n hasError,\n value,\n options,\n ariaLabel,\n className,\n disabled,\n onChange,\n placeholder,\n styles,\n ...props\n}) => {\n const ref = useRef(null);\n\n useEffect(() => {\n if (ref.current && isFocused) {\n ref.current.focus();\n }\n }, [isFocused]);\n\n const controlColor = (provided) =>\n hasError ? colors.BRAND_DANGER : provided.borderColor;\n\n const controlBoxShadow = (provided, state) => {\n if (hasError) {\n return '';\n }\n if (state.isFocused) {\n return `0 0 0 1px #${colors.N70_GRAVEL}`;\n }\n return provided.boxShadow;\n };\n\n const customStyles = (() => {\n return {\n indicatorSeparator: (provided) => ({\n ...provided,\n display: 'none'\n }),\n dropdownIndicator: (provided) => ({\n ...provided,\n padding: '2px'\n }),\n valueContainer: (provided) => ({\n ...provided,\n padding: '5px',\n height: '50px',\n fontSize: '17px',\n color: controlColor(provided)\n }),\n control: (provided, state) => ({\n ...provided,\n borderColor: controlColor(provided),\n boxShadow: controlBoxShadow(provided, state)\n }),\n ...styles\n };\n })();\n\n const theme = (provided) => ({\n ...provided,\n colors: {\n ...provided.colors,\n primary25: colors.N30_SILVER,\n primary: colors.N70_GRAVEL,\n danger: colors.BRAND_DANGER\n }\n });\n\n return (\n \n );\n};\n\nconst optionProps = PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.oneOfType([number, string])\n});\n\nStravaDropdownSelect.defaultProps = {\n hasError: false,\n disabled: false,\n className: null,\n value: null,\n onChange: () => {},\n placeholder: null,\n isFocused: false,\n styles: {}\n};\n\nStravaDropdownSelect.propTypes = {\n name: PropTypes.string.isRequired,\n isFocused: PropTypes.bool,\n hasError: PropTypes.bool,\n value: optionProps,\n disabled: PropTypes.bool,\n ariaLabel: PropTypes.string.isRequired,\n className: PropTypes.string,\n options: PropTypes.arrayOf(optionProps).isRequired,\n onChange: PropTypes.func,\n placeholder: PropTypes.string,\n styles: PropTypes.shape({})\n};\n\nexport default StravaDropdownSelect;\n","export const ALERT_TYPES = Object.freeze({\n warning: 'warning',\n error: 'error',\n info: 'info',\n success: 'success'\n});\n\nexport default { ALERT_TYPES };\n","export const YOUNGEST_AGE_ON_PLATFORM = 13;\n\nexport const GENDER = Object.freeze({\n man: 'man',\n woman: 'woman',\n preferNotSay: 'prefer_not_say',\n nonBinary: 'nonbinary'\n});\n\nexport default { YOUNGEST_AGE_ON_PLATFORM, GENDER };\n","import { replace } from 'lodash-es';\nimport { logError } from './utils/sentry';\n\nconst appendScriptToBody = ({ script, name }) => {\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 = (callback) => {\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' });\n } else {\n callback();\n }\n};\n\nexport const injectAppleScript = (locale = 'en_US') => {\n if (!window.apple) {\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' });\n }\n};\n\nexport const injectFacebookScript = ({\n appId,\n version,\n callback,\n locale = 'en_US'\n}) => {\n if (!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' });\n } else {\n callback();\n }\n};\n\nexport default { injectGoogleScript, injectAppleScript, injectFacebookScript };\n","export function trackV2({ category, page, action, element, properties = {} }) {\n try {\n window.Strava.ExternalAnalytics.trackV2({\n category,\n page,\n action,\n element,\n properties\n });\n } catch (e) {\n console.error(\n `Could not execute Strava.ExternalAnalytics.trackV2 event with the category:action ${category}:${action}`,\n e\n );\n }\n}\n\nexport default {\n trackV2\n};\n","import { split } from 'lodash-es';\n\nexport { timeout } from './devUtils';\n\nexport const generateRandomId = () =>\n Math.random()\n .toString(36)\n .substring(2);\n\n// Capitalizes all the words and replaces some characters in the string to create a nicer looking title.\n// eg. 'man from the boondocks' => 'Man From The Boondocks'\nconst titleize = (str) =>\n str.replace(\n /\\w\\S*/g,\n (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()\n );\n\nexport const displayName = (\n { firstName = '', lastName = '' },\n options = { forceAnonymize: false, maxLength: 100 }\n) => {\n const { maxLength, forceAnonymize } = options;\n const fullName = `${firstName} ${lastName}`;\n\n if (forceAnonymize || fullName.length > maxLength) {\n if (firstName.length > maxLength - 3) {\n return `${titleize(\n firstName.substring(0, maxLength - 4)\n )}... ${lastName.charAt(0).toUpperCase()}.`;\n }\n return `${titleize(firstName)} ${lastName.charAt(0).toUpperCase()}.`;\n }\n return fullName.trim();\n};\n\nexport const isMobile = () => window.navigator.userAgent.includes('Mobile');\n\nexport const dateYearsAgo = (years) => {\n const d = new Date(new Date().toDateString());\n d.setFullYear(d.getFullYear() - years);\n return d;\n};\n\nexport const parseServerDateString = (date) => {\n const dobArray = split(date, '-');\n return {\n year: parseInt(dobArray[0], 10),\n month: parseInt(dobArray[1], 10),\n day: parseInt(dobArray[2], 10)\n };\n};\n\nexport default {\n displayName,\n generateRandomId,\n isMobile,\n dateYearsAgo,\n parseServerDateString\n};\n","import { trackV2 } from 'utils/analytics';\n\nconst LANDING_PAGE = 'landing_page';\nconst PRIVATE_ACTIVITY = 'private_activity';\nconst MOBILE_REGISTRATION_PAGE = 'mobile_registration';\nconst REGISTRATION_PAGE = 'registration';\n\nconst pageAttrForAnalytics = (page) => {\n switch (page) {\n case LANDING_PAGE:\n return 'home';\n case PRIVATE_ACTIVITY:\n return 'referral';\n case MOBILE_REGISTRATION_PAGE:\n return 'register_mobile';\n case REGISTRATION_PAGE:\n return 'register';\n default:\n return '';\n }\n};\n\nconst track = (attrs) => {\n trackV2({\n category: 'onboarding',\n ...attrs,\n properties: {\n ...attrs.properties\n }\n });\n};\n\nexport {\n LANDING_PAGE,\n PRIVATE_ACTIVITY,\n MOBILE_REGISTRATION_PAGE,\n REGISTRATION_PAGE,\n pageAttrForAnalytics,\n track\n};\n"],"names":["LandingPage","cohort","locale","config","authorizationUrls","flashMessage","useEffect","trackV2","category","page","action","properties","className","styles","I18n","src","headerImageSmall","srcSet","headerImageLarge","alt","AccountSignupForm","LANDING_PAGE","defaultProps","StravaAlert","children","severity","options","clsx","SIGN_UP","variant","type","FacebookButton","onClick","ButtonWrapper","I18nPrefix","GoogleButton","AccountAuthEmailButton","APPLE","EMAIL","FACEBOOK","GOOGLE","elemAttrForAnalytics","option","state","injectAppleScript","signin","window","AppleID","stravaInit","auth","init","clientId","scope","redirectURI","signIn","AppleButton","useState","openModal","setOpenModal","setOption","appleSignin","useApple","appleState","track","pageAttrForAnalytics","handleOnClick","clickedOption","element","MOBILE_REGISTRATION_PAGE","location","href","orDivider","isEmpty","appleEnabled","DisclaimerText","showLoginOption","PRIVATE_ACTIVITY","SignupAgeGateModal","open","onDismissCallback","onSuccessCallback","legalTerms","terms_path","legalPrivacy","privacy_path","noWrap","content","I18N_MONTHS","map","m","DropdownDatePicker","dateMax","dateSelected","dateChangeCallback","erroredControls","required","disabled","focusTarget","enableDefaultFocus","correctedDateMax","isNil","dateYearsAgo","YOUNGEST_AGE_ON_PLATFORM","getDate","day","setDay","getMonth","month","setMonth","getFullYear","year","setYear","yearMax","monthMax","daySelectDefault","monthSelectDefault","isMobile","yearSelectDefault","intArray","min","max","Array","from","length","_","i","numDaysInMonth","y","Date","blankOption","label","value","dayOptions","forEach","d","push","toString","monthOptions","yearOptions","reverse","defaultFocus","monthSelector","StravaDropdownSelect","key","name","find","o","onChange","newMonth","newDay","placeholder","ariaLabel","hasError","includes","isFocused","daySelector","yearSelector","newYear","classNames","join","buildSelectors","navigator","userLanguage","language","dob","setDob","setErroredControls","errorMessage","setErrorMessage","copyCantMakeAccount","source","isCompleteDate","result","prev","dateWithoutTime","date","toDateString","isAllowedAge","inputDate","today","remove","arr","splice","Modal","isOpen","onDismiss","hasClose","id","Tooltip","position","NavigationHelpNormalXsmall","Button","dob_complete","dob_allowed","createNetworkingClient","post","age_gate_year","age_gate_month","age_gate_day","then","response","status","catch","props","ref","useRef","current","focus","controlColor","provided","colors","borderColor","controlBoxShadow","boxShadow","customStyles","indicatorSeparator","display","dropdownIndicator","padding","valueContainer","height","fontSize","color","control","classNamePrefix","isDisabled","isSearchable","theme","primary25","primary","danger","ALERT_TYPES","Object","freeze","warning","error","info","success","GENDER","man","woman","preferNotSay","nonBinary","appendScriptToBody","script","document","querySelector","appendChild","e","Error","logError","injectGoogleScript","callback","google","createElement","async","onload","apple","formattedLocale","replace","injectFacebookScript","appId","version","FB","fbAsyncInit","xfbml","cookie","Strava","ExternalAnalytics","console","generateRandomId","Math","random","substring","titleize","str","txt","charAt","toUpperCase","substr","toLowerCase","displayName","firstName","lastName","forceAnonymize","maxLength","fullName","trim","userAgent","years","setFullYear","parseServerDateString","dobArray","split","parseInt","REGISTRATION_PAGE","attrs"],"sourceRoot":""}