{"version":3,"file":"js/98084-4c9c43cc660d98970074.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-localized-images/constants.js","webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-localized-images/helpers.js","webpack://StravaModern/./node_modules/@strava/react-hooks/src/use-localized-images/useLocalizedImages.hook.js","webpack://StravaModern/./node_modules/@strava/shared-ui/src/AppStoreBadges/components/Badge/Badge.js","webpack://StravaModern/./node_modules/@strava/shared-ui/src/AppStoreBadges/constants.js","webpack://StravaModern/./node_modules/@strava/shared-ui/node_modules/@strava/constants/src/appConstants.js","webpack://StravaModern/./node_modules/@strava/shared-ui/src/AppStoreBadges/AppStoreBadges.js","webpack://StravaModern/./node_modules/@strava/shared-ui/src/AppStoreBadges/helpers.js","webpack://StravaModern/./node_modules/react-modern-drawer/dist/index.modern.js"],"sourcesContent":["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 {string} key - string representing collection of image files e.g. 'Strava.com-Home-Screen1'\n * @param {string} locale - locale to use in filename / filepath e.g. 'de-DE' (optional, if none provided, defaults to 'defaultDirectory')\n * @param {Array} 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} formats - formats to use for a given asset. e.g. ['webp', 'png']\n * @param {Array} resolutions - resolutions to use for a given asset e.g. ['1x', '2x']\n * @param {string} defaultDirectory - directory to use if no locale provided. Defaults to 'shared'\n * @param {Function} imageImportCallback - Callback function; called for each image instance. Params passed: imageLocaleDirectory, imageKey, imageSize, imageFormat, imageResolution, imageLocale\n * @param {Function} 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 track\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 const handleBadgeClick = () => {\n track({\n element: 'get_app',\n action: 'click',\n properties: { url, cta_copy: `${id}_app_store` }\n });\n };\n\n return (\n \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};\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","export const YOUNGEST_AGE_ON_PLATFORM = 13;\n\nexport const YOUNGEST_AGE_FOR_HEALTH_AND_PROMO = 16;\n\nexport const GENDER = Object.freeze({\n man: 'man',\n woman: 'woman',\n preferNotSay: 'prefer_not_say',\n nonBinary: 'nonbinary'\n});\n\nexport const LOCALE = Object.freeze({\n deDE: 'de-DE',\n enUS: 'en-US',\n enGB: 'en-GB',\n esES: 'es-ES',\n es419: 'es-419',\n frFR: 'fr-FR',\n itIT: 'it-IT',\n jaJP: 'ja-JP',\n koKR: 'ko-KR',\n nlNL: 'nl-NL',\n ptBR: 'pt-BR',\n ptPT: 'pt-PT',\n ruRU: 'ru-RU',\n zhCN: 'zh-CN',\n zhTW: 'zh-TW'\n});\n\n// If a language has more than one locale, the first in the list is the default\nexport const LANGUAGE_LOCALES = Object.freeze({\n de: [LOCALE.deDE],\n // en is intentionally omitted here since English is the global default\n es: [LOCALE.esES, LOCALE.es419],\n fr: [LOCALE.frFR],\n it: [LOCALE.itIT],\n ja: [LOCALE.jaJP],\n ko: [LOCALE.koKR],\n nl: [LOCALE.nlNL],\n pt: [LOCALE.ptPT, LOCALE.ptBR],\n ru: [LOCALE.ruRU],\n zh: [LOCALE.zhCN, LOCALE.zhTW]\n});\n\nexport const EXPERIMENT_COHORTS = Object.freeze({\n control: 'control',\n variantA: 'variant-a',\n variantB: 'variant-b'\n});\n\nexport const MOBILE_OS = Object.freeze({\n android: 'android',\n iPhone: 'iphone',\n iPad: 'ipad'\n});\n\nexport const SUPPORTED_BROWSERS = Object.freeze({\n chrome: 'chrome',\n firefox: 'firefox',\n safari: 'safari'\n});\n\n// universal link paths from 'apple-app-site-association' file in active\nexport const APPLE_APP_LINK_PATHS = [\n '/dashboard',\n '/activities/*',\n '/athletes/*',\n '/segments/*',\n '/challenges/*',\n '/videos/*',\n '/routes/*',\n '/premium/*',\n '/settings/*',\n '/shop/*',\n '/athlete/*',\n '/clubs/*',\n '/summit/join',\n '/summit/perks',\n '/oauth/mobile/authorize'\n];\n\nexport const ATHLETES_VISIBILITY = Object.freeze({\n optedOut: 'opted_out' // Strava::Athletes::Visibility::OPTED_OUT\n});\n\nexport default {\n YOUNGEST_AGE_ON_PLATFORM,\n YOUNGEST_AGE_FOR_HEALTH_AND_PROMO,\n GENDER,\n LOCALE,\n EXPERIMENT_COHORTS,\n MOBILE_OS,\n SUPPORTED_BROWSERS,\n APPLE_APP_LINK_PATHS,\n ATHLETES_VISIBILITY\n};\n","import 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 = ({ track, 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 );\n};\n\nexport default AppStoreBadges;\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, { useRef, useEffect, useMemo } from 'react';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar getDirectionStyle = function getDirectionStyle(dir, size) {\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\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\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\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\nvar EZDrawer = function EZDrawer(props) {\n var open = props.open,\n _props$onClose = props.onClose,\n onClose = _props$onClose === void 0 ? function () {} : _props$onClose,\n children = props.children,\n style = props.style,\n _props$enableOverlay = props.enableOverlay,\n enableOverlay = _props$enableOverlay === void 0 ? true : _props$enableOverlay,\n _props$overlayColor = props.overlayColor,\n overlayColor = _props$overlayColor === void 0 ? '#000' : _props$overlayColor,\n _props$overlayOpacity = props.overlayOpacity,\n overlayOpacity = _props$overlayOpacity === void 0 ? 0.4 : _props$overlayOpacity,\n _props$zIndex = props.zIndex,\n zIndex = _props$zIndex === void 0 ? 100 : _props$zIndex,\n _props$duration = props.duration,\n duration = _props$duration === void 0 ? 500 : _props$duration,\n direction = props.direction,\n _props$size = props.size,\n size = _props$size === void 0 ? 250 : _props$size,\n className = props.className,\n customIdSuffix = props.customIdSuffix,\n _props$lockBackground = props.lockBackgroundScroll,\n lockBackgroundScroll = _props$lockBackground === void 0 ? false : _props$lockBackground;\n var bodyRef = useRef(null);\n useEffect(function () {\n var updatePageScroll = function 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 var idSuffix = useMemo(function () {\n return customIdSuffix || (Math.random() + 1).toString(36).substring(7);\n }, [customIdSuffix]);\n var overlayStyles = {\n backgroundColor: \"\" + overlayColor,\n opacity: \"\" + overlayOpacity,\n zIndex: zIndex\n };\n\n var drawerStyles = _extends({\n zIndex: zIndex + 1,\n transitionDuration: duration + \"ms\"\n }, getDirectionStyle(direction, size), style);\n\n return React.createElement(\"div\", {\n id: 'EZDrawer' + idSuffix,\n className: 'EZDrawer'\n }, React.createElement(\"input\", {\n type: 'checkbox',\n id: 'EZDrawer__checkbox' + idSuffix,\n className: 'EZDrawer__checkbox',\n onChange: onClose,\n checked: open\n }), React.createElement(\"nav\", {\n role: 'navigation',\n id: 'EZDrawer__container' + idSuffix,\n style: drawerStyles,\n className: 'EZDrawer__container ' + className\n }, children), enableOverlay && React.createElement(\"label\", {\n htmlFor: 'EZDrawer__checkbox' + idSuffix,\n id: 'EZDrawer__overlay' + idSuffix,\n className: 'EZDrawer__overlay',\n style: overlayStyles\n }));\n};\n\nexport default EZDrawer;\n//# sourceMappingURL=index.modern.js.map\n"],"names":["DEFAULT_LOCALIZED_IMAGES_SIZES","id","value","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","size","image1Size","format","image1Format","image2Size","image2Format","indexOf","getImageLocaleDirectory","locale","defaultDirectory","Object","values","LOCALE","includes","getImageLocale","useLocalizedImages","_ref","key","sizes","formats","resolutions","imageImportCallback","logError","images","setImages","useSafeState","useEffect","async","forEach","file","imageData","error","Error","importImage","imageLocaleDirectory","imageKey","imageSize","imageFormat","imageResolution","resolution","imageLocale","prevImages","initImages","sort","Badge","badge","imgTagFallbackConfig","track","sources","setSources","useState","fallbackImgSrc","setFallbackImgSrc","url","isLazy","alt","sourceData","getSourceData","imgWebp1x","find","image","imgWebp2x","imgPng1x","imgPng2x","webp","join","png","defaultImage","React","href","onClick","handleBadgeClick","element","action","properties","cta_copy","entries","map","_ref2","srcSet","type","src","loading","height","width","propTypes","PropTypes","isRequired","defaultProps","undefined","APP_STORE_BADGE_SIZES","APP_STORES","freeze","google","apple","unknown","man","woman","preferNotSay","nonBinary","deDE","enUS","enGB","esES","es419","frFR","itIT","jaJP","koKR","nlNL","ptBR","ptPT","ruRU","zhCN","zhTW","MOBILE_OS","de","es","fr","it","ja","ko","nl","pt","ru","zh","control","variantA","variantB","android","iPhone","iPad","chrome","firefox","safari","optedOut","className","userAgent","t","getLanguage","useStravaTranslations","useStravaErrorLogging","appLink","useStravaBranch","importBadgeImage","useCallback","path","default","appleBadgeImages","googleBadgeImages","appStore","getMobileOS","mobileOsToAppStore","_extends","assign","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","props","open","_props$onClose","onClose","children","style","_props$enableOverlay","enableOverlay","_props$overlayColor","overlayColor","_props$overlayOpacity","overlayOpacity","_props$zIndex","zIndex","_props$duration","duration","direction","_props$size","customIdSuffix","_props$lockBackground","lockBackgroundScroll","bodyRef","useRef","current","window","document","querySelector","overflow","idSuffix","useMemo","Math","random","toString","substring","overlayStyles","backgroundColor","opacity","drawerStyles","transitionDuration","dir","top","left","transform","right","bottom","getDirectionStyle","onChange","checked","role","htmlFor"],"sourceRoot":""}