{"version":3,"file":"index-DoyspEmF.js","sources":["../../../app/javascript/src/explore/compositions/ProductGrid/elements/PromotionCard/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/TVIcon/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/Video/elements/EndOverlay/elements/Replay/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/Video/elements/EndOverlay/elements/Visit/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/Video/elements/EndOverlay/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/Video/elements/Mute/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/elements/Video/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/lib/index.ts","../../../app/javascript/src/explore/compositions/ProductGrid/elements/TVCard/index.tsx","../../../app/javascript/src/explore/compositions/ProductGrid/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { LazyImgix } from 'src/explore/elements/LazyImgix';\nimport { IPromotion } from 'src/explore/types/shoppe';\nimport { URLHelper } from 'src/explore/services/URLHelper';\n\ninterface PromotionCardProps {\n linkParameters?: {\n [key: string]: string;\n };\n promotion: IPromotion;\n}\n\nexport const PromotionCard = ({ linkParameters, promotion }: PromotionCardProps ) => {\n const productUrl = useMemo(\n () => URLHelper.href( promotion.link, linkParameters ),\n [ linkParameters, promotion.link ]\n );\n\n return (\n <a className=\"d-block fs-0\" href={productUrl}>\n <LazyImgix\n alt={promotion.alt}\n className=\"w-100\"\n src={promotion.image}\n imgixParams={{ ar: '1:1.25' }}\n sizes=\"(min-width: 768px) 25vw, (min-width: 576px) 33vw, 100vw\"\n />\n </a>\n );\n};\n","import React from 'react';\nimport cls from 'classnames';\n\nimport { SvgUse } from 'src/shoppe/elements/SvgUse';\n\nimport styles from './index.module.sass';\n\nexport const TVIcon = () => (\n <SvgUse\n ariaLabel=\"Featured on GBTV\"\n className={cls( styles.icon, 'position-absolute text-white' )}\n name=\"icon-gbtv\"\n />\n);\n","import React, { useEffect, useRef } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUndo } from '@fortawesome/pro-solid-svg-icons';\n\nimport { track, IEventData, IEventSource } from 'src/shoppe/services/JWPlayer';\nimport { useJWContext } from 'src/shoppe/hooks/useJWContext';\n\nimport styles from './index.module.sass';\n\ninterface ReplayProps {\n eventData: IEventData;\n startTime?: number;\n onClick: () => void;\n}\n\nexport const Replay = ({ eventData, startTime, onClick }: ReplayProps ) => {\n const { getPlayer } = useJWContext();\n\n const buttonRef = useRef<HTMLButtonElement>( null );\n\n useEffect(() => {\n const button = buttonRef.current;\n const handleClick = ( event: MouseEvent ) => {\n event.preventDefault();\n event.stopPropagation(); // only works in listener vs. React event\n\n getPlayer()?.seek( startTime );\n getPlayer()?.play();\n\n onClick();\n track.click( event.target, getPlayer()?.id, IEventSource.REPLAY, eventData );\n };\n\n if ( button ) {\n button.addEventListener( 'click', handleClick );\n }\n return () => {\n button.removeEventListener( 'click', handleClick );\n };\n }, [ eventData, getPlayer, startTime, onClick ]);\n\n return (\n <button\n aria-label=\"Replay\"\n className={`${styles.button} padding-0 border-0 mt-3 mt-md-6 bg-transparent text-white fs-5 spec__tv-card-replay`}\n ref={buttonRef}\n type=\"button\"\n >\n Replay\n <FontAwesomeIcon className=\"ml-2\" icon={faUndo} />\n </button>\n );\n};\n","import React from 'react';\n\nimport styles from './index.module.sass';\n\ninterface VisitProps {\n link: string;\n}\n\nexport const Visit = ({ link }: VisitProps ) => (\n <a className={`${styles.link} btn btn-outline-light py-3 mt-7 md-sm-0`} href={link}>\n Watch + Buy\n </a>\n);\n","import React from 'react';\nimport cls from 'classnames';\n\nimport { IEventData } from 'src/shoppe/services/JWPlayer';\n\nimport { Replay } from './elements/Replay';\nimport { Visit } from './elements/Visit';\n\nimport styles from './index.module.sass';\n\ninterface EndOverlayProps {\n eventData: IEventData;\n productLink: string;\n startTime?: number;\n visible: boolean;\n onClickReplay: () => void;\n}\n\nexport const EndOverlay = ({\n eventData,\n productLink,\n startTime,\n visible,\n onClickReplay,\n}: EndOverlayProps ) => (\n <div\n className={cls(\n styles.container,\n 'position-absolute d-flex flex-column justify-content-center align-items-center px-4 font-weight-bold ff-cabin',\n {\n [styles.visible]: visible,\n }\n )}\n >\n <Visit link={productLink} />\n <Replay eventData={eventData} startTime={startTime} onClick={onClickReplay} />\n </div>\n);\n","import React, { useEffect, useRef, useState } from 'react';\nimport cls from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faVolume, faVolumeMute } from '@fortawesome/pro-regular-svg-icons';\n\nimport { track, IEventData, IEventSource } from 'src/shoppe/services/JWPlayer';\nimport { useJWContext } from 'src/shoppe/hooks/useJWContext';\n\nimport styles from './index.module.sass';\n\ninterface MuteProps {\n activate: boolean;\n eventData: IEventData;\n hide: boolean;\n}\n\nexport const Mute = ({ activate, eventData, hide }: MuteProps ) => {\n const { getPlayer } = useJWContext();\n const [ active, setActive ] = useState( getPlayer()?.getMute());\n const [ choice, setChoice ] = useState( true );\n\n // sync local mute state with setting on player\n useEffect(() => {\n const updateMute = ( e: { mute: boolean }) => {\n setActive( e.mute );\n };\n getPlayer()?.on( 'mute', updateMute );\n\n return () => getPlayer()?.off( 'mute', updateMute );\n }, [ getPlayer ]);\n\n // override user's mute preference appropriately (inactivity)\n useEffect(() => {\n if ( activate ) {\n getPlayer()?.setMute( true );\n } else {\n getPlayer()?.setMute( choice );\n }\n }, [ activate, choice, getPlayer ]);\n\n const buttonRef = useRef<HTMLButtonElement>( null );\n\n useEffect(() => {\n const button = buttonRef.current;\n const handleClick = ( event: MouseEvent ) => {\n event.preventDefault();\n event.stopPropagation(); // only works in listener vs. React event\n\n setChoice( !active );\n getPlayer()?.setMute( !active );\n\n track.click( event.target, getPlayer()?.id, IEventSource.MUTE, eventData );\n };\n\n if ( button ) {\n button.addEventListener( 'click', handleClick );\n }\n return () => {\n button.removeEventListener( 'click', handleClick );\n };\n }, [ active, buttonRef, eventData, getPlayer ]);\n\n return (\n <button\n className={cls(\n styles.button,\n 'position-absolute d-none p-2 p-lg-0 border-0 bg-transparent spec__tv-card-mute',\n {\n [styles.hidden]: hide,\n }\n )}\n ref={buttonRef}\n type=\"button\"\n >\n <FontAwesomeIcon\n className=\"text-white fs-8 fs-lg-10\"\n icon={active ? faVolumeMute : faVolume}\n />\n </button>\n );\n};\n","import React, { useEffect } from 'react';\nimport cls from 'classnames';\n\nimport { JWCustomElem } from 'src/shoppe/elements/JWCustomElem';\nimport { JWPlayer } from 'src/shoppe/elements/JWPlayer';\nimport { IEventData } from 'src/shoppe/services/JWPlayer';\nimport { LazyImgix } from 'src/explore/elements/LazyImgix';\n\nimport { EndOverlay } from './elements/EndOverlay';\nimport { Mute } from './elements/Mute';\n\nimport styles from './index.module.sass';\n\ninterface VideoProps {\n complete: boolean;\n eventData: IEventData;\n loaded: boolean;\n looping: boolean;\n mountVideo: boolean;\n playerID: string;\n productLink: string;\n productName: string;\n startTime?: number;\n videoID: string;\n onClickReplay: () => void;\n onError: ( obj: any ) => void;\n onLoad?: () => void;\n onMount?: () => void;\n onReady: () => void;\n onTime: ( event: { currentTime: number; duration: number }) => void;\n}\n\nexport const Video = ({\n complete,\n eventData,\n loaded,\n looping,\n mountVideo,\n playerID,\n productLink,\n productName,\n startTime,\n videoID,\n onClickReplay,\n onError,\n onLoad,\n onMount,\n onReady,\n onTime,\n}: VideoProps ) => {\n useEffect(() => {\n if ( onMount ) {\n onMount();\n }\n }, []);\n\n return (\n <div\n className={cls( styles.container, 'position-relative', {\n [styles.loaded]: loaded,\n })}\n >\n <LazyImgix\n className={`${styles.image} position-absolute w-100`}\n src={`https://cdn.jwplayer.com/v2/media/${videoID}/poster.jpg`}\n alt={productName}\n imgixParams={{ ar: '4:5' }}\n sizes=\"(min-width: 768px) 25vw, (min-width: 576px) 33vw, 100vw\"\n />\n\n {mountVideo && (\n <JWPlayer\n aspectRatio=\"4:5\"\n className={cls( styles.player, 'position-absolute w-100' )}\n customProps={{\n controls: false,\n stretching: 'fill',\n }}\n file={`https://cdn.jwplayer.com/manifests/${videoID}.m3u8`}\n isMuted\n playerId={playerID}\n onAutoStartNotAllowed={onError}\n onError={onError}\n onReady={onReady}\n onSetupError={onError}\n onTime={onTime}\n onVideoLoad={() => {\n if ( onLoad ) {\n onLoad();\n }\n }}\n >\n <JWCustomElem id={`${playerID}-overlay-root`}>\n <>\n <EndOverlay\n eventData={eventData}\n productLink={productLink}\n startTime={startTime}\n visible={complete}\n onClickReplay={onClickReplay}\n />\n <Mute activate={looping} eventData={eventData} hide={complete} />\n </>\n </JWCustomElem>\n </JWPlayer>\n )}\n </div>\n );\n};\n","const LOOP_DURATION: number = 5;\n\nexport const handleTimeCallback =\n (\n smallBreakpoint: boolean,\n player: any,\n loop: boolean,\n videoStartTime: number,\n portraitClipPlayDuration: number,\n setComplete: ( state: boolean ) => void,\n onComplete: () => void\n ) =>\n ( video: { currentTime: number; duration: number }) => {\n // looping\n if ( smallBreakpoint ) {\n if ( loop && video.currentTime >= Math.min( videoStartTime + LOOP_DURATION, video.duration )) {\n player?.seek( videoStartTime );\n }\n }\n\n // end\n if (\n Math.floor( video.currentTime * 10 ) >=\n Math.floor(\n ( portraitClipPlayDuration ? videoStartTime + portraitClipPlayDuration : video.duration ) * 10\n )\n ) {\n onComplete();\n } else {\n setComplete( false );\n }\n };\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ProductSummary } from '@goldbely/explore-component-library';\nimport { pickBy } from 'lodash';\n\nimport { useRoutes } from 'src/explore/hooks/useRoutes';\nimport BreakpointsService from 'src/explore/services/breakpoints';\nimport { getSiteHeader } from 'src/explore/services/getSiteHeader';\nimport { IProduct } from 'src/explore/types/shoppe';\nimport { getJWPlayer, IEventData, IEventSource, track } from 'src/shoppe/services/JWPlayer';\n\nimport { TVIcon } from './elements/TVIcon';\nimport { Video } from './elements/Video';\nimport { handleTimeCallback } from './lib';\n\nimport styles from './index.module.sass';\n\ninterface CardProps {\n className?: string;\n linkParameters?: {\n [key: string]: string;\n };\n product: IProduct;\n onLoad?: () => void;\n onMount?: () => void;\n}\n\nexport const TVCard = ({ className, linkParameters, product, onLoad, onMount }: CardProps ) => {\n const [ complete, _setComplete ] = useState<boolean>( false );\n const [ hover, _setHover ] = useState<boolean>( false );\n const [ loaded, setLoaded ] = useState<boolean>( false );\n const [ loop, setLoop ] = useState<boolean>( BreakpointsService.appliesTo( 'sm' ));\n const [ mountVideo, _setMountVideo ] = useState<boolean>( false );\n const [ player, _setPlayer ] = useState( null );\n const [ error, _setError ] = useState<any>( null );\n const [ rewatchCount, setRewatchCount ] = useState<number>( 0 );\n const [ source, setSource ] = useState<IEventSource>( null );\n const [ watchCount, _setWatchCount ] = useState<number>( 0 );\n\n const completeRef = useRef( complete );\n const setComplete = ( state: boolean ) => {\n completeRef.current = state;\n _setComplete( state );\n };\n const errorRef = useRef( error );\n const setError = ( e: any ) => {\n errorRef.current = e;\n _setError( e );\n };\n const hoverRef = useRef( hover );\n const setHover = ( state: boolean ) => {\n hoverRef.current = state;\n _setHover( state );\n };\n const mountVideoRef = useRef( mountVideo );\n const setMountVideo = ( state: boolean ) => {\n mountVideoRef.current = state;\n _setMountVideo( state );\n };\n const playerRef = useRef( player );\n const setPlayer = ( state: any ) => {\n playerRef.current = state;\n _setPlayer( state );\n };\n const watchCountRef = useRef( watchCount );\n const setWatchCount = ( state: number ) => {\n watchCountRef.current = state;\n _setWatchCount( state );\n };\n\n const {\n permalink,\n tvVideo: { clipMediaId, portraitMediaId },\n } = product;\n const playerID = `tv-card-${permalink}`;\n\n let videoStartTime = 0;\n let videoDuration: number;\n if ( !clipMediaId ) {\n videoStartTime = product.tvVideo.portraitClipStartTime || 0;\n videoDuration = product.tvVideo.portraitClipPlayDuration;\n }\n\n const handleReady = () => {\n const plyr = getJWPlayer( playerID );\n plyr?.seek( videoStartTime );\n setPlayer( plyr );\n };\n\n const handleVideoLoad = () => {\n setLoaded( true );\n\n if ( onLoad ) {\n onLoad();\n }\n };\n\n const eventData: IEventData = useMemo(\n () => ({\n ...linkParameters,\n merchantId: Number( product.merchant.id ),\n numRewatched: rewatchCount,\n productId: Number( product.id ),\n type: clipMediaId ? 'clip' : 'full video',\n videoId: Number( product.tvVideo.id ),\n }),\n [ clipMediaId, linkParameters, product, rewatchCount ]\n );\n\n const handleClick = ( event: React.MouseEvent | React.KeyboardEvent<HTMLAnchorElement> ) => {\n track.click( event.target, playerID, IEventSource.SEARCH_CARD, eventData );\n };\n\n const handleError = ( e: any ) => {\n setError( e );\n };\n\n const handleKeyDown = ( event: React.KeyboardEvent<HTMLAnchorElement> ) => {\n if ( event.key === 'Enter' || event.key === ' ' ) {\n handleClick( event );\n }\n };\n\n const handleComplete = () => {\n if ( !complete ) {\n setComplete( true );\n setWatchCount( watchCount + 1 );\n\n track.watched(\n player?.id,\n Math.round(( player?.getPosition() / player?.getDuration() || 0 ) * 100 ),\n source,\n eventData\n );\n track.stopped( playerID, source, eventData );\n }\n };\n\n const handleTime = handleTimeCallback(\n BreakpointsService.appliesTo( 'sm' ),\n player,\n loop,\n videoStartTime,\n videoDuration,\n setComplete,\n handleComplete\n );\n\n const handleMouseEnter = () => {\n setHover( true );\n };\n\n const handleMouseLeave = () => {\n setHover( false );\n };\n\n const elementRef = useRef( null );\n\n // play state\n useEffect(() => {\n const handlePlayState = ( setDesktopPlayState?: boolean ) => {\n if ( !errorRef.current ) {\n const element = elementRef.current;\n\n if ( !completeRef.current ) {\n if ( element ) {\n const scrollTop = window.scrollY;\n const scrollBottom = scrollTop + window.innerHeight;\n\n const cardTop = window.pageYOffset + element.getBoundingClientRect().top;\n\n if (\n !mountVideoRef.current &&\n cardTop + element.offsetHeight >= scrollTop - element.offsetHeight &&\n cardTop <= scrollBottom + element.offsetHeight\n ) {\n setMountVideo( true );\n }\n\n if (\n cardTop + element.offsetWidth >= scrollTop + getSiteHeader.height() &&\n cardTop + element.offsetWidth * 0.25 <= scrollBottom\n ) {\n if ( playerRef.current && playerRef.current.getState() !== 'playing' ) {\n playerRef.current.play();\n\n setRewatchCount( watchCountRef.current );\n setSource( IEventSource.AUTOPLAY );\n\n track.played( playerID, IEventSource.AUTOPLAY, eventData );\n }\n } else {\n playerRef.current?.pause();\n }\n }\n\n if ( setDesktopPlayState ) {\n if ( hoverRef.current ) {\n setRewatchCount( watchCountRef.current );\n setSource( IEventSource.INTERACTION );\n\n track.played( playerID, IEventSource.INTERACTION, eventData );\n }\n\n setLoop( !hoverRef.current );\n }\n }\n }\n };\n\n handlePlayState( true );\n window.addEventListener( 'resize', () => handlePlayState( true ));\n window.addEventListener( 'scroll', () => handlePlayState());\n\n return () => {\n window.removeEventListener( 'resize', () => handlePlayState( true ));\n window.removeEventListener( 'scroll', () => handlePlayState());\n };\n }, [ eventData, hover, playerID ]);\n\n useEffect(() => {\n const handleUnmount = () => {\n if ( !loop && player?.getState() === 'playing' ) {\n track.stopped( playerID, source, eventData );\n }\n };\n\n window.addEventListener( 'beforeunload', handleUnmount );\n return () => {\n window.removeEventListener( 'beforeunload', handleUnmount );\n };\n }, [ eventData, loop, player, playerID, source ]);\n\n useEffect(() => {\n if ( error ) {\n window.ahoy.track(\n '$videoError',\n Object.assign( error, { video_id: Number( product.tvVideo.id ) || null })\n );\n }\n }, [ error, product.tvVideo.id ]);\n\n const routes = useRoutes();\n const link = useMemo(\n () =>\n routes.product(\n product.merchant.permalink.replace( '/restaurants', '' ).replace( '/', '' ),\n product.permalink,\n pickBy( linkParameters )\n ),\n [ linkParameters, product, routes ]\n );\n\n return error ? null : (\n <li className={className}>\n <div\n className={`${styles.container} position-relative d-block text-dark text-decoration-none fs-3 fs-lg-4 spec__tv-card`}\n ref={elementRef}\n role=\"button\"\n tabIndex={0}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <a\n className={`${styles.link} position-absolute`}\n href={link}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {( clipMediaId || portraitMediaId ) && (\n <Video\n complete={complete}\n eventData={eventData}\n loaded={loaded}\n looping={loop}\n mountVideo={mountVideo}\n playerID={playerID}\n productLink={link}\n productName={product.effectiveName}\n startTime={videoStartTime}\n videoID={clipMediaId || portraitMediaId}\n onClickReplay={() => {\n setRewatchCount( watchCount );\n setSource( IEventSource.INTERACTION );\n\n track.played( playerID, IEventSource.INTERACTION, {\n ...eventData,\n numRewatched: watchCount,\n });\n }}\n onError={handleError}\n onLoad={handleVideoLoad}\n onMount={onMount}\n onReady={handleReady}\n onTime={handleTime}\n />\n )}\n </a>\n\n <TVIcon />\n\n <div className=\"pt-4 fs-3 fs-lg-4\">\n <ProductSummary\n linkParameters={linkParameters}\n product={product as any} // TODO: cleanup IProduct\n showLocation\n />\n </div>\n </div>\n </li>\n );\n};\n","import React, { ReactNode } from 'react';\nimport cls from 'classnames';\n\nimport { IProduct, IPromotion } from 'src/explore/types/shoppe';\nimport { useShopConfig } from 'src/explore/hooks/useShopConfig';\n\nimport { CardFactory } from './services/CardFactory';\nimport { PromotionCard } from './elements/PromotionCard';\nimport { TVCard } from './elements/TVCard';\n\nimport styles from './index.module.sass';\n\nconst factory = new CardFactory();\n\ninterface ProductGridProps {\n across?: number;\n children?: ReactNode;\n clickRef?: string;\n dumpVideos?: boolean;\n hideLove?: boolean;\n hideMerchant?: boolean;\n noWrap?: boolean;\n products?: Array<IProduct | IPromotion>;\n recommId?: string;\n searchId?: string;\n size?: 'small';\n template: string;\n withTvCards?: boolean;\n onBellowProductContentRender?: ( product: IProduct ) => ReactNode;\n onLoadVideo?: () => void;\n onMountVideo?: () => void;\n onProductClassName?: ( product: IProduct ) => string;\n}\n\nconst ProductGrid = ({\n across = 4,\n children,\n clickRef,\n dumpVideos,\n hideLove,\n hideMerchant,\n noWrap,\n products,\n recommId,\n searchId,\n size,\n template,\n withTvCards,\n onBellowProductContentRender,\n onLoadVideo,\n onMountVideo,\n onProductClassName,\n}: ProductGridProps ) => {\n const config = useShopConfig();\n\n if ( products?.length > 0 ) {\n const ProductCard = factory.create( template );\n\n return (\n <ul\n className={cls( 'd-flex mt-1 spec__collection-products', {\n 'flex-wrap': !noWrap,\n })}\n >\n {products.map(( item ) => {\n if ( 'image' in item ) {\n return (\n <li\n className={cls(\n styles.item,\n 'flex-shrink-0 pt-1 px-1 pb-9 px-md-2',\n `spec__spotlight-${item.link.split( '/' ).pop()}`,\n {\n [styles[`item--${across}-across`]]: !!across,\n }\n )}\n key={item.position}\n >\n <PromotionCard\n linkParameters={{\n ref: clickRef,\n recomm_id: recommId,\n search_id: searchId,\n }}\n promotion={item}\n />\n </li>\n );\n }\n\n if (\n withTvCards &&\n item.showGbVideo &&\n item.tvVideo &&\n ( item.tvVideo.clipMediaId || item.tvVideo.portraitMediaId )\n ) {\n return dumpVideos ? null : (\n <TVCard\n className={cls( styles.item, 'flex-shrink-0 pt-1 px-1 pb-9 px-md-2', {\n [styles[`item--${across}-across`]]: !!across,\n })}\n key={`${item.id}-tv`}\n linkParameters={{\n ref: clickRef,\n recomm_id: recommId,\n search_id: searchId,\n }}\n product={item}\n onLoad={onLoadVideo}\n onMount={onMountVideo}\n />\n );\n }\n\n return (\n <ProductCard\n across={across}\n hideLove={hideLove || config.isWhitelabel}\n hideMerchant={hideMerchant}\n isWhitelabel={config.isWhitelabel}\n key={item.id}\n linkParameters={{\n ref: clickRef,\n recomm_id: recommId,\n search_id: searchId,\n }}\n product={item}\n recommId={recommId}\n size={size}\n onBellowContentRender={onBellowProductContentRender}\n onClassName={onProductClassName}\n />\n );\n })}\n </ul>\n );\n }\n\n return children || null;\n};\n\nexport default ProductGrid;\n"],"names":["PromotionCard","linkParameters","promotion","productUrl","useMemo","URLHelper","React","LazyImgix","TVIcon","SvgUse","cls","styles","Replay","eventData","startTime","onClick","getPlayer","useJWContext","buttonRef","useRef","useEffect","button","handleClick","event","_a","_b","track","_c","IEventSource","FontAwesomeIcon","faUndo","Visit","link","EndOverlay","productLink","visible","onClickReplay","Mute","activate","hide","active","setActive","useState","choice","setChoice","updateMute","e","faVolumeMute","faVolume","Video","complete","loaded","looping","mountVideo","playerID","productName","videoID","onError","onLoad","onMount","onReady","onTime","JWPlayer","JWCustomElem","LOOP_DURATION","handleTimeCallback","smallBreakpoint","player","loop","videoStartTime","portraitClipPlayDuration","setComplete","onComplete","video","TVCard","className","product","_setComplete","hover","_setHover","setLoaded","setLoop","BreakpointsService","_setMountVideo","_setPlayer","error","_setError","rewatchCount","setRewatchCount","source","setSource","watchCount","_setWatchCount","completeRef","state","errorRef","setError","hoverRef","setHover","mountVideoRef","setMountVideo","playerRef","setPlayer","watchCountRef","setWatchCount","permalink","clipMediaId","portraitMediaId","videoDuration","handleReady","plyr","getJWPlayer","handleVideoLoad","handleError","handleKeyDown","handleComplete","handleTime","handleMouseEnter","handleMouseLeave","elementRef","handlePlayState","setDesktopPlayState","element","scrollTop","scrollBottom","cardTop","getSiteHeader","handleUnmount","routes","useRoutes","pickBy","ProductSummary","factory","CardFactory","ProductGrid","across","children","clickRef","dumpVideos","hideLove","hideMerchant","noWrap","products","recommId","searchId","size","template","withTvCards","onBellowProductContentRender","onLoadVideo","onMountVideo","onProductClassName","config","useShopConfig","ProductCard","item"],"mappings":"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"}