{"version":3,"sources":["webpack:///./src/components/ImageFullscreen/ImageFullscreenModal.js","webpack:///./src/components/ImageFullscreen/ImageFullscreen.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"],"names":["ModalContent","styled","div","withConfig","displayName","componentId","ModalClose","button","ImageFullScreenModal","_React$Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","handleCloseModal","onClose","props","key","value","_this$props","this","children","id","open","React","MediaQuery","query","breakpoints","md","Modal","showCloseIcon","closeOnEsc","center","focusTrapped","overlayId","styles","modal","padding","width","maxWidth","onClick","RemoveIcon","style","height","rem","defaultProps","StyledButton","ImageFullscreen","useId","_useState2","_slicedToArray","useState","openModal","setOpenModal","fullscreenProps","aspectRatio","_objectWithoutProperties","_excluded","createElement","Fragment","aria-label","aria-controls","onKeyDown","e","keyCode","Image","ImageFullscreenModal","getObjectPosition","alignX","alignY","undefined","Img","img","_ref","blurred","_ref2","show","_ref3","hide","_ref4","zoomOnHover","ImgElement","_ref5","src","alt","contain","cover","onLoad","renderAsDiv","setRenderAsDiv","useEffect","objectFitSupport","Object","assign","as","backgroundImage","backgroundSize","backgroundPosition","objectPosition","objectFit","role","Container","fillContainer","aspect","_PureComponent","state","ready","animatedIn","elementWidth","elementHeight","timeout","handleLoad","fadeIn","setState","setTimeout","handleTransitionEnd","handleError","handleMeasure","contentRect","Math","ceil","bounds","onResize","maxAspectRatio","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"],"mappings":"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","file":"static/scripts/12-b535ec6db281a86f8e4b.js","sourcesContent":["// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport Modal from 'react-responsive-modal'\nimport { rem } from 'polished'\n\nimport { breakpoints } from '../../styles/media'\nimport MediaQuery from '../MediaQuery/MediaQuery'\nimport RemoveIcon from '../../icons/RemoveIcon'\n\ntype Props = {\n children?: React.Node,\n open?: boolean,\n onClose?: () => void,\n id?: string,\n}\n\ntype State = {}\n\nconst ModalContent = styled.div`\n max-height: 80vh;\n overflow-y: auto;\n`\n\nconst ModalClose = styled.button`\n position: fixed;\n top: 2rem;\n right: 2rem;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border: 0;\n svg {\n g {\n stroke: white;\n }\n }\n`\n\nclass ImageFullScreenModal extends React.Component {\n static displayName = 'ImageFullscreen'\n static defaultProps = {}\n\n handleCloseModal = () => {\n const { onClose } = this.props\n onClose && onClose()\n }\n\n render() {\n const { children, id, open } = this.props\n\n return (\n \n \n \n \n \n \n {children && children}\n \n \n \n \n \n \n \n {children && children}\n \n \n \n )\n }\n}\n\nexport default ImageFullScreenModal\n","// @flow\nimport useId from '@charlietango/use-id'\nimport React, { useState } from 'react'\nimport styled from 'styled-components'\n\nimport type { ImageViewModel } from '../../types/ImageViewModel'\n\nimport Image from '../Image/Image'\nimport ImageFullscreenModal from './ImageFullscreenModal'\n\ntype Props = ImageViewModel\n\nconst StyledButton = styled.button`\n padding: 0;\n margin: 0;\n cursor: pointer;\n outline: none;\n border: none;\n width: 100%;\n &:focus {\n border: 1px dashed currentColor;\n }\n`\n\nfunction ImageFullscreen(props: Props) {\n const id = useId('imageModal')\n const [openModal, setOpenModal] = useState(false)\n\n const handleClick = () => {\n setOpenModal(true)\n }\n\n const handleKeyDown = e => {\n if (e.keyCode === 32 || e.keyCode === 13) {\n setOpenModal(true)\n }\n }\n\n const handleClose = () => {\n setOpenModal(false)\n }\n\n const { aspectRatio, ...fullscreenProps } = props\n\n return (\n <>\n \n \n \n\n \n \n \n \n )\n}\n\nexport default ImageFullscreen\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"],"sourceRoot":""}