{"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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"}