{"version":3,"sources":["device.js","App.styles.js","components/Heading/Heading.styles.js","components/Heading/Heading.js","components/Map/Map.styles.js","components/Map/icon/zoom-in.svg","components/Map/icon/zoom-out.svg","components/Map/Map.js","components/MapKey/MapKey.styles.js","components/MapKey/icon/up.svg","components/MapKey/icon/down.svg","components/MapKey/MapKey.js","components/Nav/Nav.styles.js","components/Nav/Nav.js","components/NavItem/NavItem.styles.js","components/NavItem/NavItem.js","pages/Headlines/Headlines.style.js","components/Infographic/Infographic.styles.js","components/Infographic/Infographic.js","components/Infographic/icons/GraphDown.js","components/Infographic/icons/GraphUp.js","components/Infographic/icons/house-icon.svg","components/Infographic/icons/House.js","pages/Headlines/Headlines.js","components/Arrow/Arrow.styles.js","components/Arrow/Arrow.js","components/LocationDetail/LocationDetail.styles.js","components/LocationDetail/img/facebook-icon.svg","components/LocationDetail/img/twitter-icon.svg","components/PercentageChange/PercentageChange.styles.js","components/PercentageChange/PercentageChange.js","components/Button/Button.styles.js","components/Button/Button.js","components/LocationDetail/img/detached.svg","components/LocationDetail/img/semi-detached.svg","components/LocationDetail/img/terraced.svg","components/LocationDetail/img/flats.svg","components/HouseTypePrice/HouseTypePrice.styles.js","components/HouseTypePrice/HouseTypePrice.js","components/LocationDetail/img/tick.svg","components/Carousel/Carousel.styles.js","components/Carousel/Carousel.js","components/Carousel/useRecursiveTimeout.js","components/LocationDetail/LocationDetail.js","utils.js","pages/Home/Home.style.js","pages/Home/Home.js","pages/Archive/Archive.style.js","pages/Archive/Archive.js","pages/Error/Error.style.js","pages/Error/Error.js","pages/About/About.style.js","components/ContentBlock/ContentBlock.styles.js","components/ContentBlock/ContentBlock.js","components/Divider/Divider.styles.js","components/Divider/Divider.js","pages/About/About.js","App.js","reportWebVitals.js","i18n.js","index.js"],"names":["size","device","mobileS","mobileM","mobileL","tablet","laptop","laptopL","desktop","desktopL","Wrapper","styled","div","props","fullWidth","MapWrapper","NavWrapper","MapKeyWrapper","PageWrapper","GlobalStyle","createGlobalStyle","ActiveQuarterWrapper","ActiveQuarter","span","ChangeQuarterLink","NavLink","attrs","activeClassName","footer","h3","StyledHeading","h1","Heading","children","rest","StyledMap","Controls","Control","button","ZoomImage","img","center","Map","locations","activeLocation","onLocationChange","useState","coordinates","zoom","position","setPosition","hasDragged","setDragged","t","useTranslation","useSpring","style","animate","useEffect","pos","lat","lon","handleFocus","geography","projection","path","locationId","event","centroid","invert","AnimatedZoomableGroup","animated","ZoomableGroup","aria-labelledby","tabIndex","projectionConfig","scale","width","height","onMoveStart","newCenter","onMoveEnd","newPosition","JSON","stringify","translateExtent","geographies","map","geo","id","findIndex","item","title","properties","LAD13NM","detail","fillColor","house_prices","annual_change","strokeWidth","stroke","onClick","onKeyUp","keyCode","key","default","fill","outline","hover","pressed","rsmKey","index","geoCentroid","r","x","y","textAnchor","fontSize","fontFamily","alignmentBaseline","e","origPos","aria-label","src","ImageZoomIn","alt","preventDefault","ImageZoomOut","StyledMapKey","Highlight","color","Overview","Legend","LegendItem","LegendIcon","MapKey","averageHousePrice","price","parseInt","toLocaleString","currency","minimumFractionDigits","data-testid","UpIcon","Trans","i18nKey","DownIcon","StyledNav","nav","Nav","StyledNavItem","NavItem","StyledHeadlines","section","InfographicList","InfographicWrapper","StyledInfographic","Summary","Content","h2","Value","ImageWrapper","ContentWrapper","Infographic","figure","image","titleColor","figureColor","imagePosition","summary","GraphDown","lineColor","graphColor","maxWidth","display","viewBox","version","xmlns","xmlnsXlink","fillRule","transform","d","points","GraphUp","_extends","Object","assign","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgHouseIcon","_ref","svgRef","titleId","ref","undefined","ForwardRef","House","Headlines","figures","transactions_change","quarter_change","average_price","marginRight","marginLeft","backgroundColor","a1","a2","b1","b2","StyledArrow","Arrow","direction","Number","Title","Header","PercentageChangeWrapper","AveragePrice","ColumnHeader","TitleWrapper","Prices","PricesHeading","LivingCosts","LivingCostsHeadlines","ToggleButton","getBackgroundColorForIcon","active","increase","StyledLocationDetail","LivingCostColumn","LivingCostHeading","LivingCostValue","Circle","ButtonWrapper","ActionsWrapper","HouseTypePricesWrapper","Image","SocialIcons","ShareText","SocialButton","SocialImage","StyledPercentageChange","Icon","svg","PercentageChange","value","styles","change","Math","round","toFixed","role","StyledButton","Button","StyledHouseTypePrice","Price","HouseTypePrice","StyledCarousel","Container","DotList","Dot","isActive","Carousel","types","useEmblaCarousel","loop","align","containScroll","slidesToScroll","emblaRef","emblaApi","selectedIndex","setSelectedIndex","scrollSnaps","setScrollSnaps","scrollTo","useCallback","callback","delay","isRunning","setIsRunning","stop","play","savedCallback","useRef","current","tick","clearTimeout","requestAnimationFrame","setTimeout","useRecursiveTimeout","canScrollNext","scrollNext","onSelect","selectedScrollSnap","on","scrollPrev","scrollSnapList","minWidth","name","average","_","houseTypeImages","detachedImage","semiDetachedImage","terracedImage","flatsImage","HouseTypeList","LocationDetail","score","location","onToggle","isLargerDevice","useMedia","handleToggle","housePrices","houseTypes","by_type","data-id","parseFloat","council_tax_average","tickImage","life_satisfaction","isNaN","average_salary","document","querySelector","scrollIntoView","window","parent","postMessage","FB","ui","method","href","quote","response","FacebookIcon","text","encodeURIComponent","open","TwitterIcon","defaultProps","StyledHome","LocationDetailItem","Key","KeyItem","LocationDetailItems","Home","activeLocationIndex","StyledArchive","YearItems","YearItem","YearItemHeading","QuarterItems","ol","QuarterItem","li","QuarterLink","a","Archive","quarters","onQuarterChange","activeQuarter","handleChangeQuarter","data","currentTarget","dataset","year","quarter","reports","dangerouslySetInnerHTML","__html","report","link","data-year","data-quarter","download","StyledError","Message","Error","message","StyledAbout","StyledContentBlock","ContentBlock","heading","StyledDivider","Divider","About","getCurrentYearData","years","App","history","useHistory","setData","setActiveLocation","setActiveQuarter","useLocation","mapWrapperRef","pageWrapperRef","isHomepage","useRouteMatch","exact","dataVersion","__HPI_DATA_VERSION","fetch","then","res","json","string","friendly_name","pathname","replaceAll","charAt","toUpperCase","slice","regions","active_quarter","handleToggleActiveLocation","state","push","element","focus","behavior","block","menuItems","quarterData","to","headline","sorted_quarters","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","resources","en","cy","language","hash","split","i18n","use","initReactI18next","init","lng","keySeparator","interpolation","escapeValue","AppWrapper","fallback","basename","smoothscroll","polyfill","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.81860e87.chunk.js","sourcesContent":["const size = {\n mobileS: '320px',\n mobileM: '375px',\n mobileL: '425px',\n tablet: '768px',\n laptop: '1024px',\n laptopL: '1440px',\n desktop: '2560px'\n}\n\nexport const device = {\n mobileS: `(min-width: ${size.mobileS})`,\n mobileM: `(min-width: ${size.mobileM})`,\n mobileL: `(min-width: ${size.mobileL})`,\n tablet: `(min-width: ${size.tablet})`,\n laptop: `(min-width: ${size.laptop})`,\n laptopL: `(min-width: ${size.laptopL})`,\n desktop: `(min-width: ${size.desktop})`,\n desktopL: `(min-width: ${size.desktop})`\n};","import { NavLink } from \"react-router-dom\";\nimport styled, { createGlobalStyle } from \"styled-components/macro\";\nimport { device } from \"./device\";\n\n// IE11 - who doesn't hate it?\nexport const Wrapper = styled.div`\n margin: 0 auto;\n padding-left: 10px;\n padding-right: 10px;\n box-sizing: border-box;\n\n * {\n box-sizing: border-box;\n }\n\n @media ${device.tablet} {\n display: -ms-grid;\n display: ${(props) => (props.fullWidth ? \"block\" : \"grid\")};\n\n -ms-grid-columns: 1fr 1fr;\n grid-template-columns: repeat(2, 1fr);\n\n -ms-grid-rows: 30px 30px 30px 45px 1fr;\n\n grid-template-rows: 30px 30px 30px 45px repeat(1, 1fr);\n grid-column-gap: 25px;\n }\n`;\n\nexport const MapWrapper = styled.div`\n @media ${device.tablet} {\n grid-column-start: 1;\n grid-column-end: 2;\n grid-row-start: 5;\n\n // IE11\n -ms-grid-column: 1;\n -ms-grid-row: 5;\n }\n`;\n\nexport const NavWrapper = styled.div`\n display: flex;\n\n @media ${device.tablet} {\n grid-column-start: 2;\n grid-row-start: 1;\n grid-row-end: 3;\n\n // IE11\n -ms-grid-column: 2;\n -ms-grid-row: 1;\n }\n`;\n\nexport const MapKeyWrapper = styled.div`\n padding-top: 15px;\n padding-bottom: 15px;\n @media ${device.tablet} {\n padding-top: 0;\n padding-bottom: 0;\n\n grid-column-start: 1;\n grid-row-start: 2;\n grid-row-end: 3;\n\n // IE11\n -ms-grid-column: 1;\n -ms-grid-row: 3;\n }\n`;\n\nexport const PageWrapper = styled.div`\n overflow: hidden;\n @media ${device.tablet} {\n grid-column-start: 2;\n grid-row-start: 4;\n grid-row-end: 6;\n\n // IE11\n -ms-grid-column: 2;\n -ms-grid-row: 4;\n }\n`;\n\nexport const GlobalStyle = createGlobalStyle`\n body {\n font-family: 'Open Sans', sans-serif;\n padding:0;\n margin:0;\n }\n h1,h2,h3,h4,h5 { font-family: 'Open Sans', sans-serif } ;\n}\n`;\n\n// Change Quarter\nexport const ActiveQuarterWrapper = styled.div`\n text-align: center;\n padding-top: 10px;\n padding-bottom: 10px;\n @media ${device.tablet} {\n text-align: left;\n padding-top: 0;\n padding-bottom: 0;\n\n grid-column-start: 1;\n grid-row-start: 1;\n grid-row-end: 2;\n\n // IE11\n -ms-grid-column: 1;\n -ms-grid-row: 2;\n }\n`;\n\nexport const ActiveQuarter = styled.span`\n color: #007961;\n font-weight: bold;\n`;\nconst activeClassName = \"is-active\";\nexport const ChangeQuarterLink = styled(NavLink).attrs({\n activeClassName,\n})`\n text-decoration: none;\n color: #008067;\n font-weight: bold;\n text-decoration: underline;\n`;\n\nexport const Footer = styled.footer`\n padding-top: 20px;\n`;\n\nexport const FooterHeading = styled.h3`\n padding: 0;\n margin: 0;\n font-size: 0.75rem;\n color: #3d434f;\n line-height: 1;\n padding-bottom: 20px;\n font-weight: bold;\n @media ${device.tablet} {\n font-size: 0.75rem;\n }\n`;\n\nexport const FooterContent = styled.div`\n font-size: 0.5625rem;\n\n @media ${device.tablet} {\n font-size: 0.75rem;\n }\n`;\n","import styled from 'styled-components/macro';\nimport { device } from '../../device';\n\n\nexport const StyledHeading = styled.h1`\n\n line-height:1;\n margin:0;\n padding:0;\n font-size: 1.56rem;\n color: #8B8B8B;\n letter-spacing: -0.6px;\n text-align: center;\n font-weight:bold;\n padding-bottom:15px;\n @media ${device.tablet} {\n text-align:left;\n }\n\n`;","import React from 'react';\nimport { StyledHeading } from './Heading.styles';\n\nconst Heading = ({ children, ...rest }) => {\n return (\n \n { children }\n \n )\n}\n\nexport default Heading;","import styled from \"styled-components/macro\";\n\nexport const StyledMap = styled.div`\n display: block;\n position: relative;\n width: 100%;\n`;\n\nexport const Controls = styled.div`\n display: flex;\n top: 0;\n right: 0;\n position: absolute;\n z-index: 2;\n`;\n\nexport const Control = styled.button`\n border: none;\n cursor: pointer;\n background: #f2f2f2;\n border-radius: 50%;\n width: 50px;\n height: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n &:first-child {\n margin-right: 10px;\n }\n`;\n\nexport const ZoomImage = styled.img`\n max-width: 100%;\n height: auto;\n`;\n","export default __webpack_public_path__ + \"static/media/zoom-in.dbeeda44.svg\";","export default __webpack_public_path__ + \"static/media/zoom-out.b3c44eba.svg\";","import React, { useEffect, useMemo, useState } from \"react\";\nimport {\n ComposableMap,\n Geographies,\n Geography,\n Marker,\n ZoomableGroup,\n} from \"react-simple-maps\";\n\nimport { geoCentroid } from \"d3-geo\";\nimport { Control, Controls, StyledMap, ZoomImage } from \"./Map.styles\";\n\nimport ImageZoomIn from \"./icon/zoom-in.svg\";\nimport ImageZoomOut from \"./icon/zoom-out.svg\";\nimport { animated, useSpring } from \"react-spring\";\nimport { useTranslation } from \"react-i18next\";\n\nconst url = \"/topo_lad.json\";\n\nconst center = [-3.95, 52.42];\n\nconst Map = ({ locations, activeLocation, onLocationChange }) => {\n const [position, setPosition] = useState({\n coordinates: [-3.95, 52.42],\n zoom: 1,\n });\n const [hasDragged, setDragged] = useState(false);\n\n const { t } = useTranslation();\n const [style, animate] = useSpring(\n { zoom: 1, coordinates: [-3.95, 52.42] },\n []\n );\n\n useEffect(() => {\n if (!hasDragged) {\n animate({ zoom: position.zoom, coordinates: position.coordinates });\n }\n }, [position, animate, hasDragged]);\n\n // useEffect(() => {\n\n // const locationName = useMemo(() => {\n // const countryName = locations.find((item, index) => index === activeLocation);\n // return countryName;\n // }, [activeLocation, locations]);\n\n useEffect(() => {\n if (activeLocation) {\n const [lat, lon] = activeLocation.pos;\n setPosition((pos) => ({ ...pos, zoom: 2, coordinates: [lat, lon] }));\n } else {\n setPosition((pos) => ({ ...pos, zoom: 1, coordinates: center }));\n }\n }, [activeLocation]);\n\n // }, [activeLocation])\n /**\n * Wen the zoom button is clicked.\n * @param {*} e\n */\n const handleZoomIn = (e) => {\n if (position.zoom >= 2) return;\n setDragged(false);\n setPosition((origPos) => ({ ...origPos, zoom: origPos.zoom * 2 }));\n };\n\n const handleZoomOut = (e) => {\n e.preventDefault();\n setDragged(false);\n if (position.zoom <= 1) return;\n setPosition((pos) => ({\n ...pos,\n zoom: pos.zoom / 2,\n coordinates: [-3.95, 52.42],\n }));\n };\n\n const handleMoveStart = (newCenter) => {\n setDragged(true);\n setPosition(newCenter);\n };\n\n const handleFilter = ({ constructor: { name } }) => {\n return name !== \"MouseEvent\";\n };\n\n /**\n * When the map has finished moving update our local state to match\n * @param {*} position\n * @param {*} x\n */\n const handleMoveEnd = (newPosition) => {\n if (\n JSON.stringify(position.coordinates) ===\n JSON.stringify(newPosition.coordinates)\n ) {\n setDragged(false);\n }\n };\n\n /**\n * When it's clicked.\n * @param {*} geography\n * @param {*} projection\n * @param {*} path\n * @param {*} locationId\n */\n const handleFocus = (geography, projection, path, locationId) => (event) => {\n setDragged(false);\n const centroid = projection.invert(path.centroid(geography));\n setPosition((pos) => ({ zoom: 1.5, coordinates: centroid }));\n onLocationChange(locationId, true);\n };\n\n /**\n * Keyboard events.\n * @param {*} geography\n * @param {*} projection\n * @param {*} path\n * @param {*} locationId\n */\n const handleKeyUp = (geography, projection, path, locationId) => (event) => {\n setDragged(false);\n\n if (event.keyCode === 27) {\n setPosition((pos) => ({ zoom: 1, coordinates: center }));\n onLocationChange(null, true);\n return;\n }\n if (event.key === \"Enter\") {\n setPosition((pos) => ({ zoom: 1, coordinates: center }));\n onLocationChange(locationId, true);\n }\n };\n\n const AnimatedZoomableGroup = animated(ZoomableGroup);\n\n const MAP_HEIGHT = 440;\n const MAP_WIDTH = 351;\n\n return (\n \n \n \n \n {({ geographies, projection, path }) => (\n <>\n {geographies.map((geo) => {\n const id = locations.findIndex(\n (item) => item.title === geo.properties.LAD13NM\n );\n const detail = locations[id];\n const isSelected =\n activeLocation?.title === geo.properties.LAD13NM;\n\n let fillColor = \"#E5223C\";\n\n if (isSelected) {\n fillColor = \"#630E34\";\n } else if (detail.house_prices.annual_change > 0) {\n fillColor = \"#007961\";\n }\n\n return (\n \n );\n })}\n\n {geographies.map((geo, index) => {\n const centroid = geoCentroid(geo);\n const id = locations.findIndex(\n (item) => item.title === geo.properties.LAD13NM\n );\n const detail = locations[id];\n\n return (\n \n \n \n \n \n {id + 1}\n \n \n \n \n );\n })}\n \n )}\n \n \n \n\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Map;\n","import styled from 'styled-components/macro';\nimport { device } from '../../device';\n\n\nexport const StyledMapKey = styled.div`\n display:flex;\n flex-wrap:wrap;\n flex-direction:column;\n\n @media ${device.tablet} { \n flex-direction:row;\n justify-content:space-between;\n }\n`;\n\nexport const Highlight = styled.span`\n color:${ props => props.color };\n font-weight:bold;\n`;\n\nexport const Overview = styled.div`\n width:100%;\n padding-bottom:20px;\n text-align:center;\n\n @media ${device.tablet} { \n width:auto;\n }\n`;\n\n\n\nexport const Legend = styled.div`\n display:flex;\n justify-content:center;\n flex-wrap:wrap;\n width:100%;\n\n @media ${device.tablet} { \n text-align:right;\n /* flex-direction:column; */\n }\n`;\n\nexport const LegendItem = styled.div`\n text-decoration:none;\n font-size: 1.06rem;\n color: #8B8B8B;\n margin-right:15px;\n @media ${device.tablet} { \n font-size:1.25rem;\n }\n`;\n\nexport const LegendIcon = styled.img`\n padding-right:15px;\n max-width:100%;\n height:auto;\n`;","export default __webpack_public_path__ + \"static/media/up.c430cd55.svg\";","export default __webpack_public_path__ + \"static/media/down.e40fd015.svg\";","import React from \"react\";\nimport {\n StyledMapKey,\n Overview,\n Highlight,\n Legend,\n LegendItem,\n LegendIcon,\n} from \"./MapKey.styles\";\nimport UpIcon from \"./icon/up.svg\";\nimport DownIcon from \"./icon/down.svg\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nconst MapKey = ({ children, averageHousePrice, ...rest }) => {\n const { t } = useTranslation();\n\n // Convert to 10ks\n const price = parseInt(averageHousePrice).toLocaleString(\"en-GB\", {\n style: \"currency\",\n currency: \"GBP\",\n minimumFractionDigits: 0,\n });\n\n return (\n \n \n {t(\"mapkey.averageHousePriceForWales\")}{\" \"}\n {price}\n \n \n \n {\" \"}\n \n Annual growth\n \n \n \n {\" \"}\n \n Annual decline\n \n \n \n \n );\n};\n\nexport default MapKey;\n","import styled from 'styled-components/macro';\n\n\nexport const StyledNav = styled.nav`\n display:flex;\n justify-content:space-between;\n flex-wrap:wrap;\n width:100%;\n height:100%;\n`;\n\n","import React from 'react';\nimport { StyledNav } from './Nav.styles';\n\nconst Nav = ({ children }) => {\n return (\n \n { children }\n \n )\n}\n\nexport default Nav;","import { NavLink } from 'react-router-dom';\nimport styled from 'styled-components/macro';\n\n\nconst activeClassName = 'is-active';\nexport const StyledNavItem = styled(NavLink).attrs({\n activeClassName\n})`\n border: 1px solid #8B8B8B;\n display:block;\n text-decoration:none;\n padding-left:5px;\n padding-right:5px;\n padding-top:5px;\n padding-bottom:5px;\n display:flex;\n align-items:center;\n justify-content:center;\n color:#8B8B8B;\n font-weight:bold;\n &:hover {\n background-color: #047961;\n color:#fff;\n }\n\n font-size:0.75rem;\n\n cursor:pointer;\n width: calc(100% / 4 - 5px);\n text-align:center; \n\n &.is-active {\n background-color: #047961;\n color:#fff;\n } \n`;\n","import React from 'react';\nimport { StyledNavItem } from './NavItem.styles';\n\nconst NavItem = ({ children, ...rest }) => {\n return (\n \n { children }\n \n )\n}\n\nexport default NavItem;","import styled from 'styled-components';\n\nexport const StyledHeadlines = styled.section`\n\n\n`;\n\nexport const Heading = styled.h1`\n font-size:1rem;\n color: #8B8B8B;\n text-align: left;\n padding:0;\n margin:0;\n padding-top:20px;\n padding-bottom:20px;\n`;\n\nexport const Image = styled.img`\n max-width:100%;\n height:auto;\n\n`;\n\nexport const InfographicList = styled.div`\n display:flex;\n flex-wrap:wrap;\n justify-content: space-between;\n`;\n\nexport const InfographicWrapper = styled.div`\n\n width:50%;\n`;","import styled from \"styled-components/macro\";\nimport { device } from \"../../device\";\n\nexport const StyledInfographic = styled.div`\n width: 100%;\n position: relative;\n overflow: hidden;\n\n &::before {\n content: \"\";\n padding-top: 100%;\n display: block;\n }\n`;\n\nexport const Summary = styled.div`\n font-size: 0.75rem;\n color: #dfdad5;\n`;\n\nexport const Content = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n /* flex-wrap:wrap; */\n`;\n\nexport const Heading = styled.h2`\n padding: 0;\n margin: 0;\n font-size: 0.8rem;\n font-weight: bold;\n width: 100%;\n color: ${(props) => props.color};\n line-height: 1;\n @media ${device.mobileL} {\n font-size: 1.2rem;\n }\n`;\n\nexport const Value = styled.div`\n font-size: 1.5rem;\n font-weight: bold;\n width: 100%;\n line-height: 1;\n color: ${(props) => props.color};\n @media ${device.mobileL} {\n font-size: 2.5rem;\n }\n`;\n\nexport const ImageWrapper = styled.div`\n margin-left: ${(props) => (props.position === \"left\" ? \"0\" : \"auto\")};\n margin-right: ${(props) => (props.position === \"right\" ? \"0\" : \"auto\")};\n text-align: ${(props) => (props.position === \"right\" ? \"right\" : \"left\")};\n overflow: hidden;\n margin-top: auto;\n max-width: 120px;\n @media ${device.mobileL} {\n max-width: 180px;\n }\n`;\nexport const ContentWrapper = styled.div`\n /* flex-wrap:wrap; */\n padding-top: 10px;\n padding-bottom: 10px;\n padding-right: 10px;\n padding-left: 10px;\n @media ${device.mobileL} {\n padding-top: 25px;\n padding-bottom: 25px;\n padding-right: 25px;\n padding-left: 25px;\n }\n`;\n","import React from \"react\";\nimport {\n Content,\n Heading,\n ImageWrapper,\n StyledInfographic,\n Value,\n ContentWrapper,\n Summary,\n} from \"./Infographic.styles\";\n\nconst Infographic = ({\n title,\n figure,\n image,\n titleColor,\n figureColor,\n imagePosition,\n summary,\n ...rest\n}) => {\n return (\n \n \n \n {title}\n {figure}\n {summary && {summary}}\n {image}\n \n \n \n );\n};\n\nexport default Infographic;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst GraphDown = ({ lineColor, graphColor, style, ...rest }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nGraphDown.propTypes = {\n lineColor: PropTypes.string.isRequired,\n graphColor: PropTypes.string.isRequired,\n};\n\nexport default GraphDown;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst GraphUp = ({ lineColor, graphColor, style, ...rest }) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nGraphUp.propTypes = {\n lineColor: PropTypes.string.isRequired,\n graphColor: PropTypes.string.isRequired,\n};\n\nexport default GraphUp;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Page-1\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"1-down\",\n transform: \"translate(-632.000000, -69.000000)\",\n fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"1-up\",\n transform: \"translate(256.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: 4,\n transform: \"translate(339.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-92\",\n transform: \"translate(37.500000, 69.431500)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M93.83205,24.80495 C92.78505,24.10895 91.73805,23.41145 90.73755,22.66445 C90.08055,22.17095 89.43705,21.66395 88.78755,21.16445 C87.48405,20.16545 86.17905,19.16795 84.87705,18.16895 C83.58855,17.17745 82.32255,16.16195 81.00555,15.19445 C79.74705,14.26745 78.48405,13.34495 77.21205,12.42995 C75.46305,11.16845 73.67055,9.94895 71.94855,8.66045 C70.75455,7.76495 69.49005,6.93845 68.31105,6.02645 C66.52605,4.64795 64.68255,3.32495 62.90505,1.94045 C62.59305,1.69745 62.27505,1.45595 61.90305,1.27595 C61.37055,1.01795 60.83505,0.76445 60.38055,0.40595 C60.21105,0.27095 60.02205,0.25745 59.81805,0.36095 C59.58105,0.48095 59.34855,0.60845 59.15205,0.77945 C58.84905,1.04945 58.55055,1.32245 58.23855,1.58495 C56.67555,2.89445 55.11405,4.20245 53.55105,5.51045 C52.16655,6.66995 50.77755,7.82795 49.39755,8.99195 C48.11805,10.06595 46.85055,11.15045 45.57255,12.22595 C45.47505,12.30995 45.39255,12.42695 45.19605,12.41645 C45.11055,12.14345 45.07455,11.86295 45.07755,11.57795 C45.09405,10.46795 45.05655,9.35795 44.97105,8.25095 C44.90805,7.44095 44.91105,6.63245 44.90955,5.82245 C44.90805,5.45795 44.92605,5.45795 45.33555,5.38745 C45.68805,5.32595 45.69405,5.32595 45.68355,5.02595 C45.67305,4.67795 45.60555,4.32845 45.63555,3.98195 C45.68805,3.32345 45.65505,2.66195 45.73755,2.00345 C45.76305,1.79495 45.77655,1.58045 45.72405,1.37045 C45.64455,1.06145 45.35205,0.84395 44.98605,0.83645 C44.85705,0.83345 44.72205,0.84245 44.59605,0.86645 C44.05005,0.96545 43.50255,1.01045 42.94605,0.99245 C42.36105,0.97445 41.78205,1.04495 41.20155,1.09745 C40.75155,1.13645 40.30455,1.22195 39.85305,1.19795 C39.05055,1.15745 38.24955,1.19495 37.45005,1.22345 C36.92505,1.24145 36.83655,1.29095 36.67605,1.72295 C36.62955,1.85345 36.60555,1.99145 36.58755,2.12645 C36.44205,3.19595 36.53655,4.26845 36.59505,5.33795 C36.59955,5.43545 36.62505,5.53745 36.67005,5.62745 C36.76455,5.83145 36.90705,5.89445 37.10805,5.77295 C37.34355,5.63045 37.57905,5.67545 37.82055,5.69195 C38.03205,5.70395 38.12355,5.80595 38.12205,5.98745 C38.10555,6.82295 38.21505,7.65545 38.15355,8.49095 C38.05455,9.86345 38.15805,11.23295 38.22555,12.60245 C38.25855,13.31195 38.32155,14.01995 38.33655,14.73095 C38.35905,15.61595 38.34255,16.50095 38.34105,17.38595 C38.34105,17.54795 38.29605,17.72345 38.38605,17.86745 C38.53605,18.10445 38.39205,18.23195 38.20455,18.37145 C37.74105,18.71495 37.28205,19.05995 36.83055,19.41395 C34.84905,20.96195 32.97255,22.60295 31.06005,24.21395 C29.27355,25.71695 27.49605,27.22895 25.72755,28.74695 C25.15005,29.24345 24.51255,29.67995 23.93805,30.17945 C23.72355,30.36695 23.72355,30.37145 23.89305,30.58145 C23.97705,30.68495 24.07755,30.77195 24.20355,30.84095 C24.38955,30.94145 24.54855,31.06895 24.70605,31.19945 C25.01655,31.45895 25.33905,31.70495 25.60005,32.01245 C25.89855,32.36345 26.26755,32.33495 26.54955,31.97795 C26.63355,31.87295 26.73405,31.78445 26.83155,31.69445 C27.14655,31.40345 27.45705,31.11095 27.77055,30.81995 C27.67005,31.20095 27.67905,31.77245 27.73605,32.33495 C27.86955,33.74345 27.85305,35.16545 27.83655,36.59345 C27.77205,42.07745 27.69405,47.55995 27.65205,53.04395 C27.61755,57.53345 27.61455,56.05445 27.73005,60.50645 C27.81705,63.88745 27.87705,67.25795 27.89505,70.62695 C27.90105,72.31295 27.89955,73.99595 27.88455,75.68195 C27.86955,76.52345 27.85905,77.36645 27.84855,78.20945 L27.82305,79.47395 L27.80655,80.10695 L27.79305,81.12995 C28.09755,81.13295 28.40505,81.13595 28.71105,81.14045 C29.02005,81.14495 29.33205,81.14945 29.64405,81.15545 C29.93205,81.15845 30.22305,81.16145 30.51255,81.1632383 C31.09155,81.16445 31.66905,81.15545 32.23155,81.13145 C38.35905,80.86595 44.50905,80.88395 50.67705,80.92295 C54.01005,80.94545 57.34305,80.94395 60.67455,80.94695 L60.67455,80.31395 C56.79105,80.27795 52.90755,80.24045 49.02255,80.21645 L60.67455,80.25845 L60.67455,54.89345 L78.73005,54.89345 L78.73005,80.32445 L85.85355,80.34995 C84.95355,80.34995 84.05055,80.35145 83.15205,80.35295 C81.67755,80.35595 80.20305,80.36195 78.73005,80.36795 L78.73005,80.97245 C81.44505,80.96945 84.14955,80.97695 86.82105,81.04145 C88.05405,81.07145 89.28705,81.09545 90.52005,81.11195 C91.13655,81.11795 91.75005,81.12545 92.36505,81.13145 C93.14055,81.13595 93.91455,81.14045 94.68705,81.14495 C94.68855,80.35445 94.69305,79.56395 94.69305,78.77195 L94.69305,76.80845 C94.68705,75.49895 94.68105,74.19095 94.67505,72.88145 C94.65705,70.26545 94.63905,67.64945 94.64655,65.03195 C94.65705,61.97795 94.77255,64.92845 94.72905,61.88345 C94.64655,56.18795 94.88655,50.49545 94.70955,44.80295 C94.58055,40.65545 94.89105,36.49145 94.66305,31.92845 C94.55955,32.13845 94.49055,32.33345 94.43955,32.51795 L94.47855,30.96395 C94.52505,31.17995 94.58505,31.38995 94.65105,31.59845 C94.65105,30.92045 94.79805,30.16295 94.62255,29.42495 C94.97355,29.66645 95.31405,29.91095 95.65305,30.16295 C95.78805,30.26345 95.91255,30.30245 96.08055,30.30245 C96.37305,30.30095 96.56205,30.15245 96.74205,29.98295 C97.01505,29.72645 97.18605,29.39945 97.50855,29.17595 L97.50855,27.45545 C96.33255,26.52095 95.09805,25.64795 93.83205,24.80495 M34.98555,80.37845 C33.86355,80.39345 32.74005,80.40845 31.61805,80.42495 C30.60855,80.43395 29.59905,80.44145 28.58655,80.44895 L35.17005,80.37395 C35.11005,80.37545 35.04705,80.37695 34.98555,80.37845 M94.06905,50.81795 C93.99405,56.72795 93.98355,56.64095 93.96255,62.55245 C93.94755,65.50745 93.93105,68.46095 93.91605,71.41745 C93.90255,72.89345 93.88755,74.36945 93.87105,75.84695 C93.85005,77.30945 93.82755,78.77195 93.80355,80.23445 L93.79755,80.38295 L93.67905,80.37995 L93.62505,80.37845 L93.81255,59.08145 L94.19655,42.84995 C94.15155,45.50645 94.10205,48.16145 94.06905,50.81795\",\n id: \"Fill-2\",\n fill: \"#5A0231\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.3618,80.01785 L42.3858,79.99835 C42.3753,80.00435 42.3663,80.01035 42.3618,80.01785\",\n id: \"Fill-4\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.19485,80.01485 L42.19185,80.04935 C42.19785,80.03135 42.20235,80.01635 42.19485,80.01485\",\n id: \"Fill-6\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.03225,80.46095 L42.04275,80.48495 C42.05025,80.45795 42.05625,80.43245 42.06375,80.40995 L42.03225,80.46095 Z\",\n id: \"Fill-8\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.0132,80.78165 L41.9682,80.73215 C41.9802,80.75015 41.9937,80.76665 42.0132,80.78165\",\n id: \"Fill-10\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.30615,80.84105 C42.31965,80.82755 42.32565,80.81105 42.32415,80.79455 C42.31065,80.80655 42.30315,80.82155 42.30615,80.84105\",\n id: \"Fill-12\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.01605,80.7443 C42.01155,80.7293 42.00855,80.7128 42.00855,80.6978 C42.00255,80.7128 42.00255,80.7293 42.01605,80.7443\",\n id: \"Fill-14\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.8227,79.82225 L41.8197,79.85075 C41.8257,79.88075 41.8362,79.88225 41.8557,79.88675 L41.8227,79.82225 Z\",\n id: \"Fill-16\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-18\",\n fill: \"#048066\",\n points: \"42.42615 80.00675 42.41565 79.90475 42.40365 79.90175\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-20\",\n fill: \"#048066\",\n points: \"28.15125 30.64445 28.14225 30.67295 28.16625 30.60095\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-22\",\n fill: \"#048066\",\n points: \"28.1133 30.74705 28.1448 30.65405 28.1448 30.65255\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-24\",\n fill: \"#048066\",\n points: \"28.0341 30.94115 28.0116 31.00115 28.0461 30.90965\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-26\",\n fill: \"#048066\",\n points: \"28.11915 30.7199 28.12215 30.7139 28.13115 30.6914\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.0839,30.81155 L28.0854,30.80705 L28.0839,30.81155 Z\",\n id: \"Fill-28\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-30\",\n fill: \"#048066\",\n points: \"28.0869 30.79025 28.0869 30.79175 28.0929 30.77825\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M28.0752,30.8306 L28.0767,30.8276 L28.0752,30.8306 Z\",\n id: \"Fill-32\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-34\",\n fill: \"#048066\",\n points: \"28.0386 30.90455 28.0716 30.82655 28.0836 30.79505\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-36\",\n fill: \"#048066\",\n points: \"28.062 30.84305 28.0455 30.88505 28.0725 30.81755\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.75285,30.44015 L27.77535,30.43715 L27.75285,30.44015 Z\",\n id: \"Fill-38\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.87735,30.43505 L27.93585,30.42605 L27.87735,30.43505 Z\",\n id: \"Fill-40\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-42\",\n fill: \"#048066\",\n points: \"27.8598 30.4475 27.8538 30.449 27.8643 30.4475\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.91995,30.42845 L27.97395,30.42095 L27.91995,30.42845 Z\",\n id: \"Fill-44\",\n fill: \"#048066\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-46\",\n fill: \"#048066\",\n points: \"28.69185 30.6878 28.70535 30.6968 28.69035 30.6863\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-48\",\n fill: \"#048066\",\n points: \"28.24365 30.40655 28.21665 30.47705 28.25115 30.39155\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-50\",\n fill: \"#048066\",\n points: \"28.25535 30.38375 28.25385 30.39125 28.26285 30.36575\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-52\",\n fill: \"#048066\",\n points: \"28.28895 30.3515 28.20195 30.518 28.29045 30.35\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-54\",\n fill: \"#048066\",\n points: \"27.86865 30.1121 27.84915 30.0971 27.81615 30.0716\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-56\",\n fill: \"#048066\",\n points: \"27.64455 30.45635 27.64305 30.45785 27.76305 30.43835\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-58\",\n fill: \"#5A0231\",\n points: \"95.184 47.1899 95.217 47.2229 95.1375 46.9529\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-60\",\n fill: \"#5A0231\",\n points: \"95.25435 43.637 95.36085 44.0705 95.25435 43.553\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-62\",\n fill: \"#5A0231\",\n points: \"95.6454 41.42435 95.7174 41.57435 95.6094 41.30885\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-64\",\n fill: \"#5A0231\",\n points: \"95.3583 41.96705 95.3658 41.86205 95.3298 41.82905\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-66\",\n fill: \"#5A0231\",\n points: \"94.9614 61.8296 94.9689 61.8251 94.9674 61.8116\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-68\",\n fill: \"#5A0231\",\n points: \"95.3217 49.7117 95.3472 49.8002 95.3952 49.5512\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-70\",\n fill: \"#5A0231\",\n points: \"94.91895 77.543 95.03895 77.4935 95.04195 77.435\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-72\",\n fill: \"#5A0231\",\n points: \"95.121 51.82325 95.1525 51.98525 95.133 51.31325\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-74\",\n fill: \"#5A0231\",\n points: \"95.3613 74.5019 95.4483 75.0179 95.4618 74.1704\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-76\",\n fill: \"#5A0231\",\n points: \"95.47845 76.6238 95.46945 77.6648 95.49945 76.1858\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-78\",\n fill: \"#048066\",\n points: \"78.67665 65.16935 78.88965 65.10935 78.67365 64.75835\"\n}), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"Fill-80\",\n fill: \"#048066\",\n points: \"27.21375 67.55345 27.21675 67.83995 27.32925 67.30445\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n id: \"Fill-82\",\n fill: \"#E1DBD7\",\n points: \"43.0386 77.0639 43.4076 81.2594 40.8906 84.7454 37.3311 87.0689 33.5241 88.9979 29.9406 90.0599 26.2251 90.4739 22.4976 90.7799 18.7926 90.2279 15.1371 89.5784 11.5581 88.5914 8.2266 86.9519 5.1606 84.8654 2.5896 81.2909 2.5701 76.9439 5.1471 80.9279 8.2686 82.9289 11.5896 84.5459 15.1326 85.6529 18.7821 86.3609 22.5036 86.3414 26.2371 86.6729 29.9001 85.9154 33.4836 84.9269 37.3791 83.0174 40.8366 80.4914 43.0941 76.9229\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n id: \"Fill-84\",\n fill: \"#E1DBD7\",\n points: \"36.28125 78.63425 32.76525 79.91375 29.06325 80.46575 25.32375 80.26175 21.63375 79.91675 17.93925 79.51325 14.29275 78.66425 11.04225 76.80875 8.11875 74.56475 5.03475 70.15925 3.49575 68.74625 2.02125 72.14825 3.11175 75.66425 5.05875 78.76325 8.21625 80.76425 11.56425 82.35725 15.14025 83.35325 18.76425 84.26075 22.50075 84.21275 26.20575 84.05975 29.86875 83.49275 33.58575 82.97075 37.32375 80.88875 40.76925 78.47225 43.14675 75.09275 40.05375 77.44325 36.41775 79.04225\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n id: \"Fill-86\",\n fill: \"#E1DBD7\",\n points: \"43.563 60.53975 42.7665 60.06425 42.0525 62.57675 40.7955 66.08825 38.349 69.04025 35.052 71.03075 31.539 72.59225 27.4695 73.92125 23.1975 74.16125 18.9345 74.32475 14.694 73.78625 10.515 72.83525 6.6495 71.07425 7.8255 72.61475 11.133 74.39225 14.322 76.32725 17.9865 77.05175 21.6105 77.85725 25.3185 78.39125 29.0625 78.21575 32.6895 77.27375 36.3825 76.68125 39.7695 75.25325 42.6525 73.00175 45.2115 70.45175 46.545 67.04825 45.486 63.59975 43.4625 60.64475\"\n}), /*#__PURE__*/React.createElement(\"polyline\", {\n id: \"Fill-88\",\n fill: \"#E1DBD7\",\n points: \"33.5376 66.4526 29.9046 67.2971 26.2221 67.8446 22.5021 67.9031 18.8046 67.5686 15.0771 67.2581 11.6361 65.7971 8.1906 64.4381 5.2401 62.2031 2.7381 59.1266 2.3181 55.4261 0.6246 58.8551 0.8646 62.8556 3.0171 66.4136 6.0591 68.6576 9.5481 70.0526 13.0746 71.3201 16.8366 71.4386 20.5251 71.8481 24.2616 71.9996 27.9426 71.3186 31.5681 70.4246 34.7931 69.0461 37.7166 67.1306 40.3476 64.7831 41.5206 61.7246 37.7361 64.2521 33.4401 66.1616\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38.8755,53.35475 L35.808,51.31775 L32.472,49.76825 L28.95,48.66425 L25.3005,48.04175 L21.612,47.44925 L17.868,47.48675 L14.2275,48.37775 L10.5705,49.10225 L7.287,50.71475 L4.035,52.42175 L1.8525,55.35725 L0.315,58.67075 L1.1445,62.27225 L3.4005,65.15375 L6.4965,67.19225 L9.7005,69.14675 L13.395,69.81275 L17.0535,70.37375 L20.7435,70.84325 L24.486,70.94225 L28.119,70.01525 L31.7385,69.18725 L35.0595,67.69775 L38.277,65.95175 L40.5255,63.08375 L41.5875,59.72075 L41.088,56.21375 L38.9385,53.28725 L38.8755,53.35475 Z M17.832,66.41975 L16.998,64.21625 L17.5455,60.91175 L17.664,60.60275 L16.2285,60.67625 L15.9315,58.52375 L17.097,58.58075 L16.5225,57.22175 L16.9755,53.73125 L19.992,51.95075 L23.2875,52.73225 L23.5665,54.80825 L20.7135,53.98925 L19.1775,56.98775 L19.6155,58.13525 L23.7405,57.53975 L24.1155,59.51525 L20.3175,60.28625 L20.64,60.49475 L20.1015,63.85625 L23.385,63.76175 L26.6925,63.04775 L27.2715,65.42975 L22.566,66.01025 L17.832,66.41975 Z\",\n id: \"Fill-90\",\n fill: \"#E1DBD7\"\n}))))));\n\nfunction SvgHouseIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 99 92\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Group-92\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHouseIcon);\nexport default __webpack_public_path__ + \"static/media/house-icon.de5c900b.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { ReactComponent as HouseIcon } from \"./house-icon.svg\";\n\nconst House = ({ ...rest }) => {\n return ;\n};\n\nexport default House;\n","import React from \"react\";\nimport {\n StyledHeadlines,\n Heading,\n InfographicList,\n InfographicWrapper,\n} from \"./Headlines.style\";\n\nimport Infographic from \"../../components/Infographic\";\nimport GraphDown from \"../../components/Infographic/icons/GraphDown\";\nimport GraphUp from \"../../components/Infographic/icons/GraphUp\";\nimport House from \"../../components/Infographic/icons/House\";\nimport { useTranslation } from \"react-i18next\";\n\n/**\n * Headlines page /headlines\n */\nconst Headlines = ({ figures }) => {\n const { t } = useTranslation();\n\n const { transactions_change, annual_change, quarter_change, average_price } =\n figures;\n\n // let transactionsLabel = t('Transactions');\n // if (transactions_change > 0) {\n // transactionsLabel = t('Increase in transactions');\n // } else if (transactions_change < 0) {\n // transactionsLabel = t('Fall in transactions');\n // }\n\n return (\n \n {t(\"headlines.heading\")}\n\n \n \n 0 ? (\n \n ) : (\n \n )\n }\n style={{ backgroundColor: \"#DFDAD5\" }}\n titleColor=\"#007961\"\n figureColor=\"#A71C56\"\n imagePosition={annual_change > 0 ? \"right\" : \"left\"}\n />\n \n\n \n 0 ? (\n \n ) : (\n \n )\n }\n style={{ backgroundColor: \"#5A0231\" }}\n titleColor=\"#DFDAD5\"\n figureColor=\"#DFDAD5\"\n imagePosition={annual_change > 0 ? \"right\" : \"left\"}\n />\n \n\n \n }\n style={{ backgroundColor: \"#A71C56\" }}\n titleColor=\"#DFDAD5\"\n figureColor=\"#DFDAD5\"\n imagePosition=\"right\"\n />\n \n\n \n 0\n ? t(\"headlines.transactionsHeadingIncrease\")\n : t(\"headlines.transactionsHeadingDecrease\")\n }\n figure={`${transactions_change}%`}\n summary={t(\"headlines.vs\", {\n a1: \"2\",\n a2: 2021,\n b1: \"1\",\n b2: 2021,\n })}\n image={\n transactions_change > 0 ? (\n \n ) : (\n \n )\n }\n style={{ backgroundColor: \"#007961\" }}\n titleColor=\"#DFDAD5\"\n figureColor=\"#DFDAD5\"\n imagePosition=\"right\"\n />\n \n \n \n );\n};\n\nexport default Headlines;\n","import styled from 'styled-components/macro';\n\n\nexport const StyledArrow = styled.span`\n \n`;\n\n","import React from 'react';\nimport { StyledArrow } from './Arrow.styles';\n\nconst Arrow = ({ direction, color, ...rest }) => {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Arrow;","import styled from \"styled-components/macro\";\nimport { device } from \"../../device\";\n\nexport const Number = styled.div`\n border-radius: 50%;\n height: 20px;\n width: 20px;\n background-color: #e5223c;\n color: #fff;\n font-size: 0.75rem;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 5px;\n flex-shrink: 0;\n\n @media ${device.mobileM} {\n width: 30px;\n font-size: 0.8125rem;\n height: 30px;\n margin-right: 15px;\n }\n\n @media ${device.tablet} {\n font-size: 1.125rem;\n height: 48px;\n width: 48px;\n }\n`;\n\nexport const Title = styled.h3`\n font-weight: bold;\n font-size: 0.8125rem;\n color: #3c4350;\n margin: 0;\n padding: 0;\n\n @media ${device.tablet} {\n font-size: 1.25rem;\n }\n`;\n\nexport const Subtitle = styled.div`\n text-transform: uppercase;\n font-size: 0.512rem;\n color: #8b8b8b;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 5px;\n padding-right: 5px;\n cursor: pointer;\n\n justify-content: space-between;\n transition: all 0.4s;\n\n @media ${device.mobileM} {\n padding-left: 10px;\n padding-right: 10px;\n }\n`;\n\nexport const PercentageChangeWrapper = styled.div`\n display: flex;\n width: 150px;\n justify-content: space-between;\n & > div:first-child {\n padding-right: 10px;\n }\n @media ${device.mobileM} {\n /* width: 130px; */\n }\n\n @media ${device.tablet} {\n width: 220px;\n }\n & > div {\n width: calc(100% / 2);\n }\n`;\n\nexport const AveragePrice = styled.div`\n font-size: 0.5rem;\n font-size: 0.75rem;\n color: #8b8b8b;\n font-weight: bold;\n\n @media ${device.tablet} {\n font-size: 0.875rem;\n }\n`;\n\nexport const Column = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const ColumnHeader = styled.div`\n min-width: none;\n width: 125px;\n word-break: break-all;\n @media ${device.mobileM} {\n width: 175px;\n /* width:auto; */\n }\n\n @media ${device.tablet} {\n width: 260px;\n }\n\n display: flex;\n align-items: center;\n`;\n\nexport const TitleWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n`;\n\nexport const Content = styled.div`\n border-top: 1px solid #fff;\n`;\n\nexport const Prices = styled.div`\n padding-left: 10px;\n padding-right: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n background-color: #eef5f5;\n\n @media ${device.tablet} {\n padding-top: 30px;\n padding-bottom: 30px;\n }\n`;\n\nexport const PricesHeading = styled.h3`\n font-size: 0.75rem;\n color: #047961;\n line-height: 1;\n padding: 0;\n margin: 0;\n text-align: center;\n padding-bottom: 10px;\n @media ${device.tablet} {\n font-size: 1.375rem;\n padding-bottom: 30px;\n font-weight: normal;\n }\n`;\nexport const LivingCosts = styled.div`\n background: #630e34;\n padding-left: 20px;\n padding-right: 20px;\n padding-top: 20px;\n padding-bottom: 20px;\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n`;\n\nexport const LivingCostsHeadlines = styled.div`\n display: flex;\n justify-content: space-between;\n width: 100%;\n`;\n\nexport const ToggleButton = styled.button`\n border: none;\n font-size: 1rem;\n background-color: #e5223c;\n font-weight: bold;\n height: 30px;\n width: 30px;\n color: #fff;\n cursor: pointer;\n`;\n\nfunction getBackgroundColorForIcon(props) {\n // If clicked on/active\n if (props.active) {\n return \"#630E34\";\n }\n\n if (props.increase) {\n return \"#047961\";\n }\n\n return \"#E5223C\";\n}\n\nexport const StyledLocationDetail = styled.div`\n ${Content} {\n display: ${(props) => (props.active ? \"block\" : \"none\")};\n }\n\n ${Header} {\n background-color: ${(props) => (props.active ? \"#EEF5F5\" : \"transparent\")};\n }\n\n ${Number} {\n background-color: ${(props) => getBackgroundColorForIcon(props)};\n }\n ${ToggleButton} {\n background-color: ${(props) => getBackgroundColorForIcon(props)};\n }\n\n // If active override\n\n &:hover {\n background-color: #eef5f5;\n }\n`;\n\nexport const LivingCostColumn = styled.div`\n width: calc(100% / 3);\n display: flex;\n flex-direction: column;\n text-align: center;\n align-items: center;\n justify-content: center;\n padding-right: 10px;\n\n &:last-child {\n padding-right: 0;\n }\n`;\n\nexport const LivingCostHeading = styled.h3`\n font-size: 0.64rem;\n color: #fefefe;\n font-weight: normal;\n text-align: center;\n\n @media ${device.tablet} {\n font-size: 0.7865rem;\n }\n`;\n\nexport const LivingCostValue = styled.div`\n font-size: 0.9rem;\n color: #fefefe;\n @media ${device.tablet} {\n font-size: 1.25rem;\n }\n`;\n\nexport const Circle = styled.div`\n height: 26px;\n width: 26px;\n border-radius: 50%;\n background-color: #fff;\n color: #630e34;\n font-weight: bold;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const ButtonWrapper = styled.div`\n @media ${device.tablet} {\n display: none;\n }\n`;\nexport const ActionsWrapper = styled.div`\n width: 100%;\n padding-top: 20px;\n text-align: center;\n display: flex;\n justify-content: space-between;\n @media ${device.tablet} {\n justify-content: center;\n }\n`;\n\nexport const HouseTypePricesWrapper = styled.div`\n display: flex;\n justify-content: center;\n & > * {\n padding-right: 15px;\n }\n\n & > :last-child {\n padding-right: 0;\n }\n`;\n\nexport const Image = styled.img`\n display: block;\n max-width: 100%;\n height: auto;\n`;\n\nexport const SocialIcons = styled.div`\n display: flex;\n align-items: center;\n @media ${device.tablet} {\n padding-left: 20px;\n }\n`;\n\nexport const ShareText = styled.div`\n color: #fff;\n font-weight: bold;\n font-size: 0.625rem;\n padding-right: 15px;\n\n @media ${device.tablet} {\n }\n`;\n\nexport const SocialButton = styled.button`\n height: 30px;\n width: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n cursor: pointer;\n margin-right: 10px;\n background: none;\n transition: all 0.3s;\n &:hover {\n transform: scale(1.2);\n }\n\n &:last-child {\n margin-right: 0;\n }\n`;\n\nexport const SocialImage = styled.img`\n max-width: 100%;\n height: auto;\n width: 100%;\n`;\n","export default __webpack_public_path__ + \"static/media/facebook-icon.5810b280.svg\";","export default __webpack_public_path__ + \"static/media/twitter-icon.ceb17b7a.svg\";","import styled from \"styled-components/macro\";\nimport { device } from \"../../device\";\n\nexport const StyledPercentageChange = styled.div`\n display: flex;\n`;\n\nexport const Value = styled.div`\n font-size: 0.775rem;\n color: #3c4350;\n font-weight: normal;\n\n @media ${device.mobileM} {\n font-size: 0.875rem;\n }\n @media ${device.tablet} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Icon = styled.svg`\n max-width: 100%;\n height: auto;\n padding-right: 5px;\n @media ${device.tablet} {\n padding-right: 10px;\n }\n`;\n","import React from \"react\";\nimport { StyledPercentageChange, Value, Icon } from \"./PercentageChange.styles\";\n\nimport { useTranslation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\n\nconst PercentageChange = ({ value, color }) => {\n const { t } = useTranslation();\n\n let styles = {};\n\n if (value > 0) {\n styles.transform = \"scale(1, -1)\";\n }\n // let icon = value > 0 ? : arrowDecrease;\n\n const change = (Math.round(value * 100) / 100).toFixed(1);\n\n return (\n \n 0 ? t(\"percentage.increaseOf\") : t(\"percentage.decreaseOf\")\n }\n data-testid=\"percentage-change_icon\"\n style={styles}\n >\n \n \n \n \n \n \n\n {change}%\n \n );\n};\n\nPercentageChange.propTypes = {\n value: PropTypes.number.isRequired,\n};\n\nexport default PercentageChange;\n","import styled from 'styled-components/macro';\n\n\nexport const StyledButton = styled.button`\n display:inline-flex;\n cursor:pointer;\n border: 2px solid #fff;\n padding-top:10px;\n padding-bottom:10px;\n padding-right:20px;\n padding-left:20px;\n background-color:transparent;\n color:#FFFFFF;\n transition: all .3s;\n &:hover {\n background-color: #fff;\n color:#000;\n }\n`;\n\n","import React from 'react';\nimport { StyledButton } from './Button.styles';\n\nconst Button = ({ children, ...rest }) => {\n return (\n \n { children }\n \n )\n}\n\nexport default Button;","export default __webpack_public_path__ + \"static/media/detached.cd06beda.svg\";","export default __webpack_public_path__ + \"static/media/semi-detached.52607656.svg\";","export default __webpack_public_path__ + \"static/media/terraced.4f01f2c4.svg\";","export default __webpack_public_path__ + \"static/media/flats.de764b1e.svg\";","import styled from 'styled-components/macro';\n\n\nexport const StyledHouseTypePrice = styled.div`\n display:flex;\n justify-content:center;\n flex-direction:column;\n align-items:center;\n flex-wrap:wrap;\n`;\n\nexport const Price = styled.div`\n font-size:1.5rem;\n color: #047961;\n`;\n\n\nexport const Title = styled.h3`\n font-size: 0.75rem;\n color: #595959;\n font-weight:normal;\n`;\n\nexport const Image = styled.img`\n max-width:100%;\n height:auto;\n max-height:40px;\n`;","import React from 'react';\nimport { Image, Price, StyledHouseTypePrice, Title } from './HouseTypePrice.styles';\nimport PropTypes from 'prop-types';\n\nconst HouseTypePrice = ({ title, value, image, ...rest }) => {\n return (\n \n {\n { title }\n { parseInt(value).toLocaleString('en-GB', { style: 'currency', currency: 'GBP', minimumFractionDigits: 0}) }\n \n )\n}\n\nHouseTypePrice.propTypes = {\n title: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n image: PropTypes.string.isRequired\n}\n\nexport default HouseTypePrice;","export default __webpack_public_path__ + \"static/media/tick.797296d0.svg\";","import styled from 'styled-components/macro';\nimport { device } from '../../device';\n\n\n\nexport const StyledCarousel = styled.div`\n\n overflow:hidden;\n display:flex;\n flex-direction:column;\n align-items:center;\n`;\n\nexport const Container = styled.div`\n display:flex;\n`;\n\nexport const Slide = styled.div`\n position:relative;\n min-width:100%;\n display:flex;\n flex-direction:column;\n justify-content:center;\n align-items:center;\n`;\n\n\nexport const DotList = styled.div`\n\n margin:0;\n padding:0;\n padding-top:10px;\n display:inline-flex;\n justify-content:space-between;\n margin:0 auto;\n`;\n\n\nexport const Dot = styled.button`\n border:none;\n padding:0;\n margin:0;\n background-color: ${ props => props.isActive ? '#047961' : '#B6B6B6' };\n border-radius:50%;\n height:7px;\n width:7px;\n margin-right:5px;\n &:last-child {\n margin-right:0;\n }\n \n`;","import { useEmblaCarousel } from 'embla-carousel/react';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport HouseTypePrice from '../HouseTypePrice';\nimport { StyledCarousel, Container, Slide, DotList, Dot } from './Carousel.styles';\nimport PropTypes from 'prop-types';\nimport { useRecursiveTimeout } from './useRecursiveTimeout';\n\nconst Carousel = ({ types }) => {\n\n const { t } = useTranslation();\n\n\n\n\n const [emblaRef, emblaApi] = useEmblaCarousel({ \n loop: false, \n align: 'start', \n containScroll: 'trimSnaps', \n slidesToScroll: 1\n });\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [scrollSnaps, setScrollSnaps] = useState([]);\n\n\n // So we can scroll to a item manually.\n const scrollTo = useCallback((index) => emblaApi && emblaApi.scrollTo(index), [\n emblaApi\n ]);\n const autoplay = useCallback(() => {\n if (!emblaApi) return;\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext();\n } else {\n emblaApi.scrollTo(0);\n }\n }, [emblaApi]);\n\n const { play, stop } = useRecursiveTimeout(autoplay, 2000);\n\n /**\n * Used for:\n * 1. Setting the embla scroll snaps (basically informtion about slides\n */ \n const onSelect = useCallback(() => {\n if (!emblaApi) return;\n setSelectedIndex(emblaApi.selectedScrollSnap());\n // setPrevBtnEnabled(embla.canScrollPrev());\n emblaApi.on(\"pointerDown\", stop);\n // setNextBtnEnabled(embla.canScrollNext());\n }, [emblaApi, setSelectedIndex, stop]);\n\n\n\n\n \n \n\n const scrollNext = useCallback(() => {\n if (!emblaApi) return;\n emblaApi.scrollNext();\n stop();\n }, [emblaApi, stop]);\n \n const scrollPrev = useCallback(() => {\n if (!emblaApi) return;\n emblaApi.scrollPrev();\n stop();\n }, [emblaApi, stop]);\n\n\n useEffect(() => {\n play();\n }, [play]);\n\n\n useEffect(() => {\n if (!emblaApi) return;\n onSelect();\n setScrollSnaps(emblaApi.scrollSnapList());\n emblaApi.on(\"select\", onSelect);\n }, [emblaApi, setScrollSnaps, onSelect]);\n\n\n\n return (\n \n \n { types.map( (item, key) => (\n \n ))}\n \n \n\n \n { scrollSnaps.map((_, index) => (\n scrollTo(index)}\n />\n ))}\n \n\n \n )\n}\n\n\nCarousel.propTypes = {\n types: PropTypes.array.isRequired,\n}\n\nexport default Carousel;","import { useState, useRef, useEffect, useCallback } from \"react\";\n\n/**\n * Pulled directly from Embla demo.\n * @param {*} callback \n * @param {*} delay \n */\nexport const useRecursiveTimeout = (callback, delay) => {\n const [isRunning, setIsRunning] = useState(false);\n const stop = useCallback(() => setIsRunning(false), [setIsRunning]);\n const play = useCallback(() => setIsRunning(true), [setIsRunning]);\n const savedCallback = useRef(callback);\n\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!isRunning) return;\n let id = 0;\n\n const tick = () => {\n if (!isRunning) return clearTimeout(id);\n savedCallback.current();\n requestAnimationFrame(() => (id = setTimeout(tick, delay)));\n };\n requestAnimationFrame(() => (id = setTimeout(tick, delay)));\n\n return () => {\n if (id) clearTimeout(id);\n stop();\n };\n }, [isRunning, delay, stop]);\n\n return { play, stop };\n};\n","import React from \"react\";\nimport {\n AveragePrice,\n ToggleButton,\n Circle,\n Content,\n Header,\n LivingCostColumn,\n LivingCosts,\n Number,\n PercentageChangeWrapper,\n Prices,\n PricesHeading,\n StyledLocationDetail,\n Title,\n TitleWrapper,\n LivingCostHeading,\n LivingCostValue,\n LivingCostsHeadlines,\n ButtonWrapper,\n HouseTypePricesWrapper,\n ColumnHeader,\n Image,\n SocialIcons,\n SocialButton,\n SocialImage,\n ShareText,\n ActionsWrapper,\n} from \"./LocationDetail.styles\";\n\nimport FacebookIcon from \"./img/facebook-icon.svg\";\nimport TwitterIcon from \"./img/twitter-icon.svg\";\n\nimport PropTypes from \"prop-types\";\nimport PercentageChange from \"../PercentageChange\";\nimport Button from \"../Button\";\n\nimport detachedImage from \"./img/detached.svg\";\nimport semiDetachedImage from \"./img/semi-detached.svg\";\nimport terracedImage from \"./img/terraced.svg\";\nimport flatsImage from \"./img/flats.svg\";\nimport { useMedia } from \"react-use\";\nimport { device } from \"../../device\";\nimport HouseTypePrice from \"../HouseTypePrice\";\nimport { useTranslation } from \"react-i18next\";\nimport tickImage from \"./img/tick.svg\";\nimport { lifeSatisifactionFriendly } from \"../../utils\";\nimport Carousel from \"../Carousel\";\n\nconst houseTypeImages = [\n detachedImage,\n semiDetachedImage,\n terracedImage,\n flatsImage,\n];\n\nconst HouseTypeList = ({ types }) => {\n const { t } = useTranslation();\n\n return (\n \n {types.map((item, key) => (\n \n ))}\n \n );\n};\n\nconst LocationDetail = ({\n id,\n location,\n detail,\n active,\n onToggle,\n ...rest\n}) => {\n const { t } = useTranslation();\n\n const isLargerDevice = useMedia(device.mobileL);\n\n const handleToggle = () => {\n onToggle(id, !active);\n };\n\n /**\n * Bit of a hack.\n */\n const handleBackToTop = (e) => {\n e.preventDefault();\n document.querySelector(\"#heading-top\").scrollIntoView();\n };\n\n const getShareUrl = () => {\n // eslint-disable-next-line no-restricted-globals\n return \"https://www.principality.co.uk/mortgages/House-Price-Index\";\n };\n\n const handleShareFacebook = () => {\n window.parent.postMessage(\n `event~HousePriceIndex~${location}~Facebook~0`,\n \"*\"\n );\n\n window.FB.ui(\n {\n method: \"share\",\n href: getShareUrl(),\n quote: t(\"location.facebookShareText\"),\n },\n function (response) {}\n );\n };\n\n const handleShareTwitter = () => {\n window.parent.postMessage(\n `event~HousePriceIndex~${location}~Twitter~0`,\n \"*\"\n );\n const text = encodeURIComponent(t(\"location.twitterShareText\"));\n window.open(\n \"https://twitter.com/intent/tweet?text=\" +\n text +\n \"&url=\" +\n getShareUrl() +\n \"&hashtags=principality\"\n );\n };\n\n const housePrices = detail.house_prices;\n\n // Let's add the images onto the house types.\n const houseTypes = housePrices.by_type.map((item, key) => ({\n ...item,\n image: houseTypeImages[key],\n }));\n\n // data-id is added so this can be queried via the DOM to scrollIntoView.\n return (\n 0 ? true : false}\n data-testid=\"location-detail\"\n active={active}\n {...rest}\n >\n
\n \n {id + 1}\n \n {t(`locations.${location}`, location)}\n \n {t(\"location.avgLabel\")}{\" \"}\n {parseInt(housePrices.average).toLocaleString(\"en-GB\", {\n style: \"currency\",\n currency: \"GBP\",\n minimumFractionDigits: 0,\n })}{\" \"}\n \n \n \n\n \n \n \n \n\n {active ? \"-\" : \"+\"}\n
\n\n {active && (\n \n \n \n {t(\"location.avgHousePriceByTypeHeading\")}\n \n {!isLargerDevice ? (\n \n ) : (\n \n )}\n \n \n \n \n £\n \n {t(\"location.councilTaxHeading\")}\n \n \n {detail.council_tax_average.toLocaleString(\"en-GB\", {\n style: \"currency\",\n currency: \"GBP\",\n minimumFractionDigits: 0,\n })}\n \n \n \n \n \n \n \n {t(\"location.lifeSatisfactionHeading\")}\n \n \n {parseFloat(detail.life_satisfaction)}/10 (\n {t(\n lifeSatisifactionFriendly(\n parseFloat(detail.life_satisfaction)\n )\n )}\n )\n \n \n \n £\n \n {t(\"location.avgSalaryHeading\")}\n \n \n {isNaN(parseInt(detail.average_salary))\n ? \"N/A\"\n : parseInt(detail.average_salary).toLocaleString(\"en-GB\", {\n style: \"currency\",\n currency: \"GBP\",\n minimumFractionDigits: 0,\n })}{\" \"}\n \n \n \n \n \n \n \n \n {t(\"location.shareLabelText\")}\n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nLocationDetail.propTypes = {\n active: PropTypes.bool,\n id: PropTypes.number.isRequired,\n location: PropTypes.string.isRequired,\n detail: PropTypes.object.isRequired,\n onToggle: PropTypes.func.isRequired,\n};\n\nLocationDetail.defaultProps = {\n active: false,\n};\n\nexport default LocationDetail;\n","\n\n\n/**\n * Friendly name for life safisfaction from OONS\n * @param {*} score \n */\nexport function lifeSatisifactionFriendly(score) {\n if (score <= 4) {\n return 'location.lifeSatisfactionLow';\n }\n\n if (score <= 6) {\n return 'location.lifeSatisfactionMedium';\n }\n\n if (score <= 8) {\n return 'location.lifeSatisfactionHigh';\n }\n\n return 'location.lifeSatisfactionVeryHigh';\n}\n\n\n/**\n * Converts \"Hello test\" to \"hello-test\"\n * @param {*} input \n */\nexport function convertToSlug(input)\n{\n return input\n .toLowerCase()\n .replace(/[^\\w ]+/g,'')\n .replace(/ +/g,'-');\n}","import styled from \"styled-components\";\nimport { device } from \"../../device\";\n\nexport const StyledHome = styled.section``;\n\nexport const Heading = styled.h1`\n font-size: 1rem;\n color: #8b8b8b;\n text-align: left;\n padding: 0;\n margin: 0;\n`;\n\nexport const Image = styled.img`\n max-width: 100%;\n height: auto;\n`;\nexport const LocationDetailItem = styled.div`\n border-top: 1px solid #8b8b8b;\n`;\n\nexport const Key = styled.div`\n display: flex;\n justify-content: flex-end;\n padding-bottom: 20px;\n margin-left: auto;\n @media ${device.tablet} {\n padding-top: 20px;\n width: 100%;\n top: 0;\n }\n`;\nexport const KeyItem = styled.div`\n font-size: 0.8rem;\n color: #636363;\n\n &:first-child {\n padding-right: 20px;\n }\n`;\nexport const LocationDetailItems = styled.div`\n @media ${device.tablet} {\n position: relative;\n height: 100%;\n max-height: 617px;\n overflow-y: scroll;\n }\n`;\n","import React, { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Arrow from \"../../components/Arrow\";\nimport LocationDetail from \"../../components/LocationDetail\";\nimport {\n Key,\n KeyItem,\n LocationDetailItem,\n StyledHome,\n LocationDetailItems,\n} from \"./Home.style\";\n\nconst Home = ({ locations, onLocationChange, activeLocationIndex }) => {\n const { t } = useTranslation();\n\n useEffect(() => {}, []);\n\n return (\n \n \n \n {\" \"}\n {t(\"home.key.averageAnnualChange\")}\n \n \n {\" \"}\n {t(\"home.key.averageQuarterlyChange\")}\n \n \n \n {locations.map((location, index) => (\n \n \n \n ))}\n \n \n );\n};\n\nexport default Home;\n","import { NavLink } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { device } from \"../../device\";\n\nexport const StyledArchive = styled.section``;\n\nexport const Heading = styled.h1`\n font-size: 1rem;\n color: #8b8b8b;\n text-align: left;\n padding: 0;\n margin: 0;\n border-bottom: 1px solid #e2e2e2;\n padding-bottom: 20px;\n padding-top: 20px;\n`;\n\nexport const YearItems = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin: 0 auto;\n`;\n\nexport const YearItem = styled.div`\n width: calc(100% / 2 - 20px);\n padding-top: 20px;\n margin-right: 20px;\n\n &:nth-child(2n) {\n margin-right: 0;\n }\n\n padding-bottom: 15px;\n border-bottom: 1px solid #e2e2e2;\n`;\n\nexport const YearItemHeading = styled.h3`\n margin: 0;\n padding: 0;\n font-size: 0.8125rem;\n padding-bottom: 10px;\n span {\n color: #007961;\n }\n @media ${device.tablet} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Highlight = styled.span`\n color: #007961;\n`;\n\nexport const QuarterItems = styled.ol`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const QuarterItem = styled.li``;\n\n// const activeClassName = 'is-active';\n// export const QuarterLink = styled(NavLink).attrs({\n// activeClassName\n// })`\n// font-size:0.8125rem;\n// line-height:1.3;\n// color: #3D434F;\n// text-decoration:none;\n// &::after {\n// content: ' →';\n// display:inline-block;\n// padding-left:5px;\n\n// }\n// `;\nexport const QuarterLink = styled.a`\n font-size: 0.8125rem;\n line-height: 1.3;\n color: ${(props) => (props.isActive ? \"#008067\" : \"#008067\")};\n font-weight: ${(props) => (props.isActive ? \"bold\" : \"normal\")};\n /* text-decoration: ${(props) => (props.isActive ? \"underline\" : \"none\")}; */\n text-decoration: underline;\n &::after {\n content: \"\";\n display: inline-block;\n padding-left: 5px;\n }\n\n &:hover {\n text-decoration: underline;\n }\n\n @media ${device.tablet} {\n font-size: 1.25rem;\n }\n`;\n\nexport const QuarterButton = styled.button`\n background: none;\n border: none;\n font-size: 0.8125rem;\n line-height: 1.3;\n color: #3d434f;\n text-decoration: none;\n &::after {\n content: \" →\";\n display: inline-block;\n padding-left: 5px;\n }\n`;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Heading,\n StyledArchive,\n YearItems,\n YearItem,\n YearItemHeading,\n QuarterItems,\n QuarterItem,\n Highlight,\n QuarterLink,\n} from \"./Archive.style\";\nimport PropTypes from \"prop-types\";\n\n/**\n * Archive Page - Show a list of previous reports.\n */\nconst Archive = ({ quarters, onQuarterChange, activeQuarter, ...rest }) => {\n const { t } = useTranslation();\n\n const handleChangeQuarter = (e) => {\n e.preventDefault();\n const data = e.currentTarget.dataset;\n onQuarterChange(parseInt(data.year), parseInt(data.quarter));\n };\n\n return (\n \n {t(\"archive.heading\")}\n \n {quarters.map(([year, reports]) => (\n \n \n \n {reports.map((report) => (\n \n {!report.link ? (\n \n {t(\"archive.reports.quarterHeading\", {\n quarter: parseInt(report.id),\n })}\n \n ) : (\n \n {t(\"archive.reports.quarterHeading\", {\n quarter: parseInt(report.id),\n })}\n \n )}\n \n ))}\n \n \n ))}\n \n \n );\n};\n\nArchive.propTypes = {\n quarters: PropTypes.array.isRequired,\n activeQuarter: PropTypes.array,\n onQuarterChange: PropTypes.func.isRequired,\n};\nexport default Archive;\n","import styled from 'styled-components';\n\nexport const StyledError = styled.section`\n\n\n`;\n\nexport const Heading = styled.h1`\n font-size:1rem;\n color: #8B8B8B;\n text-align: left;\n padding:0;\n margin:0;\n border-bottom:1px solid #E2E2E2;\n padding-bottom:20px; \n padding-top:20px;\n`;\n\n\nexport const Message = styled.div`\n\n padding-top:20px;\n`;","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Heading, StyledError, Message } from './Error.style';\nimport PropTypes from 'prop-types';\n\n/**\n * Error page\n */\nconst Error = ({ message }) => {\n\n const { t } = useTranslation()\n\n return (\n \n { t('error.heading') }\n \n \n { message }\n \n\n \n )\n}\n\nError.propTypes = {\n message: PropTypes.string.isRequired\n}\nexport default Error;","import styled from 'styled-components';\nimport { device } from '../../device';\n\nexport const StyledAbout = styled.section`\n\n\n`;\n\nexport const Heading = styled.h1`\n font-size:1rem;\n color: #8B8B8B;\n text-align: left;\n padding:0;\n margin:0;\n border-bottom:1px solid #E2E2E2;\n padding-bottom:20px; \n padding-top:20px;\n margin-bottom:30px;\n`;\n","import styled from \"styled-components/macro\";\n\nexport const StyledContentBlock = styled.div`\n a {\n color: #008067;\n text-overflow: ellipsis;\n }\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const Heading = styled.h3`\n font-size: 1rem;\n font-weight: bold;\n color: #007961;\n padding: 0;\n margin: 0;\n padding-bottom: 15px;\n`;\n","import React from \"react\";\nimport { StyledContentBlock, Heading } from \"./ContentBlock.styles\";\n\nconst ContentBlock = ({ heading, children, ...rest }) => {\n return (\n \n {heading}\n
\n \n );\n};\n\nexport default ContentBlock;\n","import styled from 'styled-components/macro';\n\n\nexport const StyledDivider = styled.div`\n height: 1px;\n background-color:#E2E2E2;\n margin-top: 20px;\n margin-bottom:20px;\n`;\n","import React from 'react';\nimport { StyledDivider } from './Divider.styles';\n\nconst Divider = ({ heading, children, ...rest }) => {\n return (\n \n )\n}\n\nexport default Divider;","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Heading, StyledAbout } from \"./About.style\";\n\nimport ContentBlock from \"../../components/ContentBlock\";\nimport Divider from \"../../components/Divider\";\n\n/**\n * Archive Page - Show a list of previous reports.\n */\nconst About = ({ ...rest }) => {\n const { t } = useTranslation();\n\n return (\n \n {t(\"about.heading\")}\n\n \n {t(\"about.how.content\")}\n \n \n\n \n {t(\"about.councilTax.content\")}\n \n \n\n \n {t(\"about.lifeSatisfaction.content\")}\n \n \n \n {t(\"about.averageSalary.content\")}\n \n \n );\n};\n\nexport default About;\n","import {\n ActiveQuarter,\n ActiveQuarterWrapper,\n ChangeQuarterLink,\n GlobalStyle,\n MapKeyWrapper,\n MapWrapper,\n NavWrapper,\n PageWrapper,\n Wrapper,\n} from \"./App.styles\";\n\nimport Heading from \"./components/Heading\";\nimport Map from \"./components/Map\";\nimport MapKey from \"./components/MapKey\";\nimport Nav from \"./components/Nav\";\nimport NavItem from \"./components/NavItem\";\nimport { useTranslation } from \"react-i18next\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport {\n Switch,\n Route,\n useRouteMatch,\n useHistory,\n useLocation,\n} from \"react-router-dom\";\n\nimport Headlines from \"./pages/Headlines\";\nimport Home from \"./pages/Home\";\nimport { useMedia } from \"react-use\";\nimport { device } from \"./device\";\nimport Archive from \"./pages/Archive\";\nimport Error from \"./pages/Error\";\nimport About from \"./pages/About\";\nimport { convertToSlug } from \"./utils\";\n\nfunction getCurrentYearData(activeQuarter, years) {\n const [year, quarter] = activeQuarter;\n\n if (!years[year]) {\n return false;\n }\n\n return years[year][quarter];\n}\nfunction ucfirst(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction App() {\n // Don't use from react-router, as we need this right away.\n // const location = useLocation();\n\n const { t } = useTranslation();\n\n const history = useHistory();\n\n const [data, setData] = useState(null);\n const [activeLocation, setActiveLocation] = useState(null);\n const isLargerDevice = useMedia(device.tablet);\n const [activeQuarter, setActiveQuarter] = useState(null);\n const location = useLocation();\n const mapWrapperRef = useRef(null);\n const pageWrapperRef = useRef(null);\n\n const isHomepage = useRouteMatch({\n path: \"/\",\n exact: true,\n });\n\n // Handle loading data.\n // We'll load all quarters here as it's only 8KB uncompressed per quarter!\n // If this gets unmanagable - it can be split and a dependency can be added here.\n useEffect(() => {\n const dataVersion = window.__HPI_DATA_VERSION\n ? window.__HPI_DATA_VERSION\n : \"\";\n fetch(process.env.PUBLIC_URL + \"/new-data.json?v=\" + dataVersion)\n .then((res) => res.json())\n .then((res) => {\n setData(res);\n });\n }, []);\n\n useEffect(() => {\n let friendly_name = location.pathname.replaceAll(\"/\", \"\");\n if (location.pathname === \"/\") {\n friendly_name = \"Home\";\n }\n friendly_name = ucfirst(friendly_name);\n // eslint-disable-next-line no-restricted-globals\n parent.postMessage(`event~HousePriceIndex~Map~${friendly_name}~0`, \"*\");\n }, [location.pathname]);\n\n // Google analytics.\n useEffect(() => {\n if (!data) return;\n\n let quarter = activeQuarter ?? data.active_quarter;\n\n let regions = getCurrentYearData(quarter, data.years);\n\n if (regions && activeLocation !== null) {\n let { title } = regions.locations[activeLocation];\n // eslint-disable-next-line no-restricted-globals\n parent.postMessage(`event~HousePriceIndex~Map~${title}~0`, \"*\");\n }\n }, [activeQuarter, activeLocation, data]);\n\n // Passed down as props, this is sets the current active location\n // Used by both the Map and the MapList/MapDetail\n const handleToggleActiveLocation = (id, state) => {\n setActiveLocation(state && id !== activeLocation ? id : null);\n };\n\n /**\n * Passed into the Archive component to set the quarter\n * @param {*} year\n * @param {*} quarter\n */\n const handleChangeQuarter = (year, quarter) => {\n setActiveQuarter([year, quarter]);\n history.push(\"/\");\n };\n\n /**\n * Handle ESC\n */\n const handleReset = (event) => {\n if (event.keyCode === 27) {\n setActiveLocation(null);\n return;\n }\n // Left\n // if (event.keyCode === 37 && mapWrapperRef.current) {\n // mapWrapperRef.current.focus();\n // return;\n // }\n\n if (event.keyCode === 39 && mapWrapperRef.current) {\n pageWrapperRef.current.focus();\n }\n };\n\n // useEffect(() => {\n // if (!isHomepage) {\n // setActiveLocation(null);\n // history.push(\"/\");\n // // setActiveLocation(null);\n // }\n // }, [isHomepage, history, activeLocation]);\n\n // Scroll the MapDetail into view when selected.\n useEffect(() => {\n if (activeLocation !== null && isHomepage) {\n // short circuit\n if (!isHomepage) {\n setActiveLocation(null);\n history.push(\"/\");\n return;\n }\n\n const element = document.querySelector(`*[data-id=\"${activeLocation}\"]`);\n\n // TOOD: look into why smoothscroll doesnt work on smaller devices while inside iframe\n if (isLargerDevice) {\n element.focus();\n element.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n } else {\n element.focus();\n element.scrollIntoView();\n }\n }\n }, [activeLocation, isLargerDevice, isHomepage, history]);\n\n const menuItems = [\n { title: t(\"nav.housePriceIndex\"), link: \"/\", exact: true },\n { title: t(\"nav.headlines\"), link: \"/headlines\" },\n { title: t(\"nav.archive\"), link: \"/archive\" },\n { title: t(\"nav.about\"), link: \"/about\" },\n ];\n\n // Wait for data to be loaded.\n if (!data) {\n return
{t(\"app.loading\")}
;\n }\n\n const quarter = activeQuarter ?? data.active_quarter;\n const quarterData = getCurrentYearData(quarter, data.years);\n\n // Handle errors.\n if (!quarterData || !quarterData.locations.length) {\n return (\n <>\n \n \n {t(\"app.heading\")} \n \n \n \n );\n }\n\n return (\n <>\n \n \n \n \n {t(\"app.quarterAbbr\")}\n {quarter[1]} {quarter[0]} -{\" \"}\n \n \n {t(\"app.changeButtonLinkText\")}\n \n \n\n \n \n \n {/* When we're on a mobile device and on a different page, let's hide the map for UX reasons */}\n {(isLargerDevice || isHomepage) && (\n <>\n \n \n \n\n \n \n \n \n )}\n\n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport en from \"./translations/en.json\";\nimport cy from \"./translations/cy.json\";\n\n// TODO: move to sep file\nconst resources = {\n en,\n cy,\n};\n\nlet language = \"en\";\nconst hash = window.location.hash;\nif (hash) {\n let splitHash = hash.split(\"/\");\n language = splitHash[1];\n}\n\ni18n.use(initReactI18next).init({\n resources,\n lng: language,\n\n keySeparator: false,\n\n interpolation: {\n escapeValue: false,\n },\n});\n\nexport default i18n;\n","import \"react-app-polyfill/ie11\";\nimport \"react-app-polyfill/stable\";\n\nimport React, { Suspense } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport \"./i18n\";\nimport { HashRouter as Router } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\n// import smoothscroll from 'smoothscroll-polyfill';\nimport smoothscroll from \"smoothscroll-polyfill\";\n\n// kick off the polyfill!\nsmoothscroll.polyfill();\n// smoothscroll.polyfill();\n\n/**\n * Setup router, with language and basename.\n *\n */\nfunction AppWrapper() {\n const { i18n } = useTranslation();\n\n // If you want to switch language dynamically\n // may need to migrate from using basename in React Router,\n // as this doesn't trigger a re-renderr.\n\n return (\n \n \n \n \n \n );\n}\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}