{"version":3,"file":"js/73415-bfff7e9c4bff79898060.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_freeGlobal.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_root.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_Symbol.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_arrayMap.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isArray.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_getRawTag.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_objectToString.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_baseGetTag.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isObjectLike.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/_baseToString.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/toString.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/replace.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/utils/src/externalSocialPartners/externalSocialPartners.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/utils/src/externalSocialPartners/useApple.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/icons/dist/ActionsCancelNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/SignUpModal/SignUpModal.module.scss?c847","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/SignUpModal/SignUpModal.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/SignUpModal/SignUpModalContext/SignUpModalContext.tsx","webpack://StravaModern/./node_modules/@strava/icons/dist/AchievementsTrophyNormalSmall.js","webpack://StravaModern/./node_modules/@strava/icons/dist/ActionsCommentNormalSmall.js","webpack://StravaModern/./node_modules/@strava/icons/dist/ActionsKudoNormalSmall.js","webpack://StravaModern/./node_modules/@strava/icons/dist/ActionsLockClosedNormalXsmall.js","webpack://StravaModern/./node_modules/@strava/ui-tokens/js/_typography.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/now.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/_trimmedEndIndex.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/_baseTrim.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/toNumber.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/debounce.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/throttle.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/area.module.scss?1347","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Area.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/axis.module.scss?8da9","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Axis.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Tooltip/styles.module.scss?cba6","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Tooltip/index.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/styles.module.scss?3232","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/index.js"],"sourcesContent":["/** 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';\nimport { LogError } from './types';\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: number;\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: String(appId), // we store the fb app id as a number, but the api expects it as a string\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 } from './externalSocialPartners';\nimport { LogError } from './types';\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","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","// extracted by mini-css-extract-plugin\nexport default {\"signUpModal\":\"SignUpModal--signUpModal--xO1Kx\",\"modalBody\":\"SignUpModal--modalBody--Gpmjz\",\"headerButtons\":\"SignUpModal--headerButtons--2U3lr\",\"loginButton\":\"SignUpModal--loginButton--Vs7UG\",\"closeButton\":\"SignUpModal--closeButton--47PoO\",\"alert\":\"SignUpModal--alert--Y+599\",\"headerText\":\"SignUpModal--headerText--G1lDl\",\"authButtons\":\"SignUpModal--authButtons--502Bu\",\"orDivider\":\"SignUpModal--orDivider--W38OK\",\"disclaimerText\":\"SignUpModal--disclaimerText--BQTmz\"};","import React, { useCallback, useEffect } from 'react';\nimport Modal, { ModalBody } from '@strava/ui/Modal';\nimport Avatar from '@strava/ui/Avatar';\nimport {\n useStravaAnalytics,\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\nimport { useApple } from '@strava/utils/src/externalSocialPartners/useApple';\nimport { AlertContainer, AlertProvider } from '@strava/ui/Alert';\nimport Button, { LinkButton } from '@strava/ui/Button';\nimport VisuallyHidden from '@strava/ui/VisuallyHidden';\nimport ActionsCancelNormalSmall from '@strava/icons/ActionsCancelNormalSmall';\nimport { color } from '@strava/ui-tokens/js';\nimport { Markup } from 'interweave';\nimport clsx from '@strava/ui/clsx';\nimport AccountAuthButton from '../AccountAuthButton';\nimport OrDivider from '../OrDivider';\nimport EmailRegistrationForm, {\n EmailRegistrationFormProps,\n EMAIL_REGISTRATION_FORM_ALERT_ID,\n AnalyticsFieldsTypes\n} from '../EmailRegistrationForm';\nimport DisclaimerText from '../DisclaimerText';\nimport { APPLE, FACEBOOK, GOOGLE, HIDE_TIME_DELAY_MODAL } from '../constants';\nimport { useSignUpModalContext } from './SignUpModalContext';\nimport styles from './SignUpModal.module.scss';\n\n// using `require` here instead of import to avoid adding `declare module '*.svg'`\n// everywhere the `@strava/authentication-ui` package is imported\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst echelon = require('./assets/strava-echelon.svg');\n\nexport type SignUpModalProps = {\n authorizationUrls: {\n email: string;\n facebook: string;\n google: string;\n };\n appleState: string;\n category: string;\n className?: string;\n} & EmailRegistrationFormProps;\n\nconst i18nPrefix = 'sign_up_modal';\nconst AUTH_BUTTONS = [GOOGLE, APPLE, FACEBOOK] as const;\n\nconst SignUpModal = ({\n className,\n authorizationUrls,\n appleState,\n category,\n ...props\n}: SignUpModalProps) => {\n const { track: _track } = useStravaAnalytics();\n const { t } = useStravaTranslations();\n const { logError } = useStravaErrorLogging();\n const { signin: appleSignin } = useApple(appleState, logError);\n\n const {\n isSignUpModalOpen,\n dismissSignUpModal,\n variant,\n copyParams,\n athleteAvatar\n } = useSignUpModalContext();\n\n // If we need to add `_v2` strings for the variants, we'd need to map them to the proper variant.\n // The variant is used for more than just copy, so we could end up with `follow_athlete` as a variant\n // but want to use `follow_athlete_v2` for the copy.\n\n const track = useCallback(\n (fields: AnalyticsFieldsTypes) => {\n _track({\n category,\n page: 'signup_modal',\n ...fields,\n properties: {\n copy_variant: variant,\n ...fields.properties\n }\n });\n },\n [_track, category, variant]\n );\n\n const handleExtAuthBtnClick = (\n option: typeof FACEBOOK | typeof GOOGLE | typeof APPLE\n ) => {\n track({ action: 'click', element: `${option}_signup` });\n\n if (option === APPLE) {\n appleSignin();\n } else {\n window.location.assign(authorizationUrls[option]);\n }\n };\n\n useEffect(() => {\n if (isSignUpModalOpen) {\n // register screen_enter event each time modal is opened\n track({ action: 'screen_enter' });\n\n if (sessionStorage.getItem(HIDE_TIME_DELAY_MODAL) !== 'true') {\n // repress time delayed modal since modal has now been seen\n sessionStorage.setItem(HIDE_TIME_DELAY_MODAL, 'true');\n }\n }\n }, [isSignUpModalOpen, track]);\n\n return (\n \n \n \n
\n track({ action: 'click', element: 'login' })}\n >\n {t(`${i18nPrefix}.log_in`)}\n \n {\n track({ action: 'click', element: 'close_modal' });\n dismissSignUpModal();\n }}\n type=\"button\"\n variant=\"icon\"\n className={styles.closeButton}\n title={t(`${i18nPrefix}.close`)}\n >\n {t(`${i18nPrefix}.close`)}\n \n \n
\n\n
\n {variant === 'follow_athlete' ? (\n \n ) : (\n \"\"\n )}\n

\n \n

\n

{t(`${i18nPrefix}.${variant}.subtitle`)}

\n
\n\n \n\n
\n {AUTH_BUTTONS.map((option) => (\n handleExtAuthBtnClick(option)}\n data-testid={`${option}_auth_btn`}\n key={option}\n >\n {t(`${i18nPrefix}.signup_ctas.${option}_cta`)}\n \n ))}\n
\n\n \n\n \n\n \n
\n \n
\n );\n};\n\nexport default SignUpModal;\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState\n} from 'react';\nimport apiClient from '@strava/api/lib/axios-client';\nimport { useStravaErrorLogging } from '@strava/container-context';\n\nexport type SignUpModalVariants =\n | 'generic'\n | 'generic_time_delayed'\n | 'follow_athlete'\n | 'join_challenge'\n | 'kudos_comment';\n\nexport type SignUpModalContextState = {\n openSignUpModal: (variant: SignUpModalVariants) => void;\n isSignUpModalOpen: boolean;\n dismissSignUpModal: () => void;\n variant: SignUpModalVariants;\n copyParams: Record>;\n athleteAvatar: string;\n};\n\nconst SignUpModalContext = createContext(\n undefined\n);\nSignUpModalContext.displayName = 'SignUpModalContext';\n\nexport const useSignUpModalContext = () => {\n const context = useContext(SignUpModalContext);\n\n // Fail fast if hook is used outside the provider\n if (!context) {\n throw new Error(\n 'useSignUpModalContext must be used within the SignUpModalContext provider'\n );\n }\n\n return context;\n};\n\ntype SignUpModalContextProviderProps = {\n children: ReactNode;\n nameForFollowAthleteVariant: string;\n athleteAvatar: string;\n redirectVariants?: string[];\n};\n\nexport const SignUpModalContextProvider = ({\n children,\n nameForFollowAthleteVariant,\n athleteAvatar,\n redirectVariants = []\n}: SignUpModalContextProviderProps) => {\n const [isSignUpModalOpen, setIsSignUpModalOpen] = useState(false);\n const [variant, setVariant] = useState('generic');\n const { logError } = useStravaErrorLogging();\n\n const openSignUpModal = useCallback(\n (_variant: SignUpModalVariants) => {\n setIsSignUpModalOpen(true);\n setVariant(_variant);\n\n if (redirectVariants.includes(_variant)) {\n apiClient()\n .put('/website/sign_up_modal_helper', { variant: _variant })\n .catch((error) => logError(error));\n }\n },\n [logError, redirectVariants]\n );\n\n const dismissSignUpModal = useCallback(() => {\n setIsSignUpModalOpen(false);\n\n // restore the default redirect after signup/login session cookies when the modal is\n // manually dismissed--this means the special redirect will still be there if the user\n // navigates away from the page without closing the modal. But since a user who signs up\n // via the modal will end up being navigated away from the page without closing the modal\n // upon successful sign up, we kind of have to allow this\n if (redirectVariants.includes(variant)) {\n apiClient()\n .put('/website/sign_up_modal_helper', { variant: 'generic' })\n .catch((error) => logError(error));\n }\n }, [logError, redirectVariants, variant]);\n\n const providerState = useMemo(\n () => ({\n openSignUpModal,\n dismissSignUpModal,\n isSignUpModalOpen,\n variant,\n copyParams: {\n generic: {},\n generic_time_delayed: {},\n follow_athlete: { name: nameForFollowAthleteVariant },\n join_challenge: {},\n kudos_comment: {}\n },\n athleteAvatar\n }),\n [\n openSignUpModal,\n dismissSignUpModal,\n isSignUpModalOpen,\n variant,\n nameForFollowAthleteVariant,\n athleteAvatar\n ]\n );\n\n return (\n \n {children}\n \n );\n};\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgAchievementsTrophyNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgAchievementsTrophyNormalSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgAchievementsTrophyNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgAchievementsTrophyNormalSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgActionsCommentNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsCommentNormalSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgActionsCommentNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgActionsCommentNormalSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgActionsKudoNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsKudoNormalSmall.defaultProps = {\n color: 'currentColor',\n size: 24,\n title: undefined,\n titleId: undefined\n};\nSvgActionsKudoNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgActionsKudoNormalSmall;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SvgActionsLockClosedNormalXsmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsLockClosedNormalXsmall.defaultProps = {\n color: 'currentColor',\n size: 16,\n title: undefined,\n titleId: undefined\n};\nSvgActionsLockClosedNormalXsmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string\n};\nexport default SvgActionsLockClosedNormalXsmall;\n","export const fontFamilyMaisonNeue = \"\\\"MaisonNeue\\\", \\\"Segoe UI\\\", \\\"Helvetica Neue\\\", -apple-system, system-ui, BlinkMacSystemFont, Roboto, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"\";\nexport const fontWeightDemi = \"600\";\nexport const fontWeightMedium = \"500\";\nexport const fontWeightBook = \"400\";\nexport const lineHeightSm = \"100%\";\nexport const lineHeightMd = \"110%\";\nexport const lineHeightLg = \"130%\";\nexport const lineHeightXl = \"150%\";\nexport const lineHeight2xl = \"170%\";\nexport const fontSizeScale = \"1.125\"; // scale token used to create our typescale ramp - we use Major third scale\nexport const fontSizeBase = \"1rem\"; // 1rem // base units for typescaling\nexport const fontSize3xs = \".625rem\"; // 10px\nexport const fontSize2xs = \".75rem\"; // 12px\nexport const fontSizeXs = \".875rem \"; // 14px\nexport const fontSizeSm = \"1rem\"; // 16px\nexport const fontSizeMd = \"1.25rem\"; // 20px\nexport const fontSizeLg = \"1.5rem\"; // 24px\nexport const fontSizeXl = \"2rem\"; // 32px\nexport const fontSize2xl = \"3rem\"; // 48px\nexport const fontSize3xl = \"4rem\"; // 64px\nexport const fontSize4xl = \"5rem\"; // 80px\nexport const fontSize5xl = \"6rem\"; // 96px\nexport const letterSpacingNone = \"0\";\nexport const letterSpacingSm = \"-0.02em\";\nexport const letterSpacingMd = \"0.01em\";\nexport const letterSpacingLg = \"0.02em\";\nexport const letterSpacingXl = \"0.04em\";\nexport const letterSpacing2xl = \"0.08em\";\nexport const letterSpacing3xl = \"0.16em\";\nexport const letterSpacing4xl = \"0.24em\";\nexport const typeCasingNormal = \"none\";\nexport const typeCasingAllCaps = \"uppercase\";\nexport const typeCasingTitle = \"capitalize\";\nexport const textDecorationNone = \"none\";\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\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 baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","// extracted by mini-css-extract-plugin\nexport default {\"area\":\"ElevationChart--area--rQlaC\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { area } from 'd3-shape';\nimport styles from './area.module.scss';\n\nconst Area = ({ stream, xScale, yScale, height, clipPath, fill }) => {\n const formatData = stream.convertedElevation.map((elev, index) => ({\n elev,\n dist: stream.convertedDistance[index]\n }));\n\n const drawArea = area()\n .x((d) => xScale(d.dist))\n .y1((d) => yScale(d.elev))\n .y0(height);\n\n return (\n \n \n \n );\n};\n\nArea.propTypes = {\n xScale: PropTypes.func.isRequired,\n yScale: PropTypes.func.isRequired,\n height: PropTypes.number.isRequired,\n stream: PropTypes.shape().isRequired,\n clipPath: PropTypes.string,\n fill: PropTypes.string\n};\n\nArea.defaultProps = {\n clipPath: null,\n fill: 'rgba(100, 100, 100, 0.66)'\n};\n\nexport default Area;\n","// extracted by mini-css-extract-plugin\nexport default {\"axis\":\"ElevationChart--axis--kmMnQ\",\"yAxis\":\"ElevationChart--yAxis--ZTl9K\",\"xAxis\":\"ElevationChart--xAxis--Md58V\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { axisBottom, axisLeft } from 'd3-axis';\nimport { select } from 'd3-selection';\nimport styles from './axis.module.scss';\n\nclass Axis extends React.Component {\n xAxisNode = React.createRef();\n\n yAxisNode = React.createRef();\n\n componentDidMount() {\n this.drawAxes();\n }\n\n componentDidUpdate(prevProps) {\n const { scopeTo, width, xScale, yScale } = this.props;\n\n const hasScopeChanged =\n scopeTo &&\n (prevProps.scopeTo[0] !== scopeTo[0] ||\n prevProps.scopeTo[1] !== scopeTo[1]);\n\n const hasScaleChanged =\n !this.scalesAreEqual(xScale, prevProps.xScale) ||\n !this.scalesAreEqual(yScale, prevProps.yScale);\n\n const hasWidthChanged = prevProps.width !== width;\n\n if (hasScopeChanged || hasWidthChanged || hasScaleChanged) {\n this.drawAxes();\n }\n }\n\n scalesAreEqual = (scaleA, scaleB) => {\n return scaleA\n .domain()\n .every((domainElement) => scaleB.domain().includes(domainElement));\n };\n\n drawAxes() {\n const { xScale, yScale, width, formatters } = this.props;\n const { elevationFormatter, distanceFormatter } = formatters;\n const xAxis = axisBottom(xScale);\n const yAxis = axisLeft(yScale);\n const xTickCount = width > 480 ? 8 : 4;\n\n yAxis\n .ticks(4)\n .tickSize(-width)\n .tickFormat((e) =>\n // As e here is converted/formatted value we need to unconver it\n // so that the value does not get converted twice.\n elevationFormatter.formatShort(e / elevationFormatter.convert(1.0))\n );\n\n xAxis.ticks(xTickCount).tickFormat((d) =>\n // As d here is converted/formatted value we need to unconver it\n // so that the value does not get converted twice.\n distanceFormatter.formatShort(d / distanceFormatter.convert(1.0))\n );\n\n yAxis(select(this.yAxisNode.current));\n xAxis(select(this.xAxisNode.current));\n }\n\n render() {\n const { height } = this.props;\n\n return (\n <>\n \n \n \n );\n }\n}\n\nexport default Axis;\n\nAxis.propTypes = {\n xScale: PropTypes.func.isRequired,\n yScale: PropTypes.func.isRequired,\n height: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n formatters: PropTypes.shape().isRequired,\n scopeTo: PropTypes.arrayOf(PropTypes.number)\n};\n\nAxis.defaultProps = {\n scopeTo: null\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"group\":\"Tooltip--group--+mCJX\",\"infoBox\":\"Tooltip--infoBox--QnbSw\",\"value\":\"Tooltip--value--RmlpA\"};","import React, { useLayoutEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './styles.module.scss';\n\nconst Tooltip = ({ content, position, clipPath, chartWidth, chartMargin }) => {\n const textRef = useRef([]);\n const [boxWidth, setBoxWidth] = useState(120);\n const padding = 6;\n const lineHeight = 16;\n\n const rightBound = position + boxWidth + padding * 2;\n const currBoxAlign =\n rightBound >= chartWidth ? chartWidth - rightBound + padding : padding;\n\n useLayoutEffect(() => {\n if (textRef.current && Object.keys(content).length !== 0) {\n const widths = textRef.current.map(\n (el) => el.getBoundingClientRect().width\n );\n const maxWidth = Math.max(...widths);\n const newSize = Math.round(maxWidth + padding * 2);\n if (boxWidth !== newSize) {\n setBoxWidth(newSize);\n }\n }\n }, [content, boxWidth]);\n\n const InfoBox = () => {\n const keys = Object.keys(content);\n const contentLength = keys.length;\n const boxHeight = contentLength * lineHeight + padding + 2;\n\n return (\n \n \n {keys.map((stat, index) => {\n const contentItem = content[stat];\n\n function setRef(el) {\n textRef.current[index] = el;\n }\n\n return (\n \n {contentItem.label}\n \n {contentItem.value}\n \n \n );\n })}\n \n );\n };\n\n return (\n \n \n \n \n );\n};\n\nexport default Tooltip;\n\nTooltip.propTypes = {\n content: PropTypes.shape().isRequired,\n position: PropTypes.number.isRequired,\n clipPath: PropTypes.string.isRequired,\n chartWidth: PropTypes.number.isRequired,\n chartMargin: PropTypes.shape({\n top: PropTypes.number,\n right: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number\n }).isRequired\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"hitbox\":\"ElevationChart--hitbox--JJmeG\",\"marker\":\"ElevationChart--marker--dn-WA\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { scaleLinear } from 'd3-scale';\nimport { max, min, bisectLeft } from 'd3-array';\nimport { throttle } from 'lodash-es';\nimport { color } from '@strava/ui-tokens/js';\nimport Area from './Area';\nimport Axis from './Axis';\nimport Tooltip from './Tooltip';\nimport styles from './styles.module.scss';\n\nclass ElevationChart extends Component {\n state = {\n stream: null,\n xScale: null,\n yScale: null,\n height: 0,\n width: 0,\n markerPosition: this.props.margin.left,\n tooltipContent: {}\n };\n\n container = React.createRef();\n\n formatters = null;\n\n node = React.createRef();\n\n hitbox = React.createRef();\n\n handleResize = throttle(() => {\n this.buildScales();\n }, 250);\n\n componentDidMount() {\n window.addEventListener('resize', this.handleResize);\n this.updateFormatters();\n this.buildScales();\n }\n\n componentDidUpdate({\n elevation: prevElevation,\n distance: prevDistance,\n units: prevUnits\n }) {\n const { distance, elevation, units } = this.props;\n const elevationChanged = prevElevation.length !== elevation.length;\n const distanceChanged = prevDistance.length !== distance.length;\n const unitsChanged = prevUnits !== units;\n\n if (unitsChanged) {\n this.updateFormatters();\n }\n\n if (elevationChanged || distanceChanged || unitsChanged) {\n this.buildScales();\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n }\n\n // TODO: hover got really slow on long streams\n updateMarker = (e) => {\n const {\n onUpdateMarker,\n tooltipDistanceLabel,\n tooltipElevationLabel,\n tooltipGradeLabel\n } = this.props;\n const { xScale, stream } = this.state;\n const { elevationFormatter, distanceFormatter } = this.formatters;\n const bounds = this.hitbox.current.getBoundingClientRect();\n const cursorPosition = e.clientX - bounds.left;\n const markerPosition = cursorPosition;\n const distCursor = xScale.invert(cursorPosition);\n const streamIndex = bisectLeft(stream.convertedDistance, distCursor);\n\n const tooltipContent = {\n distance: {\n label: tooltipDistanceLabel,\n value: distanceFormatter.formatShort(stream.distance[streamIndex])\n },\n elevation: {\n label: tooltipElevationLabel,\n value: elevationFormatter.formatShort(stream.elevation[streamIndex])\n },\n grade: {\n label: tooltipGradeLabel,\n value: this.gradeAtIndex(streamIndex)\n }\n };\n\n onUpdateMarker(streamIndex, {\n // distCursor at this point will be in kilometers or miles so convert distance back to meters\n // as stream.distance is in meters so we want to be consistent\n distance: distCursor / distanceFormatter.convert(1)\n });\n\n this.setState({\n markerPosition,\n tooltipContent\n });\n };\n\n handleMouseLeave = (e) => {\n const { onUpdateMarker, onMouseLeave } = this.props;\n onUpdateMarker(null, { distance: null });\n onMouseLeave(e);\n };\n\n updateFormatters() {\n const { units, formatters } = this.props;\n\n this.formatters = {\n elevationFormatter: new formatters.ElevationFormatter(units),\n distanceFormatter: new formatters.DistanceFormatter(units),\n gradePercentFormatter: new formatters.PercentFormatter()\n };\n }\n\n buildScales() {\n const { margin, height: heightProp, elevation, distance } = this.props;\n const { elevationFormatter, distanceFormatter } = this.formatters;\n\n const convertedElevation = elevation.map((elev) =>\n elevationFormatter.convert(elev)\n );\n const convertedDistance = distance.map((dist) =>\n distanceFormatter.convert(dist)\n );\n\n const width =\n this.container.current.offsetWidth - margin.left - margin.right;\n const height = heightProp - margin.top - margin.bottom;\n const yMax = max(convertedElevation);\n const yMin = min(convertedElevation);\n const xScale = scaleLinear().range([0, width]);\n const yScale = scaleLinear().range([height, 0]);\n\n xScale.domain([0, max(convertedDistance)]);\n yScale.domain([yMin, yMax + yMax * 0.02]);\n\n this.setState({\n height,\n width,\n xScale,\n yScale,\n stream: { elevation, convertedElevation, distance, convertedDistance }\n });\n }\n\n gradeAtIndex(index) {\n // Taken from charts.js: 1689 but extending the window to 5 data points\n const { stream } = this.state;\n const { gradePercentFormatter } = this.formatters;\n const { elevation, distance } = stream;\n const maxIndex = distance.length - 1;\n const threshold = 2;\n\n let streamIndex = index;\n\n if (streamIndex < threshold) {\n streamIndex = threshold;\n }\n if (maxIndex - streamIndex < threshold) {\n streamIndex = maxIndex - threshold;\n }\n\n const distanceDiff =\n distance[streamIndex + threshold] - distance[streamIndex - threshold];\n const elevationDiff =\n elevation[streamIndex + threshold] - elevation[streamIndex - threshold];\n const grade = (elevationDiff * 100) / distanceDiff;\n\n return gradePercentFormatter.formatShort(grade);\n }\n\n scopeTo() {\n const { scopeTo } = this.props;\n const { stream, xScale, yScale } = this.state;\n\n if (!stream || !scopeTo) {\n return;\n }\n\n const start = scopeTo[0];\n const end = scopeTo[1];\n\n // Taken from directory/ElevationChart.js.coffee: 263\n const range = end - start;\n // the padding on each side of the selected area should ideally be\n // 1/3 of the area itself, but this can't be the case if the start\n // or the end are too close to the edges\n const padding = parseInt(range / 3, 10);\n const enoughSpaceAtStart = start - padding <= 0;\n const enoughSpaceAtEnd = end + padding > stream.distance.length - 1;\n\n const paddedStart = enoughSpaceAtStart\n ? parseInt(start / 3, 10)\n : start - padding;\n\n const paddedEnd = enoughSpaceAtEnd\n ? parseInt(end + (stream.distance.length - 1 - end) / 3, 10)\n : end + padding;\n\n xScale.domain([\n stream.convertedDistance[paddedStart],\n stream.convertedDistance[paddedEnd]\n ]);\n\n const croppedElevationStream = stream.convertedElevation.slice(\n paddedStart,\n paddedEnd + 1\n );\n const yMax = max(croppedElevationStream);\n const yMin = min(croppedElevationStream);\n\n yScale.domain([yMin, yMax + yMax * 0.02]);\n }\n\n render() {\n const { margin, scopeTo, scopeColor, highlightArea, highlightAreaColor } =\n this.props;\n const {\n stream,\n xScale,\n yScale,\n width,\n height,\n markerPosition,\n tooltipContent\n } = this.state;\n\n if (scopeTo) this.scopeTo();\n\n return (\n
\n {height > 0 && width > 0 && (\n \n \n \n\n \n\n {scopeTo && (\n \n )}\n\n {highlightArea && (\n \n )}\n\n \n \n \n\n \n \n \n \n \n \n )}\n
\n );\n }\n}\n\nElevationChart.propTypes = {\n height: PropTypes.number.isRequired,\n elevation: PropTypes.arrayOf(PropTypes.number).isRequired,\n distance: PropTypes.arrayOf(PropTypes.number).isRequired,\n units: PropTypes.string.isRequired,\n margin: PropTypes.shape({\n top: PropTypes.number.isRequired,\n right: PropTypes.number.isRequired,\n bottom: PropTypes.number.isRequired,\n left: PropTypes.number.isRequired\n }),\n scopeTo: PropTypes.arrayOf(PropTypes.number),\n scopeColor: PropTypes.string,\n highlightArea: PropTypes.arrayOf(PropTypes.number),\n highlightAreaColor: PropTypes.string,\n onUpdateMarker: PropTypes.func,\n onMouseLeave: PropTypes.func,\n formatters: PropTypes.shape().isRequired,\n tooltipDistanceLabel: PropTypes.string,\n tooltipElevationLabel: PropTypes.string,\n tooltipGradeLabel: PropTypes.string\n};\n\nElevationChart.defaultProps = {\n margin: {\n top: 10,\n right: 24,\n bottom: 20,\n left: 45\n },\n scopeTo: null,\n scopeColor: 'rgb(23, 90, 189)',\n highlightArea: null,\n highlightAreaColor: color.colorCoreO3,\n onUpdateMarker: () => null,\n onMouseLeave: () => null,\n tooltipDistanceLabel: 'Distance',\n tooltipElevationLabel: 'Elevation',\n tooltipGradeLabel: 'Grade'\n};\n\nexport default ElevationChart;\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","Symbol","array","iteratee","index","length","result","Array","isArray","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","getRawTag","objectToString","isObjectLike","baseGetTag","symbolProto","symbolToString","baseToString","arrayMap","isSymbol","args","arguments","string","replace","appendScriptToBody","_ref","script","name","logError","document","querySelector","appendChild","Error","useApple","state","useEffect","_ref3","locale","window","AppleID","createElement","formattedLocale","src","async","injectAppleScript","signin","stravaInit","auth","init","clientId","scope","redirectURI","signIn","SvgActionsCancelNormalSmall","React","ref","color","size","title","titleId","props","fill","xmlns","viewBox","width","height","id","d","defaultProps","propTypes","PropTypes","echelon","require","AUTH_BUTTONS","GOOGLE","APPLE","FACEBOOK","className","authorizationUrls","appleState","category","track","_track","useStravaAnalytics","t","useStravaTranslations","useStravaErrorLogging","appleSignin","isSignUpModalOpen","dismissSignUpModal","variant","copyParams","athleteAvatar","useSignUpModalContext","useCallback","fields","page","properties","copy_variant","action","sessionStorage","getItem","HIDE_TIME_DELAY_MODAL","setItem","AlertProvider","Modal","isOpen","onDismiss","styles","ModalBody","clsx","LinkButton","href","onClick","element","Button","type","VisuallyHidden","ActionsCancelNormalSmall","Avatar","alt","Markup","content","noWrap","AlertContainer","containerId","EMAIL_REGISTRATION_FORM_ALERT_ID","map","option","AccountAuthButton","location","assign","handleExtAuthBtnClick","key","OrDivider","text","theme","EmailRegistrationForm","_extends","authorizationUrl","email","idPrefix","alertConfig","contentPosition","DisclaimerText","SignUpModalContext","createContext","displayName","context","useContext","SignUpModalContextProvider","children","nameForFollowAthleteVariant","redirectVariants","setIsSignUpModalOpen","useState","setVariant","openSignUpModal","_variant","includes","apiClient","put","catch","error","providerState","useMemo","generic","generic_time_delayed","follow_athlete","join_challenge","kudos_comment","Provider","SvgAchievementsTrophyNormalSmall","SvgActionsCommentNormalSmall","SvgActionsKudoNormalSmall","SvgActionsLockClosedNormalXsmall","fillRule","clipRule","fontWeightDemi","root","Date","now","reWhitespace","test","charAt","reTrimStart","slice","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isObject","other","valueOf","baseTrim","isBinary","nativeMax","Math","max","nativeMin","min","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","this","clearTimeout","toNumber","cancel","flush","debounce","Area","stream","xScale","yScale","clipPath","formatData","convertedElevation","elev","dist","convertedDistance","drawArea","area","x","y1","y0","isRequired","Axis","xAxisNode","yAxisNode","componentDidMount","drawAxes","componentDidUpdate","prevProps","scopeTo","hasScopeChanged","hasScaleChanged","scalesAreEqual","hasWidthChanged","scaleA","scaleB","domain","every","domainElement","formatters","elevationFormatter","distanceFormatter","xAxis","axisBottom","yAxis","axisLeft","xTickCount","ticks","tickSize","tickFormat","formatShort","convert","select","current","render","transform","Tooltip","position","chartWidth","chartMargin","textRef","useRef","boxWidth","setBoxWidth","rightBound","padding","currBoxAlign","useLayoutEffect","keys","widths","el","getBoundingClientRect","maxWidth","newSize","round","InfoBox","boxHeight","infoBox","y","stat","contentItem","dy","label","dx","group","marker","top","y2","x1","x2","right","bottom","left","ElevationChart","Component","markerPosition","margin","tooltipContent","container","node","hitbox","handleResize","throttle","buildScales","addEventListener","updateFormatters","elevation","prevElevation","distance","prevDistance","units","prevUnits","elevationChanged","distanceChanged","unitsChanged","componentWillUnmount","removeEventListener","updateMarker","onUpdateMarker","tooltipDistanceLabel","tooltipElevationLabel","tooltipGradeLabel","bounds","cursorPosition","clientX","distCursor","invert","streamIndex","bisectLeft","grade","gradeAtIndex","setState","handleMouseLeave","onMouseLeave","ElevationFormatter","DistanceFormatter","gradePercentFormatter","PercentFormatter","heightProp","offsetWidth","yMax","yMin","scaleLinear","range","maxIndex","distanceDiff","start","end","enoughSpaceAtStart","enoughSpaceAtEnd","paddedStart","paddedEnd","croppedElevationStream","scopeColor","highlightArea","highlightAreaColor","onMouseMove"],"sourceRoot":""}