{"version":3,"file":"CampaignHero-Chunk-9c523db0ab68355257e0.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Video/Video.tsx","webpack://nikon-client/./components/molecules/InViewVideo/InViewVideo.tsx","webpack://nikon-client/./components/organisms/CampaignHero/CampaignHero.tsx","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/viewport/index.mjs","webpack://nikon-client/./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/utils/use-in-view.mjs"],"sourcesContent":["import loadable from '@loadable/component';\nimport { AspectRatioType } from '@models/IAspectRatio';\nimport { IVideoAttributes } from '@models/IVideoAttributes';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport classNames from 'classnames';\nimport { motion, MotionValue } from 'framer-motion';\nimport {\n ChangeEvent,\n ForwardedRef,\n forwardRef,\n useEffect,\n useState,\n} from 'react';\nimport { Config } from 'react-player';\n\nconst ReactPlayer = loadable(\n () => import(/* webpackChunkName: \"react-player\" */ 'react-player')\n);\n\ninterface Props {\n readonly classes?: string;\n readonly config?: Config;\n readonly controls?: boolean;\n readonly epiEdit?: string;\n readonly isPlaying?: boolean;\n readonly title?: string;\n readonly url?: string;\n readonly videoAttributes?: IVideoAttributes;\n readonly videoRatio?: AspectRatioType;\n readonly videoSource?: string;\n readonly videoWrapperOpacityProgress?: MotionValue;\n readonly onEndedVideo?: () => void;\n readonly onVideoReady?: () => void;\n readonly onVideoStart?: () => void;\n readonly onVolumeChange?: (videoElement: HTMLVideoElement) => void;\n readonly setIsPlaying?: (playing: boolean) => void;\n}\n\nconst Video = forwardRef(\n (\n {\n classes,\n config,\n controls = true,\n epiEdit,\n isPlaying,\n title,\n videoAttributes,\n videoRatio = 'aspect-video',\n videoSource,\n videoWrapperOpacityProgress,\n onEndedVideo,\n onVideoReady,\n onVideoStart,\n onVolumeChange,\n setIsPlaying,\n }: Props,\n ref\n ) => {\n const [prevProgress, setPrevProgress] = useState(0);\n const [isBrowser, setIsBrowser] = useState(false);\n\n useEffect(() => {\n setIsBrowser(typeof window !== 'undefined');\n }, []);\n\n useEffect(() => {\n setPrevProgress(0);\n }, [title]);\n\n const handleProgressUpdate = (progress: string) => {\n updateDataLayer({\n event: 'videoInteraction',\n video_interaction: 'video_progress',\n video_progress: progress,\n video_title: title,\n });\n };\n\n const handleVideoAction = (action: string) => {\n updateDataLayer({\n event: 'videoInteraction',\n video_interaction:\n action === 'START' ? 'video_start' : 'video_complete',\n video_progress: action === 'START' ? 'video_start' : 'video_complete',\n video_title: title,\n });\n };\n\n const updateVideoProgressData = (progress: number) => {\n if (prevProgress < 0.25 && progress > 0.25) {\n handleProgressUpdate('25%');\n }\n if (prevProgress < 0.5 && progress > 0.5) {\n handleProgressUpdate('50%');\n }\n if (prevProgress < 0.75 && progress > 0.75) {\n handleProgressUpdate('75%');\n }\n if (prevProgress > 0.9 && progress < 0.1) {\n handleVideoAction('COMPLETE');\n }\n setPrevProgress(progress);\n };\n\n if (!videoSource) return null;\n\n return (\n }\n className={classNames(classes, videoRatio, 'w-full')}\n data-epi-property-name={epiEdit}\n data-testid={isPlaying ? 'video-playing' : 'video-paused'}\n style={{\n opacity: videoWrapperOpacityProgress ?? 1,\n }}\n >\n {isBrowser && (\n updateVideoProgressData(played)}\n onStart={() => {\n onVideoStart?.();\n handleVideoAction('START');\n }}\n onEnded={() => {\n onEndedVideo?.();\n handleVideoAction('COMPLETE');\n }}\n onPause={() => setIsPlaying?.(false)}\n onPlay={() => setIsPlaying?.(true)}\n onReady={onVideoReady}\n config={config}\n onVolumeChange={(event: ChangeEvent) => {\n onVolumeChange?.(event.target);\n }}\n {...videoAttributes}\n />\n )}\n \n );\n }\n);\n\nexport default Video;\n","import Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport Video from '@atoms/Video/Video';\nimport { AspectRatioType } from '@models/IAspectRatio';\nimport { IImage } from '@models/IImage';\nimport { IMeta } from '@models/IMeta';\nimport { IVideo } from '@models/IVideo';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion, MotionValue, useInView } from 'framer-motion';\nimport { RefObject, useEffect, useRef, useState } from 'react';\n\ninterface Props {\n readonly autoPlay?: boolean;\n readonly controls?: boolean;\n readonly coverImage?: IImage;\n readonly dataTestId?: string;\n readonly hasInVideoPlayButton?: boolean;\n readonly inVideoPlayButtonClassName?: string;\n readonly inVideoPlayButtonPositionClassName?: string;\n readonly inVideoPlayButtonTabIndex?: number;\n readonly inViewThreshold?: number;\n readonly meta?: IMeta;\n readonly playOnCoverClick?: boolean;\n readonly video: IVideo;\n readonly videoClasses?: string;\n readonly videoRatio?: AspectRatioType;\n readonly videoWrapperOpacityProgress?: MotionValue;\n readonly wrapperClasses?: string;\n readonly onFocusCallback?: (e: React.FocusEvent) => void;\n}\n\nconst InViewVideo = ({\n autoPlay = false,\n controls,\n coverImage,\n dataTestId = 'In-View-Video',\n hasInVideoPlayButton,\n inVideoPlayButtonClassName,\n inVideoPlayButtonPositionClassName = 'bottom-5 left-5',\n inVideoPlayButtonTabIndex = 0,\n inViewThreshold = 0.5,\n meta,\n onFocusCallback,\n playOnCoverClick = true,\n video,\n videoClasses,\n videoRatio,\n videoWrapperOpacityProgress,\n wrapperClasses,\n}: Props) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [isVideoManuallyPaused, setIsVideoManuallyPaused] = useState(false);\n const [isMuted, setIsMuted] = useState(false);\n const [videoReady, setVideoReady] = useState(false);\n const videoRef = useRef(null);\n const inView = useInView(videoRef, { amount: inViewThreshold });\n const isAutoPlaying = !hasInVideoPlayButton\n ? autoPlay\n : autoPlay && !isVideoManuallyPaused;\n const { playVideoAriaLabel, pauseVideoAriaLabel } = useAriaLabels();\n\n useEffect(() => {\n setIsPlaying(isAutoPlaying && inView);\n setIsMuted(!controls || !inView || isAutoPlaying);\n }, [isAutoPlaying, inView, controls]);\n\n return (\n \n }\n videoAttributes={{\n playsinline: true,\n muted: isMuted,\n playing: isPlaying,\n loop: true,\n }}\n onVideoReady={() => setVideoReady(true)}\n epiEdit={meta?.editHints?.video as string | undefined}\n controls={controls}\n videoRatio={videoRatio}\n isPlaying={isPlaying}\n setIsPlaying={setIsPlaying}\n videoWrapperOpacityProgress={videoWrapperOpacityProgress}\n onVolumeChange={(videoElement) => {\n setIsMuted(videoElement.volume === 0 || videoElement.muted);\n }}\n />\n\n {hasInVideoPlayButton && videoReady && (\n {\n setIsPlaying(!isPlaying);\n setIsVideoManuallyPaused(isPlaying);\n }}\n onFocus={onFocusCallback}\n data-testid={`${dataTestId}-${isPlaying ? 'Pause' : 'Play'}-Button`}\n data-video-control=\"toggle\"\n tabIndex={inVideoPlayButtonTabIndex}\n >\n \n \n )}\n\n {(coverImage || !isAutoPlaying) && (\n \n {!isPlaying && (\n playOnCoverClick && setIsPlaying(true)}\n className=\"group absolute inset-0 flex items-center justify-center hover:cursor-pointer\"\n >\n {coverImage && (\n \n )}\n\n {!isAutoPlaying && coverImage && (\n setIsPlaying(true)}\n data-testid={`${dataTestId}-Play-Button`}\n >\n
\n \n
\n \n )}\n \n )}\n
\n )}\n \n );\n};\n\nexport default InViewVideo;\n","import IInlineVideo from '@models/IInlineVideo';\nimport { ILightBoxImage } from '@models/ILightBoxImage';\nimport ImageLightBox from '@molecules/ImageLightBox/ImageLightBox';\nimport InViewVideo from '@molecules/InViewVideo/InViewVideo';\n\ninterface Props {\n readonly image?: ILightBoxImage;\n readonly video?: IInlineVideo;\n readonly title: string;\n}\n\nconst CampaignHero = ({ image, video, title = '' }: Props) => (\n \n
\n {title && (\n
\n \n
\n )}\n\n {video?.video?.url && (\n \n )}\n\n {!video?.video?.url && image?.image && (\n \n )}\n
\n \n);\n\nexport default CampaignHero;\n","import { resolveElements } from '../utils/resolve-element.mjs';\n\nconst thresholds = {\n some: 0,\n all: 1,\n};\nfunction inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = \"some\" } = {}) {\n const elements = resolveElements(elementOrSelector);\n const activeIntersections = new WeakMap();\n const onIntersectionChange = (entries) => {\n entries.forEach((entry) => {\n const onEnd = activeIntersections.get(entry.target);\n /**\n * If there's no change to the intersection, we don't need to\n * do anything here.\n */\n if (entry.isIntersecting === Boolean(onEnd))\n return;\n if (entry.isIntersecting) {\n const newOnEnd = onStart(entry);\n if (typeof newOnEnd === \"function\") {\n activeIntersections.set(entry.target, newOnEnd);\n }\n else {\n observer.unobserve(entry.target);\n }\n }\n else if (onEnd) {\n onEnd(entry);\n activeIntersections.delete(entry.target);\n }\n });\n };\n const observer = new IntersectionObserver(onIntersectionChange, {\n root,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholds[amount],\n });\n elements.forEach((element) => observer.observe(element));\n return () => observer.disconnect();\n}\n\nexport { inView };\n","import { useState, useEffect } from 'react';\nimport { inView } from '../render/dom/viewport/index.mjs';\n\nfunction useInView(ref, { root, margin, amount, once = false } = {}) {\n const [isInView, setInView] = useState(false);\n useEffect(() => {\n if (!ref.current || (once && isInView))\n return;\n const onEnter = () => {\n setInView(true);\n return once ? undefined : () => setInView(false);\n };\n const options = {\n root: (root && root.current) || undefined,\n margin,\n amount,\n };\n return inView(ref.current, onEnter, options);\n }, [root, ref, margin, once, amount]);\n return isInView;\n}\n\nexport { useInView };\n"],"names":["ReactPlayer","loadable","forwardRef","_ref","ref","classes","config","controls","epiEdit","isPlaying","title","videoAttributes","videoRatio","videoSource","videoWrapperOpacityProgress","onEndedVideo","onVideoReady","onVideoStart","onVolumeChange","setIsPlaying","prevProgress","setPrevProgress","useState","isBrowser","setIsBrowser","useEffect","window","handleProgressUpdate","progress","updateDataLayer","event","video_interaction","video_progress","video_title","handleVideoAction","action","React","createElement","motion","div","className","classNames","style","opacity","_extends","url","width","height","playing","onProgress","_ref2","played","onStart","onEnded","onPause","onPlay","onReady","target","autoPlay","coverImage","dataTestId","hasInVideoPlayButton","inVideoPlayButtonClassName","inVideoPlayButtonPositionClassName","inVideoPlayButtonTabIndex","inViewThreshold","meta","onFocusCallback","playOnCoverClick","video","videoClasses","wrapperClasses","isVideoManuallyPaused","setIsVideoManuallyPaused","isMuted","setIsMuted","videoReady","setVideoReady","videoRef","useRef","inView","useInView","amount","isAutoPlaying","playVideoAriaLabel","pauseVideoAriaLabel","useAriaLabels","Video","playsinline","muted","loop","editHints","videoElement","volume","type","onClick","onFocus","tabIndex","Icon","name","colorClassName","size","AnimatePresence","initial","animate","exit","Image","image","imageClasses","dangerouslySetInnerHTML","__html","InViewVideo","ImageLightBox","contentIds","contentLink","thresholds","some","all","root","margin","once","isInView","setInView","current","options","undefined","elementOrSelector","rootMargin","elements","activeIntersections","WeakMap","observer","IntersectionObserver","entries","forEach","entry","onEnd","get","isIntersecting","Boolean","newOnEnd","set","unobserve","delete","threshold","element","observe","disconnect"],"sourceRoot":""}