{"version":3,"file":"js/51534-463942c5a81cb74cc75a.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/styles.module.scss?fa75","webpack://StravaModern/./node_modules/@strava/ui/Avatar/index.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/now.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/_trimmedEndIndex.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/_baseTrim.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/toNumber.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/debounce.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/throttle.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/area.module.scss?1347","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Area.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/axis.module.scss?8da9","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Axis.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Tooltip/styles.module.scss?cba6","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/Tooltip/index.js","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/styles.module.scss?3232","webpack://StravaModern/./node_modules/@strava/ui/ElevationChart/index.js","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--jm12L\",\"imgWrapper\":\"Avatar--imgWrapper--nqTNh\",\"badge\":\"Avatar--badge--KGSK3\",\"athlete\":\"Avatar--athlete--+dI8E\",\"xsmall\":\"Avatar--xsmall--ODR9J\",\"small\":\"Avatar--small--GjHCV\",\"large\":\"Avatar--large--z2KuP\",\"xlarge\":\"Avatar--xlarge--iP6l5\",\"club\":\"Avatar--club--imVJU\"};","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useSafeState } from '@strava/react-hooks/src/use-safe-state';\n\nimport AvatarFallback from '@strava/icons/NavigationProfileHighlightedMedium';\n\nimport EmployeeBadge from '@strava/icons/BadgesMulticolorSuperuserSmall';\nimport SubscriberBadge from '@strava/icons/BadgesMulticolorSummitSmall';\nimport ProBadge from '@strava/icons/BadgesMulticolorProSmall';\nimport VerifiedBadge from '@strava/icons/BadgesMulticolorVerifiedSmall';\n\nimport styles from './styles.module.scss';\n\nconst Img = ({ src, alt, title, fallback }) => {\n const [children, setChildren] = useSafeState(null);\n\n useEffect(() => {\n let image = 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\nImg.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n fallback: PropTypes.node\n};\n\nImg.defaultProps = {\n fallback: null\n};\n\nfunction getBadge(badge) {\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/**\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 href,\n className: classNameProp,\n ...otherProps\n}) => {\n const classNames = [styles.avatar, styles[type]];\n if (styles[size]) {\n classNames.push(styles[size]);\n }\n if (classNameProp) {\n classNames.push(classNameProp);\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 (href) {\n return (\n \n {children}\n \n );\n }\n\n return (\n
\n {children}\n
\n );\n};\n\nAvatar.propTypes = {\n name: PropTypes.string,\n alt: PropTypes.string,\n title: PropTypes.string,\n href: PropTypes.string,\n src: PropTypes.string.isRequired,\n type: PropTypes.oneOf(['athlete', 'club']).isRequired,\n size: PropTypes.oneOf(['xsmall', 'small', 'default', 'large', 'xlarge']),\n badge: PropTypes.oneOf([\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 ]),\n className: PropTypes.string\n};\n\nAvatar.defaultProps = {\n name: null,\n href: null,\n alt: '',\n title: null,\n size: null,\n badge: null,\n className: null\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 React.memo(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","children","setChildren","image","Image","onload","onerror","Avatar","name","type","badge","href","classNameProp","className","otherProps","classNames","styles","push","getBadge","join","isRequired","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","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":""}