{"version":3,"file":"js/33263-8f52c7e4622c266815f5.js","mappings":"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","sources":["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/styles.module.scss?8842","webpack://StravaModern/./node_modules/@strava/ui/Stat/index.js","webpack://StravaModern/./node_modules/@strava/ui/Stats/styles.module.scss?4754","webpack://StravaModern/./node_modules/@strava/ui/Stats/index.js"],"sourcesContent":["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, { ComponentPropsWithoutRef } 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 [error, setError] = useSafeState(false);\n\n const handleError = () => {\n setError(true);\n };\n\n return error ? (\n <>{fallback}\n ) : (\n {alt}\n );\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 colors from '../colors';\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: colors.O50_STRAVA_ORANGE,\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--dhYaU\",\"statLabel\":\"Stat--statLabel--nlWQq\",\"statValue\":\"Stat--statValue--wQLW4\",\"statXs\":\"Stat--statXs--V2KfQ\",\"statSm\":\"Stat--statSm--dJWfF\",\"statLg\":\"Stat--statLg--sLA+5\",\"statXl\":\"Stat--statXl--DTGq3\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport styles from './styles.module.scss';\n\nconst Stat = (props) => {\n const {\n value,\n label,\n type,\n wrapperClassName,\n labelClassName,\n valueClassName,\n labelAfterValue\n } = props;\n\n const labelElement = (\n \n {label}\n \n );\n\n const wrapperClasses = `${styles.stat} ${styles[type] || ''} ${\n wrapperClassName || ''\n }`;\n\n return (\n
\n {!labelAfterValue && labelElement}\n
\n {value}\n
\n {labelAfterValue && labelElement}\n
\n );\n};\n\nStat.TYPES = ['stat-xs', 'stat-sm', 'stat-lg', 'stat-xl'];\n\nStat.propTypes = {\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.element\n ]).isRequired,\n label: PropTypes.string.isRequired,\n type: PropTypes.oneOf(Stat.TYPES),\n wrapperClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n valueClassName: PropTypes.string,\n labelAfterValue: PropTypes.bool\n};\n\nStat.defaultProps = {\n type: null,\n wrapperClassName: null,\n labelClassName: null,\n valueClassName: null,\n labelAfterValue: false\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"],"names":["useSafeState","initialState","mountedRef","useRef","useState","state","setState","useEffect","current","useCallback","args","SvgNavigationProfileHighlightedMedium","React","ref","color","size","title","titleId","props","fill","xmlns","viewBox","width","height","id","d","defaultProps","undefined","propTypes","PropTypes","SvgBadgesMulticolorSuperuserSmall","fillRule","SvgBadgesMulticolorSummitSmall","SvgBadgesMulticolorProSmall","SvgBadgesMulticolorVerifiedSmall","Img","src","alt","fallback","error","setError","onError","name","type","badge","className","otherProps","classNames","clsx","styles","children","getBadge","root","reWhitespace","string","index","length","test","charAt","reTrimStart","slice","trimmedEndIndex","replace","value","isObjectLike","baseGetTag","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isSymbol","isObject","other","valueOf","baseTrim","isBinary","nativeMax","Math","max","nativeMin","min","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","now","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","clearTimeout","toNumber","cancel","flush","debounce","Area","stream","xScale","yScale","clipPath","formatData","convertedElevation","map","elev","dist","convertedDistance","drawArea","area","x","y1","y0","isRequired","Axis","xAxisNode","yAxisNode","scalesAreEqual","scaleA","scaleB","domain","every","domainElement","includes","componentDidMount","drawAxes","componentDidUpdate","prevProps","scopeTo","hasScopeChanged","hasScaleChanged","hasWidthChanged","formatters","elevationFormatter","distanceFormatter","xAxis","axisBottom","yAxis","axisLeft","xTickCount","ticks","tickSize","tickFormat","e","formatShort","convert","select","render","transform","Tooltip","content","position","chartWidth","chartMargin","textRef","boxWidth","setBoxWidth","rightBound","padding","currBoxAlign","useLayoutEffect","Object","keys","widths","el","getBoundingClientRect","maxWidth","newSize","round","InfoBox","boxHeight","y","stat","contentItem","key","dy","label","dx","top","y2","x1","x2","right","bottom","left","ElevationChart","markerPosition","margin","tooltipContent","container","node","hitbox","handleResize","throttle","buildScales","updateMarker","onUpdateMarker","tooltipDistanceLabel","tooltipElevationLabel","tooltipGradeLabel","bounds","cursorPosition","clientX","distCursor","invert","streamIndex","bisectLeft","distance","elevation","grade","gradeAtIndex","handleMouseLeave","onMouseLeave","window","addEventListener","updateFormatters","prevElevation","prevDistance","prevUnits","units","elevationChanged","distanceChanged","unitsChanged","componentWillUnmount","removeEventListener","ElevationFormatter","DistanceFormatter","gradePercentFormatter","PercentFormatter","heightProp","offsetWidth","yMax","yMin","scaleLinear","range","maxIndex","distanceDiff","start","end","enoughSpaceAtStart","enoughSpaceAtEnd","paddedStart","paddedEnd","croppedElevationStream","scopeColor","highlightArea","highlightAreaColor","onMouseMove","Component","colors","Stat","wrapperClassName","labelClassName","valueClassName","labelAfterValue","labelElement","wrapperClasses","TYPES","Stats","listClassName","child"],"sourceRoot":""}