{"version":3,"file":"js/62982-378b2ed59ecaef485832.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/react-hooks/src/use-window-scroll-top/useWindowScrollTop.hook.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/constants/src/appConstants.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/ui/clsx/clsx.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/state/FrontDoorsPageContainerContext.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/ui/StravaLogo/StravaLogo.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/ui/Button/styles.module.scss?d411","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/ui/Button/Button.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/ui/Button/LinkButton.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/DesktopNav/DesktopNav.module.scss?c1e7","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/IconButton/IconButton.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/DesktopNav/DesktopNav.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_freeGlobal.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_root.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Symbol.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getRawTag.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_objectToString.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseGetTag.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isObjectLike.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isString.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/utils/src/utils.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/CallToAction/CallToAction.module.scss?0611","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/CallToAction/CallToAction.js","webpack://StravaModern/../src/index.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/components/MenuDrawer/MenuDrawer.module.scss?958d","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/components/MenuDrawer/MenuDrawer.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/components/MenuIcon/MenuIcon.module.scss?6a21","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/components/MenuIcon/MenuIcon.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/MobileNav.module.scss?096c","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/components/MobileNav/MobileNav.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/Header.module.scss?0ddb","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Header/Header.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/node_modules/@strava/react-hooks/src/use-safe-state/useSafeState.hook.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/node_modules/@strava/react-hooks/src/use-localized-images/constants.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/node_modules/@strava/react-hooks/src/use-localized-images/helpers.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/node_modules/@strava/react-hooks/src/use-localized-images/useLocalizedImages.hook.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/src/AppStoreBadges/components/Badge/Badge.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/src/AppStoreBadges/constants.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/node_modules/@strava/utils/src/utils.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/src/AppStoreBadges/helpers.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/node_modules/@strava/shared-ui/src/AppStoreBadges/AppStoreBadges.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Footer/components/SocialLink/SocialLink.module.scss?b5d7","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Footer/components/SocialLink/SocialLink.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Footer/Footer.module.scss?6353","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/components/Footer/Footer.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/state/FrontDoorsPageContainer.actions.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/state/FrontDoorsPageContainer.reducer.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/FrontDoorsPageContainer.module.scss?fd40","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/FrontDoorsPageContainer.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/front-doors-page-container-ui/helpers/getDefaultEventHandlers.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayMap.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isSymbol.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseToString.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/toString.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/replace.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/utils/src/externalSocialPartners/externalSocialPartners.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/utils/src/externalSocialPartners/useApple.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/DesktopRegistrationOptions/DesktopRegistrationOptions.module.scss?b2b7","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/DesktopRegistrationOptions/DesktopRegistrationOptions.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/helpers/getTitleAndSubtitle.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/DesktopRegistrationMessage/DesktopRegistrationMessage.module.scss?b10e","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/DesktopRegistrationMessage/DesktopRegistrationMessage.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/MobileRegistrationOptions/MobileRegistrationOptions.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/MobileRegistrationMessage/MobileRegistrationMessage.module.scss?d951","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/MobileRegistrationMessage/MobileRegistrationMessage.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_listCacheClear.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/eq.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_assocIndexOf.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_listCacheDelete.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_listCacheGet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_listCacheHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_listCacheSet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_ListCache.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stackClear.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stackDelete.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stackGet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stackHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isObject.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isFunction.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isMasked.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_coreJsData.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_toSource.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsNative.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getValue.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getNative.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Map.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_nativeCreate.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hashClear.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hashDelete.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hashGet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hashHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hashSet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Hash.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapCacheClear.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isKeyable.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getMapData.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapCacheDelete.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapCacheGet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapCacheHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapCacheSet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_MapCache.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stackSet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Stack.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_setCacheAdd.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_setCacheHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_SetCache.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arraySome.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_cacheHas.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_equalArrays.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Uint8Array.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_mapToArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_setToArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_equalByTag.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayPush.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseGetAllKeys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayFilter.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/stubArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getSymbols.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseTimes.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsArguments.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isArguments.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/stubFalse.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isBuffer.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isIndex.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isLength.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsTypedArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseUnary.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_nodeUtil.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isTypedArray.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayLikeKeys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isPrototype.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_overArg.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_nativeKeys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseKeys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/isArrayLike.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/keys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getAllKeys.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_equalObjects.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_DataView.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Promise.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_Set.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_WeakMap.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getTag.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsEqualDeep.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsEqual.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsMatch.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isStrictComparable.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_getMatchData.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_matchesStrictComparable.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseMatches.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_isKey.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/memoize.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_memoizeCapped.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_stringToPath.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_castPath.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_toKey.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseGet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/get.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseHasIn.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_hasPath.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/hasIn.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseMatchesProperty.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/identity.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseProperty.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_basePropertyDeep.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/property.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIteratee.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_createBaseFor.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseFor.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_createBaseEach.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseEach.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseForOwn.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseMap.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/map.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseFindIndex.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIsNaN.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_strictIndexOf.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseIndexOf.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayIncludes.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_arrayIncludesWith.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/noop.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_createSet.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/_baseUniq.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/lodash-es/uniqBy.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/shared-ui/src/Picture/components/SourceTags/helpers.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/shared-ui/src/Picture/components/SourceTags/SourceTags.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/shared-ui/src/Picture/components/ImgTag/ImgTag.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/shared-ui/src/Picture/constants.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/shared-ui/src/Picture/Picture.js","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/TabletImage/TabletImage.module.scss?5442","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/components/TabletImage/TabletImage.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/AccountRegistrationPage.module.scss?150a","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/AccountRegistrationPage.tsx","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/node_modules/@strava/utils/src/utils.ts","webpack://StravaModern/./node_modules/@strava/account-registration-page-ui/src/helpers/useExtAuthBtnClickHandler.hook.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\n\nexport const useWindowScrollTop = () => {\n const [windowScrollTop, setWindowScrollTop] = useState(0);\n\n const onScroll = useCallback(() => {\n setWindowScrollTop(window.scrollY);\n }, []);\n\n useEffect(() => {\n window?.addEventListener('scroll', onScroll);\n return () => {\n window?.removeEventListener('scroll', onScroll);\n };\n }, [onScroll]);\n\n return [windowScrollTop, onScroll];\n};\n\nexport default useWindowScrollTop;\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","type Value = string | number | boolean | undefined | null;\ntype MixObject = {\n [key: string]: boolean | Mix | undefined | null;\n};\ntype MixArray = Array;\ntype Mix = Value | MixObject | MixArray;\n\nfunction toVal(mix: Mix): string {\n let k,\n y,\n str = '';\n\n if (typeof mix === 'string' || typeof mix === 'number') {\n str += mix;\n } else if (typeof mix === 'object') {\n if (Array.isArray(mix)) {\n for (k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((y = toVal(mix[k]))) {\n str && (str += ' ');\n str += y;\n }\n }\n }\n } else {\n for (k in mix) {\n if (!mix || mix[k]) {\n str && (str += ' ');\n str += k;\n }\n }\n }\n }\n\n return str;\n}\n\nexport function clsx(..._args: Mix[]): string {\n let i = 0,\n tmp,\n x,\n str = '';\n\n while (i < arguments.length) {\n if ((tmp = arguments[i++])) {\n if ((x = toVal(tmp))) {\n str && (str += ' ');\n str += x;\n }\n }\n }\n return str;\n}\n\nexport default clsx;\n","import React, { createContext, useContext } from 'react';\n\nconst FrontDoorsPageContainerContext = createContext();\nFrontDoorsPageContainerContext.displayName = 'FrontDoorsPageContainerContext';\n\nexport const useFrontDoorsPageContainerContext = () => {\n const context = useContext(FrontDoorsPageContainerContext);\n if (!context) {\n throw new Error(\n 'useFrontDoorsPageContainerContext must be used within the FrontDoorsPageContainerContext.Provider'\n );\n }\n return context;\n};\n\nexport const FrontDoorsPageContainerContextProvider = (props) => (\n \n);\n\nexport default FrontDoorsPageContainerContext;\n","import React from 'react';\nimport { color } from '@strava/ui-tokens/js';\nimport clsx from '../clsx';\n\nexport interface StravaLogoProps {\n alt?: string;\n className?: string;\n width: string | number;\n height: string | number;\n fill: string;\n style: React.CSSProperties;\n}\n\nfunction StravaLogo({\n className,\n alt = 'Strava',\n width = 'auto',\n height = 'auto',\n fill = color.colorCoreO3,\n style,\n ...props\n}: StravaLogoProps) {\n return (\n \n {alt}\n \n \n );\n}\n\nexport default StravaLogo;\n","// extracted by mini-css-extract-plugin\nexport default {\"btn\":\"Button--btn--DCYws\",\"default\":\"Button--default--5ZDJs\",\"primary\":\"Button--primary--FZuCk\",\"primaryOutline\":\"Button--primaryOutline--wjMlQ\",\"secondary\":\"Button--secondary--ENNv6\",\"icon\":\"Button--icon--PEpBe\",\"text\":\"Button--text--Ld+5R\"};","import React from 'react';\nimport clsx from 'clsx';\n\nimport styles from './styles.module.scss';\n\nexport interface ButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n children: React.ReactNode;\n variant?:\n | 'default'\n | 'primary'\n | 'primaryOutline'\n | 'secondary'\n | 'icon'\n | 'text';\n className?: string;\n}\n\nconst Button = React.forwardRef(\n ({ children, className, variant = 'default', ...props }, ref) => (\n \n {children}\n \n )\n);\n\nexport default Button;\n","import clsx from 'clsx';\nimport React, { ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport styles from './styles.module.scss';\nimport { ButtonProps } from './Button';\n\nexport type LinkButtonProps = ButtonProps & ComponentPropsWithoutRef<'a'>;\n\nconst LinkButton = forwardRef(\n ({ href, children, className, variant = 'default', ...otherProps }, ref) => {\n return (\n \n {children}\n \n );\n }\n);\n\nexport default LinkButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"DesktopNav--container--3+Z9C\",\"item\":\"DesktopNav--item--LfrFo\",\"loginBtn\":\"DesktopNav--loginBtn--XqADk\",\"signupBtn\":\"DesktopNav--signupBtn--m1iBY\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@strava/ui/Button';\n\nconst IconButton = ({\n children,\n onClick,\n ariaLabel,\n className,\n ...options\n}) => {\n return (\n \n {children}\n \n );\n};\n\nIconButton.defaultProps = {\n className: null\n};\n\nIconButton.propTypes = {\n children: PropTypes.node.isRequired,\n onClick: PropTypes.func.isRequired,\n ariaLabel: PropTypes.string.isRequired,\n className: PropTypes.string\n};\n\nexport default IconButton;\n","import React from 'react';\nimport StravaLogo from '@strava/ui/StravaLogo';\nimport Button from '@strava/ui/Button';\nimport { EXPERIMENT_COHORTS } from '@strava/constants/src/appConstants';\nimport { useFrontDoorsPageContainerContext } from '../../../../state/FrontDoorsPageContainerContext';\nimport styles from './DesktopNav.module.scss';\nimport IconButton from '../../../IconButton';\n\nconst DesktopNav = () => {\n const {\n t,\n state,\n onDesktopHeaderLoginBtnClick,\n onDesktopHeaderSignupBtnClick,\n onDesktopHeaderLogoClick\n } = useFrontDoorsPageContainerContext();\n const { cohort, menuConfig } = state;\n const { showLoginOptionOnly } = menuConfig;\n\n const handleLoginBtnClick = () => {\n onDesktopHeaderLoginBtnClick();\n window.location.href = '/login';\n };\n\n const handleSignupBtnClick = () => {\n onDesktopHeaderSignupBtnClick();\n window.location.href = '/register';\n };\n\n const handleLogoClick = () => {\n onDesktopHeaderLogoClick();\n window.location.href = '/';\n };\n\n // TODO - cleanup after experiment https://strava.atlassian.net/browse/ACQN-301\n const signupBtnCopy = () => {\n // join_us -> 'Join For Free'\n const key = cohort === EXPERIMENT_COHORTS.variantA ? 'join_now' : 'join_us';\n return t(`header.${key}`);\n };\n\n return (\n
\n
\n \n \n \n
\n
\n \n {t('header.log_in')}\n \n {!showLoginOptionOnly && (\n \n {signupBtnCopy()}\n \n )}\n
\n
\n );\n};\n\nexport default DesktopNav;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\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 {\n CamelCasedProperties,\n CamelCasedPropertiesDeep,\n SnakeCasedPropertiesDeep\n} 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(\n object: T,\n isShallow: true\n): CamelCasedProperties;\nexport function convertKeysToCamel(\n object: T,\n isShallow?: false\n): CamelCasedPropertiesDeep;\nexport function convertKeysToCamel(object: T, isShallow?: boolean) {\n if (Array.isArray(object)) {\n return (object as unknown[]).map((item) =>\n convertKeysToCamel(item)\n ) as typeof isShallow extends true\n ? CamelCasedProperties\n : CamelCasedPropertiesDeep;\n }\n\n if (isObject(object)) {\n return Object.keys(object).reduce((o, k) => {\n const key = camelCase(k);\n const value = object[k as keyof typeof object] as CamelCasedProperties;\n\n if (!isShallow && isObject(value)) {\n return {\n ...o,\n [key]: convertKeysToCamel(value)\n };\n }\n\n if (!isShallow && 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 CamelCasedProperties);\n }\n\n return object as typeof isShallow extends true\n ? CamelCasedProperties\n : 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 or webapp\n */\nexport const isStagingOrLocal = (host: string) =>\n ['staging', 'localhost', 'webapp'].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\n/**\n * Uses the host to determine if the protocol should be http or https\n *\n * @param host - host name\n * @returns {string} - Protocol (http / https)\n */\nexport const getProtocolForHost = (host: string) => {\n return host.includes('localhost') ? 'http' : 'https';\n};\n\n/**\n * Constructs the site root URL\n *\n * @param host - host name\n * @returns {string} - Root URL with protocol\n */\nexport const getRootUrl = (host: string) => {\n return `${getProtocolForHost(host)}://${host}`;\n};\n\n/**\n * Constructs the athlete URL for pro and non-pro athletes, i.e.\n * https://www.strava.com/athletes/[athlete_id] or\n * https://www.strava.com/pros/[athlete_id]\n *\n * @param isPro - boolean indicating if the athlete is a pro or not\n * @param athleteId - athlete unique identifier\n * @param host - host name\n * @returns {string} - Root URL with protocol\n */\nexport const getAthleteUrl = (\n isPro: boolean,\n athleteId: number,\n host: string\n) => {\n return `${getProtocolForHost(host)}://${host}/${\n isPro ? 'pros' : 'athletes'\n }/${athleteId.toString()}`;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"callToAction\":\"CallToAction--callToAction--2a+gN\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport { LinkButton } from '@strava/ui/Button';\nimport { useStravaBranch } from '@strava/container-context';\n\nimport styles from './CallToAction.module.scss';\n\nconst CallToAction = ({ label, className, dataCy, onClick }) => {\n const { appLink, isProcessing } = useStravaBranch();\n\n return (\n \n {label}\n \n );\n};\n\nCallToAction.propTypes = {\n label: PropTypes.string.isRequired,\n className: PropTypes.string,\n dataCy: PropTypes.string,\n onClick: PropTypes.func\n};\n\nCallToAction.defaultProps = {\n className: undefined,\n dataCy: undefined,\n onClick: () => {}\n};\n\nexport default CallToAction;\n","import React, { useEffect, useMemo, useRef } from 'react'\nimport type { CSSProperties } from 'react'\nimport './styles.scss'\n\ntype Props = {\n open: boolean\n onClose?: () => void\n direction: 'left' | 'right' | 'top' | 'bottom'\n lockBackgroundScroll?: boolean\n children?: React.ReactNode\n duration?: number\n overlayOpacity?: number\n overlayColor?: String\n enableOverlay?: boolean\n style?: React.CSSProperties\n zIndex?: number\n size?: number | string\n className?: string\n customIdSuffix?: string\n overlayClassName?: string\n}\n\nconst getDirectionStyle = (\n dir: string,\n size?: number | string,\n): {} | React.CSSProperties => {\n switch (dir) {\n case 'left':\n return {\n top: 0,\n left: 0,\n transform: 'translate3d(-100%, 0, 0)',\n width: size,\n height: '100vh',\n }\n case 'right':\n return {\n top: 0,\n right: 0,\n transform: 'translate3d(100%, 0, 0)',\n width: size,\n height: '100vh',\n }\n case 'bottom':\n return {\n left: 0,\n right: 0,\n bottom: 0,\n transform: 'translate3d(0, 100%, 0)',\n width: '100%',\n height: size,\n }\n case 'top':\n return {\n left: 0,\n right: 0,\n top: 0,\n transform: 'translate3d(0, -100%, 0)',\n width: '100%',\n height: size,\n }\n\n default:\n return {}\n }\n}\n\nconst EZDrawer: React.FC = (props) => {\n const {\n open,\n onClose = () => {},\n children,\n style,\n enableOverlay = true,\n overlayColor = '#000',\n overlayOpacity = 0.4,\n zIndex = 100,\n duration = 500,\n direction,\n size = 250,\n className,\n customIdSuffix,\n lockBackgroundScroll = false,\n overlayClassName = '',\n } = props\n\n const bodyRef = useRef(null)\n\n useEffect(() => {\n const updatePageScroll = () => {\n bodyRef.current = window.document.querySelector('body')\n\n if (bodyRef.current && lockBackgroundScroll) {\n if (open) {\n bodyRef.current.style.overflow = 'hidden'\n } else {\n bodyRef.current.style.overflow = ''\n }\n }\n }\n\n updatePageScroll()\n }, [open])\n\n const idSuffix = useMemo(() => {\n return customIdSuffix || (Math.random() + 1).toString(36).substring(7)\n }, [customIdSuffix])\n\n const overlayStyles: CSSProperties = {\n backgroundColor: `${overlayColor}`,\n opacity: `${overlayOpacity}`,\n zIndex: zIndex,\n }\n\n const drawerStyles: CSSProperties = {\n zIndex: zIndex + 1,\n transitionDuration: `${duration}ms`,\n ...getDirectionStyle(direction, size),\n ...style,\n }\n\n return (\n
\n \n \n {children}\n \n {enableOverlay && (\n \n )}\n
\n )\n}\n\nexport default EZDrawer\n","// extracted by mini-css-extract-plugin\nexport default {\"menuDrawer\":\"MenuDrawer--menuDrawer--qEDiy\",\"active\":\"MenuDrawer--active--p1XGP\",\"primaryOptions\":\"MenuDrawer--primaryOptions--yfeMW\",\"secondaryOptions\":\"MenuDrawer--secondaryOptions--Hm8JE\",\"menuDrawerBtn\":\"MenuDrawer--menuDrawerBtn--2kVGU\",\"drawerCallToAction\":\"MenuDrawer--drawerCallToAction--FU8tz\"};","import React, { useEffect, useState } from 'react';\nimport Drawer from 'react-modern-drawer';\nimport Button from '@strava/ui/Button';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport { useFrontDoorsPageContainerContext } from '../../../../../../state/FrontDoorsPageContainerContext';\nimport CallToAction from '../../../../../CallToAction';\n\nimport 'react-modern-drawer/dist/index.css';\nimport styles from './MenuDrawer.module.scss';\n\nconst MenuDrawer = ({ isOpen, top, onClose }) => {\n const {\n t,\n onMobileHeaderMenuSignupBtnClick,\n onMobileHeaderMenuLoginBtnClick\n } = useFrontDoorsPageContainerContext();\n\n const PRIMARY_OPTIONS = [\n { key: 'home', destination: '/' },\n { key: 'features', destination: '/features' },\n {\n key: 'subscription',\n destination: '/subscribe?origin=website_header'\n }\n ];\n\n const SECONDARY_OPTIONS = [\n {\n key: 'stories',\n destination: 'https://stories.strava.com/'\n },\n {\n key: 'support',\n destination: 'https://support.strava.com/'\n },\n {\n key: 'sign_up',\n destination:\n '/register/free?cta=sign-up&element=mobile-nav&source=website_show'\n }\n ];\n\n const [location, setLocation] = useState('');\n\n useEffect(() => {\n setLocation(window.location.pathname);\n }, []);\n\n const handleLoginBtnClick = () => {\n onMobileHeaderMenuLoginBtnClick();\n window.location.href = '/login';\n };\n\n const generateLinkProps = ({ key, destination }) => {\n return {\n 'data-cy': `primary_option_${key}`,\n className: clsx({\n [styles.active]: location === destination\n }),\n href: destination\n };\n };\n\n return (\n \n \n\n \n\n
    \n
  • \n \n {t('header.log_in')}\n \n
  • \n\n
  • \n \n
  • \n
\n \n );\n};\n\nMenuDrawer.defaultProps = {\n top: 0\n};\n\nMenuDrawer.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n top: PropTypes.number\n};\n\nexport default MenuDrawer;\n","// extracted by mini-css-extract-plugin\nexport default {\"menuIcon\":\"MenuIcon--menuIcon--5GGLR\",\"bar\":\"MenuIcon--bar--8KEWf\",\"isOpen\":\"MenuIcon--isOpen--PQydX\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from '@strava/ui/clsx';\nimport styles from './MenuIcon.module.scss';\n\nconst MenuIcon = ({ isOpen }) => {\n return (\n
\n \n \n \n
\n );\n};\n\nMenuIcon.propTypes = {\n isOpen: PropTypes.bool.isRequired\n};\n\nexport default MenuIcon;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"MobileNav--container--3ETtt\",\"left\":\"MobileNav--left--tlRw9\",\"right\":\"MobileNav--right--Bdu4U\",\"logo\":\"MobileNav--logo--eI9Nj\",\"headerCallToAction\":\"MobileNav--headerCallToAction--Uvi3E\",\"menuBtn\":\"MobileNav--menuBtn--272BR\"};","import React, { useState, useEffect, useRef } from 'react';\nimport StravaLogo from '@strava/ui/StravaLogo';\nimport { getMobileOS } from '@strava/utils';\nimport SmartBanner from '@strava/smart-banner-ui';\nimport { useFrontDoorsPageContainerContext } from '../../../../state/FrontDoorsPageContainerContext';\nimport IconButton from '../../../IconButton';\nimport CallToAction from '../../../CallToAction';\nimport MenuDrawer from './components/MenuDrawer/MenuDrawer';\nimport MenuIcon from './components/MenuIcon';\n\nimport styles from './MobileNav.module.scss';\n\nconst MobileNav = () => {\n const [isMenuOpen, toggleMenu] = useState(false);\n const mobileAppDownloadBannerRef = useRef();\n const {\n t,\n state,\n onMobileHeaderLogoClick,\n onMobileHeaderMenuOpen,\n onMobileHeaderMenuClose,\n onMobileHeaderSignupBtnClick\n } = useFrontDoorsPageContainerContext();\n const { page, category, userAgent, showSmartBanner, branch, url } = state;\n const [forceSmartBanner, setForceSmartbanner] = useState(false);\n\n const handleLogoClick = () => {\n onMobileHeaderLogoClick();\n window.location.href = '/';\n };\n\n const handleMenuToggle = () => {\n if (isMenuOpen) {\n onMobileHeaderMenuClose();\n } else {\n onMobileHeaderMenuOpen();\n }\n toggleMenu(!isMenuOpen);\n };\n\n // For development only - use query param to force the smartbanner to show\n // on a page.\n useEffect(() => {\n if (window?.location?.href) {\n const [, queryParams] = window.location.href.split('?');\n const searchParams = new URLSearchParams(queryParams);\n setForceSmartbanner(!!searchParams.get('force_smartbanner'));\n }\n }, [url]);\n\n return (\n <>\n {(showSmartBanner || forceSmartBanner) && (\n \n )}\n
\n
\n \n \n \n
\n \n \n \n
\n
\n\n
\n \n
\n toggleMenu(!isMenuOpen)}\n top={\n mobileAppDownloadBannerRef.current?.getBoundingClientRect().height\n }\n />\n
\n \n );\n};\n\nexport default MobileNav;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Header--container--Uvd7X\",\"isScrolling\":\"Header--isScrolling--E+mFF\",\"menu\":\"Header--menu--dTyc-\",\"items\":\"Header--items--n177P\"};","import React, { forwardRef } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport { useFrontDoorsPageContainerContext } from '../../state/FrontDoorsPageContainerContext';\nimport DesktopNav from './components/DesktopNav';\nimport MobileNav from './components/MobileNav';\n\nimport styles from './Header.module.scss';\n\nconst Header = forwardRef((_, ref) => {\n const { state } = useFrontDoorsPageContainerContext();\n\n const isScrolling = state.windowScrollTop > 0;\n\n return (\n \n \n \n );\n});\n\nexport default Header;\n","import {\n Dispatch,\n SetStateAction,\n useRef,\n useCallback,\n useEffect,\n useState\n} 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 * */\n// eslint-disable-next-line import/prefer-default-export\nexport const useSafeState = (\n initialState: S | (() => S)\n): [S, Dispatch>] => {\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","export const DEFAULT_LOCALIZED_IMAGES_SIZES = [\n { id: 'lg', value: 'large', minVw: '1200px' },\n { id: 'md', value: 'medium', minVw: '992px' },\n { id: 'sm', value: 'small', minVw: '768px' },\n { id: 'xs', value: 'xsmall', minVw: '0px' }\n];\n\nexport const DEFAULT_LOCALIZED_IMAGES_FORMATS = ['webp', 'png'];\n\nexport const DEFAULT_LOCALIZED_IMAGES_RESOLUTIONS = ['1x', '2x'];\n\nexport const DEFAULT_LOCALIZED_IMAGES_DIRECTORY = 'shared';\n\nexport const DEFAULT_LOCALIZED_IMAGES_SIZES_ORDER = [\n 'xl',\n 'lg',\n 'md',\n 'sm',\n 'xs'\n];\n\nexport const DEFAULT_LOCALIZED_IMAGES_FORMATS_ORDER = ['webp', 'png', 'jpg'];\n","import { LOCALE } from '@strava/constants/src/appConstants';\n\nexport const sortImagesBySizeAndFormat =\n (sizeOrder, formatOrder) => (image1, image2) => {\n const { size: image1Size, format: image1Format } = image1;\n const { size: image2Size, format: image2Format } = image2;\n\n // Sort images by size\n if (sizeOrder.indexOf(image1Size?.id) > sizeOrder.indexOf(image2Size?.id)) {\n return 1;\n }\n\n if (sizeOrder.indexOf(image1Size?.id) < sizeOrder.indexOf(image2Size?.id)) {\n return -1;\n }\n\n // Sort images by format\n if (formatOrder.indexOf(image1Format) > formatOrder.indexOf(image2Format)) {\n return 1;\n }\n\n if (formatOrder.indexOf(image1Format) < formatOrder.indexOf(image2Format)) {\n return -1;\n }\n\n return 0;\n };\n\nexport const getImageLocaleDirectory = (locale, defaultDirectory) => {\n if (!locale) {\n return defaultDirectory;\n }\n\n return Object.values(LOCALE).includes(locale) ? locale : LOCALE.enUS;\n};\n\nexport const getImageLocale = (locale) => {\n if (!locale) {\n return null;\n }\n\n return Object.values(LOCALE).includes(locale) ? locale : LOCALE.enUS;\n};\n\nexport default {\n getImageLocaleDirectory,\n getImageLocale,\n sortImagesBySizeAndFormat\n};\n","import { useEffect } from 'react';\nimport { useSafeState } from '../use-safe-state';\nimport {\n DEFAULT_LOCALIZED_IMAGES_SIZES,\n DEFAULT_LOCALIZED_IMAGES_FORMATS,\n DEFAULT_LOCALIZED_IMAGES_RESOLUTIONS,\n DEFAULT_LOCALIZED_IMAGES_DIRECTORY,\n DEFAULT_LOCALIZED_IMAGES_SIZES_ORDER,\n DEFAULT_LOCALIZED_IMAGES_FORMATS_ORDER\n} from './constants';\nimport {\n getImageLocale,\n getImageLocaleDirectory,\n sortImagesBySizeAndFormat\n} from './helpers';\n\n/**\n * This hook accepts a 'key' and additional optional params and returns an array of localized image assets.\n * For each image asset a callback is called to load the asset.\n * @param {Object} params\n * @param {string} params.key - string representing collection of image files e.g. 'Strava.com-Home-Screen1'\n * @param {string} params.locale - locale to use in filename / filepath e.g. 'de-DE' (optional, if none provided, defaults to 'defaultDirectory')\n * @param {Array=} params.sizes - sizes to use for a given asset. e.g. [{ id: 'lg', value: 'large', minVw: '1200px' }, { id: 'md', value: 'medium', minVw: '992px' }]\n * @param {Array=} params.formats - formats to use for a given asset. e.g. ['webp', 'png']\n * @param {Array=} params.resolutions - resolutions to use for a given asset e.g. ['1x', '2x']\n * @param {string=} params.defaultDirectory - directory to use if no locale provided. Defaults to 'shared'\n * @param {Function=} params.imageImportCallback - Callback function; called for each image instance. Params passed: imageLocaleDirectory, imageKey, imageSize, imageFormat, imageResolution, imageLocale\n * @param {Function=} params.logError - Error handling function\n * @returns {Array} images\n */\n\nexport const useLocalizedImages = ({\n key,\n locale,\n sizes = DEFAULT_LOCALIZED_IMAGES_SIZES,\n formats = DEFAULT_LOCALIZED_IMAGES_FORMATS,\n resolutions = DEFAULT_LOCALIZED_IMAGES_RESOLUTIONS,\n defaultDirectory = DEFAULT_LOCALIZED_IMAGES_DIRECTORY,\n imageImportCallback = () => {},\n logError\n}) => {\n const [images, setImages] = useSafeState([]);\n\n useEffect(() => {\n // Import asset from dynamic filepath\n const importImage = async (imageData) => {\n try {\n return imageImportCallback(imageData);\n } catch (error) {\n logError(new Error(`Error in imageImportCallback, Error: ${error}`));\n return null;\n }\n };\n\n const initImages = async () => {\n sizes.forEach((size) => {\n formats.forEach((format) => {\n resolutions.forEach(async (resolution) => {\n // Import file\n const file = await importImage({\n imageLocaleDirectory: getImageLocaleDirectory(\n locale,\n defaultDirectory\n ),\n imageKey: key,\n imageSize: size,\n imageFormat: format,\n imageResolution: resolution,\n imageLocale: getImageLocale(locale)\n });\n\n if (file) {\n // Update state with new image\n setImages((prevImages) => [\n ...prevImages,\n { size, format, resolution, file }\n ]);\n }\n });\n });\n });\n };\n\n initImages();\n }, [\n key,\n locale,\n formats,\n sizes,\n resolutions,\n imageImportCallback,\n logError,\n defaultDirectory,\n setImages\n ]);\n\n // Note: Sorting the images before returning as the order is not guranteed due to async import operations.\n // Order is important for use cases such as tags within elements\n return images.sort(\n sortImagesBySizeAndFormat(\n DEFAULT_LOCALIZED_IMAGES_SIZES_ORDER,\n DEFAULT_LOCALIZED_IMAGES_FORMATS_ORDER\n )\n );\n};\n\nexport default useLocalizedImages;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nconst Badge = ({\n badge,\n imgTagFallbackConfig = { size: 'md', format: 'png', resolution: '1x' },\n onClick\n}) => {\n const [sources, setSources] = useState({});\n const [fallbackImgSrc, setFallbackImgSrc] = useState(null);\n const { id, url, images, isLazy, alt } = badge;\n\n useEffect(() => {\n const getSourceData = () => {\n const imgWebp1x = images.find(\n (image) => image.resolution === '1x' && image.format === 'webp'\n )?.file;\n const imgWebp2x = images.find(\n (image) => image.resolution === '2x' && image.format === 'webp'\n )?.file;\n const imgPng1x = images.find(\n (image) => image.resolution === '1x' && image.format === 'png'\n )?.file;\n const imgPng2x = images.find(\n (image) => image.resolution === '2x' && image.format === 'png'\n )?.file;\n\n return {\n ...((imgWebp1x || imgWebp2x) && {\n webp: [\n ...(imgWebp1x ? [`${imgWebp1x} 1x`] : []),\n ...(imgWebp2x ? [`${imgWebp2x} 2x`] : [])\n ].join(', ')\n }),\n ...((imgPng1x || imgPng2x) && {\n png: [\n ...(imgPng1x ? [`${imgPng1x} 1x`] : []),\n ...(imgPng2x ? [`${imgPng2x} 2x`] : [])\n ].join(', ')\n })\n };\n };\n\n const sourceData = getSourceData();\n\n setSources(sourceData);\n }, [images]);\n\n useEffect(() => {\n if (!fallbackImgSrc) {\n const defaultImage = images.find(\n (image) =>\n image.resolution === imgTagFallbackConfig.resolution &&\n image.format === imgTagFallbackConfig.format &&\n image.size.id === imgTagFallbackConfig.size\n );\n\n if (defaultImage?.file) {\n setFallbackImgSrc(defaultImage.file);\n }\n }\n }, [images, imgTagFallbackConfig, fallbackImgSrc]);\n\n return (\n onClick(id)} data-cy={id}>\n \n {Object.entries(sources).map(([key, value]) => (\n \n ))}\n \n \n \n );\n};\n\nBadge.propTypes = {\n badge: PropTypes.shape({\n id: PropTypes.string.isRequired,\n url: PropTypes.string,\n images: PropTypes.arrayOf(\n PropTypes.shape({\n file: PropTypes.string,\n format: PropTypes.string,\n resolution: PropTypes.string,\n size: PropTypes.shape({\n id: PropTypes.string,\n value: PropTypes.string,\n minVw: PropTypes.string\n })\n })\n ),\n isLazy: PropTypes.bool,\n alt: PropTypes.string\n }).isRequired,\n imgTagFallbackConfig: PropTypes.shape({\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg']),\n format: PropTypes.oneOf(['png', 'webp']),\n resolution: PropTypes.oneOf(['1x', '2x'])\n }),\n onClick: PropTypes.func.isRequired\n};\n\nBadge.defaultProps = {\n imgTagFallbackConfig: undefined\n};\n\nexport default Badge;\n","export const APP_STORE_BADGE_SIZES = [{ id: 'md', value: '', minVw: '0px' }];\n\nexport const APP_STORES = Object.freeze({\n google: 'google',\n apple: 'apple',\n unknown: 'unknown'\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 {\n CamelCasedProperties,\n CamelCasedPropertiesDeep,\n SnakeCasedPropertiesDeep\n} 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(\n object: T,\n isShallow: true\n): CamelCasedProperties;\nexport function convertKeysToCamel(\n object: T,\n isShallow?: false\n): CamelCasedPropertiesDeep;\nexport function convertKeysToCamel(object: T, isShallow?: boolean) {\n if (Array.isArray(object)) {\n return (object as unknown[]).map((item) =>\n convertKeysToCamel(item)\n ) as typeof isShallow extends true\n ? CamelCasedProperties\n : CamelCasedPropertiesDeep;\n }\n\n if (isObject(object)) {\n return Object.keys(object).reduce((o, k) => {\n const key = camelCase(k);\n const value = object[k as keyof typeof object] as CamelCasedProperties;\n\n if (!isShallow && isObject(value)) {\n return {\n ...o,\n [key]: convertKeysToCamel(value)\n };\n }\n\n if (!isShallow && 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 CamelCasedProperties);\n }\n\n return object as typeof isShallow extends true\n ? CamelCasedProperties\n : 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\n/**\n * Uses the host to determine if the protocol should be http or https\n *\n * @param host - host name\n * @returns {string} - Protocol (http / https)\n */\nexport const getProtocolForHost = (host: string) => {\n return host.includes('localhost') ? 'http' : 'https';\n};\n\n/**\n * Constructs the site root URL\n *\n * @param host - host name\n * @returns {string} - Root URL with protocol\n */\nexport const getRootUrl = (host: string) => {\n return `${getProtocolForHost(host)}://${host}`;\n};\n\n/**\n * Constructs the athlete URL for pro and non-pro athletes, i.e.\n * https://www.strava.com/athletes/[athlete_id] or\n * https://www.strava.com/pros/[athlete_id]\n *\n * @param isPro - boolean indicating if the athlete is a pro or not\n * @param athleteId - athlete unique identifier\n * @param host - host name\n * @returns {string} - Root URL with protocol\n */\nexport const getAthleteUrl = (\n isPro: boolean,\n athleteId: number,\n host: string\n) => {\n return `${getProtocolForHost(host)}://${host}/${\n isPro ? 'pros' : 'athletes'\n }/${athleteId.toString()}`;\n};\n","import { getMobileOS } from '@strava/utils';\nimport { MOBILE_OS } from '@strava/constants/src/appConstants';\nimport { APP_STORES } from './constants';\n\nexport const mobileOsToAppStore = (userAgent) => {\n switch (getMobileOS(userAgent)) {\n case MOBILE_OS.android:\n return APP_STORES.google;\n case MOBILE_OS.iPhone:\n case MOBILE_OS.iPad:\n return APP_STORES.apple;\n default:\n return APP_STORES.unknown;\n }\n};\n","import React, { useCallback } from 'react';\nimport { useLocalizedImages } from '@strava/react-hooks/src/use-localized-images';\nimport { useStravaBranch } from '@strava/container-context';\nimport Badge from './components/Badge';\nimport { APP_STORES, APP_STORE_BADGE_SIZES } from './constants';\nimport { mobileOsToAppStore } from './helpers';\n\nimport {\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\n\nconst AppStoreBadges = ({ onBadgeClick, className, userAgent }) => {\n const { t, getLanguage } = useStravaTranslations();\n const locale = getLanguage();\n\n const { logError } = useStravaErrorLogging();\n const { appLink } = useStravaBranch();\n\n // Note: Example path (locale provided) - './media/de-DE/app-store-de-DE@1x.png`\n const importBadgeImage = useCallback(\n async ({\n imageLocaleDirectory,\n imageKey,\n imageFormat,\n imageResolution,\n imageLocale\n }) => {\n // Create dynamic path to file\n const path = `${imageLocaleDirectory}/${imageKey}-${\n imageLocale ? `${imageLocale}` : ''\n }@${imageResolution}.${imageFormat}`;\n\n try {\n // Import file\n return (\n await import(\n /* webpackMode: \"eager\" */\n /* webpackExports: [\"default\", \"named\"] */\n `./media/${path}`\n )\n ).default;\n } catch (error) {\n logError(error);\n return null;\n }\n },\n [logError]\n );\n\n const appleBadgeImages = useLocalizedImages({\n key: 'app-store',\n locale,\n imageImportCallback: importBadgeImage,\n logError,\n sizes: APP_STORE_BADGE_SIZES\n });\n\n const googleBadgeImages = useLocalizedImages({\n key: 'play-store',\n locale,\n imageImportCallback: importBadgeImage,\n logError,\n sizes: APP_STORE_BADGE_SIZES\n });\n\n const appStore = mobileOsToAppStore(userAgent);\n\n return (\n
    \n {[APP_STORES.apple, APP_STORES.unknown].includes(appStore) && (\n
  • \n \n
  • \n )}\n {[APP_STORES.google, APP_STORES.unknown].includes(appStore) && (\n
  • \n \n
  • \n )}\n
\n );\n};\n\nexport default AppStoreBadges;\n","// extracted by mini-css-extract-plugin\nexport default {\"socialLink\":\"SocialLink--socialLink--rTG0p\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport styles from './SocialLink.module.scss';\n\nconst SocialLink = ({ url, image, altText, target, rel }) => {\n return (\n \n {altText}\n \n );\n};\n\nSocialLink.propTypes = {\n url: PropTypes.string.isRequired,\n image: PropTypes.string.isRequired,\n altText: PropTypes.string.isRequired,\n target: PropTypes.string,\n rel: PropTypes.string\n};\n\nSocialLink.defaultProps = {\n target: '_blank',\n rel: 'noopener noreferrer'\n};\n\nexport default SocialLink;\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"Footer--footer--EgYdV\",\"cpraComplianceCta\":\"Footer--cpraComplianceCta--1ce56\",\"container\":\"Footer--container--PvIjq\",\"privacySocial\":\"Footer--privacySocial--3tKQS\",\"social\":\"Footer--social--nZoE2\",\"links\":\"Footer--links--mJhp8\",\"highlight\":\"Footer--highlight--xQw5O\"};","import React, { useMemo } from 'react';\nimport StravaLogo from '@strava/ui/StravaLogo';\nimport { EXPERIMENT_COHORTS } from '@strava/constants/src/appConstants';\nimport CPRAComplianceCTA from '@strava/cpra-compliance-cta';\nimport clsx from '@strava/ui/clsx';\nimport AppStoreBadges from '@strava/shared-ui/src/AppStoreBadges';\nimport SocialLink from './components/SocialLink';\nimport { useFrontDoorsPageContainerContext } from '../../state/FrontDoorsPageContainerContext';\n\nimport socialTwitterImage from '../../media/social_tw.svg';\nimport socialYouTubeImage from '../../media/social_yt.svg';\nimport socialInstagramImage from '../../media/social_ig.svg';\nimport socialLinkedInImage from '../../media/social_li.svg';\nimport socialFacebookImage from '../../media/social_fb.svg';\n\nimport styles from './Footer.module.scss';\n\nconst Footer = () => {\n const { t, state, onFooterAppStoreBadgeClick } =\n useFrontDoorsPageContainerContext();\n const { cohort, dataSharingOptedOut, cpraI18nPrefix, menuConfig, userAgent } =\n state;\n const { showLoginOptionOnly } = menuConfig;\n\n const socialLinks = useMemo(\n () => [\n {\n id: 1,\n url: 'https://twitter.com/strava',\n image: socialTwitterImage,\n altText: t('footer.social.alt.twitter')\n },\n {\n id: 2,\n url: 'https://www.youtube.com/stravainc',\n image: socialYouTubeImage,\n altText: t('footer.social.alt.youtube')\n },\n {\n id: 3,\n url: 'https://www.instagram.com/strava/',\n image: socialInstagramImage,\n altText: t('footer.social.alt.instagram')\n },\n {\n id: 4,\n url: 'https://www.linkedin.com/company/strava-inc.',\n image: socialLinkedInImage,\n altText: t('footer.social.alt.linkedin')\n },\n {\n id: 5,\n url: 'https://www.facebook.com/Strava',\n image: socialFacebookImage,\n altText: t('footer.social.alt.facebook')\n }\n ],\n [t]\n );\n\n // TODO - cleanup after experiment https://strava.atlassian.net/browse/ACQN-301\n const signUpLinkCopy = () => {\n // join_us -> 'Join For Free'\n const key =\n cohort === EXPERIMENT_COHORTS.variantA\n ? 'header.join_now'\n : 'footer.links.join_us';\n return t(key);\n };\n\n return (\n \n );\n};\n\nexport default Footer;\n","export const UPDATE_WINDOW_SCROLL_TOP = 'UPDATE_WINDOW_SCROLL_TOP';\n\nexport default {\n UPDATE_WINDOW_SCROLL_TOP\n};\n","import { UPDATE_WINDOW_SCROLL_TOP } from './FrontDoorsPageContainer.actions';\n\nexport const reducer = (state, action) => {\n switch (action.type) {\n case UPDATE_WINDOW_SCROLL_TOP: {\n const { windowScrollTop } = action.payload;\n return {\n ...state,\n windowScrollTop\n };\n }\n default: {\n return { ...state };\n }\n }\n};\n\nexport default { reducer };\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"front-doors-page-container-ui--body--j-TLS\"};","import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef\n} from 'react';\nimport PropTypes from 'prop-types';\nimport {\n useStravaAnalytics,\n useStravaErrorLogging,\n useStravaTranslations\n} from '@strava/container-context';\nimport { useWindowScrollTop } from '@strava/react-hooks/src/use-window-scroll-top';\nimport { EXPERIMENT_COHORTS } from '@strava/constants/src/appConstants';\nimport clsx from '@strava/ui/clsx';\nimport Header from './components/Header';\nimport Footer from './components/Footer';\nimport { FrontDoorsPageContainerContextProvider } from './state/FrontDoorsPageContainerContext';\nimport { reducer } from './state/FrontDoorsPageContainer.reducer';\nimport { UPDATE_WINDOW_SCROLL_TOP } from './state/FrontDoorsPageContainer.actions';\nimport styles from './FrontDoorsPageContainer.module.scss';\n\n/**\n *\n * @param {string} cohort - Defaults to control. Front-door pages can only have one experiment\n * running on them at a time because we depend on snowplow cookies for cohorting. This\n * prop is built-in to be reusable for any pages that need to show different treatments based\n * on the cohort in which an athlete is placed.\n *\n * @param {object} authorizationUrls - (optional) urls to be used for facebook, google, apple and email sign-up\n * options\n *\n * @param {boolean} showSmartBanner - Controls whether the smartbanner should be shown on the mobile-web version of the page.\n * Default is false (hide).\n *\n * @param {string} userAgent - Request user agent. This is required for SSR (nextJS apps).\n *\n * @param {string} cpraI18nPrefix - (optional) path to 'cpra_compliance_cta' translations, if different from just `legal` (as is the\n * case for when the FrontDoorsPageContainer is used in active instead of a nextjs app)\n *\n * @param {boolean} menuConfig.showLoginOptionOnly - (optional) true if we want to hide the `register` options, such as on the `/register` page.\n * Will also adjust styling for the login option so it gets primary/highlighted styling. Defaults to false.\n *\n * @param {function} onScreenEnter - (optional) Callback function, called on screen enter\n *\n * @param {function} onDesktopHeaderLogoClick - (optional) Callback function, called when athlete clicks on Strava logo on desktop header\n *\n * @param {function} onDesktopHeaderLoginBtnClick - (optional) Callback function, called when athlete clicks on 'Login' on desktop header\n *\n * @param {function} onDesktopHeaderSignupBtnClick - (optional) Callback function, called when athlete clicks on 'Join for Free' on desktop header\n *\n * @param {function} onMobileHeaderLogoClick - (optional) Callback function, called when athlete clicks on Strava logo on mobile header\n *\n * @param {function} onMobileHeaderSignupBtnClick - (optional) Callback function, called when athlete clicks on 'Get the App' on mobile header\n *\n * @param {function} onMobileHeaderMenuOpen - (optional) Callback function, called when athlete opens the menu on mobile header\n *\n * @param {function} onMobileHeaderMenuClose - (optional) Callback function, called when athlete closes the menu on mobile header\n *\n * @param {function} onMobileHeaderMenuLoginBtnClick - (optional) Callback function, called when athlete clicks on 'Login' in the menu on mobile header\n *\n * @param {function} onMobileHeaderMenuSignupBtnClick - (optional) Callback function, called when athlete clicks on 'Get the App' in the menu on mobile header\n *\n * @param {function} onFooterAppStoreBadgeClick - (optional) Callback function, called when athlete clicks on App store badges on footer\n *\n */\nconst FrontDoorsPageContainer = ({\n children,\n locale,\n page,\n category,\n showSmartBanner,\n dataSharingOptedOut,\n cohort,\n cpraI18nPrefix,\n userAgent,\n className,\n header,\n footer,\n menuConfig,\n onScreenEnter,\n onDesktopHeaderLogoClick,\n onDesktopHeaderLoginBtnClick,\n onDesktopHeaderSignupBtnClick,\n onMobileHeaderLogoClick,\n onMobileHeaderSignupBtnClick,\n onMobileHeaderMenuOpen,\n onMobileHeaderMenuClose,\n onMobileHeaderMenuLoginBtnClick,\n onMobileHeaderMenuSignupBtnClick,\n onFooterAppStoreBadgeClick\n}) => {\n const { track: _track } = useStravaAnalytics();\n const { t: _t } = useStravaTranslations();\n const noop = () => {};\n\n const { showHeader } = header;\n const { showFooter } = footer;\n\n const {\n logError,\n setTags = noop,\n setContext = noop\n } = useStravaErrorLogging();\n\n const [windowScrollTop] = useWindowScrollTop();\n\n // override translations helper function\n const t = useMemo(\n () => (key, params) =>\n _t(`front_doors_page_container_ui.${key}`, { ...params }),\n [_t]\n );\n\n const headerRef = useRef();\n\n // override analytics helper function\n const track = useCallback(\n (fields = {}) => {\n _track({\n category,\n page,\n ...fields,\n properties: {\n ...fields.properties\n }\n });\n },\n [_track, category, page]\n );\n\n const [state, dispatch] = useReducer(reducer, {\n category,\n cohort,\n headerRef,\n locale,\n page,\n userAgent,\n windowScrollTop,\n dataSharingOptedOut,\n cpraI18nPrefix,\n header,\n footer,\n menuConfig,\n showSmartBanner\n });\n\n const providerState = useMemo(\n () => ({\n state,\n dispatch,\n track,\n t,\n logError,\n onScreenEnter,\n onDesktopHeaderLogoClick,\n onDesktopHeaderLoginBtnClick,\n onDesktopHeaderSignupBtnClick,\n onMobileHeaderLogoClick,\n onMobileHeaderSignupBtnClick,\n onMobileHeaderMenuOpen,\n onMobileHeaderMenuClose,\n onMobileHeaderMenuLoginBtnClick,\n onMobileHeaderMenuSignupBtnClick,\n onFooterAppStoreBadgeClick\n }),\n [\n logError,\n state,\n t,\n track,\n onScreenEnter,\n onDesktopHeaderLogoClick,\n onDesktopHeaderLoginBtnClick,\n onDesktopHeaderSignupBtnClick,\n onMobileHeaderLogoClick,\n onMobileHeaderSignupBtnClick,\n onMobileHeaderMenuOpen,\n onMobileHeaderMenuClose,\n onMobileHeaderMenuLoginBtnClick,\n onMobileHeaderMenuSignupBtnClick,\n onFooterAppStoreBadgeClick\n ]\n );\n\n // screen enter\n // - track analytics\n // - set container-level tags and context for sentry error tracking and performance monitoring\n useEffect(() => {\n setTags({\n 'frontDoorsPageContainer.locale': locale,\n 'frontDoorsPageContainer.cohort': cohort,\n 'frontDoorsPageContainer.page': page\n });\n setContext('frontDoorsPageContainer', {\n showSmartBanner,\n category\n });\n }, [category, cohort, locale, showSmartBanner, page, setContext, setTags]);\n\n useEffect(() => {\n onScreenEnter();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Note: Empty [] required to ensure that `onScreenEnter` only runs once\n\n useEffect(() => {\n dispatch({ type: UPDATE_WINDOW_SCROLL_TOP, payload: { windowScrollTop } });\n }, [windowScrollTop]);\n\n return (\n \n
\n {showHeader &&
}\n {children}\n {showFooter &&
}\n
\n
\n );\n};\n\nFrontDoorsPageContainer.defaultProps = {\n locale: null,\n showSmartBanner: false,\n cohort: EXPERIMENT_COHORTS.control,\n userAgent:\n typeof window === 'undefined' ? null : window?.navigator?.userAgent,\n className: null,\n cpraI18nPrefix: 'legal',\n menuConfig: {\n showLoginOptionOnly: false\n },\n header: {\n showHeader: true\n },\n footer: {\n showFooter: true\n },\n onScreenEnter: () => {},\n onDesktopHeaderLogoClick: () => {},\n onDesktopHeaderLoginBtnClick: () => {},\n onDesktopHeaderSignupBtnClick: () => {},\n onMobileHeaderLogoClick: () => {},\n onMobileHeaderSignupBtnClick: () => {},\n onMobileHeaderMenuOpen: () => {},\n onMobileHeaderMenuClose: () => {},\n onMobileHeaderMenuLoginBtnClick: () => {},\n onMobileHeaderMenuSignupBtnClick: () => {},\n onFooterAppStoreBadgeClick: () => {}\n};\n\nFrontDoorsPageContainer.propTypes = {\n children: PropTypes.node.isRequired,\n locale: PropTypes.string,\n page: PropTypes.string.isRequired,\n category: PropTypes.string.isRequired,\n showSmartBanner: PropTypes.bool,\n dataSharingOptedOut: PropTypes.bool.isRequired,\n cpraI18nPrefix: PropTypes.string,\n cohort: PropTypes.oneOf(Object.values(EXPERIMENT_COHORTS)),\n userAgent: PropTypes.string,\n className: PropTypes.string,\n menuConfig: PropTypes.shape({\n showLoginOptionOnly: PropTypes.bool\n }),\n header: PropTypes.shape({\n showHeader: PropTypes.bool\n }),\n footer: PropTypes.shape({\n showFooter: PropTypes.bool\n }),\n onScreenEnter: PropTypes.func,\n onDesktopHeaderLogoClick: PropTypes.func,\n onDesktopHeaderLoginBtnClick: PropTypes.func,\n onDesktopHeaderSignupBtnClick: PropTypes.func,\n onMobileHeaderLogoClick: PropTypes.func,\n onMobileHeaderSignupBtnClick: PropTypes.func,\n onMobileHeaderMenuOpen: PropTypes.func,\n onMobileHeaderMenuClose: PropTypes.func,\n onMobileHeaderMenuLoginBtnClick: PropTypes.func,\n onMobileHeaderMenuSignupBtnClick: PropTypes.func,\n onFooterAppStoreBadgeClick: PropTypes.func\n};\n\nexport default FrontDoorsPageContainer;\n","/**\n * This helper function is intended for use with `FrontDoorsPageContainer`\n * It accepts an instance of `track`, an `appLink` and the optional parameter `additionalTrackProperties`\n * It returns default event handlers, each containing a `track` event with the relevant payload\n * These default event handlers can be overriden as required for custom use cases\n *\n * Example Usage:\n *\n * import { getDefaultEventHandlers } from '@strava/front-doors-page-container-ui';\n *\n * const additionalTrackProperties = { myAdditionalTrackProperty: 'my-additional-track-property-value' };\n * const myCustomOnScreenEnterCallback = () => { ... };\n *\n * const { appLink } = useStravaBranch();\n *\n * \n * {children}\n * \n *\n * @param {Function} track Track function (Required)\n * @param {String} appLink Branch link\n * @param {object} additionalTrackProperties object of properties to be added to `properties` within `track` events (Optional)\n * @returns {object} Object containing default event handlers\n *\n */\n\nconst getDefaultEventHandlers = (track, appLink, additionalTrackProperties) => {\n // Common track event used in `onDesktopHeaderLogoClick` and `onMobileHeaderLogoClick`\n const onHeaderLogoClickTrackEvent = () => {\n track({\n element: 'strava_logo',\n action: 'click',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n };\n\n return {\n // Called on screen enter\n onScreenEnter: () => {\n track({\n action: 'screen_enter',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n },\n\n // Called when athlete clicks on Strava logo on desktop header\n onDesktopHeaderLogoClick: () => {\n onHeaderLogoClickTrackEvent();\n },\n\n // Called when athlete clicks on 'Login' button on desktop header\n onDesktopHeaderLoginBtnClick: () => {\n track({\n element: 'login_header',\n action: 'click',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n },\n\n // Called when athlete clicks on the 'Join for Free' button on desktop header\n onDesktopHeaderSignupBtnClick: () => {\n track({\n element: 'start_signup',\n action: 'click',\n properties: {\n signup_copy: 'join_header',\n ...additionalTrackProperties\n }\n });\n },\n\n // Called when athlete clicks on Strava logo on mobile header\n onMobileHeaderLogoClick: () => {\n onHeaderLogoClickTrackEvent();\n },\n\n // Called when athlete clicks on the 'Get the App' button on mobile header\n onMobileHeaderSignupBtnClick: () => {\n track({\n element: 'get_app',\n action: 'click',\n properties: {\n cta_copy: 'get_the_app_header',\n url: appLink,\n ...additionalTrackProperties\n }\n });\n },\n\n // Called when athlete opens the menu on mobile header\n onMobileHeaderMenuOpen: () => {\n track({\n element: 'open_menu',\n action: 'click',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n },\n\n // Called when athlete closes the menu on mobile header\n onMobileHeaderMenuClose: () => {\n track({\n element: 'close_menu',\n action: 'click',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n },\n\n // Called when athlete clicks on the 'Login' button in mobile menu\n onMobileHeaderMenuLoginBtnClick: () => {\n track({\n element: 'drawer_login_btn',\n action: 'click',\n ...(additionalTrackProperties && {\n properties: additionalTrackProperties\n })\n });\n },\n\n // Called when athlete clicks on the 'Get the App' button in mobile menu\n onMobileHeaderMenuSignupBtnClick: () => {\n track({\n element: 'get_app',\n action: 'click',\n properties: {\n cta_copy: 'get_the_app_drawer',\n url: appLink,\n ...additionalTrackProperties\n }\n });\n },\n\n // Called when athlete clicks on app store badges in footer\n onFooterAppStoreBadgeClick: (id) => {\n track({\n element: 'get_app',\n action: 'click',\n properties: {\n url: appLink,\n cta_copy: `${id}_app_store`,\n ...additionalTrackProperties\n }\n });\n }\n };\n};\n\nexport default getDefaultEventHandlers;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import toString from './toString.js';\n\n/**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\nfunction replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n}\n\nexport default replace;\n","import { replace } from 'lodash-es';\n\nconst appendScriptToBody = ({ script, name, logError }) => {\n if (document.querySelector('body')) {\n document.querySelector('body').appendChild(script);\n } else {\n const e = new Error(`Failed to inject ${name} script`);\n logError(e);\n }\n};\n\n// this injects window.google and not the legacy window.gapi JS api\nexport const injectGoogleScript = ({ callback, logError }) => {\n if (!window.google) {\n const script = document.createElement('script');\n script.src = 'https://accounts.google.com/gsi/client';\n script.async = true;\n script.onload = callback;\n script.id = 'google-client-script';\n appendScriptToBody({ script, name: 'google gsi', logError });\n } else {\n callback();\n }\n};\n\nexport const injectAppleScript = ({ logError, locale = 'en_US' }) => {\n if (!window.AppleID) {\n const script = window.document.createElement('script');\n const formattedLocale = replace(locale, '-', '_');\n script.src = `https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/${formattedLocale}/appleid.auth.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'apple', logError });\n }\n};\n\nexport const injectFacebookScript = ({\n logError,\n appId,\n version,\n callback,\n locale = 'en_US'\n}) => {\n // make sure haml FB injection has not already injected script and also make sure nothing else\n // has injected FB script\n if (!window.Strava?.fbInitialized && !window.FB) {\n window.fbAsyncInit = () => {\n // ref - https://developers.facebook.com/docs/javascript/reference/FB.init/v13.0\n window.FB.init({\n appId,\n xfbml: true,\n version,\n status: true,\n cookie: true\n });\n callback();\n };\n\n // facebook uses format ll_CC - see https://developers.facebook.com/docs/javascript/internationalization\n const formattedLocale = replace(locale, '-', '_');\n\n const script = window.document.createElement('script');\n script.src = `https://connect.facebook.net/${formattedLocale}/sdk.js`;\n script.async = true;\n appendScriptToBody({ script, name: 'facebook-jssdk', logError });\n } else {\n callback();\n }\n};\n\nexport default { injectGoogleScript, injectAppleScript, injectFacebookScript };\n","import { useEffect } from 'react';\nimport { injectAppleScript } from './externalSocialPartners';\n\ndeclare global {\n interface Window {\n AppleID: {\n stravaInit: boolean;\n auth: {\n init: (params: {\n clientId: string;\n scope: string;\n redirectURI: string;\n state: string;\n }) => void;\n signIn: () => void;\n };\n };\n }\n}\n\n/**\n *\n * @param {String} state https://developer.apple.com/documentation/sign_in_with_apple/clientconfigi/3230956-state\n */\nexport const useApple = (state: string, logError: (error: Error) => void) => {\n useEffect(() => {\n injectAppleScript({ logError });\n }, [logError]);\n\n const signin = () => {\n if (!window.AppleID.stravaInit) {\n window.AppleID.auth.init({\n clientId: 'com.strava.app.sign.in',\n scope: 'name email',\n redirectURI: 'https://www.strava.com/o_auth/apple',\n state\n });\n window.AppleID.stravaInit = true;\n }\n window.AppleID.auth.signIn();\n };\n\n return { signin };\n};\n\nexport default useApple;\n","// extracted by mini-css-extract-plugin\nexport default {\"registrationOptions\":\"DesktopRegistrationOptions--registrationOptions--E-NPY\",\"noMarginTop\":\"DesktopRegistrationOptions--noMarginTop--MT-+7\",\"disclaimerText\":\"DesktopRegistrationOptions--disclaimerText--OvkQU\",\"loginOption\":\"DesktopRegistrationOptions--loginOption--nzmpV\",\"variant\":\"DesktopRegistrationOptions--variant--4ZY17\"};","import React, { useEffect } from 'react';\nimport { AlertContainer, AlertStatus, useAlertContext } from '@strava/ui/Alert';\nimport { useStravaTranslations } from '@strava/container-context';\nimport {\n DisclaimerText,\n AccountAuthButton,\n OrDivider,\n APPLE,\n FACEBOOK,\n GOOGLE,\n EmailRegistrationForm,\n EMAIL_REGISTRATION_FORM_ALERT_ID,\n AnalyticsFieldsTypes,\n EmailRegistrationFormProps\n} from '@strava/authentication-ui';\nimport styles from './DesktopRegistrationOptions.module.scss';\nimport { matchMinMedia } from '@strava/ui/MediaQuery';\n\nconst i18nPrefix = 'account_registration_page_ui';\n\nexport type DesktopRegistrationOptionsProps = EmailRegistrationFormProps & {\n flashMessage?: string;\n};\n\nconst DesktopRegistrationOptions = ({\n emailAuthorizationUrl,\n handleExtAuthBtnClick,\n flashMessage,\n track,\n ...emailRegFormProps\n}: DesktopRegistrationOptionsProps & {\n emailAuthorizationUrl: string;\n track: (fields: AnalyticsFieldsTypes) => void;\n handleExtAuthBtnClick: (\n option: typeof FACEBOOK | typeof GOOGLE | typeof APPLE\n ) => void;\n}) => {\n const { t } = useStravaTranslations();\n const { showAlert } = useAlertContext();\n\n useEffect(() => {\n if (flashMessage) {\n showAlert({\n alertType: AlertStatus.ERROR,\n content: flashMessage,\n hideCloseButton: true,\n containerId: EMAIL_REGISTRATION_FORM_ALERT_ID,\n id: 'flashMessage'\n });\n }\n }, [flashMessage, showAlert]);\n\n const externalSignups = (\n <>\n handleExtAuthBtnClick(FACEBOOK)}\n data-testid=\"facebook_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.facebook_cta_v2`)}\n \n\n handleExtAuthBtnClick(GOOGLE)}\n data-testid=\"google_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.google_cta_v2`)}\n \n \n );\n\n const emailSignup = (\n <>\n \n\n \n \n );\n\n return (\n
\n \n\n {externalSignups}\n\n \n\n {emailSignup}\n\n

\n {t(`${i18nPrefix}.login_option.already_a_member`)}{' '}\n \n {t(`${i18nPrefix}.login_option.log_in`)}\n \n

\n
\n );\n};\n\nexport default DesktopRegistrationOptions;\n","export type RegMessageVariants =\n | 'generic'\n | 'follow_athlete'\n | 'join_challenge'\n | 'join_club'\n | 'kudos_comment'\n | 'trial_sign_up';\n\n// when we add `_v2` strings for the variants, we need to map the variants to the proper key\nconst getTextKey = (variant: RegMessageVariants) => {\n if (\n variant === 'follow_athlete' ||\n variant === 'join_club' ||\n variant === 'trial_sign_up'\n ) {\n return `${variant}_v2`;\n }\n return variant;\n};\n\n// Not all variants have a subtitle. Attempt to translate the subtitle text\n// and if it can't be translated (`t` gives back the translation key),\n// we'll know not to render the subtitle.\nexport const getTitleAndSubtitle = (\n t: (k: string, p?: Record) => string,\n variant: RegMessageVariants,\n name?: string\n) => {\n const textKey = getTextKey(variant);\n const title = t(\n `account_registration_page_ui.registration_message.${textKey}.title`,\n { name }\n );\n\n const translatedSubtitle = t(\n `account_registration_page_ui.registration_message.${textKey}.subtitle`\n );\n\n const subtitle = translatedSubtitle.includes('account_registration_page_ui')\n ? null\n : translatedSubtitle;\n\n return { title, subtitle };\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"registrationMessage\":\"DesktopRegistrationMessage--registrationMessage--YbNw8\",\"subheadingContainer\":\"DesktopRegistrationMessage--subheadingContainer--X19Yz\",\"heading\":\"DesktopRegistrationMessage--heading--ut77-\",\"subheading\":\"DesktopRegistrationMessage--subheading--WR2zA\",\"withAvatar\":\"DesktopRegistrationMessage--withAvatar--628fC\"};","import React from 'react';\nimport clsx from '@strava/ui/clsx';\nimport Avatar, { AvatarType } from '@strava/ui/Avatar';\nimport { useStravaTranslations } from '@strava/container-context';\nimport {\n getTitleAndSubtitle,\n RegMessageVariants\n} from '../../helpers/getTitleAndSubtitle';\nimport styles from './DesktopRegistrationMessage.module.scss';\n\nexport type DesktopRegistrationMessageProps = {\n variant: RegMessageVariants;\n name?: string;\n avatar?: string;\n avatarType?: AvatarType;\n};\n\nexport const DesktopRegistrationMessage = ({\n variant,\n name,\n avatar,\n avatarType\n}: DesktopRegistrationMessageProps) => {\n const { t } = useStravaTranslations();\n const { title, subtitle } = getTitleAndSubtitle(t, variant, name);\n\n return (\n <>\n \n {avatar && (\n \n )}\n

\n {title}\n

\n \n {subtitle && (\n
\n

\n {subtitle}\n

\n
\n )}\n \n );\n};\n\nexport default DesktopRegistrationMessage;\n","import React, { useEffect } from 'react';\nimport { useStravaTranslations } from '@strava/container-context';\nimport {\n DisclaimerText,\n AccountAuthButton,\n APPLE,\n FACEBOOK,\n GOOGLE,\n EmailRegistrationForm,\n AnalyticsFieldsTypes,\n EmailRegistrationFormProps,\n OrDivider,\n EMAIL_REGISTRATION_FORM_ALERT_ID\n} from '@strava/authentication-ui';\nimport { AlertContainer, AlertStatus, useAlertContext } from '@strava/ui/Alert';\nimport { matchMaxMedia } from '@strava/ui/MediaQuery';\n\ntype MobileRegistrationOptionsProps = EmailRegistrationFormProps & {\n track: (fields: AnalyticsFieldsTypes) => void;\n emailAuthorizationUrl: string;\n handleExtAuthBtnClick: (\n option: typeof FACEBOOK | typeof GOOGLE | typeof APPLE\n ) => void;\n cohort?: string | undefined;\n flashMessage?: string | undefined;\n};\n\nexport const MobileRegistrationOptions = ({\n emailAuthorizationUrl,\n handleExtAuthBtnClick,\n track,\n flashMessage,\n ...emailRegFormProps\n}: MobileRegistrationOptionsProps) => {\n const { t } = useStravaTranslations();\n const { showAlert } = useAlertContext();\n\n useEffect(() => {\n if (flashMessage) {\n showAlert({\n alertType: AlertStatus.ERROR,\n content: flashMessage,\n hideCloseButton: true,\n containerId: EMAIL_REGISTRATION_FORM_ALERT_ID,\n id: 'flashMessage'\n });\n }\n }, [flashMessage, showAlert]);\n\n const i18nPrefix = 'account_registration_page_ui';\n\n return (\n <>\n \n\n
\n handleExtAuthBtnClick(FACEBOOK)}\n data-testid=\"facebook_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.facebook_cta_v2`)}\n \n\n handleExtAuthBtnClick(GOOGLE)}\n data-testid=\"google_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.google_cta_v2`)}\n \n\n handleExtAuthBtnClick(APPLE)}\n data-testid=\"apple_auth_btn\"\n >\n {t(`${i18nPrefix}.signup_ctas.apple_cta_v2`)}\n \n\n \n \n\n \n
\n \n );\n};\n\nexport default MobileRegistrationOptions;\n","// extracted by mini-css-extract-plugin\nexport default {\"mobileRegistrationMessage\":\"MobileRegistrationMessage--mobileRegistrationMessage--8H5CO\"};","import React from 'react';\nimport { useStravaTranslations } from '@strava/container-context';\nimport clsx from '@strava/ui/clsx';\nimport {\n getTitleAndSubtitle,\n RegMessageVariants\n} from '../../helpers/getTitleAndSubtitle';\nimport styles from './MobileRegistrationMessage.module.scss';\ninterface MobileRegistrationMessageProps {\n variant: RegMessageVariants;\n name?: string;\n className?: string;\n}\n\nexport const MobileRegistrationMessage = ({\n variant,\n name,\n className\n}: MobileRegistrationMessageProps) => {\n const { t } = useStravaTranslations();\n const { title, subtitle } = getTitleAndSubtitle(t, variant, name);\n\n return (\n
\n

{title}

\n {subtitle &&

{subtitle}

}\n
\n );\n};\n\nexport default MobileRegistrationMessage;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\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 valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\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 array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","import { map, uniqBy } from 'lodash-es';\n\nexport const getUniqueSizesFromImages = (images) =>\n map(uniqBy(images, 'size.id'), 'size');\n\nexport const getUniqueFormatsFromImages = (images) =>\n map(uniqBy(images, 'format'), 'format');\n\nexport const getUniqueResolutionsFromImages = (images) =>\n map(uniqBy(images, 'resolution'), 'resolution');\n\nexport const getImagesBySize = (images, size) => {\n return images.filter((image) => image.size.id === size.id);\n};\n\nexport const getImagesByFormat = (images, format) => {\n return images.filter((image) => image.format === format);\n};\n\nexport const getImagesByResolution = (images, resolution) => {\n return images.filter((image) => image.resolution === resolution);\n};\n\nexport default {\n getUniqueSizesFromImages,\n getUniqueFormatsFromImages,\n getUniqueResolutionsFromImages,\n getImagesBySize,\n getImagesByFormat,\n getImagesByResolution\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useStravaErrorLogging } from '@strava/container-context';\nimport {\n getUniqueSizesFromImages,\n getUniqueFormatsFromImages,\n getUniqueResolutionsFromImages,\n getImagesBySize,\n getImagesByFormat,\n getImagesByResolution\n} from './helpers';\n\nconst SourceTags = ({ images }) => {\n const { logError } = useStravaErrorLogging();\n const [sources, setSources] = useState([]);\n\n useEffect(() => {\n const getSourceData = () => {\n const sourceData = [];\n\n try {\n getUniqueSizesFromImages(images).forEach((size) => {\n // Loop through sizes\n const imagesForSize = getImagesBySize(images, size); // Get images for current size\n const formatsForSize = getUniqueFormatsFromImages(imagesForSize); // Get formats for current sized images\n\n formatsForSize.forEach((format) => {\n // Loop through formats\n const imagesForSizeAndFormat = getImagesByFormat(\n imagesForSize,\n format\n ); // Get images for current size and format\n\n const resolutionsForSizeAndFormat = getUniqueResolutionsFromImages(\n imagesForSizeAndFormat\n ); // Get resolutions for current size and format\n\n // Get srcSet value\n const srcSet = resolutionsForSizeAndFormat\n .map((resolution) => {\n // Map through resolutions\n const imageBySizeAndFormatAndResolution = getImagesByResolution(\n imagesForSizeAndFormat,\n resolution\n ); // Get image for current size, format and resolution\n if (imageBySizeAndFormatAndResolution[0]) {\n return `${imageBySizeAndFormatAndResolution[0].file} ${resolution}`; // Return filename and resolution e.g. '863bfd6a6d3c6e43e7c6.png 1x'\n }\n return false;\n })\n .filter(Boolean) // Strip out any falsy values\n .join(', '); // Concatenate to form srcSet e.g. '863bfd6a6d3c6e43e7c6.png 1x, edbe289c4c8ee72858c6.png 2x'\n\n sourceData.push({\n size,\n format,\n srcSet\n });\n });\n });\n } catch (error) {\n logError(new Error(`Source tags not created, Error: ${error}`));\n }\n\n return sourceData;\n };\n\n const sourceData = getSourceData();\n setSources(sourceData);\n }, [images, logError]);\n\n return (\n <>\n {sources.map((source) => {\n const { size, format, srcSet } = source;\n\n return (\n \n );\n })}\n \n );\n};\n\nSourceTags.propTypes = {\n images: PropTypes.arrayOf(\n PropTypes.shape({\n file: PropTypes.string.isRequired,\n format: PropTypes.oneOf(['png', 'jpg', 'webp']).isRequired,\n resolution: PropTypes.oneOf(['1x', '2x']).isRequired,\n size: PropTypes.shape({\n id: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n value: PropTypes.string,\n minVw: PropTypes.string\n }).isRequired\n })\n ).isRequired\n};\n\nexport default SourceTags;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ImgTag = ({ src, className, isLazy, altText, dataCy }) => (\n \n);\n\nImgTag.propTypes = {\n src: PropTypes.string,\n className: PropTypes.string.isRequired,\n isLazy: PropTypes.bool,\n altText: PropTypes.string,\n dataCy: PropTypes.string\n};\n\nImgTag.defaultProps = {\n src: null,\n isLazy: false,\n altText: '',\n dataCy: null\n};\n\nexport default ImgTag;\n","export const DEFAULT_IMG_TAG_FALLBACK_CONFIG = {\n size: 'md',\n format: 'png',\n resolution: '1x'\n};\n\nexport default {\n DEFAULT_IMG_TAG_FALLBACK_CONFIG\n};\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport SourceTags from './components/SourceTags';\nimport ImgTag from './components/ImgTag';\nimport DEFAULT_IMG_TAG_FALLBACK_CONFIG from './constants';\n\n/**\n * This component accepts an Array of objects representing `images` and other configuration parameters and renders a element with relevant tags and an tag\n * @param {Array} images Array of objects representing images e.g. [{ file: [FILEDATA], format: 'webp', resolution: '2x', 'size: { id: 'lg', value: 'large', minVw: '900px' }}]\n * @param {String} altText String to use as image alt text (optional)\n * @param {Object} imgTagFallbackConfig Overrides the DEFAULT_IMG_TAG_FALLBACK_CONFIG which selects the image to use as the fallback img src (optional)\n * @param {String} className Classname to apply to `` (optional)\n * @param {Boolean} isLazy Indicates if image loading attribute should be set to 'lazy' or 'eager' (optional, defaults to false => 'eager')\n * @param {String} dataCy Cypress test id to be applied to `` (optional)\n */\n\nexport const Picture = ({\n images,\n altText,\n imgTagFallbackConfig = DEFAULT_IMG_TAG_FALLBACK_CONFIG,\n className,\n isLazy,\n dataCy\n}) => {\n const [fallbackImgSrc, setFallbackImgSrc] = useState(null);\n\n useEffect(() => {\n if (!fallbackImgSrc) {\n const defaultImage = images.find(\n (image) =>\n image.resolution === imgTagFallbackConfig.resolution &&\n image.format === imgTagFallbackConfig.format &&\n image.size.id === imgTagFallbackConfig.size\n );\n\n if (defaultImage?.file) {\n setFallbackImgSrc(defaultImage.file);\n }\n }\n }, [images, imgTagFallbackConfig, fallbackImgSrc]);\n\n if (!images.length) {\n return false;\n }\n\n return (\n \n \n \n \n );\n};\n\nPicture.defaultProps = {\n imgTagFallbackConfig: DEFAULT_IMG_TAG_FALLBACK_CONFIG,\n altText: '',\n className: '',\n isLazy: false,\n dataCy: null\n};\n\nPicture.propTypes = {\n images: PropTypes.arrayOf(\n PropTypes.shape({\n file: PropTypes.string.isRequired,\n format: PropTypes.oneOf(['png', 'webp', 'jpg']).isRequired,\n resolution: PropTypes.oneOf(['1x', '2x']).isRequired,\n size: PropTypes.shape({\n id: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n value: PropTypes.string,\n minVw: PropTypes.string\n }).isRequired\n })\n ).isRequired,\n imgTagFallbackConfig: PropTypes.shape({\n size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']),\n format: PropTypes.oneOf(['png', 'webp', 'jpg']),\n resolution: PropTypes.oneOf(['1x', '2x'])\n }),\n altText: PropTypes.string,\n className: PropTypes.string,\n isLazy: PropTypes.bool,\n dataCy: PropTypes.string\n};\n\nexport default Picture;\n","// extracted by mini-css-extract-plugin\nexport default {\"tabletImage\":\"TabletImage--tabletImage--2cLKT\"};","import React, { useEffect, useState } from 'react';\nimport clsx from '@strava/ui/clsx';\nimport {\n breakpoints,\n matchMaxMedia,\n matchMinMedia\n} from '@strava/ui/MediaQuery';\nimport { useStravaErrorLogging } from '@strava/container-context';\nimport { Picture } from '@strava/shared-ui';\nimport styles from './TabletImage.module.scss';\n\ninterface TabletImageProps {\n className?: string;\n}\n\ntype Image = {\n file: string;\n resolution: '1x' | '2x';\n format: 'webp' | 'png';\n size: { id: string; minVw: string };\n};\n\nexport const TabletImage = ({ className }: TabletImageProps) => {\n const { logError } = useStravaErrorLogging();\n const [tabletImages, setTabletImages] = useState([]);\n\n useEffect(() => {\n (async () => {\n const isTablet = matchMinMedia.screenSm() && matchMaxMedia.screenSmMax();\n\n if (isTablet) {\n // webpack comments ensure that the background images are included\n // with the current chunk, which prevents `active` from making a forbidden\n // request to cloudfront\n const importImage = async (filename: string) => {\n try {\n return (\n await import(\n /* webpackMode: \"eager\" */\n /* webpackExports: [\"default\", \"named\"] */\n `./assets/${filename}`\n )\n ).default;\n } catch (error) {\n logError(error);\n }\n };\n\n const resolutions = ['1x', '2x'] as const;\n const formats = ['png', 'webp'] as const;\n\n resolutions.forEach((resolution) => {\n formats.forEach(async (format) => {\n const file = await importImage(\n `Sign-Up-Page-Tablet@${resolution}.${format}`\n );\n\n if (file) {\n setTabletImages((prev) => [\n ...prev,\n {\n format,\n resolution,\n file,\n size: { id: 'sm', minVw: `${breakpoints.screenSm}px` }\n }\n ]);\n }\n });\n });\n }\n })();\n }, [logError]);\n\n return (\n
\n \n
\n );\n};\n\nexport default TabletImage;\n","// extracted by mini-css-extract-plugin\nexport default {\"noBackground\":\"src--noBackground--4HFP2\",\"desktopRegContainer\":\"src--desktopRegContainer--uG8L4\",\"mobileRegContainer\":\"src--mobileRegContainer--dqTUB\",\"mobileAndTabletContainer\":\"src--mobileAndTabletContainer--iCZmP\",\"mobileAndTabletOnly\":\"src--mobileAndTabletOnly--jp8h3\",\"tabletOnly\":\"src--tabletOnly--eVoI4\",\"desktopOnly\":\"src--desktopOnly--AzphY\"};","import React, { useCallback, useEffect } from 'react';\nimport FrontDoorsPageContainer, {\n getDefaultEventHandlers\n} from '@strava/front-doors-page-container-ui';\nimport { AlertProvider } from '@strava/ui/Alert';\nimport {\n AnalyticsFieldsTypes,\n EMAIL,\n EmailRegistrationFormProps\n} from '@strava/authentication-ui';\nimport {\n useStravaAnalytics,\n useStravaErrorLogging,\n useStravaBranch\n} from '@strava/container-context';\nimport { useApple } from '@strava/utils/src/externalSocialPartners/useApple';\nimport { setFullScreenBackgroundImage } from '@strava/utils/src/utils';\nimport DesktopRegistrationOptions from './components/DesktopRegistrationOptions';\nimport DesktopRegistrationMessage, {\n DesktopRegistrationMessageProps\n} from './components/DesktopRegistrationMessage';\nimport MobileRegistrationOptions from './components/MobileRegistrationOptions';\nimport MobileRegistrationMessage from './components/MobileRegistrationMessage';\nimport TabletImage from './components/TabletImage';\nimport { useExtAuthBtnClickHandler } from './helpers/useExtAuthBtnClickHandler.hook';\nimport { matchMinMedia } from '@strava/ui/MediaQuery';\nimport clsx from '@strava/ui/clsx';\nimport styles from './AccountRegistrationPage.module.scss';\n\nexport type AccountRegistrationPageProps = EmailRegistrationFormProps & {\n registrationMessage: DesktopRegistrationMessageProps;\n authorizationUrls: {\n email: string;\n facebook: string;\n google: string;\n };\n background: `background-${string}`; // where string is a number ('background-3')\n locale: string;\n denyNonessentialCookies: boolean;\n dataSharingOptedOut: boolean;\n userAgent: string;\n appleState: string;\n cohort?: string | undefined;\n flashMessage?: string | undefined;\n};\n\nconst AccountRegistrationPage = ({\n registrationMessage,\n background,\n locale,\n denyNonessentialCookies,\n dataSharingOptedOut,\n authorizationUrls,\n userAgent,\n appleState,\n ...regOptionsProps\n}: AccountRegistrationPageProps) => {\n const { track: _track } = useStravaAnalytics();\n const { logError } = useStravaErrorLogging();\n const { signin: appleSignin } = useApple(appleState, logError);\n\n useEffect(() => {\n (async () => {\n // only import background image on desktop\n if (matchMinMedia.screenMd()) {\n // webpack comments ensure that the background images are included\n // with the current chunk, which prevents `active` from making a forbidden\n // request to cloudfront\n const importImage = async () => {\n try {\n return (\n await import(\n /* webpackMode: \"eager\" */\n /* webpackExports: [\"default\", \"named\"] */\n `./assets/${background}.jpg`\n )\n ).default;\n } catch (error) {\n logError(error);\n }\n };\n\n const backgroundImage = await importImage();\n\n if (backgroundImage) {\n // apply background image directly to ``\n setFullScreenBackgroundImage(backgroundImage);\n }\n }\n })();\n }, [background, logError]);\n\n const track = useCallback(\n (fields: AnalyticsFieldsTypes) => {\n _track({\n category: 'onboarding',\n page: 'register',\n ...fields,\n properties: {\n background,\n copy_variant: registrationMessage.variant,\n ...fields.properties\n }\n });\n },\n [_track, background, registrationMessage.variant]\n );\n\n const { handleExtAuthBtnClick } = useExtAuthBtnClickHandler({\n appleSignin,\n authorizationUrls,\n track\n });\n\n const { isProcessing, appLink, createLink, cookiesAccepted } =\n useStravaBranch();\n\n // generate branch appLink (deeplink) when the sdk has successfully been\n // initialized.\n useEffect(() => {\n if (!isProcessing) {\n createLink({ feature: 'register' });\n }\n\n // only listen to cookiesAccepted and isProcessing\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [cookiesAccepted, isProcessing]);\n\n return (\n \n \n \n
\n \n \n
\n
\n \n
\n \n\n
\n \n \n
\n \n
\n );\n};\n\nexport default AccountRegistrationPage;\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 {\n elemAttrForAnalytics,\n APPLE,\n FACEBOOK,\n GOOGLE,\n AnalyticsFieldsTypes\n} from '@strava/authentication-ui';\n\nexport const useExtAuthBtnClickHandler = ({\n appleSignin,\n authorizationUrls,\n track\n}: {\n appleSignin: () => void;\n authorizationUrls: {\n google: string;\n facebook: string;\n };\n track: (fields: AnalyticsFieldsTypes) => void;\n}) => {\n /**\n * Facebook, Google, & Apple signup buttons onClick handler\n * Apple sign in uses function provided by Apple web sdk to handle sign in, FB & Google\n * sign ins use url provided by server\n */\n const handleExtAuthBtnClick = (\n option: typeof FACEBOOK | typeof GOOGLE | typeof APPLE\n ) => {\n const element = elemAttrForAnalytics(option);\n track({\n action: 'click',\n element\n });\n track({\n action: 'redirect',\n element,\n properties: {\n // no redirect url for Apple, so send `null` instead\n redirect_url: option === APPLE ? null : authorizationUrls[option],\n path_type: 'external_partner'\n }\n });\n\n if (option === APPLE) {\n appleSignin();\n } else {\n window.location.assign(authorizationUrls[option]);\n }\n };\n\n return { handleExtAuthBtnClick };\n};\n"],"names":["useWindowScrollTop","windowScrollTop","setWindowScrollTop","useState","onScroll","useCallback","window","scrollY","useEffect","addEventListener","removeEventListener","Object","freeze","man","woman","preferNotSay","nonBinary","LOCALE","deDE","enUS","enGB","esES","es419","frFR","itIT","jaJP","koKR","nlNL","ptBR","ptPT","ruRU","zhCN","zhTW","EXPERIMENT_COHORTS","de","es","fr","it","ja","ko","nl","pt","ru","zh","control","variantA","variantB","MOBILE_OS","android","iPhone","iPad","chrome","firefox","safari","optedOut","toVal","mix","k","y","str","Array","isArray","length","_args","_key","arguments","tmp","x","i","FrontDoorsPageContainerContext","createContext","displayName","useFrontDoorsPageContainerContext","context","useContext","Error","FrontDoorsPageContainerContextProvider","props","React","Provider","_ref","className","alt","width","height","fill","color","style","role","viewBox","clsx","xmlns","display","id","fillRule","clipRule","d","ref","children","variant","styles","btn","forwardRef","href","otherProps","IconButton","onClick","ariaLabel","options","Button","_extends","type","defaultProps","propTypes","PropTypes","isRequired","DesktopNav","t","state","onDesktopHeaderLoginBtnClick","onDesktopHeaderSignupBtnClick","onDesktopHeaderLogoClick","cohort","menuConfig","showLoginOptionOnly","handleLogoClick","location","StravaLogo","handleLoginBtnClick","handleSignupBtnClick","signupBtnCopy","key","global","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObjectLike","baseGetTag","getMobileOS","userAgent","navigator","isString","includes","CallToAction","label","dataCy","appLink","isProcessing","useStravaBranch","LinkButton","disabled","open","onClose","enableOverlay","_props$enableOverlay","overlayColor","_props$overlayColor","overlayOpacity","_props$overlayOpacity","zIndex","_props$zIndex","duration","_props$duration","direction","size","_props$size","customIdSuffix","lockBackgroundScroll","_props$lockBackground","overlayClassName","_props$overlayClassNa","bodyRef","useRef","current","document","querySelector","overflow","idSuffix","useMemo","Math","random","substring","overlayStyles","backgroundColor","opacity","drawerStyles","transitionDuration","dir","top","left","transform","right","bottom","getDirectionStyle","onChange","checked","htmlFor","MenuDrawer","isOpen","onMobileHeaderMenuSignupBtnClick","onMobileHeaderMenuLoginBtnClick","setLocation","pathname","generateLinkProps","_ref2","destination","active","Drawer","menuDrawer","primaryOptions","map","_ref3","secondaryOptions","_ref4","menuList","menuDrawerBtn","element","drawerCallToAction","MenuIcon","MobileNav","isMenuOpen","toggleMenu","mobileAppDownloadBannerRef","onMobileHeaderLogoClick","onMobileHeaderMenuOpen","onMobileHeaderMenuClose","onMobileHeaderSignupBtnClick","page","category","showSmartBanner","branch","url","forceSmartBanner","setForceSmartbanner","queryParams","split","searchParams","URLSearchParams","get","SmartBanner","mobileOS","handleMenuToggle","getBoundingClientRect","_","isScrolling","DEFAULT_LOCALIZED_IMAGES_SIZES","minVw","DEFAULT_LOCALIZED_IMAGES_FORMATS","DEFAULT_LOCALIZED_IMAGES_RESOLUTIONS","DEFAULT_LOCALIZED_IMAGES_DIRECTORY","DEFAULT_LOCALIZED_IMAGES_SIZES_ORDER","DEFAULT_LOCALIZED_IMAGES_FORMATS_ORDER","sortImagesBySizeAndFormat","sizeOrder","formatOrder","image1","image2","image1Size","format","image1Format","image2Size","image2Format","indexOf","getImageLocaleDirectory","locale","defaultDirectory","values","getImageLocale","useLocalizedImages","sizes","formats","resolutions","imageImportCallback","logError","images","setImages","initialState","mountedRef","setState","args","useSafeState","async","forEach","file","imageData","error","importImage","imageLocaleDirectory","imageKey","imageSize","imageFormat","imageResolution","resolution","imageLocale","prevImages","initImages","sort","Badge","badge","imgTagFallbackConfig","sources","setSources","fallbackImgSrc","setFallbackImgSrc","isLazy","sourceData","getSourceData","imgWebp1x","find","image","imgWebp2x","imgPng1x","imgPng2x","webp","join","png","defaultImage","entries","srcSet","src","loading","APP_STORE_BADGE_SIZES","APP_STORES","google","apple","unknown","mobileOsToAppStore","onBadgeClick","getLanguage","useStravaTranslations","useStravaErrorLogging","importBadgeImage","path","default","appleBadgeImages","googleBadgeImages","appStore","SocialLink","altText","target","rel","Footer","onFooterAppStoreBadgeClick","dataSharingOptedOut","cpraI18nPrefix","socialLinks","socialTwitterImage","socialYouTubeImage","socialInstagramImage","socialLinkedInImage","socialFacebookImage","socialLink","CPRAComplianceCTA","i18nPrefix","signUpLinkCopy","AppStoreBadges","UPDATE_WINDOW_SCROLL_TOP","reducer","action","payload","FrontDoorsPageContainer","header","footer","onScreenEnter","track","_track","useStravaAnalytics","_t","noop","showHeader","showFooter","setTags","setContext","params","headerRef","fields","properties","dispatch","useReducer","providerState","Header","getDefaultEventHandlers","additionalTrackProperties","onHeaderLogoClickTrackEvent","signup_copy","cta_copy","array","iteratee","index","symbolProto","symbolToString","baseToString","arrayMap","isSymbol","string","replace","appendScriptToBody","script","name","appendChild","injectAppleScript","AppleID","createElement","formattedLocale","useApple","signin","stravaInit","auth","init","clientId","scope","redirectURI","signIn","emailAuthorizationUrl","handleExtAuthBtnClick","flashMessage","emailRegFormProps","showAlert","useAlertContext","alertType","AlertStatus","ERROR","content","hideCloseButton","containerId","EMAIL_REGISTRATION_FORM_ALERT_ID","externalSignups","AccountAuthButton","FACEBOOK","GOOGLE","emailSignup","EmailRegistrationForm","authorizationUrl","idPrefix","isInView","matchMinMedia","screenMd","DisclaimerText","AlertContainer","OrDivider","text","getTitleAndSubtitle","textKey","getTextKey","title","translatedSubtitle","subtitle","avatar","avatarType","Avatar","APPLE","theme","matchMaxMedia","screenSmMax","this","__data__","other","eq","splice","data","assocIndexOf","pop","push","ListCache","clear","entry","set","listCacheClear","listCacheDelete","listCacheGet","has","listCacheHas","listCacheSet","uid","isObject","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","isMasked","isFunction","test","toSource","object","getValue","baseIsNative","getNative","nativeCreate","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","Map","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","add","setCacheAdd","setCacheHas","predicate","cache","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","symbolValueOf","valueOf","byteLength","byteOffset","buffer","message","convert","mapToArray","setToArray","stacked","equalArrays","offset","keysFunc","symbolsFunc","arrayPush","resIndex","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","arrayFilter","symbol","stubArray","n","isArguments","baseIsArguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","baseGetAllKeys","getSymbols","objProps","getAllKeys","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","DataView","mapCtorString","promiseCtorString","Promise","setCtorString","Set","weakMapCtorString","WeakMap","getTag","ArrayBuffer","resolve","ctorString","argsTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","reIsDeepProp","reIsPlainProp","memoize","resolver","TypeError","memoized","apply","Cache","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","isKey","stringToPath","castPath","toKey","defaultValue","baseGet","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","fromRight","iterable","createBaseFor","eachFunc","collection","createBaseEach","baseFor","baseEach","baseMap","baseIteratee","fromIndex","strictIndexOf","baseFindIndex","baseIsNaN","baseIndexOf","comparator","arrayIncludes","isCommon","arrayIncludesWith","createSet","outer","computed","seenIndex","baseUniq","getUniqueSizesFromImages","uniqBy","getUniqueFormatsFromImages","getUniqueResolutionsFromImages","getImagesBySize","filter","getImagesByFormat","getImagesByResolution","SourceTags","imagesForSize","imagesForSizeAndFormat","imageBySizeAndFormatAndResolution","Boolean","media","ImgTag","DEFAULT_IMG_TAG_FALLBACK_CONFIG","Picture","tabletImages","setTabletImages","screenSm","filename","prev","breakpoints","registrationMessage","background","denyNonessentialCookies","authorizationUrls","appleState","regOptionsProps","appleSignin","backgroundImage","body","setProperty","setFullScreenBackgroundImage","copy_variant","option","elemAttrForAnalytics","redirect_url","path_type","assign","useExtAuthBtnClickHandler","createLink","cookiesAccepted","feature","AlertProvider","MobileRegistrationMessage","MobileRegistrationOptions","EMAIL","TabletImage","DesktopRegistrationMessage","DesktopRegistrationOptions"],"sourceRoot":""}