{"version":3,"file":"js/83359-5f47af9eecd97fe661d5.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelNormalXsmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/clsx/clsx.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Button/styles.module.scss?d091","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Button/Button.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Modal/Modal.module.scss?1805","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Modal/Modal.tsx","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/ui/Button/LinkButton.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/AccountAuthButton/AccountAuthButton.module.scss?771e","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/AccountAuthButton/AccountAuthButton.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/OrDivider/OrDivider.module.scss?37b1","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/OrDivider/OrDivider.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isNil.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Spinner/Spinner.module.scss?04df","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Spinner/Spinner.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelCircleHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCheckCircleOnMedium.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationWarningHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationInformationNormalMedium.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/react-hooks/src/use-interval/useInterval.hook.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/VisuallyHidden/VisuallyHidden.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/Alert.module.scss?0112","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/Alert.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/react-hooks/src/use-queue/useQueue.hook.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/constants/src/appConstants.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/utils/src/utils.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/AlertProvider/AlertContext.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.module.scss?191d","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/constants.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/Input.module.scss?39a2","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/Input.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsVisibleDisabledNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsVisibleNormalSmall.js","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/PasswordInput.module.scss?488e","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/@strava/ui/Input/PasswordInput.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/RegistrationInput/RegistrationInput.module.scss?70f3","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/RegistrationInput/RegistrationInput.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/EmailRegistrationForm.module.scss?ddf9","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/EmailRegistrationForm.tsx","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/utils.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/EmailRegistrationForm/email-registration-api.ts","webpack://StravaModern/../src/Element.tsx","webpack://StravaModern/../src/Filter.ts","webpack://StravaModern/../src/constants.ts","webpack://StravaModern/../src/StyleFilter.ts","webpack://StravaModern/../src/Parser.ts","webpack://StravaModern/../src/Interweave.tsx","webpack://StravaModern/../src/Markup.tsx","webpack://StravaModern/../src/Matcher.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/DisclaimerText/DisclaimerText.module.scss?86ce","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/DisclaimerText/DisclaimerText.tsx","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/node_modules/@strava/react-hooks/src/use-safe-state/useSafeState.hook.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationProfileHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/BadgesMulticolorSuperuserSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/BadgesMulticolorSummitSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/BadgesMulticolorProSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/BadgesMulticolorVerifiedSmall.js","webpack://StravaModern/./node_modules/@strava/ui/Avatar/Avatar.module.scss?3ebc","webpack://StravaModern/./node_modules/@strava/ui/Avatar/Avatar.tsx","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","webpack://StravaModern/./node_modules/@strava/ui/Stat/Stat.module.scss?3051","webpack://StravaModern/./node_modules/@strava/ui/Stat/Stat.tsx","webpack://StravaModern/./node_modules/@strava/ui/Stats/styles.module.scss?4754","webpack://StravaModern/./node_modules/@strava/ui/Stats/index.js","webpack://StravaModern/./node_modules/email-validator/index.js","webpack://StravaModern/./node_modules/react-google-recaptcha/lib/esm/recaptcha.js","webpack://StravaModern/./node_modules/react-async-script/lib/esm/async-script-loader.js","webpack://StravaModern/./node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js","webpack://StravaModern/./node_modules/react-google-recaptcha/lib/esm/index.js"],"sourcesContent":["import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCancelNormalXsmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCancelNormalXsmall.defaultProps = {\n color: \"currentColor\",\n size: 16,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCancelNormalXsmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCancelNormalXsmall;\n","type Value = string | number | boolean | undefined | null;\ntype MixObject = {\n [key: string]: boolean | Mix | undefined | null;\n};\ntype MixArray = Array;\ntype Mix = Value | MixObject | MixArray;\n\nfunction toVal(mix: Mix): string {\n let k,\n y,\n str = '';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((y = toVal(mix[k]))) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (k in mix) {\n if (!mix || mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n}\n\nexport function clsx(..._args: Mix[]): string {\n let i = 0,\n tmp,\n x,\n str = '';\n\n while (i < arguments.length) {\n if ((tmp = arguments[i++])) {\n if ((x = toVal(tmp))) {\n str && (str += ' ');\n str += x;\n }\n }\n }\n return str;\n}\n\nexport default clsx;\n","// extracted by mini-css-extract-plugin\nexport default {\"btn\":\"Button--btn--lX4Ls\",\"default\":\"Button--default--ER8dt\",\"primary\":\"Button--primary--DWV0L\",\"primaryOutline\":\"Button--primaryOutline--LGvNu\",\"secondary\":\"Button--secondary--pQIfR\",\"icon\":\"Button--icon--uoTwf\",\"text\":\"Button--text--PfSkJ\"};","import React from 'react';\nimport clsx from 'clsx';\n\nimport styles from './styles.module.scss';\n\nexport interface ButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n children: React.ReactNode;\n variant?:\n | 'default'\n | 'primary'\n | 'primaryOutline'\n | 'secondary'\n | 'icon'\n | 'text';\n className?: string;\n}\n\nconst Button = React.forwardRef(\n ({ children, className, variant = 'default', ...props }, ref) => (\n \n {children}\n \n )\n);\n\nexport default Button;\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"Modal--overlay--GkM4h\",\"dialog\":\"Modal--dialog--2tiSj\",\"closeButton\":\"Modal--closeButton--gpZuz\",\"title\":\"Modal--title--y0Ij1\",\"heroImage\":\"Modal--heroImage--OpAwK\",\"body\":\"Modal--body--Nc649\",\"actions\":\"Modal--actions--q4RLx\"};","import React from 'react';\nimport {\n DialogOverlay,\n DialogOverlayProps,\n DialogContent,\n DialogContentProps\n} from '@reach/dialog';\nimport ActionsCancelNormalXsmall from '@strava/icons/ActionsCancelNormalXsmall';\nimport clsx from '../clsx';\nimport { color as colors } from '@strava/ui-tokens/js';\nimport Button from '../Button/Button';\n\nimport styles from './Modal.module.scss';\nimport './ReachUI.css';\n\n//\n// ModalOverlay\n//\n// Reach UI docs: https://reach.tech/dialog/#dialogoverlay\n// --------------------\n\nexport interface ModalOverlayProps\n extends DialogOverlayProps,\n React.ComponentPropsWithoutRef<'div'> {\n className?: string;\n}\n\nexport function ModalOverlay({\n className,\n children,\n ...otherProps\n}: ModalOverlayProps) {\n return (\n \n {children}\n \n );\n}\n\n//\n// ModalContent\n//\n// Reach UI docs: https://reach.tech/dialog/#dialogcontent\n// --------------------\n\nexport interface ModalContentProps\n extends DialogContentProps,\n React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nexport function ModalContent({\n className,\n children,\n ...otherProps\n}: ModalContentProps) {\n return (\n \n {children}\n \n );\n}\n\n//\n// ModalTitle\n// --------------------\n\nexport interface ModalTitleProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function ModalTitle({\n className,\n children,\n ...otherProps\n}: ModalTitleProps) {\n return (\n

\n {children}\n

\n );\n}\n\n//\n// ModalActions\n// --------------------\n\nexport interface ModalActionsProps\n extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function ModalActions({\n className,\n children,\n ...otherProps\n}: ModalActionsProps) {\n return (\n
\n {children}\n
\n );\n}\n\n//\n// ModalHeroImage\n// --------------------\n\nexport interface ModalHeroImageProps\n extends React.ComponentPropsWithoutRef<'img'> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function ModalHeroImage({\n className,\n src,\n alt,\n ...otherProps\n}: ModalHeroImageProps) {\n return (\n \n );\n}\n\n//\n// ModalBody\n// --------------------\n\nexport interface ModalBodyProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function ModalBody({ className, ...otherProps }: ModalBodyProps) {\n return
;\n}\n\n//\n// ModalCloseButton\n// --------------------\n\nexport interface ModalCloseButtonProps\n extends React.ComponentPropsWithoutRef<'button'> {\n className?: string;\n color?: string;\n}\n\nexport function ModalCloseButton({\n className,\n color,\n ...otherProps\n}: ModalCloseButtonProps) {\n return (\n \n );\n}\n\n//\n// Modal\n// --------------------\n\nexport interface ModalProps extends React.ComponentPropsWithoutRef<'div'> {\n className?: string;\n isOpen?: boolean;\n onDismiss?: () => void;\n hasClose?: boolean;\n children: React.ReactNode;\n initialFocusRef?: React.RefObject;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nfunction Modal({\n className,\n isOpen = false,\n onDismiss,\n hasClose,\n children,\n initialFocusRef,\n ...otherProps\n}: ModalProps) {\n return (\n \n \n {hasClose && (\n \n )}\n {children}\n \n \n );\n}\n\n// Adding support to use the compound component pattern and have backwards\n// compatibility with the existing pattern. To learn more read,\n// https://www.smashingmagazine.com/2021/08/compound-components-react/\nModal.Overlay = ModalOverlay;\nModal.Content = ModalContent;\nModal.Title = ModalTitle;\nModal.Actions = ModalActions;\nModal.HeroImage = ModalHeroImage;\nModal.Body = ModalBody;\nModal.CloseButton = ModalCloseButton;\n\nexport default Modal;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import toString from './toString.js';\n\n/**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\nfunction replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n}\n\nexport default replace;\n","import { replace } from 'lodash-es';\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 clsx from 'clsx';\nimport React, { ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport styles from './styles.module.scss';\nimport { ButtonProps } from './Button';\n\nexport type LinkButtonProps = ButtonProps & ComponentPropsWithoutRef<'a'>;\n\nconst LinkButton = forwardRef(\n ({ href, children, className, variant = 'default', ...otherProps }, ref) => {\n return (\n \n {children}\n \n );\n }\n);\n\nexport default LinkButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"authButton\":\"AccountAuthButton--authButton--yFnD+\",\"placeholder\":\"AccountAuthButton--placeholder--JAgxq\",\"facebookBlue\":\"AccountAuthButton--facebookBlue--eWNdO\"};","import React, { ReactNode } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport Button from '@strava/ui/Button';\nimport styles from './AccountAuthButton.module.scss';\n\nconst AppleLogo = React.lazy(() => import('@strava/icons/LogosAppleSmall'));\nconst FacebookLogo = React.lazy(\n () => import('@strava/icons/LogosFacebookSmall')\n);\nconst GoogleLogo = React.lazy(() => import('@strava/icons/LogosGoogleSmall'));\nconst EmailLogo = React.lazy(\n () => import('@strava/icons/ActionsEmailNormalSmall')\n);\n\nexport type AuthButtonVariantTypes =\n | 'apple'\n | 'email'\n | 'facebook'\n | 'facebook-blue' // ironically corresponds to the lighter version of the icon\n | 'google';\n\ntype AccountAuthButtonProps = {\n children: ReactNode;\n className?: string;\n variant?: AuthButtonVariantTypes;\n onClick?: () => void;\n};\n\nconst AccountAuthButton = ({\n children,\n onClick,\n variant,\n className,\n ...options\n}: AccountAuthButtonProps) => {\n return (\n \n }>\n {variant === 'apple' && }\n {variant === 'facebook' && }\n {variant === 'facebook-blue' && }\n {variant === 'google' && }\n {variant === 'email' && }\n \n {children}\n \n );\n};\n\nexport default AccountAuthButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"orDivider\":\"OrDivider--orDivider--X6SS0\",\"or\":\"OrDivider--or--rdcMJ\",\"light\":\"OrDivider--light--BPhFE\",\"line\":\"OrDivider--line--LX6dD\"};","import React from 'react';\nimport clsx from '@strava/ui/clsx';\n\nimport styles from './OrDivider.module.scss';\nimport { ThemeTypes } from '..';\n\ninterface OrDividerProps {\n text: string;\n theme?: ThemeTypes;\n className?: string;\n}\n\nexport const OrDivider = ({\n text,\n theme = 'dark',\n className\n}: OrDividerProps) => {\n return (\n
\n
\n {text}\n
\n
\n );\n};\n\nexport default OrDivider;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","// extracted by mini-css-extract-plugin\nexport default {\"spinner\":\"Spinner--spinner--OPlEZ\",\"graphic\":\"Spinner--graphic--FY9vz\",\"spin\":\"Spinner--spin--AJhwi\"};","import React from 'react';\nimport clsx from '../clsx';\n\nimport styles from './Spinner.module.scss';\n\nexport type SpinnerProps = {\n color?: 'default' | 'white';\n size?: number;\n};\n\nconst Spinner = ({ color = 'default', size = 20 }: SpinnerProps) => (\n \n \n \n);\n\nexport default Spinner;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCancelCircleHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCancelCircleHighlightedMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCancelCircleHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCancelCircleHighlightedMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCheckCircleOnMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCheckCircleOnMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCheckCircleOnMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCheckCircleOnMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgNavigationWarningHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgNavigationWarningHighlightedMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgNavigationWarningHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgNavigationWarningHighlightedMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgNavigationInformationNormalMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgNavigationInformationNormalMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgNavigationInformationNormalMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgNavigationInformationNormalMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsCancelNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgActionsCancelNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsCancelNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsCancelNormalSmall;\n","import { useRef, useEffect } from 'react';\n\n/**\n * Declarative setInterval React hook.\n *\n * `useInterval` uses the same API as setInterval, but the arguments of this hook is \"dynamic\".\n * Set your `callback` function as the first argument and the `delay` as the second argument.\n * When passing `null` or `undefined` to the `delay` arg then it will stop/pause the interval.\n *\n * For implementation details explanation, why to use useInterval hook, and an example see Dan Abramov's blog post\n * 👀: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n * */\nexport const useInterval = (callback, delay) => {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n // If no delay then pause/stop the interval.\n // Delay of 0 is valid delay.\n if ((!delay && delay !== 0) || delay < 0) {\n return;\n }\n\n const id = setInterval(() => savedCallback.current(), delay);\n // eslint-disable-next-line consistent-return\n return () => clearInterval(id);\n }, [delay]);\n};\n\nexport default useInterval;\n","import React, { forwardRef } from 'react';\n\ntype VisuallyHiddenProps = React.ComponentPropsWithoutRef<'span'>;\n\n// visually hidden styling comes from https://www.a11yproject.com/posts/how-to-hide-content/\nconst VisuallyHidden = forwardRef(\n ({ style, ...props }, ref) => {\n return (\n \n );\n }\n);\n\nexport default VisuallyHidden;\n","// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"Alert--alert--iOdtn\",\"alertInner\":\"Alert--alertInner--Mjc7q\",\"hasError\":\"Alert--hasError--1Ma8H\",\"buttonError\":\"Alert--buttonError--Ff1z0\",\"hasWarning\":\"Alert--hasWarning--geWBH\",\"buttonWarning\":\"Alert--buttonWarning--2sINi\",\"hasSuccess\":\"Alert--hasSuccess--N2CRK\",\"buttonSuccess\":\"Alert--buttonSuccess--AYYRS\",\"hasInfo\":\"Alert--hasInfo--dEbnt\",\"buttonInfo\":\"Alert--buttonInfo--u44ZF\",\"alertContent\":\"Alert--alertContent--cUEzn\",\"alignLeft\":\"Alert--alignLeft--DaObf\",\"alignCenter\":\"Alert--alignCenter--MGnUV\",\"alignRight\":\"Alert--alignRight--YXRfR\",\"indicatorIcon\":\"Alert--indicatorIcon--lO0U4\",\"closeButtonContainer\":\"Alert--closeButtonContainer--KhDOl\",\"button\":\"Alert--button--WGSkY\",\"autoDismissBar\":\"Alert--autoDismissBar--qlBCw\",\"countdown\":\"Alert--countdown--dEv3D\",\"fadeIn\":\"Alert--fadeIn--irfCa\",\"fadeOut\":\"Alert--fadeOut--Eh8MR\",\"enterFadeOut\":\"Alert--enterFadeOut--NGuVy\",\"newKudo\":\"Alert--newKudo--K8pWr\"};","import React, { ComponentPropsWithoutRef, ReactNode, useState } from 'react';\n// import ReachAlert from '@reach/alert';\nimport {\n ActionsCancelCircleHighlightedMedium as ErrorIcon,\n ActionsCheckCircleOnMedium as SuccessIcon,\n NavigationWarningHighlightedMedium as WarningIcon,\n NavigationInformationNormalMedium as InfoIcon,\n ActionsCancelNormalSmall as CancelIcon\n} from '@strava/icons';\nimport { useInterval } from '@strava/react-hooks';\nimport { isTest } from '@strava/utils';\nimport clsx from '../clsx';\nimport VisuallyHidden from '../VisuallyHidden';\nimport styles from './Alert.module.scss';\n\nexport const AlertStatus = {\n ERROR: 'error',\n SUCCESS: 'success',\n WARNING: 'warning',\n INFO: 'info'\n} as const;\n\nexport type AlertStatusType = (typeof AlertStatus)[keyof typeof AlertStatus];\n\nexport type AlertStyleType =\n | 'hasError'\n | 'hasSuccess'\n | 'hasWarning'\n | 'hasInfo';\nexport type AlertButtonStyleType =\n | 'buttonError'\n | 'buttonSuccess'\n | 'buttonWarning'\n | 'buttonInfo';\n\nconst ALERT_DELAY = 8000;\n\nconst getAlertDetails = ({\n type,\n iconSize\n}: {\n type: AlertStatusType;\n iconSize: number;\n}): {\n indicatorIcon: ReactNode;\n messageType: AlertStatusType;\n alertStyle: AlertStyleType;\n buttonStyle: AlertButtonStyleType;\n} =>\n ({\n [AlertStatus.ERROR]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.ERROR,\n alertStyle: 'hasError' as const,\n buttonStyle: 'buttonError' as const\n },\n [AlertStatus.SUCCESS]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.SUCCESS,\n alertStyle: 'hasSuccess' as const,\n buttonStyle: 'buttonSuccess' as const\n },\n [AlertStatus.WARNING]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.WARNING,\n alertStyle: 'hasWarning' as const,\n buttonStyle: 'buttonWarning' as const\n },\n [AlertStatus.INFO]: {\n indicatorIcon: (\n \n ),\n messageType: AlertStatus.INFO,\n alertStyle: 'hasInfo' as const,\n buttonStyle: 'buttonInfo' as const\n }\n }[type]);\n\nconst fadeStyles = {\n enter: isTest() ? '' : 'fadeIn',\n exit: isTest() ? '' : 'fadeOut'\n};\n\nexport interface AlertProps extends ComponentPropsWithoutRef<'div'> {\n children: ReactNode;\n alertType?: AlertStatusType;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n className?: string;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport const Alert = ({\n children,\n className,\n alertType = AlertStatus.ERROR,\n autoDismiss = false,\n autoDismissDelay = ALERT_DELAY,\n contentPosition = 'left',\n hideCloseButton = false,\n hideIcon = true,\n iconSize = 32,\n onClose = () => {},\n ...options\n}: AlertProps) => {\n const { indicatorIcon, messageType, alertStyle, buttonStyle } =\n getAlertDetails({ type: alertType, iconSize });\n const [fadeStyle, setFadeStyle] = useState(fadeStyles.enter);\n\n const handleOnClose = async () => {\n setFadeStyle(fadeStyles.exit);\n // eslint-disable-next-line no-unused-expressions\n !isTest() && (await new Promise((resolve) => setTimeout(resolve, 0)));\n onClose();\n };\n\n useInterval(\n () => {\n handleOnClose();\n },\n autoDismiss ? autoDismissDelay : null\n );\n\n return (\n \n
\n {/* Icon */}\n {!hideIcon && (\n
{indicatorIcon}
\n )}\n\n {/* Content */}\n \n {messageType}: \n
{children}
\n
\n\n {/* Close Button */}\n {!hideCloseButton && (\n
\n \n \n \n
\n )}\n
\n\n {/* Auto Dismiss Progress */}\n {autoDismiss && (\n \n
\n
\n )}\n
\n );\n};\n\nexport default Alert;\n","import { useState, useCallback } from 'react';\n\nexport const useQueue = ({ initialValues = [] }) => {\n const [queue, setState] = useState(initialValues);\n\n /**\n * Enqueue; Adds item to queue.\n */\n const enqueue = useCallback((...items) => {\n setState((current) => [...current, ...items]);\n }, []);\n\n /**\n * Dequeue; Removes first item in queue.\n */\n const dequeue = useCallback(() => {\n // Immutable solution to remove first element in array.\n setState((current) => current.slice(1));\n }, []);\n\n /**\n * Update function to allow for more granular control of updating the queue.\n * The `update` function accepts a callback fn where the first arg is the\n * current queue state that we can then manipulate. See tests for examples.\n * */\n const updateQueue = useCallback(\n (fn) => setState((current) => fn([...current])),\n []\n );\n\n /**\n * Remove all items from queue.\n */\n const clearQueue = useCallback(() => setState(() => []), []);\n\n /**\n * Returns the first item in the queue.\n */\n const peek = useCallback(() => {\n if (queue.length > 0) {\n return queue[0];\n }\n\n return undefined;\n }, [queue]);\n\n return {\n queue,\n length: queue.length,\n enqueue,\n dequeue,\n updateQueue,\n clearQueue,\n peek\n };\n};\n\nexport default useQueue;\n","export const YOUNGEST_AGE_ON_PLATFORM = 13;\n\nexport const YOUNGEST_AGE_FOR_HEALTH_AND_PROMO = 16;\n\nexport const GENDER = Object.freeze({\n man: 'man',\n woman: 'woman',\n preferNotSay: 'prefer_not_say',\n nonBinary: 'nonbinary'\n});\n\nexport const LOCALE = Object.freeze({\n deDE: 'de-DE',\n enUS: 'en-US',\n enGB: 'en-GB',\n esES: 'es-ES',\n es419: 'es-419',\n frFR: 'fr-FR',\n itIT: 'it-IT',\n jaJP: 'ja-JP',\n koKR: 'ko-KR',\n nlNL: 'nl-NL',\n ptBR: 'pt-BR',\n ptPT: 'pt-PT',\n ruRU: 'ru-RU',\n zhCN: 'zh-CN',\n zhTW: 'zh-TW'\n});\n\n// If a language has more than one locale, the first in the list is the default\nexport const LANGUAGE_LOCALES = Object.freeze({\n de: [LOCALE.deDE],\n // en is intentionally omitted here since English is the global default\n es: [LOCALE.esES, LOCALE.es419],\n fr: [LOCALE.frFR],\n it: [LOCALE.itIT],\n ja: [LOCALE.jaJP],\n ko: [LOCALE.koKR],\n nl: [LOCALE.nlNL],\n pt: [LOCALE.ptPT, LOCALE.ptBR],\n ru: [LOCALE.ruRU],\n zh: [LOCALE.zhCN, LOCALE.zhTW]\n});\n\nexport const EXPERIMENT_COHORTS = Object.freeze({\n control: 'control',\n variantA: 'variant-a',\n variantB: 'variant-b'\n});\n\nexport const MOBILE_OS = Object.freeze({\n android: 'android',\n iPhone: 'iphone',\n iPad: 'ipad'\n});\n\nexport const SUPPORTED_BROWSERS = Object.freeze({\n chrome: 'chrome',\n firefox: 'firefox',\n safari: 'safari'\n});\n\n// universal link paths from 'apple-app-site-association' file in active\nexport const APPLE_APP_LINK_PATHS = [\n '/dashboard',\n '/activities/*',\n '/athletes/*',\n '/segments/*',\n '/challenges/*',\n '/videos/*',\n '/routes/*',\n '/premium/*',\n '/settings/*',\n '/shop/*',\n '/athlete/*',\n '/clubs/*',\n '/summit/join',\n '/summit/perks',\n '/oauth/mobile/authorize'\n];\n\nexport const ATHLETES_VISIBILITY = Object.freeze({\n optedOut: 'opted_out' // Strava::Athletes::Visibility::OPTED_OUT\n});\n\nexport default {\n YOUNGEST_AGE_ON_PLATFORM,\n YOUNGEST_AGE_FOR_HEALTH_AND_PROMO,\n GENDER,\n LOCALE,\n EXPERIMENT_COHORTS,\n MOBILE_OS,\n SUPPORTED_BROWSERS,\n APPLE_APP_LINK_PATHS,\n ATHLETES_VISIBILITY\n};\n","import {\n MOBILE_OS,\n SUPPORTED_BROWSERS,\n APPLE_APP_LINK_PATHS\n} from '@strava/constants/src/appConstants';\nimport { isString } from 'lodash-es';\nimport camelCase from 'lodash-es/camelCase';\nimport snakeCase from 'lodash-es/snakeCase';\nimport isObject from 'lodash-es/isObject';\nimport { CamelCasedPropertiesDeep, SnakeCasedPropertiesDeep } from 'type-fest';\n\nexport const generateRandomId = () => Math.random().toString(36).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'\nexport const titleize = (sentence: string) => {\n return sentence\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\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(firstName.substring(0, maxLength - 4))}... ${lastName\n .charAt(0)\n .toUpperCase()}.`;\n }\n return `${titleize(firstName)} ${lastName.charAt(0).toUpperCase()}.`;\n }\n return fullName.trim();\n};\n\n/**\n * Checks to see if device is mobile\n * @param {string} userAgent - user agent string for the current browser. For next-js apps (SSR),\n * this value can be retrieved from request.headers['user-agent']\n * @returns {boolean} - true if the device is mobile\n */\nexport const isMobile = (userAgent = window?.navigator?.userAgent) => {\n if (isString(userAgent)) {\n // ref - https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent#mobile_tablet_or_desktop\n return userAgent.toLowerCase().includes('mobi');\n }\n return false;\n};\n\n/**\n * Determines the OS for mobile devices\n * @param {string} userAgent - user agent string for the current browser. For next-js apps (SSR),\n * this value can be retrieved from request.headers['user-agent']\n * @returns {(string|null)} - one of ['android', 'ipad', 'iphone'] or null for unknown\n */\nexport const getMobileOS = (userAgent = window?.navigator?.userAgent) => {\n if (isString(userAgent)) {\n if (userAgent.includes('Android')) {\n return MOBILE_OS.android;\n }\n if (userAgent.includes('iPad')) {\n return MOBILE_OS.iPad;\n }\n if (userAgent.includes('iPhone')) {\n return MOBILE_OS.iPhone;\n }\n }\n return null;\n};\n\n/**\n * Determines, in a limited fashion, the browser according to the user agent.\n * NOTE: UAs are notoriously difficult to parse. This is meant as a bare-bones, noncomprehensive parser,\n * based on https://www.whatismybrowser.com/guides/the-latest-user-agent/.\n *\n * The order of conditionals is important, bc some Chrome & Firefox UAs include 'Safari', too.\n * Some Edge UAs may be recognized as Chrome for now, since they can include 'Chrome'. We don't\n * officially support Edge (yet?).\n *\n * @param {string} userAgent - user agent string for the current browser. For next-js apps (SSR),\n * this value can be retrieved from request.headers['user-agent']\n * @returns {(string|null)} - one of ['chrome', 'firefox', 'safari'] or null for unknown/unsupported browser\n */\nexport const getBrowser = (userAgent = window?.navigator?.userAgent) => {\n if (isString(userAgent)) {\n if (userAgent.includes('Chrome') || userAgent.includes('CriOS')) {\n return SUPPORTED_BROWSERS.chrome;\n }\n if (userAgent.includes('Firefox') || userAgent.includes('FxiOS'))\n return SUPPORTED_BROWSERS.firefox;\n if (userAgent.includes('Safari')) {\n return SUPPORTED_BROWSERS.safari;\n }\n }\n\n return null;\n};\n\n/**\n * Universal links are determined by the paths described in `apple-app-site-association` in active.\n * @param {string} pathname - window.location.pathname or nextjs equivalent\n * @returns {boolean} - whether the pathname string matches\n */\nexport const isUniversalLinkPage = (pathname: string) => {\n if (isString(pathname)) {\n return APPLE_APP_LINK_PATHS.some((path: string) => {\n const pathWithoutAsterisk = path.replace('/*', '');\n return pathname.startsWith(pathWithoutAsterisk);\n });\n }\n return false;\n};\n\n// eg. given,\n// \"urls\": {\n// \"100\": \"https://photo_url_1\",\n// \"1800\": \"https://photo_url_2\"\n// }\n// returns https://photo_url_2\nexport const getPhotoWithMaxDimension = (\n photoUrlHash: Record\n) => {\n if (!isObject(photoUrlHash)) {\n return '';\n }\n const key = Object.keys(photoUrlHash).reduce((a, b) => (a > b ? a : b));\n return photoUrlHash[key];\n};\n\n/**\n * Immutably merges a payload into an item in an array of objects\n * @param {array} array - An array of objects\n * @param {string|number} id - The unique id of the item in the array to update\n * @param {object} payload - the value to merge into the matched item\n * @param {object} options\n * @param {string} [options.idName=id] - the key of the unique identifier\n * @param {bool} [options.upsert=false] - if true, will insert the payload into the array as a new item if no matching item is found\n * @return {array} - A copy of the original array with the matching item updated\n */\nexport function arrayUpdateItemById(\n array: T[],\n id: string | number,\n payload: Partial,\n { idName, upsert }: { idName?: keyof T; upsert?: boolean } = {}\n): T[] {\n let itemFound = false;\n const property = idName || ('id' as keyof T);\n const mappedArray = array.map((item) => {\n itemFound = itemFound || item[property] === id;\n return item[property] === id ? { ...item, ...payload } : item;\n });\n\n return itemFound || !upsert ? mappedArray : ([...array, payload] as T[]);\n}\n\n/**\n * Immutably removes an item from an array by index\n * @param {array} array\n * @param {number} index - the index of the item to remove\n * @return {array} - A copy of the original array with the matching item removed\n */\nexport function arrayRemoveByIndex(array: T[], index: number): T[] {\n return index === -1\n ? array\n : [...array.slice(0, index), ...array.slice(index + 1)];\n}\n\n/**\n * Immutably removes an item from an array of objects\n * @param {array} array - An array of objects\n * @param {string|number} id - The unique id of the item in the array to remove\n * @param {string} [idName=id] - the key of the unique identifier\n * @return {array} - A copy of the original array with the matching item removed\n */\n\nexport function arrayRemoveItemById(\n array: T[],\n propertyValue: string | number,\n idName = 'id'\n): T[] {\n const index = array.findIndex(\n (item) => item[idName as keyof T] === propertyValue\n );\n return arrayRemoveByIndex(array, index);\n}\n\nexport const capitalizeFirstLetter = (string: string) =>\n `${string.charAt(0).toUpperCase()}${string.slice(1)}`;\n\n/**\n * @description Converts Object keys from string of any case to camelCase.\n * Handles nested objects and arrays.\n * */\nexport function convertKeysToCamel(object: T): CamelCasedPropertiesDeep {\n if (Array.isArray(object)) {\n return (object as unknown[]).map((item) =>\n convertKeysToCamel(item)\n ) as CamelCasedPropertiesDeep;\n }\n\n if (isObject(object)) {\n return Object.keys(object).reduce((o, k) => {\n const key = camelCase(k);\n const value = object[\n k as keyof typeof object\n ] as CamelCasedPropertiesDeep;\n\n if (isObject(value)) {\n return {\n ...o,\n [key]: convertKeysToCamel(value)\n };\n }\n\n if (Array.isArray(value)) {\n return {\n ...o,\n [key]: (value as unknown[]).map((item) => convertKeysToCamel(item))\n };\n }\n\n return {\n ...o,\n [key]: value\n };\n }, {} as CamelCasedPropertiesDeep);\n }\n\n return object as CamelCasedPropertiesDeep;\n}\n\n/**\n * @description Converts Object keys from string of any case to snakeCase.\n * Handles nested objects and arrays.\n * */\nexport function convertKeysToSnake(object: T): SnakeCasedPropertiesDeep {\n if (Array.isArray(object)) {\n return (object as unknown[]).map((item) =>\n convertKeysToSnake(item)\n ) as SnakeCasedPropertiesDeep;\n }\n\n if (isObject(object)) {\n return Object.keys(object).reduce((o, k) => {\n const key = snakeCase(k);\n const value = object[\n k as keyof typeof object\n ] as SnakeCasedPropertiesDeep;\n\n if (isObject(value)) {\n return {\n ...o,\n [key]: convertKeysToSnake(value)\n };\n }\n\n if (Array.isArray(value)) {\n return {\n ...o,\n [key]: (value as unknown[]).map((item) => convertKeysToSnake(item))\n };\n }\n\n return {\n ...o,\n [key]: value\n };\n }, {} as SnakeCasedPropertiesDeep);\n }\n\n return object as SnakeCasedPropertiesDeep;\n}\n\n/**\n * Checks to see if localStorage is available\n *\n * @return {boolean} - true if localStorage can be used\n */\nexport const isLocalStorageAvailable = () => {\n const test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n};\n\n/**\n * Appends querystring params to a URL\n *\n * @param {string} originalUrl - The original URL to append params to\n * @param {object} params - An object of key value parameters to append to URL\n * @return {string} - URL with params appended\n */\nexport const addParamsToURL = (originalUrl: string, params: object) => {\n const url = new URL(originalUrl);\n\n Object.entries(params).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n\n return url.toString();\n};\n\n/**\n * Some of our logged-out pages have a full-screen image background.\n * This util helps with setting the background image on the `` element, and\n * just requires passing in the image to be used.\n * @param {string} background\n */\nexport const setFullScreenBackgroundImage = (background: string) => {\n // apply background image directly to ``\n const body = document.querySelector('body');\n if (body) {\n body.style.setProperty('background-image', `url(${background})`);\n body.style.setProperty('background-size', 'cover');\n body.style.setProperty('background-position', 'center');\n }\n};\n\n/**\n * Uses the host to determine if a page is being loaded in staging or localhost.\n *\n * This util function is helpful for apps that run on nextJS which has node process\n * defined as production in both staging and production.\n *\n * @param host - host name\n * @returns {boolean} - true if app is running in staging or local\n */\nexport const isStagingOrLocal = (host: string) =>\n ['staging', 'localhost'].some((_host) => host.includes(_host));\n\n/**\n * Adds an id property to each object in an array. Uses the object's index as the value for the id\n * @param {array} objects - An array of objects\n * @return {array} - A copy of the original array with id property added to each object\n */\nexport const arrayAddIndexAsId = (objects: Array) =>\n objects.map((object, index) => ({ ...object, id: index }));\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo\n} from 'react';\nimport { useQueue } from '@strava/react-hooks';\nimport { generateRandomId } from '@strava/utils';\nimport { AlertStatusType } from '../Alert';\n\nexport interface AlertConfig {\n alertType: AlertStatusType;\n content: ReactNode;\n containerId?: string;\n id?: string;\n className?: string;\n autoDismiss?: boolean;\n autoDismissDelay?: number;\n contentPosition?: 'left' | 'center' | 'right';\n hideCloseButton?: boolean;\n hideIcon?: boolean;\n iconSize?: number;\n onClose?: () => void;\n}\n\nexport interface AlertState {\n alerts: AlertConfig[];\n showAlert: (config: AlertConfig) => string;\n hideAlert: (id: string) => void;\n clearAlerts: (containerId?: string) => void;\n}\n\nconst AlertContext = createContext(undefined);\nAlertContext.displayName = 'AlertContext';\n\nexport const useAlertContext = () => {\n const context = useContext(AlertContext);\n\n // Fail fast if useAlertContext hook is used outside the Provider.\n if (!context) {\n throw new Error(`useAlertContext must be used within the AlertProvider`);\n }\n\n return context;\n};\n\ninterface AlertProviderProps {\n children: ReactNode;\n}\n\nexport const AlertProvider = ({ children }: AlertProviderProps) => {\n const { queue, updateQueue, clearQueue } = useQueue({\n initialValues: []\n });\n\n /**\n * @description Display an alert.\n *\n * @param {Object} alertConfig\n * @param {'error' | 'warning' | 'info' | 'success'} alertConfig.alertType\n * @param {ReactNode} alertConfig.content - Message to display in the the content of the Alert Component.\n * @param {string} [alertConfig.containerId=\"base\"] - It's used to identify which `AlertContainer` the alert is associated to.\n * @param {string | number} [alertConfig.id] - Optional; by default id is randomly generated. Used to update or close alert.\n * @param {string} [alertConfig.className] - The className passed to Alert component.\n * @param {boolean} [alertConfig.autoDismiss=false] - Determine if alert will auto dismiss/close.\n * @param {number} [alertConfig.autoDismissDelay=8000] - Delay in ms that alert will auto dismiss.\n * @param {'left' | 'center' | 'right'} [alertConfig.contentPosition=\"left\"] - Position to align content inside of alert container.\n * @param {boolean} [alertConfig.hideCloseButton=false] - Hides the close button, alert can only be closed programmatically.\n * @param {boolean} [alertConfig.hideIcon=false] - Display or hide alert icon.\n * @param {number} [alertConfig.iconSize=32] - The Alert's SVG icon's width and height.\n * @param {Function} [alertConfig.onClose] - Callback fn; called when alert closes.\n *\n * @return {string} - Alert ID\n */\n const showAlert = useCallback(\n (alertConfig: AlertConfig) => {\n const id = alertConfig.id ?? generateRandomId();\n const containerId = alertConfig.containerId ?? 'base';\n\n updateQueue((alerts) => {\n const hasAlert =\n alertConfig?.id &&\n alerts.some((alert) => alert.id === alertConfig.id);\n // Check if alert exist in queue.\n // If true then return hasAlerts\n // Else add/append alert to queue.\n if (hasAlert) {\n return alerts;\n }\n\n return [...alerts, { ...alertConfig, id, containerId }];\n });\n\n return `${id}`;\n },\n [updateQueue]\n );\n\n /**\n * @description Hide an alert by id.\n *\n * @param {string} id - Unique id to hide/remove alert.\n *\n * @return {boolean}\n * */\n const hideAlert = useCallback(\n (id) =>\n updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.id === id) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n ),\n [updateQueue]\n );\n\n /**\n * @description Clears/remove all alerts.\n * If no `containerId` provided then removes ALL alerts. Else if `containerId`\n * provided then clears alerts for specific container when working with multiple containers.\n *\n * @param {string} [containerId] - Optional; Clear alerts for specific container when working with multiple containers.\n *\n * @return {boolean}\n * */\n const clearAlerts = useCallback(\n (containerId) => {\n // If containerId is passed then remove all alerts for specific container\n if (containerId) {\n return updateQueue((alerts) =>\n alerts.filter((alert) => {\n if (alert.containerId === containerId) {\n // eslint-disable-next-line no-unused-expressions\n alert?.onClose?.();\n return false;\n }\n\n return true;\n })\n );\n }\n // Else clear entire queue\n return clearQueue();\n },\n [updateQueue, clearQueue]\n );\n\n const providerState = useMemo(\n () => ({\n alerts: queue,\n showAlert,\n hideAlert,\n clearAlerts\n }),\n [queue, showAlert, hideAlert, clearAlerts]\n );\n\n return (\n \n {children}\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"alertContainerInfoContainer\":\"AlertProvider--alertContainerInfoContainer--lP1o8\",\"alertContainerInfo\":\"AlertProvider--alertContainerInfo--w-NvX\"};","import React from 'react';\nimport { AlertConfig, useAlertContext } from './AlertContext';\nimport Alert from '../Alert';\nimport styles from './AlertContainer.module.scss';\n\nconst defaultTranslateAlertInfoText = (\n totalAlertsShown: number,\n totalAlerts: number\n) => `Showing ${totalAlertsShown} of ${totalAlerts} alerts`;\n\ninterface AlertContainerProps {\n containerId?: string;\n limit?: number;\n shouldShowAlertInfoText?: boolean;\n translateAlertInfoText?: typeof defaultTranslateAlertInfoText;\n}\n\nexport const AlertContainer = ({\n containerId = 'base',\n limit,\n shouldShowAlertInfoText = true,\n translateAlertInfoText = defaultTranslateAlertInfoText\n}: AlertContainerProps) => {\n const { alerts, hideAlert } = useAlertContext();\n\n const handleOnClose = (id?: string) => {\n if (id) {\n hideAlert(id);\n }\n };\n\n const filterLimit = (_: unknown, index: number) => !limit || index < limit;\n const filterContainer = (alert: AlertConfig) =>\n alert?.containerId === containerId;\n\n const totalAlerts = alerts.filter(filterContainer).length;\n const totalAlertsShown = alerts\n .filter(filterContainer)\n .filter(filterLimit).length;\n\n return (\n <>\n {alerts\n .filter(filterContainer)\n .filter(filterLimit)\n .map(\n ({\n alertType,\n id,\n content,\n containerId: containerIdProp,\n ...rest\n }) => (\n handleOnClose(id)}\n >\n {content}\n \n )\n )}\n {shouldShowAlertInfoText && totalAlerts > totalAlertsShown && (\n \n
\n {translateAlertInfoText(totalAlertsShown, totalAlerts)}\n
\n \n )}\n \n );\n};\n\nexport default AlertContainer;\n","export const APPLE = 'apple';\nexport const EMAIL = 'email';\nexport const FACEBOOK = 'facebook';\nexport const GOOGLE = 'google';\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"Input--input--19CTT\"};","import React, { forwardRef } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport styles from './Input.module.scss';\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\n\nexport const Input = forwardRef(\n ({ className, ...props }, ref) => (\n \n )\n);\n\nexport default Input;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsVisibleDisabledNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsVisibleDisabledNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsVisibleDisabledNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsVisibleDisabledNormalSmall;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgActionsVisibleNormalSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n )\n);\nSvgActionsVisibleNormalSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgActionsVisibleNormalSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgActionsVisibleNormalSmall;\n","// extracted by mini-css-extract-plugin\nexport default {\"passwordInput\":\"Input--passwordInput--xTJYp\",\"showPasswordButton\":\"Input--showPasswordButton--9CSLK\"};","import React, { forwardRef, useState } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport ActionsVisibleDisabledNormalSmall from '@strava/icons/ActionsVisibleDisabledNormalSmall';\nimport ActionsVisibleNormalSmall from '@strava/icons/ActionsVisibleNormalSmall';\nimport VisuallyHidden from '../VisuallyHidden';\nimport Input from '.';\n\nimport styles from './PasswordInput.module.scss';\n\nexport type PasswordInputProps = React.ComponentPropsWithoutRef<'input'> & {\n showPasswordText: string; // translated text for accessibility. Should inform users that clicking show password button will display the password on the screen\n hidePasswordText: string;\n};\n\nconst PasswordInput = forwardRef(\n ({ showPasswordText, hidePasswordText, className, ...props }, ref) => {\n const [passwordIsVisible, setPasswordIsVisible] = useState(false);\n\n return (\n
\n \n setPasswordIsVisible((prev) => !prev)}\n className={styles.showPasswordButton}\n type=\"button\"\n role=\"switch\"\n aria-checked={passwordIsVisible}\n title={passwordIsVisible ? hidePasswordText : showPasswordText}\n >\n {passwordIsVisible ? (\n \n ) : (\n \n )}\n \n {passwordIsVisible ? hidePasswordText : showPasswordText}\n \n \n
\n );\n }\n);\n\nexport default PasswordInput;\n","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"RegistrationInput--input--AQh-V\",\"label\":\"RegistrationInput--label--0tXB5\",\"light\":\"RegistrationInput--light--xymPQ\",\"textInput\":\"RegistrationInput--textInput--zLJDS\",\"message\":\"RegistrationInput--message--zQeRu\",\"error\":\"RegistrationInput--error--40No1\"};","import React, { forwardRef } from 'react';\nimport Input, { PasswordInput } from '@strava/ui/Input';\nimport styles from './RegistrationInput.module.scss';\nimport { ThemeTypes } from '@strava/authentication-ui';\nimport clsx from '@strava/ui/clsx';\n\ntype RegistrationInputProps = React.ComponentPropsWithoutRef<'input'> &\n (\n | {\n // type just has to not be 'password' or string for the conditional to work\n type: 'email' | 'text';\n hidePasswordText?: string;\n showPasswordText?: string;\n }\n | {\n type: 'password';\n hidePasswordText: string;\n showPasswordText: string;\n }\n ) & {\n label: string;\n inputMessage?: string | null;\n errorMessage?: string | null;\n errorMessageTestId?: string;\n theme?: ThemeTypes;\n };\n\nexport const RegistrationInput = forwardRef<\n HTMLInputElement,\n RegistrationInputProps\n>(\n (\n {\n label,\n id,\n type,\n inputMessage,\n errorMessage,\n errorMessageTestId,\n hidePasswordText,\n showPasswordText,\n theme = 'dark',\n ...props\n },\n ref\n ) => (\n
\n \n {type === 'password' ? (\n \n ) : (\n \n )}\n {inputMessage && !errorMessage && (\n

{inputMessage}

\n )}\n {errorMessage && (\n
\n {errorMessage}\n
\n )}\n
\n )\n);\n\nexport default RegistrationInput;\n","// extracted by mini-css-extract-plugin\nexport default {\"emailCaption\":\"EmailRegistrationForm--emailCaption--Ccjzm\",\"submitButton\":\"EmailRegistrationForm--submitButton--4ptar\"};","import React, { useState, useRef } from 'react';\nimport Button from '@strava/ui/Button';\nimport * as EmailValidator from 'email-validator';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { isNil } from 'lodash-es';\nimport Spinner from '@strava/ui/Spinner';\nimport { AlertStatus, useAlertContext } from '@strava/ui/Alert';\nimport {\n elemAttrForAnalytics,\n EMAIL,\n ThemeTypes\n} from '@strava/authentication-ui';\nimport RegistrationInput from '../RegistrationInput';\nimport {\n submitFormData,\n isAlreadyRegisteredEmail\n} from './email-registration-api';\n\nimport {\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\n\nimport styles from './EmailRegistrationForm.module.scss';\n\nconst i18nPrefix = 'authentication_ui.email_registration_form';\n\nexport const EMAIL_REGISTRATION_FORM_ALERT_ID = 'email-registration-form-alert';\n\n// these props are passed into the parent component from the active\nexport interface EmailRegistrationFormProps {\n reCaptchaSiteKey: string | null;\n clubId?: number;\n isPremium: boolean;\n challengeId?: number;\n autoJoinChallenge?: boolean;\n honeyPot: string;\n plan?: string;\n formAuthToken?: string;\n}\n\ntype FormInputTypes = {\n email: string;\n password: string;\n honeyPot: string;\n};\n\ntype EmailValidationStateTypes = {\n message: string;\n isExistingEmail: boolean;\n isValidEmail: boolean;\n};\n\nexport type AnalyticsFieldsTypes = {\n action: string;\n element?: string;\n properties?: Record;\n};\n\nexport type AlertConfigTypes = {\n className?: string;\n contentPosition?: 'left' | 'center' | 'right';\n};\n\nconst EmailRegistrationForm = ({\n authorizationUrl,\n reCaptchaSiteKey,\n honeyPot,\n isPremium,\n clubId,\n plan,\n challengeId,\n autoJoinChallenge,\n formAuthToken,\n track,\n className,\n theme = 'dark',\n idPrefix,\n alertConfig\n}: EmailRegistrationFormProps & {\n // these props are passed in from the parent component\n authorizationUrl: string; // this url generally still comes from active\n track: (fields: AnalyticsFieldsTypes) => void;\n className?: string;\n idPrefix: string;\n theme?: ThemeTypes;\n alertConfig?: AlertConfigTypes;\n}) => {\n const [formInput, setFormInput] = useState({\n email: '',\n password: '',\n honeyPot: '' // if this field gets filled out, user is probably a bot\n });\n const [passwordErrorMsg, setPasswordErrMsg] = useState(null);\n const [emailValidationState, setEmailValidationState] =\n useState(null);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const emailInput = useRef(null);\n const passwordInput = useRef(null);\n const recaptchaRef = useRef(null);\n\n const useRecaptcha = !!reCaptchaSiteKey;\n\n const { logError } = useStravaErrorLogging();\n const { t } = useStravaTranslations();\n const { showAlert, clearAlerts } = useAlertContext();\n\n const emailRegFormAlert = (content: React.ReactNode, id: string) => ({\n content,\n alertType: AlertStatus.ERROR,\n containerId: EMAIL_REGISTRATION_FORM_ALERT_ID,\n hideCloseButton: true,\n ...(alertConfig && { ...alertConfig }),\n id // to prevent showing duplicate error messages\n });\n\n const getRecaptchaToken = async () => {\n if (useRecaptcha) {\n return (await recaptchaRef?.current?.executeAsync()) ?? '';\n }\n return '';\n };\n\n const handleEmailFormSubmit = async () => {\n const recaptchaToken = await getRecaptchaToken();\n\n const element = elemAttrForAnalytics(EMAIL);\n const { email, password, honeyPot } = formInput;\n\n const formData = new FormData();\n formData.append('web_registration_form', 'true');\n formData.append('email', email);\n formData.append('password', password);\n formData.append('g-recaptcha-response', recaptchaToken);\n formData.append('checkbox_agreed_to_terms', 'on');\n formData.append(honeyPot, honeyPot);\n formData.append('plan', String(plan));\n formData.append('authenticity_token', String(formAuthToken));\n\n if (isPremium) {\n formData.append('premium', 'true');\n }\n if (!isNil(clubId)) {\n formData.append('club_id', String(clubId));\n }\n if (!isNil(challengeId)) {\n formData.append('challenge_id', String(challengeId));\n }\n if (!isNil(autoJoinChallenge)) {\n formData.append('auto_join_challenge', String(autoJoinChallenge));\n }\n\n try {\n const response = await submitFormData({\n formData,\n url: authorizationUrl,\n logError\n });\n\n if ('error' in response) {\n // join request failed server-side validations,\n // flash message is populated and shown if an error occurred\n showAlert(emailRegFormAlert(response.error, 'submitFormData error'));\n setIsProcessing(false); // let user try again\n } else {\n const { pathType, load } = response;\n track({\n action: 'redirect',\n element,\n properties: {\n path_type: pathType,\n redirect_url: load\n }\n });\n\n // navigate to onboarding flow if no errors were encountered\n window.location.href = load;\n }\n } catch (error) {\n logError(error);\n\n // generic \"something went wrong\" alert\n showAlert(\n emailRegFormAlert(\n t(`${i18nPrefix}.error_message`),\n 'submitFormData catch'\n )\n );\n setIsProcessing(false); // let user try again\n }\n };\n\n /**\n * Validate athlete email -\n * 1 - value should be provided (required)\n * 2 - valid email address should be entered (eg. should have @)\n * 3 - email address should not be already registered on strava\n *\n * @returns {Object} result\n * @returns {boolean} result.isValidEmail - true when the email has passed all validation criteria\n * @returns {string} result.isExistingEmail - true when the email is already registered on strava\n * @returns {string} result.message - string message to display to athlete when an error occurs\n */\n const validateEmail = async () => {\n const { email } = formInput;\n if (emailValidationState) {\n // avoid validating email if there is already an error that is not addressed by the athlete yet\n // this prevents making an unnecessary api call to check if email is already registered (see #isAlreadyRegisteredEmail)\n return emailValidationState;\n } else {\n let isValidEmail = true;\n let isExistingEmail = false;\n let message = null;\n\n if (!(email && email.length > 0)) {\n message = t(`${i18nPrefix}.email_required`);\n isValidEmail = false;\n } else if (!EmailValidator.validate(email)) {\n message = t(`${i18nPrefix}.email_invalid`);\n isValidEmail = false;\n } else {\n try {\n const isUniqueEmail = await isAlreadyRegisteredEmail(email);\n if (!isUniqueEmail) {\n message = t(`${i18nPrefix}.email_taken`);\n isExistingEmail = true;\n }\n } catch (error) {\n logError(error);\n isValidEmail = false;\n\n // generic \"something went wrong\" alert\n showAlert(\n emailRegFormAlert(\n t(`${i18nPrefix}.error_message`),\n 'isAlreadyRegisteredEmail catch'\n )\n );\n }\n }\n setEmailValidationState({ isExistingEmail, isValidEmail, message });\n return { message, isValidEmail, isExistingEmail };\n }\n };\n\n /**\n * Validates athlete password\n * - value should be provided (required)\n * - max length of 40 chars\n * - min length of 8 chars\n *\n * @returns {boolean} result true when the password is valid\n */\n const validatePassword = () => {\n const { password } = formInput;\n\n if (!passwordErrorMsg) {\n // avoid validating email if there is already an error that is not addressed by the athlete yet\n let isValidPassword = true;\n let passwordValidationMsg = null;\n if (!(password && password.length > 0)) {\n passwordValidationMsg = t(`${i18nPrefix}.password_required`);\n isValidPassword = false;\n } else if (password.length > 40) {\n passwordValidationMsg = t(`${i18nPrefix}.password_max_length`);\n isValidPassword = false;\n } else if (password.length < 8) {\n passwordValidationMsg = t(`${i18nPrefix}.password_min_length`);\n isValidPassword = false;\n }\n setPasswordErrMsg(passwordValidationMsg);\n return isValidPassword;\n }\n return false;\n };\n\n const validateForm = async () => {\n return {\n ...(await validateEmail()),\n isValidPassword: validatePassword()\n };\n };\n\n /**\n * Actions to perform when a user hits the \"sign up\" button (account registration using email).\n * - validate user input (email and password)\n * - submit form if input is valid\n * - focus on invalid inputs if input is invalid\n */\n const handleFormSubmission = async (\n event: React.FormEvent\n ) => {\n event.preventDefault();\n setIsProcessing(true); // prevent impatient submit clicks\n\n const { isValidEmail, isValidPassword, isExistingEmail } =\n await validateForm();\n\n track({\n action: 'click',\n element: 'signup',\n properties: {\n is_valid_email: isValidEmail,\n is_valid_password: isValidPassword,\n is_existing_email: isExistingEmail\n }\n });\n\n if (isValidEmail && !isExistingEmail && isValidPassword) {\n handleEmailFormSubmit();\n } else {\n setIsProcessing(false); // let user try again\n\n if (recaptchaRef.current) {\n recaptchaRef.current.reset();\n }\n if (!isValidPassword) {\n passwordInput?.current?.focus();\n }\n // prioritize focus on email input if both password and email inputs are invalid\n if (!isValidEmail || isExistingEmail) {\n emailInput?.current?.focus();\n }\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent) => {\n const { target } = event;\n const { name } = target;\n\n // save honeyPot input as 'honeyPot' instead of whatever the value of honeyPot is\n // (server determines honeyPot value)\n setFormInput((prev) => {\n return { ...prev, [name === honeyPot ? 'honeyPot' : name]: target.value };\n });\n\n // clear input specific errors\n if (name === 'email' && emailValidationState?.message) {\n setEmailValidationState(null);\n } else if (passwordErrorMsg) {\n setPasswordErrMsg(null);\n }\n // clear alerts on all input changes\n clearAlerts(EMAIL_REGISTRATION_FORM_ALERT_ID);\n };\n\n return (\n \n \n\n \n\n {/**\n * Honeypot input is hidden to real users but visible to bots.\n * It should be a value that seems legit to bots but one we don't actually use/care about.\n * If the input is populated, we know it's a bot. */}\n
\n \n \n
\n\n {useRecaptcha && (\n \n )}\n\n \n {isProcessing ? : t(`${i18nPrefix}.sign_up`)}\n \n \n );\n};\n\nexport default EmailRegistrationForm;\n","import { APPLE, EMAIL, FACEBOOK, GOOGLE } from './constants';\n\ntype ElementTypes =\n | typeof APPLE\n | typeof EMAIL\n | typeof FACEBOOK\n | typeof GOOGLE;\n\nexport const elemAttrForAnalytics = (option: ElementTypes) => {\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","import apiClient from '@strava/api/lib/axios-client';\n\ntype SubmitFormDataSuccessResponse = {\n success: boolean;\n pathType: string;\n load: string;\n};\n\ntype SubmitFormDataErrorResponse = {\n error: string;\n};\n\ntype SubmitFormDataResponseType =\n | SubmitFormDataSuccessResponse\n | SubmitFormDataErrorResponse;\n\nexport const submitFormData = async ({\n formData,\n url,\n logError\n}: {\n formData: FormData;\n url: string;\n logError: (s: string | unknown) => void;\n}): Promise => {\n return new Promise((resolve, reject) => {\n apiClient({\n options: {\n headers: { 'Content-Type': 'multipart/form-data' }\n }\n })\n .post(url, formData)\n .then((response: { data: SubmitFormDataResponseType }) => {\n resolve(response.data);\n })\n .catch((error: unknown) => {\n logError(error);\n reject(error);\n });\n });\n};\n\nexport const isAlreadyRegisteredEmail = async (email: string) => {\n return new Promise((resolve, reject) => {\n apiClient()\n .get('/athletes/email_unique', { params: { email } })\n .then(({ data }: { data: boolean }) => {\n resolve(data);\n })\n .catch((error: unknown) => {\n reject(error);\n });\n });\n};\n",null,null,null,null,null,null,null,null,"// extracted by mini-css-extract-plugin\nexport default {\"disclaimerText\":\"DisclaimerText--disclaimerText--oXzH1\"};","import React from 'react';\nimport { Markup } from 'interweave';\nimport { useStravaTranslations } from '@strava/container-context';\nimport clsx from '@strava/ui/clsx/clsx';\n\nimport styles from './DisclaimerText.module.scss';\n\ntype DisclaimerTextProps = {\n className?: string;\n};\n\nconst DisclaimerText = ({ className }: DisclaimerTextProps) => {\n const { t } = useStravaTranslations();\n\n const legalTerms = t(\n 'authentication_ui.disclaimer_text.by_clicking_cta_html',\n { terms_path: '/legal/terms' }\n );\n\n const legalPrivacy = t(\n 'authentication_ui.disclaimer_text.view_privacy_policy_html',\n { privacy_path: '/legal/privacy' }\n );\n\n return (\n

\n {' '}\n \n

\n );\n};\n\nexport default DisclaimerText;\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\",\"disclaimerText\":\"SignUpModal--disclaimerText--BQTmz\"};","import React, { useCallback, useEffect } from 'react';\nimport Modal, { ModalBody } from '@strava/ui/Modal';\nimport {\n useStravaAnalytics,\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\nimport { useApple } from '@strava/utils/src/externalSocialPartners/useApple';\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 } from '../constants';\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 { useSignUpModalContext } from './SignUpModalContext';\nimport styles from './SignUpModal.module.scss';\nimport { Markup } from 'interweave';\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';\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 { isSignUpModalOpen, dismissSignUpModal, variant, copyParams } =\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 track({ action: 'screen_enter' });\n }, [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 \"\"\n

\n \n

\n

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

\n
\n\n \n\n handleExtAuthBtnClick(GOOGLE)}\n data-testid=\"google_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.google_cta`)}\n \n\n handleExtAuthBtnClick(APPLE)}\n data-testid=\"apple_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.apple_cta`)}\n \n\n handleExtAuthBtnClick(FACEBOOK)}\n data-testid=\"facebook_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.facebook_cta`)}\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';\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};\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 SignUpModalProvider'\n );\n }\n\n return context;\n};\n\ntype SignUpModalContextProviderProps = {\n children: ReactNode;\n nameForFollowAthleteVariant: string;\n};\n\nexport const SignUpModalContextProvider = ({\n children,\n nameForFollowAthleteVariant\n}: SignUpModalContextProviderProps) => {\n const [isSignUpModalOpen, setIsSignUpModalOpen] = useState(false);\n const [variant, setVariant] = useState('generic');\n\n const openSignUpModal = useCallback((_variant: SignUpModalVariants) => {\n setIsSignUpModalOpen(true);\n setVariant(_variant);\n }, []);\n\n const providerState = useMemo(\n () => ({\n openSignUpModal,\n dismissSignUpModal: () => setIsSignUpModalOpen(false),\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 }),\n [openSignUpModal, isSignUpModalOpen, variant, nameForFollowAthleteVariant]\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","import { useRef, useCallback, useEffect, useState } from 'react';\n\n/**\n * The `useSafeState` hook acts the same as React's `useState`,\n * where we can set the initial state, and it returns (1) the current state,\n * and (2) the state setter.\n *\n * But with `useSafeState`, it will only set the state when the component is mounted\n * in order to prevent memory leaks and avoid this warning:\n * \"Warning: Can’t perform a React state update on an unmounted component.\"\n * When a component is unmounted, we don't want to set the state.\n *\n * This helps when we have async behavior where we call an async API call,\n * then based on the async response, we set the state. But if the component\n * unmounts before the API call resolves, we don't want to set the state.\n * */\nexport const useSafeState = (initialState) => {\n const mountedRef = useRef(false);\n const [state, setState] = useState(initialState);\n\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n const setSafeState = useCallback(\n (args) => (mountedRef.current ? setState(args) : () => {}),\n []\n );\n\n return [state, setSafeState];\n};\n\nexport default useSafeState;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgNavigationProfileHighlightedMedium = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n )\n);\nSvgNavigationProfileHighlightedMedium.defaultProps = {\n color: \"currentColor\",\n size: 32,\n title: undefined,\n titleId: undefined,\n};\nSvgNavigationProfileHighlightedMedium.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgNavigationProfileHighlightedMedium;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgBadgesMulticolorSuperuserSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorSuperuserSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgBadgesMulticolorSuperuserSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgBadgesMulticolorSuperuserSmall;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgBadgesMulticolorSummitSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorSummitSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgBadgesMulticolorSummitSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgBadgesMulticolorSummitSmall;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgBadgesMulticolorProSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n \n )\n);\nSvgBadgesMulticolorProSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgBadgesMulticolorProSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgBadgesMulticolorProSmall;\n","import * as React from \"react\";\nimport PropTypes from \"prop-types\";\nconst SvgBadgesMulticolorVerifiedSmall = React.forwardRef(\n ({ color, size, title, titleId, ...props }, ref) => (\n \n {title ? {title} : null}\n \n \n \n \n \n )\n);\nSvgBadgesMulticolorVerifiedSmall.defaultProps = {\n color: \"currentColor\",\n size: 24,\n title: undefined,\n titleId: undefined,\n};\nSvgBadgesMulticolorVerifiedSmall.propTypes = {\n color: PropTypes.string,\n size: PropTypes.number,\n title: PropTypes.string,\n titleId: PropTypes.string,\n};\nexport default SvgBadgesMulticolorVerifiedSmall;\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"Avatar--avatar--EjA+i\",\"imgWrapper\":\"Avatar--imgWrapper--no4rK\",\"badge\":\"Avatar--badge--AGhgx\",\"athlete\":\"Avatar--athlete--swByo\",\"xsmall\":\"Avatar--xsmall--ooxrp\",\"small\":\"Avatar--small--d-InS\",\"large\":\"Avatar--large--yUfy1\",\"xlarge\":\"Avatar--xlarge--Yt5UL\",\"club\":\"Avatar--club--HMeLa\",\"default\":\"Avatar--default--cRgUh\"};","import React, { useEffect } from 'react';\nimport { useSafeState } from '@strava/react-hooks/src/use-safe-state';\nimport AvatarFallback from '@strava/icons/NavigationProfileHighlightedMedium';\nimport EmployeeBadge from '@strava/icons/BadgesMulticolorSuperuserSmall';\nimport SubscriberBadge from '@strava/icons/BadgesMulticolorSummitSmall';\nimport ProBadge from '@strava/icons/BadgesMulticolorProSmall';\nimport VerifiedBadge from '@strava/icons/BadgesMulticolorVerifiedSmall';\nimport clsx from '../clsx';\n\nimport styles from './Avatar.module.scss';\n\ninterface ImgProps {\n src: string;\n alt: string;\n title: string;\n fallback?: React.ReactNode;\n}\n\nconst Img = ({ src, alt, title, fallback = null }: ImgProps) => {\n const [children, setChildren] = useSafeState(\n {alt}\n );\n\n useEffect(() => {\n let image: HTMLImageElement | null = new Image();\n image.onload = () => {\n setChildren({alt});\n };\n image.onerror = () => {\n setChildren(fallback);\n };\n image.src = src;\n return () => {\n image = null;\n };\n }, [src, alt, title, fallback]);\n\n return <>{children};\n};\n\nfunction getBadge(badge: string) {\n switch (badge) {\n case 'ambassador':\n return ;\n case 'employee':\n return ;\n case 'subscriber':\n case 'premium':\n return ;\n case 'pro':\n return ;\n case 'verified':\n return ;\n default:\n return null;\n }\n}\n\nexport type AvatarType = 'athlete' | 'club';\nexport type AvatarSize = 'xsmall' | 'small' | 'default' | 'large' | 'xlarge';\nexport type AvatarBadge =\n | '' // in some cases active has member_type as empty string for default users\n | 'ambassador'\n | 'employee'\n | 'subscriber'\n | 'premium' // legacy name referring to 'subscriber', used in active\n | 'pro'\n | 'verified';\n\ninterface BaseAvatarProps {\n src: string;\n type: AvatarType;\n name?: string;\n alt?: string;\n title?: string;\n size?: AvatarSize;\n badge?: AvatarBadge;\n className?: string;\n}\n\ntype AnchorProps = React.ComponentPropsWithoutRef<'a'> & {\n href?: string;\n};\ntype DivProps = React.ComponentPropsWithoutRef<'div'> & {\n href?: never;\n};\n\n// Guard to check if href exists in props\nconst hasHref = (props: AnchorProps | DivProps): props is AnchorProps =>\n 'href' in props;\n\ntype AvatarProps = BaseAvatarProps & (AnchorProps | DivProps);\n\n/**\n * Prop Deprecation Warning: We are slowly deprecating the `name` prop in favor of the `title` prop\n * so that the React props match up to the element's attribute.\n * */\nconst Avatar = ({\n name = '',\n alt = '',\n title,\n type,\n src,\n size,\n badge,\n className,\n ...otherProps\n}: AvatarProps) => {\n const classNames = clsx([\n styles.avatar,\n styles[type],\n className,\n size && styles[size]\n ]);\n\n // TODO: uncomment when existing Avatar usage is refactored. Otherwise, there will be a lot of warning in the console.\n // if (name || process.env.NODE_ENV !== 'production') {\n // console.warn(\n // '[Prop Deprecation Warning] Deprecating the `name` prop in favor of the `title`.'\n // );\n // }\n\n const children = (\n <>\n {badge &&
{getBadge(badge)}
}\n
\n : null}\n />\n
\n \n );\n\n if (hasHref(otherProps)) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n};\n\nexport default Avatar;\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","// extracted by mini-css-extract-plugin\nexport default {\"stat\":\"Stat--stat--7Qurd\",\"statLabel\":\"Stat--statLabel--qWLL-\",\"statValue\":\"Stat--statValue--7eWuL\",\"stat-xs\":\"Stat--stat-xs--svVNE\",\"statXs\":\"Stat--stat-xs--svVNE\",\"stat-sm\":\"Stat--stat-sm--7BLLi\",\"statSm\":\"Stat--stat-sm--7BLLi\",\"stat-lg\":\"Stat--stat-lg--bYBGt\",\"statLg\":\"Stat--stat-lg--bYBGt\",\"stat-xl\":\"Stat--stat-xl--GtHFn\",\"statXl\":\"Stat--stat-xl--GtHFn\"};","import React, { ReactNode } from 'react';\n\nimport styles from './Stat.module.scss';\n\nimport clsx from '../clsx';\n\nexport const StatTypes = ['stat-xs', 'stat-sm', 'stat-lg', 'stat-xl'] as const;\ntype StatTypesType = (typeof StatTypes)[number];\n\ninterface StatProps {\n value: string | number | ReactNode;\n label: string;\n type?: StatTypesType;\n wrapperClassName?: string;\n labelClassName?: string;\n valueClassName?: string;\n labelAfterValue?: boolean;\n}\n\nconst Stat = ({\n value,\n label,\n type,\n wrapperClassName,\n labelClassName,\n valueClassName,\n labelAfterValue = false\n}: StatProps) => {\n const labelElement = (\n {label}\n );\n\n return (\n
\n {!labelAfterValue && labelElement}\n
{value}
\n {labelAfterValue && labelElement}\n
\n );\n};\n\nexport default Stat;\n","// extracted by mini-css-extract-plugin\nexport default {\"listStats\":\"Stats--listStats--hRQeq\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport styles from './styles.module.scss';\n\nconst Stats = (props) => {\n const { children, listClassName } = props;\n\n return (\n
    \n {React.Children.map(\n children,\n (child) => (child &&
  • {child}
  • ) || ''\n )}\n
\n );\n};\n\nStats.propTypes = {\n children: PropTypes.node.isRequired,\n listClassName: PropTypes.string\n};\n\nStats.defaultProps = {\n listClassName: null\n};\n\nexport default Stats;\n","\"use strict\";\r\n\r\nvar tester = /^[-!#$%&'*+\\/0-9=?A-Z^_a-z{|}~](\\.?[-!#$%&'*+\\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/;\r\n// Thanks to:\r\n// http://fightingforalostcause.net/misc/2006/compare-email-regex.php\r\n// http://thedailywtf.com/Articles/Validating_Email_Addresses.aspx\r\n// http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses/201378#201378\r\nexports.validate = function(email)\r\n{\r\n\tif (!email)\r\n\t\treturn false;\r\n\t\t\r\n\tif(email.length>254)\r\n\t\treturn false;\r\n\r\n\tvar valid = tester.test(email);\r\n\tif(!valid)\r\n\t\treturn false;\r\n\r\n\t// Further checking of some things regex can't handle\r\n\tvar parts = email.split(\"@\");\r\n\tif(parts[0].length>64)\r\n\t\treturn false;\r\n\r\n\tvar domainParts = parts[1].split(\".\");\r\n\tif(domainParts.some(function(part) { return part.length>63; }))\r\n\t\treturn false;\r\n\r\n\treturn true;\r\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nvar ReCAPTCHA =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReCAPTCHA, _React$Component);\n\n function ReCAPTCHA() {\n var _this;\n\n _this = _React$Component.call(this) || this;\n _this.handleExpired = _this.handleExpired.bind(_assertThisInitialized(_this));\n _this.handleErrored = _this.handleErrored.bind(_assertThisInitialized(_this));\n _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _this.handleRecaptchaRef = _this.handleRecaptchaRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = ReCAPTCHA.prototype;\n\n _proto.getValue = function getValue() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this.props.grecaptcha.getResponse(this._widgetId);\n }\n\n return null;\n };\n\n _proto.getWidgetId = function getWidgetId() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this._widgetId;\n }\n\n return null;\n };\n\n _proto.execute = function execute() {\n var grecaptcha = this.props.grecaptcha;\n\n if (grecaptcha && this._widgetId !== undefined) {\n return grecaptcha.execute(this._widgetId);\n } else {\n this._executeRequested = true;\n }\n };\n\n _proto.executeAsync = function executeAsync() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n _this2.executionResolve = resolve;\n _this2.executionReject = reject;\n\n _this2.execute();\n });\n };\n\n _proto.reset = function reset() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n this.props.grecaptcha.reset(this._widgetId);\n }\n };\n\n _proto.handleExpired = function handleExpired() {\n if (this.props.onExpired) {\n this.props.onExpired();\n } else {\n this.handleChange(null);\n }\n };\n\n _proto.handleErrored = function handleErrored() {\n if (this.props.onErrored) {\n this.props.onErrored();\n }\n\n if (this.executionReject) {\n this.executionReject();\n delete this.executionResolve;\n delete this.executionReject;\n }\n };\n\n _proto.handleChange = function handleChange(token) {\n if (this.props.onChange) {\n this.props.onChange(token);\n }\n\n if (this.executionResolve) {\n this.executionResolve(token);\n delete this.executionReject;\n delete this.executionResolve;\n }\n };\n\n _proto.explicitRender = function explicitRender() {\n if (this.props.grecaptcha && this.props.grecaptcha.render && this._widgetId === undefined) {\n var wrapper = document.createElement(\"div\");\n this._widgetId = this.props.grecaptcha.render(wrapper, {\n sitekey: this.props.sitekey,\n callback: this.handleChange,\n theme: this.props.theme,\n type: this.props.type,\n tabindex: this.props.tabindex,\n \"expired-callback\": this.handleExpired,\n \"error-callback\": this.handleErrored,\n size: this.props.size,\n stoken: this.props.stoken,\n hl: this.props.hl,\n badge: this.props.badge\n });\n this.captcha.appendChild(wrapper);\n }\n\n if (this._executeRequested && this.props.grecaptcha && this._widgetId !== undefined) {\n this._executeRequested = false;\n this.execute();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.explicitRender();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.explicitRender();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._widgetId !== undefined) {\n this.delayOfCaptchaIframeRemoving();\n this.reset();\n }\n };\n\n _proto.delayOfCaptchaIframeRemoving = function delayOfCaptchaIframeRemoving() {\n var temporaryNode = document.createElement(\"div\");\n document.body.appendChild(temporaryNode);\n temporaryNode.style.display = \"none\"; // move of the recaptcha to a temporary node\n\n while (this.captcha.firstChild) {\n temporaryNode.appendChild(this.captcha.firstChild);\n } // delete the temporary node after reset will be done\n\n\n setTimeout(function () {\n document.body.removeChild(temporaryNode);\n }, 5000);\n };\n\n _proto.handleRecaptchaRef = function handleRecaptchaRef(elem) {\n this.captcha = elem;\n };\n\n _proto.render = function render() {\n // consume properties owned by the reCATPCHA, pass the rest to the div so the user can style it.\n\n /* eslint-disable no-unused-vars */\n var _this$props = this.props,\n sitekey = _this$props.sitekey,\n onChange = _this$props.onChange,\n theme = _this$props.theme,\n type = _this$props.type,\n tabindex = _this$props.tabindex,\n onExpired = _this$props.onExpired,\n onErrored = _this$props.onErrored,\n size = _this$props.size,\n stoken = _this$props.stoken,\n grecaptcha = _this$props.grecaptcha,\n badge = _this$props.badge,\n hl = _this$props.hl,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"sitekey\", \"onChange\", \"theme\", \"type\", \"tabindex\", \"onExpired\", \"onErrored\", \"size\", \"stoken\", \"grecaptcha\", \"badge\", \"hl\"]);\n /* eslint-enable no-unused-vars */\n\n\n return React.createElement(\"div\", _extends({}, childProps, {\n ref: this.handleRecaptchaRef\n }));\n };\n\n return ReCAPTCHA;\n}(React.Component);\n\nexport { ReCAPTCHA as default };\nReCAPTCHA.displayName = \"ReCAPTCHA\";\nReCAPTCHA.propTypes = {\n sitekey: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n grecaptcha: PropTypes.object,\n theme: PropTypes.oneOf([\"dark\", \"light\"]),\n type: PropTypes.oneOf([\"image\", \"audio\"]),\n tabindex: PropTypes.number,\n onExpired: PropTypes.func,\n onErrored: PropTypes.func,\n size: PropTypes.oneOf([\"compact\", \"normal\", \"invisible\"]),\n stoken: PropTypes.string,\n hl: PropTypes.string,\n badge: PropTypes.oneOf([\"bottomright\", \"bottomleft\", \"inline\"])\n};\nReCAPTCHA.defaultProps = {\n onChange: function onChange() {},\n theme: \"light\",\n type: \"image\",\n tabindex: 0,\n size: \"normal\",\n badge: \"bottomright\"\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nimport { Component, createElement, forwardRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nvar SCRIPT_MAP = {}; // A counter used to generate a unique id for each component that uses the function\n\nvar idCount = 0;\nexport default function makeAsyncScript(getScriptURL, options) {\n options = options || {};\n return function wrapWithAsyncScript(WrappedComponent) {\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n\n var AsyncScriptLoader =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(AsyncScriptLoader, _Component);\n\n function AsyncScriptLoader(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this.state = {};\n _this.__scriptURL = \"\";\n return _this;\n }\n\n var _proto = AsyncScriptLoader.prototype;\n\n _proto.asyncScriptLoaderGetScriptLoaderID = function asyncScriptLoaderGetScriptLoaderID() {\n if (!this.__scriptLoaderID) {\n this.__scriptLoaderID = \"async-script-loader-\" + idCount++;\n }\n\n return this.__scriptLoaderID;\n };\n\n _proto.setupScriptURL = function setupScriptURL() {\n this.__scriptURL = typeof getScriptURL === \"function\" ? getScriptURL() : getScriptURL;\n return this.__scriptURL;\n };\n\n _proto.asyncScriptLoaderHandleLoad = function asyncScriptLoaderHandleLoad(state) {\n var _this2 = this;\n\n // use reacts setState callback to fire props.asyncScriptOnLoad with new state/entry\n this.setState(state, function () {\n return _this2.props.asyncScriptOnLoad && _this2.props.asyncScriptOnLoad(_this2.state);\n });\n };\n\n _proto.asyncScriptLoaderTriggerOnScriptLoaded = function asyncScriptLoaderTriggerOnScriptLoaded() {\n var mapEntry = SCRIPT_MAP[this.__scriptURL];\n\n if (!mapEntry || !mapEntry.loaded) {\n throw new Error(\"Script is not loaded.\");\n }\n\n for (var obsKey in mapEntry.observers) {\n mapEntry.observers[obsKey](mapEntry);\n }\n\n delete window[options.callbackName];\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this3 = this;\n\n var scriptURL = this.setupScriptURL();\n var key = this.asyncScriptLoaderGetScriptLoaderID();\n var _options = options,\n globalName = _options.globalName,\n callbackName = _options.callbackName,\n scriptId = _options.scriptId; // check if global object already attached to window\n\n if (globalName && typeof window[globalName] !== \"undefined\") {\n SCRIPT_MAP[scriptURL] = {\n loaded: true,\n observers: {}\n };\n } // check if script loading already\n\n\n if (SCRIPT_MAP[scriptURL]) {\n var entry = SCRIPT_MAP[scriptURL]; // if loaded or errored then \"finish\"\n\n if (entry && (entry.loaded || entry.errored)) {\n this.asyncScriptLoaderHandleLoad(entry);\n return;\n } // if still loading then callback to observer queue\n\n\n entry.observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n return;\n }\n /*\n * hasn't started loading\n * start the \"magic\"\n * setup script to load and observers\n */\n\n\n var observers = {};\n\n observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n SCRIPT_MAP[scriptURL] = {\n loaded: false,\n observers: observers\n };\n var script = document.createElement(\"script\");\n script.src = scriptURL;\n script.async = true;\n\n for (var attribute in options.attributes) {\n script.setAttribute(attribute, options.attributes[attribute]);\n }\n\n if (scriptId) {\n script.id = scriptId;\n }\n\n var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(func) {\n if (SCRIPT_MAP[scriptURL]) {\n var mapEntry = SCRIPT_MAP[scriptURL];\n var observersMap = mapEntry.observers;\n\n for (var obsKey in observersMap) {\n if (func(observersMap[obsKey])) {\n delete observersMap[obsKey];\n }\n }\n }\n };\n\n if (callbackName && typeof window !== \"undefined\") {\n window[callbackName] = function () {\n return _this3.asyncScriptLoaderTriggerOnScriptLoaded();\n };\n }\n\n script.onload = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.loaded = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n if (callbackName) {\n return false;\n }\n\n observer(mapEntry);\n return true;\n });\n }\n };\n\n script.onerror = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.errored = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n observer(mapEntry);\n return true;\n });\n }\n };\n\n document.body.appendChild(script);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Remove tag script\n var scriptURL = this.__scriptURL;\n\n if (options.removeOnUnmount === true) {\n var allScripts = document.getElementsByTagName(\"script\");\n\n for (var i = 0; i < allScripts.length; i += 1) {\n if (allScripts[i].src.indexOf(scriptURL) > -1) {\n if (allScripts[i].parentNode) {\n allScripts[i].parentNode.removeChild(allScripts[i]);\n }\n }\n }\n } // Clean the observer entry\n\n\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()];\n\n if (options.removeOnUnmount === true) {\n delete SCRIPT_MAP[scriptURL];\n }\n }\n };\n\n _proto.render = function render() {\n var globalName = options.globalName; // remove asyncScriptOnLoad from childProps\n\n var _this$props = this.props,\n asyncScriptOnLoad = _this$props.asyncScriptOnLoad,\n forwardedRef = _this$props.forwardedRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"asyncScriptOnLoad\", \"forwardedRef\"]); // eslint-disable-line no-unused-vars\n\n\n if (globalName && typeof window !== \"undefined\") {\n childProps[globalName] = typeof window[globalName] !== \"undefined\" ? window[globalName] : undefined;\n }\n\n childProps.ref = forwardedRef;\n return createElement(WrappedComponent, childProps);\n };\n\n return AsyncScriptLoader;\n }(Component); // Note the second param \"ref\" provided by React.forwardRef.\n // We can pass it along to AsyncScriptLoader as a regular prop, e.g. \"forwardedRef\"\n // And it can then be attached to the Component.\n\n\n var ForwardedComponent = forwardRef(function (props, ref) {\n return createElement(AsyncScriptLoader, _extends({}, props, {\n forwardedRef: ref\n }));\n });\n ForwardedComponent.displayName = \"AsyncScriptLoader(\" + wrappedComponentName + \")\";\n ForwardedComponent.propTypes = {\n asyncScriptOnLoad: PropTypes.func\n };\n return hoistStatics(ForwardedComponent, WrappedComponent);\n };\n}","import ReCAPTCHA from \"./recaptcha\";\nimport makeAsyncScriptLoader from \"react-async-script\";\nvar callbackName = \"onloadcallback\";\nvar globalName = \"grecaptcha\";\n\nfunction getOptions() {\n return typeof window !== \"undefined\" && window.recaptchaOptions || {};\n}\n\nfunction getURL() {\n var dynamicOptions = getOptions();\n var hostname = dynamicOptions.useRecaptchaNet ? \"recaptcha.net\" : \"www.google.com\";\n return \"https://\" + hostname + \"/recaptcha/api.js?onload=\" + callbackName + \"&render=explicit\";\n}\n\nexport default makeAsyncScriptLoader(getURL, {\n callbackName: callbackName,\n globalName: globalName\n})(ReCAPTCHA);","import RecaptchaWrapper from \"./recaptcha-wrapper\";\nimport ReCAPTCHA from \"./recaptcha\";\nexport default RecaptchaWrapper;\nexport { ReCAPTCHA };"],"names":["SvgActionsCancelNormalXsmall","React","ref","color","size","title","titleId","props","_ref","fill","xmlns","viewBox","width","height","id","d","defaultProps","undefined","propTypes","PropTypes","toVal","mix","k","y","str","Array","isArray","length","_args","_key","arguments","tmp","x","i","children","className","variant","clsx","styles","btn","ModalOverlay","otherProps","DialogOverlay","_extends","ModalContent","_ref2","DialogContent","ModalBody","_ref6","ModalCloseButton","_ref7","Button","type","ActionsCancelNormalXsmall","colors","Modal","_ref8","isOpen","onDismiss","hasClose","initialFocusRef","onClick","Overlay","Content","Title","_ref3","Actions","_ref4","HeroImage","_ref5","src","alt","Body","CloseButton","global","Object","freeSelf","self","freeGlobal","Function","Symbol","array","iteratee","index","result","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","value","isOwn","call","tag","unmasked","e","getRawTag","objectToString","isObjectLike","baseGetTag","symbolProto","symbolToString","baseToString","arrayMap","isSymbol","args","string","replace","appendScriptToBody","script","name","logError","document","querySelector","appendChild","Error","useApple","state","useEffect","locale","window","AppleID","createElement","formattedLocale","async","injectAppleScript","signin","stravaInit","auth","init","clientId","scope","redirectURI","signIn","forwardRef","href","AppleLogo","FacebookLogo","GoogleLogo","EmailLogo","options","fallback","text","theme","orDivider","line","or","style","SvgActionsCancelCircleHighlightedMedium","fillRule","SvgActionsCheckCircleOnMedium","SvgNavigationWarningHighlightedMedium","SvgNavigationInformationNormalMedium","SvgActionsCancelNormalSmall","useInterval","callback","delay","savedCallback","useRef","current","setInterval","clearInterval","clip","clipPath","overflow","position","whiteSpace","AlertStatus","ERROR","SUCCESS","WARNING","INFO","ALERT_DELAY","fadeStyles","enter","exit","alertType","autoDismiss","autoDismissDelay","contentPosition","hideCloseButton","hideIcon","iconSize","onClose","indicatorIcon","messageType","alertStyle","buttonStyle","ErrorIcon","SuccessIcon","WarningIcon","InfoIcon","getAlertDetails","fadeStyle","setFadeStyle","useState","handleOnClose","Promise","resolve","setTimeout","alert","fadeIn","fadeOut","role","alertInner","alertContent","alignLeft","alignCenter","alignRight","VisuallyHidden","closeButtonContainer","button","CancelIcon","autoDismissBar","useQueue","initialValues","queue","setState","enqueue","useCallback","items","dequeue","slice","updateQueue","fn","clearQueue","peek","freeze","man","woman","preferNotSay","nonBinary","LOCALE","deDE","enUS","enGB","esES","es419","frFR","itIT","jaJP","koKR","nlNL","ptBR","ptPT","ruRU","zhCN","zhTW","de","es","fr","it","ja","ko","nl","pt","ru","zh","control","variantA","variantB","android","iPhone","iPad","chrome","firefox","safari","optedOut","AlertContext","createContext","displayName","useAlertContext","context","useContext","AlertProvider","showAlert","alertConfig","Math","random","substring","containerId","alerts","some","hideAlert","filter","clearAlerts","providerState","useMemo","Provider","defaultTranslateAlertInfoText","totalAlertsShown","totalAlerts","AlertContainer","limit","shouldShowAlertInfoText","translateAlertInfoText","filterLimit","_","filterContainer","map","content","containerIdProp","rest","Alert","key","APPLE","EMAIL","FACEBOOK","GOOGLE","SvgActionsVisibleDisabledNormalSmall","SvgActionsVisibleNormalSmall","showPasswordText","hidePasswordText","passwordIsVisible","setPasswordIsVisible","Input","prev","ActionsVisibleNormalSmall","ActionsVisibleDisabledNormalSmall","label","inputMessage","errorMessage","errorMessageTestId","input","htmlFor","PasswordInput","textInput","message","error","i18nPrefix","EMAIL_REGISTRATION_FORM_ALERT_ID","authorizationUrl","reCaptchaSiteKey","honeyPot","isPremium","clubId","plan","challengeId","autoJoinChallenge","formAuthToken","track","idPrefix","formInput","setFormInput","email","password","passwordErrorMsg","setPasswordErrMsg","emailValidationState","setEmailValidationState","isProcessing","setIsProcessing","emailInput","passwordInput","recaptchaRef","useRecaptcha","useStravaErrorLogging","t","useStravaTranslations","emailRegFormAlert","handleEmailFormSubmit","recaptchaToken","executeAsync","getRecaptchaToken","element","option","elemAttrForAnalytics","formData","FormData","append","String","isNil","response","url","reject","apiClient","headers","post","then","data","catch","submitFormData","pathType","load","action","properties","path_type","redirect_url","location","validateEmail","isValidEmail","isExistingEmail","EmailValidator","isUniqueEmail","get","params","isAlreadyRegisteredEmail","validatePassword","isValidPassword","passwordValidationMsg","handleInputChange","event","target","onSubmit","preventDefault","validateForm","is_valid_email","is_valid_password","is_existing_email","reset","focus","noValidate","RegistrationInput","placeholder","onChange","onBlur","autoComplete","display","ReCAPTCHA","sitekey","disabled","Spinner","Element","attributes","_ref$attributes","_ref$children","_ref$selfClose","selfClose","Tag","_proto","_node","Filter","a","address","invalid","audio","br","void","body","TYPE_FLOW","TYPE_PHRASING","caption","parent","col","colgroup","details","dd","dl","dt","figcaption","footer","header","hr","img","li","main","ol","picture","rb","rp","rt","rtc","ruby","source","summary","table","tbody","td","tfoot","th","thead","tr","ul","video","wbr","createConfigBuilder","config","tagConfigs","_extends2","forEach","TYPE_PALPABLE","cite","class","colspan","controls","datetime","default","dir","kind","lang","loading","loop","media","muted","poster","sizes","span","start","srclang","srcset","rowspan","StyleFilter","_Filter","apply","keys","match","INVALID_STYLES","createHTMLDocument","Parser","matchers","filters","concat","keyIndex","container","allowed","allowList","ALLOWED_TAG_LIST","Set","BANNED_TAG_LIST","_proto3","reduce","nextNode","node","parentConfig","tagName","matchedString","parts","valid","_parts","isVoid","partProps","tokenName","elementIndex","tokenizedString","_this","elements","_match","includes","childConfig","Boolean","noHtml","disableLineBreaks","nextMarkup","createContainer","createDocument","INVALID_ROOTS","el","newName","ATTRIBUTES","newValue","Number","_this2","count","letter","toUpperCase","protocol","toLowerCase","parseNode","parentNode","transform","transformOnlyAllowList","mergedText","_this3","transformed","has","elementProps","open","_open","_match2","startIndex","_elements$tokenName","matcher","endIndex","nodes","push","containerTagName","emptyContent","parsedContent","mainContent","markup","legalTerms","terms_path","legalPrivacy","privacy_path","Markup","noWrap","echelon","require","authorizationUrls","appleState","category","_track","useStravaAnalytics","appleSignin","isSignUpModalOpen","dismissSignUpModal","copyParams","useSignUpModalContext","fields","page","copy_variant","handleExtAuthBtnClick","assign","LinkButton","ActionsCancelNormalSmall","AccountAuthButton","OrDivider","EmailRegistrationForm","DisclaimerText","SignUpModalContext","SignUpModalContextProvider","nameForFollowAthleteVariant","setIsSignUpModalOpen","setVariant","openSignUpModal","_variant","generic","generic_time_delayed","follow_athlete","join_challenge","kudos_comment","SvgAchievementsTrophyNormalSmall","SvgActionsCommentNormalSmall","SvgActionsKudoNormalSmall","SvgActionsLockClosedNormalXsmall","clipRule","useSafeState","initialState","mountedRef","SvgNavigationProfileHighlightedMedium","SvgBadgesMulticolorSuperuserSmall","SvgBadgesMulticolorSummitSmall","SvgBadgesMulticolorProSmall","SvgBadgesMulticolorVerifiedSmall","Img","setChildren","image","Image","onload","onerror","badge","classNames","avatar","ProBadge","EmployeeBadge","SubscriberBadge","VerifiedBadge","getBadge","imgWrapper","AvatarFallback","root","Date","now","reWhitespace","test","charAt","reTrimStart","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isObject","other","valueOf","baseTrim","isBinary","nativeMax","max","nativeMin","min","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","this","clearTimeout","toNumber","cancel","flush","debounce","Area","stream","xScale","yScale","formatData","convertedElevation","elev","dist","convertedDistance","drawArea","area","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","render","Tooltip","chartWidth","chartMargin","textRef","boxWidth","setBoxWidth","rightBound","padding","currBoxAlign","useLayoutEffect","widths","getBoundingClientRect","maxWidth","newSize","round","InfoBox","boxHeight","infoBox","stat","contentItem","dy","dx","group","marker","top","y2","x1","x2","right","bottom","left","ElevationChart","Component","markerPosition","margin","tooltipContent","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","handleMouseLeave","onMouseLeave","ElevationFormatter","DistanceFormatter","gradePercentFormatter","PercentFormatter","heightProp","offsetWidth","yMax","yMin","scaleLinear","range","maxIndex","distanceDiff","end","enoughSpaceAtStart","enoughSpaceAtEnd","paddedStart","paddedEnd","croppedElevationStream","scopeColor","highlightArea","highlightAreaColor","onMouseMove","wrapperClassName","labelClassName","valueClassName","labelAfterValue","labelElement","statLabel","statValue","Stats","listClassName","child","tester","exports","split","part","_assertThisInitialized","ReferenceError","_React$Component","subClass","superClass","handleExpired","bind","handleErrored","handleChange","handleRecaptchaRef","create","constructor","__proto__","getValue","grecaptcha","_widgetId","getResponse","getWidgetId","execute","_executeRequested","executionResolve","executionReject","onExpired","onErrored","token","explicitRender","wrapper","tabindex","stoken","hl","captcha","delayOfCaptchaIframeRemoving","temporaryNode","firstChild","removeChild","elem","_this$props","childProps","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","SCRIPT_MAP","idCount","callbackName","getScriptURL","recaptchaOptions","useRecaptchaNet","globalName","WrappedComponent","wrappedComponentName","AsyncScriptLoader","_Component","__scriptURL","asyncScriptLoaderGetScriptLoaderID","__scriptLoaderID","setupScriptURL","asyncScriptLoaderHandleLoad","asyncScriptOnLoad","asyncScriptLoaderTriggerOnScriptLoaded","mapEntry","loaded","obsKey","observers","scriptURL","_options","scriptId","entry","errored","attribute","setAttribute","callObserverFuncAndRemoveObserver","observersMap","observer","removeOnUnmount","allScripts","getElementsByTagName","forwardedRef","ForwardedComponent"],"sourceRoot":""}