@clickview/lite 0.49.6 → 0.49.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/1285-db42ee1c76-lite.chunk.js +2 -0
  3. package/dist/scripts/1285-db42ee1c76-lite.chunk.js.map +1 -0
  4. package/dist/scripts/1863-bb98f2e617-lite.chunk.js +2 -0
  5. package/dist/scripts/1863-bb98f2e617-lite.chunk.js.map +1 -0
  6. package/dist/scripts/{2355-78b307e130-lite.chunk.js → 2355-b2345e9449-lite.chunk.js} +2 -2
  7. package/dist/scripts/{2355-78b307e130-lite.chunk.js.map → 2355-b2345e9449-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/6741-dadd4903a8-lite.chunk.js +3 -0
  9. package/dist/scripts/6741-dadd4903a8-lite.chunk.js.map +1 -0
  10. package/dist/scripts/7301-49c2341e97-lite.chunk.js +2 -0
  11. package/dist/scripts/7301-49c2341e97-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{7855-cbf70d4453-lite.chunk.js → 7855-76f000d339-lite.chunk.js} +2 -2
  13. package/dist/scripts/7855-76f000d339-lite.chunk.js.map +1 -0
  14. package/dist/scripts/8243-e9d7716ffe-lite.chunk.js +2 -0
  15. package/dist/scripts/8243-e9d7716ffe-lite.chunk.js.map +1 -0
  16. package/dist/scripts/{bundle-bcc136a91c.min.js → bundle-d3e8783756.min.js} +3 -3
  17. package/dist/scripts/bundle-d3e8783756.min.js.map +1 -0
  18. package/package.json +1 -1
  19. package/dist/scripts/1285-93d485e012-lite.chunk.js +0 -2
  20. package/dist/scripts/1285-93d485e012-lite.chunk.js.map +0 -1
  21. package/dist/scripts/1863-5502813c32-lite.chunk.js +0 -2
  22. package/dist/scripts/1863-5502813c32-lite.chunk.js.map +0 -1
  23. package/dist/scripts/6741-b54fd85e06-lite.chunk.js +0 -3
  24. package/dist/scripts/6741-b54fd85e06-lite.chunk.js.map +0 -1
  25. package/dist/scripts/7301-98679776b7-lite.chunk.js +0 -2
  26. package/dist/scripts/7301-98679776b7-lite.chunk.js.map +0 -1
  27. package/dist/scripts/7855-cbf70d4453-lite.chunk.js.map +0 -1
  28. package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js +0 -2
  29. package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js.map +0 -1
  30. package/dist/scripts/bundle-bcc136a91c.min.js.map +0 -1
  31. /package/dist/scripts/{6741-b54fd85e06-lite.chunk.js.LICENSE.txt → 6741-dadd4903a8-lite.chunk.js.LICENSE.txt} +0 -0
  32. /package/dist/scripts/{bundle-bcc136a91c.min.js.LICENSE.txt → bundle-d3e8783756.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2355-78b307e130-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/audience-label/AudienceLabel.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/badges/BadgeListContainer.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/check-mark-button/check-mark-button.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/check-mark-button/CheckMarkButton.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/mask/mask.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/mask/Mask.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-text/thumbnail-text.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-text/ThumbnailText.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/favourite-button/favourite-button.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/favourite-button/FavouriteButton.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/videos/VideoWatchProgressBar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/video-thumbnail-bottom-bar.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/VideoThumbnailBottomBar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/padlock/thumbnail-padlock.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-company/thumbnail-company-logo.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-type-badge/VideoTypeBadge.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/expandable/expandable-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/expandable/ExpandableVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-badges/video-thumbnail-badges.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-badges/VideoThumbnailBadges.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/popout/popout-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/popout/PopoutVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/video-thumbnail-actions.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/VideoThumbnailActions.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/static/static-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/static/StaticVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/VideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/type-badge/type-badge.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/type-badge/TypeBadge.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/interactives/InteractivesTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/resources/ResourcesTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/tag/video-guidance-tag.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/tag/VideoGuidanceTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-list/components/restriction-padlock/RestrictionPadlock.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/context/player-context/components/global-player-consumer.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/context/player-context/components/GlobalPlayerConsumer.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/enums/ThumbnailTextPosition.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/interfaces/PlayPageAnchor.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Audience } from 'libs/shared/interfaces';\n\nimport styles from './audience-label.scss';\n\ntype AudienceBorderColour = 'dark' | 'white';\n\ninterface AudienceLabelProps {\n audience: Audience;\n border: AudienceBorderColour;\n className?: string;\n}\n\nexport function AudienceLabel(props: AudienceLabelProps): JSX.Element {\n if (!props.audience)\n return <></>;\n\n // Note: the audience-label class is applied so that parent components can override styling, and Online can style this component\n return (\n <div\n className={`audience-label border rounded-pill d-inline-block px-2 text-nowrap \n ${'border-' + props.border} ${props.className ? props.className : ''}`}\n >\n {props.audience.name}\n </div>\n );\n}\n\ninterface AudienceLabelListProps {\n audiences: Audience[];\n border: AudienceBorderColour;\n}\n\nexport function AudienceLabelList(props: AudienceLabelListProps): JSX.Element {\n if (!props.audiences || !props.audiences.length)\n return <></>;\n\n return (\n <>\n {props.audiences.map((a, idx) => (\n <span key={idx} className={styles.audienceLabelListItem}>\n <AudienceLabel audience={a} border={props.border} />\n </span>\n ))}\n </>\n );\n}","import * as React from 'react';\n\nimport styles from './badge.scss';\n\ninterface BadgeListContainerProps {\n className?: string;\n}\n\nexport function BadgeListContainer(props: React.PropsWithChildren<BadgeListContainerProps>): JSX.Element {\n let className = `d-flex align-items-center badge-list ${styles.minHeight}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"unchecked\":\"bup9I\",\"outline\":\"ealw_\",\"checked\":\"A1Ov0\",\"checkMark\":\"c14lI\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DivButton } from '../div-button/DivButton';\n\nimport styles from './check-mark-button.scss';\n\nexport enum CheckMarkStatus {\n None = 'None',\n Complete = 'Complete',\n Incomplete = 'Incomplete'\n}\n\nexport type SetCheckMarkStatusFunc = (status: CheckMarkStatus) => Promise<void>;\n\ninterface CheckMarkButtonProps {\n setStatus: SetCheckMarkStatusFunc;\n status: CheckMarkStatus;\n style?: 'outline' | 'filled';\n className?: string;\n disabled?: boolean;\n}\n\nCheckMarkButton.defaultProps = {\n style: 'filled'\n};\n\nexport function CheckMarkButton(props: CheckMarkButtonProps): JSX.Element {\n // Use local state so that changes are reflected immediately.\n const [ isComplete, setIsComplete ] = React.useState(props.status === CheckMarkStatus.Complete);\n\n React.useEffect(() => {\n setIsComplete(props.status === CheckMarkStatus.Complete);\n }, [props.status]);\n\n let className = `cursor-pointer rounded-circle ${isComplete ? styles.checked : styles.unchecked}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (props.style === 'outline')\n className += ` ${styles.outline}`;\n\n function shouldRender(): boolean {\n return (\n !!props.status &&\n props.status !== CheckMarkStatus.None &&\n FunctionHelper.isFunction(props.setStatus)\n );\n }\n\n function onClick(): void {\n const shouldComplete = !isComplete;\n\n setIsComplete(shouldComplete);\n\n const newStatus = shouldComplete ? CheckMarkStatus.Complete : CheckMarkStatus.Incomplete;\n\n props.setStatus(newStatus).catch(() => {\n setIsComplete(!shouldComplete);\n });\n }\n\n if (!shouldRender())\n return <></>;\n\n return (\n <DivButton className={className} onClick={onClick} disabled={props.disabled}>\n <SvgContainer\n svgName={cvSvgLibrary.Check}\n className={`svg-container ${styles.checkMark}`}\n />\n </DivButton>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"qpc7L\",\"small\":\"L8Oxs\",\"video\":\"b8kJW\",\"playlist\":\"eo2p2\",\"maskContainer\":\"lpwag\"};","import * as React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './mask.scss';\n\nexport enum MaskType {\n Video,\n Playlist,\n Series\n}\n\nfunction getClassByType(type: MaskType): string {\n if (type === MaskType.Video)\n return styles.video;\n\n if (type === MaskType.Playlist)\n return styles.playlist;\n\n return '';\n}\n\nfunction getSvgType(type: MaskType): string {\n if (type === MaskType.Video)\n return cvSvgLibrary.PlayCircle;\n\n return '';\n}\n\ntype MaskSize = 'sm' | 'md';\n\ninterface MaskProps {\n type: MaskType;\n size?: MaskSize;\n}\n\nMask.defaults = {\n size: 'md'\n};\n\nexport function Mask(props: MaskProps): JSX.Element {\n const { type, size } = props;\n\n const typeClass = getClassByType(type);\n const svgType = getSvgType(type);\n\n return (\n <div className={`${styles.maskContainer} ${size === 'sm' ? styles.small : ''}`}>\n <div className={ styles.mask }></div>\n <SvgContainer svgName={svgType} className={ typeClass } />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"r70GR\",\"titleContainer\":\"rULXI\",\"seriesTitleBox\":\"h9k1p\",\"badgeContainer\":\"QaDDX\",\"audienceBadge\":\"hvsne\"};","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PopoutVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-text.scss';\n\ntype VideoThumbnailTextProps = Pick<PopoutVideoThumbnailProps, 'video'|'appLink'|'subTextAppLink'|'yearGroups'|'subTextType'>\n\nexport function ThumbnailText(props: VideoThumbnailTextProps): JSX.Element {\n const { video, appLink, subTextAppLink } = props;\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n return (\n <div className={`mt-2 ${styles.container}`}>\n <div className={`d-flex flex-column ${styles.titleContainer}`}>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={props.subTextType}\n className={`text-truncate ${styles.seriesTitleBox}`}\n video={video}\n appLink={subTextAppLink}\n analyticsOptions={{ location: LocationContext.VideoThumbnail }}\n />\n )}\n \n <AppLink className='h6 text-reset clamp-2 align-middle' appLink={canNavigate ? appLink : null}>\n {video.name}\n <RestrictionPadlock\n video={props.video}\n yearGroups={props.yearGroups}\n size='sm'\n />\n </AppLink>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"favourited\":\"t0svX\",\"favouriteButton\":\"CFRo3\",\"heart\":\"ZMMQu\",\"heartOutline\":\"truFo\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CanFavouriteFunc, FavouriteFunc, VideoTypes } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './favourite-button.scss';\n\nconst namespace = 'shared.favouriteButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FavouriteButtonProps {\n video: VideoTypes;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n className?: string;\n analyticsData?: HashObject,\n analyticsOptions?: AnalyticsOptions\n}\n\nexport function FavouriteButton(props: FavouriteButtonProps): JSX.Element {\n const alerts = useAlerts();\n\n const initialState = FavouriteHelper.isFavouritedByCurrentUser(props.video);\n\n // Use local state so that changes are reflected immediately.\n const [ isFavourite, setIsFavourite ] = React.useState(initialState);\n\n React.useEffect(() => {\n setIsFavourite(initialState);\n }, [initialState]);\n\n const flexClasses = 'd-flex align-items-center justify-content-center';\n let className = `${flexClasses} cursor-pointer ${styles.favouriteButton} ${isFavourite ? styles.favourited : ''}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n function onClick(): void {\n const shouldFavourite = !isFavourite;\n\n function onError(): void {\n function getErrorPhraseKey(): string {\n if (VideoHelper.isClip(props.video))\n return shouldFavourite ? 'favouriteClipError' : 'unfavouriteClipError';\n\n if (VideoHelper.isInteractive(props.video))\n return shouldFavourite ? 'favouriteInteractiveError' : 'unfavouriteInteractiveError';\n\n return shouldFavourite ? 'favouriteVideoError' : 'unfavouriteVideoError';\n }\n\n alerts.error(getPhrase(getErrorPhraseKey()));\n setIsFavourite(!shouldFavourite);\n }\n\n setIsFavourite(shouldFavourite);\n props.setFavourite(props.video, shouldFavourite, null, onError, props.analyticsData, props.analyticsOptions);\n }\n\n if (!FunctionHelper.isFunction(props.setFavourite) || !FunctionHelper.isFunction(props.canFavourite))\n return <></>;\n\n // Don't render until we know the state of isFavourite\n if (!props.canFavourite(props.video))\n return <></>;\n\n return (\n <DivButton className={className} onClick={onClick}>\n {/* We have the two svgs because they get swapped out on hover by the styles */}\n <SvgContainer\n svgName={cvSvgLibrary.Heart}\n className={`svg-container ${styles.heart}`}\n />\n <SvgContainer\n svgName={cvSvgLibrary.HeartOutline}\n className={`svg-container ${styles.heartOutline}`}\n />\n </DivButton>\n );\n}","import * as React from 'react';\n\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface VideoWatchProgressBarProps {\n video: Video;\n}\n\nexport function VideoWatchProgressBar(props: VideoWatchProgressBarProps): JSX.Element {\n const progress = VideoHelper.getVideoProgress(props.video);\n\n const watchPercentage = progress && props.video.duration\n && progress / props.video.duration * 100000;\n\n if (!watchPercentage)\n return <></>;\n\n return <div className='bg-primary h-100' style={{ width: `${watchPercentage}%` }} />;\n}","// extracted by mini-css-extract-plugin\nexport default {\"bottomBar\":\"YnXtZ\"};","import React from 'react';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { VideoWatchProgressBar } from './videos/VideoWatchProgressBar';\n\nimport styles from './video-thumbnail-bottom-bar.scss';\n\ninterface VideoThumbnailBottomBarProps {\n video: VideoTypes;\n}\n\nexport function VideoThumbnailBottomBar(props: VideoThumbnailBottomBarProps): JSX.Element {\n if (!VideoHelper.isVideo(props.video)) {\n return <></>;\n }\n\n return (\n <div className={styles.bottomBar}>\n <VideoWatchProgressBar video={props.video} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"padlock\":\"w4cg8\",\"sm\":\"JpIYd\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './thumbnail-padlock.scss';\n\ninterface ThumbnailPadlockProps {\n size?: VideoItemSize;\n}\n\nexport function ThumbnailPadlock(props: ThumbnailPadlockProps): JSX.Element {\n const svgSize = props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard;\n\n return (\n <div className={`${styles.padlock} ${props.size === 'sm' ? styles.sm : ''} bg-white cursor-default d-flex align-items-center justify-content-center`}>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={svgSize} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"OA9ft\",\"sm\":\"fyo2J\"};","import React from 'react';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Tooltip } from '../../tooltip/Tooltip';\n\nimport styles from './thumbnail-company-logo.scss';\n\ninterface ThumbnailCompanyLogoProps {\n companyLogoFallbackUrl: string;\n video: VideoTypes;\n size?: VideoItemSize;\n}\n\nThumbnailCompanyLogo.defaultProps = {\n size: 'md'\n};\n\nexport function ThumbnailCompanyLogo(props: ThumbnailCompanyLogoProps): JSX.Element {\n if (!VideoHelper.isVideo(props.video) || !props.companyLogoFallbackUrl)\n return <></>;\n\n const company = props.video.productionCompanies?.data?.[0];\n const url = company?.logo?.url ?? props.companyLogoFallbackUrl;\n\n if (!url)\n return <></>;\n\n return (\n <div>\n <Tooltip\n title={company?.name}\n spanHack\n >\n <div\n className={`${styles.logo} ${props.size === 'sm' ? styles.sm : ''}`}\n style={{\n backgroundImage: `url(${url})`\n }}\n />\n </Tooltip>\n </div>\n );\n}","import React from 'react';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces/VideoTypes';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { TypeBadge } from '../type-badge/TypeBadge';\n\ninterface VideoTypeBadgeProps {\n video: VideoTypes;\n size?: VideoItemSize;\n}\n\nVideoTypeBadge.default = {\n size: 'md'\n};\n\nexport function VideoTypeBadge(props: VideoTypeBadgeProps): JSX.Element {\n if (VideoHelper.isClip(props.video))\n return <TypeBadge typeId={MasterType.Clip} size={props.size} inContainer />;\n\n if (VideoHelper.isInteractive(props.video))\n return (\n <TypeBadge\n typeId={MasterType.Interactive}\n status={props.video.status}\n size={props.size}\n inContainer\n />\n );\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"overlayContainer\":\"qu3A3\",\"topLeftContainer\":\"gjhMe\",\"topRightContainer\":\"XAfZW\",\"overlay\":\"NTrtm\",\"downScale\":\"puKcM\",\"title\":\"_6FukN\",\"gradient\":\"rXzR8\",\"playIcon\":\"dndOA\",\"videoProgress\":\"yhWf4\",\"badgeContainer\":\"AtgmC\",\"clipProgress\":\"E2egN\",\"interactiveProgress\":\"WycwR\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { ThumbnailPadlock } from 'libs/shared/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock';\nimport { ThumbnailCompanyLogo } from 'libs/shared/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo';\nimport { ExpandableVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './expandable-video-thumbnail.scss';\n\nfunction getTitleClass(hovering: boolean): string {\n let className = 'mb-1';\n\n if (hovering) {\n className += styles.downScale;\n }\n \n return className;\n}\n\nexport function ExpandableVideoThumbnail(props: ExpandableVideoThumbnailProps): JSX.Element {\n const {\n video, appLink, imageOptions, setFavourite, canFavourite,\n preload, hovering, hoverToPlay, companyLogoFallbackUrl\n } = props;\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n\n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showFavouriteButton = FavouriteHelper.showFavouriteButton(props.video, hovering);\n const isVideo = VideoHelper.isVideo(video);\n\n const rating = VideoHelper.getRating(props.video);\n\n const [ thumbnailHoverRef, isThumbnailHovering ] = useHoverIntent<HTMLDivElement>({ delay: 100 });\n\n const showThumbnailPreviewVideo = isThumbnailHovering && canConsume && hoverToPlay;\n\n return (\n <Tooltip title={VideoHelper.getPrivacyReasoning(props.video)} spanHack spanHackClassName=''>\n <div className='position-relative rounded-3 overflow-hidden' ref={thumbnailHoverRef}>\n {showFavouriteButton &&\n <div className={styles.topRightContainer}>\n <FavouriteButton\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n />\n </div>\n }\n {/* top right */}\n {!canNavigate && (\n <div className={styles.topRightContainer}>\n <ThumbnailPadlock />\n </div>\n )}\n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} imageCdnUrl={props.imageCdnUrl} /> */}\n\n <VideoTypeBadge video={video} />\n\n <ThumbnailCompanyLogo video={video} companyLogoFallbackUrl={companyLogoFallbackUrl} />\n </div>\n\n <BaseImage\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={styles.gradient}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n {!!(hovering && canNavigate) && (\n <SvgContainer className={styles.playIcon} svgName={cvSvgLibrary.PlayCircle} />\n )}\n\n <ImageFallback type={ImageFallbackType.Video} />\n <div className={styles.overlayContainer}>\n <div className={styles.overlay}>\n <div className={`${getTitleClass(hovering)} ${styles.title}`}>\n {isVideo && (\n <VideoSubText\n type={props.subTextType}\n className='text-shadow clamp-1'\n video={video}\n appLink={null}\n analyticsOptions={null}\n />\n )}\n\n <span className='h6 text-reset text-shadow clamp-1'>\n {VideoHelper.getTitle(video)}\n </span>\n </div>\n\n <VideoThumbnailBottomBar video={video} />\n\n {hovering && (\n <BadgeListContainer className='mt-1'>\n {VideoHelper.isVideo(video) && (\n <>\n <Badge\n type={BadgeType.Rating}\n data={rating}\n />\n {video.hasSubtitle && (\n <span className='badge p-0'>\n <SvgContainer svgName={cvSvgLibrary.CloseCaptionBadge} />\n </span>\n )}\n <Badge\n type={BadgeType.Interactive}\n data={video.hasInteractives}\n />\n <Badge\n type={BadgeType.DurationExact}\n data={VideoHelper.getDuration(props.video)}\n />\n </>\n )}\n </BadgeListContainer>\n )}\n </div>\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n />\n }\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"badgeContainer\":\"fy9Un\",\"sm\":\"Rb0TL\"};","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Audience, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-thumbnail-badges.scss';\n\ninterface VideoThumbnailBadgesProps {\n video?: Video;\n audience?: Audience;\n hideRating?: boolean;\n hideDuration?: boolean;\n newDurationStyle?: boolean;\n size?: VideoItemSize;\n duration?: number;\n}\n\nVideoThumbnailBadges.defaultProps = {\n newDurationStyle: true,\n size: 'md'\n};\n\nexport function VideoThumbnailBadges(props: VideoThumbnailBadgesProps): JSX.Element {\n const rating = VideoHelper.getRating(props.video);\n\n const showAudience = !!props.audience && props.size !== 'sm';\n const showRating = !showAudience && !props.hideRating && !!rating && props.size !== 'sm';\n\n if (props.hideDuration && !showAudience && !showRating)\n return <></>;\n\n return (\n <BadgeListContainer className={`${styles.badgeContainer} ${props.size === 'sm' ? styles.sm : ''}`}>\n {showAudience && (\n <AudienceLabel\n audience={props.audience}\n className='bg-white text-dark'\n border='dark'\n />\n )}\n {showRating && (\n <Badge\n type={BadgeType.Rating}\n data={rating}\n />\n )}\n {!props.hideDuration && (\n <Badge\n type={props.newDurationStyle ? BadgeType.DurationApproximate : BadgeType.DurationExact}\n data={props.duration || VideoHelper.getDuration(props.video)}\n />\n )}\n </BadgeListContainer>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"preview\":\"whbhf\",\"topLeftContainer\":\"wHY80\",\"details\":\"vMaXP\",\"isHovering\":\"tR1jA\",\"videoGuidanceTags\":\"KJrT1\",\"dropdown\":\"oZXV7\",\"show\":\"EiQ04\",\"topRightContainer\":\"FAuzc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { HoverableProps, HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { ThumbnailPadlock } from 'libs/shared/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock';\nimport { VideoThumbnailBadges } from 'libs/shared/components/thumbnails/thumbnail-badges/VideoThumbnailBadges';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { PopoutVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ThumbnailCompanyLogo } from '../../thumbnail-company/ThumbnailCompanyLogo';\n\nimport styles from './popout-video-thumbnail.scss';\n\ntype PopoutVideoProps = HoverableProps & PopoutVideoThumbnailProps;\n\nconst PopoutVideo = (props: PopoutVideoProps): JSX.Element => {\n const {\n video, appLink, imageOptions, preload, setFavourite, canFavourite,\n isHovering, hoverToPlay, companyLogoFallbackUrl\n } = props;\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(video);\n\n React.useEffect(() => {\n return () => {\n props.cleanPortalNode?.();\n };\n }, []);\n\n function getGuidanceAppLink(scrollToPosition: PlayPageAnchor): Core.AppLink {\n return {\n ...appLink,\n params: {\n ...appLinkParams,\n scrollTo: scrollToPosition\n }\n };\n }\n\n let className = 'position-relative bg-white';\n\n if (props.extraClasses)\n className += ` ${props.extraClasses}`;\n if (isHovering)\n className += ` rounded-3 shadow-lg`;\n \n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showThumbnailPreviewVideo = props.isHovering && canConsume && hoverToPlay;\n const showFavouriteButton = FavouriteHelper.showFavouriteButton(props.video, isHovering);\n\n return (\n <div className={className}>\n {showFavouriteButton && (\n <div className={styles.topRightContainer}>\n <FavouriteButton\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n />\n </div>\n )}\n\n {!canNavigate && (\n <div className={styles.topRightContainer}>\n <Tooltip title={VideoHelper.getPrivacyReasoning(props.video)} spanHack spanHackClassName=''>\n <ThumbnailPadlock />\n </Tooltip>\n </div>\n )}\n\n <div className='position-relative'>\n <BaseImage\n onClick={() => props.cleanPortalNode?.()}\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={`overflow-hidden ${isHovering ? styles.preview : `rounded-3 ${styles.original}`}`}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n <div className='p-absolute w-100 h-100 text-white'>\n\n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} imageCdnUrl={props.imageCdnUrl} /> */}\n \n <VideoTypeBadge video={video} />\n \n <ThumbnailCompanyLogo video={video} companyLogoFallbackUrl={companyLogoFallbackUrl} />\n </div>\n\n {/* bottom right */}\n <VideoThumbnailBadges\n video={props.video}\n audience={props.audience}\n hideRating={props.hideRating}\n hideDuration={props.hideDuration}\n />\n\n {/* bottom */}\n <VideoThumbnailBottomBar video={video} />\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n location='popout-video'\n />\n }\n </div>\n\n {!isHovering && !props.hideTitle && (\n <ThumbnailText {...props}/>\n )}\n \n <div className={`${styles.details} ${isHovering ? `${styles.isHovering} box-shadow` : ''}`}>\n {isHovering && (\n <>\n <div className={`${isHovering ? styles.videoGuidanceTags : ''}`}>\n <ThumbnailText {...props}/>\n\n {(props.showVideoGuidance && isHovering) && (\n <div className={`d-flex justify-content-start align-items-center pt-2`}>\n <ResourcesTag\n video={props.video}\n appLink={getGuidanceAppLink(PlayPageAnchor.Resources)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n <InteractivesTag\n video={props.video}\n appLink={getGuidanceAppLink(PlayPageAnchor.Interactives)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </div>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n\n\nexport function PopoutVideoThumbnail(props: PopoutVideoThumbnailProps): JSX.Element {\n return (\n <>\n <HoverToPortalContainer<PopoutVideoThumbnailProps>\n hoverableComponent={PopoutVideo}\n componentProps={props}\n fixedHoverWidth={400}\n minHoverWidth={400}\n analyticsData={{\n ...props.analyticsData,\n id: props.video.id,\n name: props.video.name\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n }}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"efxnE\",\"cvIcon\":\"OJ_ZQ\",\"action\":\"vWvGn\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { CheckMarkButton, CheckMarkStatus, SetCheckMarkStatusFunc } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { CanFavouriteFunc, FavouriteFunc, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ThumbnailPadlock } from './padlock/ThumbnailPadlock';\n\nimport styles from './video-thumbnail-actions.scss';\n\nfunction hasActions(props: VideoThumbnailActionsProps): boolean {\n if (!VideoHelper.getCanBeConsumed(props.video)?.canConsume)\n return true;\n\n if (FunctionHelper.isFunction(props.setFavourite) && FunctionHelper.isFunction(props.canFavourite))\n return true;\n\n if (FunctionHelper.isFunction(props.setCheckMarkStatus))\n return true;\n\n return false;\n}\n\ninterface VideoThumbnailActionsProps {\n video: VideoTypes;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n checkMarkStatus?: CheckMarkStatus;\n setCheckMarkStatus?: SetCheckMarkStatusFunc;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n size?: VideoItemSize;\n}\n\nexport function VideoThumbnailActions(props: VideoThumbnailActionsProps): JSX.Element {\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n if (!canNavigate) {\n return (\n <div className={styles.container}>\n <ThumbnailPadlock size={props.size} />\n </div>\n );\n }\n \n if (!hasActions(props))\n return <></>;\n\n return (\n <div className={`${styles.container} d-flex align-items-center`}>\n <FavouriteButton\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n video={props.video}\n className={styles.action}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n\n <CheckMarkButton\n status={props.checkMarkStatus}\n setStatus={props.setCheckMarkStatus}\n className={styles.action}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"titleOverlay\":\"krg9f\",\"clip\":\"MPRU6\",\"large\":\"g5_ww\",\"interactive\":\"Zzo3e\",\"titleBelow\":\"tZjPt\",\"overlayContainer\":\"EElm1\",\"topLeftContainer\":\"hrw3I\",\"gradient\":\"LS_EH\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Mask, MaskType } from 'libs/shared/components/mask/Mask';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { VideoThumbnailActions } from 'libs/shared/components/thumbnails/thumbnail-actions/VideoThumbnailActions';\nimport { VideoThumbnailBadges } from 'libs/shared/components/thumbnails/thumbnail-badges/VideoThumbnailBadges';\nimport { ThumbnailCompanyLogo } from 'libs/shared/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo';\nimport { StaticVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useHover, useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './static-video-thumbnail.scss';\n\nconst namespace = 'shared.staticVideoThumbnail';\n\nfunction ThumbnailText(props: StaticVideoThumbnailProps): JSX.Element {\n const { video, subTextAppLink, textPosition, appLink } = props;\n\n const textIsOverlayed = textPosition === ThumbnailTextPosition.Overlay;\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n let className = '';\n\n if (textIsOverlayed) {\n className = styles.titleOverlay;\n\n if (canNavigate) {\n if (VideoHelper.isClip(video))\n className += ' ' + styles.clip;\n if (VideoHelper.isInteractive(video))\n className += ' ' + styles.interactive;\n }\n } else {\n className = styles.titleBelow;\n }\n\n return (\n <div className={className}>\n {VideoHelper.isVideo(video) &&\n <VideoSubText\n type={props.subTextType}\n className={textIsOverlayed ? 'text-shadow clamp-1' : 'clamp-2'}\n video={video}\n appLink={!textIsOverlayed ? subTextAppLink : null}\n analyticsOptions={{ location: LocationContext.VideoThumbnail }}\n />\n }\n\n {(textIsOverlayed || !canNavigate)\n ? (\n <span className={`h6 text-reset text-shadow clamp-1`}>\n {video.name ?? LanguageService.getPhrase(namespace, 'videoUnavailable')}\n </span>\n ) : (\n <AppLink className='h6 text-reset clamp-2' appLink={appLink}>\n {video.name}\n </AppLink>\n )\n }\n </div>\n );\n}\n\nexport function StaticVideoThumbnail(props: StaticVideoThumbnailProps): JSX.Element {\n const { video, appLink, textPosition, imageOptions, setFavourite, preload, hoverToPlay } = props;\n\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n\n const [ hoverRef, isHovering ] = useHover<HTMLDivElement>();\n const [ hoverIntentRef, isHoveringIntentionally ] = useHoverIntent<HTMLDivElement>({ delay: 100 });\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(video);\n\n function setHoverRefs(r: HTMLDivElement) {\n hoverRef.current = r;\n hoverIntentRef.current = r;\n }\n\n const showThumbnailPreviewVideo = isHoveringIntentionally && canConsume && hoverToPlay;\n\n function canFavourite(): boolean {\n return props.canFavourite?.(props.video) && FavouriteHelper.showFavouriteButton(video, isHovering);\n }\n\n function getContainerClass(): string {\n let className = 'position-relative';\n\n className += (appLink && canNavigate) ? ' cursor-pointer' : '';\n\n if (props.extraClasses)\n className += ` ${props.extraClasses}`;\n\n if (textPosition === ThumbnailTextPosition.Overlay)\n className += ` rounded overflow-hidden`;\n\n return className;\n }\n\n function getThumbnailClass(): string {\n let className = `overflow-hidden ${props.size === 'sm' ? 'rounded' : 'rounded-3'}`;\n\n if (props.imageClassName)\n className += ` ${props.imageClassName}`;\n\n if (textPosition === ThumbnailTextPosition.Overlay)\n className += ` ${styles.gradient}`;\n \n return className;\n }\n\n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showMask = !!appLink && !props.hideMask && canNavigate;\n const tooltip = VideoHelper.getPrivacyReasoning(props.video, props.showSignIn);\n\n return (\n <Tooltip title={tooltip} spanHack spanHackClassName=''>\n <div className={getContainerClass()} ref={setHoverRefs}>\n <VideoThumbnailActions\n video={video}\n checkMarkStatus={props.checkMarkStatus}\n setCheckMarkStatus={props.setCheckMarkStatus}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n size={props.size}\n />\n\n <BaseImage\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={getThumbnailClass()}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n {showMask && (\n <Mask type={MaskType.Video} size={props.size} />\n )}\n <ImageFallback type={ImageFallbackType.Video} />\n <div className={styles.overlayContainer}>\n {/* overlay */}\n {textPosition === ThumbnailTextPosition.Overlay && <ThumbnailText {...props} />}\n \n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} size={props.size} imageCdnUrl={props.imageCdnUrl} /> */}\n \n <VideoTypeBadge video={video} size={props.size} />\n\n <ThumbnailCompanyLogo\n video={video}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n size={props.size}\n />\n </div>\n\n {/* bottom */}\n <VideoThumbnailBottomBar video={video} />\n \n {/* bottom right */}\n <VideoThumbnailBadges\n video={props.video}\n audience={props.audience}\n hideRating={props.hideRating}\n hideDuration={props.hideDuration}\n newDurationStyle={props.newDurationStyle}\n size={props.size}\n />\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n />\n }\n\n {textPosition === ThumbnailTextPosition.Below && <ThumbnailText {...props} />}\n </div>\n </Tooltip>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { CheckMarkStatus, SetCheckMarkStatusFunc } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Audience, CanFavouriteFunc, FavouriteFunc, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport { ExpandableVideoThumbnail } from './expandable/ExpandableVideoThumbnail';\nimport { PopoutVideoThumbnail } from './popout/PopoutVideoThumbnail';\nimport { StaticVideoThumbnail } from './static/StaticVideoThumbnail';\n\ninterface BaseVideoThumbnailProps {\n video: VideoTypes;\n imageOptions: ImageOptions;\n appLink: Core.AppLink;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n preload?: boolean;\n analyticsData?: HashObject;\n analyticsOptions: AnalyticsOptions; // Location context required\n hoverToPlay?: boolean;\n companyLogoFallbackUrl?: string;\n imageCdnUrl?: string;\n \n /**\n * TODO: Fix whatever this used to do in playlists\n */\n canRemovePrivateVideos?: boolean;\n subTextType?: VideoSubTextType;\n subTextAppLink?: Core.AppLink;\n}\n\nexport interface ExpandableVideoThumbnailProps extends BaseVideoThumbnailProps {\n type: 'expandable';\n newDurationStyle?: boolean;\n hovering: boolean;\n}\n\nexport interface PopoutVideoThumbnailProps extends BaseVideoThumbnailProps {\n type: 'popout';\n hideDuration: boolean;\n extraClasses?: string;\n audience: Audience;\n imageCdnUrl: string;\n hideRating?: boolean;\n yearGroups: YearGroup[];\n hideTitle?: boolean;\n showVideoGuidance: boolean;\n}\n\ninterface BaseStaticVideoThumbnailProps extends BaseVideoThumbnailProps {\n textPosition: ThumbnailTextPosition;\n extraClasses?: string;\n imageClassName?: string;\n size: 'sm' | 'md';\n hideMask?: boolean;\n showSignIn?: boolean;\n setCheckMarkStatus?: SetCheckMarkStatusFunc;\n checkMarkStatus?: CheckMarkStatus;\n videoTypeBadgeSize?: 'sm' | 'std';\n hideDuration?: boolean;\n audience?: Audience;\n newDurationStyle?: boolean;\n hideRating?: boolean;\n}\n\ninterface PureStaticVideoThumbnailProps extends BaseStaticVideoThumbnailProps {\n type: 'static';\n}\n\n/**\n * Allows us to have loose types when we only want to display a thumbnail\n * without any of the functionality - Sha\n */\ninterface CosmeticVideoThumbnailProps extends Partial<BaseStaticVideoThumbnailProps> {\n type: 'cosmetic';\n}\n\nexport type StaticVideoThumbnailProps = PureStaticVideoThumbnailProps | CosmeticVideoThumbnailProps;\n\nexport type VideoThumbnailProps = ExpandableVideoThumbnailProps |\n StaticVideoThumbnailProps |\n PopoutVideoThumbnailProps |\n CosmeticVideoThumbnailProps;\n\nVideoThumbnail.defaultProps = {\n hideRating: true,\n size: 'md',\n hoverToPlay: true\n};\n\nexport function VideoThumbnail(props: VideoThumbnailProps): JSX.Element {\n switch (props.type) {\n case 'static':\n return <StaticVideoThumbnail {...props} />;\n case 'cosmetic':\n // No hover to play for cosmetic use of VideoThumbnail\n return <StaticVideoThumbnail {...props} hoverToPlay={false} />;\n case 'expandable':\n // Expandable thumbnails show metadata on hover. Static display the duration and don't expand on hover\n return <ExpandableVideoThumbnail {...props} />;\n case 'popout':\n return <PopoutVideoThumbnail {...props} />;\n default:\n return;\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"topLeftContainer\":\"iwBld\",\"draft\":\"QBpxh\",\"badge\":\"KcvGx\",\"svg\":\"gW733\",\"text\":\"QiH5Q\",\"sm\":\"tn2BH\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './type-badge.scss';\n\nconst namespace = 'shared.typeBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getText(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Clip:\n return getPhrase('clip');\n case MasterType.Interactive:\n return getPhrase('interactive');\n case MasterType.Resource:\n return getPhrase('resource');\n default:\n return '';\n }\n}\n\nfunction getIcon(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Clip:\n return cvSvgLibrary.Clip;\n case MasterType.Interactive:\n return cvSvgLibrary.Interactive;\n case MasterType.Resource:\n return cvSvgLibrary.Resources;\n default:\n return '';\n }\n}\n\nfunction getColourClass(typeId: MasterType, status: CurationStatus): string {\n switch (typeId) {\n case MasterType.Clip:\n return 'bg-dark-blue';\n case MasterType.Interactive:\n return status === CurationStatus.Draft ? styles.draft : 'bg-green';\n case MasterType.Resource:\n return 'bg-indigo';\n default:\n return '';\n }\n}\n\ninterface TypeBadgeProps {\n typeId: MasterType;\n status?: CurationStatus;\n size?: 'sm' | 'md';\n inContainer?: boolean;\n}\n\nTypeBadge.default = {\n size: 'md'\n};\n\nexport function TypeBadge(props: TypeBadgeProps): JSX.Element {\n const baseClasses = `${styles.badge} rounded-pill text-white ps-0 ${props.size === 'sm' ? styles.sm : ''}`;\n\n return (\n <div className={props.inContainer ? '' : styles.topLeftContainer}>\n <div className={`${baseClasses} ${getColourClass(props.typeId, props.status)}`}>\n <SvgContainer\n className={`svg-container d-block ${styles.svg}`}\n size={props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard}\n svgName={getIcon(props.typeId)}\n />\n <span className={styles.text}>\n {getText(props.typeId)}\n </span>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, UserAction } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceTag } from 'libs/shared/components/video-guidance/tag/VideoGuidanceTag';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.interactivesTag';\n\ninterface InteractivesTagProps {\n video: VideoTypes;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function InteractivesTag(props: InteractivesTagProps): JSX.Element {\n if (!props.video || VideoHelper.isInteractive(props.video))\n return <></>;\n\n const interactiveCount = props.video.interactives?.data?.length || 0;\n\n if (!interactiveCount)\n return <></>;\n\n return (\n <VideoGuidanceTag\n svgName={cvSvgLibrary.Interactive}\n iconVariant='green'\n text={LanguageService.getPhrase(namespace, 'interactives', { smartCount: interactiveCount })}\n appLink={props.appLink}\n appLinkAnalyticsData={{\n videoGuidanceType: 'interactive',\n videoGuidanceTotalItems: interactiveCount,\n ...props.analyticsData\n }}\n appLinkAnalyticsOptions={{\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n ...props.analyticsOptions\n }}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, UserAction } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceTag } from 'libs/shared/components/video-guidance/tag/VideoGuidanceTag';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.resourcesTag';\n\ninterface ResourcesTagProps {\n video: VideoTypes;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function ResourcesTag(props: ResourcesTagProps): JSX.Element {\n if (!props.video || VideoHelper.isInteractive(props.video))\n return <></>;\n\n const resourceCount = (\n (props.video.resources?.data?.length || 0) +\n (props.video.links?.data?.length || 0)\n );\n\n if (!resourceCount)\n return <></>;\n\n return (\n <VideoGuidanceTag\n svgName={cvSvgLibrary.Resources}\n iconVariant='indigo'\n text={LanguageService.getPhrase(namespace, 'resources', { smartCount: resourceCount })}\n appLink={props.appLink}\n appLinkAnalyticsData={{\n videoGuidanceType: 'resource',\n videoGuidanceTotalItems: resourceCount,\n ...props.analyticsData\n }}\n appLinkAnalyticsOptions={{\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n ...props.analyticsOptions\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"OjHQZ\",\"icon\":\"SS2zL\",\"active\":\"kD1xM\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport { AppLink } from '../../app-link/AppLink';\n\nimport styles from './video-guidance-tag.scss';\n\ninterface VideoGuidanceTagProps {\n text: string;\n svgName: string;\n iconVariant: string;\n active?: boolean;\n appLink?: Core.AppLink;\n appLinkAnalyticsData?: HashObject;\n appLinkAnalyticsOptions?: AnalyticsOptions;\n}\n\nfunction ContainerWrapper(props: VideoGuidanceTagProps): JSX.Element {\n if (props.appLink) {\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.appLinkAnalyticsData}\n analyticsOptions={props.appLinkAnalyticsOptions}\n className={`\n p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer\n text-decoration-none ${styles.tag} ${props.active ? styles.active : ''}\n `}\n >\n <VideoGuidanceTag {...props} />\n </AppLink>\n );\n }\n\n return <VideoGuidanceTag {...props} />;\n}\n\nfunction VideoGuidanceTag(props: VideoGuidanceTagProps): JSX.Element {\n return (\n <>\n <SvgContainer\n className={`${styles.icon} rounded-circle bg-${props.iconVariant} text-white`}\n svgName={props.svgName}\n />\n\n <span className='ps-1 text-nowrap user-select-none'>\n {props.text}\n </span>\n </>\n );\n}\n\nexport { ContainerWrapper as VideoGuidanceTag };","import React from 'react';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface RestrictionPadlockProps {\n tooltip?: string;\n className?: string;\n tooltipPlacement?: Placement\n size?: VideoItemSize;\n video: VideoTypes;\n yearGroups: YearGroup[];\n}\n\nexport function RestrictionPadlock(props: RestrictionPadlockProps): JSX.Element {\n if (!props.yearGroups)\n return <></>;\n\n const title = RestrictionHelper.mapRestrictionToText(props.video._restrictions, props.yearGroups);\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n if (!canConsume || !title)\n return <></>;\n\n return (\n <Tooltip\n spanHack\n spanHackClassName={props.className || 'd-inline-block ps-1'}\n title={title}\n placement={props.tooltipPlacement || 'top'}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Lock}\n size={props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard}\n />\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hoverContainer\":\"TzWQw\",\"hovering\":\"gdTcW\"};","import React from 'react';\nimport { OutPortal } from 'react-reverse-portal';\n\nimport { PlayerInitializationData } from 'libs/shared/context/player-context/interfaces/PlayerContextAction';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\n\nimport styles from './global-player-consumer.scss';\n\ninterface GlobalPlayerConsumerOptions extends PlayerInitializationData {\n location?: 'popout-video' | 'play-page';\n}\n\nexport function GlobalPlayerConsumer(props: GlobalPlayerConsumerOptions): JSX.Element {\n const playerContext = usePlayerContext();\n\n playerContext.useInitialize?.(props);\n\n if (!playerContext.hasProvider)\n return <></>;\n\n if (playerContext.mode === 'picture-in-picture')\n return <></>;\n\n if (props.mode === 'hover' && playerContext.isOnPlayPage)\n return <></>;\n\n if (playerContext.mode === 'default' || props.location === 'play-page')\n return <OutPortal node={playerContext.portalNode} />;\n\n /**\n * When hovering, we don't want to show the player until the video has started playing.\n */\n const shouldShow = playerContext.started;\n\n let rounding = 'rounded-3';\n if (props.location === 'popout-video')\n rounding = 'rounded-top-3';\n\n const className = `${styles.hoverContainer} ${shouldShow ? styles.hovering : ''} ${rounding} overflow-hidden`;\n\n return (\n <div className={className}>\n <OutPortal node={playerContext.portalNode} />\n </div>\n );\n}","export enum ThumbnailTextPosition {\n Below = 1,\n Overlay = 2,\n Independent = 3\n}","export enum PlayPageAnchor {\n Resources = 'resources',\n Interactives = 'interactives'\n}"],"names":["AudienceLabel","props","audience","className","border","name","BadgeListContainer","children","CheckMarkStatus","CheckMarkButton","status","Complete","isComplete","setIsComplete","style","None","FunctionHelper","setStatus","DivButton","onClick","shouldComplete","newStatus","Incomplete","disabled","SvgContainer","svgName","defaultProps","MaskType","Mask","type","size","typeClass","Video","Playlist","getClassByType","svgType","getSvgType","defaults","ThumbnailText","video","appLink","subTextAppLink","canNavigate","VideoHelper","VideoSubText","subTextType","analyticsOptions","location","AppLink","RestrictionPadlock","yearGroups","getPhrase","LanguageService","FavouriteButton","alerts","initialState","isFavourite","setIsFavourite","setFavourite","canFavourite","shouldFavourite","error","analyticsData","VideoWatchProgressBar","progress","watchPercentage","duration","width","VideoThumbnailBottomBar","ThumbnailPadlock","svgSize","S","ThumbnailCompanyLogo","companyLogoFallbackUrl","company","productionCompanies","data","url","logo","Tooltip","title","spanHack","backgroundImage","VideoTypeBadge","TypeBadge","typeId","MasterType","inContainer","getTitleClass","hovering","ExpandableVideoThumbnail","imageOptions","preload","hoverToPlay","canConsume","appLinkParams","ObjectHelper","params","eventAnalyticsOptions","entity","showFavouriteButton","isVideo","rating","delay","thumbnailHoverRef","showThumbnailPreviewVideo","spanHackClassName","ref","BaseImage","imageType","alt","series","id","actionType","descriptor","ImageFallback","Badge","hasSubtitle","hasInteractives","GlobalPlayerConsumer","key","objectId","objectTypeId","mode","context","contextId","moviesAndTv","mtv","VideoThumbnailBadges","showAudience","showRating","hideRating","hideDuration","newDurationStyle","PopoutVideo","isHovering","getGuidanceAppLink","scrollToPosition","scrollTo","cleanPortalNode","extraClasses","hideTitle","showVideoGuidance","ResourcesTag","PlayPageAnchor","InteractivesTag","PopoutVideoThumbnail","HoverToPortalContainer","hoverableComponent","componentProps","fixedHoverWidth","minHoverWidth","VideoThumbnailActions","setCheckMarkStatus","hasActions","checkMarkStatus","textPosition","textIsOverlayed","ThumbnailTextPosition","StaticVideoThumbnail","hoverRef","hoverIntentRef","isHoveringIntentionally","showMask","hideMask","tooltip","showSignIn","r","current","imageClassName","getThumbnailClass","VideoThumbnail","getIcon","getColourClass","CurationStatus","baseClasses","getText","namespace","interactiveCount","interactives","length","iconVariant","text","smartCount","appLinkAnalyticsData","videoGuidanceType","videoGuidanceTotalItems","appLinkAnalyticsOptions","resourceCount","resources","links","ContainerWrapper","active","VideoGuidanceTag","_restrictions","placement","tooltipPlacement","playerContext","useInitialize","hasProvider","isOnPlayPage","node","portalNode","shouldShow","started","rounding"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2355-b2345e9449-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/audience-label/AudienceLabel.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/badges/BadgeListContainer.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/check-mark-button/check-mark-button.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/check-mark-button/CheckMarkButton.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/mask/mask.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/mask/Mask.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-text/thumbnail-text.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-text/ThumbnailText.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/favourite-button/favourite-button.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/favourite-button/FavouriteButton.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/videos/VideoWatchProgressBar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/video-thumbnail-bottom-bar.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/bottom-bar/VideoThumbnailBottomBar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/padlock/thumbnail-padlock.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-company/thumbnail-company-logo.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-type-badge/VideoTypeBadge.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/expandable/expandable-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/expandable/ExpandableVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-badges/video-thumbnail-badges.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-badges/VideoThumbnailBadges.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/popout/popout-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/popout/PopoutVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/video-thumbnail-actions.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/thumbnail-actions/VideoThumbnailActions.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/static/static-video-thumbnail.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/static/StaticVideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/thumbnails/video/VideoThumbnail.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/type-badge/type-badge.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/type-badge/TypeBadge.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/interactives/InteractivesTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/resources/ResourcesTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/tag/video-guidance-tag.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-guidance/tag/VideoGuidanceTag.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/video-list/components/restriction-padlock/RestrictionPadlock.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/context/player-context/components/global-player-consumer.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/context/player-context/components/GlobalPlayerConsumer.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/enums/ThumbnailTextPosition.ts","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/interfaces/PlayPageAnchor.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Audience } from 'libs/shared/interfaces';\n\nimport styles from './audience-label.scss';\n\ntype AudienceBorderColour = 'dark' | 'white';\n\ninterface AudienceLabelProps {\n audience: Audience;\n border: AudienceBorderColour;\n className?: string;\n}\n\nexport function AudienceLabel(props: AudienceLabelProps): JSX.Element {\n if (!props.audience)\n return <></>;\n\n // Note: the audience-label class is applied so that parent components can override styling, and Online can style this component\n return (\n <div\n className={`audience-label border rounded-pill d-inline-block px-2 text-nowrap \n ${'border-' + props.border} ${props.className ? props.className : ''}`}\n >\n {props.audience.name}\n </div>\n );\n}\n\ninterface AudienceLabelListProps {\n audiences: Audience[];\n border: AudienceBorderColour;\n}\n\nexport function AudienceLabelList(props: AudienceLabelListProps): JSX.Element {\n if (!props.audiences || !props.audiences.length)\n return <></>;\n\n return (\n <>\n {props.audiences.map((a, idx) => (\n <span key={idx} className={styles.audienceLabelListItem}>\n <AudienceLabel audience={a} border={props.border} />\n </span>\n ))}\n </>\n );\n}","import * as React from 'react';\n\nimport styles from './badge.scss';\n\ninterface BadgeListContainerProps {\n className?: string;\n}\n\nexport function BadgeListContainer(props: React.PropsWithChildren<BadgeListContainerProps>): JSX.Element {\n let className = `d-flex align-items-center badge-list ${styles.minHeight}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return (\n <div className={className}>\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"unchecked\":\"bup9I\",\"outline\":\"ealw_\",\"checked\":\"A1Ov0\",\"checkMark\":\"c14lI\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DivButton } from '../div-button/DivButton';\n\nimport styles from './check-mark-button.scss';\n\nexport enum CheckMarkStatus {\n None = 'None',\n Complete = 'Complete',\n Incomplete = 'Incomplete'\n}\n\nexport type SetCheckMarkStatusFunc = (status: CheckMarkStatus) => Promise<void>;\n\ninterface CheckMarkButtonProps {\n setStatus: SetCheckMarkStatusFunc;\n status: CheckMarkStatus;\n style?: 'outline' | 'filled';\n className?: string;\n disabled?: boolean;\n}\n\nCheckMarkButton.defaultProps = {\n style: 'filled'\n};\n\nexport function CheckMarkButton(props: CheckMarkButtonProps): JSX.Element {\n // Use local state so that changes are reflected immediately.\n const [ isComplete, setIsComplete ] = React.useState(props.status === CheckMarkStatus.Complete);\n\n React.useEffect(() => {\n setIsComplete(props.status === CheckMarkStatus.Complete);\n }, [props.status]);\n\n let className = `cursor-pointer rounded-circle ${isComplete ? styles.checked : styles.unchecked}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (props.style === 'outline')\n className += ` ${styles.outline}`;\n\n function shouldRender(): boolean {\n return (\n !!props.status &&\n props.status !== CheckMarkStatus.None &&\n FunctionHelper.isFunction(props.setStatus)\n );\n }\n\n function onClick(): void {\n const shouldComplete = !isComplete;\n\n setIsComplete(shouldComplete);\n\n const newStatus = shouldComplete ? CheckMarkStatus.Complete : CheckMarkStatus.Incomplete;\n\n props.setStatus(newStatus).catch(() => {\n setIsComplete(!shouldComplete);\n });\n }\n\n if (!shouldRender())\n return <></>;\n\n return (\n <DivButton className={className} onClick={onClick} disabled={props.disabled}>\n <SvgContainer\n svgName={cvSvgLibrary.Check}\n className={`svg-container ${styles.checkMark}`}\n />\n </DivButton>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"mask\":\"qpc7L\",\"small\":\"L8Oxs\",\"video\":\"b8kJW\",\"playlist\":\"eo2p2\",\"maskContainer\":\"lpwag\"};","import * as React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './mask.scss';\n\nexport enum MaskType {\n Video,\n Playlist,\n Series\n}\n\nfunction getClassByType(type: MaskType): string {\n if (type === MaskType.Video)\n return styles.video;\n\n if (type === MaskType.Playlist)\n return styles.playlist;\n\n return '';\n}\n\nfunction getSvgType(type: MaskType): string {\n if (type === MaskType.Video)\n return cvSvgLibrary.PlayCircle;\n\n return '';\n}\n\ntype MaskSize = 'sm' | 'md';\n\ninterface MaskProps {\n type: MaskType;\n size?: MaskSize;\n}\n\nMask.defaults = {\n size: 'md'\n};\n\nexport function Mask(props: MaskProps): JSX.Element {\n const { type, size } = props;\n\n const typeClass = getClassByType(type);\n const svgType = getSvgType(type);\n\n return (\n <div className={`${styles.maskContainer} ${size === 'sm' ? styles.small : ''}`}>\n <div className={ styles.mask }></div>\n <SvgContainer svgName={svgType} className={ typeClass } />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"r70GR\",\"titleContainer\":\"rULXI\",\"seriesTitleBox\":\"h9k1p\",\"badgeContainer\":\"QaDDX\",\"audienceBadge\":\"hvsne\"};","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { PopoutVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { RestrictionPadlock } from 'libs/shared/components/video-list/components/restriction-padlock/RestrictionPadlock';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './thumbnail-text.scss';\n\ntype VideoThumbnailTextProps = Pick<PopoutVideoThumbnailProps, 'video'|'appLink'|'subTextAppLink'|'yearGroups'|'subTextType'>\n\nexport function ThumbnailText(props: VideoThumbnailTextProps): JSX.Element {\n const { video, appLink, subTextAppLink } = props;\n const { canNavigate } = VideoHelper.getCanBeConsumed(video);\n\n return (\n <div className={`mt-2 ${styles.container}`}>\n <div className={`d-flex flex-column ${styles.titleContainer}`}>\n {VideoHelper.isVideo(video) && (\n <VideoSubText\n type={props.subTextType}\n className={`text-truncate ${styles.seriesTitleBox}`}\n video={video}\n appLink={subTextAppLink}\n analyticsOptions={{ location: LocationContext.VideoThumbnail }}\n />\n )}\n \n <AppLink className='h6 text-reset clamp-2 align-middle' appLink={canNavigate ? appLink : null}>\n {video.name}\n <RestrictionPadlock\n video={props.video}\n yearGroups={props.yearGroups}\n size='sm'\n />\n </AppLink>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"favourited\":\"t0svX\",\"favouriteButton\":\"CFRo3\",\"heart\":\"ZMMQu\",\"heartOutline\":\"truFo\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CanFavouriteFunc, FavouriteFunc, VideoTypes } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './favourite-button.scss';\n\nconst namespace = 'shared.favouriteButton';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FavouriteButtonProps {\n video: VideoTypes;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n className?: string;\n analyticsData?: HashObject,\n analyticsOptions?: AnalyticsOptions\n}\n\nexport function FavouriteButton(props: FavouriteButtonProps): JSX.Element {\n const alerts = useAlerts();\n\n const initialState = FavouriteHelper.isFavouritedByCurrentUser(props.video);\n\n // Use local state so that changes are reflected immediately.\n const [ isFavourite, setIsFavourite ] = React.useState(initialState);\n\n React.useEffect(() => {\n setIsFavourite(initialState);\n }, [initialState]);\n\n const flexClasses = 'd-flex align-items-center justify-content-center';\n let className = `${flexClasses} cursor-pointer ${styles.favouriteButton} ${isFavourite ? styles.favourited : ''}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n function onClick(): void {\n const shouldFavourite = !isFavourite;\n\n function onError(): void {\n function getErrorPhraseKey(): string {\n if (VideoHelper.isClip(props.video))\n return shouldFavourite ? 'favouriteClipError' : 'unfavouriteClipError';\n\n if (VideoHelper.isInteractive(props.video))\n return shouldFavourite ? 'favouriteInteractiveError' : 'unfavouriteInteractiveError';\n\n return shouldFavourite ? 'favouriteVideoError' : 'unfavouriteVideoError';\n }\n\n alerts.error(getPhrase(getErrorPhraseKey()));\n setIsFavourite(!shouldFavourite);\n }\n\n setIsFavourite(shouldFavourite);\n props.setFavourite(props.video, shouldFavourite, null, onError, props.analyticsData, props.analyticsOptions);\n }\n\n if (!FunctionHelper.isFunction(props.setFavourite) || !FunctionHelper.isFunction(props.canFavourite))\n return <></>;\n\n // Don't render until we know the state of isFavourite\n if (!props.canFavourite(props.video))\n return <></>;\n\n return (\n <DivButton className={className} onClick={onClick}>\n {/* We have the two svgs because they get swapped out on hover by the styles */}\n <SvgContainer\n svgName={cvSvgLibrary.Heart}\n className={`svg-container ${styles.heart}`}\n />\n <SvgContainer\n svgName={cvSvgLibrary.HeartOutline}\n className={`svg-container ${styles.heartOutline}`}\n />\n </DivButton>\n );\n}","import * as React from 'react';\n\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface VideoWatchProgressBarProps {\n video: Video;\n}\n\nexport function VideoWatchProgressBar(props: VideoWatchProgressBarProps): JSX.Element {\n const progress = VideoHelper.getVideoProgress(props.video);\n\n const watchPercentage = progress && props.video.duration\n && progress / props.video.duration * 100000;\n\n if (!watchPercentage)\n return <></>;\n\n return <div className='bg-primary h-100' style={{ width: `${watchPercentage}%` }} />;\n}","// extracted by mini-css-extract-plugin\nexport default {\"bottomBar\":\"YnXtZ\"};","import React from 'react';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { VideoWatchProgressBar } from './videos/VideoWatchProgressBar';\n\nimport styles from './video-thumbnail-bottom-bar.scss';\n\ninterface VideoThumbnailBottomBarProps {\n video: VideoTypes;\n}\n\nexport function VideoThumbnailBottomBar(props: VideoThumbnailBottomBarProps): JSX.Element {\n if (!VideoHelper.isVideo(props.video)) {\n return <></>;\n }\n\n return (\n <div className={styles.bottomBar}>\n <VideoWatchProgressBar video={props.video} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"padlock\":\"w4cg8\",\"sm\":\"JpIYd\"};","import React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './thumbnail-padlock.scss';\n\ninterface ThumbnailPadlockProps {\n size?: VideoItemSize;\n}\n\nexport function ThumbnailPadlock(props: ThumbnailPadlockProps): JSX.Element {\n const svgSize = props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard;\n\n return (\n <div className={`${styles.padlock} ${props.size === 'sm' ? styles.sm : ''} bg-white cursor-default d-flex align-items-center justify-content-center`}>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={svgSize} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"OA9ft\",\"sm\":\"fyo2J\"};","import React from 'react';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Tooltip } from '../../tooltip/Tooltip';\n\nimport styles from './thumbnail-company-logo.scss';\n\ninterface ThumbnailCompanyLogoProps {\n companyLogoFallbackUrl: string;\n video: VideoTypes;\n size?: VideoItemSize;\n}\n\nThumbnailCompanyLogo.defaultProps = {\n size: 'md'\n};\n\nexport function ThumbnailCompanyLogo(props: ThumbnailCompanyLogoProps): JSX.Element {\n if (!VideoHelper.isVideo(props.video) || !props.companyLogoFallbackUrl)\n return <></>;\n\n const company = props.video.productionCompanies?.data?.[0];\n const url = company?.logo?.url ?? props.companyLogoFallbackUrl;\n\n if (!url)\n return <></>;\n\n return (\n <div>\n <Tooltip\n title={company?.name}\n spanHack\n >\n <div\n className={`${styles.logo} ${props.size === 'sm' ? styles.sm : ''}`}\n style={{\n backgroundImage: `url(${url})`\n }}\n />\n </Tooltip>\n </div>\n );\n}","import React from 'react';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces/VideoTypes';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { TypeBadge } from '../type-badge/TypeBadge';\n\ninterface VideoTypeBadgeProps {\n video: VideoTypes;\n size?: VideoItemSize;\n}\n\nVideoTypeBadge.default = {\n size: 'md'\n};\n\nexport function VideoTypeBadge(props: VideoTypeBadgeProps): JSX.Element {\n if (VideoHelper.isClip(props.video))\n return <TypeBadge typeId={MasterType.Clip} size={props.size} inContainer />;\n\n if (VideoHelper.isInteractive(props.video))\n return (\n <TypeBadge\n typeId={MasterType.Interactive}\n status={props.video.status}\n size={props.size}\n inContainer\n />\n );\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"overlayContainer\":\"qu3A3\",\"topLeftContainer\":\"gjhMe\",\"topRightContainer\":\"XAfZW\",\"overlay\":\"NTrtm\",\"downScale\":\"puKcM\",\"title\":\"_6FukN\",\"gradient\":\"rXzR8\",\"playIcon\":\"dndOA\",\"videoProgress\":\"yhWf4\",\"badgeContainer\":\"AtgmC\",\"clipProgress\":\"E2egN\",\"interactiveProgress\":\"WycwR\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { ThumbnailPadlock } from 'libs/shared/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock';\nimport { ThumbnailCompanyLogo } from 'libs/shared/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo';\nimport { ExpandableVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './expandable-video-thumbnail.scss';\n\nfunction getTitleClass(hovering: boolean): string {\n let className = 'mb-1';\n\n if (hovering) {\n className += styles.downScale;\n }\n \n return className;\n}\n\nexport function ExpandableVideoThumbnail(props: ExpandableVideoThumbnailProps): JSX.Element {\n const {\n video, appLink, imageOptions, setFavourite, canFavourite,\n preload, hovering, hoverToPlay, companyLogoFallbackUrl\n } = props;\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n\n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showFavouriteButton = FavouriteHelper.showFavouriteButton(props.video, hovering);\n const isVideo = VideoHelper.isVideo(video);\n\n const rating = VideoHelper.getRating(props.video);\n\n const [ thumbnailHoverRef, isThumbnailHovering ] = useHoverIntent<HTMLDivElement>({ delay: 100 });\n\n const showThumbnailPreviewVideo = isThumbnailHovering && canConsume && hoverToPlay;\n\n return (\n <Tooltip title={VideoHelper.getPrivacyReasoning(props.video)} spanHack spanHackClassName=''>\n <div className='position-relative rounded-3 overflow-hidden' ref={thumbnailHoverRef}>\n {showFavouriteButton &&\n <div className={styles.topRightContainer}>\n <FavouriteButton\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n />\n </div>\n }\n {/* top right */}\n {!canNavigate && (\n <div className={styles.topRightContainer}>\n <ThumbnailPadlock />\n </div>\n )}\n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} imageCdnUrl={props.imageCdnUrl} /> */}\n\n <VideoTypeBadge video={video} />\n\n <ThumbnailCompanyLogo video={video} companyLogoFallbackUrl={companyLogoFallbackUrl} />\n </div>\n\n <BaseImage\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={styles.gradient}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n {!!(hovering && canNavigate) && (\n <SvgContainer className={styles.playIcon} svgName={cvSvgLibrary.PlayCircle} />\n )}\n\n <ImageFallback type={ImageFallbackType.Video} />\n <div className={styles.overlayContainer}>\n <div className={styles.overlay}>\n <div className={`${getTitleClass(hovering)} ${styles.title}`}>\n {isVideo && (\n <VideoSubText\n type={props.subTextType}\n className='text-shadow clamp-1'\n video={video}\n appLink={null}\n analyticsOptions={null}\n />\n )}\n\n <span className='h6 text-reset text-shadow clamp-1'>\n {VideoHelper.getTitle(video)}\n </span>\n </div>\n\n <VideoThumbnailBottomBar video={video} />\n\n {hovering && (\n <BadgeListContainer className='mt-1'>\n {VideoHelper.isVideo(video) && (\n <>\n <Badge\n type={BadgeType.Rating}\n data={rating}\n />\n {video.hasSubtitle && (\n <span className='badge p-0'>\n <SvgContainer svgName={cvSvgLibrary.CloseCaptionBadge} />\n </span>\n )}\n <Badge\n type={BadgeType.Interactive}\n data={video.hasInteractives}\n />\n <Badge\n type={BadgeType.DurationExact}\n data={VideoHelper.getDuration(props.video)}\n />\n </>\n )}\n </BadgeListContainer>\n )}\n </div>\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n />\n }\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"badgeContainer\":\"fy9Un\",\"sm\":\"Rb0TL\"};","import React from 'react';\n\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { BadgeListContainer } from 'libs/shared/components/badges/BadgeListContainer';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Audience, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-thumbnail-badges.scss';\n\ninterface VideoThumbnailBadgesProps {\n video?: Video;\n audience?: Audience;\n hideRating?: boolean;\n hideDuration?: boolean;\n newDurationStyle?: boolean;\n size?: VideoItemSize;\n duration?: number;\n}\n\nVideoThumbnailBadges.defaultProps = {\n newDurationStyle: true,\n size: 'md'\n};\n\nexport function VideoThumbnailBadges(props: VideoThumbnailBadgesProps): JSX.Element {\n const rating = VideoHelper.getRating(props.video);\n\n const showAudience = !!props.audience && props.size !== 'sm';\n const showRating = !showAudience && !props.hideRating && !!rating && props.size !== 'sm';\n\n if (props.hideDuration && !showAudience && !showRating)\n return <></>;\n\n return (\n <BadgeListContainer className={`${styles.badgeContainer} ${props.size === 'sm' ? styles.sm : ''}`}>\n {showAudience && (\n <AudienceLabel\n audience={props.audience}\n className='bg-white text-dark'\n border='dark'\n />\n )}\n {showRating && (\n <Badge\n type={BadgeType.Rating}\n data={rating}\n />\n )}\n {!props.hideDuration && (\n <Badge\n type={props.newDurationStyle ? BadgeType.DurationApproximate : BadgeType.DurationExact}\n data={props.duration || VideoHelper.getDuration(props.video)}\n />\n )}\n </BadgeListContainer>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"preview\":\"whbhf\",\"topLeftContainer\":\"wHY80\",\"details\":\"vMaXP\",\"isHovering\":\"tR1jA\",\"videoGuidanceTags\":\"KJrT1\",\"dropdown\":\"oZXV7\",\"show\":\"EiQ04\",\"topRightContainer\":\"FAuzc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { HoverableProps, HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { ThumbnailPadlock } from 'libs/shared/components/thumbnails/thumbnail-actions/padlock/ThumbnailPadlock';\nimport { VideoThumbnailBadges } from 'libs/shared/components/thumbnails/thumbnail-badges/VideoThumbnailBadges';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { PopoutVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractivesTag } from 'libs/shared/components/video-guidance/interactives/InteractivesTag';\nimport { ResourcesTag } from 'libs/shared/components/video-guidance/resources/ResourcesTag';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ThumbnailCompanyLogo } from '../../thumbnail-company/ThumbnailCompanyLogo';\n\nimport styles from './popout-video-thumbnail.scss';\n\ntype PopoutVideoProps = HoverableProps & PopoutVideoThumbnailProps;\n\nconst PopoutVideo = (props: PopoutVideoProps): JSX.Element => {\n const {\n video, appLink, imageOptions, preload, setFavourite, canFavourite,\n isHovering, hoverToPlay, companyLogoFallbackUrl\n } = props;\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(video);\n\n React.useEffect(() => {\n return () => {\n props.cleanPortalNode?.();\n };\n }, []);\n\n function getGuidanceAppLink(scrollToPosition: PlayPageAnchor): Core.AppLink {\n return {\n ...appLink,\n params: {\n ...appLinkParams,\n scrollTo: scrollToPosition\n }\n };\n }\n\n let className = 'position-relative bg-white';\n\n if (props.extraClasses)\n className += ` ${props.extraClasses}`;\n if (isHovering)\n className += ` rounded-3 shadow-lg`;\n \n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showThumbnailPreviewVideo = props.isHovering && canConsume && hoverToPlay;\n const showFavouriteButton = FavouriteHelper.showFavouriteButton(props.video, isHovering);\n\n return (\n <div className={className}>\n {showFavouriteButton && (\n <div className={styles.topRightContainer}>\n <FavouriteButton\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n video={video}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n />\n </div>\n )}\n\n {!canNavigate && (\n <div className={styles.topRightContainer}>\n <Tooltip title={VideoHelper.getPrivacyReasoning(props.video)} spanHack spanHackClassName=''>\n <ThumbnailPadlock />\n </Tooltip>\n </div>\n )}\n\n <div className='position-relative'>\n <BaseImage\n onClick={() => props.cleanPortalNode?.()}\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={`overflow-hidden ${isHovering ? styles.preview : `rounded-3 ${styles.original}`}`}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n <div className='p-absolute w-100 h-100 text-white'>\n\n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} imageCdnUrl={props.imageCdnUrl} /> */}\n \n <VideoTypeBadge video={video} />\n \n <ThumbnailCompanyLogo video={video} companyLogoFallbackUrl={companyLogoFallbackUrl} />\n </div>\n\n {/* bottom right */}\n <VideoThumbnailBadges\n video={props.video}\n audience={props.audience}\n hideRating={props.hideRating}\n hideDuration={props.hideDuration}\n />\n\n {/* bottom */}\n <VideoThumbnailBottomBar video={video} />\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n location='popout-video'\n />\n }\n </div>\n\n {!isHovering && !props.hideTitle && (\n <ThumbnailText {...props}/>\n )}\n \n <div className={`${styles.details} ${isHovering ? `${styles.isHovering} box-shadow` : ''}`}>\n {isHovering && (\n <>\n <div className={`${isHovering ? styles.videoGuidanceTags : ''}`}>\n <ThumbnailText {...props}/>\n\n {(props.showVideoGuidance && isHovering) && (\n <div className={`d-flex justify-content-start align-items-center pt-2`}>\n <ResourcesTag\n video={props.video}\n appLink={getGuidanceAppLink(PlayPageAnchor.Resources)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n <InteractivesTag\n video={props.video}\n appLink={getGuidanceAppLink(PlayPageAnchor.Interactives)}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n </div>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n );\n};\n\n\nexport function PopoutVideoThumbnail(props: PopoutVideoThumbnailProps): JSX.Element {\n return (\n <>\n <HoverToPortalContainer<PopoutVideoThumbnailProps>\n hoverableComponent={PopoutVideo}\n componentProps={props}\n fixedHoverWidth={400}\n minHoverWidth={400}\n analyticsData={{\n ...props.analyticsData,\n id: props.video.id,\n name: props.video.name\n }}\n analyticsOptions={{\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(props.video)\n }}\n />\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"efxnE\",\"cvIcon\":\"OJ_ZQ\",\"action\":\"vWvGn\"};","import React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { CheckMarkButton, CheckMarkStatus, SetCheckMarkStatusFunc } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { FavouriteButton } from 'libs/shared/components/favourite-button/FavouriteButton';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { CanFavouriteFunc, FavouriteFunc, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ThumbnailPadlock } from './padlock/ThumbnailPadlock';\n\nimport styles from './video-thumbnail-actions.scss';\n\nfunction hasActions(props: VideoThumbnailActionsProps): boolean {\n if (!VideoHelper.getCanBeConsumed(props.video)?.canConsume)\n return true;\n\n if (FunctionHelper.isFunction(props.setFavourite) && FunctionHelper.isFunction(props.canFavourite))\n return true;\n\n if (FunctionHelper.isFunction(props.setCheckMarkStatus))\n return true;\n\n return false;\n}\n\ninterface VideoThumbnailActionsProps {\n video: VideoTypes;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n checkMarkStatus?: CheckMarkStatus;\n setCheckMarkStatus?: SetCheckMarkStatusFunc;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n size?: VideoItemSize;\n}\n\nexport function VideoThumbnailActions(props: VideoThumbnailActionsProps): JSX.Element {\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n if (!canNavigate) {\n return (\n <div className={styles.container}>\n <ThumbnailPadlock size={props.size} />\n </div>\n );\n }\n \n if (!hasActions(props))\n return <></>;\n\n return (\n <div className={`${styles.container} d-flex align-items-center`}>\n <FavouriteButton\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n video={props.video}\n className={styles.action}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n\n <CheckMarkButton\n status={props.checkMarkStatus}\n setStatus={props.setCheckMarkStatus}\n className={styles.action}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"titleOverlay\":\"krg9f\",\"clip\":\"MPRU6\",\"large\":\"g5_ww\",\"interactive\":\"Zzo3e\",\"titleBelow\":\"tZjPt\",\"overlayContainer\":\"EElm1\",\"topLeftContainer\":\"hrw3I\",\"gradient\":\"LS_EH\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClickDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Mask, MaskType } from 'libs/shared/components/mask/Mask';\nimport { VideoThumbnailBottomBar } from 'libs/shared/components/thumbnails/bottom-bar/VideoThumbnailBottomBar';\nimport { VideoThumbnailActions } from 'libs/shared/components/thumbnails/thumbnail-actions/VideoThumbnailActions';\nimport { VideoThumbnailBadges } from 'libs/shared/components/thumbnails/thumbnail-badges/VideoThumbnailBadges';\nimport { ThumbnailCompanyLogo } from 'libs/shared/components/thumbnails/thumbnail-company/ThumbnailCompanyLogo';\nimport { StaticVideoThumbnailProps } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { VideoTypeBadge } from 'libs/shared/components/video-type-badge/VideoTypeBadge';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useHover, useHoverIntent } from 'libs/shared/hooks/UseHover';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './static-video-thumbnail.scss';\n\nconst namespace = 'shared.staticVideoThumbnail';\n\nfunction ThumbnailText(props: StaticVideoThumbnailProps): JSX.Element {\n const { video, subTextAppLink, textPosition, appLink } = props;\n\n const textIsOverlayed = textPosition === ThumbnailTextPosition.Overlay;\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n let className = '';\n\n if (textIsOverlayed) {\n className = styles.titleOverlay;\n\n if (canNavigate) {\n if (VideoHelper.isClip(video))\n className += ' ' + styles.clip;\n if (VideoHelper.isInteractive(video))\n className += ' ' + styles.interactive;\n }\n } else {\n className = styles.titleBelow;\n }\n\n return (\n <div className={className}>\n {VideoHelper.isVideo(video) &&\n <VideoSubText\n type={props.subTextType}\n className={textIsOverlayed ? 'text-shadow clamp-1' : 'clamp-2'}\n video={video}\n appLink={!textIsOverlayed ? subTextAppLink : null}\n analyticsOptions={{ location: LocationContext.VideoThumbnail }}\n />\n }\n\n {(textIsOverlayed || !canNavigate)\n ? (\n <span className={`h6 text-reset clamp-1`}>\n {video.name ?? LanguageService.getPhrase(namespace, 'videoUnavailable')}\n </span>\n ) : (\n <AppLink className='h6 text-reset clamp-2' appLink={appLink}>\n {video.name}\n </AppLink>\n )\n }\n </div>\n );\n}\n\nexport function StaticVideoThumbnail(props: StaticVideoThumbnailProps): JSX.Element {\n const { video, appLink, textPosition, imageOptions, setFavourite, preload, hoverToPlay } = props;\n\n const appLinkParams = ObjectHelper.isObject(appLink?.params) ? appLink?.params as HashObject : {};\n\n const [ hoverRef, isHovering ] = useHover<HTMLDivElement>();\n const [ hoverIntentRef, isHoveringIntentionally ] = useHoverIntent<HTMLDivElement>({ delay: 100 });\n const { canNavigate, canConsume } = VideoHelper.getCanBeConsumed(video);\n\n function setHoverRefs(r: HTMLDivElement) {\n hoverRef.current = r;\n hoverIntentRef.current = r;\n }\n\n const showThumbnailPreviewVideo = isHoveringIntentionally && canConsume && hoverToPlay;\n\n function canFavourite(): boolean {\n return props.canFavourite?.(props.video) && FavouriteHelper.showFavouriteButton(video, isHovering);\n }\n\n function getContainerClass(): string {\n let className = 'position-relative';\n\n className += (appLink && canNavigate) ? ' cursor-pointer' : '';\n\n if (props.extraClasses)\n className += ` ${props.extraClasses}`;\n\n if (textPosition === ThumbnailTextPosition.Overlay)\n className += ` rounded overflow-hidden`;\n\n return className;\n }\n\n function getThumbnailClass(): string {\n let className = `overflow-hidden ${props.size === 'sm' ? 'rounded' : 'rounded-3'}`;\n\n if (props.imageClassName)\n className += ` ${props.imageClassName}`;\n\n if (textPosition === ThumbnailTextPosition.Overlay)\n className += ` ${styles.gradient}`;\n \n return className;\n }\n\n const eventAnalyticsOptions = {\n ...props.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video)\n };\n\n const showMask = !!appLink && !props.hideMask && canNavigate;\n const tooltip = VideoHelper.getPrivacyReasoning(props.video, props.showSignIn);\n\n return (\n <Tooltip title={tooltip} spanHack spanHackClassName=''>\n <div className={getContainerClass()} ref={setHoverRefs}>\n <VideoThumbnailActions\n video={video}\n checkMarkStatus={props.checkMarkStatus}\n setCheckMarkStatus={props.setCheckMarkStatus}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n analyticsData={props.analyticsData}\n analyticsOptions={eventAnalyticsOptions}\n size={props.size}\n />\n\n <BaseImage\n data={VideoHelper.getThumbnail(video)}\n appLink={canNavigate ? appLink : null}\n imageType={ImageType.Thumbnails}\n imageOptions={imageOptions}\n preload={preload}\n className={getThumbnailClass()}\n alt={('series' in video && video.series?.name ? `${video.series.name}: ` : '') + video.name}\n analyticsData={{\n ...props.analyticsData,\n id: video.id,\n name: video.name\n }}\n analyticsOptions={{\n ...eventAnalyticsOptions,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.Thumbnail\n }}\n >\n {showMask && (\n <Mask type={MaskType.Video} size={props.size} />\n )}\n <ImageFallback type={ImageFallbackType.Video} />\n <div className={styles.overlayContainer}>\n {/* overlay */}\n {textPosition === ThumbnailTextPosition.Overlay && <ThumbnailText {...props} />}\n \n {/* top left */}\n <div className={`${styles.topLeftContainer} d-flex flex-no-wrap`}>\n {/* <LiteOwnerAvatar video={video} size={props.size} imageCdnUrl={props.imageCdnUrl} /> */}\n \n <VideoTypeBadge video={video} size={props.size} />\n\n <ThumbnailCompanyLogo\n video={video}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n size={props.size}\n />\n </div>\n\n {/* bottom */}\n <VideoThumbnailBottomBar video={video} />\n \n {/* bottom right */}\n <VideoThumbnailBadges\n video={props.video}\n audience={props.audience}\n hideRating={props.hideRating}\n hideDuration={props.hideDuration}\n newDurationStyle={props.newDurationStyle}\n size={props.size}\n />\n </div>\n </BaseImage>\n {showThumbnailPreviewVideo &&\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n mode='hover'\n context={appLinkParams.context}\n contextId={appLinkParams.contextId}\n moviesAndTv={appLinkParams.mtv}\n />\n }\n\n {textPosition === ThumbnailTextPosition.Below && <ThumbnailText {...props} />}\n </div>\n </Tooltip>\n );\n}\n","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { CheckMarkStatus, SetCheckMarkStatusFunc } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Audience, CanFavouriteFunc, FavouriteFunc, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport { ExpandableVideoThumbnail } from './expandable/ExpandableVideoThumbnail';\nimport { PopoutVideoThumbnail } from './popout/PopoutVideoThumbnail';\nimport { StaticVideoThumbnail } from './static/StaticVideoThumbnail';\n\ninterface BaseVideoThumbnailProps {\n video: VideoTypes;\n imageOptions: ImageOptions;\n appLink: Core.AppLink;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n preload?: boolean;\n analyticsData?: HashObject;\n analyticsOptions: AnalyticsOptions; // Location context required\n hoverToPlay?: boolean;\n companyLogoFallbackUrl?: string;\n imageCdnUrl?: string;\n \n /**\n * TODO: Fix whatever this used to do in playlists\n */\n canRemovePrivateVideos?: boolean;\n subTextType?: VideoSubTextType;\n subTextAppLink?: Core.AppLink;\n}\n\nexport interface ExpandableVideoThumbnailProps extends BaseVideoThumbnailProps {\n type: 'expandable';\n newDurationStyle?: boolean;\n hovering: boolean;\n}\n\nexport interface PopoutVideoThumbnailProps extends BaseVideoThumbnailProps {\n type: 'popout';\n hideDuration: boolean;\n extraClasses?: string;\n audience: Audience;\n imageCdnUrl: string;\n hideRating?: boolean;\n yearGroups: YearGroup[];\n hideTitle?: boolean;\n showVideoGuidance: boolean;\n}\n\ninterface BaseStaticVideoThumbnailProps extends BaseVideoThumbnailProps {\n textPosition: ThumbnailTextPosition;\n extraClasses?: string;\n imageClassName?: string;\n size: 'sm' | 'md';\n hideMask?: boolean;\n showSignIn?: boolean;\n setCheckMarkStatus?: SetCheckMarkStatusFunc;\n checkMarkStatus?: CheckMarkStatus;\n videoTypeBadgeSize?: 'sm' | 'std';\n hideDuration?: boolean;\n audience?: Audience;\n newDurationStyle?: boolean;\n hideRating?: boolean;\n}\n\ninterface PureStaticVideoThumbnailProps extends BaseStaticVideoThumbnailProps {\n type: 'static';\n}\n\n/**\n * Allows us to have loose types when we only want to display a thumbnail\n * without any of the functionality - Sha\n */\ninterface CosmeticVideoThumbnailProps extends Partial<BaseStaticVideoThumbnailProps> {\n type: 'cosmetic';\n}\n\nexport type StaticVideoThumbnailProps = PureStaticVideoThumbnailProps | CosmeticVideoThumbnailProps;\n\nexport type VideoThumbnailProps = ExpandableVideoThumbnailProps |\n StaticVideoThumbnailProps |\n PopoutVideoThumbnailProps |\n CosmeticVideoThumbnailProps;\n\nVideoThumbnail.defaultProps = {\n hideRating: true,\n size: 'md',\n hoverToPlay: true\n};\n\nexport function VideoThumbnail(props: VideoThumbnailProps): JSX.Element {\n switch (props.type) {\n case 'static':\n return <StaticVideoThumbnail {...props} />;\n case 'cosmetic':\n // No hover to play for cosmetic use of VideoThumbnail\n return <StaticVideoThumbnail {...props} hoverToPlay={false} />;\n case 'expandable':\n // Expandable thumbnails show metadata on hover. Static display the duration and don't expand on hover\n return <ExpandableVideoThumbnail {...props} />;\n case 'popout':\n return <PopoutVideoThumbnail {...props} />;\n default:\n return;\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"topLeftContainer\":\"iwBld\",\"draft\":\"QBpxh\",\"badge\":\"KcvGx\",\"svg\":\"gW733\",\"text\":\"QiH5Q\",\"sm\":\"tn2BH\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './type-badge.scss';\n\nconst namespace = 'shared.typeBadge';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getText(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Clip:\n return getPhrase('clip');\n case MasterType.Interactive:\n return getPhrase('interactive');\n case MasterType.Resource:\n return getPhrase('resource');\n default:\n return '';\n }\n}\n\nfunction getIcon(typeId: MasterType): string {\n switch (typeId) {\n case MasterType.Clip:\n return cvSvgLibrary.Clip;\n case MasterType.Interactive:\n return cvSvgLibrary.Interactive;\n case MasterType.Resource:\n return cvSvgLibrary.Resources;\n default:\n return '';\n }\n}\n\nfunction getColourClass(typeId: MasterType, status: CurationStatus): string {\n switch (typeId) {\n case MasterType.Clip:\n return 'bg-dark-blue';\n case MasterType.Interactive:\n return status === CurationStatus.Draft ? styles.draft : 'bg-green';\n case MasterType.Resource:\n return 'bg-indigo';\n default:\n return '';\n }\n}\n\ninterface TypeBadgeProps {\n typeId: MasterType;\n status?: CurationStatus;\n size?: 'sm' | 'md';\n inContainer?: boolean;\n}\n\nTypeBadge.default = {\n size: 'md'\n};\n\nexport function TypeBadge(props: TypeBadgeProps): JSX.Element {\n const baseClasses = `${styles.badge} rounded-pill text-white ps-0 ${props.size === 'sm' ? styles.sm : ''}`;\n\n return (\n <div className={props.inContainer ? '' : styles.topLeftContainer}>\n <div className={`${baseClasses} ${getColourClass(props.typeId, props.status)}`}>\n <SvgContainer\n className={`svg-container d-block ${styles.svg}`}\n size={props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard}\n svgName={getIcon(props.typeId)}\n />\n <span className={styles.text}>\n {getText(props.typeId)}\n </span>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, UserAction } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceTag } from 'libs/shared/components/video-guidance/tag/VideoGuidanceTag';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.interactivesTag';\n\ninterface InteractivesTagProps {\n video: VideoTypes;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function InteractivesTag(props: InteractivesTagProps): JSX.Element {\n if (!props.video || VideoHelper.isInteractive(props.video))\n return <></>;\n\n const interactiveCount = props.video.interactives?.data?.length || 0;\n\n if (!interactiveCount)\n return <></>;\n\n return (\n <VideoGuidanceTag\n svgName={cvSvgLibrary.Interactive}\n iconVariant='green'\n text={LanguageService.getPhrase(namespace, 'interactives', { smartCount: interactiveCount })}\n appLink={props.appLink}\n appLinkAnalyticsData={{\n videoGuidanceType: 'interactive',\n videoGuidanceTotalItems: interactiveCount,\n ...props.analyticsData\n }}\n appLinkAnalyticsOptions={{\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n ...props.analyticsOptions\n }}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, UserAction } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceTag } from 'libs/shared/components/video-guidance/tag/VideoGuidanceTag';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'shared.resourcesTag';\n\ninterface ResourcesTagProps {\n video: VideoTypes;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function ResourcesTag(props: ResourcesTagProps): JSX.Element {\n if (!props.video || VideoHelper.isInteractive(props.video))\n return <></>;\n\n const resourceCount = (\n (props.video.resources?.data?.length || 0) +\n (props.video.links?.data?.length || 0)\n );\n\n if (!resourceCount)\n return <></>;\n\n return (\n <VideoGuidanceTag\n svgName={cvSvgLibrary.Resources}\n iconVariant='indigo'\n text={LanguageService.getPhrase(namespace, 'resources', { smartCount: resourceCount })}\n appLink={props.appLink}\n appLinkAnalyticsData={{\n videoGuidanceType: 'resource',\n videoGuidanceTotalItems: resourceCount,\n ...props.analyticsData\n }}\n appLinkAnalyticsOptions={{\n actionType: UserAction.Click,\n entity: VideoHelper.getAnalyticsEntity(props.video),\n ...props.analyticsOptions\n }}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"OjHQZ\",\"icon\":\"SS2zL\",\"active\":\"kD1xM\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\n\nimport { AppLink } from '../../app-link/AppLink';\n\nimport styles from './video-guidance-tag.scss';\n\ninterface VideoGuidanceTagProps {\n text: string;\n svgName: string;\n iconVariant: string;\n active?: boolean;\n appLink?: Core.AppLink;\n appLinkAnalyticsData?: HashObject;\n appLinkAnalyticsOptions?: AnalyticsOptions;\n}\n\nfunction ContainerWrapper(props: VideoGuidanceTagProps): JSX.Element {\n if (props.appLink) {\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.appLinkAnalyticsData}\n analyticsOptions={props.appLinkAnalyticsOptions}\n className={`\n p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer\n text-decoration-none ${styles.tag} ${props.active ? styles.active : ''}\n `}\n >\n <VideoGuidanceTag {...props} />\n </AppLink>\n );\n }\n\n return <VideoGuidanceTag {...props} />;\n}\n\nfunction VideoGuidanceTag(props: VideoGuidanceTagProps): JSX.Element {\n return (\n <>\n <SvgContainer\n className={`${styles.icon} rounded-circle bg-${props.iconVariant} text-white`}\n svgName={props.svgName}\n />\n\n <span className='ps-1 text-nowrap user-select-none'>\n {props.text}\n </span>\n </>\n );\n}\n\nexport { ContainerWrapper as VideoGuidanceTag };","import React from 'react';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface RestrictionPadlockProps {\n tooltip?: string;\n className?: string;\n tooltipPlacement?: Placement\n size?: VideoItemSize;\n video: VideoTypes;\n yearGroups: YearGroup[];\n}\n\nexport function RestrictionPadlock(props: RestrictionPadlockProps): JSX.Element {\n if (!props.yearGroups)\n return <></>;\n\n const title = RestrictionHelper.mapRestrictionToText(props.video._restrictions, props.yearGroups);\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n if (!canConsume || !title)\n return <></>;\n\n return (\n <Tooltip\n spanHack\n spanHackClassName={props.className || 'd-inline-block ps-1'}\n title={title}\n placement={props.tooltipPlacement || 'top'}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Lock}\n size={props.size === 'sm' ? SvgContainerSize.Small : SvgContainerSize.Standard}\n />\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"hoverContainer\":\"TzWQw\",\"hovering\":\"gdTcW\"};","import React from 'react';\nimport { OutPortal } from 'react-reverse-portal';\n\nimport { PlayerInitializationData } from 'libs/shared/context/player-context/interfaces/PlayerContextAction';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\n\nimport styles from './global-player-consumer.scss';\n\ninterface GlobalPlayerConsumerOptions extends PlayerInitializationData {\n location?: 'popout-video' | 'play-page';\n}\n\nexport function GlobalPlayerConsumer(props: GlobalPlayerConsumerOptions): JSX.Element {\n const playerContext = usePlayerContext();\n\n playerContext.useInitialize?.(props);\n\n if (!playerContext.hasProvider)\n return <></>;\n\n if (playerContext.mode === 'picture-in-picture')\n return <></>;\n\n if (props.mode === 'hover' && playerContext.isOnPlayPage)\n return <></>;\n\n if (playerContext.mode === 'default' || props.location === 'play-page')\n return <OutPortal node={playerContext.portalNode} />;\n\n /**\n * When hovering, we don't want to show the player until the video has started playing.\n */\n const shouldShow = playerContext.started;\n\n let rounding = 'rounded-3';\n if (props.location === 'popout-video')\n rounding = 'rounded-top-3';\n\n const className = `${styles.hoverContainer} ${shouldShow ? styles.hovering : ''} ${rounding} overflow-hidden`;\n\n return (\n <div className={className}>\n <OutPortal node={playerContext.portalNode} />\n </div>\n );\n}","export enum ThumbnailTextPosition {\n Below = 1,\n Overlay = 2,\n Independent = 3\n}","export enum PlayPageAnchor {\n Resources = 'resources',\n Interactives = 'interactives'\n}"],"names":["AudienceLabel","props","audience","className","border","name","BadgeListContainer","children","CheckMarkStatus","CheckMarkButton","status","Complete","isComplete","setIsComplete","style","None","FunctionHelper","setStatus","DivButton","onClick","shouldComplete","newStatus","Incomplete","disabled","SvgContainer","svgName","defaultProps","MaskType","Mask","type","size","typeClass","Video","Playlist","getClassByType","svgType","getSvgType","defaults","ThumbnailText","video","appLink","subTextAppLink","canNavigate","VideoHelper","VideoSubText","subTextType","analyticsOptions","location","AppLink","RestrictionPadlock","yearGroups","getPhrase","LanguageService","FavouriteButton","alerts","initialState","isFavourite","setIsFavourite","setFavourite","canFavourite","shouldFavourite","error","analyticsData","VideoWatchProgressBar","progress","watchPercentage","duration","width","VideoThumbnailBottomBar","ThumbnailPadlock","svgSize","S","ThumbnailCompanyLogo","companyLogoFallbackUrl","company","productionCompanies","data","url","logo","Tooltip","title","spanHack","backgroundImage","VideoTypeBadge","TypeBadge","typeId","MasterType","inContainer","getTitleClass","hovering","ExpandableVideoThumbnail","imageOptions","preload","hoverToPlay","canConsume","appLinkParams","ObjectHelper","params","eventAnalyticsOptions","entity","showFavouriteButton","isVideo","rating","delay","thumbnailHoverRef","showThumbnailPreviewVideo","spanHackClassName","ref","BaseImage","imageType","alt","series","id","actionType","descriptor","ImageFallback","Badge","hasSubtitle","hasInteractives","GlobalPlayerConsumer","key","objectId","objectTypeId","mode","context","contextId","moviesAndTv","mtv","VideoThumbnailBadges","showAudience","showRating","hideRating","hideDuration","newDurationStyle","PopoutVideo","isHovering","getGuidanceAppLink","scrollToPosition","scrollTo","cleanPortalNode","extraClasses","hideTitle","showVideoGuidance","ResourcesTag","PlayPageAnchor","InteractivesTag","PopoutVideoThumbnail","HoverToPortalContainer","hoverableComponent","componentProps","fixedHoverWidth","minHoverWidth","VideoThumbnailActions","setCheckMarkStatus","hasActions","checkMarkStatus","textPosition","textIsOverlayed","ThumbnailTextPosition","StaticVideoThumbnail","hoverRef","hoverIntentRef","isHoveringIntentionally","showMask","hideMask","tooltip","showSignIn","r","current","imageClassName","getThumbnailClass","VideoThumbnail","getIcon","getColourClass","CurationStatus","baseClasses","getText","namespace","interactiveCount","interactives","length","iconVariant","text","smartCount","appLinkAnalyticsData","videoGuidanceType","videoGuidanceTotalItems","appLinkAnalyticsOptions","resourceCount","resources","links","ContainerWrapper","active","VideoGuidanceTag","_restrictions","placement","tooltipPlacement","playerContext","useInitialize","hasProvider","isOnPlayPage","node","portalNode","shouldShow","started","rounding"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 6741-dadd4903a8-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6741],{3278:(e,t,n)=>{n.d(t,{z:()=>p});var r=n(32735),a=n(39202),i=n(23481),o=n(65858),c=n(38502),l=n(83345),s=n(96787);const u={pillTab:"bMJM0"};var d="discover.header";function p(e){var t,n,p,f,h,m;if(!e.type)return r.createElement(r.Fragment,null);if(e.type===s.Yv.Learner||e.hasStudentExperience)return r.createElement("div",{className:"py-3"},r.createElement("h1",{className:"h2 mb-0"},r.createElement(l.x,{namespace:d,phrase:"heading"})));var v=[{name:i.T.getPhrase(d,"forYou"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.forYou,active:"forYou"===e.active,analyticsData:{name:i.T.getPhrase(d,"forYou"),url:a.C$.getHref(null===(n=e.appLinks)||void 0===n?void 0:n.forYou)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:i.T.getPhrase(d,"whatsNew"),appLink:null===(p=e.appLinks)||void 0===p?void 0:p.whatsNew,active:"whatsNew"===e.active,analyticsData:{name:i.T.getPhrase(d,"whatsNew"),url:a.C$.getHref(null===(f=e.appLinks)||void 0===f?void 0:f.whatsNew)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}];return e.showCalendar&&v.push({name:i.T.getPhrase(d,"calendar"),appLink:null===(h=e.appLinks)||void 0===h?void 0:h.calendar,active:"calendar"===e.active,analyticsData:{name:i.T.getPhrase(d,"calendar"),url:a.C$.getHref(null===(m=e.appLinks)||void 0===m?void 0:m.calendar)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}),r.createElement("div",{className:"py-3 text-center"},r.createElement(c.r,{tabs:v,className:u.pillTab}))}},38502:(e,t,n)=>{n.d(t,{r:()=>s});var r=n(32735),a=n(49985),i=n(36848),o=n(18559),c=n(11607),l=n(87432);function s(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:""},r.createElement("ul",{className:"list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector)},e.tabs.map((function(e){return r.createElement("li",{className:"p-0 ".concat(e.active?"btn btn-dark":"btn btn-outline-dark"),key:e.name},e.appLink?r.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"cursor-pointer d-flex justify-content-center text-decoration-none text-reset px-2 ".concat(l.Z.pillItem)},e.name,"number"==typeof e.count&&r.createElement("div",{className:"ps-2"},r.createElement(o.C,{type:o.g.Count,data:e.count}))):r.createElement(c.L,{className:"".concat(l.Z.pillItem," d-flex justify-content-center p-2"),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},e.name,"number"==typeof e.count&&r.createElement("div",{className:"ps-2"},r.createElement(o.C,{type:o.g.Count,data:e.count}))))}))))}},16741:(e,t,n)=>{n.r(t),n.d(t,{CuratedDiscoverView:()=>K});var r=n(32735),a=n(23481),i=n(57900),o=n(20354),c=n(2948),l=n(49985),s=n(65858),u=n(75896),d=n(3278),p=n(61032),f=n(16714),h=n(96787),m=n(21366),v=n(23232),y=n(83345),g=n(76177),b=n(35223),w="subjects.discoverDashboardEmptyState",L=a.T.encloseNamespace(w);function E(e){var t,n,i=(null===(t=e.dashboard)||void 0===t?void 0:t.status)===h.GL.Archived;return r.createElement(v.u,null,r.createElement(v.u.Image,{src:e.imageUrl,altText:L("info")}),r.createElement(v.u.Heading,null,r.createElement(y.x,{namespace:w,phrase:"heading"})),r.createElement(v.u.Info,null,r.createElement(y.x,{namespace:w,phrase:"info"})),r.createElement(g.u,{title:i?a.T.getPhrase(w,"archivedCtaTooltip"):"",spanHack:!0},r.createElement(v.u.Cta,{text:a.T.getPhrase(w,"add"),appLink:null===(n=e.addWidgetApplink)||void 0===n?void 0:n.call(e),className:"btn btn-dark",icon:b.vn.Plus,disabled:i})))}function T(e){var t,n,a=u.m.sortBy(null===(t=e.dashboard)||void 0===t?void 0:t.widgets,"index");function i(t,n,r){var a=m.S.getWidgetParams(n,r,m.S.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,a,r,e.presentation)}var o=e.isReadonly&&!(null==a?void 0:a.length);return r.createElement(r.Fragment,null,r.createElement(d.z,{type:null===(n=e.dashboard)||void 0===n?void 0:n.userType,appLinks:e.headerAppLinks,hasStudentExperience:e.hasPermissions(f.C.StudentExperience),showCalendar:e.showCalendar,active:"forYou"}),a.map((function(t,n){return r.createElement(p.L,{key:t.id,id:t.id,imageCdnUrl:e.imageCdnUrl,getContentRequest:i,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,setFavourite:e.setFavourite,canFavourite:e.canFavourite,resourceThumbnailFallbackImageUrl:e.resourceThumbnailFallbackImageUrl,preferences:t.preferences,appLinks:e.widgetAppLinks,isScrollToTargetWidget:(null==e?void 0:e.scrollToWidgetId)===t.id,widgetTypeId:t.widgetId,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,onSubmitFeedback:e.onSubmitFeedback,updatePreferences:e.updatePreferences,yearGroups:e.yearGroups,lazyLoad:e.lazyLoad,dashboardTarget:h.ku.Discover,widgetIndex:n,jobTitle:e.jobTitle,isPreviewing:e.isReadonly,imageUrls:e.imageUrls,settings:e.settings})})),o&&r.createElement(E,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard}))}var S=n(38143),A=n(72639),C=n(39151),k=n(1666),O=n(80889),N=n(98064),D=n(61699),I=n(31949),x=n(22902),P=n(79612),F=n(37802),U=n(69454),_=n(76753),j=n(73417),R=n(99742),B=n(52333),H=n(27638),M=n(85369),W=n(23737),G=n(33192),V=n(48688),Y=n(27051);function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}function z(){z=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var i=t&&t.prototype instanceof y?t:y,o=Object.create(i.prototype),c=new D(r||[]);return a(o,"_invoke",{value:C(e,n,c)}),o}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var p="suspendedStart",f="suspendedYield",h="executing",m="completed",v={};function y(){}function g(){}function b(){}var w={};s(w,o,(function(){return this}));var L=Object.getPrototypeOf,E=L&&L(L(I([])));E&&E!==n&&r.call(E,o)&&(w=E);var T=b.prototype=y.prototype=Object.create(w);function S(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function A(e,t){function n(a,i,o,c){var l=d(e[a],e,i);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Z(u)&&r.call(u,"__await")?t.resolve(u.__await).then((function(e){n("next",e,o,c)}),(function(e){n("throw",e,o,c)})):t.resolve(u).then((function(e){s.value=e,o(s)}),(function(e){return n("throw",e,o,c)}))}c(l.arg)}var i;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return i=i?i.then(a,a):a()}})}function C(t,n,r){var a=p;return function(i,o){if(a===h)throw Error("Generator is already running");if(a===m){if("throw"===i)throw o;return{value:e,done:!0}}for(r.method=i,r.arg=o;;){var c=r.delegate;if(c){var l=k(c,r);if(l){if(l===v)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===p)throw a=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=h;var s=d(t,n,r);if("normal"===s.type){if(a=r.done?m:f,s.arg===v)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(a=m,r.method="throw",r.arg=s.arg)}}}function k(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,k(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),v;var i=d(a,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,v;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function D(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function I(t){if(t||""===t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,i=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(Z(t)+" is not iterable")}return g.prototype=b,a(T,"constructor",{value:b,configurable:!0}),a(b,"constructor",{value:g,configurable:!0}),g.displayName=s(b,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,s(e,l,"GeneratorFunction")),e.prototype=Object.create(T),e},t.awrap=function(e){return{__await:e}},S(A.prototype),s(A.prototype,c,(function(){return this})),t.AsyncIterator=A,t.async=function(e,n,r,a,i){void 0===i&&(i=Promise);var o=new A(u(e,n,r,a),i);return t.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},S(T),s(T,l,"Generator"),s(T,o,(function(){return this})),s(T,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=I,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(N),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],c=o.completion;if("root"===o.tryLoc)return a("end");if(o.tryLoc<=this.prev){var l=r.call(o,"catchLoc"),s=r.call(o,"finallyLoc");if(l&&s){if(this.prev<o.catchLoc)return a(o.catchLoc,!0);if(this.prev<o.finallyLoc)return a(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return a(o.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return a(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),N(n),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;N(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:I(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),v}},t}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var q=function(e,t,n,r){return new(n||(n=Promise))((function(a,i){function o(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,c)}l((r=r.apply(e,t||[])).next())}))},J=a.T.encloseNamespace("dashboard.dashboard");function K(e){var t,n,a,u,d,p,m,v,y=o.a.useBasicFetch(C.L.config()),g=o.a.useBasicFetch(I.N.currentUser()),b=o.a.useBasicFetch((null===(t=g.data)||void 0===t?void 0:t.isAuthenticated)&&I.N.user(g.data.id)),w=(0,x.T)(),L=w.hasLocalPermissions,E=w.hasPermissions,Z=o.a.useBasicFetch(L(f.E.ManageDiscoverPreferences)&&g.data&&k.h.customer(g.data.customerId)),K=o.a.useBasicFetch((null===(n=g.data)||void 0===n?void 0:n.isAuthenticated)&&k.h.yearGroups(g.data.customerId)),Q=o.a.useBasicFetch((null===(a=g.data)||void 0===a?void 0:a.isAuthenticated)&&N.D.libraries()),X=(0,W.y)({targetType:h.ku.Discover,queryParams:e.queryParams,presentationSlug:e.presentationSlug}),ee=X.dashboard,te=X.presentation,ne=X.audiences,re=o.a.useGetFetchAsync(),ae=(0,F.r)(null),ie=(0,H.u)(s.LZ.Dashboard),oe=ie.setFavourite,ce=ie.canFavourite,le=(m=(0,c.D)(S.g.AUDIENCE_FILTER,void 0,{storage:i.Z1.SessionStorage}),v=1,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(m,v)||function(e,t){if(e){if("string"==typeof e)return $(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$(e,t):void 0}}(m,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],se=(0,Y.E)(U.T.getAudienceParams(le)),ue=function(e){return+A.p[null==e?void 0:e.learningLevel]===A.p.Level_1?"VariantOne":"VariantTwo"}(te);(0,P.M)(_.CG.getDiscoverMetadata({content:te,phraseContext:{phraseHandler:J,titlePhrase:"pageTitle".concat(ue),descriptionPhrase:"pageDescription".concat(ue)},canonicalLink:G.f.getCanonicalLink(),allowIndexing:G.f.allowIndexing(),hrefLang:G.f.getStaticRouteHrefLang(null==te?void 0:te.learningLevel,se.discover)}));var de=(0,M.N)().showCalendar;return r.createElement("div",{className:"bg-white px-4"},r.createElement(j.T,null),r.createElement(T,{currentUser:g.data,dashboard:ee.data,widgetAppLinks:se,headerAppLinks:(0,Y.u)(),presentation:te,imageCdnUrl:y.data.imageCdnUrl,resourceThumbnailFallbackImageUrl:R.W.Fallbacks.RESOURCE_THUMBNAIL,getWidgetContentRequest:function(){for(var e=V.g.hasTwig(Q.data,g.data),t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return O._.discoverWidgetContent.apply(O._,[e].concat(n))},setFavourite:oe,audiences:ne.data,canFavourite:ce,updatePreferences:function(e,t,n,r){return q(this,void 0,void 0,z().mark((function t(){var a,i;return z().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r.filter((function(e){return!e.hidden&&n.find((function(t){return t.id===e.id})).hidden})),i=r.filter((function(e){return!!e.hidden&&!n.find((function(t){return t.id===e.id})).hidden})),!(null==a?void 0:a.length)){t.next=5;break}return t.next=5,re(D.o.followSubjects(a.map((function(e){return e.id}))));case 5:if(!(null==i?void 0:i.length)){t.next=8;break}return t.next=8,re(D.o.unfollowSubjects(i.map((function(e){return e.id}))));case 8:return t.abrupt("return",re(O._.updateWidgetPreferences(e,r.map((function(e){return{id:e.id,index:e.index}})),g.data)));case 9:case"end":return t.stop()}}),t)})))},hasPermissions:E,hasLocalPermissions:L,onSubmitFeedback:E(f.C.CanSubmitFeedback)&&function(e){var t=re(B.n.sendDiscoverFooterFeedback(e,g.data,Z.data,te,ee.data,E(f.C.StudentExperience)));return l.k.logUserAction({feedbackType:e.type,content:e.content,presentationId:te.id,dashboardId:ee.data.id},{actionType:s.Vw.Submit,location:s.LZ.DiscoverFooter,entity:s.py.Feedback,workflowPhase:s.eu.Complete}),t},yearGroups:K.data,lazyLoad:!G.f.isBot(),showCalendar:de,jobTitle:null===(p=null===(d=null===(u=b.data)||void 0===u?void 0:u.userProfile)||void 0===d?void 0:d.metadata)||void 0===p?void 0:p.jobTitle,imageUrls:{onboardingAdminBackgroundFull:R.W.OnboardingV2.Widget.ADMIN_BACKGROUND_FULL,onboardingAdminBackground:R.W.OnboardingV2.Widget.ADMIN_BACKGROUND,onboardingTeacherBackground:R.W.OnboardingV2.Widget.TEACHER_BACKGROUND},settings:ae}))}},27051:(e,t,n)=>{n.d(t,{E:()=>f,u:()=>h});var r=n(75896),a=n(28400),i=n(17475),o=n(183),c=n(14070),l=n(97291),s=n(22490),u=n(67963),d=n(82431),p="classification-latest-releases";function f(e){return{classification:function(t){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION,args:[null==t?void 0:t.id,a.m.slugify(null==t?void 0:t.name)],params:e||{}}},classificationTopics:function(){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION_TOPICS,params:e||{}}},videoType:function(e,t){return s.W.getAppLink(e,Object.assign(Object.assign({},t),{context:o.Q.Widget}))},series:d.j.getSeriesAppLink,subText:function(e){return d.j.getSeriesAppLink(e.series)},playlist:function(e){return{application:l.O.PLAYLISTS,action:c.e.Playlists.PLAYLIST,args:[e.id,a.m.slugify(e.name)]}},latestReleases:function(){return{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES}},allTopics:function(){return{application:l.O.SUBJECT,action:c.e.Subjects.CLASSIFICATION_ALL}},classificationLatestReleases:function(e){return e.id===p?{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES}:{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CLASSIFICATION_UPDATE,args:[e.id,a.m.slugify(e.name)]}},widgetVideoList:function(e,t){return{application:l.O.DASHBOARD,action:c.e.Dashboard.DASHBOARD,args:[e,a.m.slugify(t)]}},watchHistory:function(){return{application:l.O.WATCH_HISTORY,action:c.e.WatchHistory.HOME}},rating:function(e,t){return{application:l.O.SEARCH,action:c.e.Search.HOME,params:{moviesAndTv:!0,rating:i.S.getFrontendParamValue([r.m.first(t),e])}}},company:function(e){return{application:l.O.MOVIES_AND_TV,action:c.e.MoviesAndTv.COMPANY_DASHBOARD,args:[e.id,a.m.slugify(e.name)]}},discover:function(){return{application:l.O.DASHBOARD,action:c.e.Dashboard.HOME}},calendar:function(){return{application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR}},calendarMonth:function(e,t){var n={application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR_MONTH,args:[e.toLowerCase()]};return t&&(n.params={year:t}),n},onboardingStep:function(e){return(0,u.u)()[e]},onboardingAppLinks:function(){return(0,u.u)()}}}function h(){return{forYou:{application:l.O.DASHBOARD,action:c.e.Dashboard.HOME},whatsNew:{application:l.O.CONTENT_UPDATES,action:c.e.ContentUpdates.CONTENT_UPDATES},calendar:{application:l.O.CALENDAR,action:c.e.Calendar.CALENDAR}}}},73417:(e,t,n)=>{n.d(t,{T:()=>u});var r=n(32735),a=n(11607),i=n(83914),o=n(83345),c=n(87348),l=n(35223),s="shared.upgradeFeedbackBanner";function u(){var e=(0,c.Q)(),t=e.showFeedbackBanner,n=e.dismissFeedbackBanner;return t?r.createElement("div",{className:"alert bg-light-blue p-2 rounded text-info fw-semibold d-flex justify-content-between align-items-center"},r.createElement(o.x,{namespace:s,phrase:"message",options:{url:"https://www.clickvieweducation.com/en-au/blog/product/exchange-tv-new-look"}}),r.createElement(a.L,{onClick:n},r.createElement(i.x,{svgName:l.vn.Close,className:"ms-2 svg-container"}))):r.createElement(r.Fragment,null)}},52333:(e,t,n)=>{n.d(t,{n:()=>c});var r=n(99940),a=n(19808),i=n(86613);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var c={sendDiscoverFooterFeedback:function(e,t,n,r,a,i){var o=e.content.split("\n").join("<br />");return l("Discover Footer Feedback","\n <b>Type:</b> ".concat("positive"===e.type?"Positive":"Negative","\n <br />\n <b>Location:</b> Discover Footer\n <br />\n <b>Presentation:</b> ").concat(r.description," (ID: ").concat(r.id,")\n <br />\n <b>Dashboard:</b> ").concat(a.name," (ID: ").concat(a.id,")\n <br />\n ").concat(s(t,n,i),"\n <br />\n <b>Feedback:</b>\n <br />\n ").concat(o,"\n "),t,["discover",i?"student":"staff"])},sendTopicFooterFeedback:function(e,t,n,r,a,i,o){var c=e.content.split("\n").join("<br />");return l("Topic Footer Feedback","\n <b>Type:</b> ".concat("positive"===e.type?"Positive":"Negative","\n <br />\n <b>Location:</b> Topic Footer\n <br />\n <b>Presentation:</b> ").concat(r.description," (ID: ").concat(r.id,")\n <br />\n <b>Classification:</b> ").concat(a.name," (ID: ").concat(a.id,")\n <br />\n <b>Dashboard:</b> ").concat(i.name," (ID: ").concat(i.id,")\n <br />\n ").concat(s(t,n,o),"\n <br />\n <b>Feedback:</b>\n <br />\n ").concat(c,"\n "),t,["topics",o?"student":"staff"])}};function l(e,t,n,c){var l,s=["new product","in product feedback"].concat(function(e){if(Array.isArray(e))return o(e)}(l=c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());n.role===i.i.Admin&&s.push("administrator");var u=function(e){switch(e){case a.b.AU:return"au";case a.b.NZ:return"nz";case a.b.UK:return"uk";case a.b.US:return"us"}}(n.instanceRegion);return u&&s.push(u),{url:"/api/productboard/notes",key:"productboard:feedback",data:{title:e,content:t,user:{email:n.emailVerified?n.email:""},tags:s},type:r.k.POST}}function s(e,t,n){return"\n <b>User:</b>\n <br />\n <li>ID: ".concat(e.id,"</li>\n <li>Username: ").concat(e.username,"</li>\n <li>Email: ").concat(e.email,"</li>\n <li>User Type / Role: ").concat(function(e,t){return t?"Learner":e.role===i.i.Admin?"Admin":"Staff"}(e,n),"</li>\n <li>Customer ID: ").concat(e.customerId,"</li>\n <li>CVC ID: ").concat(t.crmId,"</li>\n <li>Customer Name: ").concat(t.name,"</li>\n <li>Instance Region: ").concat(e.instanceRegion,"</li>\n <li>Content Region: ").concat(e.contentRegion,"</li>\n ")}},85369:(e,t,n)=>{n.d(t,{N:()=>y});var r=n(32735),a=n(35242),i=n(20354),o=n(27022),c=n(72639),l=n(31949),s=n(37802),u=n(10144),d=n(86698);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v=m(m(m(m(m(m({},o.t.AU,[c.p.Level_1]),o.t.US,[c.p.Level_1]),o.t.UK,[c.p.Level_1]),o.t.SCOT,[c.p.Level_1]),o.t.NZ,[]),o.t.GLOBAL,[]);function y(){var e,t=(0,s.r)(null),n=t.hasSpecialEventCalendar,o=t.isLoadingSettings,c=(0,d.y)({redirectOnError:!0}).activePresentation,p=i.a.useBasicFetch(l.N.currentUser()),h=v[null===(e=p.data)||void 0===e?void 0:e.contentRegion],m=u.i.getMappedPresentationLevel(null==c?void 0:c.learningLevel),y=!(null==h?void 0:h.find((function(e){return e.toString()===(null==m?void 0:m.toString())}))),g=!o&&!n,b=f(r.useState(!g&&!y),2),w=b[0],L=b[1],E=f(r.useState(o||!(null==c?void 0:c.id)),2),T=E[0],S=E[1];return r.useEffect((function(){g||y?L(!1):T||L(!0),S(o||!(null==c?void 0:c.id))}),[n,null==c?void 0:c.id,T]),a.h.isDevelopment?{showCalendar:!0,isLoading:!1}:{showCalendar:w,isLoading:T}}},87432:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",pillItem:"hUJx1"}}}]);
3
+ //# sourceMappingURL=6741-dadd4903a8-lite.chunk.js.map