{"version":3,"file":"js/82888-f7afca3a113061e055f2.js","mappings":"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","sources":["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/../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/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","webpack://StravaModern/./node_modules/@strava/authentication-ui/node_modules/lodash-es/isNil.js","webpack://StravaModern/./node_modules/@strava/ui/Input/Input.module.scss?50e4","webpack://StravaModern/./node_modules/@strava/ui/Input/Input.tsx","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsVisibleDisabledNormalSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsVisibleNormalSmall.js","webpack://StravaModern/./node_modules/@strava/ui/Input/PasswordInput.module.scss?7172","webpack://StravaModern/./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/EmailRegistrationForm/email-registration-api.ts","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/src/constants.ts","webpack://StravaModern/./node_modules/@strava/authentication-ui/src/utils.ts","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelCircleHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCheckCircleOnMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationWarningHighlightedMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/NavigationInformationNormalMedium.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/icons/dist/ActionsCancelNormalSmall.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/react-hooks/src/use-interval/useInterval.hook.js","webpack://StravaModern/./node_modules/@strava/ui/Alert/Alert.module.scss?7e0f","webpack://StravaModern/./node_modules/@strava/ui/Alert/Alert.tsx","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/react-hooks/src/use-queue/useQueue.hook.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/constants/src/appConstants.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/@strava/utils/src/utils.ts","webpack://StravaModern/./node_modules/@strava/ui/Alert/AlertProvider/AlertContext.tsx","webpack://StravaModern/./node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.module.scss?1a42","webpack://StravaModern/./node_modules/@strava/ui/Alert/AlertProvider/AlertContainer.tsx","webpack://StravaModern/./node_modules/@strava/ui/Spinner/Spinner.module.scss?87e9","webpack://StravaModern/./node_modules/@strava/ui/Spinner/Spinner.tsx","webpack://StravaModern/./node_modules/@strava/ui/VisuallyHidden/VisuallyHidden.tsx","webpack://StravaModern/./node_modules/email-validator/index.js","webpack://StravaModern/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"],"sourcesContent":["// 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",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","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 };","/**\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 {\"input\":\"Input--input--myCs3\"};","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--ARtRG\",\"showPasswordButton\":\"Input--showPasswordButton--9Ubgm\"};","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 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","// 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","export const APPLE = 'apple';\nexport const EMAIL = 'email';\nexport const FACEBOOK = 'facebook';\nexport const GOOGLE = 'google';\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 * 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","// extracted by mini-css-extract-plugin\nexport default {\"alert\":\"Alert--alert--mHJG0\",\"alertInner\":\"Alert--alertInner--Cohht\",\"hasError\":\"Alert--hasError--6H8nL\",\"buttonError\":\"Alert--buttonError--JNCju\",\"hasWarning\":\"Alert--hasWarning--XMcB+\",\"buttonWarning\":\"Alert--buttonWarning--B8+01\",\"hasSuccess\":\"Alert--hasSuccess--HEVyx\",\"buttonSuccess\":\"Alert--buttonSuccess--8cDF1\",\"hasInfo\":\"Alert--hasInfo--cIXeI\",\"buttonInfo\":\"Alert--buttonInfo--3W2YL\",\"alertContent\":\"Alert--alertContent--Ady-v\",\"alignLeft\":\"Alert--alignLeft--TWc3-\",\"alignCenter\":\"Alert--alignCenter--Wjvd+\",\"alignRight\":\"Alert--alignRight--GltzN\",\"indicatorIcon\":\"Alert--indicatorIcon--mcHuS\",\"closeButtonContainer\":\"Alert--closeButtonContainer--0bGld\",\"button\":\"Alert--button--j9wSm\",\"autoDismissBar\":\"Alert--autoDismissBar--mBh+B\",\"countdown\":\"Alert--countdown--4hdDW\",\"fadeIn\":\"Alert--fadeIn--m0c6K\",\"fadeOut\":\"Alert--fadeOut--V2zHS\",\"enterFadeOut\":\"Alert--enterFadeOut--ZHCGw\",\"newKudo\":\"Alert--newKudo--xwJ9a\"};","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--dxEXE\",\"alertContainerInfo\":\"AlertProvider--alertContainerInfo--RDrkO\"};","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","// extracted by mini-css-extract-plugin\nexport default {\"spinner\":\"Spinner--spinner--VZwB-\",\"graphic\":\"Spinner--graphic--D-BJP\",\"spin\":\"Spinner--spin--Rlswq\"};","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 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","\"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}","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n"],"names":["AppleLogo","React","FacebookLogo","GoogleLogo","EmailLogo","_ref","children","onClick","variant","className","options","Button","_extends","clsx","styles","type","fallback","fill","target","arguments","Element","attributes","_ref$attributes","_ref$children","_ref$selfClose","selfClose","Tag","_proto","name","_node","Filter","a","content","self","address","invalid","audio","br","void","body","TYPE_FLOW","button","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","track","ul","video","wbr","createConfigBuilder","config","tagConfigs","_extends2","forEach","TYPE_PALPABLE","Object","tag","alt","cite","class","colspan","controls","datetime","default","disabled","dir","height","href","id","kind","label","lang","loading","loop","media","muted","poster","role","sizes","span","start","style","src","srclang","srcset","title","width","rowspan","StyleFilter","_Filter","apply","value","keys","key","String","match","INVALID_STYLES","document","createHTMLDocument","Parser","props","matchers","filters","concat","keyIndex","container","allowed","allowList","ALLOWED_TAG_LIST","Set","BANNED_TAG_LIST","_proto3","reduce","nextNode","filter","node","string","parentConfig","tagName","matchedString","parts","index","length","valid","_parts","isVoid","partProps","tokenName","elementIndex","tokenizedString","_this","elements","_match","slice","includes","childConfig","Boolean","noHtml","disableLineBreaks","nextMarkup","createContainer","global","createDocument","INVALID_ROOTS","el","Array","newName","ATTRIBUTES","newValue","Number","_this2","count","letter","toUpperCase","protocol","toLowerCase","parseNode","parentNode","transform","transformOnlyAllowList","mergedText","_this3","transformed","has","elementProps","open","_open","_match2","text","startIndex","_elements$tokenName","matcher","endIndex","nodes","push","containerTagName","emptyContent","parsedContent","mainContent","markup","t","useStravaTranslations","legalTerms","terms_path","legalPrivacy","privacy_path","Markup","noWrap","assign","i","prototype","hasOwnProperty","call","this","_assertThisInitialized","ReferenceError","ReCAPTCHA","_React$Component","subClass","superClass","handleExpired","bind","handleErrored","handleChange","handleRecaptchaRef","create","constructor","__proto__","getValue","grecaptcha","undefined","_widgetId","getResponse","getWidgetId","execute","_executeRequested","executeAsync","Promise","resolve","reject","executionResolve","executionReject","reset","onExpired","onErrored","token","onChange","explicitRender","render","wrapper","createElement","sitekey","callback","theme","tabindex","size","stoken","hl","badge","captcha","appendChild","componentDidMount","componentDidUpdate","componentWillUnmount","delayOfCaptchaIframeRemoving","temporaryNode","display","firstChild","setTimeout","removeChild","elem","_this$props","childProps","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","ref","displayName","propTypes","defaultProps","SCRIPT_MAP","idCount","callbackName","getScriptURL","window","recaptchaOptions","useRecaptchaNet","globalName","WrappedComponent","wrappedComponentName","AsyncScriptLoader","_Component","context","state","__scriptURL","asyncScriptLoaderGetScriptLoaderID","__scriptLoaderID","setupScriptURL","asyncScriptLoaderHandleLoad","setState","asyncScriptOnLoad","asyncScriptLoaderTriggerOnScriptLoaded","mapEntry","loaded","Error","obsKey","observers","scriptURL","_options","scriptId","entry","errored","script","attribute","async","setAttribute","callObserverFuncAndRemoveObserver","func","observersMap","onload","observer","onerror","removeOnUnmount","allScripts","getElementsByTagName","forwardedRef","Component","ForwardedComponent","forwardRef","SvgActionsVisibleDisabledNormalSmall","color","titleId","xmlns","viewBox","d","PropTypes","SvgActionsVisibleNormalSmall","showPasswordText","hidePasswordText","passwordIsVisible","setPasswordIsVisible","useState","Input","prev","ActionsVisibleNormalSmall","ActionsVisibleDisabledNormalSmall","VisuallyHidden","inputMessage","errorMessage","errorMessageTestId","htmlFor","PasswordInput","i18nPrefix","EMAIL_REGISTRATION_FORM_ALERT_ID","authorizationUrl","reCaptchaSiteKey","honeyPot","isPremium","clubId","plan","challengeId","autoJoinChallenge","formAuthToken","idPrefix","alertConfig","formInput","setFormInput","email","password","passwordErrorMsg","setPasswordErrMsg","emailValidationState","setEmailValidationState","isProcessing","setIsProcessing","emailInput","useRef","passwordInput","recaptchaRef","useRecaptcha","logError","useStravaErrorLogging","showAlert","clearAlerts","useAlertContext","emailRegFormAlert","alertType","AlertStatus","containerId","hideCloseButton","handleEmailFormSubmit","recaptchaToken","current","getRecaptchaToken","element","elemAttrForAnalytics","EMAIL","formData","FormData","append","isNil","response","url","apiClient","headers","post","then","data","catch","error","submitFormData","pathType","load","action","properties","path_type","redirect_url","location","validateEmail","isValidEmail","isExistingEmail","message","EmailValidator","isUniqueEmail","get","params","_ref2","isAlreadyRegisteredEmail","validatePassword","isValidPassword","passwordValidationMsg","handleInputChange","event","onSubmit","preventDefault","validateForm","is_valid_email","is_valid_password","is_existing_email","focus","noValidate","RegistrationInput","placeholder","onBlur","autoComplete","Spinner","APPLE","FACEBOOK","GOOGLE","option","SvgActionsCancelCircleHighlightedMedium","fillRule","SvgActionsCheckCircleOnMedium","SvgNavigationWarningHighlightedMedium","SvgNavigationInformationNormalMedium","SvgActionsCancelNormalSmall","useInterval","delay","savedCallback","useEffect","setInterval","clearInterval","ERROR","SUCCESS","WARNING","INFO","ALERT_DELAY","fadeStyles","enter","exit","autoDismiss","autoDismissDelay","contentPosition","hideIcon","iconSize","onClose","indicatorIcon","messageType","alertStyle","buttonStyle","ErrorIcon","SuccessIcon","WarningIcon","InfoIcon","getAlertDetails","fadeStyle","setFadeStyle","handleOnClose","CancelIcon","useQueue","initialValues","queue","enqueue","useCallback","items","_key","dequeue","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","useContext","AlertProvider","Math","random","toString","substring","alerts","some","alert","hideAlert","providerState","useMemo","Provider","defaultTranslateAlertInfoText","totalAlertsShown","totalAlerts","AlertContainer","limit","shouldShowAlertInfoText","translateAlertInfoText","filterLimit","_","filterContainer","map","containerIdProp","rest","Alert","clip","clipPath","overflow","position","whiteSpace","tester","exports","test","split","part","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","module","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","e"],"sourceRoot":""}