{"version":3,"sources":["webpack:///./src/stories/Components/Global/SectionWrapper/SectionWrapper.tsx","webpack:///./src/img/icons/plus.svg","webpack:///./src/img/icons/minus.svg","webpack:///./src/stories/Components/ToggleBlock/ToggleBlock.styles.ts","webpack:///./src/stories/Components/Global/SectionWrapper/SectionWrapper.styles.ts","webpack:///./src/stories/Components/NewsCard/NewsCard.styles.ts","webpack:///./src/stories/Components/NewsCard/NewsCard.tsx","webpack:///./src/helpers/aspectRatio.ts","webpack:///./src/stories/Widgets/NewsListing/NewsListing.styles.ts","webpack:///./src/stories/Widgets/NewsListing/NewsListing.tsx","webpack:///./src/hooks/useIntersectionObserver.ts","webpack:///./src/hooks/useInView.ts","webpack:///./src/img/icons/select-arrow.svg","webpack:///./src/hooks/useApi.ts","webpack:///./src/helpers/image.ts","webpack:///./src/hoc/WithMotion.tsx","webpack:///./src/stories/Components/Global/ScrollLoader/ScrollLoader.styles.ts","webpack:///./src/stories/Components/Global/ScrollLoader/ScrollLoader.tsx","webpack:///./src/stories/Components/ToggleBlock/ToggleBlock.tsx","webpack:///./src/img/icons/loader.svg"],"names":["SectionWrapper","React","ref","children","className","flush","fullWidth","id","innerWidth","spacing","otherProps","inViewRef","active","useInView","rootMargin","S","ScrollAnchor","Container","r","current","SiteWide","width","displayName","_path","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgPlus","props","xmlns","viewBox","d","fill","SvgMinus","ToggleBlockStyles","styled","div","until","Device","TabletLarge","brand","primary","grey","light","Title","button","fonts","inter","extraBold","black","from","Content","Inner","section","setCssVar","DesktopLarge","css","setSpacing","cssVar","SectionWrapperStyles","value","type","side","output","a","Tablet","ImageContainer","imageWrapperPreserveRatio","Image","img","imageCoverContainer","TagContainer","blue","base","fluid","white","TagText","NewsCardStyles","ContentContainer","Date","sofiaPro","regular","p","ReadMore","medium","NewsCard","createElement","s","href","readMoreLink","alt","altText","loading","role","undefined","src","getImageUrl","imageUrl","mode","heightratio","srcSet","join","tag","date","title","aspectRatio","height","relative","TopBar","Filters","PageCount","PageSize","FilterList","FilterItem","FilterLabel","label","semiBold","MobileLarge","FilterSelect","select","svgArrow","grey90","ItemList","Item","Desktop","NewsListingStyles","BottomBar","withQueryParams","initialData","refContainer","params","setParams","useQueryParams","StringParam","newsType","pageIndex","NumberParam","pageSize","region","data","useApi","ToggleBlock","htmlFor","name","onChange","event","newsTypeOptions","map","option","disabled","text","brandOptions","formatPageCount","totalItems","parseInt","items","item","Pagination","totalCount","onPageIndexChange","ScrollLoader","callback","scrollIntoView","behavior","block","inline","useIntersectionObserver","options","observerRef","useRef","rootRef","elementRef","useEffect","IntersectionObserver","root","observe","disconnect","reverse","isEditMode","inView","setInView","useState","entries","isIntersecting","url","parameters","isFirstMount","useFirstMountState","setData","setLoading","queryString","stringify","async","res","fetch","json","doAsync","useApiOnLoad","DEFAULT_PARAMS","upscale","image","imageParams","widthratio","fixPadParams","withMotion","WrappedComponent","ComponentWithMotion","LazyMotion","features","domAnimation","strict","ScrollLoaderStyles","LoadingIndicator","m","colourWithTransparency","Layers","Overlays","loadChangeCount","setLoadChangeCount","initial","animate","variants","hidden","opacity","transitionEnd","display","visible","SvgLoader","setActive","onClick","preventDefault","Minus","Plus","_g","stroke","fillRule","strokeWidth","cx","cy","attributeName","begin","dur","values","calcMode","keyTimes","keySplines","repeatCount"],"mappings":"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","file":"NewsListing-db0dfe0a5e11fe47c98b.js","sourcesContent":["import { useInView } from '@hooks/useInView';\r\nimport * as React from 'react';\r\nimport S from './SectionWrapper.styles';\r\nimport { rootMargin } from '@helpers/animation';\r\nconst SectionWrapper = React.forwardRef(({ children, className, flush = 'none', fullWidth = false, id, innerWidth = 'default', spacing = 'margin', ...otherProps }, ref) => {\r\n const [inViewRef, active] = useInView({\r\n rootMargin,\r\n });\r\n return (React.createElement(React.Fragment, null,\r\n id && React.createElement(S.ScrollAnchor, { id: id }),\r\n React.createElement(S.Container, { ref: (r) => {\r\n // Handle forwarded ref.\r\n if (typeof ref === 'function') {\r\n ref(r);\r\n }\r\n else if (ref) {\r\n ref.current = r;\r\n }\r\n // Handle internal refs.\r\n inViewRef.current = r;\r\n }, className: className, flush: flush, spacing: spacing, \"data-active\": active, ...otherProps }, fullWidth ? children : React.createElement(S.SiteWide, { width: innerWidth }, children))));\r\n});\r\nSectionWrapper.displayName = 'SectionWrapper';\r\nexport default SectionWrapper;\r\n","var _path;\n\nfunction _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\nimport * as React from \"react\";\n\nfunction SvgPlus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.485 0v8.485H0v3.03h8.485V20h3.028v-8.485h8.485v-3.03h-8.485V0z\",\n fill: \"currentcolor\"\n })));\n}\n\nexport default __webpack_public_path__ + \"16cd2a0dd0231457fdc03cfabd7374bd.svg\";\nexport { SvgPlus as ReactComponent };","var _path;\n\nfunction _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\nimport * as React from \"react\";\n\nfunction SvgMinus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 3.03\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.485 0H0v3.03h20V0H8.485z\",\n fill: \"currentcolor\"\n })));\n}\n\nexport default __webpack_public_path__ + \"4562160f630bfaebefc9d98e0a301520.svg\";\nexport { SvgMinus as ReactComponent };","import brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport styled from 'styled-components';\r\nconst Container = styled.div `\r\n @media ${until(Device.TabletLarge)} {\r\n background: ${brand.primary.grey.light};\r\n }\r\n`;\r\nconst Title = styled.button `\r\n @media ${until(Device.TabletLarge)} {\r\n ${fonts.inter.extraBold};\r\n\r\n display: flex;\r\n align-items: center;\r\n background: ${brand.primary.grey.light};\r\n border: 0;\r\n color: ${brand.black};\r\n font-size: 16px;\r\n line-height: 18px;\r\n height: 60px;\r\n margin: 0;\r\n padding: 15px 20px 18px;\r\n text-transform: uppercase;\r\n width: 100%;\r\n\r\n svg {\r\n display: block;\r\n height: 13px;\r\n margin-left: auto;\r\n transform: rotate(0deg);\r\n transform-origin: center;\r\n transition: transform 0.15s ease-out;\r\n width: 13px;\r\n }\r\n\r\n [data-open='true'] & {\r\n svg {\r\n transform: rotate(180deg);\r\n }\r\n }\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n display: none;\r\n }\r\n`;\r\nconst Content = styled.div `\r\n @media ${until(Device.TabletLarge)} {\r\n height: 0;\r\n overflow: hidden;\r\n\r\n [data-open='true'] & {\r\n height: auto;\r\n }\r\n }\r\n`;\r\nconst Inner = styled.div `\r\n @media ${until(Device.TabletLarge)} {\r\n padding: 15px 20px 24px;\r\n }\r\n`;\r\nconst ToggleBlockStyles = {\r\n Container,\r\n Title,\r\n Content,\r\n Inner,\r\n};\r\nexport default ToggleBlockStyles;\r\n","import { cssVar, setCssVar } from '@helpers/cssVar';\r\nimport { Device, from } from '@helpers/media';\r\nimport SiteWide from '@stories/Components/Global/SiteWide/SiteWide';\r\nimport styled, { css } from 'styled-components';\r\nconst Container = styled.section `\r\n ${setCssVar('sectionMargin', '32px')};\r\n ${setCssVar('sitePadding', '18px')};\r\n ${setCssVar('siteWidth', '100%')};\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n ${setCssVar('sectionMargin', '64px')};\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n ${setCssVar('sitePadding', '18px')};\r\n ${setCssVar('siteWidth', '1640px')};\r\n }\r\n\r\n ${(props) => css `\r\n /* Set default spacing. */\r\n ${setSpacing(cssVar('sectionMargin'), props.spacing, 'both')}\r\n\r\n /* Override based on flush prop. */\r\n ${props.flush && setSpacing('0px', props.spacing, props.flush)}\r\n `}\r\n`;\r\nconst ScrollAnchor = styled.div `\r\n scroll-margin: calc(var(--headerHeight) + var(--headerReducedOffset) + 32px) 0 0;\r\n`;\r\nconst StyledSiteWide = styled(SiteWide) ``;\r\nconst SectionWrapperStyles = {\r\n Container,\r\n SiteWide: StyledSiteWide,\r\n ScrollAnchor,\r\n};\r\nexport default SectionWrapperStyles;\r\nfunction setSpacing(value, type, side) {\r\n let output = '';\r\n if (side === 'none') {\r\n return;\r\n }\r\n if (side === 'both') {\r\n output = `\r\n ${type}-top: ${value};\r\n ${type}-bottom: ${value};\r\n `;\r\n }\r\n else {\r\n output = `\r\n ${type}-${side}: ${value};\r\n `;\r\n }\r\n return css `\r\n ${output}\r\n `;\r\n}\r\n","import { imageCoverContainer, imageWrapperPreserveRatio } from '@helpers/aspectRatio';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, until } from '@helpers/media';\r\nimport styled from 'styled-components';\r\nconst Container = styled.a `\r\n position: relative;\r\n display: block;\r\n text-decoration: none;\r\n\r\n @media ${until(Device.Tablet)} {\r\n margin: 10px 20px 10px 5px;\r\n }\r\n`;\r\nconst ImageContainer = styled.div `\r\n ${imageWrapperPreserveRatio(418, 325)};\r\n width: 100%;\r\n position: relative;\r\n`;\r\nconst Image = styled.img `\r\n ${imageCoverContainer()};\r\n width: 100%;\r\n border-radius: 5px;\r\n`;\r\nconst TagContainer = styled.div `\r\n position: absolute;\r\n left: 0;\r\n bottom: 0;\r\n height: 40px;\r\n background-color: ${brand.primary.blue.base};\r\n border: ${fluid(1, 2)} solid ${brand.white};\r\n border-bottom: 0;\r\n border-left: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 0px 20px 0px 5px;\r\n`;\r\nconst TagText = styled.div `\r\n ${fonts.inter.extraBold};\r\n\r\n font-size: 12px;\r\n line-height: 24px;\r\n color: ${brand.white};\r\n padding: 10px 40px 10px 25px;\r\n`;\r\nconst ContentContainer = styled.div `\r\n padding-top: 24px;\r\n`;\r\nconst Date = styled.div `\r\n ${fonts.sofiaPro.regular};\r\n font-size: 16px;\r\n line-height: 24px;\r\n margin-bottom: 16px;\r\n color: ${brand.black};\r\n`;\r\nconst Title = styled.p `\r\n ${fonts.inter.extraBold};\r\n\r\n font-size: 16px;\r\n line-height: 24px;\r\n margin-bottom: 16px;\r\n color: ${brand.black};\r\n`;\r\nconst ReadMore = styled.p `\r\n ${fonts.sofiaPro.medium};\r\n font-size: 18px;\r\n line-height: 24px;\r\n color: ${brand.black};\r\n text-decoration: none;\r\n`;\r\nexport const NewsCardStyles = {\r\n Container,\r\n ImageContainer,\r\n Image,\r\n ContentContainer,\r\n Date,\r\n Title,\r\n ReadMore,\r\n TagContainer,\r\n TagText,\r\n};\r\n","import { getImageUrl } from '@helpers/image';\r\nimport React from 'react';\r\nimport { NewsCardStyles as s } from './NewsCard.styles';\r\nconst NewsCard = (props) => {\r\n return (React.createElement(s.Container, { href: props.readMoreLink },\r\n React.createElement(s.ImageContainer, null,\r\n React.createElement(s.Image, { alt: props.altText ?? '', loading: \"lazy\", role: props.altText ? undefined : 'presentation', src: getImageUrl(props.imageUrl, { mode: 'crop', width: 600, heightratio: 325 / 418 }), srcSet: [\r\n `${getImageUrl(props.imageUrl, {\r\n mode: 'crop',\r\n width: 600,\r\n heightratio: 325 / 418,\r\n })} 1x`,\r\n `${getImageUrl(props.imageUrl, {\r\n mode: 'crop',\r\n width: 1200,\r\n heightratio: 325 / 418,\r\n })} 2x`,\r\n ].join(',') }),\r\n props.tag && (React.createElement(s.TagContainer, null,\r\n React.createElement(s.TagText, null, props.tag)))),\r\n React.createElement(s.ContentContainer, null,\r\n React.createElement(s.Date, null, props.date),\r\n React.createElement(s.Title, null, props.title),\r\n React.createElement(s.ReadMore, null, \"Read More\"))));\r\n};\r\nexport default NewsCard;\r\n","import { css } from 'styled-components';\r\n/**\r\n * Returns the aspect ratio of the given width and height as a percentage.\r\n */\r\nexport function aspectRatio(width, height) {\r\n return (height / width) * 100;\r\n}\r\n/**\r\n * Re-usable styles for image container where the\r\n * image needs to maintain it's aspect ratio\r\n *\r\n * @param width\r\n * @param height\r\n * @returns\r\n */\r\nexport function imageWrapperPreserveRatio(width, height) {\r\n if (!width && !height) {\r\n return null;\r\n }\r\n return css `\r\n position: relative;\r\n height: 0;\r\n width: 100%;\r\n overflow: hidden;\r\n overflow: clip;\r\n padding-bottom: ${aspectRatio(width, height)}%;\r\n `;\r\n}\r\n/**\r\n * Re-usable styles for an image placed within\r\n * a container maintaining aspect ratio\r\n */\r\nexport const imageCoverContainer = (relative) => css `\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n object-position: center;\r\n ${!relative && 'position: absolute; top: 0;left: 0;'}\r\n`;\r\n","import brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport svgArrow from '@img/icons/select-arrow.svg';\r\nimport SectionWrapper from '@stories/Components/Global/SectionWrapper/SectionWrapper';\r\nimport styled from 'styled-components';\r\nconst Container = styled(SectionWrapper) ``;\r\nconst TopBar = styled.div `\r\n @media ${until(Device.TabletLarge)} {\r\n display: grid;\r\n gap: 24px;\r\n flex-direction: column;\r\n margin: 0 0 40px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n display: grid;\r\n gap: 24px 40px;\r\n margin: 0 0 40px;\r\n\r\n ${() => Filters} {\r\n grid-column: 1 / span 2;\r\n justify-self: flex-start;\r\n }\r\n\r\n ${() => PageCount} {\r\n align-self: flex-end;\r\n grid-column: 1;\r\n justify-self: flex-start;\r\n }\r\n\r\n ${() => PageSize} {\r\n grid-column: 2;\r\n justify-self: flex-end;\r\n }\r\n }\r\n`;\r\nconst Filters = styled.div ``;\r\nconst FilterList = styled.div `\r\n @media ${until(Device.TabletLarge)} {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n display: flex;\r\n flex-direction: row;\r\n }\r\n`;\r\nconst FilterItem = styled.div `\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n\r\n @media ${until(Device.TabletLarge)} {\r\n & + & {\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n & + & {\r\n margin-left: 16px;\r\n }\r\n }\r\n`;\r\nconst FilterLabel = styled.label `\r\n display: block;\r\n ${fonts.sofiaPro.semiBold};\r\n font-size: 16px;\r\n letter-spacing: 0.01em;\r\n line-height: 28px;\r\n margin: 0 0 8px;\r\n\r\n @media ${from(Device.MobileLarge)} {\r\n font-size: 18px;\r\n line-height: 32px;\r\n }\r\n`;\r\nconst FilterSelect = styled.select `\r\n display: inline-block;\r\n appearance: none;\r\n background-image: url(${svgArrow});\r\n background-repeat: no-repeat;\r\n background-position: right 30px center;\r\n border: ${brand.grey.grey90} 1px solid;\r\n border-radius: 30px;\r\n box-sizing: border-box !important;\r\n ${fonts.sofiaPro.regular};\r\n font-size: 18px;\r\n height: 50px;\r\n letter-spacing: -0.02em;\r\n line-height: 1.5em;\r\n margin: 0;\r\n opacity: 1;\r\n padding: 0 94px 0 32px;\r\n text-transform: none;\r\n transition: opacity 0.3s ease-out;\r\n width: auto;\r\n\r\n &:focus {\r\n border-color: ${brand.primary.blue.base};\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n }\r\n\r\n @media ${until(Device.TabletLarge)} {\r\n width: 100%;\r\n }\r\n`;\r\nconst PageCount = styled.div `\r\n display: block;\r\n ${fonts.sofiaPro.semiBold};\r\n font-size: 16px;\r\n letter-spacing: 0.01em;\r\n line-height: 28px;\r\n margin: 0;\r\n\r\n @media ${until(Device.TabletLarge)} {\r\n text-align: center;\r\n }\r\n\r\n @media ${from(Device.MobileLarge)} {\r\n font-size: 18px;\r\n line-height: 32px;\r\n }\r\n`;\r\nconst PageSize = styled.div `\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\nconst ItemList = styled.div `\r\n display: grid;\r\n gap: 24px 10px;\r\n grid-template-columns: repeat(12, 1fr);\r\n\r\n @media ${from(Device.Tablet)} {\r\n gap: 40px;\r\n }\r\n`;\r\nconst Item = styled.div `\r\n grid-column: span 12;\r\n\r\n @media ${from(Device.Tablet)} {\r\n grid-column: span 6;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n grid-column: span 4;\r\n }\r\n\r\n @media ${from(Device.Desktop)} {\r\n grid-column: span 3;\r\n }\r\n`;\r\nconst BottomBar = styled.div `\r\n display: grid;\r\n margin: 40px 0 0;\r\n`;\r\nconst NewsListingStyles = {\r\n BottomBar,\r\n Container,\r\n FilterItem,\r\n FilterLabel,\r\n FilterList,\r\n FilterSelect,\r\n Filters,\r\n Item,\r\n ItemList,\r\n PageCount,\r\n PageSize,\r\n TopBar,\r\n};\r\nexport default NewsListingStyles;\r\n","import { formatPageCount } from '@helpers/utils';\r\nimport { withQueryParams } from '@hoc/withQueryParams';\r\nimport { useApi } from '@hooks/useApi';\r\nimport Pagination from '@stories/Components/Global/Pagination/Pagination';\r\nimport ScrollLoader from '@stories/Components/Global/ScrollLoader/ScrollLoader';\r\nimport NewsCard from '@stories/Components/NewsCard/NewsCard';\r\nimport ToggleBlock from '@stories/Components/ToggleBlock/ToggleBlock';\r\nimport * as React from 'react';\r\nimport { NumberParam, StringParam, useQueryParams } from 'use-query-params';\r\nimport S from './NewsListing.styles';\r\nconst NewsListing = ({ initialData, ...props }) => {\r\n const refContainer = React.useRef(null);\r\n const [params, setParams] = useQueryParams({\r\n brand: StringParam,\r\n newsType: StringParam,\r\n pageIndex: NumberParam,\r\n pageSize: NumberParam,\r\n region: StringParam,\r\n });\r\n const brand = params.brand ?? '';\r\n const newsType = params.newsType ?? '';\r\n const pageIndex = params.pageIndex ?? 1;\r\n const pageSize = params.pageSize ?? 12;\r\n const { data, loading } = useApi(`/api/news`, initialData, {\r\n brand,\r\n newsType,\r\n pageIndex,\r\n pageSize,\r\n });\r\n return (React.createElement(S.Container, { id: props.id, ref: refContainer },\r\n React.createElement(S.TopBar, null,\r\n React.createElement(S.Filters, null,\r\n React.createElement(ToggleBlock, { title: \"Filter Options\" },\r\n React.createElement(S.FilterList, null,\r\n React.createElement(S.FilterItem, null,\r\n React.createElement(S.FilterLabel, { htmlFor: \"newsType\" }, \"News Type\"),\r\n React.createElement(S.FilterSelect, { name: \"newsType\", id: \"newsType\", value: newsType, onChange: (event) => {\r\n setParams({ pageIndex: 1, newsType: event.target.value }, 'pushIn');\r\n } },\r\n React.createElement(\"option\", { value: \"\" }, \"Select News Type\"),\r\n data.newsTypeOptions.map((option) => (React.createElement(\"option\", { key: option.value, value: option.value, disabled: option.disabled }, option.text))))),\r\n React.createElement(S.FilterItem, null,\r\n React.createElement(S.FilterLabel, { htmlFor: \"brand\" }, \"Brand\"),\r\n React.createElement(S.FilterSelect, { name: \"brand\", id: \"brand\", value: brand, onChange: (event) => {\r\n setParams({ pageIndex: 1, brand: event.target.value }, 'pushIn');\r\n } },\r\n React.createElement(\"option\", { value: \"\" }, \"Select Brand\"),\r\n data.brandOptions.map((option) => (React.createElement(\"option\", { key: option.value, value: option.value, disabled: option.disabled }, option.text)))))))),\r\n React.createElement(S.PageCount, null, formatPageCount(pageIndex, pageSize, data.totalItems)),\r\n React.createElement(S.PageSize, null,\r\n React.createElement(ToggleBlock, { title: \"Items per page\" },\r\n React.createElement(S.FilterLabel, { htmlFor: \"pageSize\" }, \"Items per page\"),\r\n React.createElement(S.FilterSelect, { name: \"pageSize\", id: \"pageSize\", value: pageSize, onChange: (event) => {\r\n setParams({ pageIndex: 1, pageSize: parseInt(event.target.value, 10) }, 'pushIn');\r\n } },\r\n React.createElement(\"option\", { value: \"12\" }, \"Show 12\"),\r\n React.createElement(\"option\", { value: \"24\" }, \"Show 24\"),\r\n React.createElement(\"option\", { value: \"48\" }, \"Show 48\"))))),\r\n React.createElement(S.ItemList, null, data.items.map((item) => (React.createElement(S.Item, { key: item.id },\r\n React.createElement(NewsCard, { ...item }))))),\r\n React.createElement(S.BottomBar, null,\r\n React.createElement(Pagination, { pageIndex: pageIndex, pageSize: pageSize, totalCount: data.totalItems, onPageIndexChange: (pageIndex) => {\r\n setParams({ pageIndex: pageIndex }, 'pushIn');\r\n } })),\r\n React.createElement(ScrollLoader, { callback: () => {\r\n refContainer.current?.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n inline: 'start',\r\n });\r\n }, loading: loading })));\r\n};\r\nexport default withQueryParams(NewsListing);\r\n","import { useEffect, useRef } from 'react';\r\n/**\r\n * Use the IntersectionObserver to track visibility of an element in the viewport.\r\n * @param {IntersectionObserverCallback} callback\r\n * @param {IntersectionObserverInit} options\r\n * @returns {UseIntersectionObserverReturn}\r\n */\r\nfunction useIntersectionObserver(callback, options = {}) {\r\n const observerRef = useRef(null);\r\n const rootRef = useRef(null);\r\n const elementRef = useRef(null);\r\n useEffect(() => {\r\n if (!elementRef.current) {\r\n return undefined;\r\n }\r\n observerRef.current = new IntersectionObserver(callback, {\r\n root: rootRef.current,\r\n ...options,\r\n });\r\n observerRef.current.observe(elementRef.current);\r\n return () => {\r\n if (observerRef.current === null) {\r\n return;\r\n }\r\n observerRef.current.disconnect();\r\n };\r\n }, [callback, options]);\r\n return { elementRef, observerRef, rootRef };\r\n}\r\nexport default useIntersectionObserver;\r\n","import { useState } from 'react';\r\nimport useIntersectionObserver from './useIntersectionObserver';\r\nexport function useInView(options, reverse = false, isEditMode = false) {\r\n const [inView, setInView] = useState(false);\r\n const { elementRef } = useIntersectionObserver((entries) => {\r\n if (entries[0].isIntersecting) {\r\n setInView(true);\r\n }\r\n else if (reverse === true) {\r\n setInView(false);\r\n }\r\n }, options);\r\n return [elementRef, isEditMode ? true : inView];\r\n}\r\n","var _path;\n\nfunction _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\nimport * as React from \"react\";\n\nfunction SvgSelectArrow(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 12,\n height: 7.41\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 28\",\n d: \"M10.59 0L6 4.58 1.41 0 0 1.41l6 6 6-6z\"\n })));\n}\n\nexport default __webpack_public_path__ + \"55692c67223140bda169d5fc928b0edc.svg\";\nexport { SvgSelectArrow as ReactComponent };","import queryString from 'query-string';\r\nimport React from 'react';\r\nimport { useFirstMountState } from 'react-use';\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function useApi(url, initialData, parameters) {\r\n const isFirstMount = useFirstMountState();\r\n const [data, setData] = React.useState(initialData);\r\n const [loading, setLoading] = React.useState(false);\r\n const params = queryString.stringify(parameters ?? {});\r\n React.useEffect(() => {\r\n if (isFirstMount && initialData) {\r\n return;\r\n }\r\n if (!isFirstMount) {\r\n doAsync();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n async function doAsync() {\r\n setLoading(true);\r\n const res = await fetch(params ? `${url}?${params}` : url);\r\n const data = await res.json();\r\n setData(data);\r\n setLoading(false);\r\n }\r\n }, [params, url]);\r\n return { data, loading };\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function useApiOnLoad(url, initialData, parameters) {\r\n const [data, setData] = React.useState(initialData);\r\n const params = queryString.stringify(parameters ?? {});\r\n React.useEffect(() => {\r\n doAsync();\r\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\r\n async function doAsync() {\r\n const res = await fetch(params ? `${url}?${params}` : url);\r\n const data = (await res.json());\r\n setData(data);\r\n }\r\n }, [params, url]);\r\n return data;\r\n}\r\n","import queryString from 'query-string';\r\nconst DEFAULT_PARAMS = {\r\n mode: 'crop',\r\n upscale: true,\r\n};\r\n/**\r\n * Create an image URL for ImageProcessor\r\n * @param image The image model\r\n * @param imageParams The image parameters\r\n * @returns The image URL\r\n */\r\nexport function getImageUrl(image, imageParams) {\r\n if (!image) {\r\n return '';\r\n }\r\n let params = { ...DEFAULT_PARAMS, ...imageParams };\r\n if (params.mode === 'crop' || params.mode === 'boxpad' || params.mode === 'pad') {\r\n params = fixPadParams(params);\r\n }\r\n return `${image}?${queryString.stringify(params)}`;\r\n}\r\nfunction fixPadParams(imageParams) {\r\n if (!imageParams.height && !!imageParams.width && !!imageParams.heightratio) {\r\n return {\r\n ...imageParams,\r\n height: imageParams.width * imageParams.heightratio,\r\n };\r\n }\r\n else if (!imageParams.width && !!imageParams.height && !!imageParams.widthratio) {\r\n return {\r\n ...imageParams,\r\n width: imageParams.height * imageParams.widthratio,\r\n };\r\n }\r\n else if (!!imageParams.width && !!imageParams.height) {\r\n return imageParams;\r\n }\r\n else {\r\n return { ...imageParams, mode: 'boxpad' };\r\n }\r\n}\r\n","import { domAnimation, LazyMotion } from 'framer-motion';\r\nimport React from 'react';\r\nexport function withMotion(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithMotion = (props) => {\r\n return (React.createElement(LazyMotion, { features: domAnimation, strict: true },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithMotion.displayName = `withMotion(${displayName})`;\r\n return ComponentWithMotion;\r\n}\r\n","import brand, { colourWithTransparency } from '@helpers/brand';\r\nimport { Layers } from '@helpers/layers';\r\nimport { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst LoadingIndicator = styled(m.div) `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n height: 100%;\r\n display: grid;\r\n background: ${colourWithTransparency(brand.primary.blue.base, 0.6)};\r\n color: ${brand.white};\r\n place-content: center;\r\n place-items: center;\r\n width: 100%;\r\n z-index: ${Layers.Overlays};\r\n\r\n svg {\r\n height: 96px;\r\n width: 96px;\r\n }\r\n`;\r\nconst ScrollLoaderStyles = {\r\n LoadingIndicator,\r\n};\r\nexport default ScrollLoaderStyles;\r\n","import * as React from 'react';\r\nimport S from './ScrollLoader.styles';\r\nimport { ReactComponent as SvgLoader } from '@img/icons/loader.svg';\r\nimport { withMotion } from '@hoc/WithMotion';\r\nimport { useFirstMountState } from 'react-use';\r\nconst ScrollLoader = ({ loading, callback }) => {\r\n const isFirstMount = useFirstMountState();\r\n // loading begins as false, changes to true for the initial load, back to false when the initial load completes //\r\n // We want to only listen to changes *after* this series has happened //\r\n const [loadChangeCount, setLoadChangeCount] = React.useState(0);\r\n React.useEffect(() => {\r\n if (!loading && !isFirstMount) {\r\n setLoadChangeCount(loadChangeCount + 1);\r\n }\r\n }, [loading]);\r\n React.useEffect(() => {\r\n if (!loading && loadChangeCount >= 1 && callback) {\r\n callback();\r\n }\r\n }, [loading, loadChangeCount]);\r\n return (React.createElement(S.LoadingIndicator, { initial: \"hidden\", animate: loading ? 'visible' : 'hidden', variants: {\r\n hidden: {\r\n opacity: 0,\r\n transitionEnd: {\r\n display: 'none',\r\n },\r\n },\r\n visible: {\r\n display: 'grid',\r\n opacity: 1,\r\n },\r\n } },\r\n React.createElement(SvgLoader, null)));\r\n};\r\nexport default withMotion(ScrollLoader);\r\n","import { ReactComponent as Plus } from '@img/icons/plus.svg';\r\nimport { ReactComponent as Minus } from '@img/icons/minus.svg';\r\nimport * as React from 'react';\r\nimport S from './ToggleBlock.styles';\r\nconst ToggleBlock = ({ title, children }) => {\r\n const [active, setActive] = React.useState(false);\r\n return (React.createElement(S.Container, { \"data-open\": active },\r\n React.createElement(S.Title, { onClick: (event) => {\r\n event.preventDefault();\r\n setActive(!active);\r\n } },\r\n title,\r\n active ? React.createElement(Minus, null) : React.createElement(Plus, null)),\r\n React.createElement(S.Content, null,\r\n React.createElement(S.Inner, null, children))));\r\n};\r\nexport default ToggleBlock;\r\n","var _g;\n\nfunction _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\nimport * as React from \"react\";\n\nfunction SvgLoader(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n viewBox: \"0 0 44 44\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n strokeWidth: 2\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 22,\n cy: 22,\n r: 1\n }, /*#__PURE__*/React.createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"0s\",\n dur: \"1.8s\",\n values: \"1; 20\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.165, 0.84, 0.44, 1\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/React.createElement(\"animate\", {\n attributeName: \"stroke-opacity\",\n begin: \"0s\",\n dur: \"1.8s\",\n values: \"1; 0\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.3, 0.61, 0.355, 1\",\n repeatCount: \"indefinite\"\n })), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 22,\n cy: 22,\n r: 1\n }, /*#__PURE__*/React.createElement(\"animate\", {\n attributeName: \"r\",\n begin: \"-0.9s\",\n dur: \"1.8s\",\n values: \"1; 20\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.165, 0.84, 0.44, 1\",\n repeatCount: \"indefinite\"\n }), /*#__PURE__*/React.createElement(\"animate\", {\n attributeName: \"stroke-opacity\",\n begin: \"-0.9s\",\n dur: \"1.8s\",\n values: \"1; 0\",\n calcMode: \"spline\",\n keyTimes: \"0; 1\",\n keySplines: \"0.3, 0.61, 0.355, 1\",\n repeatCount: \"indefinite\"\n })))));\n}\n\nexport default __webpack_public_path__ + \"c3c7278d3e106e066c6a3e846274de3a.svg\";\nexport { SvgLoader as ReactComponent };"],"sourceRoot":""}