{"version":3,"sources":["utils/hexToRgba/index.ts","components/PhoneNumberCta/index.tsx","utils/fluidStyles/index.ts","components/ErrorPage/styles.ts","components/ErrorPage/index.tsx","utils/AppError/index.ts","utils/tracking/createProduct.ts","utils/tracking/index.ts","styles/index.ts","components/Icons/index.tsx","utils/imagePath/index.ts","utils/getConfig/index.ts","components/ExternalLink/index.tsx","components/CustomFreephone/index.tsx","utils/publicPath/index.ts","components/ErrorBoundary/context.ts","components/Markdown/styles.ts","components/Markdown/index.tsx","components/Markdown/Link.tsx","components/Loading/useStyles.ts","components/Loading/index.tsx","components/LinkButton/useStyles.ts","components/LinkButton/index.tsx","components/Img/index.tsx","components/PageContent/index.tsx","components/Cta/useStyles.ts","components/Cta/index.tsx","components/Page/index.tsx","utils/usePage/index.ts","utils/useResetScroll/index.ts","utils/usePageTitle/index.ts","utils/googleOptimize/index.ts","components/ContentContainer/styles.ts","components/ContentContainer/index.tsx","components/PageHeader/styles.ts","components/PageHeader/index.tsx","components/Divider/styles.ts","components/Divider/index.tsx","services/backend/index.ts","utils/useMediaQuery/index.ts","components/Boxout/styles.ts","components/Boxout/index.tsx","utils/campaign/index.ts","components/Logo/index.tsx","components/App/context.tsx","utils/getEnv/index.ts","styles/tokens.ts","components/CustomFreephone/styles.ts","polyfills.ts","utils/i18n/index.ts","pages/errors/BlueGreenErrorPage/index.tsx","pages/errors/SessionExpiredPage/index.tsx","pages/errors/UnspecificErrorPage/index.tsx","components/ErrorBoundary/index.tsx","components/PageRefresh/index.tsx","components/Header/styles.ts","components/Header/index.tsx","components/App/styles.ts","components/App/index.tsx","utils/useMeta/index.ts","styles/themeConfig.ts","fonts/futura-400/464e1370-5b73-493b-a369-ee8ed8d2d36e.woff2","fonts/futura-400/e23cba8f-ab32-49b8-95d3-3dad0150b369.woff","fonts/futura-500/12a2ea1a-ff0f-48ec-b350-21d2115f2b88.woff","fonts/futura-500/61d9e32c-2fc7-4804-967b-0bc17f76f10d.woff2","fonts/futura-700/2fcfc1da-a7af-42d2-87f4-6613b3e5c900.woff","fonts/futura-700/480df9d4-0a52-44dc-a6ea-32b77ac0dfa5.woff2","components/GlobalStyles/index.tsx","components/Providers/index.tsx","boot.tsx","utils/getAppInsightsKey/index.ts","index.tsx","consts.ts","utils/useInfinityTracking/index.ts","utils/useMatelsoTracking/index.ts"],"names":["hex3Char","hex6Char","hex","alpha","matches","match","length","Error","_matches$map","map","seg","parseInt","repeat","_matches$map2","_slicedToArray","r","g","b","concat","PhoneNumberCta","_ref","testId","_useTranslation","useTranslation","common","useInfinityTracking","useMatelsoTracking","_jsx","className","title","href","children","stripUnit","value","parseFloat","replace","range","template","_range","min","max","minUnitless","valueDiff","layoutDiff","layout","maxPageWidth","minPageWidth","breaks","content","css","_templateObject","_taggedTemplateLiteral","spacing","m","midPageWidth","xxl","s","boxout","_templateObject2","ErrorPage","action","message","name","onRetry","refresh","errorBoundary","useErrorBoundary","errors","_useTranslation3","config","history","useHistory","customFreephone","usePage","_jsxs","Page","id","PageId","PageHeader","heading","Divider","PageContent","styles","Markdown","source","mb","Cta","primaryText","onClick","reset","go","Boxout","text","size5","CustomFreephone","boxed","size4","AppError","_Error","_inherits","_super","_createSuper","_this","_classCallCheck","call","_createClass","_wrapNativeSuper","yesOrNo","target","undefined","firstItem","defaultToEmpty","_answersData$obstruct","_answersData$obstruct2","_pricing$installation","answersData","pricing","productCondition","trim","category","brand","rail","variant","obstructions","obstruction","join","price","installationCost","total","toString","quantity","dimensionN","plugSocket","railColour","model","fabric","filter","i","easyTurn","scheduleType","firstScheduledDate","numberOfTurns","track","data","window","dataLayer","push","useTrackPage","_useState","useState","_useState2","isTracked","setIsTracked","useEffect","currentStep","event","page","_objectSpread","trackPurchase","_ref4","currencyCode","revenue","shipping","ecommerce","purchase","actionField","affiliation","products","createProduct","details","useTrackCheckout","_useState3","_useState4","_ref3","condition","step","checkout","trackCheckout","fluidImg","fieldGrid","l","maxFieldWidth","hiddenOnPrint","_templateObject3","visibleOnPrint","_templateObject4","pageGrid","container","_templateObject5","fluidStyles","pageGridGap","full","_templateObject6","visuallyHidden","_templateObject7","base","_templateObject8","size1","_templateObject9","size2","_templateObject10","size3","_templateObject11","_templateObject12","_templateObject13","size6","_templateObject14","size7","_templateObject15","size7Print","_templateObject16","size8","_templateObject17","weight","normal","_templateObject18","bold","_templateObject19","extrabold","_templateObject20","_templateObject21","_templateObject22","_templateObject23","_templateObject24","_templateObject25","_templateObject26","mt","_templateObject27","_templateObject28","ml","xxs","_templateObject29","Alert","_ref$color","color","props","_objectWithoutProperties","_excluded","viewBox","d","fill","ArrowDown","_ref2","_ref2$color","_excluded2","ArrowLeft","_ref3$color","_excluded3","ArrowRight","_ref4$color","_excluded4","ChevronDown","_ref5","_ref5$color","_excluded5","Close","_ref8","_ref8$color","_excluded8","Email","_ref9","_ref9$color","_excluded9","fillRule","Info","_ref10","_ref10$color","_excluded10","Phone","_ref12","_ref12$color","_excluded12","Plus","_ref13","_ref13$color","_excluded13","Star","_ref15","_excluded15","stroke","strokeWidth","Tick","_ref16","_ref16$color","_excluded16","TickSolid","_ref17","_ref17$color","_excluded17","Shield","_ref18","_ref18$color","_excluded18","file","startsWith","publicPath","getConfig","__config","ExternalLink","role","ariaLabel","rel","propStyles","centeredMd","centeredLg","freephoneNumberStyles","freephoneTextStyles","Fragment","path","process","ErrorBoundaryContext","createContext","ErrorBoundaryProvider","Provider","useContext","markdown","colors","blue700","grey800","customComponents","a","ReactMarkdown","components","spin","keyframes","Loading","delay","overlay","_ref$silent","silent","_ref$small","small","_ref$overlay","inner","xs","hexToRgba","grey300","red500","white","useStyles","isVisible","setVisibility","timer","setTimeout","clearTimeout","IconAlignment","LinkButton","icon","_ref$iconAlignment","iconAlignment","Right","_ref$iconSmall","iconSmall","direction","hasIcon","transitionDuration","purple500","Left","type","Img","_ref$alt","alt","src","imagePath","_ref$as","as","Element","_ref$full","highlightColor","orange700","_ref$block","block","disabled","_ref$icon","Icon","image","secondaryText","_ref$restrictTheme","restrictTheme","_theme$cta","_theme$cta2","_theme$cta3","_theme$cta4","_theme$cta5","_theme$cta6","_theme$cta7","arguments","_ref$disabled","_ref$hasImage","hasImage","theme","grey700","grey200","grey500","themed","cta","background","fontWeight","border","outer","useTheme","supportsTheme","themeStylesSwitcher","baseStyles","style","backgroundImage","Link","to","deps","scrollTo","useResetScroll","segments","document","usePageTitle","useCampaign","ContentContainer","orange500","baseURL","REACT_APP_USE_MOCK","csrfHeaderKey","errorMap","AppErrorId","Api403","Api404","Api410","service","axios","create","headers","withCredentials","interceptors","response","use","error","isCancel","ApiCancelled","_error$response","status","Unspecific","request","syncURL","isCsrfSet","url","defaults","isNewSession","patchRequestWithToken","token","_defineProperty","post","then","catch","_process$env$REACT_AP","postStart","postInitialise","putUpdate","put","postDetails","putProductCondition","paymentDetails","postPayConfirm","postSchedule","putSchedule","getInitialPrerequisites","get","putPrerequisitesUpdate","getLocation","zip","getPersonalDetails","putPersonalDetails","getInstallationAddress","putInstallationAddress","getContractType","putContractType","putMarketingCampaign","postEmailQuote","getLead","putLead","query","mediaQuery","useMemo","matchMedia","state","setState","handleChange","addListener","removeListener","grey100","hasGoInStore","campaign","MarketingCampaign","GoInstore","GoInStore","evenListener","addEventListener","sessionStorage","setItem","SessionKey","Campaign","isGoInstoreCampaign","getItem","setMarketingCampaign","_setMarketingCampaign","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","marketingCampaign","Promise","resolve","stop","Logo","height","AppContext","AppContextProvider","detailsPageSelectedTab","setDetailsPageSelectedTab","ctxSetDetailsPageSelectedTab","index","getEnv","domain","location","hostname","zoneDomain","endsWith","Environment","Dev","Test","Staging","includes","Live","Unknown","blue200","green200","green300","green500","green700","green900","yellow200","yellow300","yellow500","orange200","orange300","purple200","purple300","purple700","gold200","gold500","customFreephoneGreen","xl","spacingLayout","freephoneWrapperCommon","freephoneNumberCommon","freephoneTextCommon","freephoneWidthBoxed","customFreephoneStyles","freephoneWrapper","freephoneWrapperBoxed","freephoneWrapperSpacing","freephoneWrapperCenteredMd","freephoneWrapperCenteredLg","freephoneNumber","freephoneNumberBoxed","freephoneText","freephoneTextBoxed","prototype","msMatchesSelector","webkitMatchesSelector","_getConfig","defaultLocale","supportedLocales","i18n","initReactI18next","HttpApi","init","ns","defaultNS","lng","fallbackLng","supportedLngs","load","lowerCaseLng","returnObjects","interpolation","escapeValue","format","toLowerCase","backend","loadPath","BlueGreenErrorPage","errorContent","clear","SessionExpiredPage","UnspecificErrorPage","ErrorBoundary","_Component","handleReset","key","errorInfo","console","log","this","renderChildren","Component","PageRefresh","fluidFontSize","header","logo","contact","contactContent","freephone","oneCallAway","phoneNumberCta","promise","Modal","lazy","Header","isLargeScreen","useMediaQuery","homeUrl","isModalOpen","setModalOpen","width","onClose","size","ModalSizeType","Narrow","skipLink","Footer","NotFoundPage","urlKeyToComponent","home","payment","paymentCancelled","confirmation","personalDetails","installationAddress","scheduleSurvey","prerequisites","contract","lead","urlsKeysToPartiallyMatch","isNotGroup","App","attributes","metaTag","useRef","createElement","Object","entries","forEach","attribute","_metaTag$current","current","setAttribute","_toConsumableArray","parentNode","head","appendChild","useMeta","routes","urls","Route","exact","BrowserRouter","Suspense","fallback","Switch","commonTheme","upholstery","transform","decoration","themeConfig","UNITED_STATES","UNITED_KINGDOM","SPAIN","FRANCE","ITALY","PORTUGAL","GlobalStyles","Global","FAST_FONTS_URL","FontId","Weight400","Weight500","Weight700","FontFamily","Primary","futura400Woff2","futura400Woff","futura500Woff2","futura500Woff","futura700Woff2","futura700Woff","Secondary","Tertiary","marketId","Providers","StrictMode","ThemeProvider","createBrowserHistory","appInsightsKey","AppInsightsKey","getAppInsightsKey","appInsights","ApplicationInsights","instrumentationKey","loadAppInsights","trackPageView","listen","uri","pathname","ReactDOM","render","Router","getElementById","boot","AnalyticsStepLegacy","AnalyticsPageId","ContractType","ProductCondition","Experiment","GoogleReCaptchaSiteKey","GoogleReCaptchaAction","FabricType","MarketType","ModalReconLayout","OptionCategory","OptionGroup","OptionType","PackageType","PrerequisiteType","QuestionType","RailType","ResponseType","ScheduleType","SeatType","SeatSize","TrimType","UpholsteryAnswerType","WorldPayStatusType","SCHEDULE_CHOICE_FORMAT","TrustPilotWidgetType","TRUST_PILOT_SRC","Progress","_window$_ictt","_ictt","_window$mtls","mtls","loaded","scan"],"mappings":"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","file":"static/js/main.8a4fcf8b.chunk.js","sourcesContent":["const hex3Char = /\\w/g;\nconst hex6Char = /\\w\\w/g;\n\n/**\n * Converts a hex colour value to rgba colour value.\n *\n * @param hex hex colour value\n * @param alpha decimal value between 0 and 1\n * @returns rgba colour value\n */\nexport default (hex: string, alpha: number): string => {\n const matches = hex.match(hex.length < 6 ? hex3Char : hex6Char);\n\n if (!matches) {\n throw new Error('Invalid hex provided');\n }\n\n const [r, g, b] = matches.map(seg =>\n parseInt(seg.repeat(2 / seg.length), 16)\n );\n\n return `rgba(${r},${g},${b},${alpha})`;\n};\n","/** @jsxImportSource @emotion/react */\nimport { useTranslation } from 'react-i18next';\n\nimport { TestIdProp } from '../../types';\nimport useInfinityTracking from '../../utils/useInfinityTracking';\nimport useMatelsoTracking from '../../utils/useMatelsoTracking';\n\ntype Props = TestIdProp;\n\nexport default function PhoneNumberCta({ testId }: Props) {\n const [common] = useTranslation('common');\n\n useInfinityTracking();\n\n useMatelsoTracking();\n\n return (\n \n {common('phoneNumber.formatted')}\n \n );\n}\n","import { breaks, layout } from '../../styles/tokens';\nimport { MinMax } from '../../types';\n\nconst stripUnit = (value: string) => parseFloat(value.replace(/[^\\d.-]/g, ''));\n\n/**\n * Utility that takes a min/max range of values and a template to interpolate the computed values. A CSS string is returned.\n *\n * @param range - Accepts a single string for a fixed range or a tuple containing a `min` and `max` string.\n * @param template - Function that provides the computed value. A valid CSS string should be returned.\n * @returns CSS string\n */\nexport default (\n range: string | MinMax,\n template: (value: string) => string\n): string => {\n if (typeof range === 'string') {\n return template(range);\n }\n\n const [min, max] = range;\n const minUnitless = stripUnit(min);\n const maxUnitless = stripUnit(max);\n\n const valueDiff = maxUnitless - minUnitless;\n const layoutDiff = layout.maxPageWidth - layout.minPageWidth;\n\n return `\n ${template(min)}\n\n @media ${breaks.minPageWidth} {\n ${template(\n `calc(${min} + ${valueDiff} * (100vw - ${layout.minPageWidth}px) / ${layoutDiff})`\n )}\n }\n\n @media ${breaks.maxPageWidth} {\n ${template(max)}\n }\n `;\n};\n","import { css } from '@emotion/react';\n\nimport { breaks, spacing } from '../../styles/tokens';\n\nexport const content = css`\n align-items: start;\n display: grid;\n gap: ${spacing.m};\n\n @media ${breaks.midPageWidth} {\n grid-template-columns: 1fr auto;\n gap: ${spacing.xxl};\n }\n\n p + p {\n margin-top: ${spacing.s};\n }\n`;\n\nexport const boxout = css`\n max-width: 17rem;\n`;\n","/** @jsxImportSource @emotion/react */\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport { PageId } from '../../consts';\nimport { heading, mb, text } from '../../styles';\nimport { AppErrorData } from '../../types';\nimport usePage from '../../utils/usePage';\nimport Boxout from '../Boxout';\nimport Cta from '../Cta';\nimport CustomFreephone from '../CustomFreephone';\nimport Divider from '../Divider';\nimport { useErrorBoundary } from '../ErrorBoundary/context';\nimport Markdown from '../Markdown';\nimport Page from '../Page';\nimport PageContent from '../PageContent';\nimport PageHeader from '../PageHeader';\nimport PhoneNumberCta from '../PhoneNumberCta';\nimport * as styles from './styles';\n\ntype Props = AppErrorData;\n\nexport default function ErrorPage({\n action,\n message,\n name,\n onRetry,\n refresh,\n}: Props) {\n const errorBoundary = useErrorBoundary();\n const [errors] = useTranslation('errors');\n const [config] = useTranslation('config');\n const history = useHistory();\n const customFreephone = config('features.customFreephone');\n\n usePage(name);\n\n const handleRetry = () => {\n if (onRetry) {\n // If we are inside an error boundary, reset it\n if (errorBoundary) {\n errorBoundary.reset();\n }\n\n onRetry();\n }\n if (refresh) {\n history.go(0);\n }\n };\n\n return (\n \n \n \n \n \n
\n \n {action && onRetry && (\n

\n \n

\n )}\n
\n \n
\n \n
\n {customFreephone ? (\n \n ) : (\n

\n \n \n \n

\n )}\n
\n
\n
\n );\n}\n","import { AppErrorId } from '../../consts';\nimport { AppErrorData } from '../../types';\n\n/**\n * Application Error class. An instance can be thrown with a member of the `AppErrorId` enum.\n */\nexport default class AppError extends Error {\n /**\n * Create a AppError instance\n *\n * @param id Expects a member of the AppErrorId enum\n * @param onRetry Optional function that represents an action that can be called to retry the event that caused the error\n */\n constructor(public id: AppErrorId, public onRetry?: AppErrorData['onRetry']) {\n super(id);\n this.id = id;\n this.name = 'AppError';\n this.onRetry = onRetry;\n }\n}\n","import {\n ProductCondition,\n RailType,\n ScheduleType,\n SeatSize,\n SeatType,\n} from '../../consts';\nimport { AnswersData, Pricing } from '../../types';\n\nconst separator = '-';\nconst yesOrNo = (target?: boolean) => {\n if (typeof target === undefined) {\n return undefined;\n }\n\n return target ? 'Yes' : 'No';\n};\nconst firstItem = (target?: T[]) => target && target[0];\nconst defaultToEmpty = (target?: T) => target ?? '';\n\nexport type ProductDetails = {\n content: {\n model: SeatType;\n name: string;\n rail: RailType;\n size: SeatSize;\n };\n answersData: AnswersData;\n pricing?: Pricing;\n productCondition?: ProductCondition;\n};\n\ntype Product = {\n /** Package name */\n name: string;\n category: 'Stairlift';\n /** Rail type */\n brand: RailType;\n /** Obstruction, in quotes separated by ' - ' */\n variant: string;\n price: string;\n quantity: '1';\n /** Plug socket */\n dimensionN: 'Yes' | 'No' | '';\n /** Rail colour */\n 'dimensionN+1': string;\n /** Upholstery - e.g. straight-siena-flc-walnut */\n 'dimensionN+2': string;\n /** Easy turn */\n 'dimensionN+3': 'Yes' | 'No' | '';\n /** Schedule type */\n 'dimensionN+4': string | ScheduleType.AsSoonAsPossible;\n /** First scheduled date */\n 'dimensionN+5': string;\n /** Number of turns */\n 'dimensionN+6': string;\n};\n\nexport default ({\n content,\n answersData,\n pricing,\n productCondition,\n}: ProductDetails): Product => ({\n name: `${productCondition ?? ''} ${content.name}`.trim(),\n category: 'Stairlift',\n brand: content.rail,\n variant:\n answersData.obstructions\n ?.map(obstruction => `\"${obstruction}\"`)\n .join(separator) ?? '',\n price: pricing?.installationCost.total.toString() ?? '0',\n quantity: '1',\n dimensionN: defaultToEmpty(yesOrNo(firstItem(answersData.plugSocket))),\n 'dimensionN+1': defaultToEmpty(firstItem(answersData.railColour)),\n 'dimensionN+2': [\n content.rail,\n content.model,\n answersData.fabric,\n answersData.trim,\n ]\n .filter(i => !!i)\n .join(separator),\n 'dimensionN+3': defaultToEmpty(yesOrNo(firstItem(answersData.easyTurn))),\n 'dimensionN+4': defaultToEmpty(firstItem(answersData.scheduleType)),\n 'dimensionN+5': defaultToEmpty(firstItem(answersData.firstScheduledDate)),\n 'dimensionN+6': defaultToEmpty(firstItem(answersData.numberOfTurns)),\n});\n","import { useEffect, useState } from 'react';\n\nimport { AnalyticsPageId, AnalyticsStepLegacy } from '../../consts';\nimport { PaymentResponsePayload, ProductConditionBreakdown } from '../../types';\nimport createProduct, { ProductDetails } from './createProduct';\n\nexport const track = (data: Record) => {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(data);\n\n if (process.env.NODE_ENV === 'development' && 'console' in window) {\n /* eslint-disable no-console */\n console.groupCollapsed('[Tracking] Push');\n Object.entries(data).forEach(([key, value]) => {\n console.log(`${key}:`, value);\n });\n console.groupEnd();\n /* eslint-enable no-console */\n }\n};\n\nexport const useTrackPage = (data?: {\n currentStep?: AnalyticsStepLegacy;\n id: AnalyticsPageId;\n name: string;\n}) => {\n const [isTracked, setIsTracked] = useState(false);\n\n useEffect(() => {\n if (!data || isTracked) return;\n\n setIsTracked(true);\n\n const { currentStep, id, name } = data;\n\n track({\n event: 'configuratorStepLoaded',\n page: {\n ...(currentStep ? { currentStep } : null),\n id,\n name,\n },\n });\n }, [data, isTracked]);\n};\n\ntype CheckoutEvent = {\n data?: ProductDetails;\n condition?: ProductConditionBreakdown;\n step: number;\n};\n\nexport const trackCheckout = ({ data, condition, step }: CheckoutEvent) => {\n track({\n event: `checkoutStep${step}`,\n ecommerce: {\n checkout: {\n actionField: {\n step,\n },\n ...(data\n ? {\n products: [\n createProduct({\n ...data,\n productCondition: condition?.productCondition,\n pricing: condition?.pricing,\n }),\n ],\n }\n : null),\n },\n },\n });\n};\n\ntype PurchaseEvent = {\n currencyCode: string;\n data: PaymentResponsePayload;\n id: string;\n revenue: string;\n shipping: string;\n};\n\nexport const trackPurchase = ({\n currencyCode,\n data,\n id,\n revenue,\n shipping,\n}: PurchaseEvent) => {\n track({\n event: 'paymentConfirmation',\n ecommerce: {\n currencyCode,\n purchase: {\n actionField: {\n id,\n affiliation: 'Online Configurator',\n revenue,\n shipping,\n },\n products: [\n createProduct({\n ...data.details,\n productCondition: data.details.productCondition,\n pricing: data.details.pricing,\n }),\n ],\n },\n },\n });\n};\n\nexport const useTrackCheckout = (data?: CheckoutEvent) => {\n const [isTracked, setIsTracked] = useState(false);\n\n useEffect(() => {\n if (!data || isTracked) return;\n\n setIsTracked(true);\n\n trackCheckout(data);\n }, [data, isTracked]);\n};\n","import { css } from '@emotion/react';\n\nimport fluidStyles from '../utils/fluidStyles';\nimport { layout, pageGridGap, spacing } from './tokens';\n\nexport const fluidImg = css`\n max-width: 100%;\n height: auto;\n`;\n\nexport const fieldGrid = css`\n display: grid;\n gap: ${spacing.l};\n max-width: ${layout.maxFieldWidth};\n margin-top: ${spacing.l};\n`;\n\nexport const hiddenOnPrint = css`\n @media print {\n display: none;\n }\n`;\n\nexport const visibleOnPrint = css`\n display: none;\n @media print {\n display: grid;\n }\n`;\n\nexport const pageGrid = {\n container: css`\n display: grid;\n ${fluidStyles(pageGridGap, value => `grid-column-gap: ${value};`)}\n grid-template-columns:\n [full-start] minmax(0, 1fr) [main-start] minmax(\n 0,\n ${layout.maxPageWidth}px\n )\n [main-end] minmax(0, 1fr) [full-end];\n\n > * {\n grid-column: main;\n }\n `,\n full: css`\n grid-column: full;\n `,\n};\n\nexport const visuallyHidden = css`\n border: 0;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n`;\n\n/** Font sizes */\nexport const text = {\n /** Body text */\n base: css`\n font-size: 1rem;\n line-height: 1.5;\n `,\n /** Text size 1 */\n size1: css`\n font-size: 2.2rem;\n line-height: 1.2;\n `,\n /** Text size 2 */\n size2: css`\n font-size: 1.7rem;\n line-height: 1.2;\n `,\n /** Text size 3 */\n size3: css`\n font-size: 1.4rem;\n line-height: 1.3333;\n `,\n /** Text size 4 */\n size4: css`\n font-size: 1.2rem;\n line-height: 1.4;\n `,\n /** Text size 5 */\n size5: css`\n font-size: 1rem;\n line-height: 1.5;\n `,\n /** Text size 6 */\n size6: css`\n font-size: 0.9rem;\n line-height: 1.5;\n `,\n /** Text size 7 */\n size7: css`\n font-size: 0.77rem;\n line-height: 1.5;\n `,\n /** Text size 7 */\n size7Print: css`\n font-size: 0.77rem;\n line-height: 1.15;\n `,\n /** Text size 8 */\n size8: css`\n font-size: 0.65rem;\n line-height: 1.25;\n `,\n};\n\n/** Font weights */\nexport const weight = {\n normal: css`\n font-weight: 400;\n `,\n bold: css`\n font-weight: 500;\n `,\n extrabold: css`\n font-weight: 700;\n `,\n};\n\nexport const heading = {\n /** Heading size 1 */\n size1: css`\n ${text.size1};\n ${weight.bold};\n `,\n /** Heading size 2 */\n size2: css`\n ${text.size2};\n ${weight.bold};\n `,\n /** Heading size 3 */\n size3: css`\n ${text.size3};\n ${weight.bold};\n `,\n /** Heading size 4 */\n size4: css`\n ${text.size4};\n ${weight.bold};\n `,\n /** Heading size 5 */\n size5: css`\n ${text.size5};\n ${weight.bold};\n `,\n /** Heading size 6 */\n size6: css`\n ${text.size6};\n ${weight.bold};\n `,\n};\n\nexport const mt = {\n s: css`\n margin-top: ${spacing.s};\n `,\n};\n\nexport const mb = {\n s: css`\n margin-bottom: ${spacing.s};\n `,\n};\n\nexport const ml = {\n xxs: css`\n margin-left: ${spacing.xxs};\n `,\n};\n","/** @jsxImportSource @emotion/react */\nexport type Props = { color?: string; title?: string };\n\nexport function Alert({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ArrowDown({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ArrowLeft({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ArrowRight({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ChevronDown({\n color = 'currentColor',\n title,\n ...props\n}: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ChevronLeft({\n color = 'currentColor',\n title,\n ...props\n}: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function ChevronRight({\n color = 'currentColor',\n title,\n ...props\n}: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Close({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Email({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Info({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Menu({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Phone({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Plus({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function Refresh({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n \n \n );\n}\n\nexport function Star({ title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n \n \n \n );\n}\n\nexport function Tick({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n );\n}\n\nexport function TickSolid({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n \n \n \n );\n}\n\nexport function Shield({ color = 'currentColor', title, ...props }: Props) {\n return (\n \n {title && {title}}\n \n \n \n \n \n \n );\n}\n","import publicPath from '../publicPath';\n\n/**\n * Prefixes the provided path with the public image path.\n *\n * @param file The file name/path that exists inside the images directory.\n */\nexport default (file: string) =>\n file.startsWith('http') ? file : publicPath(`/images/${file}`);\n","export default function getConfig() {\n if (!window.__config) {\n throw new Error('Environment config not found');\n }\n\n return window.__config;\n}\n","/** @jsxImportSource @emotion/react */\nimport { AnchorHTMLAttributes } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { visuallyHidden } from '../../styles';\n\ntype Props = AnchorHTMLAttributes;\ntype Additional = {\n ariaLabel?: string;\n};\n\nexport default function ExternalLink({\n children,\n href,\n role,\n ariaLabel,\n ...props\n}: Props & Additional) {\n const [common] = useTranslation('common');\n\n return (\n \n {children}\n - {common('externalLink')}\n \n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { Fragment } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport PhoneNumberCta from '../PhoneNumberCta';\nimport * as styles from './styles';\n\ntype Props = {\n boxed?: boolean;\n testId: string;\n spacing?: boolean;\n centeredMd?: boolean;\n centeredLg?: boolean;\n};\n\nexport default function CustomFreephone(props: Props) {\n const [common] = useTranslation('common');\n const propStyles = [\n props.spacing && styles.freephoneWrapperSpacing,\n props.centeredMd && styles.freephoneWrapperCenteredMd,\n props.centeredLg && styles.freephoneWrapperCenteredLg,\n props.boxed ? styles.freephoneWrapperBoxed : styles.freephoneWrapper,\n ];\n const freephoneNumberStyles = [\n props.boxed ? styles.freephoneNumberBoxed : styles.freephoneNumber,\n ];\n const freephoneTextStyles = [\n props.boxed ? styles.freephoneTextBoxed : styles.freephoneText,\n ];\n\n return (\n \n
\n
\n \n
\n
\n {common('customFreephoneText')}\n
\n
\n
\n );\n}\n","/**\n * Prefixes the provided path with the public path.\n *\n * @param path The file name/path that exists inside the public directory.\n */\nexport default (path: string) => `${process.env.PUBLIC_URL}${path}`;\n","import { createContext, useContext } from 'react';\n\ntype ErrorBoundaryApi = { reset: () => void };\n\nconst ErrorBoundaryContext = createContext(null);\n\nexport const ErrorBoundaryProvider = ErrorBoundaryContext.Provider;\n\nexport const useErrorBoundary = () => useContext(ErrorBoundaryContext);\n","import { css } from '@emotion/react';\n\nimport { colors } from '../../styles/tokens';\n\nexport const markdown = css`\n a {\n color: ${colors.blue700};\n }\n a[href*='###'] {\n color: ${colors.grey800};\n }\n`;\n","/** @jsxImportSource @emotion/react */\nimport ReactMarkdown from 'react-markdown';\n\nimport Link from './Link';\nimport * as styles from './styles';\n\nconst customComponents = { a: Link };\n\nexport default function Markdown({ source, ...props }: { source?: string }) {\n return source ? (\n \n {source}\n \n ) : null;\n}\n","/** @jsxImportSource @emotion/react */\nimport { AnchorHTMLAttributes, ReactNode } from 'react';\n\nimport useInfinityTracking from '../../utils/useInfinityTracking';\nimport useMatelsoTracking from '../../utils/useMatelsoTracking';\nimport ExternalLink from '../ExternalLink';\n\ntype Props = { children: ReactNode } & AnchorHTMLAttributes;\nexport default function Link({ children, href }: Props) {\n useInfinityTracking();\n\n useMatelsoTracking();\n\n if (href?.startsWith('http')) {\n return {children};\n }\n if (href?.startsWith('tel:')) {\n return (\n \n {children}\n \n );\n }\n return {children};\n}\n","import { css, keyframes } from '@emotion/react';\n\nimport { colors, spacing } from '../../styles/tokens';\nimport hexToRgba from '../../utils/hexToRgba';\n\ntype StyleOptions = { small?: boolean; overlay?: boolean };\n\nconst spin = keyframes`\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nexport default ({ small = false, overlay = false }: StyleOptions) => ({\n base:\n overlay &&\n css`\n align-items: center;\n display: flex;\n left: 0;\n height: 100vh;\n justify-content: center;\n position: absolute;\n top: 0;\n z-index: 1;\n width: 100vw;\n `,\n inner: [\n css`\n align-items: center;\n display: grid;\n grid-auto-flow: column;\n grid-gap: ${small ? spacing.xs : spacing.s};\n justify-content: center;\n\n &::before {\n animation: ${spin} 1s linear infinite;\n border: 2px solid ${hexToRgba(colors.grey300, 0.25)};\n border-top-color: ${colors.red500};\n border-radius: 100%;\n content: '';\n display: block;\n height: ${small ? spacing.s : spacing.l};\n width: ${small ? spacing.s : spacing.l};\n }\n `,\n overlay &&\n css`\n background-color: ${colors.white};\n border-radius: ${spacing.xxs};\n box-shadow: 0px 1px 4px rgba(51, 51, 51, 0.12);\n padding: ${spacing.s};\n `,\n ],\n});\n","/** @jsxImportSource @emotion/react */\nimport { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport useStyles from './useStyles';\n\ntype Props = {\n delay?: number;\n overlay?: boolean;\n silent?: boolean;\n small?: boolean;\n text?: string;\n};\n\nexport default function Loading({\n delay,\n overlay,\n silent = false,\n small = false,\n text,\n ...props\n}: Props) {\n const styles = useStyles({ overlay, small });\n const [common] = useTranslation('common');\n const [isVisible, setVisibility] = useState(!delay);\n\n useEffect(() => {\n if (!delay) {\n return undefined;\n }\n\n const timer = setTimeout(() => {\n setVisibility(true);\n }, delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [delay]);\n\n return isVisible ? (\n
\n
\n {!silent && {text || common('loading')}}\n
\n
\n ) : null;\n}\n","import { css } from '@emotion/react';\n\nimport { weight } from '../../styles';\nimport { colors, spacing, transitionDuration } from '../../styles/tokens';\n\ntype Options = {\n direction: IconAlignment;\n iconSmall: boolean;\n hasIcon: boolean;\n};\n\nexport enum IconAlignment {\n 'Left',\n 'Right',\n}\n\nexport default ({ direction, iconSmall, hasIcon }: Options) => ({\n base: css`\n appearance: none;\n background: none;\n border: 0;\n color: ${colors.grey800};\n cursor: pointer;\n display: inline;\n padding: 0;\n margin: 0;\n font: inherit;\n ${weight.bold};\n text-align: inherit;\n text-decoration: underline;\n transition: color ${transitionDuration} ease-in-out;\n\n &:hover {\n color: ${colors.purple500};\n }\n `,\n inner: [\n css`\n align-items: start;\n display: grid;\n gap: ${spacing.xs};\n `,\n hasIcon &&\n css`\n grid-template-columns: ${direction === IconAlignment.Left\n ? `auto 1fr`\n : `1fr auto`};\n `,\n ],\n icon: css`\n &,\n svg {\n height: ${iconSmall ? spacing.s : spacing.m};\n width: ${iconSmall ? spacing.s : spacing.m};\n }\n `,\n});\n","/** @jsxImportSource @emotion/react */\nimport { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport { TestIdProp } from '../../types';\nimport useStyles, { IconAlignment } from './useStyles';\n\ntype Props = ButtonHTMLAttributes &\n Required & {\n icon?: ReactNode;\n iconAlignment?: IconAlignment;\n iconSmall?: boolean;\n };\n\nexport { IconAlignment };\n\nexport default function LinkButton({\n children,\n icon,\n iconAlignment = IconAlignment.Right,\n iconSmall = false,\n testId,\n ...props\n}: Props) {\n const styles = useStyles({\n direction: iconAlignment,\n iconSmall,\n hasIcon: !!icon,\n });\n\n return (\n \n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { ImgHTMLAttributes } from 'react';\n\nimport { TestIdProp } from '../../types';\nimport imagePath from '../../utils/imagePath';\n\ntype Props = ImgHTMLAttributes & TestIdProp & { src: string };\n\nexport default function Img({ alt = '', src, testId, ...props }: Props) {\n return (\n {alt}\n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { ReactNode } from 'react';\n\nimport { pageGrid } from '../../styles';\n\ntype Props = { as?: string; children: ReactNode; full?: boolean };\n\nexport default function PageContent({\n as: Element = 'div',\n full = false,\n ...props\n}: Props) {\n return ;\n}\n","import { css, Theme } from '@emotion/react';\n\nimport { weight } from '../../styles';\nimport {\n breaks,\n colors,\n spacing,\n transitionDuration,\n} from '../../styles/tokens';\nimport hexToRgba from '../../utils/hexToRgba';\n\ntype StyleOptions = {\n block?: boolean;\n disabled?: boolean;\n hasImage?: boolean;\n theme?: Theme;\n};\n\nconst highlightColor = colors.orange700;\n\nexport default ({\n block = false,\n disabled = false,\n hasImage = false,\n theme,\n}: StyleOptions = {}) => ({\n base: [\n css`\n appearance: none;\n background-color: ${colors.white};\n border: 0;\n box-shadow: 0px 3px 4px ${hexToRgba(colors.grey800, 0.12)};\n display: inline-flex;\n font: inherit;\n ${weight.bold};\n letter-spacing: 0.01em;\n margin: 0;\n padding: 0;\n position: relative;\n text-align: left;\n text-decoration: none;\n transition-property: background-color, box-shadow, color;\n width: 100%;\n -webkit-tap-highlight-color: ${hexToRgba(highlightColor, 0.1)};\n\n &,\n &[href^='tel:'] {\n color: ${colors.grey800};\n }\n\n &,\n &::after {\n border-radius: ${spacing.xxs};\n transition-duration: ${transitionDuration};\n }\n\n &::after {\n border: 2px solid ${colors.grey700};\n bottom: 0;\n content: '';\n display: block;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n transition-property: border-color, box-shadow;\n }\n `,\n disabled\n ? css`\n background-color: ${colors.grey200};\n color: ${colors.grey700};\n\n &,\n &[href^='tel:'] {\n color: ${colors.grey700};\n }\n\n &::after {\n border-color: ${colors.grey500};\n }\n `\n : css`\n cursor: pointer;\n\n &:focus,\n &:hover {\n box-shadow: 0px 3px 6px ${hexToRgba(highlightColor, 0.18)};\n outline: 0;\n }\n\n &:focus::after,\n &:hover::after {\n border-color: ${highlightColor};\n }\n `,\n !block &&\n css`\n @media ${breaks.midPageWidth} {\n min-width: 18rem;\n width: auto;\n }\n `,\n ],\n themed: [\n css`\n background-color: ${theme?.cta?.background};\n ${theme?.cta?.fontWeight};\n &,\n &[href^='tel:'] {\n color: ${theme?.cta?.text};\n }\n &::after {\n border: 2px solid ${theme?.cta?.border};\n }\n `,\n disabled\n ? css`\n background-color: ${colors.grey200};\n color: ${colors.grey700};\n &,\n &[href^='tel:'] {\n color: ${colors.grey700};\n }\n\n &::after {\n border-color: ${colors.grey500};\n }\n `\n : css`\n background-color: ${theme?.cta?.background};\n &,\n &[href^='tel:'] {\n &:hover {\n color: ${theme?.cta?.text};\n }\n }\n &:focus::after,\n &:hover::after {\n border-color: ${theme?.cta?.border};\n }\n `,\n ],\n outer: [\n css`\n width: 100%;\n `,\n hasImage &&\n css`\n display: grid;\n grid-template-columns: 6.5rem 1fr;\n grid-template-rows: 6.5rem;\n height: 100%;\n\n @media ${breaks.midPageWidth} {\n grid-template-columns: none;\n grid-template-rows: auto 1fr;\n }\n `,\n ],\n inner: [\n css`\n align-items: center;\n display: grid;\n grid-gap: ${spacing.xs};\n grid-template-columns: 1fr auto;\n min-height: 4.5rem;\n padding: 0.7rem ${spacing.xs} 0.75rem 0.75rem;\n `,\n hasImage &&\n css`\n @media ${breaks.midPageWidth} {\n min-height: auto;\n }\n `,\n ],\n image: css`\n background-color: ${colors.grey200};\n background-position: 50% 50%;\n background-repeat: no-repeat;\n background-size: auto 100%;\n display: grid;\n\n @media ${breaks.midPageWidth} {\n height: 7.5rem;\n }\n `,\n secondaryText: css`\n display: block;\n `,\n icon: [\n css`\n color: ${highlightColor};\n display: block;\n height: ${spacing.m};\n width: ${spacing.m};\n `,\n disabled &&\n css`\n color: inherit;\n `,\n ],\n});\n","/** @jsxImportSource @emotion/react */\nimport { SerializedStyles, useTheme } from '@emotion/react';\nimport { MouseEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\n\nimport { CtaText, Image, TestIdProp } from '../../types';\nimport imagePath from '../../utils/imagePath';\nimport useInfinityTracking from '../../utils/useInfinityTracking';\nimport useMatelsoTracking from '../../utils/useMatelsoTracking';\nimport ExternalLink from '../ExternalLink';\nimport { ArrowRight, Props as IconProps } from '../Icons';\nimport useStyles from './useStyles';\n\ntype Props = CtaText &\n Required & {\n block?: boolean;\n disabled?: boolean;\n href?: string;\n icon?: (props: IconProps) => JSX.Element;\n image?: Image;\n onClick?: (event: MouseEvent) => void;\n restrictTheme?: boolean;\n iconTheme?: boolean;\n };\n\nexport default function Cta({\n block = false,\n disabled,\n href,\n icon: Icon = ArrowRight,\n image,\n testId,\n primaryText,\n secondaryText,\n restrictTheme = false,\n ...props\n}: Props) {\n const theme = useTheme();\n const styles = useStyles({ block, disabled, hasImage: !!image, theme });\n\n const [config] = useTranslation('config');\n const supportsTheme = config('features.hasTheme');\n\n useInfinityTracking();\n\n useMatelsoTracking();\n\n const themeStylesSwitcher = (baseStyles: (false | SerializedStyles)[]) => {\n if (supportsTheme && !restrictTheme) {\n return [baseStyles, styles.themed];\n }\n return [baseStyles];\n };\n\n const content = (\n
\n {image && (\n \n )}\n
\n
\n {primaryText}\n {secondaryText && (\n {secondaryText}\n )}\n
\n \n
\n
\n );\n\n if (href) {\n if (href.startsWith('http')) {\n return (\n \n {content}\n \n );\n }\n\n if (href.startsWith('tel:')) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n \n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { ReactNode } from 'react';\n\nimport { PageId } from '../../consts';\nimport { pageGrid } from '../../styles';\n\ntype Props = { as?: string; children: ReactNode; id: PageId };\n\nexport default function Page({ as: Element = 'section', id, ...props }: Props) {\n return (\n \n );\n}\n","import { useCampaign } from '../campaign';\nimport { useGoogleOptimizeEffect } from '../googleOptimize';\nimport useInfinityTracking from '../useInfinityTracking';\nimport useMatelsoTracking from '../useMatelsoTracking';\nimport usePageTitle from '../usePageTitle';\nimport useResetScroll from '../useResetScroll';\n\nexport default function usePage(title?: string) {\n useResetScroll();\n\n usePageTitle(title);\n\n useGoogleOptimizeEffect();\n\n useInfinityTracking();\n\n useMatelsoTracking();\n\n useCampaign();\n}\n","import { DependencyList, useEffect } from 'react';\n\n/**\n * React Hook that resets the scroll position on initial render.\n *\n * @param deps If present, effect will only activate if the values in the list change.\n */\nexport default (deps: DependencyList = []) => {\n useEffect(() => {\n window.scrollTo(0, 0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useEffect } from 'react';\n\nconst defaultTitle = process.env.REACT_APP_PAGE_TITLE;\n\nexport default (title?: string) => {\n useEffect(() => {\n const segments = [];\n\n if (title) {\n segments.push(title);\n }\n\n segments.push(defaultTitle);\n\n document.title = segments.join(' - ');\n }, [title]);\n};\n","import { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { setTimeout } from 'timers';\n\nimport { Experiment } from '../../consts';\nimport { track } from '../tracking';\n\nexport function useGoogleOptimizeEffect() {\n useEffect(() => {\n // Push Google Optimise activation event to data layer\n track({ event: 'optimize.activate' });\n });\n}\n\nexport function useExperimentValue(\n experiment = Experiment.Id,\n fallbackToExperiment = false\n) {\n const [config] = useTranslation('config');\n const hasExperiment = config('features.hasExperiment');\n const [isExperiment, setIsExperiment] = useState(fallbackToExperiment);\n const experimentId = experiment;\n const interval = Experiment.Interval;\n const timeout = Experiment.Timeout;\n\n useEffect(() => {\n track({ event: 'optimize.activate' });\n\n const intervalId = setInterval(() => {\n if (hasExperiment) {\n if (window.google_optimize?.get(experimentId) !== undefined) {\n const variant = window.google_optimize.get(experimentId);\n\n setIsExperiment(variant === '1');\n clearInterval(intervalId);\n } else if (process.env.NODE_ENV === 'development') {\n clearInterval(intervalId);\n }\n } else {\n clearInterval(intervalId);\n }\n }, interval);\n\n const timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n }, timeout);\n\n return () => {\n clearTimeout(timeoutId);\n };\n });\n return isExperiment;\n}\n","import { css } from '@emotion/react';\n\nexport const base = css`\n max-width: 40rem;\n margin-right: auto;\n width: 100%;\n`;\n","/** @jsxImportSource @emotion/react */\nimport { ReactNode } from 'react';\n\nimport * as styles from './styles';\n\ntype Props = { as?: string; children: ReactNode; role?: string };\n\nexport default function ContentContainer({\n as: Element = 'div',\n ...props\n}: Props) {\n return ;\n}\n","import { css } from '@emotion/react';\n\nimport { heading } from '../../styles';\nimport { spacing } from '../../styles/tokens';\n\nexport const title = css`\n ${heading.size2};\n margin-top: ${spacing.l};\n @media print {\n margin-top: 0;\n padding-left: ${spacing.s};\n }\n`;\n","/** @jsxImportSource @emotion/react */\nimport { ReactNode } from 'react';\n\nimport ContentContainer from '../ContentContainer';\nimport * as styles from './styles';\n\ntype Props = { children?: ReactNode; heading: string };\n\nexport default function PageHeader({ children, heading }: Props) {\n return (\n \n

{heading}

\n {children}\n
\n );\n}\n","import { css } from '@emotion/react';\n\nimport { colors, spacing } from '../../styles/tokens';\n\nexport const base = css`\n background-color: ${colors.orange500};\n display: block;\n height: 2px;\n margin: ${spacing.s} 0;\n width: ${spacing.m};\n`;\n","/** @jsxImportSource @emotion/react */\nimport * as styles from './styles';\n\nexport default function Divider() {\n return
;\n}\n","import axios, { AxiosError, AxiosRequestConfig } from 'axios';\n\nimport { AppErrorId } from '../../consts';\nimport AppError from '../../utils/AppError';\nimport {\n getContractTypeResponseData,\n getInitialPrerequisitesResponseData,\n getInstallationAddressResponseData,\n getLeadResponseData,\n getLocationResponseData,\n getPersonalDetailsResponseData,\n postEmailQuoteRequestData,\n postEmailQuoteResponseData,\n postInitialiseResponseData,\n postPayResponseData,\n postScheduleRequestData,\n postScheduleResponseData,\n postStartRequestData,\n postStartResponseData,\n putContractTypeRequestData,\n putInstallationAddressRequestData,\n putLeadRequestData,\n putMarketingCampaignRequestData,\n putPersonalDetailsRequestData,\n putPrerequisitesUpdateRequestData,\n putProductConditionRequestData,\n putScheduleRequestData,\n putScheduleResponseData,\n putUpdateRequestData,\n putUpdateResponseData,\n} from './types';\n\nexport const baseURL =\n process.env.REACT_APP_USE_MOCK === 'false' &&\n process.env.NODE_ENV === 'development'\n ? '/v1'\n : '/api/v1';\nexport const csrfHeaderKey = 'X-CSRF-TOKEN';\nconst errorMap: Record = {\n '403': AppErrorId.Api403,\n '404': AppErrorId.Api404,\n '410': AppErrorId.Api410,\n};\n\nconst service = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n withCredentials: true,\n});\n\nservice.interceptors.response.use(undefined, (error: AxiosError) => {\n if (axios.isCancel(error)) {\n throw new AppError(AppErrorId.ApiCancelled);\n } else {\n const status = error.response?.status.toString();\n\n throw new AppError(\n status && status in errorMap ? errorMap[status] : AppErrorId.Unspecific\n );\n }\n});\n\n// Check if the CSRF header is set and run a sync request if it's not\nservice.interceptors.request.use(config => {\n const syncURL = '/stairlift/sync';\n const startURL = '/stairlift/start';\n\n const isCsrfSet =\n config.url === syncURL || service.defaults.headers.common[csrfHeaderKey];\n\n const isNewSession = config.url === startURL;\n\n // If CSRF header is already set return the config. Unless it's a /start call\n if (isCsrfSet && !isNewSession) {\n return config;\n }\n\n const patchRequestWithToken = (token = '') => {\n // Add token as a default header for subsequent requests\n service.defaults.headers.common[csrfHeaderKey] = token;\n\n // Return the config for current request, with CSRF header set\n return {\n ...config,\n headers: { ...config.headers, [csrfHeaderKey]: token },\n };\n };\n\n return service\n .post<{ token: string }>(syncURL, null)\n .then(({ data: { token } }) => patchRequestWithToken(token))\n .catch(() => patchRequestWithToken(undefined));\n});\n\n// Set a buildID for all HTTP API requests\nservice.interceptors.request.use(request => {\n if (request.headers) {\n request.headers['build-id'] = process.env.REACT_APP_BUILD_ID ?? 'null';\n }\n return request;\n});\n\nexport const postStart = (\n data: postStartRequestData,\n config?: AxiosRequestConfig\n) => service.post('/stairlift/start', data, config);\n\nexport const postInitialise = (config?: AxiosRequestConfig) =>\n service.post(\n '/stairlift/initialise',\n null,\n config\n );\n\nexport const putUpdate = (\n data: putUpdateRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/update', data, config);\n\nexport const postDetails = (config?: AxiosRequestConfig) =>\n service.post('/stairlift/details', null, config);\n\nexport const putProductCondition = (\n productCondition?: putProductConditionRequestData,\n config?: AxiosRequestConfig\n) =>\n service.put('/stairlift/details:productCondition', productCondition, config);\n\nexport const paymentDetails = (config?: AxiosRequestConfig) => {\n return service.post('/stairlift/pay', null, {\n ...config,\n headers: {\n ...config?.headers,\n },\n });\n};\n\nexport const postPayConfirm = (config?: AxiosRequestConfig) =>\n service.post('/stairlift/pay:confirm', null, config);\n\nexport const postSchedule = (\n data: postScheduleRequestData,\n config?: AxiosRequestConfig\n) =>\n service.post('/stairlift/schedule', data, config);\n\nexport const putSchedule = (\n data: putScheduleRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/schedule', data, config);\n\nexport const getInitialPrerequisites = (config?: AxiosRequestConfig) =>\n service.get(\n '/stairlift/prerequisites/initialise',\n config\n );\n\nexport const putPrerequisitesUpdate = (\n data: putPrerequisitesUpdateRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/prerequisites/update', data, config);\n\nexport const getLocation = (zip: string, config?: AxiosRequestConfig) =>\n service.get(`/location/${zip}`, config);\n\nexport const getPersonalDetails = (config?: AxiosRequestConfig) =>\n service.get('/stairlift/personal-details', {\n ...config,\n data: null,\n });\n\nexport const putPersonalDetails = (\n data: putPersonalDetailsRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/personal-details', data, config);\n\nexport const getInstallationAddress = (config?: AxiosRequestConfig) =>\n service.get(\n '/stairlift/installation-address',\n {\n ...config,\n data: null,\n }\n );\n\nexport const putInstallationAddress = (\n data: putInstallationAddressRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/installation-address', data, config);\n\nexport const getContractType = (config?: AxiosRequestConfig) =>\n service.get('/stairlift/contract-type', config);\n\nexport const putContractType = (\n data: putContractTypeRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/contract-type', data, config);\n\nexport const putMarketingCampaign = (\n data: putMarketingCampaignRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/marketing-campaign', data, config);\n\nexport const postEmailQuote = (\n data: postEmailQuoteRequestData,\n config?: AxiosRequestConfig\n) =>\n service.post(\n '/stairlift/email-quote',\n data,\n config\n );\n\nexport const getLead = (config?: AxiosRequestConfig) =>\n service.get('/stairlift/lead', config);\n\nexport const putLead = (\n data: putLeadRequestData,\n config?: AxiosRequestConfig\n) => service.put('/stairlift/lead', data, config);\n","import { useEffect, useMemo, useState } from 'react';\n\n/**\n * React Hook that listens to a media query. Returning a boolean state.\n *\n * @param query - Accepts a media query string\n * @returns boolean state\n */\nexport default (query: string): boolean => {\n const mediaQuery = useMemo(() => window.matchMedia(query), [query]);\n const [state, setState] = useState(mediaQuery.matches);\n\n useEffect(() => {\n const handleChange = ({ matches }: MediaQueryListEvent) => {\n setState(matches);\n };\n\n // Safari does not support newer syntax\n // `mediaQuery.addEventListener('change', handleChange)`\n mediaQuery.addListener(handleChange);\n\n return () => {\n // Safari does not support newer syntax\n // `mediaQuery.removeEventListener('change', handleChange)`\n mediaQuery.removeListener(handleChange);\n };\n }, [mediaQuery]);\n\n return state;\n};\n","import { css } from '@emotion/react';\n\nimport { colors, spacing } from '../../styles/tokens';\n\nexport const base = css`\n background-color: ${colors.grey100};\n border-radius: ${spacing.xxs};\n margin: 0 auto;\n max-width: 41rem;\n padding: ${spacing.l};\n text-align: center;\n`;\n","/** @jsxImportSource @emotion/react */\nimport { ReactNode } from 'react';\n\nimport * as styles from './styles';\n\ntype Props = { children: ReactNode };\n\nexport default function Boxout({ children, ...props }: Props) {\n return (\n
\n {children}\n
\n );\n}\n","import { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { GoInStore, MarketingCampaign, SessionKey } from '../../consts';\nimport { putMarketingCampaign } from '../../services/backend';\n\nconst campaignEventListener = (campaign: MarketingCampaign, event: string) => {\n window.addEventListener(event, () => {\n sessionStorage.setItem(SessionKey.Campaign, campaign);\n });\n};\n\nexport function useCampaign() {\n const [config] = useTranslation('config');\n const hasGoInStore = config('features.hasGoInStore');\n\n useEffect(() => {\n if (hasGoInStore)\n campaignEventListener(\n MarketingCampaign.GoInstore,\n GoInStore.evenListener\n );\n }, [hasGoInStore]);\n}\n\nexport function isGoInstoreCampaign() {\n return (\n sessionStorage.getItem(SessionKey.Campaign) === MarketingCampaign.GoInstore\n );\n}\n\nexport async function setMarketingCampaign() {\n return isGoInstoreCampaign()\n ? putMarketingCampaign({\n marketingCampaign: MarketingCampaign.GoInstore,\n })\n : Promise.resolve();\n}\n","/** @jsxImportSource @emotion/react */\nimport { useTranslation } from 'react-i18next';\n\nexport default function Logo() {\n const [common] = useTranslation('common');\n const title = common('logo');\n\n return (\n \n {title}\n \n \n );\n}\n","import { createContext, ReactNode, useState } from 'react';\n\ntype AppContextProviderProps = {\n children: ReactNode;\n};\n\ntype AppContextProps = {\n detailsPageSelectedTab: number;\n ctxSetDetailsPageSelectedTab: (index: number) => void;\n};\n\nexport const AppContext = createContext(null);\n\nexport const AppContextProvider = (props: AppContextProviderProps) => {\n // Details Page Tab\n const [detailsPageSelectedTab, setDetailsPageSelectedTab] = useState(0);\n const ctxSetDetailsPageSelectedTab = (index: number) => {\n setDetailsPageSelectedTab(index);\n };\n\n return (\n \n {props.children}\n \n );\n};\n\nexport default AppContextProvider;\n","import { Environment } from '../../consts';\n\nexport default function getEnv() {\n const domain = window.location.hostname;\n const zoneDomain = ['stannah.zone.agency', 'e-commerce.stannah.co.uk'];\n\n if (\n domain.endsWith(`-dev.${zoneDomain[0]}`) ||\n domain.endsWith(`-dev.${zoneDomain[1]}`)\n )\n return Environment.Dev;\n if (\n domain.endsWith(`-test.${zoneDomain[0]}`) ||\n domain.endsWith(`-test.${zoneDomain[1]}`)\n )\n return Environment.Test;\n if (\n domain.endsWith(`-staging.${zoneDomain[0]}`) ||\n domain.endsWith(`-staging.${zoneDomain[1]}`)\n )\n return Environment.Staging;\n if (\n domain.endsWith(`-live.${zoneDomain[0]}`) ||\n domain.endsWith(`-live.${zoneDomain[1]}`) ||\n [\n 'my.stannah.co.uk',\n 'shop.stannah-stairlifts.com',\n 'meu.stannah.pt',\n 'mi.stannah.es',\n 'mon.stannah.fr',\n 'crea.stannah.it',\n ].includes(domain)\n )\n return Environment.Live;\n\n return Environment.Unknown;\n}\n","import { MinMax } from '../types';\n\nconst maxPageWidth = 1200;\nconst midPageWidth = 720;\nconst minPageWidth = 360;\nconst maxFieldWidth = '26.5rem';\n\nexport const colors = {\n white: '#fff',\n red500: '#b50000',\n grey100: '#faf9f7',\n grey200: '#f5f3ef',\n grey300: '#cccac7',\n grey500: '#9c9696',\n grey700: '#5c5555',\n grey800: '#333',\n blue200: '#edf8fc',\n blue700: '#006695',\n green200: '#fbfdf4',\n green300: '#f2f9dd',\n green500: '#9abc00',\n green700: '#85a202',\n green900: '#006D4C',\n yellow200: '#fef7e0',\n yellow300: '#ffedb1',\n yellow500: '#e4b720',\n orange200: '#fef5ed',\n orange300: '#ffebd9',\n orange500: '#f0ab00',\n orange700: '#eb7c0f',\n purple200: '#f8f4f9',\n purple300: '#f3e3f6',\n purple500: '#793e74',\n purple700: '#661376',\n gold200: '#f9f4e9',\n gold500: '#9a6e0B',\n customFreephoneGreen: '#72BF44',\n};\n\nexport const breaks = {\n maxPageWidth: `screen and (min-width: ${maxPageWidth}px)`,\n midPageWidth: `screen and (min-width: ${midPageWidth}px)`,\n minPageWidth: `screen and (min-width: ${minPageWidth}px)`,\n};\n\nexport const layout = {\n maxPageWidth,\n midPageWidth,\n minPageWidth,\n maxFieldWidth,\n};\n\nexport const pageGridGap: MinMax = ['18px', '60px'];\n\nexport const spacing = {\n xxs: '0.3rem',\n xs: '0.5rem',\n s: '1rem',\n m: '1.5rem',\n l: '2rem',\n xl: '2.5rem',\n xxl: '3rem',\n};\n\nexport const spacingLayout = {\n s: '25px',\n m: '50px',\n l: '75px',\n xl: '100px',\n xxl: '150px',\n};\n\nexport const transitionDuration = '0.2s';\n","import { css } from '@emotion/react';\n\nimport { text } from '../../styles';\nimport { breaks, colors, spacing } from '../../styles/tokens';\n\nconst freephoneWrapperCommon = css`\n position: relative;\n display: flex;\n align-items: center;\n text-align: left;\n background: ${colors.white};\n border: 1px solid ${colors.grey300};\n`;\nconst freephoneNumberCommon = css`\n ${text.size5};\n font-family: Arial;\n font-weight: bold;\n display: block;\n color: ${colors.customFreephoneGreen};\n text-decoration: none;\n`;\n\nconst freephoneTextCommon = css`\n display: flex;\n align-items: center;\n height: calc(100% + ${spacing.xxs});\n background-color: ${colors.customFreephoneGreen};\n color: ${colors.white};\n font-family: Arial;\n font-style: normal;\n font-size: 12px;\n line-height: 13px;\n &:before {\n content: '';\n display: inline-block;\n position: absolute;\n border-style: solid;\n }\n`;\n\nconst freephoneWidthBoxed = css`\n width: 160px;\n`;\n\nexport const customFreephoneStyles = css`\n @media ${breaks.midPageWidth} {\n grid-auto-flow: row;\n }\n span {\n display: block;\n width: 100%;\n }\n`;\nexport const freephoneWrapper = css`\n ${freephoneWrapperCommon};\n flex-direction: row;\n width: 275px;\n height: 34px;\n padding-left: ${spacing.xs};\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const freephoneWrapperBoxed = css`\n ${freephoneWrapperCommon};\n ${freephoneWidthBoxed};\n flex-direction: column;\n height: auto;\n padding: 0;\n margin-left: auto;\n margin-right: auto;\n`;\n\nexport const freephoneWrapperSpacing = css`\n margin-top: ${spacing.xs};\n`;\n\nexport const freephoneWrapperCenteredMd = css`\n @media ${breaks.midPageWidth} {\n margin-left: 0;\n margin-right: 0;\n }\n`;\nexport const freephoneWrapperCenteredLg = css`\n @media ${breaks.midPageWidth} {\n margin-left: auto;\n margin-right: auto;\n }\n`;\nexport const freephoneNumber = css`\n a {\n ${freephoneNumberCommon};\n width: 140px;\n }\n`;\n\nexport const freephoneNumberBoxed = css`\n ${freephoneWidthBoxed};\n padding-left: calc(${spacing.xs} + 5px);\n padding-right: ${spacing.xs};\n a {\n ${freephoneNumberCommon};\n }\n`;\n\nexport const freephoneText = css`\n ${freephoneTextCommon};\n position: absolute;\n top: -(${spacing.xxs} / 2);\n right: ${spacing.xxs};\n width: 120px;\n padding: ${spacing.xxs} ${spacing.xs} ${spacing.xxs} ${spacing.s};\n &:before {\n left: 0;\n width: 0;\n height: 0;\n border-width: 10px 0 10px 10px;\n border-color: transparent transparent transparent ${colors.white};\n }\n`;\n\nexport const freephoneTextBoxed = css`\n ${freephoneTextCommon};\n ${freephoneWidthBoxed};\n position: relative;\n top: 0;\n right: 0;\n padding: ${spacing.xxs} ${spacing.m} ${spacing.xxs} ${spacing.l};\n &:before {\n top: 0;\n left: 10px;\n height: 0;\n border-width: 10px 10px 0 10px;\n border-color: ${colors.white} transparent transparent transparent;\n }\n`;\n","/* istanbul ignore file */\n\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';\n\n// IE11: Element.matches\n// Ref: https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#browser_compatibility\nif (!Element.prototype.matches) {\n Element.prototype.matches =\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n}\n\n// All files should provide an export\nexport {};\n","import i18n from 'i18next';\nimport HttpApi from 'i18next-http-backend';\nimport { initReactI18next } from 'react-i18next';\n\nimport getConfig from '../getConfig';\nimport publicPath from '../publicPath';\n\nconst { defaultLocale, supportedLocales } = getConfig();\n\ni18n\n .use(initReactI18next)\n .use(HttpApi)\n .init({\n // These names spaces should be preloaded as they contain critical content\n // * config - market specific config like features and URLs\n // * common - content that is used in many places\n // * errors - if the network fails, the error content will be read from cache\n ns: ['config', 'common', 'errors'],\n defaultNS: 'common',\n lng: defaultLocale,\n fallbackLng: false,\n supportedLngs: supportedLocales,\n load: 'currentOnly',\n lowerCaseLng: true,\n returnObjects: true,\n interpolation: {\n escapeValue: false,\n format: (value, format) => {\n if (format === 'lowercase') return value.toLowerCase();\n\n return value;\n },\n },\n backend: {\n loadPath: publicPath('/locales/{{lng}}/{{ns}}.json'),\n },\n });\n\nexport default i18n;\n","/** @jsxImportSource @emotion/react */\nimport { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport ErrorPage from '../../../components/ErrorPage';\nimport { AppErrorId } from '../../../consts';\n\nexport default function BlueGreenErrorPage() {\n const [config] = useTranslation('config');\n const [errors] = useTranslation('errors');\n const history = useHistory();\n const errorContent = errors(AppErrorId.Api410);\n\n useEffect(() => {\n sessionStorage.clear();\n }, []);\n\n return (\n {\n history.push(config('urls.home'));\n }}\n refresh\n />\n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport ErrorPage from '../../../components/ErrorPage';\nimport { AppErrorId } from '../../../consts';\n\nexport default function SessionExpiredPage() {\n const [config] = useTranslation('config');\n const [errors] = useTranslation('errors');\n const history = useHistory();\n const errorContent = errors(AppErrorId.Api404);\n\n useEffect(() => {\n sessionStorage.clear();\n }, []);\n\n return (\n {\n history.push(config('urls.home'));\n }}\n refresh\n />\n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\n\nimport ErrorPage from '../../../components/ErrorPage';\nimport { AppErrorId } from '../../../consts';\n\nexport default function UnspecificErrorPage() {\n const [config] = useTranslation('config');\n const [errors] = useTranslation('errors');\n const history = useHistory();\n const errorContent = errors(AppErrorId.Unspecific);\n\n return (\n {\n history.push(config('urls.home'));\n }}\n />\n );\n}\n","/** @jsxImportSource @emotion/react */\nimport { Component, ErrorInfo, ReactNode } from 'react';\n\nimport { AppErrorId } from '../../consts';\nimport BlueGreenErrorPage from '../../pages/errors/BlueGreenErrorPage';\nimport SessionExpiredPage from '../../pages/errors/SessionExpiredPage';\nimport UnspecificErrorPage from '../../pages/errors/UnspecificErrorPage';\nimport AppError from '../../utils/AppError';\nimport { track } from '../../utils/tracking';\nimport { ErrorBoundaryProvider } from './context';\n\ntype ErrorType = Error | AppError;\n\ntype ErrorBoundaryProps = {\n children: ReactNode;\n};\n\ntype ErrorBoundaryState = {\n error?: ErrorType;\n errorInfo?: ErrorInfo;\n};\n\nexport default class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromError(error: ErrorInfo) {\n return { error };\n }\n\n // eslint-disable-next-line class-methods-use-this\n componentDidCatch(error: ErrorType, errorInfo: ErrorInfo) {\n if (error instanceof AppError) {\n track({\n event: 'error',\n error: {\n type: 'AppError',\n id: error.id,\n },\n });\n }\n // eslint-disable-next-line no-console\n if ('console' in window) console.log(error, errorInfo);\n }\n\n handleReset = () => {\n this.setState({ error: undefined });\n };\n\n renderChildren() {\n const { error } = this.state;\n\n // If we have an error, work out what it is and how to show it\n if (error) {\n if (error instanceof AppError) {\n switch (error.id) {\n case AppErrorId.Api403:\n case AppErrorId.Api404:\n return ;\n case AppErrorId.Api410:\n return ;\n default:\n return ;\n }\n }\n\n return ;\n }\n\n // If we have no error, render children\n return this.props.children;\n }\n\n render() {\n return (\n \n {this.renderChildren()}\n \n );\n }\n}\n","import { ReactNode } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\n\ntype Props = {\n url: string;\n children: ReactNode;\n};\n\nexport default function PageRefresh({ url, children }: Props) {\n const history = useHistory();\n\n const pageRefreshHandler = () => {\n history.push(url);\n history.go(0);\n };\n\n return (\n \n {children}\n \n );\n}\n","import { css } from '@emotion/react';\n\nimport { heading, hiddenOnPrint } from '../../styles';\nimport { breaks, colors, spacing } from '../../styles/tokens';\nimport fluidStyles from '../../utils/fluidStyles';\n\nconst fluidFontSize = fluidStyles(\n ['19px', '36px'],\n value => `font-size: ${value};`\n);\n\nexport const header = css`\n ${hiddenOnPrint}\n`;\n\nexport const inner = css`\n align-items: center;\n border-bottom: 1px solid ${colors.grey300};\n display: flex;\n justify-content: space-between;\n padding: ${spacing.s} 0;\n`;\n\nexport const logo = css`\n ${fluidFontSize};\n line-height: 1;\n`;\n\nexport const contact = css`\n align-content: center;\n align-items: center;\n display: grid;\n gap: ${spacing.s};\n justify-content: center;\n justify-items: center;\n height: 100%;\n text-align: center;\n\n @media ${breaks.midPageWidth} {\n align-items: end;\n gap: ${spacing.xs};\n grid-auto-flow: column;\n justify-items: end;\n height: auto;\n text-align: right;\n }\n\n ${hiddenOnPrint};\n`;\nexport const contactContent = css`\n display: grid;\n grid-template-rows: 1fr;\n grid-gap: 0;\n justify-content: end;\n grid-template-areas:\n 'oneCallAway'\n 'freephone'\n 'phoneNumberCta';\n\n @media ${breaks.midPageWidth} {\n grid-template-rows: repeat(2, 1fr);\n grid-template-areas:\n 'freephone freephone'\n 'oneCallAway phoneNumberCta';\n }\n`;\nexport const freephone = css`\n grid-area: freephone;\n`;\nexport const oneCallAway = css`\n grid-area: oneCallAway;\n ${heading.size4};\n padding-bottom: ${spacing.s};\n @media ${breaks.midPageWidth} {\n padding-bottom: 0;\n }\n`;\n\nexport const phoneNumberCta = css`\n ${heading.size3};\n grid-area: phoneNumberCta;\n @media ${breaks.midPageWidth} {\n padding-left: ${spacing.xs};\n }\n`;\nexport const promise = css`\n width: 88px;\n`;\n","/** @jsxImportSource @emotion/react */\nimport { Fragment, lazy, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { ModalSizeType } from '../../consts';\nimport { pageGrid } from '../../styles';\nimport { breaks } from '../../styles/tokens';\nimport useMediaQuery from '../../utils/useMediaQuery';\nimport CustomFreephone from '../CustomFreephone';\nimport { customFreephoneStyles } from '../CustomFreephone/styles';\nimport { Phone } from '../Icons';\nimport Img from '../Img';\nimport LinkButton, { IconAlignment } from '../LinkButton';\nimport Logo from '../Logo';\nimport PageRefresh from '../PageRefresh';\nimport PhoneNumberCta from '../PhoneNumberCta';\nimport * as styles from './styles';\n\nconst Modal = lazy(() => import('../Modal'));\n\nexport default function Header() {\n const isLargeScreen = useMediaQuery(breaks.midPageWidth);\n const [common] = useTranslation('common');\n const [config] = useTranslation('config');\n const homeUrl = config('urls.home');\n const promise = common('promise');\n const [isModalOpen, setModalOpen] = useState(false);\n const customFreephone = config('features.customFreephone');\n\n // Effect: Reset modal\n useEffect(() => {\n if (isLargeScreen) {\n setModalOpen(false);\n }\n }, [isLargeScreen]);\n\n const contact = useMemo(() => {\n return (\n \n {customFreephone ? (\n \n ) : (\n \n
\n

{common('freephone')}

\n {common('oneCallAway')}\n \n \n \n
\n
\n )}\n {promise && (\n \n )}\n
\n );\n }, [common, promise, customFreephone]);\n\n return (\n
\n
\n

\n \n \n \n

\n {isLargeScreen ? (\n contact\n ) : (\n \n }\n iconAlignment={IconAlignment.Left}\n iconSmall\n testId=\"open-modal-btn\"\n onClick={() => setModalOpen(true)}\n >\n {common('oneCallAway')}\n \n {isModalOpen && (\n setModalOpen(false)}\n size={ModalSizeType.Narrow}\n >\n {contact}\n \n )}\n \n )}\n
\n
\n );\n}\n","import { css } from '@emotion/react';\n\nimport { colors, spacing } from '../../styles/tokens';\n\nexport const skipLink = css`\n background-color: ${colors.white};\n height: 1px;\n left: -100vw;\n padding: ${spacing.xs} ${spacing.s};\n position: absolute;\n top: auto;\n width: 1px;\n\n &:focus {\n height: auto;\n left: 0;\n top: 0;\n width: auto;\n }\n`;\n\nexport const content = css`\n min-height: 50vh;\n`;\n","/** @jsxImportSource @emotion/react */\nimport '../../utils/i18n';\n\nimport { Fragment, lazy, Suspense, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { BrowserRouter, Route, Switch } from 'react-router-dom';\n\nimport useMeta from '../../utils/useMeta';\nimport ErrorBoundary from '../ErrorBoundary';\nimport Header from '../Header';\nimport Loading from '../Loading';\nimport * as styles from './styles';\n\nconst Footer = lazy(() => import('../Footer'));\nconst NotFoundPage = lazy(() => import('../../pages/errors/NotFoundPage'));\n\nconst urlKeyToComponent: Record> = {\n config: lazy(() => import('../ConfigPage')),\n home: lazy(() => import('../../pages/HomePage')),\n payment: lazy(() => import('../../pages/PaymentPage')),\n paymentCancelled: lazy(() => import('../../pages/PaymentCancelledPage')),\n confirmation: lazy(() => import('../../pages/ConfirmationPage')),\n details: lazy(() => import('../../pages/DetailsPage')),\n personalDetails: lazy(() => import('../../pages/PersonalDetailsPage')),\n installationAddress: lazy(\n () => import('../../pages/InstallationAddressPage')\n ),\n scheduleSurvey: lazy(() => import('../../pages/ScheduleSurveyPage')),\n prerequisites: lazy(() => import('../Prerequisites')),\n contract: lazy(() => import('../../pages/ContractPage')),\n lead: lazy(() => import('../../pages/LeadPage')),\n};\n\nconst urlsKeysToPartiallyMatch = ['prerequisites'];\n\nconst isNotGroup = (\n config: [string, string | Record | null]\n): config is [string, string] => typeof config[1] === 'string';\n\nexport default function App() {\n const [common] = useTranslation('common');\n const [config] = useTranslation('config');\n\n useMeta({ name: 'description', content: common('appDescription') });\n\n const routes = useMemo(() => {\n const urls = config('urls');\n\n return Object.entries(urls)\n .filter(isNotGroup)\n .map(([key, url]) => {\n const Page = urlKeyToComponent[key];\n const path = key === 'config' ? `${url}/:step?` : url;\n\n return (\n \n \n \n );\n });\n }, [config]);\n\n return (\n \n \n {common('skipToContent')}\n \n \n
\n
\n \n }>\n \n {routes}\n \n \n \n \n \n \n
\n }>\n