{"version":3,"file":"58-5a09104130d1fca4db77.js","mappings":"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","sources":["webpack://tipton/./src/helpers/utils.ts","webpack://tipton/./src/hoc/withMotionMax.tsx","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/CarouselProvider/CarouselProvider.tsx","webpack://tipton/./src/hooks/useCarousel.ts","webpack://tipton/./src/hooks/useResize.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Dots/Dots.styles.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Dots/Dots.tsx","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/MotionTrack/MotionTrack.styles.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/MotionTrack/MotionTrack.tsx","webpack://tipton/./src/helpers/ssr.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Pagination/Pagination.styles.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Controls/Controls.styles.ts","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Controls/Controls.tsx","webpack://tipton/./src/stories/Components/Misc/Carousels/Carousel/Pagination/Pagination.tsx"],"sourcesContent":["export function sleep(ms) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n// Make sure links and buttons are not focusable when they are within an inactive container.\r\nexport function tabIndexHTML(html, active) {\r\n return html\r\n .replaceAll(' {\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 { useCarousel } from '@hooks/useCarousel';\r\nimport noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nconst CarouselContext = React.createContext({\r\n activeIndex: 0,\r\n goToIndex: noop,\r\n goToNext: noop,\r\n goToPrev: noop,\r\n reinitialise: noop,\r\n maxIndex: 0,\r\n offset: 0,\r\n offsets: [],\r\n recalculate: noop,\r\n refContainer: null,\r\n refTrack: null,\r\n count: 0,\r\n paddingOffset: 0,\r\n});\r\nexport const useCarouselContext = () => React.useContext(CarouselContext);\r\nconst CarouselProvider = ({ children, ...otherProps }) => {\r\n const carousel = useCarousel(otherProps);\r\n React.useEffect(() => {\r\n if (carousel.paddingOffset !== otherProps.paddingOffset) {\r\n carousel.reinitialise(carousel.count, otherProps.paddingOffset);\r\n }\r\n }, [otherProps.paddingOffset]);\r\n return React.createElement(CarouselContext.Provider, { value: carousel }, children);\r\n};\r\nexport default CarouselProvider;\r\n","import { clamp as doClamp } from '@helpers/utils';\r\nimport * as React from 'react';\r\nimport { useResize } from './useResize';\r\nexport function useCarousel(params) {\r\n const refContainer = React.useRef(null);\r\n const refTrack = React.useRef(null);\r\n const [carouselState, dispatch] = React.useReducer(carouselReducer, {\r\n activeIndex: 0,\r\n maxIndex: 0,\r\n offsets: [],\r\n count: 0,\r\n paddingOffset: 0,\r\n });\r\n useResize({\r\n callback: initCarousel,\r\n debounce: 100,\r\n immediate: true,\r\n on: 'x',\r\n });\r\n React.useEffect(() => {\r\n initCarousel();\r\n }, [carouselState.count, carouselState.paddingOffset]);\r\n return {\r\n ...carouselState,\r\n goToIndex,\r\n goToNext,\r\n goToPrev,\r\n reinitialise,\r\n recalculate: initCarousel,\r\n offset: carouselState.offsets[carouselState.activeIndex],\r\n refContainer,\r\n refTrack,\r\n count: carouselState.count,\r\n paddingOffset: carouselState.paddingOffset,\r\n };\r\n /**\r\n * Calculate the px offset for the track for the target item index.\r\n * @param index\r\n * @returns\r\n */\r\n function calculateOffset(index) {\r\n if (!refTrack.current) {\r\n return 0;\r\n }\r\n const items = Array.from(refTrack.current.children);\r\n const itemsUntilIndex = items.slice(0, index);\r\n const sum = itemsUntilIndex\r\n .map((el) => el.getBoundingClientRect().width)\r\n .reduce((p, c) => p + c, 0);\r\n return sum;\r\n }\r\n /**\r\n * Initialise the reducer state.\r\n */\r\n function initCarousel() {\r\n const offsets = [];\r\n // Pre-calculate the px offset for each item in the carousel.\r\n Array.from(Array(params.count)).forEach((_, index) => {\r\n offsets.push(calculateOffset(index));\r\n });\r\n // Determine what the max index value needs to be in order for the last item to be within view.\r\n const containerWidth = (refContainer.current?.getBoundingClientRect().width ?? 0) - (params.paddingOffset ?? 0);\r\n const trackWidth = offsets[offsets.length - 1] + (params.paddingOffset ?? 0);\r\n let maxIndex = 0;\r\n for (let index = 0; index < offsets.length; index++) {\r\n const offset = offsets[index];\r\n const remainder = trackWidth - offset;\r\n /**\r\n * If the remainder is less than the container width, then the last item is within view.\r\n * Floor the values to avoid any partial pixels causing issues\r\n */\r\n if (Math.ceil(remainder) < Math.floor(containerWidth)) {\r\n maxIndex = index;\r\n break;\r\n }\r\n }\r\n // Remove peeking amount from end of carousel\r\n offsets[maxIndex] = offsets[maxIndex] - (params.paddingOffset ?? 0);\r\n // Initialise the carousel state.\r\n dispatch({\r\n type: 'init',\r\n payload: { offsets, maxIndex, count: params.count, paddingOffset: params.paddingOffset },\r\n });\r\n }\r\n /**\r\n * Go to the next item.\r\n */\r\n function goToNext(wrap) {\r\n dispatch({ type: 'next', payload: { wrap: wrap ?? false } });\r\n }\r\n /**\r\n * Go to the previous item.\r\n */\r\n function goToPrev(wrap) {\r\n dispatch({ type: 'prev', payload: { wrap: wrap ?? false } });\r\n }\r\n /**\r\n * Go to the target index.\r\n */\r\n function goToIndex(index) {\r\n dispatch({ type: 'goto', payload: index });\r\n }\r\n /**\r\n * Go to the target index.\r\n */\r\n function reinitialise(count, paddingOffset) {\r\n dispatch({ type: 'reinitialise', payload: { count, paddingOffset } });\r\n }\r\n function carouselReducer(state, action) {\r\n switch (action.type) {\r\n case 'init':\r\n return {\r\n activeIndex: 0,\r\n maxIndex: action.payload.maxIndex,\r\n offsets: action.payload.offsets,\r\n count: action.payload.count,\r\n paddingOffset: action.payload.paddingOffset,\r\n };\r\n case 'reinitialise':\r\n return {\r\n ...state,\r\n count: action.payload.count,\r\n paddingOffset: action.payload.paddingOffset,\r\n };\r\n case 'goto':\r\n return { ...state, activeIndex: clamp(action.payload) };\r\n case 'next':\r\n if (action.payload.wrap && state.activeIndex === state.maxIndex) {\r\n return { ...state, activeIndex: 0 };\r\n }\r\n return { ...state, activeIndex: clamp(state.activeIndex + 1) };\r\n case 'prev':\r\n if (action.payload.wrap && state.activeIndex === 0) {\r\n return { ...state, activeIndex: state.maxIndex };\r\n }\r\n return { ...state, activeIndex: clamp(state.activeIndex - 1) };\r\n }\r\n /** Clamp index to be within the min/max index range. */\r\n function clamp(value) {\r\n return doClamp(value, state.maxIndex);\r\n }\r\n }\r\n}\r\n","import debounce from 'lodash/debounce';\r\nimport * as React from 'react';\r\nexport function useResize(params) {\r\n const refWindowHeight = React.useRef();\r\n const refWindowWidth = React.useRef();\r\n const onResize = React.useCallback(debounce(() => {\r\n const prevHeight = refWindowHeight.current;\r\n const prevWidth = refWindowWidth.current;\r\n const newHeight = window.innerHeight;\r\n const newWidth = window.innerWidth;\r\n const shouldTrigger = params.on === 'both' ||\r\n (params.on === 'y' && prevHeight !== newHeight) ||\r\n (params.on === 'x' && prevWidth !== newWidth);\r\n if (shouldTrigger) {\r\n params.callback();\r\n }\r\n refWindowHeight.current = newHeight;\r\n refWindowWidth.current = newWidth;\r\n }, params.debounce), [params.debounce, params.on]);\r\n React.useEffect(() => {\r\n if (!params.callback) {\r\n return;\r\n }\r\n if (params.immediate) {\r\n onResize();\r\n }\r\n window.addEventListener('resize', onResize);\r\n return () => {\r\n window.removeEventListener('resize', onResize);\r\n };\r\n }, [params.on]);\r\n}\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { Device, from } from '@helpers/media';\r\nimport { Background, ContentType } from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nimport styled from 'styled-components';\r\nconst Dots = styled.div `\r\n --borderRadius: 8px;\r\n\r\n &[data-variant=${ContentType.Savings}] {\r\n --activeColour: ${brand.blue.default};\r\n --inactiveColour: ${brand.blue.light};\r\n\r\n [data-background=${Background.Blue}] & {\r\n --inactiveColour: ${brand.global.white};\r\n }\r\n }\r\n\r\n &[data-variant=${ContentType.Default}] {\r\n --activeColour: ${brand.green.default};\r\n --inactiveColour: ${brand.green.light};\r\n\r\n [data-background=${Background.Green}] & {\r\n --inactiveColour: ${brand.global.white};\r\n }\r\n }\r\n\r\n &[data-variant=${ContentType.Intermediaries}] {\r\n --activeColour: ${brand.blue.navy};\r\n --inactiveColour: ${brand.global.beige};\r\n\r\n [data-background=${Background.Green}] & {\r\n --inactiveColour: ${brand.global.white};\r\n }\r\n }\r\n\r\n [data-background=${Background.Beige}] & {\r\n --inactiveColour: ${brand.global.white};\r\n }\r\n\r\n display: flex;\r\n align-items: stretch;\r\n border-radius: var(--borderRadius);\r\n background-color: var(--inactiveColour);\r\n height: 4px;\r\n width: 100%;\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n min-width: 128px;\r\n }\r\n`;\r\nconst Dot = styled.span `\r\n ${transition('max-width')};\r\n\r\n display: block;\r\n max-width: var(--progress, 0px);\r\n width: 100%;\r\n height: 100%;\r\n border-radius: var(--borderRadius);\r\n background-color: var(--activeColour);\r\n\r\n &[data-active='true'] {\r\n max-width: var(--dotActiveWidth);\r\n }\r\n`;\r\nexport const DotsStyles = {\r\n Dot,\r\n Dots,\r\n};\r\n","import React from 'react';\r\nimport { DotsStyles as S } from './Dots.styles';\r\nimport { ContentType } from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nconst Dots = ({ activeIndex, itemCount, variant }) => {\r\n return (React.createElement(S.Dots, { \"data-variant\": variant ?? ContentType.Default },\r\n React.createElement(S.Dot, { style: { '--progress': `${((activeIndex + 1) / itemCount) * 100}%` } })));\r\n};\r\nexport default Dots;\r\n","import { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst Container = styled.div ``;\r\nconst Track = styled(m.ul) `\r\n display: flex;\r\n`;\r\nconst MotionTrackStyles = {\r\n Container,\r\n Track,\r\n};\r\nexport default MotionTrackStyles;\r\n","import { isSSR } from '@helpers/ssr';\r\nimport { useAnimation } from 'framer-motion';\r\nimport * as React from 'react';\r\nimport { useCarouselContext } from '../CarouselProvider/CarouselProvider';\r\nimport S from './MotionTrack.styles';\r\nconst MotionTrack = ({ children, enableCarousel = true, trackMutations = false, ...otherProps }) => {\r\n const animation = useAnimation();\r\n const carousel = useCarouselContext();\r\n const dragging = React.useRef(false);\r\n const xTransform = React.useRef(0);\r\n const maxOffset = carousel.offsets[carousel.maxIndex];\r\n const observer = !isSSR()\r\n ? new MutationObserver(() => {\r\n carousel.reinitialise(carousel.refTrack?.current?.childElementCount ?? 0, carousel.paddingOffset);\r\n })\r\n : null;\r\n React.useEffect(() => {\r\n if (!trackMutations || !observer || !carousel.refTrack?.current)\r\n return;\r\n observer.observe(carousel.refTrack?.current, { childList: true, subtree: true });\r\n return () => {\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n };\r\n }, [observer, trackMutations]);\r\n // Stop the drag momentum animation, and start a new animation to the correct offset.\r\n React.useEffect(() => {\r\n if (typeof carousel.offset !== 'undefined') {\r\n animation.stop();\r\n animation.start({ x: -carousel.offset });\r\n }\r\n }, [carousel.activeIndex]);\r\n return (React.createElement(S.Container, { ...otherProps, ref: carousel.refContainer },\r\n React.createElement(S.Track, { ref: carousel.refTrack, animate: animation, drag: enableCarousel ? 'x' : false, dragConstraints: { left: -maxOffset, right: 0 }, onClickCapture: (event) => {\r\n // Ignore click events after dragging, this prevents links being clicked when drag ends.\r\n if (dragging.current) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n dragging.current = false;\r\n }\r\n }, onDragStart: () => {\r\n dragging.current = true;\r\n }, onDragEnd: (_, info) => {\r\n // Get the absolute x value, avoiding overflow when dragging left.\r\n const absX = Math.abs(Math.min(xTransform.current, 0));\r\n // Determine the next target index.\r\n let targetIndex = carousel.offsets.findIndex((offset) => offset > absX) ?? 0;\r\n // If it is -1 then we scrolled past the max offset value.\r\n if (targetIndex === -1) {\r\n targetIndex = carousel.maxIndex;\r\n }\r\n // Ensure we take into account the drag direction.\r\n if (info.offset.x > 0) {\r\n targetIndex = Math.max(0, targetIndex - 1);\r\n }\r\n // Update the carousel state.\r\n carousel.goToIndex(targetIndex);\r\n // Update to false, so that it doesn't take multiple clicks on a carouselCard to register.\r\n setTimeout(function () {\r\n dragging.current = false;\r\n }, 10);\r\n }, onUpdate: (latest) => {\r\n // Store the current x position as the carousel is dragged.\r\n xTransform.current = typeof latest.x === 'number' ? latest.x : parseFloat(latest.x);\r\n } }, children)));\r\n};\r\nexport default MotionTrack;\r\n","export const isSSR = () => {\r\n const returnValue = !(typeof window != 'undefined' && window.document);\r\n return returnValue;\r\n};\r\n","import { fluid } from '@helpers/fluid';\r\nimport styled from 'styled-components';\r\nimport { DotsStyles } from '../Dots/Dots.styles';\r\nconst Container = styled.div `\r\n display: flex;\r\n align-items: center;\r\n gap: ${fluid(10, 40)};\r\n\r\n ${DotsStyles.Dots} {\r\n flex: 1;\r\n }\r\n`;\r\nconst PaginationStyles = {\r\n Container,\r\n};\r\nexport default PaginationStyles;\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Background, ContentType } from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nimport { rgba } from 'polished';\r\nimport styled from 'styled-components';\r\nconst Container = styled.nav `\r\n --buttonFgColour: ${brand.global.white};\r\n\r\n &[data-variant=${ContentType.Savings}] {\r\n --buttonBgColour: ${brand.blue.default};\r\n --buttonBgColourDisabled: ${brand.blue.light};\r\n --buttonFgColourDisabled: ${brand.blue.default};\r\n\r\n [data-background=${Background.Blue}] & {\r\n --buttonBgColourDisabled: ${rgba(brand.blue.default, 0.15)};\r\n }\r\n }\r\n\r\n &[data-variant=${ContentType.Default}] {\r\n --buttonBgColour: ${brand.green.default};\r\n --buttonBgColourDisabled: ${brand.green.light};\r\n --buttonFgColourDisabled: ${brand.green.default};\r\n\r\n [data-background=${Background.Beige}] &,\r\n [data-background=${Background.Green}] & {\r\n --buttonBgColourDisabled: ${rgba(brand.green.default, 0.15)};\r\n }\r\n }\r\n\r\n &[data-variant=${ContentType.Intermediaries}] {\r\n --buttonFgColour: ${brand.blue.navy};\r\n --buttonBgColour: ${brand.green.light};\r\n --buttonBgColourDisabled: ${brand.global.white};\r\n --buttonFgColourDisabled: ${rgba(brand.blue.navy, 0.66)};\r\n\r\n [data-background=${Background.Beige}] &,\r\n [data-background=${Background.Green}] & {\r\n --buttonFgColour: ${brand.green.light};\r\n --buttonBgColour: ${brand.blue.navy};\r\n }\r\n }\r\n\r\n display: flex;\r\n align-items: center;\r\n column-gap: 8px;\r\n`;\r\nconst Button = styled.button `\r\n ${ButtonReset};\r\n ${transition('opacity, color, background-color')};\r\n\r\n z-index: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 48px;\r\n height: 48px;\r\n background-color: var(--buttonBgColour);\r\n border-radius: 100%;\r\n color: var(--buttonFgColour);\r\n\r\n &.focus-ring {\r\n outline: auto;\r\n outline-offset: 3px;\r\n outline-width: 2px;\r\n outline-color: var(--buttonBgColour);\r\n }\r\n\r\n &.focus-ring,\r\n &:hover,\r\n &:active {\r\n opacity: 0.65;\r\n }\r\n\r\n &:disabled {\r\n background-color: var(--buttonBgColourDisabled);\r\n color: var(--buttonFgColourDisabled);\r\n opacity: 1;\r\n cursor: not-allowed;\r\n }\r\n\r\n svg {\r\n display: block;\r\n width: 24px;\r\n }\r\n\r\n &[data-prev] svg {\r\n transform: scale(-1);\r\n }\r\n`;\r\nconst ControlsStyles = {\r\n Container,\r\n Button,\r\n};\r\nexport default ControlsStyles;\r\n","import { getSystemIcon, SystemIcon } from '@helpers/icons';\r\nimport * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport { useCarouselContext } from '../CarouselProvider/CarouselProvider';\r\nimport S from './Controls.styles';\r\nimport { ContentType } from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nconst Controls = React.forwardRef((props, ref) => {\r\n const carousel = useCarouselContext();\r\n return (React.createElement(S.Container, { ref: ref, className: props.className, \"aria-label\": props.translations?.['global.carousel.controls'] ?? '', \"data-variant\": props.variant ?? ContentType.Default },\r\n React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.Button, { \"aria-label\": props.translations?.['global.carousel.previous'] ?? '', disabled: !props.wrap && carousel.activeIndex === 0, onClick: (event) => {\r\n event.preventDefault();\r\n carousel.goToPrev(props.wrap);\r\n }, \"data-prev\": true }, getSystemIcon(SystemIcon.ArrowRight))),\r\n React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.Button, { \"aria-label\": props.translations?.['global.carousel.next'] ?? '', disabled: !props.wrap && carousel.activeIndex === carousel.maxIndex, onClick: (event) => {\r\n event.preventDefault();\r\n carousel.goToNext(props.wrap);\r\n }, \"data-next\": true }, getSystemIcon(SystemIcon.ArrowRight)))));\r\n});\r\nControls.displayName = 'Controls';\r\nexport default Controls;\r\n","import Controls from '@stories/Components/Misc/Carousels/Carousel/Controls/Controls';\r\nimport Dots from '@stories/Components/Misc/Carousels/Carousel/Dots/Dots';\r\nimport * as React from 'react';\r\nimport { useCarouselContext } from '../CarouselProvider/CarouselProvider';\r\nimport S from './Pagination.styles';\r\nconst Pagination = React.forwardRef((props, ref) => {\r\n const carousel = useCarouselContext();\r\n if (carousel.maxIndex === 0) {\r\n return null;\r\n }\r\n return (React.createElement(S.Container, { ref: ref },\r\n React.createElement(Dots, { itemCount: carousel.maxIndex + 1, activeIndex: carousel.activeIndex, variant: props.variant }),\r\n React.createElement(Controls, { ...props })));\r\n});\r\nPagination.displayName = 'CarouselPagination';\r\nexport default Pagination;\r\n"],"names":["sleep","ms","Promise","resolve","setTimeout","tabIndexHTML","html","active","replaceAll","clamp","value","max","min","Math","withMotionMax","WrappedComponent","displayName","name","ComponentWithMotionMax","props","React","LazyMotion","features","domMax","strict","CarouselContext","activeIndex","goToIndex","noop","goToNext","goToPrev","reinitialise","maxIndex","offset","offsets","recalculate","refContainer","refTrack","count","paddingOffset","useCarouselContext","_ref","children","otherProps","carousel","params","carouselState","dispatch","state","action","type","payload","wrap","doClamp","refWindowHeight","refWindowWidth","onResize","debounce","prevHeight","current","prevWidth","newHeight","window","innerHeight","newWidth","innerWidth","on","callback","immediate","addEventListener","removeEventListener","useResize","initCarousel","index","_refContainer$current","_refContainer$current2","_params$paddingOffset","_params$paddingOffset2","_params$paddingOffset3","Array","from","forEach","_","push","slice","map","el","getBoundingClientRect","width","reduce","p","c","calculateOffset","containerWidth","trackWidth","length","remainder","ceil","floor","useCarousel","Provider","Dots","styled","div","withConfig","componentId","ContentType","Savings","brand","blue","default","light","Background","Blue","global","white","Default","green","Green","Intermediaries","navy","beige","Beige","Device","DesktopSmall","DotsStyles","Dot","span","transition","itemCount","variant","S","style","Container","Track","m","ul","enableCarousel","trackMutations","animation","useAnimation","dragging","xTransform","maxOffset","observer","document","MutationObserver","_carousel$refTrack$cu","_carousel$refTrack","_carousel$refTrack$cu2","childElementCount","_carousel$refTrack2","_carousel$refTrack3","observe","childList","subtree","disconnect","stop","start","x","ref","animate","drag","dragConstraints","left","right","onClickCapture","event","preventDefault","stopPropagation","onDragStart","onDragEnd","info","_carousel$offsets$fin","absX","abs","targetIndex","findIndex","onUpdate","latest","parseFloat","fluid","nav","rgba","Button","button","ButtonReset","Controls","_props$translations$g","_props$translations","_props$variant","_props$translations$g2","_props$translations2","_props$translations$g3","_props$translations3","className","translations","FocusRing","focusRingClass","disabled","onClick","getSystemIcon","SystemIcon","ArrowRight","Pagination"],"sourceRoot":""}