{"version":3,"file":"4023-75ba566dfbbb305808c0.js","mappings":"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","sources":["webpack://tipton/./src/helpers/api.ts","webpack://tipton/./src/hooks/useApi.ts","webpack://tipton/./src/hooks/useForm.ts","webpack://tipton/./src/hooks/useOutsideClick.ts","webpack://tipton/./src/stories/Components/CardGrid/CardGrid.styles.ts","webpack://tipton/./src/stories/Components/CardGrid/CardGrid.tsx","webpack://tipton/./src/stories/Components/Misc/Forms/Inputs/Textbox/Textbox.styles.ts","webpack://tipton/./src/stories/Components/Misc/Forms/Inputs/Textbox/Textbox.tsx","webpack://tipton/./src/stories/Components/Misc/Forms/Searchbox/Searchbox.styles.ts","webpack://tipton/./src/stories/Components/Misc/Forms/Searchbox/Searchbox.tsx","webpack://tipton/./src/stories/Components/Cards/GlossaryCard/GlossaryCard.styles.ts","webpack://tipton/./src/stories/Components/Cards/GlossaryCard/GlossaryCard.tsx","webpack://tipton/./src/stories/Widgets/MortgageGlossary/MortgageGlossary.styles.ts","webpack://tipton/./src/stories/Widgets/MortgageGlossary/MortgageGlossary.tsx","webpack://tipton/./node_modules/react-use/esm/useFirstMountState.js","webpack://tipton/./node_modules/react-use/esm/misc/util.js","webpack://tipton/./node_modules/react-use/esm/useMedia.js"],"sourcesContent":["// ADD API URLS BELOW\r\nexport const API_URLS = {\r\n searchSubmit: '/search-results',\r\n searchTypeahead: '/umbraco/api/searchapi/gettypeahead',\r\n // Listings\r\n mortgagesListing: '/umbraco/api/mortgagesapi/getmortgages',\r\n newsListing: '/api/newsapi/getnews',\r\n savingsListing: '/umbraco/api/savingsapi/getsavings',\r\n searchResults: '/umbraco/api/searchapi/search',\r\n vacancyListing: '/api/vacancyapi/getvacancies',\r\n // Forms\r\n affordabilityCalculator: '/api/calculatorsapi/affordability-calculator',\r\n buyToLetRentalIncomeCalculator: '/api/calculatorsapi/buytolet-rental-income-calculator',\r\n decisionInPrinciple: '/api/multistepforms/submit',\r\n savingsInterestCalculator: '/api/calculatorsapi/savings-interest-calculator',\r\n};\r\n","import { sleep } from '@helpers/utils';\r\nimport * as React from 'react';\r\nimport { useFirstMountState } from 'react-use';\r\nexport function useApi(params) {\r\n const refAbortController = React.useRef();\r\n const isFirstMount = useFirstMountState();\r\n const [data, setData] = React.useState(params.initialData);\r\n const [status, setStatus] = React.useState('initial');\r\n const minTime = 500;\r\n const clear = () => {\r\n setData(undefined);\r\n };\r\n React.useEffect(() => {\r\n // Ignore first mount if initial data is supplied.\r\n if (isFirstMount && params.initialData) {\r\n return;\r\n }\r\n // Ignore if validate is supplied and returns false.\r\n if (params.validate && !params.validate()) {\r\n return;\r\n }\r\n // Setup abortable fetch.\r\n refAbortController.current = new AbortController();\r\n const signal = refAbortController.current.signal;\r\n // Trigger fetch with abort signal.\r\n doAsync(signal);\r\n return () => {\r\n // Abort pending request if re-fetching.\r\n refAbortController.current?.abort();\r\n };\r\n async function doAsync(signal) {\r\n setStatus('loading');\r\n const start = Date.now();\r\n const res = await fetch(params.url, {\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n headers: {\r\n Accept: 'application/json',\r\n },\r\n method: 'get',\r\n signal,\r\n });\r\n const resData = await res.json();\r\n const end = Date.now();\r\n const diff = end - start;\r\n /** Ensure at least 500ms is taken to return results to prevent loader flash */\r\n if (diff < minTime) {\r\n await sleep(minTime - diff);\r\n }\r\n setData(resData);\r\n setStatus('complete');\r\n }\r\n }, [params.url]);\r\n return { clear, data, status };\r\n}\r\n","import qs from 'query-string';\r\nimport * as React from 'react';\r\nimport { useForm as useReactHookForm, } from 'react-hook-form';\r\nexport const validateNotWhitespaceOnly = (value, error) => typeof value === 'string' ? value.trim().length > 0 || error : true;\r\nexport function useForm(params) {\r\n const refContainer = React.useRef(null);\r\n const refCustomData = React.useRef(null);\r\n const useReactHookFormReturn = useReactHookForm({\r\n defaultValues: params.defaultValues,\r\n mode: 'onSubmit',\r\n reValidateMode: 'onChange',\r\n shouldUseNativeValidation: false,\r\n });\r\n const { handleSubmit } = useReactHookFormReturn;\r\n const [status, setStatus] = React.useState('initial');\r\n const [confirmationMessage, setConfirmationMessage] = React.useState('');\r\n const [serverErrors, setServerErrors] = React.useState([]);\r\n const [customResponseData, setCustomResponseData] = React.useState();\r\n const reset = () => {\r\n setStatus('initial');\r\n setServerErrors([]);\r\n setCustomResponseData(undefined);\r\n setConfirmationMessage('');\r\n };\r\n const onSubmit = async (formData, event) => {\r\n let res;\r\n if (params.mode === 'querystring') {\r\n window.location.href = `${params.endpoint}${params.endpoint.includes('?') ? '&' : '?'}${qs.stringify({\r\n ...formData,\r\n })}`;\r\n return;\r\n }\r\n else if (params.mode === 'multipart') {\r\n const formData = new FormData(event?.target);\r\n // We have to create the FormData instance before changing status\r\n // as disabled fields/fieldsets are not included otherwise.\r\n setStatus('pending');\r\n res = await fetch(params.endpoint, {\r\n body: formData,\r\n method: 'POST',\r\n });\r\n }\r\n else {\r\n setStatus('pending');\r\n res = await fetch(params.endpoint, {\r\n body: JSON.stringify(formData),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n }\r\n // If we're showing an error message then change to error.\r\n if (!res.ok) {\r\n setStatus('error');\r\n setServerErrors([`Something went wrong.`]);\r\n refContainer.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n return;\r\n }\r\n const { errors, message, redirect, ...resData } = (await res.json());\r\n // If we're showing an error message then change to error.\r\n if (errors?.length) {\r\n setStatus('error');\r\n setServerErrors(errors);\r\n setTimeout(() => {\r\n refContainer.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n }, 100);\r\n return;\r\n }\r\n // At this stage we consider the submission successful so we\r\n // can trigger the optional callback.\r\n if (params.postSubmitCallback) {\r\n await params.postSubmitCallback();\r\n }\r\n // If returning custom data then set it.\r\n if (Object.keys(resData).length > 0) {\r\n setStatus('fulfilled');\r\n setCustomResponseData(resData);\r\n setTimeout(() => {\r\n refCustomData.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n }, 100);\r\n return;\r\n }\r\n // If we're showing a message then change to fulfilled.\r\n if (message) {\r\n setStatus('fulfilled');\r\n setConfirmationMessage(message);\r\n setTimeout(() => {\r\n refContainer.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n }, 100);\r\n return;\r\n }\r\n // If we're redirecting leave status pending.\r\n if (redirect) {\r\n window.location.href = redirect;\r\n return;\r\n }\r\n };\r\n return {\r\n confirmationMessage,\r\n refContainer,\r\n refCustomData,\r\n serverErrors,\r\n status,\r\n onSubmit: handleSubmit(onSubmit),\r\n reset,\r\n customResponseData,\r\n useReactHookFormReturn,\r\n };\r\n}\r\n","import * as React from 'react';\r\nexport const useOutsideClick = (callback) => {\r\n const ref = React.useRef(null);\r\n React.useEffect(() => {\r\n const handleClick = (event) => {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n callback();\r\n }\r\n };\r\n document.addEventListener('click', handleClick, true);\r\n document.addEventListener('focus', handleClick, true);\r\n return () => {\r\n document.removeEventListener('click', handleClick, true);\r\n document.removeEventListener('focus', handleClick, true);\r\n };\r\n }, [ref]);\r\n return ref;\r\n};\r\n","import { Device, from, until } from '@helpers/media';\r\nimport styled, { css } from 'styled-components';\r\nimport MotionTrack from '../Misc/Carousels/Carousel/MotionTrack/MotionTrack';\r\nimport MotionTrackStyles from '../Misc/Carousels/Carousel/MotionTrack/MotionTrack.styles';\r\nimport PaginationStyles from '../Misc/Carousels/Carousel/Pagination/Pagination.styles';\r\nexport const cardWidth = css `\r\n flex: var(--grow) 0\r\n calc(\r\n 100% / var(--rowItems) - (var(--gap) * ((var(--rowItems) - 1) / var(--rowItems))) -\r\n (var(--itemPeek, 0px) / var(--rowItems))\r\n );\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n max-width: var(--maxWidth);\r\n }\r\n`;\r\nconst Track = styled(MotionTrack) `\r\n margin: 0 calc(var(--gap) * -0.5);\r\n width: calc(100% + var(--gap));\r\n\r\n // Unset container when carousel is disabled\r\n @media ${from(Device.TabletLarge)} {\r\n display: contents;\r\n\r\n ${MotionTrackStyles.Track} {\r\n display: contents;\r\n }\r\n }\r\n`;\r\nconst Item = styled.li `\r\n display: flex;\r\n padding: 0 calc(var(--gap) * 0.5);\r\n flex: 0 0 calc(100% / var(--rowItems) - (var(--itemPeek, 0px) / var(--rowItems)));\r\n\r\n // Remove flex styling from the card whilst the mobile carousel is enabled\r\n @media ${until(Device.TabletLarge)} {\r\n > div,\r\n > a,\r\n > article {\r\n flex: 0 0 100% !important;\r\n }\r\n }\r\n\r\n // Unset container when carousel is disabled\r\n @media ${from(Device.TabletLarge)} {\r\n display: contents;\r\n }\r\n`;\r\nconst Container = styled.section `\r\n --alignment: center; // Flexbox alignment (eg. flex-start, center, flex-end)\r\n --grow: 1; // Flex grow - 0 for equal width, 1 for auto width\r\n --rowItems: 1; // Number of items per row\r\n --maxWidth: 50%; // Max width a card can be\r\n --gap: var(--gutterWidth); // Defaults to global grid gap\r\n\r\n --controlsMargin: 24px; // Margin above the carousel controls\r\n --itemPeek: 0px; // Carousel peek, use if carousel is enabled\r\n\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: var(--alignment);\r\n gap: var(--gap);\r\n flex-flow: row wrap;\r\n\r\n ${PaginationStyles.Container} {\r\n margin: calc(var(--controlsMargin) - var(--gap)) 0 0;\r\n flex: 0 0 100%;\r\n }\r\n\r\n /**\r\n * Force --grow to be 0 if there are more than the configured cards per frow, to keep next row cards equal size.\r\n */\r\n &[data-row-max='1']:has(> :nth-child(1)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n &[data-row-max='2']:has(> :nth-child(2)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n &[data-row-max='3']:has(> :nth-child(3)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n &[data-row-max='4']:has(> :nth-child(4)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n &[data-row-max='5']:has(> :nth-child(5)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n &[data-row-max='6']:has(> :nth-child(6)) {\r\n --grow: 0 !important;\r\n }\r\n\r\n // Remove peek and hide carousel controls\r\n @media ${from(Device.TabletLarge)} {\r\n --itemPeek: 0px !important;\r\n\r\n ${PaginationStyles.Container} {\r\n display: none;\r\n }\r\n\r\n &:has(${Track}) {\r\n // Repeat the removal of grow for grids with a mobile carousel\r\n &[data-row-max='1'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(1)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n\r\n &[data-row-max='2'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(2)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n\r\n &[data-row-max='3'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(3)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n\r\n &[data-row-max='4'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(4)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n\r\n &[data-row-max='5'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(5)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n\r\n &[data-row-max='6'] {\r\n ${MotionTrackStyles.Track}:has(> :nth-child(6)) {\r\n --grow: 0 !important;\r\n }\r\n }\r\n }\r\n }\r\n`;\r\nconst CardGridStyles = {\r\n Container,\r\n Track,\r\n Item,\r\n};\r\nexport default CardGridStyles;\r\n","import { withMotionMax } from '@hoc/withMotionMax';\r\nimport { MotionConfig } from 'framer-motion';\r\nimport * as React from 'react';\r\nimport CarouselProvider from '../Misc/Carousels/Carousel/CarouselProvider/CarouselProvider';\r\nimport Pagination from '../Misc/Carousels/Carousel/Pagination/Pagination';\r\nimport S from './CardGrid.styles';\r\nconst CardGrid = ({ children, mobileCarousel, rowMax, paddingOffset, translations, carouselType, ...props }) => {\r\n return (React.createElement(S.Container, { \"data-carousel\": mobileCarousel, \"data-row-max\": rowMax, ...props }, renderLayout()));\r\n function renderLayout() {\r\n if (mobileCarousel) {\r\n const count = React.Children.count(children);\r\n return (React.createElement(MotionConfig, { transition: { duration: 0.3, ease: 'easeOut' } },\r\n React.createElement(CarouselProvider, { count: count, paddingOffset: paddingOffset ?? 0 },\r\n React.createElement(S.Track, null, React.Children.map(children, (child) => (React.createElement(S.Item, null, child)))),\r\n React.createElement(Pagination, { translations: translations, variant: carouselType }))));\r\n }\r\n return children;\r\n }\r\n};\r\nexport default withMotionMax(CardGrid);\r\n","import brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { paragraphRegular } from '@helpers/typography';\r\nimport styled, { css } from 'styled-components';\r\nexport const CommonTextInputStyles = css `\r\n ${fonts.proximaNova.regular};\r\n\r\n --bgColour: ${brand.global.white};\r\n --borderRadius: 10px;\r\n --placeholderColour: ${brand.grey.dark};\r\n --readOnlyColour: ${brand.grey.dark};\r\n\r\n /* Ensure iOS doesn't apply default border radius */\r\n -webkit-appearance: none !important;\r\n display: block;\r\n background: var(--bgColour);\r\n border: 1px solid var(--borderColour);\r\n border-radius: var(--borderRadius);\r\n color: var(--textColour);\r\n height: ${fluid(48, 55)};\r\n font-size: 16px;\r\n line-height: 26px;\r\n margin: 0;\r\n padding: ${fluid(10, 14)} 12px;\r\n width: 100%;\r\n scroll-margin: calc(var(--headerHeight, 0px) + ${fluid(16, 32)}) 0 0;\r\n\r\n &:disabled {\r\n opacity: 0.5;\r\n color: var(--readOnlyColour);\r\n cursor: not-allowed;\r\n }\r\n\r\n &:read-only,\r\n &[readonly] {\r\n color: var(--readOnlyColour);\r\n }\r\n\r\n &::placeholder {\r\n color: var(--placeholderColour);\r\n opacity: 0.5;\r\n }\r\n\r\n &:-webkit-autofill,\r\n &:-webkit-autofill:hover,\r\n &:-webkit-autofill:focus {\r\n -webkit-text-fill-color: var(--textColour);\r\n -webkit-box-shadow: 0 0 0px 1000px ${brand.green.light} inset;\r\n }\r\n\r\n &.focus-ring {\r\n outline: auto;\r\n outline-offset: 3px;\r\n outline-width: 2px;\r\n outline-style: solid;\r\n }\r\n`;\r\nconst Input = styled.input `\r\n ${CommonTextInputStyles};\r\n`;\r\nconst AdditionalElementStyles = css `\r\n ${paragraphRegular};\r\n ${fonts.proximaNova.bold};\r\n\r\n --borderRadius: 10px;\r\n\r\n display: flex;\r\n align-items: center;\r\n height: ${fluid(48, 55)};\r\n border: 1px solid var(--borderColour);\r\n padding: 0 ${fluid(16, 24)};\r\n background-color: ${brand.green.light};\r\n color: var(--textColour);\r\n white-space: nowrap;\r\n margin: 0;\r\n`;\r\nconst Prefix = styled.span `\r\n ${AdditionalElementStyles};\r\n\r\n border-right: 0;\r\n border-radius: var(--borderRadius) 0 0 var(--borderRadius);\r\n`;\r\nconst Suffix = styled.span `\r\n ${AdditionalElementStyles};\r\n\r\n border-left: 0;\r\n border-radius: 0 var(--borderRadius) var(--borderRadius) 0;\r\n`;\r\nconst InputWrapper = styled.div `\r\n display: flex;\r\n\r\n &[data-type='currency'] {\r\n > input {\r\n ${CommonTextInputStyles};\r\n }\r\n }\r\n\r\n &:has(${Prefix}) {\r\n input {\r\n border-top-left-radius: 0;\r\n border-bottom-left-radius: 0;\r\n }\r\n }\r\n\r\n &:has(${Suffix}) {\r\n input {\r\n border-top-right-radius: 0;\r\n border-bottom-right-radius: 0;\r\n }\r\n }\r\n`;\r\nconst TextboxStyles = {\r\n Input,\r\n InputWrapper,\r\n Prefix,\r\n Suffix,\r\n};\r\nexport default TextboxStyles;\r\n","import * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport MaskedInput from 'react-text-mask';\r\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport S from './Textbox.styles';\r\nconst maskOptions = {\r\n prefix: '',\r\n suffix: '',\r\n includeThousandsSeparator: true,\r\n thousandsSeparatorSymbol: ',',\r\n allowDecimal: true,\r\n decimalSymbol: '.',\r\n decimalLimit: 2,\r\n integerLimit: 8,\r\n allowNegative: false,\r\n allowLeadingZeroes: false,\r\n};\r\nconst Textbox = React.forwardRef(({ prefix, suffix, setValue, initialValue, ...props }, ref) => {\r\n const currencyMask = createNumberMask(maskOptions);\r\n const [maskedValue, setMaskedValue] = React.useState(initialValue ?? '');\r\n React.useEffect(() => {\r\n setMaskedValue(initialValue ?? '');\r\n setValue?.(initialValue ? initialValue.replace(/,/g, '') : '');\r\n }, [initialValue]);\r\n const otherProps = {};\r\n if (props.type === 'number') {\r\n otherProps.step = 'any';\r\n }\r\n if (prefix && prefix === '£') {\r\n return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.InputWrapper, { \"data-type\": \"currency\" },\r\n prefix && React.createElement(S.Prefix, null, prefix),\r\n React.createElement(MaskedInput, { mask: currencyMask, onChange: (e) => {\r\n setValue?.(e.target.value.replace(/,/g, ''));\r\n setMaskedValue(e.target.value);\r\n }, inputMode: \"numeric\", value: maskedValue }),\r\n React.createElement(\"input\", { ref: ref, ...props, \"aria-labelledby\": `${props.name}-label`, ...otherProps, type: \"hidden\" }),\r\n suffix && React.createElement(S.Suffix, null, suffix))));\r\n }\r\n return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.InputWrapper, null,\r\n prefix && React.createElement(S.Prefix, null, prefix),\r\n React.createElement(S.Input, { ref: ref, ...props, \"aria-labelledby\": `${props.name}-label`, ...otherProps }),\r\n suffix && React.createElement(S.Suffix, null, suffix))));\r\n});\r\nTextbox.displayName = 'Textbox';\r\nexport default Textbox;\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport srOnly from '@helpers/srOnly';\r\nimport { link, paragraphRegular } from '@helpers/typography';\r\nimport { m } from 'framer-motion';\r\nimport { rgba } from 'polished';\r\nimport styled from 'styled-components';\r\nimport { ContentType } from '../../SectionWrapper/SectionWrapper';\r\nimport Textbox from '../Inputs/Textbox/Textbox';\r\nimport TextboxStyles from '../Inputs/Textbox/Textbox.styles';\r\nconst Container = styled.div `\r\n ${transition('opacity')};\r\n\r\n --textLinkColour: ${brand.global.black};\r\n\r\n position: relative;\r\n\r\n &:has(input[aria-disabled='true'], button[aria-disabled='true']) {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n }\r\n`;\r\nconst Form = styled.form `\r\n ${transition('border-color')};\r\n\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n border-radius: 40px;\r\n border: 1px solid ${brand.grey.light};\r\n width: 100%;\r\n padding: 0 6px;\r\n\r\n &:has(span) {\r\n border-color: ${brand.validation.invalid} !important;\r\n }\r\n\r\n ${TextboxStyles.InputWrapper} {\r\n display: contents;\r\n }\r\n`;\r\nconst Label = styled.label `\r\n ${srOnly};\r\n`;\r\nconst Input = styled(Textbox) `\r\n ${fonts.proximaNova.semiBold};\r\n\r\n --borderRadius: 40px;\r\n --textColour: ${brand.blue.navy};\r\n\r\n border: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n flex: 1;\r\n margin: 0;\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n height: ${fluid(44, 48)};\r\n font-size: 16px;\r\n line-height: 26px;\r\n\r\n &::placeholder {\r\n color: ${brand.grey.dark};\r\n }\r\n`;\r\nconst Button = styled(m.button) `\r\n ${ButtonReset};\r\n ${transition('background-color, color')};\r\n\r\n --primaryColour: ${brand.green.default};\r\n --contrastColour: ${brand.global.white};\r\n\r\n display: grid;\r\n place-content: center;\r\n width: ${fluid(32, 40)};\r\n height: ${fluid(32, 40)};\r\n border-radius: 50%;\r\n background-color: var(--primaryColour);\r\n color: var(--contrastColour);\r\n border: 2px solid var(--primaryColour);\r\n\r\n svg {\r\n display: block;\r\n width: ${fluid(18, 24)};\r\n }\r\n\r\n &:focus-visible,\r\n &:hover {\r\n color: var(--primaryColour);\r\n background-color: var(--contrastColour);\r\n }\r\n\r\n &[data-type=${ContentType.Savings}] {\r\n --primaryColour: ${brand.blue.default};\r\n }\r\n\r\n &[data-type=${ContentType.Intermediaries}] {\r\n --primaryColour: ${brand.blue.navy};\r\n --contrastColour: ${brand.green.light};\r\n }\r\n\r\n &[data-type='clear'] {\r\n --primaryColour: ${brand.green.light};\r\n --contrastColour: ${brand.blue.navy};\r\n\r\n svg {\r\n width: ${fluid(12, 16)};\r\n }\r\n }\r\n\r\n /* Mobile click styles - button should mimic press */\r\n @media ${until(Device.TabletLarge)} {\r\n ${transition('transform', 0.15)};\r\n\r\n &:active {\r\n transform: translateY(1.5px);\r\n }\r\n }\r\n`;\r\nconst Suggestions = styled.ul `\r\n ${transition('opacity, transform')};\r\n\r\n --borderRadius: ${fluid(10, 20)};\r\n\r\n position: absolute;\r\n z-index: 1;\r\n top: calc(100% + 16px);\r\n left: 0;\r\n background-color: ${brand.global.white};\r\n box-shadow: 0px 1px 4px 0px ${rgba(brand.blue.navy, 0.1)};\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 10px;\r\n border-radius: var(--borderRadius) var(--borderRadius) var(--borderRadius) 0px;\r\n width: 100%;\r\n\r\n ${Container}:has(${Input}[aria-expanded='false']) & {\r\n opacity: 0;\r\n pointer-events: none;\r\n transform: translateY(-20px);\r\n }\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n min-width: 424px;\r\n }\r\n`;\r\nconst AutosuggestOption = styled.button `\r\n ${ButtonReset};\r\n ${paragraphRegular};\r\n ${fonts.proximaNova.bold};\r\n ${link};\r\n\r\n padding: ${fluid(8, 16)};\r\n text-align: left;\r\n margin: 0;\r\n color: ${brand.global.black};\r\n text-decoration-color: transparent;\r\n\r\n > span {\r\n color: ${brand.green.default};\r\n }\r\n\r\n &:focus-visible,\r\n &:hover {\r\n text-decoration-color: transparent;\r\n }\r\n`;\r\nconst SearchboxStyles = {\r\n Container,\r\n Button,\r\n Label,\r\n Input,\r\n AutosuggestOption,\r\n Form,\r\n Suggestions,\r\n};\r\nexport default SearchboxStyles;\r\n","import { API_URLS } from '@helpers/api';\r\nimport { SystemIcon, getSystemIcon } from '@helpers/icons';\r\nimport { clamp } from '@helpers/utils';\r\nimport { useApi } from '@hooks/useApi';\r\nimport { useForm, validateNotWhitespaceOnly } from '@hooks/useForm';\r\nimport { useOutsideClick } from '@hooks/useOutsideClick';\r\nimport { AnimatePresence } from 'framer-motion';\r\nimport qs from 'qs';\r\nimport * as React from 'react';\r\nimport { useFirstMountState } from 'react-use';\r\nimport S from './Searchbox.styles';\r\nconst Searchbox = (props) => {\r\n const isFirstMount = useFirstMountState();\r\n const { onSubmit, useReactHookFormReturn: { watch, register, setValue, setFocus, formState: { errors }, }, status, } = useForm({\r\n defaultValues: { searchTerm: props.searchTerm },\r\n endpoint: props.submitUrl ? props.submitUrl : API_URLS.searchSubmit,\r\n mode: props.submitUrl ? 'querystring' : 'json',\r\n });\r\n const { searchTerm: searchValue } = watch();\r\n const [searchTerm, setSearchTerm] = React.useState(props.searchTerm ?? '');\r\n const [showSuggestions, setShowSuggestions] = React.useState(false);\r\n const [selectedTerm, setSelectedTerm] = React.useState('');\r\n React.useEffect(() => {\r\n if (searchValue &&\r\n searchValue.length > 1 &&\r\n searchTerm !== searchValue &&\r\n searchValue !== selectedTerm) {\r\n setSearchTerm(searchValue);\r\n setShowSuggestions(true);\r\n }\r\n else {\r\n setShowSuggestions(false);\r\n }\r\n }, [searchValue]);\r\n // Submit the search term when the user selects a suggestion\r\n React.useEffect(() => {\r\n if (!isFirstMount && selectedTerm === searchValue) {\r\n props.onSubmit?.(selectedTerm);\r\n }\r\n }, [selectedTerm, searchValue]);\r\n React.useEffect(() => {\r\n props.onSuggestionsVisible?.(showSuggestions);\r\n }, [showSuggestions]);\r\n React.useEffect(() => {\r\n setSearchTerm(props.searchTerm ?? '');\r\n setValue('searchTerm', props.searchTerm ?? '');\r\n }, [props.searchTerm]);\r\n const result = useApi({\r\n url: `${API_URLS.searchTypeahead}?${qs.stringify({\r\n searchTerm,\r\n cultureCode: props.cultureCode,\r\n })}`,\r\n validate: () => !props.noTypeahead && !!searchTerm && searchTerm !== props.searchTerm,\r\n });\r\n const itemsRef = React.useRef([]);\r\n const containerRef = useOutsideClick(() => setShowSuggestions(false));\r\n const submitRef = React.useRef(null);\r\n return (React.createElement(S.Container, { ref: containerRef },\r\n React.createElement(S.Form, { onSubmit: props.onSubmit !== undefined\r\n ? (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n props.onSubmit?.(searchTerm);\r\n showSuggestions && setShowSuggestions(false);\r\n }\r\n : onSubmit },\r\n React.createElement(\"input\", { type: \"hidden\", ...register('cultureCode') }),\r\n React.createElement(S.Label, { id: `${props.idPrefix ?? ''}-searchbox-label` }, props.label),\r\n React.createElement(S.Input, { type: \"search\", placeholder: props.placeholder, role: \"combobox\", \"aria-autocomplete\": \"list\", \"aria-expanded\": showSuggestions && !!result.data && result.data.suggestions.length > 0, \"aria-controls\": `${props.idPrefix ?? ''}-typeahead-listbox`, \"aria-labelledby\": `${props.idPrefix ?? ''}-searchbox-label`, ...register('searchTerm', {\r\n required: props.translations?.['global.search.validation'] ?? '',\r\n validate: (value) => validateNotWhitespaceOnly(value, props.translations?.['global.search.validation'] ?? ''),\r\n }), \"aria-invalid\": !!errors.searchTerm, \"aria-errormessage\": `${props.idPrefix ?? ''}-searchbox-error`, onKeyDown: (event) => {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n if (itemsRef.current.length > 0) {\r\n itemsRef.current[0]?.focus();\r\n }\r\n break;\r\n case 'Escape':\r\n setShowSuggestions(false);\r\n break;\r\n }\r\n }, \"aria-disabled\": status === 'pending', autoComplete: \"off\" }),\r\n errors.searchTerm && React.createElement(S.Label, { id: `${props.idPrefix ?? ''}-searchbox-error`, as: \"span\" }),\r\n props.onClear !== undefined ? (React.createElement(AnimatePresence, null, searchTerm !== '' ? (React.createElement(S.Button, { ref: submitRef, type: \"button\", \"aria-label\": props.clearLabel, \"data-type\": \"clear\", initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 0 }, onClick: (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n props.onClear?.();\r\n setValue('searchTerm', '');\r\n setSearchTerm('');\r\n } }, getSystemIcon(SystemIcon.Close))) : null)) : null,\r\n React.createElement(S.Button, { ref: submitRef, type: \"submit\", \"aria-label\": props.buttonLabel, \"aria-disabled\": status === 'pending', \"data-type\": props.buttonType }, getSystemIcon(SystemIcon.Search))),\r\n React.createElement(S.Suggestions, { id: `${props.idPrefix ?? ''}-typeahead-listbox`, \"aria-hidden\": !result.data || result.data.suggestions.length === 0, tabIndex: showSuggestions ? -1 : undefined }, !!result.data && (React.createElement(React.Fragment, null, result.data.suggestions.map((suggestion, i) => {\r\n const regex = new RegExp(searchTerm, 'gi');\r\n const textValue = suggestion.value.replaceAll(regex, (match) => `${match}`);\r\n return (React.createElement(\"li\", { key: suggestion.id }, suggestion.url !== undefined ? (React.createElement(S.AutosuggestOption, { ref: (el) => (itemsRef.current[i] = el), as: \"a\", href: suggestion.url, onKeyDown: (e) => onKeyPress(e, i, (result.data?.suggestions).length - 1), tabIndex: showSuggestions ? -1 : undefined, dangerouslySetInnerHTML: { __html: textValue } })) : (React.createElement(S.AutosuggestOption, { ref: (el) => (itemsRef.current[i] = el), onClick: (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setValue('searchTerm', suggestion.value);\r\n setSelectedTerm(suggestion.value);\r\n }, onKeyDown: (e) => onKeyPress(e, i, (result.data?.suggestions).length - 1), tabIndex: showSuggestions ? -1 : undefined, dangerouslySetInnerHTML: { __html: textValue } }))));\r\n }))))));\r\n function onKeyPress(event, i, maxIndex) {\r\n const nextIndex = i === maxIndex ? 0 : clamp(i + 1, maxIndex);\r\n const prevIndex = i === 0 ? maxIndex : clamp(i - 1, maxIndex);\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n itemsRef.current[nextIndex]?.focus();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n itemsRef.current[prevIndex]?.focus();\r\n break;\r\n case 'Escape':\r\n setShowSuggestions(false);\r\n setFocus('searchTerm');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n};\r\nexport default Searchbox;\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport { contentStyles, h6 } from '@helpers/typography';\r\nimport ButtonStyles from '@stories/Components/Buttons/Button/Button.styles';\r\nimport { cardWidth } from '@stories/Components/CardGrid/CardGrid.styles';\r\nimport { m } from 'framer-motion';\r\nimport styled from 'styled-components';\r\nconst Container = styled.div `\r\n ${cardWidth};\r\n\r\n --cardBackground: ${brand.global.beige};\r\n --highlightBgColour: ${brand.blue.navy};\r\n --highlightFgColour: ${brand.green.light};\r\n\r\n border-radius: 20px 20px 20px 0;\r\n background: var(--cardBackground);\r\n color: ${brand.blue.navy};\r\n padding: ${fluid(14, 28)};\r\n text-decoration: none;\r\n`;\r\nconst ContentWrapper = styled(m.div) `\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n height: 100%;\r\n\r\n ${ButtonStyles.Container} {\r\n --buttonHeight: ${fluid(42, 52)};\r\n\r\n position: relative;\r\n align-self: flex-end;\r\n margin-top: auto;\r\n }\r\n`;\r\nconst HeaderBtn = styled.button `\r\n ${ButtonReset};\r\n text-align: left;\r\n color: ${brand.blue.navy};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n\r\n &.focus-ring {\r\n @media ${until(Device.Tablet)} {\r\n outline: auto;\r\n outline-offset: 5px;\r\n outline-width: 2px;\r\n outline-color: var(--textColour, var(--primaryColour));\r\n }\r\n }\r\n\r\n &[data-is-open='true'] {\r\n svg {\r\n transform: rotate(180deg);\r\n }\r\n }\r\n\r\n > span {\r\n svg {\r\n ${transition('transform', 0.25)};\r\n width: 18px;\r\n }\r\n }\r\n\r\n @media ${from(Device.Tablet)} {\r\n > span {\r\n display: none;\r\n }\r\n }\r\n`;\r\nconst Heading = styled.h3 `\r\n ${h6};\r\n\r\n line-height: ${fluid(24, 34)};\r\n margin-bottom: 0;\r\n\r\n span {\r\n background-color: var(--highlightBgColour);\r\n color: var(--highlightFgColour);\r\n }\r\n`;\r\nconst DefinitionHolder = styled(m.div) `\r\n overflow: hidden;\r\n\r\n @media ${from(Device.Tablet)} {\r\n height: auto;\r\n }\r\n`;\r\nconst DefinitionContent = styled.div `\r\n ${contentStyles};\r\n\r\n padding-top: 12px;\r\n\r\n span {\r\n background-color: var(--highlightBgColour);\r\n color: var(--highlightFgColour);\r\n }\r\n`;\r\nconst QuickLinkStyles = {\r\n Container,\r\n ContentWrapper,\r\n DefinitionContent,\r\n DefinitionHolder,\r\n HeaderBtn,\r\n Heading,\r\n};\r\nexport default QuickLinkStyles;\r\n","import { getSystemIcon, SystemIcon } from '@helpers/icons';\r\nimport { Device, from } from '@helpers/media';\r\nimport { withMotionMax } from '@hoc/withMotionMax';\r\nimport * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport { useMedia } from 'react-use';\r\nimport S from './GlossaryCard.styles';\r\nconst GlossaryCard = (props) => {\r\n const isDesktop = useMedia(from(Device.Tablet), false);\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n return (React.createElement(S.Container, null,\r\n React.createElement(S.ContentWrapper, { initial: isDesktop ? 'opened' : isOpen ? 'opened' : 'closed', animate: isDesktop ? 'opened' : isOpen ? 'opened' : 'closed' },\r\n React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.HeaderBtn, { type: \"button\", \"data-is-open\": isOpen, onClick: () => {\r\n setIsOpen(!isOpen);\r\n } },\r\n React.createElement(S.Heading, { dangerouslySetInnerHTML: { __html: highlightSearchTerm(props.term) } }),\r\n React.createElement(\"span\", null, getSystemIcon(SystemIcon.ChevronDown)))),\r\n React.createElement(S.DefinitionHolder, { \"data-is-open\": isOpen, variants: {\r\n closed: {\r\n height: 0,\r\n transitionEnd: {\r\n visibility: 'hidden',\r\n },\r\n },\r\n opened: {\r\n visibility: 'visible',\r\n height: 'auto',\r\n },\r\n } }, props.definition && (React.createElement(S.DefinitionContent, { dangerouslySetInnerHTML: { __html: highlightSearchTerm(props.definition) } }))))));\r\n function highlightSearchTerm(text) {\r\n if (!props.highlight) {\r\n return text;\r\n }\r\n return text.replaceAll(new RegExp(props.highlight, 'gi'), (match) => `${match}`);\r\n }\r\n};\r\nexport default withMotionMax(GlossaryCard);\r\n","import { transition } from '@helpers/animate';\r\nimport brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { ButtonReset } from '@helpers/global';\r\nimport { Device, from, until } from '@helpers/media';\r\nimport scrollbars from '@helpers/scrollbars';\r\nimport { h1, paragraphLarge } from '@helpers/typography';\r\nimport CardGrid from '@stories/Components/CardGrid/CardGrid';\r\nimport SectionWrapper from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nimport styled from 'styled-components';\r\nconst Container = styled(SectionWrapper) ``;\r\nconst Wrapper = styled.div `\r\n scroll-margin-top: var(--headerHeight, 0px);\r\n`;\r\nconst AlphabetList = styled.div `\r\n position: sticky;\r\n top: var(--headerHeight, 0px);\r\n display: flex;\r\n justify-content: space-between;\r\n gap: ${fluid(8, 10)};\r\n padding: ${fluid(20, 48)} 0 10px;\r\n margin-bottom: ${fluid(24, 70)};\r\n overflow-x: auto;\r\n background-color: ${brand.global.white};\r\n z-index: 1;\r\n\r\n @media ${until(Device.Tablet)} {\r\n margin-left: -18px;\r\n margin-right: -18px;\r\n padding-left: 18px;\r\n padding-right: 18px;\r\n }\r\n\r\n @media ${from(Device.Tablet)} {\r\n ${scrollbars};\r\n }\r\n`;\r\nconst AlphabetButton = styled.button `\r\n ${ButtonReset};\r\n ${paragraphLarge};\r\n ${transition('border-color, background-color')};\r\n\r\n ${fonts.proximaNova.bold}\r\n margin-bottom: 0;\r\n padding: ${fluid(5, 5)} ${fluid(10, 10)};\r\n border: 2px solid transparent;\r\n background-color: ${brand.global.beige};\r\n border-radius: 10px;\r\n width: 60px;\r\n height: 40px;\r\n flex: 0 0 60px;\r\n\r\n @media ${from(Device.Tablet)} {\r\n width: 50px;\r\n height: 50px;\r\n flex: 0 0 50px;\r\n }\r\n\r\n &.focus-ring,\r\n &:focus-visible {\r\n outline: auto;\r\n outline-offset: 5px;\r\n outline-width: 2px;\r\n outline-color: var(--textColour, var(--primaryColour));\r\n }\r\n\r\n &:first-child {\r\n padding: ${fluid(5, 10)} ${fluid(10, 18)};\r\n width: auto;\r\n }\r\n\r\n &:hover {\r\n border-color: ${brand.blue.navy};\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n\r\n &:hover {\r\n border-color: transparent;\r\n }\r\n }\r\n\r\n &[data-active='true'] {\r\n border-color: ${brand.blue.navy};\r\n background-color: ${brand.green.light};\r\n }\r\n`;\r\nconst ThreeColGrid = styled(CardGrid) `\r\n --grow: 0;\r\n --alignment: flex-start;\r\n margin-bottom: ${fluid(24, 48)};\r\n\r\n @media ${from(Device.Tablet)} {\r\n --rowItems: 2 !important; // Important required to prevent CLS specificity issue\r\n }\r\n\r\n @media ${from(Device.DesktopSmall)} {\r\n --rowItems: 3 !important;\r\n }\r\n`;\r\nconst GroupLetter = styled.h3 `\r\n ${h1};\r\n display: block;\r\n border-bottom: 1px solid ${brand.grey.light};\r\n padding-bottom: ${fluid(8, 12)};\r\n margin-bottom: ${fluid(16, 37)};\r\n`;\r\nconst NoResults = styled.p `\r\n ${paragraphLarge};\r\n`;\r\nconst MortgageGlossarytyles = {\r\n AlphabetButton,\r\n AlphabetList,\r\n Container,\r\n GroupLetter,\r\n Wrapper,\r\n ThreeColGrid,\r\n NoResults,\r\n};\r\nexport default MortgageGlossarytyles;\r\n","import { withMotionMax } from '@hoc/withMotionMax';\r\nimport GlossaryCard from '@stories/Components/Cards/GlossaryCard/GlossaryCard';\r\nimport Searchbox from '@stories/Components/Misc/Forms/Searchbox/Searchbox';\r\nimport { ContentType } from '@stories/Components/Misc/SectionWrapper/SectionWrapper';\r\nimport * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport S from './MortgageGlossary.styles';\r\nconst MortgageGlossary = (props) => {\r\n const [selectedLetter, setSelectedLetter] = React.useState(null);\r\n const ref = React.useRef(null);\r\n const [searchTerm, setSearchTerm] = React.useState('');\r\n // Group the cards by the first letter of their term property\r\n const groupedCards = React.useMemo(() => {\r\n const cards = searchTerm === ''\r\n ? props.cards\r\n : props.cards.filter((card) => card.term.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n card.definition?.toLowerCase().includes(searchTerm.toLowerCase()));\r\n return cards.reduce((acc, card) => {\r\n // Get the first letter of the term and convert it to uppercase\r\n const firstLetter = card.term[0].toUpperCase();\r\n // If the accumulator does not have an array for this letter, create one\r\n if (!acc[firstLetter]) {\r\n acc[firstLetter] = [];\r\n }\r\n // Add the current card to the array for this letter\r\n acc[firstLetter].push(card);\r\n // Return the accumulator for the next iteration\r\n return acc;\r\n }, {});\r\n }, [searchTerm]); // Initialize the accumulator as an empty object with string keys and array of GlossaryCardProps values\r\n function scrollToRef() {\r\n if (ref.current) {\r\n setTimeout(() => ref.current?.scrollIntoView({ behavior: 'smooth' }), 100);\r\n }\r\n }\r\n // Memoize the filtered cards based on the selected letters\r\n const filteredCards = React.useMemo(() => {\r\n // If no letter is selected, return all grouped cards\r\n if (selectedLetter === null || selectedLetter.length === 0) {\r\n return groupedCards;\r\n }\r\n // Otherwise, filter the grouped cards to include only those that match the selected letters\r\n return Object.keys(groupedCards).reduce((acc, key) => {\r\n // If the current key (letter) is in the selected letters, add it to the accumulator\r\n if (selectedLetter?.includes(key)) {\r\n acc[key] = groupedCards[key];\r\n }\r\n return acc;\r\n }, {}); // Initialize the accumulator as an empty object with string keys and array of GlossaryCardProps values\r\n }, [groupedCards, selectedLetter]); // Recompute the filtered cards when groupedCards or selectedLetter changes\r\n const orderedCards = Object.entries(filteredCards).sort(([a], [b]) => a.localeCompare(b)); // Sort the entries by the letter\r\n return (React.createElement(S.Container, { translations: props.translations },\r\n React.createElement(S.Wrapper, { ref: ref },\r\n React.createElement(Searchbox, { ...props.searchbox, idPrefix: \"search-results-\", searchTerm: searchTerm, translations: props.translations, onSubmit: (value) => {\r\n setSearchTerm(value);\r\n ref.current?.scrollIntoView({ behavior: 'smooth' });\r\n }, buttonType: ContentType.Intermediaries, noTypeahead: true, onClear: () => {\r\n setSearchTerm('');\r\n ref.current?.scrollIntoView({ behavior: 'smooth' });\r\n } }),\r\n React.createElement(S.AlphabetList, null,\r\n React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n React.createElement(S.AlphabetButton, { type: \"button\", \"data-active\": selectedLetter === null || selectedLetter.length === 0, onClick: () => {\r\n setSelectedLetter(null), scrollToRef();\r\n } }, props.translations?.['global.button.all'])),\r\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').map((letter) => (React.createElement(FocusRing, { key: `letter-btn-${letter}`, focusRingClass: \"focus-ring\" },\r\n React.createElement(S.AlphabetButton, { type: \"button\", \"data-active\": selectedLetter?.includes(letter), disabled: !groupedCards[letter], onClick: () => {\r\n setSelectedLetter((prevSelected) => {\r\n if (prevSelected && prevSelected.includes(letter)) {\r\n return prevSelected.filter((l) => l !== letter);\r\n }\r\n else {\r\n return prevSelected ? [...prevSelected, letter] : [letter];\r\n }\r\n });\r\n scrollToRef();\r\n } }, letter))))),\r\n orderedCards.length === 0 ? (React.createElement(S.NoResults, null, props.translations?.['glossary.no-results'])) : (React.createElement(React.Fragment, null, orderedCards.map(([letter, cards]) => (React.createElement(React.Fragment, { key: letter },\r\n React.createElement(S.GroupLetter, null, letter),\r\n React.createElement(S.ThreeColGrid, { translations: props.translations }, cards.map((card) => (React.createElement(GlossaryCard, { key: card.term, ...card, highlight: searchTerm }))))))))))));\r\n};\r\nexport default withMotionMax(MortgageGlossary);\r\n","import { useRef } from 'react';\nexport function useFirstMountState() {\n var isFirst = useRef(true);\n if (isFirst.current) {\n isFirst.current = false;\n return true;\n }\n return isFirst.current;\n}\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { useEffect, useState } from 'react';\nimport { isBrowser } from './misc/util';\nvar getInitialState = function (query, defaultState) {\n // Prevent a React hydration mismatch when a default value is provided by not defaulting to window.matchMedia(query).matches.\n if (defaultState !== undefined) {\n return defaultState;\n }\n if (isBrowser) {\n return window.matchMedia(query).matches;\n }\n // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('`useMedia` When server side rendering, defaultState should be defined to prevent a hydration mismatches.');\n }\n return false;\n};\nvar useMedia = function (query, defaultState) {\n var _a = useState(getInitialState(query, defaultState)), state = _a[0], setState = _a[1];\n useEffect(function () {\n var mounted = true;\n var mql = window.matchMedia(query);\n var onChange = function () {\n if (!mounted) {\n return;\n }\n setState(!!mql.matches);\n };\n mql.addEventListener('change', onChange);\n setState(mql.matches);\n return function () {\n mounted = false;\n mql.removeEventListener('change', onChange);\n };\n }, [query]);\n return state;\n};\nexport default useMedia;\n"],"names":["API_URLS","searchSubmit","searchTypeahead","mortgagesListing","newsListing","savingsListing","searchResults","vacancyListing","affordabilityCalculator","buyToLetRentalIncomeCalculator","decisionInPrinciple","savingsInterestCalculator","useApi","params","refAbortController","React","isFirstMount","useFirstMountState","data","setData","initialData","status","setStatus","validate","current","AbortController","async","signal","start","Date","now","res","fetch","url","cache","credentials","headers","Accept","method","resData","json","diff","sleep","doAsync","_refAbortController$c","abort","clear","undefined","validateNotWhitespaceOnly","value","error","trim","length","useForm","refContainer","refCustomData","useReactHookFormReturn","useReactHookForm","defaultValues","mode","reValidateMode","shouldUseNativeValidation","handleSubmit","confirmationMessage","setConfirmationMessage","serverErrors","setServerErrors","customResponseData","setCustomResponseData","onSubmit","formData","event","window","location","href","endpoint","includes","qs","FormData","target","body","JSON","stringify","_refContainer$current","ok","scrollIntoView","behavior","block","errors","message","redirect","setTimeout","_refContainer$current2","postSubmitCallback","Object","keys","_refCustomData$curren","_refContainer$current3","reset","useOutsideClick","callback","ref","handleClick","contains","document","addEventListener","removeEventListener","cardWidth","css","from","Device","TabletLarge","Track","styled","MotionTrack","withConfig","displayName","componentId","MotionTrackStyles","Item","li","until","Container","section","PaginationStyles","withMotionMax","_ref","children","mobileCarousel","rowMax","paddingOffset","translations","carouselType","props","S","count","MotionConfig","transition","duration","ease","CarouselProvider","map","child","Pagination","variant","renderLayout","CommonTextInputStyles","fonts","proximaNova","regular","brand","global","white","grey","dark","fluid","green","light","Input","input","AdditionalElementStyles","paragraphRegular","bold","Prefix","span","Suffix","InputWrapper","div","maskOptions","prefix","suffix","includeThousandsSeparator","thousandsSeparatorSymbol","allowDecimal","decimalSymbol","decimalLimit","integerLimit","allowNegative","allowLeadingZeroes","Textbox","setValue","initialValue","currencyMask","createNumberMask","maskedValue","setMaskedValue","replace","otherProps","type","step","FocusRing","focusRingClass","MaskedInput","mask","onChange","e","inputMode","name","black","Form","form","validation","invalid","TextboxStyles","Label","label","srOnly","semiBold","blue","navy","Button","m","button","ButtonReset","default","ContentType","Savings","Intermediaries","Suggestions","ul","rgba","AutosuggestOption","link","_props$searchTerm","_props$idPrefix","_props$idPrefix2","_props$idPrefix3","_props$translations$g","_props$translations","_props$idPrefix4","_props$idPrefix5","_props$idPrefix6","watch","register","setFocus","formState","searchTerm","submitUrl","searchValue","setSearchTerm","showSuggestions","setShowSuggestions","selectedTerm","setSelectedTerm","_props$onSubmit","call","_props$onSuggestionsV","onSuggestionsVisible","_props$searchTerm2","_props$searchTerm3","result","cultureCode","noTypeahead","itemsRef","containerRef","submitRef","_props$onSubmit2","preventDefault","stopPropagation","id","idPrefix","placeholder","role","suggestions","required","_props$translations$g2","_props$translations2","onKeyDown","key","_itemsRef$current$","focus","autoComplete","as","onClear","AnimatePresence","clearLabel","initial","opacity","y","animate","exit","onClick","_props$onClear","getSystemIcon","SystemIcon","Close","buttonLabel","buttonType","Search","tabIndex","suggestion","i","regex","RegExp","textValue","replaceAll","match","el","_result$data","onKeyPress","dangerouslySetInnerHTML","__html","_result$data2","maxIndex","_itemsRef$current$nex","_itemsRef$current$pre","nextIndex","clamp","prevIndex","beige","ContentWrapper","ButtonStyles","HeaderBtn","Tablet","Heading","h3","h6","DefinitionHolder","DefinitionContent","contentStyles","isDesktop","useMedia","isOpen","setIsOpen","highlightSearchTerm","term","ChevronDown","variants","closed","height","transitionEnd","visibility","opened","definition","text","highlight","SectionWrapper","Wrapper","AlphabetList","scrollbars","AlphabetButton","paragraphLarge","ThreeColGrid","CardGrid","DesktopSmall","GroupLetter","h1","NoResults","p","selectedLetter","setSelectedLetter","groupedCards","cards","filter","card","_card$definition","toLowerCase","reduce","acc","firstLetter","toUpperCase","push","scrollToRef","_ref$current","filteredCards","orderedCards","entries","sort","_ref2","a","b","localeCompare","Searchbox","searchbox","_ref$current2","_ref$current3","split","letter","disabled","prevSelected","l","_ref3","GlossaryCard","isFirst","useRef","isBrowser","query","defaultState","_a","useState","matchMedia","matches","getInitialState","state","setState","useEffect","mounted","mql"],"sourceRoot":""}