{"version":3,"file":"HomeHeroBanner-f629d42bb5cf70dd72ad.js","mappings":"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","sources":["webpack://james-fisher/./src/img/icons/arrow-right.svg","webpack://james-fisher/./src/helpers/animate.ts","webpack://james-fisher/./src/helpers/brand.ts","webpack://james-fisher/./src/helpers/cssVar.ts","webpack://james-fisher/./src/helpers/fluid.ts","webpack://james-fisher/./src/helpers/fonts.ts","webpack://james-fisher/./src/helpers/grid.ts","webpack://james-fisher/./src/helpers/image.ts","webpack://james-fisher/./src/helpers/media.ts","webpack://james-fisher/./src/helpers/srOnly.ts","webpack://james-fisher/./src/helpers/typography.ts","webpack://james-fisher/./src/hoc/withMotionMax.tsx","webpack://james-fisher/./src/hooks/useAutoplay.ts","webpack://james-fisher/./src/hooks/useIntersectionObserver.ts","webpack://james-fisher/./src/hooks/useInView.ts","webpack://james-fisher/./src/stories/Components/Button/Button.styles.ts","webpack://james-fisher/./src/stories/Components/DotPagination/DotPagination.styles.ts","webpack://james-fisher/./src/stories/Components/DotPagination/DotPagination.tsx","webpack://james-fisher/./src/stories/Components/LinkButton/LinkButton.tsx","webpack://james-fisher/./src/stories/Components/SectionWrapper/SectionWrapper.styles.ts","webpack://james-fisher/./src/stories/Components/SectionWrapper/SectionWrapper.tsx","webpack://james-fisher/./src/stories/Components/SimpleImage/SimpleImage.styles.ts","webpack://james-fisher/./src/stories/Components/SimpleImage/SimpleImage.tsx","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/ArticleSummary/ArticleSummary.styles.ts","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/ArticleSummary/ArticleSummary.tsx","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/BannerItem/BannerItem.styles.ts","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/BannerItem/BannerItem.tsx","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/HomeHeroBanner.styles.ts","webpack://james-fisher/./src/stories/Widgets/HomeHeroBanner/HomeHeroBanner.tsx","webpack://james-fisher/./node_modules/react-swipeable/es/index.js"],"sourcesContent":["var _g;\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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\nconst SvgArrowRight = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 17 17\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n stroke: \"currentColor\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n strokeLinecap: \"square\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.359 8.494 7.924 1.059M15.359 8.494l-7.435 7.435\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2 8.69h13.306\"\n}))));\n\nexport default SvgArrowRight;","import { css } from 'styled-components';\r\nexport const preView10 = '0px 0px 10% 0px';\r\nexport const inViewMargin = '0px 0px -35% 0px';\r\nexport const inView30 = '0px 0px -30% 0px';\r\nexport const inView20 = '0px 0px -20% 0px';\r\nexport const inView50 = '0px 0px -50% 0px';\r\nexport const inView75 = '0px 0px -75% 0px';\r\nexport const inView100 = '0px 0px -100% 0px';\r\nexport const cubicEaseOut = `cubic-bezier(0.33, 1, 0.68, 1)`;\r\nexport function fadeUp(params) {\r\n return css `\r\n opacity: 0;\r\n transform: translateY(20px);\r\n transition: opacity, transform;\r\n transition-delay: ${params.delay}s;\r\n transition-duration: ${params.duration}s;\r\n transition-timing-function: ${cubicEaseOut};\r\n\r\n [data-animate='true'] & {\r\n opacity: 1;\r\n transform: translateY(0px);\r\n }\r\n `;\r\n}\r\nexport function inViewFade(params) {\r\n return css `\r\n transition: opacity;\r\n transition-delay: ${params.delay}s;\r\n transition-duration: ${params.duration}s;\r\n transition-timing-function: ${cubicEaseOut};\r\n\r\n [data-inview='false'] & {\r\n opacity: 0;\r\n }\r\n\r\n [data-inview='true'] & {\r\n opacity: 1;\r\n }\r\n `;\r\n}\r\nexport function inViewFadeUp(params) {\r\n return css `\r\n transition: opacity, transform;\r\n transition-delay: ${params.delay}s;\r\n transition-duration: ${params.duration}s;\r\n transition-timing-function: ${cubicEaseOut};\r\n\r\n [data-inview='false'] & {\r\n opacity: 0;\r\n transform: translateY(20px);\r\n }\r\n\r\n [data-inview='true'] & {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n `;\r\n}\r\nexport const shouldAnimate = (innerCss) => {\r\n return css `\r\n @media (prefers-reduced-motion: no-preference) {\r\n ${innerCss}\r\n }\r\n `;\r\n};\r\nexport const transition = (properties, duration = 0.35, timing = cubicEaseOut) => {\r\n return shouldAnimate(css `\r\n transition: ${properties};\r\n transition-duration: ${typeof duration === 'string' ? duration : `${duration}s`};\r\n transition-timing-function: ${timing};\r\n will-change: ${properties};\r\n `);\r\n};\r\nexport function inViewChangeColour(params, initialColor, endColor) {\r\n return css `\r\n transition: color;\r\n transition-delay: ${params.delay}s;\r\n transition-duration: ${params.duration}s;\r\n transition-timing-function: ${cubicEaseOut};\r\n\r\n [data-inview='false'] & {\r\n color: ${initialColor};\r\n }\r\n\r\n [data-inview='true'] & {\r\n color: ${endColor};\r\n }\r\n `;\r\n}\r\n","export default {\r\n black: '#04040F',\r\n blue: {\r\n base: '#0065A4',\r\n },\r\n grey: {\r\n grey1: '#E7E8E9',\r\n grey2: '#707070',\r\n grey3: '#8A8A8A',\r\n grey4: '#4D4D4D',\r\n grey5: '#4D555A',\r\n grey6: '#1C1D1E',\r\n grey7: '#575756',\r\n grey8: '#EBECEC',\r\n cta: '#252829',\r\n // Undocumented grey used in the designs.\r\n otherGrey: '#B1B3B5',\r\n borderGrey: '#C8CACD',\r\n },\r\n sectors: {\r\n oilGasGrey: '#708A97',\r\n marineBlue: '#55BCCA',\r\n defencePurple: '#8B5EA0',\r\n energyGreen: '#4BA559',\r\n nuclearOrange: '#E3772E',\r\n transportRed: '#D34E55',\r\n },\r\n sectorsAlt: {\r\n oilGasGreen: '#00AE4D',\r\n marineBlue: '#16BECF',\r\n nuclearPurple: '#A978B4',\r\n defenceGrey: '#6B8D9B',\r\n renewableYellow: '#FFDD00',\r\n portsTerminalsOrange: '#F37032',\r\n transportRed: '#E44151',\r\n constructionCream: '#EDDF98',\r\n },\r\n validation: {\r\n invalid: '#DA291C',\r\n valid: '#008C15',\r\n },\r\n white: '#FFFFFF',\r\n yellow: {\r\n base: '#FFDD00',\r\n },\r\n};\r\n","const variables = ['gutterWidth', 'sectionMargin', 'sitePadding', 'siteWidth'];\r\nfunction cssVar(name) {\r\n return `var(--${name})`;\r\n}\r\nfunction setCssVar(name, value) {\r\n return `--${name}: ${value}`;\r\n}\r\nexport { cssVar, setCssVar };\r\n","import { Device } from './media';\r\n/**\r\n * Base pixel value for the \"rem\" unit.\r\n */\r\nexport const PIXELS_PER_REM = 16;\r\n/**\r\n * Default pixel value for the min width.\r\n */\r\nexport const DEFAULT_MIN_VALUE = Device.TabletSmall;\r\n/**\r\n * Default pixel value for the max width.\r\n */\r\nexport const DEFAULT_MAX_VALUE = Device.DesktopLarge;\r\n/**\r\n * Define a fluid value between the min/max values at the min/max widths.\r\n */\r\nexport function fluid(min, max, minWidth = DEFAULT_MIN_VALUE, maxWidth = DEFAULT_MAX_VALUE) {\r\n const minRem = min / PIXELS_PER_REM;\r\n const maxRem = max / PIXELS_PER_REM;\r\n const minWidthRem = minWidth / PIXELS_PER_REM;\r\n const maxWidthRem = maxWidth / PIXELS_PER_REM;\r\n const slope = (maxRem - minRem) / (maxWidthRem - minWidthRem);\r\n const yAxisIntersection = -minWidthRem * slope + minRem;\r\n const clampMin = `${round(minRem)}rem`;\r\n const clampVal = `${round(yAxisIntersection)}rem + ${round(slope * 100)}vw`;\r\n const clampMax = `${round(maxRem)}rem`;\r\n return `clamp(${clampMin}, ${clampVal}, ${clampMax})`;\r\n}\r\n/**\r\n * Round to nearest hundredth.\r\n */\r\nfunction round(num) {\r\n return Math.round(num * 100) / 100;\r\n}\r\n","import { css } from 'styled-components';\r\nexport default {\r\n helvetica: {\r\n light: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-style: normal;\r\n font-weight: 300;\r\n `,\r\n lightItalic: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-weight: 300;\r\n font-style: italic;\r\n `,\r\n regular: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-style: normal;\r\n font-weight: 400;\r\n `,\r\n regularItalic: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-weight: 400;\r\n font-style: italic;\r\n `,\r\n medium: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-style: normal;\r\n font-weight: 500;\r\n `,\r\n mediumItalic: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-weight: 500;\r\n font-style: italic;\r\n `,\r\n bold: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-style: normal;\r\n font-weight: 700;\r\n `,\r\n boldItalic: css `\r\n font-family: 'Helvetica', sans-serif;\r\n font-weight: 700;\r\n font-style: italic;\r\n `,\r\n },\r\n};\r\n","import { css } from 'styled-components';\r\nimport { cssVar, setCssVar } from './cssVar';\r\nimport { Device, from } from './media';\r\nexport const SitePadding = 18;\r\nexport const SiteWidth = 1604;\r\nexport const SiteWidthBreakpoint = SiteWidth + SitePadding * 2;\r\nexport const siteWide = css `\r\n ${setCssVar('sitePadding', `${SitePadding}px`)};\r\n ${setCssVar('siteWidth', `${SiteWidth}px`)};\r\n\r\n display: flex;\r\n flex-direction: column;\r\n margin: 0 auto;\r\n max-width: min(\r\n calc(${cssVar('siteWidth')} + ${cssVar('sitePadding')} + ${cssVar('sitePadding')}),\r\n 100vw\r\n );\r\n padding: 0 ${cssVar('sitePadding')};\r\n width: 100%;\r\n`;\r\nexport const baseGrid = css `\r\n ${setCssVar('gutterWidth', '10px')};\r\n\r\n display: grid;\r\n column-gap: ${cssVar('gutterWidth')};\r\n grid-template-columns: repeat(12, 1fr);\r\n\r\n @media ${from(Device.Tablet)} {\r\n ${setCssVar('gutterWidth', '32px')};\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n ${setCssVar('gutterWidth', '64px')};\r\n }\r\n`;\r\n","import queryString from 'query-string';\r\nimport { css } from 'styled-components';\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 imageUrl(image, imageParams) {\r\n if (!image || !image.src) {\r\n return '';\r\n }\r\n /**\r\n * Remove any query param string to ensure paramsString is applied correctly and\r\n * there are no double definitions (setting a param twice prevents any tranformations)\r\n */\r\n const imageSource = image.src.split('?')[0];\r\n const params = {\r\n rxy: image.focalPoint ? `${image.focalPoint.left},${image.focalPoint.top}` : undefined,\r\n // Define default quality as 95 to ensure some reduction in size for all but the smallest images\r\n quality: imageParams.width && imageParams.width > 400 ? 95 : undefined,\r\n ...imageParams,\r\n };\r\n const paramsString = queryString.stringify(params);\r\n return `${imageSource}${paramsString ? `?${queryString.stringify(params)}` : ''}`;\r\n}\r\nexport function srcSet(image, imageParams) {\r\n if (!image || !image.src) {\r\n return '';\r\n }\r\n const pixelDensities = [1, 1.5, 2, 2.5, 3];\r\n return pixelDensities\r\n .map((pd) => `${imageUrl(image, {\r\n ...imageParams,\r\n ...(imageParams.width ? { width: imageParams.width * pd } : {}),\r\n ...(imageParams.height ? { height: imageParams.height * pd } : {}),\r\n })} ${pd}x`)\r\n .join(',');\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 overflow: hidden;\r\n overflow: clip;\r\n ${imageWrapperRatioPadding(width, height)};\r\n `;\r\n}\r\n/**\r\n * Calculates the percentage bottom padding\r\n * required to maintain a certain ratio.\r\n *\r\n * To be used in cases where the image ratio\r\n * changes based on viewport.\r\n *\r\n * @param width\r\n * @param height\r\n * @returns padding-bottom: {ratioPercentage}%\r\n */\r\nexport function imageWrapperRatioPadding(width, height) {\r\n if (!width && !height) {\r\n return '';\r\n }\r\n const ratioPercentage = ((height / width) * 100).toFixed(2);\r\n return `padding-bottom: ${ratioPercentage}%`;\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","export var Device;\r\n(function (Device) {\r\n Device[Device[\"MobileSmall\"] = 320] = \"MobileSmall\";\r\n Device[Device[\"Mobile\"] = 375] = \"Mobile\";\r\n Device[Device[\"MobileLarge\"] = 480] = \"MobileLarge\";\r\n Device[Device[\"TabletSmall\"] = 568] = \"TabletSmall\";\r\n Device[Device[\"Tablet\"] = 768] = \"Tablet\";\r\n Device[Device[\"TabletLarge\"] = 1024] = \"TabletLarge\";\r\n Device[Device[\"DesktopSmall\"] = 1280] = \"DesktopSmall\";\r\n Device[Device[\"Desktop\"] = 1366] = \"Desktop\";\r\n Device[Device[\"DesktopLarge\"] = 1600] = \"DesktopLarge\";\r\n Device[Device[\"SubActualDesktop\"] = 1800] = \"SubActualDesktop\";\r\n Device[Device[\"ActualDesktop\"] = 1920] = \"ActualDesktop\";\r\n Device[Device[\"DesktopXL\"] = 2560] = \"DesktopXL\";\r\n})(Device || (Device = {}));\r\nexport function from(size) {\r\n return `(min-width: ${size}px)`;\r\n}\r\nexport function until(size) {\r\n return `(max-width: ${size - 1}px)`;\r\n}\r\nexport function between(start, end) {\r\n return `${from(start)} and ${until(end)}`;\r\n}\r\n","import { css } from 'styled-components';\r\n/**\r\n * Show only for screen readers.\r\n * @description Sourced from https://gist.github.com/ffoodd/000b59f431e3e64e4ce1a24d5bb36034\r\n */\r\nconst srOnly = css `\r\n border: 0 !important;\r\n clip: rect(1px, 1px, 1px, 1px) !important;\r\n -webkit-clip-path: inset(50%) !important;\r\n clip-path: inset(50%) !important;\r\n height: 1px !important;\r\n margin: -1px !important;\r\n overflow: hidden !important;\r\n padding: 0 !important;\r\n position: absolute !important;\r\n width: 1px !important;\r\n white-space: nowrap !important;\r\n`;\r\nexport default srOnly;\r\n","import { mix } from 'polished';\r\nimport { css } from 'styled-components';\r\nimport { cubicEaseOut } from './animate';\r\nimport brand from './brand';\r\nimport fonts from './fonts';\r\nimport { Device, from } from './media';\r\nconst headingStyles = css `\r\n color: currentColor;\r\n ${fonts.helvetica.bold};\r\n margin: 0 0 1em;\r\n`;\r\nexport const h1 = css `\r\n ${headingStyles};\r\n font-size: 42px;\r\n line-height: 50px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 56px;\r\n line-height: 66px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 68px;\r\n line-height: 78px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 72px;\r\n line-height: 82px;\r\n }\r\n`;\r\nexport const h2 = css `\r\n ${headingStyles};\r\n font-size: 36px;\r\n line-height: 44px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 45px;\r\n line-height: 55px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 52px;\r\n line-height: 62px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 56px;\r\n line-height: 68px;\r\n }\r\n`;\r\nexport const h3 = css `\r\n ${headingStyles};\r\n font-size: 30px;\r\n line-height: 38px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 33px;\r\n line-height: 43px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 35px;\r\n line-height: 45px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 40px;\r\n line-height: 52px;\r\n }\r\n`;\r\nexport const h4 = css `\r\n ${headingStyles};\r\n font-size: 25px;\r\n line-height: 33px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 28px;\r\n line-height: 38px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 30px;\r\n line-height: 40px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 32px;\r\n line-height: 44px;\r\n }\r\n`;\r\nexport const h5 = css `\r\n ${headingStyles};\r\n font-size: 20px;\r\n line-height: 28px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 23px;\r\n line-height: 33px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 25px;\r\n line-height: 35px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 28px;\r\n line-height: 40px;\r\n }\r\n`;\r\nexport const h6 = css `\r\n ${headingStyles};\r\n ${fonts.helvetica.regular};\r\n font-size: 16px;\r\n line-height: 24px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 20px;\r\n line-height: 30px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 22px;\r\n line-height: 34px;\r\n }\r\n`;\r\nexport const h6Bold = css `\r\n ${headingStyles};\r\n font-size: 16px;\r\n line-height: 24px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 20px;\r\n line-height: 30px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 22px;\r\n line-height: 34px;\r\n }\r\n`;\r\nexport const subhead = css `\r\n ${headingStyles};\r\n ${fonts.helvetica.regular};\r\n font-size: 22px;\r\n line-height: 30px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 24px;\r\n line-height: 32px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 24px;\r\n line-height: 32px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 28px;\r\n line-height: 40px;\r\n }\r\n`;\r\nexport const headingUnderline = css `\r\n position: relative;\r\n padding-bottom: 16px;\r\n\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n display: block;\r\n background: ${brand.yellow.base};\r\n height: 10px;\r\n width: 80px;\r\n transform: scaleX(0);\r\n transform-origin: 0 0;\r\n will-change: transform;\r\n transition: transform 0.75s cubic-bezier(0.33, 1, 0.68, 1);\r\n\r\n [data-inview='true'] & {\r\n transform: scaleX(1);\r\n }\r\n }\r\n`;\r\nconst paragraphStyles = css `\r\n color: currentColor;\r\n ${fonts.helvetica.regular};\r\n margin: 0 0 1em;\r\n`;\r\nexport const paragraphHero = css `\r\n ${paragraphStyles};\r\n font-size: 20px;\r\n line-height: 28px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 18px;\r\n line-height: 32px;\r\n }\r\n`;\r\nexport const paragraph = css `\r\n ${paragraphStyles};\r\n font-size: 18px;\r\n line-height: 26px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n`;\r\nexport const paragraphSmall = css `\r\n ${paragraphStyles};\r\n font-size: 16px;\r\n line-height: 26px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 16px;\r\n line-height: 26px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 16px;\r\n line-height: 26px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 16px;\r\n line-height: 28px;\r\n }\r\n`;\r\nexport const micro = css `\r\n ${fonts.helvetica.bold};\r\n font-size: 14px;\r\n line-height: 22px;\r\n letter-spacing: -0.01em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 14px;\r\n line-height: 24px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 14px;\r\n line-height: 24px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 14px;\r\n line-height: 26px;\r\n }\r\n`;\r\nexport const contentSub = css `\r\n ${fonts.helvetica.regular};\r\n font-size: 14px;\r\n line-height: 26px;\r\n text-transform: uppercase;\r\n letter-spacing: 0.1em;\r\n`;\r\nexport const link = css `\r\n color: currentColor;\r\n background: linear-gradient(\r\n to right,\r\n var(--accentColor, ${brand.blue.base}),\r\n var(--accentColor, ${brand.blue.base})\r\n );\r\n background-repeat: no-repeat;\r\n background-size: 0% 100%;\r\n padding: 0.25em 4px;\r\n text-decoration: underline;\r\n text-underline-position: under;\r\n transition: background-size 0.15s ${cubicEaseOut}, color 0.15s ${cubicEaseOut};\r\n box-decoration-break: clone;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n &:focus,\r\n &:hover {\r\n background-size: 100% 100%;\r\n color: ${brand.white};\r\n }\r\n`;\r\nexport const tag = css `\r\n ${fonts.helvetica.regular};\r\n font-size: 12px;\r\n letter-spacing: 0.1em;\r\n line-height: 1em;\r\n text-transform: uppercase;\r\n`;\r\nexport const blockquote = css `\r\n ${paragraph};\r\n position: relative;\r\n padding: 8px 0 8px 20px;\r\n\r\n &:before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 4px;\r\n height: 100%;\r\n background-color: ${brand.grey.grey1};\r\n }\r\n`;\r\nexport const tagBold = css `\r\n ${tag};\r\n ${fonts.helvetica.bold};\r\n`;\r\nexport const table = css `\r\n background: ${brand.white};\r\n border-collapse: collapse;\r\n color: ${brand.black};\r\n margin-bottom: 1em;\r\n width: 100%;\r\n\r\n thead {\r\n tr {\r\n background: ${brand.blue.base};\r\n\r\n td,\r\n th {\r\n border: 2px solid ${brand.white};\r\n color: ${brand.white};\r\n ${fonts.helvetica.bold};\r\n font-size: 18px;\r\n letter-spacing: -0.01em;\r\n line-height: 22px;\r\n padding: 12px 16px;\r\n text-align: left;\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n &:nth-child(odd) {\r\n background: ${mix(0.48, brand.grey.grey1, brand.white)};\r\n }\r\n\r\n &:nth-child(even) {\r\n background: ${mix(0.48, brand.grey.otherGrey, brand.white)};\r\n }\r\n\r\n th {\r\n border: 2px solid ${brand.white};\r\n color: ${brand.white};\r\n ${fonts.helvetica.bold};\r\n font-size: 18px;\r\n letter-spacing: -0.01em;\r\n line-height: 22px;\r\n padding: 12px 16px;\r\n text-align: left;\r\n }\r\n\r\n td {\r\n border: 2px solid ${brand.white};\r\n ${fonts.helvetica.regular};\r\n font-size: 16px;\r\n letter-spacing: -0.01em;\r\n line-height: 20px;\r\n padding: 12px 16px;\r\n text-align: left;\r\n }\r\n }\r\n }\r\n`;\r\nexport const contentStyles = css `\r\n h1,\r\n .h1-styles {\r\n ${h1}\r\n }\r\n\r\n h2,\r\n .h2-styles {\r\n ${h2}\r\n }\r\n\r\n h3,\r\n .h3-styles {\r\n ${h3}\r\n }\r\n\r\n h4,\r\n .h4-styles {\r\n ${h4}\r\n }\r\n\r\n h5,\r\n .h5-styles {\r\n ${h5}\r\n }\r\n\r\n h6,\r\n .h6-styles {\r\n ${h6}\r\n }\r\n\r\n .h6-bold-styles {\r\n ${h6Bold}\r\n }\r\n\r\n p {\r\n ${paragraph}\r\n }\r\n\r\n p.subhead,\r\n span.subhead {\r\n ${subhead}\r\n }\r\n\r\n p.hero,\r\n span.hero {\r\n ${paragraphHero}\r\n }\r\n\r\n p.small,\r\n span.small {\r\n ${paragraphSmall}\r\n }\r\n\r\n p.micro,\r\n span.micro {\r\n ${micro}\r\n }\r\n\r\n p.content-sub {\r\n ${contentSub}\r\n }\r\n\r\n a {\r\n ${link}\r\n }\r\n\r\n ol,\r\n ul {\r\n ${paragraphStyles};\r\n font-size: 18px;\r\n line-height: 26px;\r\n letter-spacing: -0.01em;\r\n margin: 0 0 0.5em;\r\n\r\n @media ${from(Device.TabletSmall)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n font-size: 18px;\r\n line-height: 28px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 18px;\r\n line-height: 36px;\r\n }\r\n }\r\n\r\n ol {\r\n list-style: decimal;\r\n padding-left: 1.2em;\r\n }\r\n\r\n ul {\r\n list-style: disc;\r\n padding-left: 1.2em;\r\n }\r\n\r\n li span {\r\n display: inline;\r\n }\r\n\r\n blockquote {\r\n ${blockquote};\r\n }\r\n\r\n hr {\r\n display: block;\r\n background: currentColor;\r\n border: 0;\r\n height: 4px;\r\n margin: 40px 0;\r\n padding: 0;\r\n width: 100%;\r\n\r\n @media ${from(Device.Tablet)} {\r\n margin: 80px 0;\r\n }\r\n }\r\n\r\n table {\r\n ${table};\r\n }\r\n\r\n .responsive-table {\r\n position: relative;\r\n overflow-x: auto;\r\n }\r\n\r\n .brand-black {\r\n color: ${brand.black};\r\n }\r\n\r\n .brand-blue {\r\n color: ${brand.blue.base};\r\n }\r\n\r\n .brand-sectors-defence-purple {\r\n color: ${brand.sectors.defencePurple};\r\n }\r\n\r\n .brand-sectors-energy-green {\r\n color: ${brand.sectors.energyGreen};\r\n }\r\n\r\n .brand-sectors-marine-blue {\r\n color: ${brand.sectors.marineBlue};\r\n }\r\n\r\n .brand-sectors-nuclear-orange {\r\n color: ${brand.sectors.nuclearOrange};\r\n }\r\n\r\n .brand-sectors-oil-gas-grey {\r\n color: ${brand.sectors.oilGasGrey};\r\n }\r\n\r\n .brand-sectors-transport-red {\r\n color: ${brand.sectors.transportRed};\r\n }\r\n\r\n .brand-white {\r\n color: ${brand.white};\r\n }\r\n\r\n .brand-yellow {\r\n color: ${brand.yellow.base};\r\n }\r\n\r\n > *:first-child {\r\n margin-top: 0;\r\n }\r\n\r\n > *:last-child {\r\n margin-bottom: 0;\r\n }\r\n`;\r\n","import { domMax, LazyMotion } from 'framer-motion';\r\nimport React from 'react';\r\nexport function withMotionMax(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithMotionMax = (props) => {\r\n return (React.createElement(LazyMotion, { features: domMax, strict: true },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithMotionMax.displayName = `withMotionMax(${displayName})`;\r\n return ComponentWithMotionMax;\r\n}\r\n","import * as React from 'react';\r\nexport function useAutoplay(params) {\r\n const refInterval = React.useRef();\r\n const [activeIndex, setActiveIndex] = React.useState(0);\r\n const [paused, setPaused] = React.useState(params.duration === 0);\r\n const activeItem = params.items[activeIndex];\r\n const activeItemDuration = activeItem.duration ?? params.duration;\r\n React.useEffect(() => {\r\n if (params.enabled && !paused) {\r\n refInterval.current = window.setTimeout(update, activeItemDuration);\r\n }\r\n return cleanup;\r\n function update() {\r\n if (paused) {\r\n return;\r\n }\r\n let newIndex = activeIndex + 1;\r\n if (newIndex === params.items.length) {\r\n newIndex = 0;\r\n }\r\n setActiveIndex(newIndex);\r\n }\r\n function cleanup() {\r\n if (refInterval.current) {\r\n window.clearInterval(refInterval.current);\r\n }\r\n }\r\n }, [activeIndex, activeItemDuration, paused, params.enabled]);\r\n return {\r\n activeIndex,\r\n duration: activeItemDuration,\r\n setActiveIndex,\r\n paused,\r\n setPaused,\r\n };\r\n}\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","import { cubicEaseOut } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, until } from '@helpers/media';\r\nimport srOnly from '@helpers/srOnly';\r\nimport styled from 'styled-components';\r\nconst Container = styled.button `\r\n display: inline-flex;\r\n align-items: center;\r\n border: 1px solid var(--colorPrimary);\r\n background: none;\r\n background-image: linear-gradient(to right, var(--colorPrimary), var(--colorPrimary));\r\n background-repeat: no-repeat;\r\n background-size: 0% 100%;\r\n color: var(--colorPrimary);\r\n height: 67px;\r\n padding: 0px 24px 0px 40px;\r\n text-decoration: none;\r\n transition: background-size 0.15s ${cubicEaseOut}, border-color 0.15s ${cubicEaseOut};\r\n user-select: none;\r\n width: auto;\r\n\r\n &[data-fill='right'] {\r\n background-position: left center;\r\n }\r\n\r\n &[data-fill='left'] {\r\n background-position: right center;\r\n }\r\n \r\n span& {\r\n button:focus &,\r\n a:focus & {\r\n outline: auto;\r\n outline-offset: 3px;\r\n }\r\n\r\n button:hover &,\r\n a:hover & {\r\n color: var(--colorContrast);\r\n background-size: 100% 100%;\r\n }\r\n\r\n button[data-type='solid']:hover &,\r\n a[data-type='solid']:hover & {\r\n color: var(--colorContrast);\r\n background-size: 0% 100%;\r\n }\r\n }\r\n\r\n &:not(span) {\r\n cursor: pointer;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n\r\n &:focus {\r\n outline: auto;\r\n outline-offset: 5px;\r\n }\r\n\r\n &:hover {\r\n color: var(--colorContrast);\r\n background-size: 100% 100%;\r\n }\r\n\r\n &[data-type='solid']:hover,\r\n &[data-type='solid-inverted']:hover {\r\n color: var(--colorPrimary);\r\n background-size: 0% 100%;\r\n }\r\n }\r\n\r\n &[data-type='default'] {\r\n --colorPrimary: ${brand.grey.grey6};\r\n --colorContrast: ${brand.white};\r\n }\r\n\r\n &[data-type='inverted'] {\r\n --colorPrimary: ${brand.white};\r\n --colorContrast: ${brand.grey.grey6};\r\n }\r\n\r\n &[data-type='solid'] {\r\n --colorPrimary: ${brand.grey.grey6};\r\n --colorContrast: ${brand.white};\r\n background-size: 100% 100%;\r\n color: var(--colorContrast);\r\n }\r\n\r\n &[data-type='solid-inverted'] {\r\n --colorPrimary: ${brand.white};\r\n --colorContrast: ${brand.grey.grey6};\r\n background-size: 100% 100%;\r\n color: var(--colorContrast);\r\n }\r\n\r\n &[data-icon-only='true'] {\r\n height: 78px;\r\n justify-content: center;\r\n padding: 0;\r\n width: 78px;\r\n }\r\n\r\n /* Increase specificity to override :not(span) style */\r\n &:disabled:disabled:disabled {\r\n --colorPrimary: ${brand.grey.grey3};\r\n --colorContrast: ${brand.grey.grey3};\r\n background-size: 0% 100%;\r\n pointer-events: none;\r\n }\r\n\r\n &[data-type='solid']:disabled:disabled:disabled {\r\n --colorPrimary: ${brand.grey.grey3};\r\n --colorContrast: ${brand.white};\r\n background-size: 100% 100%;\r\n pointer-events: none;\r\n }\r\n\r\n @media ${until(Device.TabletLarge)} {\r\n height: 45px;\r\n padding: 0px 12px;\r\n\r\n &[data-icon-only='true'] {\r\n height: 45px;\r\n width: 45px;\r\n }\r\n }\r\n`;\r\nconst Text = styled.span `\r\n color: currentColor;\r\n ${fonts.helvetica.medium};\r\n font-size: 16px;\r\n line-height: 1em;\r\n text-decoration: none;\r\n transition: color 0.15s ${cubicEaseOut};\r\n\r\n [data-icon-only='true'] & {\r\n ${srOnly};\r\n }\r\n`;\r\nconst IconWrapper = styled.div `\r\n display: block;\r\n color: currentColor;\r\n height: 17px;\r\n margin: 0;\r\n padding: 0;\r\n transition: color 0.15s ${cubicEaseOut};\r\n width: 37px;\r\n\r\n [data-icon-position='left'] & {\r\n margin-right: auto;\r\n order: -1;\r\n padding-right: 20px;\r\n }\r\n\r\n [data-icon-position='right'] & {\r\n margin-left: auto;\r\n order: 1;\r\n padding-left: 20px;\r\n }\r\n\r\n [data-icon-only='true'] & {\r\n color: currentColor;\r\n height: 17px;\r\n margin: 0;\r\n padding: 0;\r\n width: 17px;\r\n }\r\n`;\r\nconst ButtonStyles = {\r\n Container,\r\n IconWrapper,\r\n Text,\r\n};\r\nexport default ButtonStyles;\r\n","import { cubicEaseOut } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { Device, from } from '@helpers/media';\r\nimport { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst Container = styled.nav `\r\n --activeWidth: 2px;\r\n --colorInactive: ${brand.grey.grey2};\r\n --colorActive: ${brand.white};\r\n --direction: row;\r\n --sizeButton: 17px;\r\n --sizeDot: 5px;\r\n\r\n display: flex;\r\n align-self: center;\r\n flex-direction: var(--direction);\r\n gap: 8px;\r\n grid-area: 3 / 1;\r\n justify-self: flex-start;\r\n user-select: none;\r\n\r\n @media ${from(Device.Tablet)} {\r\n --activeWidth: 4px;\r\n --sizeButton: 33px;\r\n --sizeDot: 9px;\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n grid-area: 1 / 1;\r\n justify-self: flex-end;\r\n }\r\n`;\r\nconst Item = styled.button `\r\n position: relative;\r\n display: flex;\r\n background: transparent;\r\n border: 0;\r\n border-radius: 50%;\r\n color: var(--colorInactive);\r\n margin: 0;\r\n padding: 0;\r\n place-content: center;\r\n place-items: center;\r\n height: var(--sizeButton);\r\n transition: color 0.3s ${cubicEaseOut};\r\n width: var(--sizeButton);\r\n\r\n &::before {\r\n content: '';\r\n background: currentColor;\r\n border-radius: 50%;\r\n height: var(--sizeDot);\r\n transition: background-color 0.3s ${cubicEaseOut};\r\n width: var(--sizeDot);\r\n }\r\n\r\n &[aria-current='true'],\r\n &:focus,\r\n &:hover {\r\n color: var(--colorActive);\r\n }\r\n`;\r\nconst ActiveIndicator = styled(m.span) `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n border: var(--activeWidth) solid var(--colorActive);\r\n border-radius: 50%;\r\n height: 100%;\r\n width: 100%;\r\n`;\r\nconst SvgIndicator = styled.svg `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n`;\r\nconst Circle = styled(m.circle) `\r\n fill: none;\r\n stroke: var(--colorActive);\r\n stroke-width: 4px;\r\n`;\r\nconst DotPaginationStyles = {\r\n ActiveIndicator,\r\n Circle,\r\n Container,\r\n Item,\r\n SvgIndicator,\r\n};\r\nexport default DotPaginationStyles;\r\n","import * as React from 'react';\r\nimport S from './DotPagination.styles';\r\nconst DotPagination = ({ autoplay = 0, count, paused = false, value, customLayoutId = 'indicator', onChange, }) => {\r\n return (React.createElement(S.Container, { \"aria-label\": \"Slider Pagination\" }, Array.from(Array(count)).map((_, index) => (React.createElement(S.Item, { key: `DotPaginationItem_${index}`, \"aria-current\": index === value, \"aria-label\": `Go to ${index + 1}`, onClick: (event) => {\r\n event.preventDefault();\r\n onChange(index);\r\n } }, index === value && renderActiveIndicator())))));\r\n function renderActiveIndicator() {\r\n const isActiveAnimating = autoplay > 0 && !paused;\r\n if (isActiveAnimating) {\r\n return (React.createElement(S.SvgIndicator, { \"aria-hidden\": true, viewBox: \"0 0 33 33\" },\r\n React.createElement(S.Circle, { cx: \"16.5\", cy: \"16.5\", r: \"14.5\", initial: { pathLength: isActiveAnimating ? 0 : 1 }, animate: { pathLength: 1 }, transition: { duration: autoplay / 1000, ease: 'linear' }, style: { rotate: -90 } })));\r\n }\r\n return (React.createElement(S.ActiveIndicator, { \"aria-hidden\": true, \r\n // \"layoutId\" handles animating between positions automatically.\r\n layoutId: customLayoutId, transition: {\r\n duration: 0.3,\r\n ease: 'easeOut',\r\n } }));\r\n }\r\n};\r\nexport default DotPagination;\r\n","import SvgArrow from '@img/icons/arrow-right.svg';\r\nimport * as React from 'react';\r\nimport S from '../Button/Button.styles';\r\nconst LinkButton = ({ buttonType, children, fillDirection = 'right', icon, iconOnly, iconPosition = 'right', ...otherProps }) => {\r\n return (React.createElement(S.Container, { as: \"a\", \"data-fill\": fillDirection, \"data-icon-only\": iconOnly, \"data-icon-position\": iconPosition, \"data-type\": buttonType, ...otherProps },\r\n React.createElement(S.Text, null, children),\r\n React.createElement(S.IconWrapper, null, icon ?? React.createElement(SvgArrow, null))));\r\n};\r\nexport default LinkButton;\r\n","import { fluid } from '@helpers/fluid';\r\nimport { siteWide } from '@helpers/grid';\r\nimport styled from 'styled-components';\r\nconst Container = styled.section `\r\n --introSpacing: ${fluid(32, 64)};\r\n --sectionSpacing: ${fluid(48, 96)};\r\n\r\n scroll-margin: var(--headerHeight) 0 0;\r\n`;\r\nconst Inner = styled.div `\r\n ${siteWide}\r\n`;\r\nconst SectionWrapperStyles = {\r\n Container,\r\n Inner,\r\n};\r\nexport default SectionWrapperStyles;\r\n","import * as React from 'react';\r\nimport S from './SectionWrapper.styles';\r\nconst SectionWrapper = React.forwardRef(({ children, layout = 'default', ...otherProps }, ref) => {\r\n switch (layout) {\r\n case 'fullWidth':\r\n return (React.createElement(S.Container, { ref: ref, ...otherProps }, children));\r\n case 'default':\r\n default:\r\n return (React.createElement(S.Container, { ref: ref, ...otherProps },\r\n React.createElement(S.Inner, null, children)));\r\n }\r\n});\r\nSectionWrapper.displayName = 'SectionWrapper';\r\nexport default SectionWrapper;\r\n","import styled from 'styled-components';\r\nconst Img = styled.img ``;\r\nconst SimpleImageStyles = {\r\n Img,\r\n};\r\nexport default SimpleImageStyles;\r\n","import * as React from 'react';\r\nimport S from './SimpleImage.styles';\r\nconst SimpleImage = React.forwardRef(({ alt = '', loading = 'lazy', ...otherProps }, ref) => {\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(S.Img, { ...otherProps, ref: ref, alt: alt, loading: loading, role: alt === '' ? 'presentation' : undefined })));\r\n});\r\nSimpleImage.displayName = 'SimpleImage';\r\nexport default SimpleImage;\r\n","import brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, from } from '@helpers/media';\r\nimport { tag } from '@helpers/typography';\r\nimport { imageWrapperPreserveRatio, imageCoverContainer } from '@helpers/image';\r\nimport SimpleImage from '@stories/Components/SimpleImage/SimpleImage';\r\nimport styled from 'styled-components';\r\nconst Container = styled.article `\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n padding-bottom: 24px;\r\n border-bottom: 1px solid ${brand.grey.otherGrey};\r\n margin-bottom: 24px;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n &:not(:last-child) {\r\n padding-bottom: 48px;\r\n border-bottom: 1px solid ${brand.grey.otherGrey};\r\n margin-bottom: 48px;\r\n }\r\n }\r\n`;\r\nconst Link = styled.a `\r\n display: grid;\r\n align-items: center;\r\n gap: 12px;\r\n grid-template-columns: min(50%, 135px) 1fr;\r\n text-decoration: none;\r\n\r\n @media ${from(Device.Tablet)} {\r\n grid-template-columns: min(50%, 185px) 1fr;\r\n }\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n gap: 32px;\r\n }\r\n`;\r\nconst ImageWrapper = styled.div `\r\n ${imageWrapperPreserveRatio(185, 134)}\r\n`;\r\nconst Image = styled(SimpleImage) `\r\n ${imageCoverContainer()}\r\n`;\r\nconst ContentWrapper = styled.div `\r\n display: block;\r\n`;\r\nconst Tag = styled.small `\r\n ${tag};\r\n display: block;\r\n color: ${brand.grey.otherGrey};\r\n margin: 0 0 12px;\r\n`;\r\nconst Title = styled.h3 `\r\n display: block;\r\n color: ${brand.white};\r\n ${fonts.helvetica.bold};\r\n font-size: 16px;\r\n letter-spacing: -0.01em;\r\n line-height: 24px;\r\n text-decoration: none;\r\n text-underline-position: under;\r\n\r\n @media ${from(Device.DesktopLarge)} {\r\n font-size: 18px;\r\n line-height: 30px;\r\n }\r\n\r\n ${Link}:focus &,\r\n ${Link}:hover & {\r\n text-decoration: underline;\r\n }\r\n`;\r\nconst ArticleSummaryStyles = {\r\n Container,\r\n ContentWrapper,\r\n ImageWrapper,\r\n Image,\r\n Link,\r\n Tag,\r\n Title,\r\n};\r\nexport default ArticleSummaryStyles;\r\n","import { imageUrl } from '@helpers/image';\r\nimport * as React from 'react';\r\nimport S from './ArticleSummary.styles';\r\nconst ArticleSummary = ({ headingLevel, image, tabIndex, tag, title, url, }) => {\r\n return (React.createElement(S.Container, null,\r\n React.createElement(S.Link, { href: url, tabIndex: tabIndex },\r\n React.createElement(S.ImageWrapper, null,\r\n React.createElement(S.Image, { alt: \"\", loading: \"lazy\", role: \"presentation\", src: imageUrl(image, { width: 185, height: 134 }) })),\r\n React.createElement(S.ContentWrapper, null,\r\n React.createElement(S.Tag, null, tag),\r\n React.createElement(S.Title, { as: headingLevel }, title)))));\r\n};\r\nexport default ArticleSummary;\r\n","import brand from '@helpers/brand';\r\nimport { siteWide } from '@helpers/grid';\r\nimport { imageCoverContainer } from '@helpers/image';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport { h1, paragraph } from '@helpers/typography';\r\nimport SimpleImage from '@stories/Components/SimpleImage/SimpleImage';\r\nimport { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nimport ArticleSummaryStyles from '../ArticleSummary/ArticleSummary.styles';\r\nconst Container = styled(m.article) `\r\n display: grid;\r\n grid-area: 1 / 1;\r\n height: 100%;\r\n`;\r\nconst MediaWrapper = styled(m.div) `\r\n position: relative;\r\n display: block;\r\n grid-area: 1 / 1;\r\n overflow: hidden;\r\n overflow: clip;\r\n padding-top: var(--headerHeight);\r\n user-select: none;\r\n z-index: 1;\r\n\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n height: 100%;\r\n background: rgba(0, 0, 0, var(--tintAmount));\r\n width: 100%;\r\n }\r\n`;\r\nconst Image = styled(m(SimpleImage)) `\r\n ${imageCoverContainer()}\r\n\r\n &[data-mobile-only=true] {\r\n @media ${from(Device.Tablet)} {\r\n display: none;\r\n }\r\n }\r\n`;\r\nconst Video = styled.video `\r\n ${imageCoverContainer()}\r\n\r\n &[data-hide-mobile=true] {\r\n @media ${until(Device.Tablet)} {\r\n display: none;\r\n }\r\n }\r\n`;\r\nconst Inner = styled.div `\r\n ${siteWide};\r\n\r\n position: relative;\r\n display: grid;\r\n align-items: center;\r\n grid-area: 1 / 1;\r\n grid-template-rows: 1fr auto;\r\n padding-top: var(--headerHeight);\r\n padding-bottom: 61px;\r\n z-index: 2;\r\n\r\n @media ${from(Device.Tablet)} {\r\n padding-bottom: 77px;\r\n }\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n grid-template-columns: auto 1fr;\r\n padding-left: 118px;\r\n padding-bottom: 0;\r\n }\r\n`;\r\nconst ContentWrapper = styled(m.div) ``;\r\nconst Title = styled(m.h2) `\r\n ${h1};\r\n margin-bottom: 12px;\r\n\r\n @media ${from(Device.Tablet)} {\r\n margin-bottom: 24px;\r\n }\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n max-width: 670px;\r\n }\r\n`;\r\nconst Content = styled(m.p) `\r\n ${paragraph};\r\n margin-bottom: 0;\r\n max-width: 485px;\r\n`;\r\nconst CtaWrapper = styled(m.div) `\r\n display: block;\r\n margin-top: 24px;\r\n\r\n @media ${from(Device.Tablet)} {\r\n margin-top: 56px;\r\n }\r\n`;\r\nconst ArticleList = styled(m.div) `\r\n display: flex;\r\n flex-direction: column;\r\n\r\n @media ${until(Device.DesktopSmall)} {\r\n ${ArticleSummaryStyles.Container}:first-child {\r\n border-top: 1px solid ${brand.grey.otherGrey};\r\n border-bottom: 1px solid ${brand.grey.otherGrey};\r\n margin-bottom: 0;\r\n padding-top: 24px;\r\n padding-bottom: 24px;\r\n }\r\n\r\n ${ArticleSummaryStyles.Container}:not(:first-child) {\r\n display: none;\r\n }\r\n }\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n justify-self: flex-end;\r\n max-width: 417px;\r\n width: 100%;\r\n }\r\n`;\r\nconst BannerItemStyles = {\r\n ArticleList,\r\n Container,\r\n Content,\r\n ContentWrapper,\r\n CtaWrapper,\r\n Image,\r\n MediaWrapper,\r\n Inner,\r\n Title,\r\n Video,\r\n};\r\nexport default BannerItemStyles;\r\n","import { imageUrl, srcSet } from '@helpers/image';\r\nimport { Device, from } from '@helpers/media';\r\nimport LinkButton from '@stories/Components/LinkButton/LinkButton';\r\nimport { m, useReducedMotion } from 'framer-motion';\r\nimport * as React from 'react';\r\nimport ArticleSummary from '../ArticleSummary/ArticleSummary';\r\nimport S from './BannerItem.styles';\r\nconst BannerItem = ({ active, articles, content, cta, image, index, shouldPlay, tint = 0.3, title, video, loopVideo, }) => {\r\n const reduceMotion = useReducedMotion();\r\n const refVideo = React.useRef(null);\r\n React.useEffect(() => {\r\n if (!refVideo.current) {\r\n return;\r\n }\r\n if (active && shouldPlay) {\r\n refVideo.current.currentTime = 0;\r\n refVideo.current.play();\r\n }\r\n else {\r\n refVideo.current.pause();\r\n }\r\n }, [active, shouldPlay]);\r\n return (React.createElement(S.Container, { \"aria-current\": active, initial: index === 0 ? 'initial' : 'inactive', animate: active ? 'active' : 'inactive', variants: {\r\n inactive: {\r\n transition: {\r\n when: 'afterChildren',\r\n },\r\n transitionEnd: {\r\n display: 'none',\r\n },\r\n },\r\n active: {\r\n display: 'grid',\r\n },\r\n }, style: { '--tintAmount': tint } },\r\n React.createElement(S.MediaWrapper, { variants: {\r\n inactive: {\r\n opacity: 1,\r\n zIndex: 0,\r\n transitionEnd: {\r\n opacity: 0,\r\n },\r\n },\r\n active: {\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n }, transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n } },\r\n image && (React.createElement(\"picture\", null,\r\n React.createElement(\"source\", { media: from(Device.Desktop), srcSet: srcSet(image, { width: 2560, height: 1440, quality: 80 }) }),\r\n React.createElement(\"source\", { media: from(Device.DesktopSmall), srcSet: srcSet(image, { width: 1365, height: 767, quality: 80 }) }),\r\n React.createElement(\"source\", { media: from(Device.Tablet), srcSet: srcSet(image, { width: 1279, height: 1023, quality: 80 }) }),\r\n React.createElement(\"source\", { media: from(Device.MobileLarge), srcSet: srcSet(image, { width: 767, height: 1023, quality: 80 }) }),\r\n React.createElement(S.Image, { alt: image.altText, draggable: false, loading: index === 0 ? 'eager' : 'lazy', role: \"presentation\", src: imageUrl(image, { width: 479, height: 900, quality: 80 }), srcSet: srcSet(image, { width: 479, height: 900, quality: 80 }), variants: {\r\n inactive: {\r\n scale: 1,\r\n transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n },\r\n },\r\n active: {\r\n scale: reduceMotion ? 1 : 1.05,\r\n transition: {\r\n duration: 3,\r\n ease: 'easeOut',\r\n },\r\n },\r\n }, \"data-mobile-only\": !!video }))),\r\n video && (React.createElement(S.Video, { ref: refVideo, muted: true, playsInline: true, loop: loopVideo, preload: \"none\", poster: image\r\n ? imageUrl(image, { width: 479, height: 900, rmode: 'min', quality: 60 })\r\n : undefined, \"data-hide-mobile\": !!image },\r\n React.createElement(\"source\", { src: video, type: \"video/mp4\" })))),\r\n React.createElement(S.Inner, null,\r\n React.createElement(S.ContentWrapper, { variants: {\r\n inactive: {},\r\n active: {\r\n transition: {\r\n delayChildren: reduceMotion ? 0 : 0.5,\r\n staggerChildren: reduceMotion ? 0 : 0.15,\r\n },\r\n },\r\n } },\r\n React.createElement(S.Title, { as: index === 0 ? m.h1 : m.h2, variants: {\r\n initial: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n inactive: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n active: {\r\n opacity: 1,\r\n x: 0,\r\n },\r\n }, transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n } }, title),\r\n content && (React.createElement(S.Content, { variants: {\r\n initial: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n inactive: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n active: {\r\n opacity: 1,\r\n x: 0,\r\n },\r\n }, transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n } }, content)),\r\n cta && (React.createElement(S.CtaWrapper, { variants: {\r\n initial: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n inactive: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : -20,\r\n },\r\n active: {\r\n opacity: 1,\r\n x: 0,\r\n },\r\n }, transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n } },\r\n React.createElement(LinkButton, { buttonType: \"inverted\", href: cta.url, target: cta.target }, cta.text)))),\r\n articles && (React.createElement(S.ArticleList, { variants: {\r\n initial: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : 20,\r\n },\r\n inactive: {\r\n opacity: 0,\r\n x: reduceMotion ? 0 : 20,\r\n },\r\n active: {\r\n opacity: 1,\r\n x: 0,\r\n transition: {\r\n delay: 0.5,\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n },\r\n },\r\n }, transition: {\r\n duration: 0.5,\r\n ease: 'easeOut',\r\n } }, articles.map((article) => (React.createElement(ArticleSummary, { key: article.id, ...article, headingLevel: index === 0 ? 'h2' : 'h3' }))))))));\r\n};\r\nexport default BannerItem;\r\n","import brand from '@helpers/brand';\r\nimport { siteWide } from '@helpers/grid';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport DotPaginationStyles from '@stories/Components/DotPagination/DotPagination.styles';\r\nimport SectionWrapper from '@stories/Components/SectionWrapper/SectionWrapper';\r\nimport styled from 'styled-components';\r\nconst Container = styled(SectionWrapper) `\r\n --fgColor: ${brand.white};\r\n\r\n position: relative;\r\n display: grid;\r\n color: var(--fgColor);\r\n min-height: 92vh;\r\n overflow: hidden;\r\n overflow: clip;\r\n`;\r\nconst ItemList = styled.div `\r\n display: grid;\r\n grid-area: 1 / 1;\r\n`;\r\nconst PaginationWrapper = styled.div `\r\n @media ${until(Device.DesktopSmall)} {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n display: flex;\r\n padding-bottom: 32px;\r\n place-content: center;\r\n place-items: center;\r\n width: 100%;\r\n z-index: 3;\r\n }\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n ${siteWide};\r\n\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n flex-direction: row;\r\n grid-area: 1 / 1;\r\n justify-content: flex-start;\r\n padding-top: var(--headerHeight);\r\n pointer-events: none;\r\n z-index: 3;\r\n\r\n ${DotPaginationStyles.Container} {\r\n --direction: column;\r\n pointer-events: all;\r\n }\r\n }\r\n`;\r\nconst HomeHeroBannerStyles = {\r\n Container,\r\n ItemList,\r\n PaginationWrapper,\r\n};\r\nexport default HomeHeroBannerStyles;\r\n","import { withMotionMax } from '@hoc/withMotionMax';\r\nimport { useAutoplay } from '@hooks/useAutoplay';\r\nimport { useInView } from '@hooks/useInView';\r\nimport DotPagination from '@stories/Components/DotPagination/DotPagination';\r\nimport * as React from 'react';\r\nimport { useSwipeable } from 'react-swipeable';\r\nimport BannerItem from './BannerItem/BannerItem';\r\nimport S from './HomeHeroBanner.styles';\r\nconst HomeHeroBanner = ({ autoplay = 0, id, items }) => {\r\n const [refContainer, inView] = useInView({}, true);\r\n const { activeIndex, duration, paused, setActiveIndex, setPaused } = useAutoplay({\r\n enabled: autoplay > 0,\r\n duration: autoplay,\r\n items,\r\n });\r\n React.useEffect(() => {\r\n setPaused(!inView);\r\n }, [inView]);\r\n const swipeHandlers = useSwipeable({\r\n onSwipedLeft: () => {\r\n setActiveIndex(Math.min(activeIndex + 1, items.length - 1));\r\n },\r\n onSwipedRight: () => {\r\n setActiveIndex(Math.max(activeIndex - 1, 0));\r\n },\r\n });\r\n return (React.createElement(S.Container, { ...swipeHandlers, ref: (r) => {\r\n refContainer.current = r;\r\n swipeHandlers.ref(r);\r\n }, id: id, layout: \"fullWidth\", \"data-header-overlap\": \"true\" },\r\n React.createElement(S.ItemList, null, items.map((item, index) => (React.createElement(BannerItem, { key: item.id, ...item, active: index === activeIndex, index: index, shouldPlay: inView, loopVideo: items.length == 1 })))),\r\n items.length > 1 && (React.createElement(S.PaginationWrapper, null,\r\n React.createElement(DotPagination, { autoplay: duration, count: items.length, paused: paused, value: activeIndex, onChange: (index) => {\r\n setActiveIndex(index);\r\n setPaused(true);\r\n }, customLayoutId: `HomeBanner_${id}` })))));\r\n};\r\nexport default withMotionMax(HomeHeroBanner);\r\n","import * as React from 'react';\n\nconst LEFT = \"Left\";\nconst RIGHT = \"Right\";\nconst UP = \"Up\";\nconst DOWN = \"Down\";\n\n/* global document */\nconst defaultProps = {\n delta: 10,\n preventScrollOnSwipe: false,\n rotationAngle: 0,\n trackMouse: false,\n trackTouch: true,\n swipeDuration: Infinity,\n touchEventOptions: { passive: true },\n};\nconst initialState = {\n first: true,\n initial: [0, 0],\n start: 0,\n swiping: false,\n xy: [0, 0],\n};\nconst mouseMove = \"mousemove\";\nconst mouseUp = \"mouseup\";\nconst touchEnd = \"touchend\";\nconst touchMove = \"touchmove\";\nconst touchStart = \"touchstart\";\nfunction getDirection(absX, absY, deltaX, deltaY) {\n if (absX > absY) {\n if (deltaX > 0) {\n return RIGHT;\n }\n return LEFT;\n }\n else if (deltaY > 0) {\n return DOWN;\n }\n return UP;\n}\nfunction rotateXYByAngle(pos, angle) {\n if (angle === 0)\n return pos;\n const angleInRadians = (Math.PI / 180) * angle;\n const x = pos[0] * Math.cos(angleInRadians) + pos[1] * Math.sin(angleInRadians);\n const y = pos[1] * Math.cos(angleInRadians) - pos[0] * Math.sin(angleInRadians);\n return [x, y];\n}\nfunction getHandlers(set, handlerProps) {\n const onStart = (event) => {\n const isTouch = \"touches\" in event;\n // if more than a single touch don't track, for now...\n if (isTouch && event.touches.length > 1)\n return;\n set((state, props) => {\n // setup mouse listeners on document to track swipe since swipe can leave container\n if (props.trackMouse && !isTouch) {\n document.addEventListener(mouseMove, onMove);\n document.addEventListener(mouseUp, onUp);\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const xy = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n props.onTouchStartOrOnMouseDown &&\n props.onTouchStartOrOnMouseDown({ event });\n return Object.assign(Object.assign(Object.assign({}, state), initialState), { initial: xy.slice(), xy, start: event.timeStamp || 0 });\n });\n };\n const onMove = (event) => {\n set((state, props) => {\n const isTouch = \"touches\" in event;\n // Discount a swipe if additional touches are present after\n // a swipe has started.\n if (isTouch && event.touches.length > 1) {\n return state;\n }\n // if swipe has exceeded duration stop tracking\n if (event.timeStamp - state.start > props.swipeDuration) {\n return state.swiping ? Object.assign(Object.assign({}, state), { swiping: false }) : state;\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const [x, y] = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n const deltaX = x - state.xy[0];\n const deltaY = y - state.xy[1];\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n const time = (event.timeStamp || 0) - state.start;\n const velocity = Math.sqrt(absX * absX + absY * absY) / (time || 1);\n const vxvy = [deltaX / (time || 1), deltaY / (time || 1)];\n const dir = getDirection(absX, absY, deltaX, deltaY);\n // if swipe is under delta and we have not started to track a swipe: skip update\n const delta = typeof props.delta === \"number\"\n ? props.delta\n : props.delta[dir.toLowerCase()] ||\n defaultProps.delta;\n if (absX < delta && absY < delta && !state.swiping)\n return state;\n const eventData = {\n absX,\n absY,\n deltaX,\n deltaY,\n dir,\n event,\n first: state.first,\n initial: state.initial,\n velocity,\n vxvy,\n };\n // call onSwipeStart if present and is first swipe event\n eventData.first && props.onSwipeStart && props.onSwipeStart(eventData);\n // call onSwiping if present\n props.onSwiping && props.onSwiping(eventData);\n // track if a swipe is cancelable (handler for swiping or swiped(dir) exists)\n // so we can call preventDefault if needed\n let cancelablePageSwipe = false;\n if (props.onSwiping ||\n props.onSwiped ||\n props[`onSwiped${dir}`]) {\n cancelablePageSwipe = true;\n }\n if (cancelablePageSwipe &&\n props.preventScrollOnSwipe &&\n props.trackTouch &&\n event.cancelable) {\n event.preventDefault();\n }\n return Object.assign(Object.assign({}, state), { \n // first is now always false\n first: false, eventData, swiping: true });\n });\n };\n const onEnd = (event) => {\n set((state, props) => {\n let eventData;\n if (state.swiping && state.eventData) {\n // if swipe is less than duration fire swiped callbacks\n if (event.timeStamp - state.start < props.swipeDuration) {\n eventData = Object.assign(Object.assign({}, state.eventData), { event });\n props.onSwiped && props.onSwiped(eventData);\n const onSwipedDir = props[`onSwiped${eventData.dir}`];\n onSwipedDir && onSwipedDir(eventData);\n }\n }\n else {\n props.onTap && props.onTap({ event });\n }\n props.onTouchEndOrOnMouseUp && props.onTouchEndOrOnMouseUp({ event });\n return Object.assign(Object.assign(Object.assign({}, state), initialState), { eventData });\n });\n };\n const cleanUpMouse = () => {\n // safe to just call removeEventListener\n document.removeEventListener(mouseMove, onMove);\n document.removeEventListener(mouseUp, onUp);\n };\n const onUp = (e) => {\n cleanUpMouse();\n onEnd(e);\n };\n /**\n * The value of passive on touchMove depends on `preventScrollOnSwipe`:\n * - true => { passive: false }\n * - false => { passive: true } // Default\n *\n * NOTE: When preventScrollOnSwipe is true, we attempt to call preventDefault to prevent scroll.\n *\n * props.touchEventOptions can also be set for all touch event listeners,\n * but for `touchmove` specifically when `preventScrollOnSwipe` it will\n * supersede and force passive to false.\n *\n */\n const attachTouch = (el, props) => {\n let cleanup = () => { };\n if (el && el.addEventListener) {\n const baseOptions = Object.assign(Object.assign({}, defaultProps.touchEventOptions), props.touchEventOptions);\n // attach touch event listeners and handlers\n const tls = [\n [touchStart, onStart, baseOptions],\n // preventScrollOnSwipe option supersedes touchEventOptions.passive\n [\n touchMove,\n onMove,\n Object.assign(Object.assign({}, baseOptions), (props.preventScrollOnSwipe ? { passive: false } : {})),\n ],\n [touchEnd, onEnd, baseOptions],\n ];\n tls.forEach(([e, h, o]) => el.addEventListener(e, h, o));\n // return properly scoped cleanup method for removing listeners, options not required\n cleanup = () => tls.forEach(([e, h]) => el.removeEventListener(e, h));\n }\n return cleanup;\n };\n const onRef = (el) => {\n // \"inline\" ref functions are called twice on render, once with null then again with DOM element\n // ignore null here\n if (el === null)\n return;\n set((state, props) => {\n // if the same DOM el as previous just return state\n if (state.el === el)\n return state;\n const addState = {};\n // if new DOM el clean up old DOM and reset cleanUpTouch\n if (state.el && state.el !== el && state.cleanUpTouch) {\n state.cleanUpTouch();\n addState.cleanUpTouch = void 0;\n }\n // only attach if we want to track touch\n if (props.trackTouch && el) {\n addState.cleanUpTouch = attachTouch(el, props);\n }\n // store event attached DOM el for comparison, clean up, and re-attachment\n return Object.assign(Object.assign(Object.assign({}, state), { el }), addState);\n });\n };\n // set ref callback to attach touch event listeners\n const output = {\n ref: onRef,\n };\n // if track mouse attach mouse down listener\n if (handlerProps.trackMouse) {\n output.onMouseDown = onStart;\n }\n return [output, attachTouch];\n}\nfunction updateTransientState(state, props, previousProps, attachTouch) {\n // if trackTouch is off or there is no el, then remove handlers if necessary and exit\n if (!props.trackTouch || !state.el) {\n if (state.cleanUpTouch) {\n state.cleanUpTouch();\n }\n return Object.assign(Object.assign({}, state), { cleanUpTouch: undefined });\n }\n // trackTouch is on, so if there are no handlers attached, attach them and exit\n if (!state.cleanUpTouch) {\n return Object.assign(Object.assign({}, state), { cleanUpTouch: attachTouch(state.el, props) });\n }\n // trackTouch is on and handlers are already attached, so if preventScrollOnSwipe changes value,\n // remove and reattach handlers (this is required to update the passive option when attaching\n // the handlers)\n if (props.preventScrollOnSwipe !== previousProps.preventScrollOnSwipe ||\n props.touchEventOptions.passive !== previousProps.touchEventOptions.passive) {\n state.cleanUpTouch();\n return Object.assign(Object.assign({}, state), { cleanUpTouch: attachTouch(state.el, props) });\n }\n return state;\n}\nfunction useSwipeable(options) {\n const { trackMouse } = options;\n const transientState = React.useRef(Object.assign({}, initialState));\n const transientProps = React.useRef(Object.assign({}, defaultProps));\n // track previous rendered props\n const previousProps = React.useRef(Object.assign({}, transientProps.current));\n previousProps.current = Object.assign({}, transientProps.current);\n // update current render props & defaults\n transientProps.current = Object.assign(Object.assign({}, defaultProps), options);\n // Force defaults for config properties\n let defaultKey;\n for (defaultKey in defaultProps) {\n if (transientProps.current[defaultKey] === void 0) {\n transientProps.current[defaultKey] = defaultProps[defaultKey];\n }\n }\n const [handlers, attachTouch] = React.useMemo(() => getHandlers((stateSetter) => (transientState.current = stateSetter(transientState.current, transientProps.current)), { trackMouse }), [trackMouse]);\n transientState.current = updateTransientState(transientState.current, transientProps.current, previousProps.current, attachTouch);\n return handlers;\n}\n\nexport { DOWN, LEFT, RIGHT, UP, useSwipeable };\n//# sourceMappingURL=index.js.map\n"],"names":["_g","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","props","xmlns","viewBox","fill","stroke","strokeLinecap","d","preView10","inViewMargin","inView30","inView20","inView50","cubicEaseOut","inViewFade","params","css","delay","duration","inViewFadeUp","shouldAnimate","innerCss","transition","properties","timing","inViewChangeColour","initialColor","endColor","black","blue","base","grey","grey1","grey2","grey3","grey4","grey5","grey6","grey7","grey8","cta","otherGrey","borderGrey","sectors","oilGasGrey","marineBlue","defencePurple","energyGreen","nuclearOrange","transportRed","sectorsAlt","oilGasGreen","nuclearPurple","defenceGrey","renewableYellow","portsTerminalsOrange","constructionCream","validation","invalid","valid","white","yellow","cssVar","name","setCssVar","value","PIXELS_PER_REM","DEFAULT_MIN_VALUE","Device","DEFAULT_MAX_VALUE","fluid","min","max","minWidth","maxWidth","minRem","maxRem","minWidthRem","maxWidthRem","slope","yAxisIntersection","clampMin","round","clampVal","clampMax","num","Math","helvetica","light","lightItalic","regular","regularItalic","medium","mediumItalic","bold","boldItalic","SitePadding","SiteWidth","SiteWidthBreakpoint","siteWide","baseGrid","from","imageUrl","image","imageParams","src","imageSource","split","rxy","focalPoint","left","top","undefined","quality","width","queryString","srcSet","map","pd","height","join","imageWrapperPreserveRatio","imageWrapperRatioPadding","toFixed","imageCoverContainer","relative","size","until","headingStyles","fonts","h1","h2","h3","h4","h5","h6","h6Bold","subhead","headingUnderline","brand","paragraphStyles","paragraphHero","paragraph","paragraphSmall","micro","contentSub","link","tag","blockquote","tagBold","table","mix","contentStyles","withMotionMax","WrappedComponent","displayName","ComponentWithMotionMax","React","LazyMotion","features","domMax","strict","useAutoplay","refInterval","activeIndex","setActiveIndex","paused","setPaused","activeItemDuration","items","enabled","current","window","setTimeout","newIndex","clearInterval","callback","options","observerRef","useRef","rootRef","elementRef","useEffect","IntersectionObserver","root","observe","disconnect","useInView","reverse","isEditMode","inView","setInView","useState","useIntersectionObserver","entries","isIntersecting","Container","styled","Text","srOnly","IconWrapper","Item","ActiveIndicator","m","SvgIndicator","Circle","autoplay","count","customLayoutId","onChange","S","Array","_","index","onClick","event","preventDefault","isActiveAnimating","cx","cy","r","initial","pathLength","animate","ease","style","rotate","layoutId","renderActiveIndicator","buttonType","children","fillDirection","icon","iconOnly","iconPosition","otherProps","as","SvgArrow","Inner","SectionWrapper","ref","layout","Img","SimpleImage","alt","loading","role","Link","ImageWrapper","Image","ContentWrapper","Tag","Title","headingLevel","tabIndex","title","url","href","MediaWrapper","Video","Content","CtaWrapper","ArticleList","ArticleSummaryStyles","active","articles","content","shouldPlay","tint","video","loopVideo","reduceMotion","useReducedMotion","refVideo","currentTime","play","pause","variants","inactive","when","transitionEnd","display","opacity","zIndex","media","altText","draggable","scale","muted","playsInline","loop","preload","poster","rmode","type","delayChildren","staggerChildren","x","LinkButton","text","article","ArticleSummary","id","ItemList","PaginationWrapper","DotPaginationStyles","refContainer","swipeHandlers","useSwipeable","onSwipedLeft","onSwipedRight","item","BannerItem","DotPagination","defaultProps","delta","preventScrollOnSwipe","rotationAngle","trackMouse","trackTouch","swipeDuration","Infinity","touchEventOptions","passive","initialState","first","start","swiping","xy","mouseMove","mouseUp","rotateXYByAngle","pos","angle","angleInRadians","PI","cos","sin","transientState","transientProps","previousProps","defaultKey","handlers","attachTouch","set","handlerProps","onStart","isTouch","touches","state","document","addEventListener","onMove","onUp","clientX","clientY","onTouchStartOrOnMouseDown","slice","timeStamp","y","deltaX","deltaY","absX","abs","absY","time","velocity","sqrt","vxvy","dir","getDirection","toLowerCase","eventData","onSwipeStart","onSwiping","cancelablePageSwipe","onSwiped","cancelable","onEnd","onSwipedDir","onTap","onTouchEndOrOnMouseUp","e","removeEventListener","el","cleanup","baseOptions","tls","forEach","h","o","output","addState","cleanUpTouch","onMouseDown","getHandlers","stateSetter","updateTransientState"],"sourceRoot":""}