{"version":3,"file":"1772.bundle.47a3c75a3a26ae70c852.js","mappings":"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","sources":["webpack://fieldlevel.app/./app-core/components/OptimizedVideoThumbnail/OptimizedVideoThumbnail.jsx","webpack://fieldlevel.app/./app-core/components/PlayIconDesign.jsx","webpack://fieldlevel.app/./app-core/components/video/UnconfiguredVideoPlayer.jsx","webpack://fieldlevel.app/./app-core/components/video/VideoDuration.jsx","webpack://fieldlevel.app/./app-core/components/video/VideoProgress.jsx","webpack://fieldlevel.app/./app-core/utility/videoAnalytics.js"],"sourcesContent":["import PropTypes from 'prop-types';\r\n\r\nimport { isMediumAndUp } from '@appCore/utility/viewport';\r\n\r\nimport _OptimizedVideoThumbnail from './_OptimizedVideoThumbnail';\r\n\r\nconst VARIANTS = {\r\n    variant1: 'variant1',\r\n    variant2: 'variant2',\r\n    variant3: 'variant3',\r\n    variant4: 'variant4',\r\n    variant5: 'variant5'\r\n};\r\n\r\n/*\r\n       Note: Due to the somewhat unknown potential use-cases we may have for this functionality, the decision\r\n       was made to keep the internal functionality private for the time being and merely expose a\r\n       simple wrapper with variants for configuration. Once we're clear on usage, we can work toward\r\n       exposing the appropriate abstraction for our needs; until then, just add a variant.\r\n */\r\nconst OptimizedVideoThumbnail = ({ variant, imgSrc }) => {\r\n    switch (variant) {\r\n        // As used in AthleteProfile / TimelineVideoItem\r\n        case VARIANTS.variant1:\r\n            return (\r\n                <_OptimizedVideoThumbnail\r\n                    imgDef={{\r\n                        src: imgSrc,\r\n                        loading: !isMediumAndUp() ? 'lazy' : undefined,\r\n                        muxParams: { width: 768 }\r\n                    }}\r\n                    sourceDefs={[\r\n                        { media: '(min-width:769px)', muxParams: { width: 940 } },\r\n                        { media: '(min-width:577px)', muxParams: { width: 768 } },\r\n                        { media: '(min-width:415px)', muxParams: { width: 576 } },\r\n                        { media: '(min-width:376px)', muxParams: { width: 414 } },\r\n                        { muxParams: { width: 375 } }\r\n                    ]}\r\n                />\r\n            );\r\n\r\n        // As used in Athlete Profile / VideoContainer\r\n        case VARIANTS.variant2:\r\n            return (\r\n                <_OptimizedVideoThumbnail\r\n                    imgDef={{\r\n                        src: imgSrc,\r\n                        muxParams: { width: 320, height: 150, fit_mode: 'smartcrop' }\r\n                    }}\r\n                />\r\n            );\r\n        // As used in Athlete Profile / ProfileVideosList\r\n        case VARIANTS.variant3:\r\n            return (\r\n                <_OptimizedVideoThumbnail\r\n                    imgDef={{ src: imgSrc, muxParams: { width: 442 } }}\r\n                    sourceDefs={[\r\n                        { media: '(min-width:768px)', muxParams: { width: 442 } },\r\n                        { muxParams: { width: 120 } }\r\n                    ]}\r\n                />\r\n            );\r\n\r\n        // As used in Athlete Profile / VideosDetail / VideosList\r\n        case VARIANTS.variant4:\r\n            return (\r\n                <_OptimizedVideoThumbnail\r\n                    imgDef={{\r\n                        src: imgSrc,\r\n                        muxParams: { width: 120 }\r\n                    }}\r\n                />\r\n            );\r\n\r\n        // As used in AthleteProfile / VideosDetail\r\n        case VARIANTS.variant5:\r\n            return (\r\n                <_OptimizedVideoThumbnail\r\n                    imgDef={{\r\n                        src: imgSrc,\r\n                        muxParams: { width: 768 }\r\n                    }}\r\n                    sourceDefs={[\r\n                        { media: '(min-width:769px)', muxParams: { width: 940 } },\r\n                        { media: '(min-width:577px)', muxParams: { width: 768 } },\r\n                        { media: '(min-width:415px)', muxParams: { width: 576 } },\r\n                        { media: '(min-width:376px)', muxParams: { width: 414 } },\r\n                        { muxParams: { width: 375 } }\r\n                    ]}\r\n                />\r\n            );\r\n        default:\r\n            return <_OptimizedVideoThumbnail imgDef={{ src: imgSrc }} />;\r\n    }\r\n};\r\n\r\nOptimizedVideoThumbnail.propTypes = {\r\n    variant: PropTypes.oneOf(Object.values(VARIANTS)),\r\n    imgSrc: PropTypes.string.isRequired\r\n};\r\n\r\nexport default OptimizedVideoThumbnail;\r\n","import PropTypes from 'prop-types';\r\nimport cx from 'classnames';\r\n\r\nimport { Icon, VideoMinor } from '@fieldlevel/playbook';\r\n\r\nfunction getScaleClassname(size) {\r\n    switch (size) {\r\n        case 'small':\r\n            return 'scale-[120%]';\r\n        case 'large':\r\n            return 'scale-[240%]';\r\n        default:\r\n            return 'scale-[180%]';\r\n    }\r\n}\r\n\r\nconst PlayIconDesign = ({ size }) => (\r\n    <span\r\n        className={cx(\r\n            'flex items-center justify-center w-[35px] h-[35px] bg-background-black bg-opacity-30 rounded-full',\r\n            getScaleClassname(size)\r\n        )}\r\n    >\r\n        <Icon source={VideoMinor} color=\"onDark\" />\r\n    </span>\r\n);\r\n\r\nPlayIconDesign.propTypes = {\r\n    size: PropTypes.oneOf(['small', 'default', 'large'])\r\n};\r\n\r\nexport default PlayIconDesign;\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ReactPlayer from 'react-player';\r\nimport mux from 'mux-embed';\r\nimport { useInView } from 'react-intersection-observer';\r\n\r\nimport * as GoogleAnalytics from '@appCore/utility/googleAnalytics';\r\nimport { logWarning as natsLogWarning } from '@appCore/services/logger';\r\nimport {\r\n    logImpression,\r\n    logInit,\r\n    logReady,\r\n    logError,\r\n    logPlay,\r\n    logPause,\r\n    logEnd,\r\n    logDestroy,\r\n    setTickTime,\r\n    getTickTime\r\n} from '@appCore/utility/videoAnalytics';\r\nimport VideoDuration from '@appCore/components/video/VideoDuration';\r\nimport VideoProgress from '@appCore/components/video/VideoProgress';\r\nimport PlayIconDesign from '@appCore/components/PlayIconDesign';\r\nimport OptimizedVideoThumbnail from '@appCore/components/OptimizedVideoThumbnail/OptimizedVideoThumbnail';\r\n\r\n/**\r\n * Used to log additional debugging info to NATS/DataDog. Prior to this implementation, these logs were being\r\n * reported as errors, but they were not very actionable long-term. They may not be needed at all,\r\n * but until a definitive decision can be made, we're downgrading them to \"warn\"\r\n *\r\n * @param {object} params\r\n * @param {string} [params.leadingMessage]\r\n * @param {*} [params.additionalData]\r\n */\r\nconst logDebugWarning = ({ leadingMessage, additionalData }) => {\r\n    const messageParts = [\r\n        leadingMessage ? ` -- ${leadingMessage}` : leadingMessage,\r\n        additionalData !== undefined && additionalData !== null ? `\\n${JSON.stringify(additionalData)}` : additionalData\r\n    ].filter(part => !!part);\r\n    natsLogWarning(`VideoPlayer Warning${messageParts.join('')}`);\r\n};\r\n\r\nconst PreviewLinkFL = () => (\r\n    <img src=\"/assets/v5/img/fl-mark-only-light.svg\" alt=\"FieldLevel logo\" width=\"20\" height=\"18\" />\r\n);\r\n\r\nconst PreviewLinkYT = ({ url }) => (\r\n    <a\r\n        href={url}\r\n        target=\"_blank\"\r\n        title={`View on Youtube.com`}\r\n        onClick={e => {\r\n            e.stopPropagation();\r\n        }}\r\n    >\r\n        <img src=\"/assets/v4/img/youtube_logo_dark.png\" alt=\"YouTube logo\" width=\"60\" height=\"14\" />\r\n    </a>\r\n);\r\n\r\nconst PreviewLinkHudl = ({ url }) => (\r\n    <a\r\n        href={url}\r\n        target=\"_blank\"\r\n        title={`View on Hudl.com`}\r\n        onClick={e => {\r\n            e.stopPropagation();\r\n        }}\r\n    >\r\n        <img src=\"/assets/v4/img/hudl-logo-2015.png\" alt=\"Hudl logo\" width=\"50\" height=\"17\" />\r\n    </a>\r\n);\r\n\r\nconst PreviewLinkVimeo = ({ url }) => (\r\n    <a\r\n        href={url}\r\n        target=\"_blank\"\r\n        title={`View on vimeo.com`}\r\n        onClick={e => {\r\n            e.stopPropagation();\r\n        }}\r\n    >\r\n        <img\r\n            src=\"/assets/v4/img/vimeo_logo_blue.png\"\r\n            alt=\"Vimeo logo\"\r\n            width=\"40\"\r\n            height=\"11\"\r\n            style={{ marginBottom: '3px' }}\r\n        />\r\n    </a>\r\n);\r\n\r\nconst Preview = ({ duration, filmTypeEnum, progress, children }) => {\r\n    return (\r\n        <>\r\n            <div className=\"absolute top-4 right-4 opacity-80\">{children}</div>\r\n            <div className=\"absolute bottom-4 right-4\">\r\n                <VideoDuration duration={duration} />\r\n            </div>\r\n            {filmTypeEnum?.Id > 0 && (\r\n                <div className=\"absolute bottom-4 left-4\">\r\n                    <div className=\"flex items-center justify-center py-[3px] px-[5px] bg-foreground-muted rounded-sm\">\r\n                        {filmTypeEnum.Label}\r\n                    </div>\r\n                </div>\r\n            )}\r\n            <VideoProgress duration={duration} timeCode={progress} />\r\n        </>\r\n    );\r\n};\r\n\r\n// if the pause timeCode is more than the progress interval away from the last tick time,\r\n// it was caused by a seek while the video was playing instead of the user pausing.\r\n// in this case we want to use the last tick as the timeCode for the event so that\r\n// we can accurately calculate the duration of the video the user actually watched.\r\nconst PROGRESS_INTERVAL = 1000;\r\nconst getBestPauseTime = (guid, time) => {\r\n    const tickTime = getTickTime(guid);\r\n    const progressIntervalSeconds = PROGRESS_INTERVAL / 1000;\r\n\r\n    if (time - progressIntervalSeconds > tickTime || time + progressIntervalSeconds < tickTime) {\r\n        return tickTime;\r\n    }\r\n\r\n    return time;\r\n};\r\n\r\n/**\r\n * This component is prefixed with \"Unconfigured\" to highlight the fact that it requires one or more hooks\r\n * to be passed to it for full functionality. It is intended to be \"configured\" once in a host application\r\n * (simply by passing hooks) which will then share that wrapped/configured version locally within the app.\r\n */\r\nconst UnconfiguredVideoPlayer = ({\r\n    playVideo = false,\r\n    pauseVideo = false,\r\n    showTitle = true,\r\n    showFooter = true,\r\n    logInteractions = true,\r\n    autoplay = false,\r\n    usePreview = true,\r\n    playsInline = false,\r\n    startAt = 0,\r\n    video,\r\n    onInit,\r\n    onPlay,\r\n    onInitialPlay,\r\n    onProgress,\r\n    onEnd,\r\n    interactionContext,\r\n    posterURL,\r\n    minHeight,\r\n    optimizedThumbnailProps,\r\n    useUpdateVideoDuration\r\n}) => {\r\n    const player = useRef(null);\r\n    const [showPreview, setShowPreview] = useState(true);\r\n    const [playing, setPlaying] = useState(false);\r\n    const [startedWithClick, setStartedWithClick] = useState(false);\r\n    const [init, setInit] = useState(false);\r\n    const [initialReady, setInitialReady] = useState(false);\r\n    const [ref, inView] = useInView({ threshold: 0.5, triggerOnce: true });\r\n\r\n    const { mutateAsync: updateVideoDuration } = useUpdateVideoDuration();\r\n\r\n    const isFLVideo = video.Url.indexOf('mux.com') != -1;\r\n    const isHudlVideo = video.Url.indexOf('hudl.com') != -1;\r\n    const isYoutubeVideo = video.Url.indexOf('youtube.com') != -1;\r\n    const isVimeoVideo = video.Url.indexOf('vimeo.com') != -1;\r\n\r\n    useEffect(() => {\r\n        return () => {\r\n            const time = getTickTime(video.Guid);\r\n            logInteractions && logDestroy(video.Guid, time, interactionContext);\r\n        };\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if ((autoplay || startedWithClick) && initialReady && !init) {\r\n            handleInit();\r\n        }\r\n    }, [initialReady, init, autoplay, startedWithClick]);\r\n\r\n    useEffect(() => {\r\n        inView && logInteractions && logImpression(video.Guid, interactionContext);\r\n    }, [inView]);\r\n\r\n    useEffect(() => {\r\n        pauseVideo && setPlaying(false);\r\n    }, [pauseVideo]);\r\n\r\n    useEffect(() => {\r\n        if (playVideo) {\r\n            if (!init) {\r\n                handleInit();\r\n            } else {\r\n                setPlaying(true);\r\n            }\r\n        }\r\n    }, [playVideo]);\r\n\r\n    useEffect(() => {\r\n        if (init && isFLVideo) {\r\n            const videoEl = player.current && player.current.getInternalPlayer();\r\n\r\n            if (videoEl) {\r\n                mux.monitor(videoEl, {\r\n                    data: {\r\n                        env_key: window.flMuxEnvKey,\r\n                        player_name: 'VideoPlayer',\r\n                        player_init_time: Date.now(),\r\n                        video_id: video.Guid\r\n                    }\r\n                });\r\n            } else {\r\n                logDebugWarning({\r\n                    leadingMessage: 'No Mux Data',\r\n                    additionalData: { video: !!videoEl, mux: !!window.mux }\r\n                });\r\n            }\r\n        }\r\n    }, [init]);\r\n\r\n    function handleInit() {\r\n        setShowPreview(false);\r\n        logInteractions && logInit(video.Guid, interactionContext);\r\n        GoogleAnalytics.logEvent('Video Init', 'Video Player', { label: video.Guid });\r\n        onInit && onInit();\r\n        setPlaying(true);\r\n        setInit(true);\r\n    }\r\n\r\n    function handleReady() {\r\n        logInteractions && logReady(video.Guid, interactionContext);\r\n        if (!initialReady) {\r\n            if (startAt > 0 && startAt < video.Duration) {\r\n                player.current.seekTo(startAt, 'seconds');\r\n            }\r\n            setInitialReady(true);\r\n        }\r\n    }\r\n\r\n    function handleStart() {\r\n        onInitialPlay && onInitialPlay(video);\r\n    }\r\n\r\n    function handlePlay() {\r\n        const time = player.current.getCurrentTime();\r\n        const duration = player.current.getDuration();\r\n\r\n        // ignore any play event that happens at the end of the video since a seek to the end restarts the\r\n        // the video and messes up logging\r\n        if (time && duration && time === duration) {\r\n            return;\r\n        }\r\n\r\n        logInteractions && logPlay(video.Guid, time, interactionContext);\r\n        onPlay && onPlay();\r\n        setPlaying(true);\r\n    }\r\n\r\n    function handlePause() {\r\n        const time = player.current.getCurrentTime();\r\n        const duration = player.current.getDuration();\r\n        const stopTime = getBestPauseTime(video.Guid, time);\r\n\r\n        // ignore any pause event that happens at the end of the video so that we capture the end instead\r\n        if (stopTime === duration) {\r\n            return;\r\n        }\r\n\r\n        logInteractions && logPause(video.Guid, stopTime, interactionContext);\r\n        setPlaying(false);\r\n    }\r\n\r\n    function handleProgress(data) {\r\n        setTickTime(video.Guid, data.playedSeconds);\r\n        onProgress && onProgress(data.playedSeconds);\r\n    }\r\n\r\n    function handleEnded() {\r\n        const time = player.current.getCurrentTime();\r\n        logInteractions && logEnd(video.Guid, time, interactionContext);\r\n        onEnd && onEnd();\r\n    }\r\n\r\n    function handleSeek() {\r\n        GoogleAnalytics.logEvent('Video Seeked', 'Video Player', { label: video.Guid });\r\n    }\r\n\r\n    function handleError(error) {\r\n        const errorCode = typeof error === 'object' ? error?.target?.error?.code : error;\r\n\r\n        logInteractions && logError(video.Guid, interactionContext);\r\n        logDebugWarning({\r\n            leadingMessage: 'ReactPlayer fired onError event',\r\n            additionalData: {\r\n                Guid: video.Guid,\r\n                errorCode,\r\n                isFLVideo,\r\n                isYoutubeVideo,\r\n                isHudlVideo,\r\n                isVimeoVideo\r\n            }\r\n        });\r\n    }\r\n\r\n    function handleDuration(duration) {\r\n        if (!video.Duration && duration) {\r\n            updateVideoDuration({ videoId: video.VideoId, duration: Math.round(duration) });\r\n        }\r\n    }\r\n\r\n    const url = isHudlVideo ? video.MediaFileUrl : video.Url;\r\n    const light =\r\n        autoplay || !usePreview ? (\r\n            false\r\n        ) : (\r\n            <div className=\"absolute top-0 left-0 w-full h-full\">\r\n                <OptimizedVideoThumbnail {...optimizedThumbnailProps} imgSrc={video.ThumbnailUrl} />\r\n            </div>\r\n        );\r\n\r\n    const config = {\r\n        youtube: {\r\n            playerVars: {\r\n                playsinline: playsInline,\r\n                modestbranding: 1,\r\n                rel: 0,\r\n                iv_load_policy: 3,\r\n                autoplay: autoplay\r\n            }\r\n        },\r\n        file: {\r\n            attributes: {\r\n                playsInline: playsInline,\r\n                // preload: !usePreview ? 'metadata' : 'none',\r\n                preload: 'metadata',\r\n                /*\r\n                    We added the option to provide a posterURL in an attempt to improve Largest Contentful Paint (LCP)\r\n                    metrics on videos where we have autoplay enabled. When autoplay isn't enabled however, we\r\n                    actually don't want the poster to be loaded at all, because we already have an optimized\r\n                    preview image configured via the ReactPlayer.light prop.\r\n                 */\r\n                poster: autoplay ? posterURL : undefined\r\n            },\r\n            hlsVersion: '1.5.1'\r\n        }\r\n    };\r\n\r\n    return (\r\n        <div>\r\n            <div ref={ref} className=\"relative pt-[56.25%] bg-background-black\" style={{ minHeight }}>\r\n                <ReactPlayer\r\n                    className=\"absolute top-0 left-0\"\r\n                    playing={playing}\r\n                    controls\r\n                    muted\r\n                    volume={0}\r\n                    light={light}\r\n                    url={url}\r\n                    ref={player}\r\n                    config={config}\r\n                    onClick={() => {\r\n                        // When we click the interface, all we're really wanting to do is kick-off the internal\r\n                        // mechanisms for starting a video, which happens automatically. So we just update\r\n                        // internal state, and treat startup as if autoplay were enabled.\r\n                        setStartedWithClick(true);\r\n                    }}\r\n                    onReady={handleReady}\r\n                    onStart={handleStart}\r\n                    onPlay={handlePlay}\r\n                    onPause={handlePause}\r\n                    onEnded={handleEnded}\r\n                    onError={handleError}\r\n                    onProgress={handleProgress}\r\n                    onSeek={handleSeek}\r\n                    onDuration={handleDuration}\r\n                    progressInterval={PROGRESS_INTERVAL}\r\n                    playIcon={<PlayIconDesign size=\"large\" />}\r\n                    width=\"100%\"\r\n                    height=\"100%\"\r\n                />\r\n                {showPreview && (\r\n                    <Preview\r\n                        title={showTitle && video.Title}\r\n                        duration={video.Duration}\r\n                        filmTypeEnum={video.FilmTypeEnum}\r\n                        showFooter={showFooter || isHudlVideo}\r\n                        progress={startAt}\r\n                    >\r\n                        {isFLVideo && <PreviewLinkFL />}\r\n                        {isYoutubeVideo && <PreviewLinkYT url={video.Url} />}\r\n                        {isHudlVideo && <PreviewLinkHudl url={video.Url} />}\r\n                        {isVimeoVideo && <PreviewLinkVimeo url={video.Url} />}\r\n                    </Preview>\r\n                )}\r\n            </div>\r\n            {showTitle && video.Title && <div className=\"p-4 pb-0\">{video.Title}</div>}\r\n        </div>\r\n    );\r\n};\r\n\r\nUnconfiguredVideoPlayer.propTypes = {\r\n    video: PropTypes.shape({\r\n        Title: PropTypes.string,\r\n        ThumbnailUrl: PropTypes.string.isRequired,\r\n        MediaFileUrl: PropTypes.string,\r\n        Url: PropTypes.string.isRequired,\r\n        Guid: PropTypes.string.isRequired,\r\n        Duration: PropTypes.number\r\n    }).isRequired,\r\n    showTitle: PropTypes.bool,\r\n    showFooter: PropTypes.bool,\r\n    playVideo: PropTypes.bool,\r\n    pauseVideo: PropTypes.bool,\r\n    onInit: PropTypes.func,\r\n    onPlay: PropTypes.func,\r\n    onInitialPlay: PropTypes.func,\r\n    onProgress: PropTypes.func,\r\n    onEnd: PropTypes.func,\r\n    logInteractions: PropTypes.bool,\r\n    interactionContext: PropTypes.number,\r\n    autoplay: PropTypes.bool,\r\n    playsInline: PropTypes.bool,\r\n    usePreview: PropTypes.bool,\r\n    minHeight: PropTypes.string,\r\n    startAt: PropTypes.number,\r\n    optimizedThumbnailProps: PropTypes.exact(\r\n        (() => {\r\n            const propTypes = { ...OptimizedVideoThumbnail.propTypes };\r\n            delete propTypes.imgSrc;\r\n            return propTypes;\r\n        })()\r\n    ),\r\n    posterURL: PropTypes.string,\r\n    useUpdateVideoDuration: PropTypes.func.isRequired\r\n};\r\n\r\nexport default UnconfiguredVideoPlayer;\r\n","import PropTypes from 'prop-types';\r\n\r\nimport { videoDurationFormatter } from '@appCore/utility/formatter';\r\n\r\nconst VideoDuration = ({ duration }) => {\r\n    if (!duration || !Number.isFinite(duration)) {\r\n        return null;\r\n    }\r\n\r\n    return (\r\n        <div className=\"flex items-center justify-center py-0.5 px-2 bg-background-black rounded-sm\">\r\n            <span className=\"text-body-sm text-on-dark\">{videoDurationFormatter(duration)}</span>\r\n        </div>\r\n    );\r\n};\r\n\r\nVideoDuration.propTypes = {\r\n    duration: PropTypes.number\r\n};\r\n\r\nexport default VideoDuration;\r\n","import PropTypes from 'prop-types';\r\n\r\nconst VideoProgress = ({ duration, timeCode }) => {\r\n    if (!duration || !Number.isFinite(duration) || !timeCode || !Number.isFinite(timeCode)) {\r\n        return null;\r\n    }\r\n\r\n    let progressWidth = 0;\r\n\r\n    if (duration > 0 && timeCode > 0) {\r\n        progressWidth = Math.floor((timeCode / duration) * 100);\r\n        progressWidth = progressWidth <= 10 ? 10 : progressWidth;\r\n        progressWidth = progressWidth > 100 ? 100 : progressWidth;\r\n    }\r\n\r\n    if (timeCode == 0) {\r\n        return null;\r\n    }\r\n\r\n    return (\r\n        <div className=\"bg-[#909090] absolute bottom-0 left-0 right-0 h-1\">\r\n            <div className=\"bg-[#ff0000] h-1\" style={{ width: `${progressWidth}%` }} />\r\n        </div>\r\n    );\r\n};\r\n\r\nVideoProgress.propTypes = {\r\n    duration: PropTypes.number,\r\n    timeCode: PropTypes.number\r\n};\r\n\r\nexport default VideoProgress;\r\n","import http from '@appCore/services/http';\r\n\r\nconst VideoInteractionEventTypeEnum = {\r\n    Unknown: 0,\r\n    Impression: 1,\r\n    Init: 2,\r\n    Ready: 3,\r\n    Error: 4,\r\n    Play: 5,\r\n    Pause: 6,\r\n    End: 7,\r\n    Destroy: 8,\r\n    UploadStart: 9,\r\n    UploadComplete: 10\r\n};\r\n\r\nexport const VideoInteractionContextEnum = {\r\n    Unknown: 0,\r\n    AthleteProfile: 1,\r\n    CoachFeed: 2,\r\n    ForYouCategory: 3,\r\n    TopVideos: 4,\r\n    ForYouFeed: 5, // ForYouFeed has been deprecated\r\n    AthleteVideoDetails: 6,\r\n    OnboardingDiscoverAthletes: 7,\r\n    SearchResults: 8,\r\n    MarketplaceEvaluation: 9,\r\n    AthletePortalAnnouncementDetail: 10,\r\n    AthletePortalAnnouncementList: 11\r\n};\r\n\r\nlet lastPlayedTime = {};\r\nlet lastTickTime = {};\r\nlet lastEvent = {};\r\nlet uploadStarts = {};\r\n\r\nconst videoApiLogInteraction = ({\r\n    webResourceGuid,\r\n    eventType = 0,\r\n    dateUtc,\r\n    timeCode = 0,\r\n    timeElapsed = 0,\r\n    interactionContext\r\n}) => {\r\n    const url = '/api/videoapi/loginteraction';\r\n    const params = {\r\n        WebResourceGuid: webResourceGuid,\r\n        EventType: eventType,\r\n        DateUtc: dateUtc,\r\n        TimeCode: timeCode,\r\n        TimeElapsed: timeElapsed,\r\n        VideoInteractionContext: interactionContext\r\n    };\r\n\r\n    return http.get(url, params);\r\n};\r\n\r\nfunction logInteraction(webResourceGuid, eventType, timeCode, timeElapsed, interactionContext) {\r\n    const dateUtc = new Date().toISOString();\r\n    const trimmedTimeCode = timeCode ? timeCode.toFixed(2) : 0;\r\n    const trimmedTimeElapsed = timeElapsed ? timeElapsed.toFixed(2) : 0;\r\n\r\n    videoApiLogInteraction({\r\n        webResourceGuid,\r\n        eventType,\r\n        dateUtc,\r\n        timeCode: trimmedTimeCode,\r\n        timeElapsed: trimmedTimeElapsed,\r\n        interactionContext\r\n    }).catch(e => {\r\n        // log event, so silently catch the error\r\n        console.error(e);\r\n    });\r\n}\r\n\r\nexport function logImpression(webResourceGuid, interactionContext) {\r\n    const dateUtc = new Date().toISOString();\r\n\r\n    videoApiLogInteraction({\r\n        webResourceGuid,\r\n        eventType: VideoInteractionEventTypeEnum.Impression,\r\n        dateUtc,\r\n        interactionContext\r\n    }).catch(e => {\r\n        // log event, so silently catch the error\r\n        console.error(e);\r\n    });\r\n}\r\n\r\nexport function logInit(webResourceGuid, interactionContext) {\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Init;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Init, 0, 0, interactionContext);\r\n}\r\n\r\nexport function logReady(webResourceGuid, interactionContext) {\r\n    if (lastEvent[webResourceGuid] !== VideoInteractionEventTypeEnum.Init) {\r\n        return;\r\n    }\r\n\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Ready;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Ready, 0, 0, interactionContext);\r\n}\r\n\r\nexport function logError(webResourceGuid, interactionContext) {\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Error;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Error, 0, 0, interactionContext);\r\n}\r\n\r\nexport function logPlay(webResourceGuid, timeCode, interactionContext) {\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Play;\r\n    lastPlayedTime[webResourceGuid] = timeCode;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Play, timeCode, 0, interactionContext);\r\n}\r\n\r\nexport function logPause(webResourceGuid, timeCode, interactionContext) {\r\n    const last = lastPlayedTime[webResourceGuid];\r\n    let elapsed = timeCode - last;\r\n\r\n    // if elapsed is negative, this was probably a seek backwards or we got the wrong pause timecode\r\n    // ignore duration in this case to avoid poluting the data\r\n    if (elapsed < 0) {\r\n        elapsed = 0;\r\n    }\r\n\r\n    if (lastEvent[webResourceGuid] !== VideoInteractionEventTypeEnum.Play) {\r\n        return;\r\n    }\r\n\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Pause;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Pause, timeCode, elapsed, interactionContext);\r\n}\r\n\r\nexport function logEnd(webResourceGuid, timeCode, interactionContext) {\r\n    const last = lastPlayedTime[webResourceGuid];\r\n    const elapsed = timeCode - last;\r\n\r\n    if (lastEvent[webResourceGuid] !== VideoInteractionEventTypeEnum.Play) {\r\n        return;\r\n    }\r\n\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.End;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.End, timeCode, elapsed, interactionContext);\r\n}\r\n\r\nexport function logDestroy(webResourceGuid, timeCode) {\r\n    const last = lastPlayedTime[webResourceGuid];\r\n    const elapsed = timeCode - last;\r\n\r\n    if (lastEvent[webResourceGuid] !== VideoInteractionEventTypeEnum.Play) {\r\n        return;\r\n    }\r\n\r\n    lastEvent[webResourceGuid] = VideoInteractionEventTypeEnum.Destroy;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.Destroy, timeCode, elapsed);\r\n}\r\n\r\nexport function setTickTime(webResourceGuid, timeCode) {\r\n    lastTickTime[webResourceGuid] = timeCode;\r\n}\r\n\r\nexport function getTickTime(webResourceGuid) {\r\n    return lastTickTime[webResourceGuid];\r\n}\r\n\r\nexport function logUploadStart(webResourceGuid, interactionContext) {\r\n    const now = Date.now();\r\n    uploadStarts[webResourceGuid] = now;\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.UploadStart, 0, 0, interactionContext);\r\n}\r\n\r\nexport function logUploadComplete(webResourceGuid, interactionContext) {\r\n    const now = Date.now();\r\n    const start = uploadStarts[webResourceGuid];\r\n    let elapsed = (now - start) / 1000;\r\n\r\n    // if elapsed is negative something went wrong so just log a 0\r\n    if (elapsed < 0) {\r\n        elapsed = 0;\r\n    }\r\n\r\n    logInteraction(webResourceGuid, VideoInteractionEventTypeEnum.UploadComplete, 0, elapsed, interactionContext);\r\n}\r\n"],"names":["VARIANTS","variant1","variant2","variant3","variant4","variant5","OptimizedVideoThumbnail","_ref","variant","imgSrc","_jsx","_OptimizedVideoThumbnail","imgDef","src","loading","isMediumAndUp","undefined","muxParams","width","sourceDefs","media","height","fit_mode","propTypes","PropTypes","Object","values","isRequired","getScaleClassname","size","PlayIconDesign","className","cx","children","Icon","source","VideoMinor","color","logDebugWarning","leadingMessage","additionalData","messageParts","concat","JSON","stringify","filter","part","natsLogWarning","join","PreviewLinkFL","alt","PreviewLinkYT","_ref2","url","href","target","title","onClick","e","stopPropagation","PreviewLinkHudl","_ref3","PreviewLinkVimeo","_ref4","style","marginBottom","Preview","_ref5","duration","filmTypeEnum","progress","_jsxs","_Fragment","VideoDuration","Id","Label","VideoProgress","timeCode","UnconfiguredVideoPlayer","_ref6","playVideo","pauseVideo","showTitle","showFooter","logInteractions","autoplay","usePreview","playsInline","startAt","video","onInit","onPlay","onInitialPlay","onProgress","onEnd","interactionContext","posterURL","minHeight","optimizedThumbnailProps","useUpdateVideoDuration","player","useRef","showPreview","setShowPreview","useState","playing","setPlaying","startedWithClick","setStartedWithClick","init","setInit","initialReady","setInitialReady","ref","inView","useInView","threshold","triggerOnce","mutateAsync","updateVideoDuration","isFLVideo","Url","indexOf","isHudlVideo","isYoutubeVideo","isVimeoVideo","handleInit","logInit","Guid","GoogleAnalytics","label","useEffect","time","getTickTime","logDestroy","logImpression","videoEl","current","getInternalPlayer","mux","data","env_key","window","flMuxEnvKey","player_name","player_init_time","Date","now","video_id","MediaFileUrl","light","ThumbnailUrl","config","youtube","playerVars","playsinline","modestbranding","rel","iv_load_policy","file","attributes","preload","poster","hlsVersion","ReactPlayer","controls","muted","volume","onReady","logReady","Duration","seekTo","onStart","getCurrentTime","getDuration","logPlay","onPause","stopTime","getBestPauseTime","guid","tickTime","PROGRESS_INTERVAL","logPause","onEnded","logEnd","onError","error","_error$target","errorCode","code","logError","setTickTime","playedSeconds","onSeek","onDuration","videoId","VideoId","Math","round","progressInterval","playIcon","Title","FilmTypeEnum","Number","isFinite","videoDurationFormatter","progressWidth","floor","VideoInteractionEventTypeEnum","Unknown","Impression","Init","Ready","Error","Play","Pause","End","Destroy","UploadStart","UploadComplete","VideoInteractionContextEnum","AthleteProfile","CoachFeed","ForYouCategory","TopVideos","ForYouFeed","AthleteVideoDetails","OnboardingDiscoverAthletes","SearchResults","MarketplaceEvaluation","AthletePortalAnnouncementDetail","AthletePortalAnnouncementList","lastPlayedTime","lastTickTime","lastEvent","uploadStarts","videoApiLogInteraction","webResourceGuid","eventType","dateUtc","timeElapsed","params","WebResourceGuid","EventType","DateUtc","TimeCode","TimeElapsed","VideoInteractionContext","http","get","logInteraction","toISOString","trimmedTimeCode","toFixed","trimmedTimeElapsed","catch","console","elapsed","logUploadStart","logUploadComplete"],"sourceRoot":""}