{"version":3,"sources":["webpack:///./src/modules/VideoModule/VideoModule.js","webpack:///./src/components/Image/ImgElement.js","webpack:///./src/components/Image/Image.js","webpack:///./src/components/Image/imgix-support.js","webpack:///./src/components/Image/helpers.js","webpack:///./src/icons/PlayIcon.js"],"names":["CaptionContainer","styled","div","withConfig","displayName","componentId","getFontSize","rem","CaptionContainerItem","p","getLineHeight","VideoModule","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","key","value","_this$props","this","props","video","caption","credit","React","Ribbon","clearChildMargin","Vimeo","Object","assign","controls","showPlayButton","mute","style","marginBottom","defaultProps","getObjectPosition","alignX","alignY","concat","undefined","Img","img","_ref","blurred","_ref2","show","_ref3","hide","_ref4","zoomOnHover","ImgElement","_ref5","src","alt","contain","cover","onLoad","_objectWithoutProperties","_excluded","_useState2","_slicedToArray","useState","renderAsDiv","setRenderAsDiv","useEffect","objectFitSupport","createElement","as","backgroundImage","backgroundSize","backgroundPosition","objectPosition","objectFit","role","Container","fillContainer","aspect","Image","_PureComponent","_this","_len","length","args","Array","_key","call","state","ready","animatedIn","elementWidth","elementHeight","timeout","handleLoad","fadeIn","setState","setTimeout","handleTransitionEnd","handleError","handleMeasure","contentRect","Math","ceil","bounds","width","height","onResize","maxAspectRatio","aspectRatio","min","_objectSpread","fit","crop","focalPoint","auto","x","y","imgixParams","imgixProps","processImage","imageDimensionMap","w","h","dpr","q","blur","clearTimeout","_this2","disableBlur","className","_this$state","generateImgixProps","currentSrc","generateSource","generateAspectRatio","Measure","measureRef","ref","generateBlurredSource","aria-hidden","onError","onTransitionEnd","PureComponent","withImgix","normalizedWidth","imageQuality","constructUrl","params","preparedParams","keys","filter","k","map","encodeURIComponent","join","Component","InjectedComponent","ConfigContext","Consumer","config","imgixDomain","options","includes","global","devicePixelRatio","supports","document","body","Svg","svg","theme","name","color","white","yellow","PlayIcon","rest","viewBox","cursor","id","cx","cy","r","d"],"mappings":"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","file":"static/scripts/video-module-416334af3019980d4fda.js","sourcesContent":["// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport { rem } from 'polished'\nimport { getFontSize, getLineHeight } from '../../styles/style-helpers'\n\nimport type { AreaTypes } from '../../types/enums/AreaTypes'\nimport type { VideoViewModel } from '../../types/VideoViewModel'\n\nimport Vimeo from '../../components/Vimeo/Vimeo'\nimport Ribbon from '../../components/Ribbon/Ribbon'\n\nexport type Props = {\n video?: VideoViewModel,\n caption?: string,\n credit?: string,\n area?: AreaTypes,\n}\n\ntype State = {}\n\nconst CaptionContainer = styled.div`\n width: 100%;\n font-size: ${getFontSize('small')};\n margin-top: ${rem(8)};\n`\n\nconst CaptionContainerItem = styled.p`\n font-size: ${getFontSize('small')};\n margin-bottom: 0;\n margin-top: 0;\n font-weight: 300;\n line-height: ${getLineHeight('normal')};\n`\n\nclass VideoModule extends React.Component {\n static displayName = 'VideoModule'\n static defaultProps = {}\n\n render() {\n const { video, caption, credit } = this.props\n if (!video) return null\n\n return (\n \n \n {caption && (\n \n {caption}\n \n {credit}\n \n \n )}\n \n )\n }\n}\n\nexport default VideoModule\n","// @flow\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { objectFitSupport } from './helpers'\n\nfunction getObjectPosition(alignX, alignY) {\n return alignX || alignY\n ? `${alignX || 'center'} ${alignY || 'center'}`\n : undefined\n}\n\nconst Img = styled.img`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n max-width: none;\n object-fit: cover;\n object-position: center;\n ${({ blurred }) =>\n blurred &&\n `\n opacity: 0.4;\n `}\n\n ${({ show }) =>\n show &&\n `\n transition: opacity 0.4s linear;\n will-change: opacity;\n opacity: 1;\n `}\n\n ${({ hide }) =>\n hide &&\n `\n opacity: 0;\n will-change: opacity;\n `}\n\n ${({ zoomOnHover }) =>\n zoomOnHover &&\n `\n transition: transform 2s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n &:hover {\n transform: scale(1.1);\n }\n `} \n`\n\ntype Props = {\n src: string,\n alignX?: 'left' | 'center' | 'right',\n alignY?: 'top' | 'center' | 'bottom',\n alt?: string,\n contain?: boolean,\n cover?: boolean,\n onLoad?: Function,\n blurred?: boolean,\n show?: boolean,\n hide?: boolean,\n zoomOnHover?: boolean,\n}\n\n/**\n * Img Element with ObjectFit fallback in unsupported browsers (IE)\n */\nfunction ImgElement({\n src,\n alt,\n contain,\n cover,\n alignX,\n alignY,\n onLoad,\n blurred,\n ...props\n}: Props) {\n /**\n * If this Image requires unsupported ObjectFit, fallback to a
with backgroundImage\n **/\n const [renderAsDiv, setRenderAsDiv] = useState(false)\n useEffect(() => {\n setRenderAsDiv(\n (alignX || alignY || contain || cover) && !objectFitSupport(),\n )\n }, [])\n\n if (renderAsDiv) {\n if (onLoad) {\n // Trigger the onLoad - could create a dummy image instead that triggers it after the image is actually loaded.\n onLoad()\n }\n return (\n \n )\n }\n\n return (\n \n )\n}\n\nImgElement.defaultProps = {\n contain: false,\n}\n\nexport default ImgElement\n","// @flow\nimport React, { PureComponent } from 'react'\nimport Measure from 'react-measure'\nimport styled from 'styled-components'\n\nimport type { ImageViewModel } from '../../types/ImageViewModel'\nimport type { Bounds, Rect } from './types'\n\nimport processImage, { imageDimensionMap, withImgix } from './imgix-support'\nimport ImgElement from './ImgElement'\n\nconst Container = styled.div`\n position: relative;\n width: 100%;\n ${({ fillContainer }) =>\n fillContainer &&\n `\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n `} ${({ aspect }) =>\n aspect &&\n `\n padding-bottom: ${aspect * 100}%;\n `};\n ${({ zoomOnHover }) =>\n zoomOnHover &&\n `\n overflow: hidden\n `}\n`\n\ntype Props = ImageViewModel & {\n onResize?: (bounds: Bounds) => void,\n className?: string,\n zoomOnHover?: boolean,\n}\n\ntype State = {\n animatedIn: boolean,\n ready: boolean,\n elementWidth: number,\n elementHeight: number,\n}\n\n/**\n * Image handles fetching the correct Imgix image, and rendering it onto the page.\n * By default it will load an image that fillContainers the width of it's container, while keeping the original image aspect ratio\n */\nclass Image extends PureComponent {\n static displayName = 'Image'\n static defaultProps = {\n maxAspectRatio: 2,\n width: 1,\n height: 1,\n }\n\n static generateAspectRatio(\n width: number = 1,\n height: number = 1,\n maxAspectRatio: number = 1,\n aspectRatio?: number,\n ) {\n if (aspectRatio) {\n return aspectRatio\n }\n return Math.min(maxAspectRatio, height / width)\n }\n\n static generateImgixProps(props: Props) {\n return {\n fit: props.contain ? 'clip' : 'crop',\n crop: !props.contain\n ? props.focalPoint\n ? 'focalpoint'\n : props.crop\n : undefined,\n auto: ['compress', 'format'],\n 'fp-x': props.focalPoint ? props.focalPoint.x : undefined,\n 'fp-y': props.focalPoint ? props.focalPoint.y : undefined,\n ...props.imgixParams,\n }\n }\n\n static generateSource(\n src: string,\n width: number,\n height: number,\n imgixProps?: Object,\n ) {\n if (width > 0 && height > 0) {\n return processImage(src, {\n ...imgixProps,\n ...imageDimensionMap(width, height),\n })\n }\n\n return null\n }\n\n static generateBlurredSource(\n src: string,\n width: number = 1,\n height: number = 1,\n imgixProps: Object = {},\n ) {\n return processImage(src, {\n ...imgixProps,\n w: Math.ceil(64),\n h: Math.ceil((height / width) * 64),\n dpr: 1,\n q: 50,\n blur: 64,\n })\n }\n\n state = {\n ready: false,\n animatedIn: false,\n elementWidth: 0,\n elementHeight: 0,\n }\n\n timeout = null\n\n componentWillUnmount() {\n if (this.timeout) clearTimeout(this.timeout)\n }\n\n handleLoad = () => {\n if (this.props.fadeIn) {\n this.setState({ ready: true })\n this.timeout = setTimeout(() => {\n this.timeout = null\n this.setState({ animatedIn: true })\n }, 1000)\n } else {\n this.setState({ ready: true, animatedIn: true })\n }\n }\n\n handleTransitionEnd = () => {\n if (this.state.ready) {\n this.setState({ animatedIn: true })\n }\n }\n\n handleError = () => {\n this.setState({ ready: true, animatedIn: true })\n }\n\n handleMeasure = (contentRect: Rect) => {\n this.setState({\n elementWidth: Math.ceil(contentRect.bounds.width),\n elementHeight: Math.ceil(contentRect.bounds.height),\n })\n\n if (this.props.onResize) this.props.onResize(contentRect.bounds)\n }\n\n render() {\n const {\n src,\n fadeIn,\n disableBlur,\n maxAspectRatio,\n fillContainer,\n contain,\n cover,\n alignX,\n alignY,\n width,\n height,\n alt,\n className,\n zoomOnHover,\n aspectRatio,\n } = this.props\n\n const { ready, animatedIn, elementWidth, elementHeight } = this.state\n const imgixProps = Image.generateImgixProps(this.props)\n const currentSrc = Image.generateSource(\n src,\n elementWidth,\n elementHeight,\n imgixProps,\n )\n\n const aspect = !fillContainer\n ? Image.generateAspectRatio(width, height, maxAspectRatio, aspectRatio)\n : null\n\n return (\n \n {({ measureRef }) => {\n return (\n \n {!disableBlur && fadeIn && !animatedIn ? (\n \n ) : null}\n {currentSrc || (!fadeIn && !disableBlur) ? (\n \n ) : null}\n \n )\n }}\n \n )\n }\n}\n\nexport default withImgix(Image)\n","// @flow\nimport * as React from 'react'\nimport { ConfigContext } from '../../App/AppShell'\n\n/* eslint-disable no-param-reassign */\nexport const imageDimensionMap = (\n width: number,\n height: number,\n): { w: number, h: number } => {\n const aspect = height / width\n const normalizedWidth = Math.ceil(width)\n const normalizedHeight = Math.ceil(aspect * normalizedWidth)\n\n return {\n w: normalizedWidth,\n h: normalizedHeight,\n }\n}\n\nfunction imageQuality(dpr: number = 1) {\n return dpr >= 3 ? 30 : dpr === 2 ? 40 : undefined\n}\n\nfunction constructUrl(src, params) {\n const preparedParams = Object.keys(params)\n .filter(k => typeof params[k] !== 'undefined')\n .map(k => `${k}=${encodeURIComponent(params[k])}`)\n .join('&')\n\n return `${src}?${preparedParams}`\n}\n\n/**\n * Construct a URL for an image with an Imgix proxy, expanding image options\n * per the [API reference docs](https://www.imgix.com/docs/reference).\n * @param {String} src src of raw image\n * @param {Object} options map of image API options, in long or short form per expansion rules\n * @return {String} URL of image src transformed by Imgix\n */\nfunction processImage(src: string, options: Object = {}): string {\n if (!src) {\n return ''\n }\n if (!src.includes('imgix.net')) return src\n\n return constructUrl(src, {\n auto: 'format',\n dpr: global.devicePixelRatio || 1,\n q: imageQuality(global.devicePixelRatio),\n ...options,\n })\n}\n\nexport default processImage\n\nexport function withImgix(Component: React.ComponentType) {\n class InjectedComponent extends React.Component {\n render() {\n // todo: maybe check if already has protocol and domain\n if (process.env.NODE_ENV === 'development') {\n return \n }\n\n return (\n \n {config => (\n \n )}\n \n )\n }\n }\n\n return InjectedComponent\n}\n","// @flow\nimport type { ImageRatio } from './types'\n\nconst supports = {}\n\n/**\n * Detect if objectFit is supported on the client\n * @type {boolean}\n */\nexport function objectFitSupport(): boolean {\n if (!supports.objectFit) {\n supports.objectFit = global.document\n ? global.document.body.style.objectFit !== undefined\n : true\n }\n\n return supports.objectFit\n}\n\nexport default {\n objectFitSupport,\n}\n\nexport function generateSrc(\n url: string,\n width: number,\n ratio?: ImageRatio = 'original',\n) {\n if (url && !url.includes('/static/')) {\n const pos = url.lastIndexOf('/')\n return `${url.substr(0, pos)}/${ratio}/${width}/${url.substr(pos + 1)}`\n }\n\n return `${url}?w=${width}&ratio=${ratio || ''}`\n}\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\n\nimport { color } from '../styles/theme'\n\n//TODO\nconst Svg = styled.svg`\n path {\n fill: ${({ theme }) =>\n theme.name === 'kids' || theme.name === 'lgbt'\n ? color.white\n : theme.body};\n }\n\n circle {\n fill: ${({ theme }) =>\n theme.name === 'kids' || theme.name === 'lgbt'\n ? color.yellow\n : color.white};\n }\n`\n\nconst PlayIcon = ({ style, ...rest }: Object) => (\n \n \n \n \n \n \n)\n\nexport default PlayIcon\n"],"sourceRoot":""}