{"version":3,"sources":["consts.ts","utils/useInfinityTracking/index.ts","utils/useMatelsoTracking/index.ts","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"],"names":["AnalyticsStepLegacy","AnalyticsPageId","AppErrorId","AppInsightsKey","ContractType","ProductCondition","MarketingCampaign","Environment","Experiment","GoogleReCaptchaSiteKey","GoogleReCaptchaAction","FabricType","MarketType","ModalSizeType","ModalReconLayout","OptionCategory","OptionGroup","OptionType","PackageType","PrerequisiteType","QuestionType","RailType","ResponseType","ScheduleType","SeatType","SeatSize","SessionKey","TrimType","PageId","UpholsteryAnswerType","WorldPayStatusType","SCHEDULE_CHOICE_FORMAT","TrustPilotWidgetType","FontFamily","TRUST_PILOT_SRC","FontId","Progress","GoInStore","FAST_FONTS_URL","useInfinityTracking","useEffect","_window$_ictt","window","_ictt","push","useMatelsoTracking","_window$mtls","mtls","loaded","scan","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","_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","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","dataLayer","useTrackPage","_useState","useState","_useState2","isTracked","setIsTracked","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","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","GoInstore","evenListener","addEventListener","sessionStorage","setItem","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","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","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","Weight400","Weight500","Weight700","Primary","futura400Woff2","futura400Woff","futura500Woff2","futura500Woff","futura700Woff2","futura700Woff","Secondary","Tertiary","marketId","Providers","StrictMode","ThemeProvider","createBrowserHistory","appInsightsKey","getAppInsightsKey","appInsights","ApplicationInsights","instrumentationKey","loadAppInsights","trackPageView","listen","uri","pathname","ReactDOM","render","Router","getElementById","boot"],"mappings":"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","file":"static/js/main.0a8e1956.chunk.js","sourcesContent":["export enum AnalyticsStepLegacy {\n Home = '1',\n Config = '2',\n Details = '3',\n Schedule = '4',\n PersonalDetails = '5',\n InstallationAddress = '6',\n Payment = '7',\n PaymentSuccessful = '8',\n}\n\nexport enum AnalyticsPageId {\n Home = 'HOME',\n Prerequisite = 'PREREQUISITE',\n Config = 'CONFIG',\n Details = 'DETAILS',\n ContractType = 'CONTRACT_TYPE',\n Schedule = 'SCHEDULE',\n Lead = 'LEAD',\n PersonalDetails = 'PERSONAL_DETAILS',\n InstallationAddress = 'INSTALLATION_ADDRESS',\n Payment = 'PAYMENT',\n PaymentSuccessful = 'PAYMENT_SUCCESSFUL',\n PaymentCancelled = 'PAYMENT_CANCELLED',\n Confirmation = 'CONFIRMATION',\n}\n\nexport enum AppErrorId {\n Unspecific = 'unspecific',\n App404 = 'notFound',\n ApiCancelled = 'apiCancelled',\n Api403 = 'api403',\n Api404 = 'api404',\n Api410 = 'api410',\n}\n\nexport enum AppInsightsKey {\n Dev = 'fe5a028d-13d6-47e2-9764-ef537889bb69',\n Test = '701828bb-6f74-4d2a-b0fc-6f3deadcf3fd',\n Staging = '28a289af-c890-4aa6-b4f8-3b8b15e68a54',\n Live = '89ba3d1e-2dfd-4350-95a3-50ed98e7629a',\n}\n\nexport enum ContractType {\n Purchase = 'PURCHASE',\n Rental = 'RENTAL',\n}\n\nexport enum ProductCondition {\n New = 'NEW',\n Reconditioned = 'RECONDITIONED',\n}\n\nexport enum MarketingCampaign {\n Ecommerce = 'ECOMMERCE',\n GoInstore = 'GOINSTORE',\n}\n\nexport enum Environment {\n Unknown = 'UNKNOWN',\n Dev = 'DEV',\n Test = 'TEST',\n Staging = 'STAGING',\n Live = 'LIVE',\n}\n\nexport enum Experiment {\n Id = '',\n Interval = 100,\n Timeout = 2000,\n}\n\nexport enum GoogleReCaptchaSiteKey {\n NonLive = '6LcRyYUaAAAAAN3dSs9sUQ5a9PFSk-ZXCCtxExFX',\n Live = '6LcM44kaAAAAAId3Wthu9Y9BH2s93r3MTFwakCr6',\n}\n\nexport enum GoogleReCaptchaAction {\n EmailQuoteSubmit = 'EMAIL_QUOTE_SUBMIT',\n LeadSubmit = 'LEAD_SUBMIT',\n}\n\nexport enum FabricType {\n // wc - Woven\n RedW = 'wc-red',\n StoneW = 'wc-stone',\n GreenW = 'wc-green',\n BlueW = 'wc-blue',\n MustardW = 'wc-mustard',\n\n // flc - Faux Leather (Starla only)\n BeigeFL = 'flc-beige',\n BrownFL = 'flc-brown',\n\n // qflc - Quilted Faux Leather\n BlackQFL = 'qflc-black',\n MaroonQFL = 'qflc-maroon',\n CocoaQFL = 'qflc-cocoa',\n DamsonQFL = 'qflc-damson',\n NavyBlueQFL = 'qflc-navy_blue',\n GreenQFL = 'qflc-green',\n GreyQFL = 'qflc-grey',\n SandQFL = 'qflc-sand',\n DuckEggBlueQFL = 'qflc-duck_egg_blue',\n TealQFL = 'qflc-teal',\n\n // flc - Faux Leather (Siena only)\n WalnutFL = 'flc-walnut',\n IvoryFL = 'flc-ivory',\n PineFL = 'flc-pine',\n CranberryFL = 'flc-cranberry',\n MidnightFL = 'flc-midnight',\n\n // vc - Velvet\n ChocolateV = 'vc-chocolate',\n PistachioV = 'vc-pistachio',\n PurpleV = 'vc-purple',\n SkyBlueV = 'vc-sky_blue',\n TurquoiseV = 'vc-turquoise',\n\n // wflcc - Woven and Faux Leather Combination\n PlumWFLC = 'wflcc-plum',\n AvocadoWFLC = 'wflcc-avocado',\n OatmealWFLC = 'wflcc-oatmeal',\n CherryWFLC = 'wflcc-cherry',\n SlateWFLC = 'wflcc-slate',\n\n // dwc - Designer Woven\n AcuteDW = 'dwc-acute',\n AutumnDW = 'dwc-autumn',\n CircusDW = 'dwc-circus',\n CubicDW = 'dwc-cubic',\n JazzDW = 'dwc-jazz',\n\n // dsc - Designer Soft\n PoppyDS = 'dsc-poppy',\n HeritageDS = 'dsc-heritage',\n\n // vyc - Vinyl\n LavenderVY = 'vyc-lavender',\n SandVY = 'vyc-sand',\n}\n\nexport enum MarketType {\n ES = 'SPAIN',\n FR = 'FRANCE',\n IT = 'ITALY',\n PT = 'PORTUGAL',\n UK = 'UNITED_KINGDOM',\n US = 'UNITED_STATES',\n}\n\nexport enum ModalSizeType {\n Narrow,\n NarrowFullWidth,\n Wide,\n WideFullWidth,\n}\n\nexport enum ModalReconLayout {\n Primary,\n Secondary,\n}\n\nexport enum OptionCategory {\n Colour = 'COLOUR',\n Electrical = 'ELECTRICAL',\n Hinge = 'HINGE',\n NumberOfTurns = 'NUMBER_OF_TURNS',\n Obstruction = 'OBSTRUCTION',\n PackageType = 'PACKAGE_TYPE',\n PlugSocketInstallation = 'PLUG_SOCKET_INSTALLATION',\n SitePrepGroup = 'SITE_PREP_GROUP',\n StairliftTurnCount = 'STAIRLIFT_TURN_COUNT',\n Swivel = 'SWIVEL',\n Trim = 'TRIM',\n Upsell = 'UPSELL',\n Warranty = 'WARRANTY',\n}\n\nexport enum OptionGroup {\n PackageType = 'PACKAGE_TYPE',\n Product = 'PRODUCT',\n ProductAddOn = 'PRODUCT_ADD_ON',\n Service = 'SERVICE',\n SitePrep = 'SITE_PREP',\n SitePrepGroup = 'SITE_PREP_GROUP',\n}\n\nexport enum OptionType {\n ExtendedWarranty = 'EXTENDED_WARRANTY',\n Other = 'OTHER',\n Rail = 'RAIL',\n RailSitePrep = 'RAIL_SITE_PREP',\n RailTurn = 'RAIL_TURN',\n Seat = 'SEAT',\n SitePrep = 'SITE_PREP',\n Stairlift = 'STAIRLIFT',\n}\n\nexport enum PackageType {\n Standard = 'STANDARD',\n Deluxe = 'DELUXE',\n}\n\nexport enum PrerequisiteType {\n ZipCode = 'ASK_ZIP_CODE',\n}\n\nexport enum QuestionType {\n EasyTurn = 'SELECT_POWERED_SWIVEL',\n Fit = 'CONFIRM_FIT',\n Obstructions = 'SELECT_OBSTRUCTIONS',\n OfflineLead = 'SELECT_OFFLINE_LEAD',\n Package = 'SELECT_PACKAGE',\n PlugSocket = 'SELECT_PLUG_SOCKET',\n Rail = 'SELECT_RAIL',\n Stairlift = 'SELECT_STAIRLIFT',\n Turns = 'SELECT_TURNS',\n Upholstery = 'SELECT_UPHOLSTERY',\n}\n\nexport enum RailType {\n Curved = 'curved',\n Straight = 'straight',\n}\n\nexport enum ResponseType {\n Config = 'CONFIG',\n Question = 'QUESTION',\n Details = 'DETAILS',\n Payment = 'PAYMENT_INFO',\n Prerequisite = 'PREREQUISITE',\n Contract = 'CONTRACT',\n}\n\nexport const SCHEDULE_CHOICE_FORMAT = \"yyyy-MM-dd'T'HH:mm:ss\";\n\nexport enum ScheduleType {\n AsSoonAsPossible = 'ASAP',\n Custom = 'CUSTOM',\n}\n\nexport enum SeatType {\n Siena = 'siena',\n Starla = 'starla',\n Sofia = 'sofia',\n Solus = 'solus',\n}\n\nexport enum SeatSize {\n Standard = 'standard',\n Wide = 'wide',\n}\n\nexport enum SessionKey {\n Notice = 'notice',\n Confirmation = 'confirmation',\n Campaign = 'campaign',\n}\n\nexport enum TrimType {\n None = 'nwt',\n Light = 'lwt',\n Dark = 'dwt',\n}\n\nexport enum PageId {\n Home = 'home',\n PrerequisitesZipCode = 'prerequisites-zip-code',\n ConfigConfirmation = 'config-confirmation',\n ConfigEasyTurn = 'config-easy-turn',\n ConfigObstructions = 'config-obstructions',\n ConfigOfflineLead = 'config-offline-lead',\n ConfigPackage = 'config-package',\n ConfigPlugSocket = 'config-plug-socket',\n ConfigRail = 'config-rail',\n ConfigStairlift = 'config-stairlift',\n ConfigTurns = 'config-turns',\n ConfigUpholstery = 'config-upholstery',\n Details = 'details',\n Contract = 'contract',\n Schedule = 'schedule',\n PersonalDetails = 'personal-details',\n InstallationAddress = 'installation-address',\n Lead = 'lead',\n Payment = 'payment',\n PaymentCancelled = 'payment-cancelled',\n Confirmation = 'confirmation',\n Error = 'error',\n}\n\nexport enum UpholsteryAnswerType {\n Fabric = 'fabric',\n Trim = 'trim',\n}\n\nexport enum WorldPayStatusType {\n Cancelled = 'cancelled_by_shopper',\n Success = 'success',\n Failure = 'failure',\n Error = 'error',\n Processed = 'already_processed',\n}\n\nexport const TRUST_PILOT_SRC =\n '//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js';\n\nexport enum TrustPilotWidgetType {\n Horizontal = '5406e65db0d04a09e042d5fc',\n Carousel = '53aa8912dec7e10d38f59f36',\n Mini = '53aa8807dec7e10d38f59f32',\n MiniCarousel = '539ad0ffdec7e10e686debd7',\n}\n\nexport enum FontFamily {\n Primary = 'Futura BT',\n Secondary = 'Arial',\n Tertiary = 'Tahoma',\n}\n\nexport const FAST_FONTS_URL =\n '//fast.fonts.net/lt/1.css?apiType=css&c=818fb387-794d-457a-b013-d68215185ef7&fontids=';\n\nexport enum FontId {\n Weight400 = '5575015',\n Weight500 = '5575027',\n Weight700 = '5574941',\n}\n\nexport enum Progress {\n minStep = 0,\n maxStep = 100,\n minSection = 0,\n minProgress = 1,\n}\n\nexport enum GoInStore {\n evenListener = 'goinstore:connected',\n}\n","import { useEffect } from 'react';\n\nexport default function useInfinityTracking() {\n useEffect(() => {\n window._ictt?.push(['_track']);\n });\n}\n","import { useEffect } from 'react';\n\nexport default function useMatelsoTracking() {\n useEffect(() => {\n if (window.mtls?.loaded) {\n window.mtls.scan();\n }\n });\n}\n","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 ?? 0;\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