{"version":3,"sources":["webpack:///./src/stories/Components/SectionWrapper/SectionWrapper.tsx","webpack:///./src/hooks/useLoqate.ts","webpack:///./src/stories/Components/Forms/FormField.tsx","webpack:///./src/stories/Components/Inputs/CheckboxList/CheckboxList.styles.ts","webpack:///./src/helpers/grid.ts","webpack:///./src/helpers/tracking.ts","webpack:///./src/stories/Components/Inputs/Textbox/Textbox.tsx","webpack:///./src/stories/Components/Inputs/CheckboxList/CheckboxList.tsx","webpack:///./src/stories/Components/LoadingIndicator/LoadingIndicator.styles.ts","webpack:///./src/stories/Components/LoadingIndicator/LoadingIndicator.tsx","webpack:///./src/stories/Components/Inputs/Textbox/Textbox.styles.ts","webpack:///./src/stories/Components/SectionWrapper/SectionWrapper.styles.ts","webpack:///./src/stories/Components/Forms/FormRow.tsx","webpack:///./src/helpers/utils.ts","webpack:///./src/hooks/useForm.ts","webpack:///./src/stories/Components/Forms/FormSection.tsx","webpack:///./src/stories/Components/Forms/Form.tsx","webpack:///./src/img/icons/tick.svg","webpack:///./src/stories/Components/Inputs/Select/Select.styles.ts","webpack:///./src/stories/Components/Inputs/Select/Select.tsx"],"names":["SectionWrapper","React","ref","children","layout","hideOverflow","otherProps","S","Container","Inner","displayName","FieldMode","JS_URL","useLoqate","params","refLink","refScript","loaded","setLoaded","control","setControl","paramsSerialized","JSON","stringify","window","pca","current","link","document","createElement","href","rel","type","head","appendChild","script","src","onload","subScript","textContent","Address","fields","options","key","init","destroy","FormField","showLabel","errorToShow","Array","isArray","error","find","Field","size","label","Label","htmlFor","name","description","Description","dangerouslySetInnerHTML","__html","Error","message","styled","div","fluid","from","Device","Tablet","Option","Input","input","srOnly","CheckboxListStyles","fonts","brandonGrotesque","regular","brand","beige","green","white","svgTick","SitePadding","SiteWidth","siteWide","css","TabletLarge","baseGrid","doTVSquaredTracking","user","_tvq","session","actionname","action","rev","prod","id","promo","u","location","protocol","push","this","setCustomVariable","d","g","s","getElementsByTagName","defer","async","parentNode","insertBefore","Promise","resolve","doAdalyserTracking","adalyserTracker","doForce24Tracking","f24","Textbox","props","FocusRing","focusRingClass","CheckboxListOption","value","CheckboxList","LoadingIndicatorStyles","Loader","LoaderText","span","paragraphMedium","bold","LoadingIndicator","alignment","style","bgColor","fgColor","black","PuffLoader","color","TextboxStyles","greyDark","SectionWrapperStyles","section","FormRow","Row","EMAIL_RULE","trim","PASSWORD_RULE","POSTCODE_RULE","TELEPHONE_RULE","clamp","max","Math","min","useForm","refContainer","useReactHookFormReturn","useReactHookForm","defaultValues","mode","reValidateMode","shouldUseNativeValidation","handleSubmit","status","setStatus","confirmationMessage","setConfirmationMessage","serverErrors","setServerErrors","onSubmit","formData","event","res","FormData","target","fetch","endpoint","body","method","headers","ok","scrollIntoView","behavior","block","resData","json","errors","length","postSubmitCallback","redirect","FormSection","Section","disabled","visible","title","Title","content","Content","Form","showSubmit","submitLabel","ErrorSummary","ConfirmationMessage","SubmitWrapper","Button","buttonType","SelectStyles","Select","select"],"mappings":"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","file":"21-9e73e9c16b35c937003d.js","sourcesContent":["import * as React from 'react';\r\nimport S from './SectionWrapper.styles';\r\nconst SectionWrapper = React.forwardRef(({ children, layout = 'default', hideOverflow, ...otherProps }, ref) => {\r\n    switch (layout) {\r\n        case 'fullWidth':\r\n            return (React.createElement(S.Container, { ref: ref, \"data-hide-overflow\": hideOverflow, ...otherProps }, children));\r\n        case 'default':\r\n        default:\r\n            return (React.createElement(S.Container, { ref: ref, \"data-hide-overflow\": hideOverflow, ...otherProps },\r\n                React.createElement(S.Inner, null, children)));\r\n    }\r\n});\r\nSectionWrapper.displayName = 'SectionWrapper';\r\nexport default SectionWrapper;\r\n","import * as React from 'react';\r\nexport var FieldMode;\r\n(function (FieldMode) {\r\n    FieldMode[FieldMode[\"NONE\"] = 0] = \"NONE\";\r\n    FieldMode[FieldMode[\"SEARCH\"] = 1] = \"SEARCH\";\r\n    FieldMode[FieldMode[\"POPULATE\"] = 2] = \"POPULATE\";\r\n    FieldMode[FieldMode[\"DEFAULT\"] = 3] = \"DEFAULT\";\r\n    FieldMode[FieldMode[\"PRESERVE\"] = 4] = \"PRESERVE\";\r\n    FieldMode[FieldMode[\"COUNTRY\"] = 8] = \"COUNTRY\";\r\n})(FieldMode || (FieldMode = {}));\r\n// See Loqate docs here: https://www.loqate.com/resources/support/setup-guides/advanced-setup-guide/\r\nconst API_KEY = 'XW86-UR92-ME93-TP16';\r\nconst CSS_URL = 'https://services.postcodeanywhere.co.uk/css/address-3.91.css';\r\nconst JS_URL = 'https://services.postcodeanywhere.co.uk/js/address-3.91.js';\r\nexport function useLoqate(params) {\r\n    const refLink = React.useRef();\r\n    const refScript = React.useRef();\r\n    const [loaded, setLoaded] = React.useState(false);\r\n    const [control, setControl] = React.useState();\r\n    const paramsSerialized = JSON.stringify(params);\r\n    React.useEffect(() => {\r\n        if (loaded) {\r\n            return;\r\n        }\r\n        if (window.pca) {\r\n            setLoaded(true);\r\n            return;\r\n        }\r\n        if (!refLink.current) {\r\n            const link = document.createElement('link');\r\n            link.href = CSS_URL;\r\n            link.rel = 'stylesheet';\r\n            link.type = 'text/css';\r\n            document.head.appendChild(link);\r\n            refLink.current = link;\r\n        }\r\n        if (!refScript.current) {\r\n            const script = document.createElement('script');\r\n            script.src = JS_URL;\r\n            script.onload = function onload() {\r\n                setLoaded(true);\r\n            };\r\n            document.head.appendChild(script);\r\n            refScript.current = script;\r\n            const subScript = document.createElement('script');\r\n            subScript.src = JS_URL;\r\n            subScript.textContent = `pca.on(\"options\", function(type, key, options) {\r\n        options.suppressAutocomplete = false;\r\n      });`;\r\n            document.head.appendChild(subScript);\r\n        }\r\n    }, []);\r\n    React.useEffect(() => {\r\n        if (!loaded) {\r\n            return;\r\n        }\r\n        // Create new instance of address capture.\r\n        const control = new window.pca.Address(params.fields, {\r\n            ...params.options,\r\n            key: API_KEY,\r\n        });\r\n        // Run additional setup for hook usage.\r\n        params.init(control);\r\n        // Store control in state.\r\n        setControl(control);\r\n        // Ensure control is removed and events unbound if unmounted\r\n        return () => {\r\n            control.destroy();\r\n        };\r\n    }, [loaded, paramsSerialized]);\r\n    return control;\r\n}\r\n","import * as React from 'react';\r\nimport S from './Form.styles';\r\nconst FormField = ({ showLabel = true, ...otherProps }) => {\r\n    const errorToShow = Array.isArray(otherProps.error)\r\n        ? otherProps.error.find((error) => !!error)\r\n        : otherProps.error;\r\n    return (React.createElement(S.Field, { \"data-size\": otherProps.size ?? 'default' },\r\n        otherProps.label && (React.createElement(S.Label, { htmlFor: Array.isArray(otherProps.name) ? otherProps.name[0] : otherProps.name, \"data-hide\": !showLabel }, otherProps.label)),\r\n        otherProps.description && (React.createElement(S.Description, { dangerouslySetInnerHTML: { __html: otherProps.description } })),\r\n        otherProps.children,\r\n        errorToShow && React.createElement(S.Error, null, errorToShow.message)));\r\n};\r\nexport default FormField;\r\n","import brand from '@helpers/brand';\r\nimport { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { Device, from } from '@helpers/media';\r\nimport srOnly from '@helpers/srOnly';\r\nimport svgTick from '@img/icons/tick.svg';\r\nimport styled from 'styled-components';\r\nconst Container = styled.div `\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 12px ${fluid(24, 48)};\r\n\r\n  &[data-layout='horizontal'] {\r\n    flex-direction: column;\r\n\r\n    @media ${from(Device.Tablet)} {\r\n      flex-direction: row;\r\n    }\r\n  }\r\n\r\n  &[data-layout='vertical'] {\r\n    flex-direction: column;\r\n  }\r\n`;\r\nconst Option = styled.div `\r\n  display: flex;\r\n  white-space: nowrap;\r\n`;\r\nconst Input = styled.input `\r\n  /* Ensure iOS doesn't apply default border radius */\r\n  -webkit-appearance: none !important;\r\n  ${srOnly}\r\n`;\r\nconst Label = styled.label `\r\n  display: inline-block;\r\n  cursor: pointer;\r\n  ${fonts.brandonGrotesque.regular}\r\n  font-size: 20px;\r\n  line-height: 1em;\r\n\r\n  &::before {\r\n    content: '';\r\n    display: inline-block;\r\n    height: 17px;\r\n    background: ${brand.beige} no-repeat center center;\r\n    background-size: 14px 14px;\r\n    border: 1px solid ${brand.green};\r\n    color: ${brand.white};\r\n    margin-right: 10px;\r\n    width: 17px;\r\n  }\r\n\r\n  ${Input}:checked + &::before {\r\n    background-color: ${brand.green};\r\n    background-image: url(${svgTick});\r\n  }\r\n`;\r\nconst CheckboxListStyles = {\r\n    Container,\r\n    Input,\r\n    Label,\r\n    Option,\r\n};\r\nexport default CheckboxListStyles;\r\n","import { Device, from } from '@helpers/media';\r\nimport { css } from 'styled-components';\r\nimport { fluid } from './fluid';\r\nexport const SitePadding = 18;\r\nexport const SiteWidth = 1240;\r\nexport const SiteWidthBreakpoint = SiteWidth + SitePadding * 2;\r\nexport const siteWide = css `\r\n  --sitePadding: ${SitePadding}px;\r\n  --siteWidth: ${SiteWidth}px;\r\n  --maxWidth: calc(var(--siteWidth) + (var(--sitePadding) * 2));\r\n\r\n  margin: 0 auto;\r\n  padding: 0 var(--sitePadding);\r\n  width: 100%;\r\n\r\n  @media ${from(Device.TabletLarge)} {\r\n    width: min(calc(75% + (var(--sitePadding) * 2)), var(--maxWidth));\r\n  }\r\n`;\r\nexport const baseGrid = css `\r\n  --gutterWidth: ${fluid(10, 40)};\r\n\r\n  display: grid;\r\n  column-gap: var(--gutterWidth);\r\n  grid-template-columns: repeat(12, 1fr);\r\n`;\r\n","/* Send tracking events to TV Squared */\r\nexport const doTVSquaredTracking = (user, name) => {\r\n    const _tvq = (window._tvq = window._tvq || []);\r\n    const session = {\r\n        user: user,\r\n    };\r\n    const actionname = name;\r\n    const action = {\r\n        rev: '',\r\n        prod: '',\r\n        id: '',\r\n        promo: '',\r\n    };\r\n    const u = 'https:' == document.location.protocol\r\n        ? 'https://collector-4818.tvsquared.com/'\r\n        : 'http://collector-4818.tvsquared.com/';\r\n    _tvq.push(['setSiteId', 'TV-54188118-1']);\r\n    _tvq.push(['setTrackerUrl', u + 'tv2track.php']);\r\n    _tvq.push([\r\n        function () {\r\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n            //@ts-ignore\r\n            this.setCustomVariable(5, 'session', JSON.stringify(session), 'visit');\r\n        },\r\n    ]);\r\n    _tvq.push([\r\n        function () {\r\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n            //@ts-ignore\r\n            this.setCustomVariable(5, actionname, JSON.stringify(action), 'page');\r\n        },\r\n    ]);\r\n    _tvq.push(['trackPageView']);\r\n    const d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];\r\n    g.type = 'text/javascript';\r\n    g.defer = true;\r\n    g.async = true;\r\n    g.src = u + 'tv2track.js';\r\n    s?.parentNode?.insertBefore(g, s);\r\n    return Promise.resolve();\r\n};\r\nexport const doAdalyserTracking = (name) => {\r\n    const adalyserTracker = window.adalyserTracker;\r\n    adalyserTracker?.('trackEvent', name, {}, true);\r\n    return Promise.resolve();\r\n};\r\nexport const doForce24Tracking = (name) => {\r\n    const f24 = window.f24;\r\n    f24?.('event', 'fc_form_send', `form.${name}`);\r\n    return Promise.resolve();\r\n};\r\n","import * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport S from './Textbox.styles';\r\nconst Textbox = React.forwardRef((props, ref) => {\r\n    return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n        React.createElement(S.Input, { ref: ref, ...props })));\r\n});\r\nTextbox.displayName = 'Textbox';\r\nexport default Textbox;\r\n","import * as React from 'react';\r\nimport S from './CheckboxList.styles';\r\nconst CheckboxListOption = React.forwardRef((props, ref) => {\r\n    const { children, ...otherProps } = props;\r\n    const id = `${otherProps.name}-${otherProps.value}`;\r\n    return (React.createElement(S.Option, null,\r\n        React.createElement(S.Input, { ref: ref, id: id, type: \"checkbox\", value: otherProps.value, ...otherProps }),\r\n        React.createElement(S.Label, { htmlFor: id }, children)));\r\n});\r\nCheckboxListOption.displayName = 'CheckboxListOption';\r\nexport { CheckboxListOption };\r\nconst CheckboxList = ({ layout, children, ...props }) => {\r\n    return (React.createElement(S.Container, { \"data-layout\": layout ?? 'horizontal', ...props }, children));\r\n};\r\nCheckboxList.displayName = 'CheckboxList';\r\nexport default CheckboxList;\r\n","import { fluid } from '@helpers/fluid';\r\nimport fonts from '@helpers/fonts';\r\nimport { paragraphMedium } from '@helpers/typography';\r\nimport styled from 'styled-components';\r\nconst Loader = styled.div `\r\n  position: relative;\r\n  display: flex;\r\n  background: var(--bgColor);\r\n  color: var(--fgColor);\r\n  flex-direction: column;\r\n  height: 100%;\r\n  place-content: center;\r\n  place-items: center;\r\n  text-align: center;\r\n  width: 100%;\r\n\r\n  &[data-layout='inline'] {\r\n    padding: ${fluid(48, 96)};\r\n  }\r\n\r\n  &[data-layout='absolute'] {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n  }\r\n\r\n  &[data-layout='fixed'] {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n  }\r\n\r\n  &[data-alignment='top'] {\r\n    place-content: flex-start;\r\n    padding-top: 24px;\r\n  }\r\n`;\r\nconst LoaderText = styled.span `\r\n  ${paragraphMedium};\r\n  ${fonts.brandonGrotesque.bold};\r\n\r\n  display: block;\r\n  margin: 1rem 0 0;\r\n`;\r\nconst LoadingIndicatorStyles = {\r\n    Loader,\r\n    LoaderText,\r\n};\r\nexport default LoadingIndicatorStyles;\r\n","import brand from '@helpers/brand';\r\nimport * as React from 'react';\r\nimport { PuffLoader } from 'react-spinners';\r\nimport S from './LoadingIndicator.styles';\r\nconst LoadingIndicator = (props) => {\r\n    return (React.createElement(S.Loader, { \"data-layout\": props.layout ?? 'inline', \"data-alignment\": props.alignment ?? 'center', style: {\r\n            '--bgColor': props.bgColor ?? 'transparent',\r\n            '--fgColor': props.fgColor ?? brand.black,\r\n        } },\r\n        React.createElement(PuffLoader, { color: \"currentColor\", size: props.size ?? 64 }),\r\n        props.label && React.createElement(S.LoaderText, null, props.label)));\r\n};\r\nexport default LoadingIndicator;\r\n","import brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport styled from 'styled-components';\r\nconst Input = styled.input `\r\n  /* Ensure iOS doesn't apply default border radius */\r\n  -webkit-appearance: none !important;\r\n  display: block;\r\n  background: ${brand.beige};\r\n  border: 0;\r\n  color: ${brand.greyDark};\r\n  height: 40px;\r\n  ${fonts.brandonGrotesque.regular}\r\n  font-size: 18px;\r\n  margin: 0;\r\n  padding: 7px 12px;\r\n  width: 100%;\r\n\r\n  &:disabled {\r\n    opacity: 0.5;\r\n  }\r\n\r\n  &::placeholder {\r\n    ${fonts.brandonGrotesque.regular}\r\n    opacity: 0.4;\r\n  }\r\n\r\n  &.focus-ring {\r\n    outline: auto;\r\n    outline-offset: 5px;\r\n  }\r\n`;\r\nconst TextboxStyles = {\r\n    Input,\r\n};\r\nexport default TextboxStyles;\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  --sectionSpacing: ${fluid(48, 96)};\r\n  scroll-margin: var(--headerScrollHeight) 0 0;\r\n\r\n  &[data-hide-overflow='true'] {\r\n    overflow: hidden;\r\n  }\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 './Form.styles';\r\nconst FormRow = ({ children, ...props }) => {\r\n    return React.createElement(S.Row, { ...props }, children);\r\n};\r\nexport default FormRow;\r\n","/**\r\n * Email validation as per RFC2822 standards\r\n *\r\n * [a-z0-9!#$%&'*+/=?^_`{|}~-]+                    = One or more characters in the set\r\n * (\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*               = Zero or more characters in the set (also ensures that the last digit isn't a dot)\r\n * @                                               = Check for @ symbol\r\n * ([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+     = Start with a letter or number, followed by any letter, number or a dash, finishing with a dot\r\n * [a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$          = First character is necessarily a letter or number, followed 0 or more letters, numbers or dashes, finishing with a letter or number\r\n */\r\nexport const EMAIL_RULE_REGEX = /[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/;\r\n/**\r\n * Make sure this explains EMAIL_RULE_REGEX\r\n */\r\nexport const EMAIL_RULE_MESSAGE = `Please enter a valid email address`.trim();\r\n/**\r\n * Rule structure for react-hook-form\r\n */\r\nexport const EMAIL_RULE = {\r\n    message: EMAIL_RULE_MESSAGE,\r\n    value: EMAIL_RULE_REGEX,\r\n};\r\n/**\r\n * (?=.*[a-z])        = Check for lowercase letter\r\n * (?=.*\\d)           = Check for digit\r\n * (?=.*[^\\da-zA-Z])  = Check for non-digit and non-letter (^ negates the [] section)\r\n * .{8,}              = Make sure it is at least 8 characters, no maximum\r\n */\r\nexport const PASSWORD_RULE_REGEX = /^(?=.*[a-z])(?=.*\\d)(?=.*[^\\da-zA-Z]).{8,}$/;\r\n/**\r\n * Make sure this explains PASSWORD_RULE_REGEX\r\n */\r\nexport const PASSWORD_RULE_MESSAGE = `\r\n  Password must be at least 8 characters and \r\n  include at least one number, \r\n  at least one lowercase letter, \r\n  at least one non letter or digit\r\n`.trim();\r\n/**\r\n * Rule structure for react-hook-form\r\n */\r\nexport const PASSWORD_RULE = {\r\n    message: PASSWORD_RULE_MESSAGE,\r\n    value: PASSWORD_RULE_REGEX,\r\n};\r\n/**\r\n * One letter followed by either one or two numbers\r\n * OR\r\n * One letter followed by a second letter that must be one of ABCDEFGHJKLMNOPQRSTUVWXY (i.e..not I or Z) and then followed by either one or two numbers\r\n * OR\r\n * One letter followed by one number and then another letter\r\n * OR\r\n * A two part post code where the first part must be:\r\n * a) One letter followed by a second letter that must be one of ABCDEFGHJKLMNOPQRSTUVWXY(i.e..not I or Z) and then followed by one number and\r\n * optionally a further letter after that\r\n * AND\r\n * b) The second part (separated by a space from the first part) must be One number followed by two letters.\r\n */\r\nexport const POSTCODE_RULE_REGEX = /^(([A-Za-z][0-9]{1,2})|(([A-Za-z][A-HJ-Ya-hj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-HJ-Ya-hj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2}$/;\r\n/**\r\n * Make sure this explains POSTCODE_RULE_REGEX\r\n */\r\nexport const POSTCODE_RULE_MESSAGE = `Please enter a valid postcode`.trim();\r\n/**\r\n * Rule structure for react-hook-form\r\n */\r\nexport const POSTCODE_RULE = {\r\n    message: POSTCODE_RULE_MESSAGE,\r\n    value: POSTCODE_RULE_REGEX,\r\n};\r\n/**\r\n * Rule structure for react-hook-form\r\n */\r\nexport const TELEPHONE_RULE = {\r\n    message: `Please enter a valid phone number`,\r\n    value: /^[\\d+()\\-x ]{10,11}$/,\r\n};\r\n/** Clamp index to be within the min/max index range. */\r\nexport function clamp(value, max) {\r\n    return Math.max(Math.min(value, max), 0);\r\n}\r\n","import * as React from 'react';\r\nimport { useForm as useReactHookForm, } from 'react-hook-form';\r\nexport function useForm(params) {\r\n    const refContainer = 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 onSubmit = async (formData, event) => {\r\n        let res;\r\n        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 resData = (await res.json());\r\n        // If we're showing an error message then change to error.\r\n        if (resData.errors?.length) {\r\n            setStatus('error');\r\n            setServerErrors(resData.errors);\r\n            refContainer.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\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 we're showing a message then change to fulfilled.\r\n        if (resData.message) {\r\n            setStatus('fulfilled');\r\n            setConfirmationMessage(resData.message);\r\n            refContainer.current?.scrollIntoView({ behavior: 'auto', block: 'start' });\r\n            return;\r\n        }\r\n        // If we're redirecting leave status pending.\r\n        if (resData.redirect) {\r\n            window.location.href = resData.redirect;\r\n            return;\r\n        }\r\n    };\r\n    return {\r\n        confirmationMessage,\r\n        refContainer,\r\n        serverErrors,\r\n        status,\r\n        onSubmit: handleSubmit(onSubmit),\r\n        useReactHookFormReturn,\r\n    };\r\n}\r\n","import * as React from 'react';\r\nimport S from './Form.styles';\r\nconst FormSection = React.forwardRef((props, ref) => {\r\n    return (React.createElement(S.Section, { ref: ref, disabled: props.disabled, \"data-visible\": props.visible },\r\n        props.title && React.createElement(S.Title, null, props.title),\r\n        props.content && React.createElement(S.Content, null, props.content),\r\n        props.children));\r\n});\r\nFormSection.displayName = 'FormSection';\r\nexport default FormSection;\r\n","import * as React from 'react';\r\nimport Button from '../Button/Button';\r\nimport ErrorSummary from './ErrorSummary';\r\nimport S from './Form.styles';\r\nconst Form = React.forwardRef(({ children, confirmationMessage, errors = [], showSubmit = true, status = 'initial', submitLabel, onSubmit, ...props }, ref) => {\r\n    return (React.createElement(S.Form, { ref: ref, onSubmit: onSubmit, ...props },\r\n        status === 'error' && errors.length > 0 && React.createElement(ErrorSummary, { errors: errors }),\r\n        status === 'fulfilled' && confirmationMessage && (React.createElement(S.ConfirmationMessage, { dangerouslySetInnerHTML: { __html: confirmationMessage } })),\r\n        status !== 'fulfilled' && children,\r\n        status !== 'fulfilled' && showSubmit && (React.createElement(S.SubmitWrapper, null,\r\n            React.createElement(Button, { buttonType: \"default\", disabled: status === 'pending', type: \"submit\" },\r\n                React.createElement(\"span\", { dangerouslySetInnerHTML: { __html: submitLabel } }))))));\r\n});\r\nForm.displayName = 'Form';\r\nexport default Form;\r\n","var _defs, _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\nfunction SvgTick(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    width: 14,\n    height: 14\n  }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n    id: \"tick_svg__a\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    transform: \"translate(-.359 -.883)\",\n    fill: \"#fff\",\n    stroke: \"#707070\",\n    d: \"M0 0h14v14H0z\"\n  })))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n    transform: \"translate(.359 .883)\",\n    clipPath: \"url(#tick_svg__a)\"\n  }, /*#__PURE__*/React.createElement(\"g\", {\n    \"data-name\": \"tick\",\n    fill: \"#fff\"\n  }, /*#__PURE__*/React.createElement(\"path\", {\n    \"data-name\": \"Rectangle 101\",\n    d: \"M1.728 5.294l4.035 4.035-1.191 1.19L.537 6.486z\"\n  }), /*#__PURE__*/React.createElement(\"path\", {\n    \"data-name\": \"Rectangle 102\",\n    d: \"M12.847 3.243L5.11 10.98 3.84 9.71l7.736-7.738z\"\n  })))));\n}\n\nexport default __webpack_public_path__ + \"c486c35a42ff682d327863b26a3255a4.svg\";\nexport { SvgTick as ReactComponent };","import brand from '@helpers/brand';\r\nimport fonts from '@helpers/fonts';\r\nimport styled from 'styled-components';\r\nconst Select = styled.select `\r\n  /* Ensure iOS doesn't apply default border radius */\r\n  -webkit-appearance: none !important;\r\n  display: block;\r\n  background: ${brand.beige};\r\n  border: 0;\r\n  color: ${brand.greyDark};\r\n  height: 40px;\r\n  ${fonts.brandonGrotesque.regular}\r\n  font-size: 18px;\r\n  margin: 0;\r\n  padding: 7px 12px;\r\n  width: 100%;\r\n\r\n  &:disabled {\r\n    opacity: 0.5;\r\n  }\r\n\r\n  &.focus-ring {\r\n    outline: auto;\r\n    outline-offset: 5px;\r\n  }\r\n`;\r\nconst SelectStyles = {\r\n    Select,\r\n};\r\nexport default SelectStyles;\r\n","import * as React from 'react';\r\nimport { FocusRing } from 'react-aria';\r\nimport S from './Select.styles';\r\nconst Select = React.forwardRef((props, ref) => {\r\n    return (React.createElement(FocusRing, { focusRingClass: \"focus-ring\" },\r\n        React.createElement(S.Select, { ref: ref, ...props })));\r\n});\r\nSelect.displayName = 'Select';\r\nexport default Select;\r\n"],"sourceRoot":""}