{"version":3,"sources":["webpack:///./presentation/components/Shortcode/Alt.tsx","webpack:///./presentation/components/Shortcode/Bold.tsx","webpack:///./presentation/components/Shortcode/Italic.tsx","webpack:///./presentation/components/Shortcode/Link.tsx","webpack:///./presentation/components/Shortcode/Text.tsx","webpack:///src/presentation/components/Shortcode/Tooltip.tsx","webpack:///./presentation/components/Shortcode/PendingShortcode.tsx","webpack:///./presentation/components/Shortcode/Shortcode.tsx","webpack:///./presentation/components/Shortcode/index.ts","webpack:///./domain/constants/alignment.ts","webpack:///./presentation/components/common/CallToAction.tsx","webpack:///./domain/constants/callToAction.ts","webpack:///./application/actions/reactive-knowledge/useShowToast.ts","webpack:///./infrastructure/basket/createBasket.ts","webpack:///./infrastructure/basket/addToBasket.ts","webpack:///./application/actions/cta/useAddProductToBasket.ts","webpack:///./application/actions/cta/usePostActionNavigate.ts","webpack:///./presentation/hocs/callToActionHandlers/handleAddToBasketClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleConfigureClick.ts","webpack:///./application/actions/cta/sendProductClicked.ts","webpack:///./application/actions/cta/sendProductOnAddToBasket.ts","webpack:///./application/actions/cta/sendPromotion.ts","webpack:///./presentation/hocs/callToAction.tsx","webpack:///./presentation/hocs/callToActionHandlers/handleAnalytics.ts","webpack:///./presentation/hocs/callToActionHandlers/utils.ts","webpack:///./presentation/hocs/callToActionHandlers/handleSetVisibilityClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handlePlayVideoClick.ts","webpack:///src/presentation/components/ribbons/info/Info.stylesheet.ts","webpack:///./presentation/components/ribbons/info/Info.tsx","webpack:///./presentation/components/ribbons/info/index.ts"],"names":["getColor","theme","against","Against","LIGHT","NEUTRAL","palette","primary","DARK","tertiary","Alt","RecursiveShortcode","elements","rest","useTheme","style","color","displayName","Bold","fontWeight","fontStyle","Link","contentType","attributes","isExternalRoute","route","useIsExternalRoute","goto","href","id","analyticskey","size","TextButtonSize","INHERIT","rel","target","newTab","formatText","text","newline","values","formattedText","replace","_","match","replaceValues","split","join","escapeShortCodes","string","reduce","prev","cur","i","nl2br","Text","ReactTooltip","lazy","TooltipShortcode","isMinLg","useBreakpoints","eventToggle","undefined","padding","cssTheme","CallToAction","fallback","tagName","useDefaultStyles","content","maxWidth","randomWidth","Math","floor","random","PendingShortcode","code","display","width","lines","Glyph","Sup","List","OrderedList","ListItem","TickListItem","ProductPrice","PhoneNumber","map","element","index","Shortcode","JSON","stringify","props","String","getAgainst","type","name","glyph","Italic","Tooltip","ShortcodeWrapper","Alignment","PureCallToAction","kind","label","addingStatus","handleClick","behavior","status","Status","PENDING","SUCCESS","FAILURE","DEFAULT","getStatus","isExternal","url","openNewWindowProps","buttonProps","omit","onClick","alt","callToAction","Behavior","useShowToast","add","useAdd","intl","useIntl","message","KnowledgeType","SMIRK","formatMessage","createBasket","async","driver","makeDriver","response","method","Method","POST","headers","brandId","basketId","body","setCookie","makeAddToBasket","items","localeCode","getLanguageCookie","cookie","getCookie","cookieDecoded","decode","e","getBaskedId","data","useAddProductToBasket","postActionNavigate","handleAnalytics","useBrandId","showToast","refetchBasket","useRefreshBasketCount","useMutation","onError","ERK","onSuccess","usePostActionNavigate","postAction","history","useHistory","isInternal","isInternalUrl","orderUrl","useOrderProcessUrl","window","useWindow","navigateUrl","push","location","statusMap","idle","loading","success","error","sendProductClicked","productId","list","getProductData","locale","skuId","then","product","price","productSelectors","getPrice","includeTax","ecommerce","sendProductOnAddToBasket","currency","term","category","categoryName","dispatchFBEvent","content_ids","content_name","value","quantity","content_type","defaultPrice","dispatchGA4Event","sendPromotion","promotion","ec","ecomm","promoNameToPromoId","VideoModal","Component","ribbonId","setAddingStatus","useState","isVideoModalOpen","setIsVideoModalOpen","externalRoutes","useExternalRoutes","useCurrency","ribbon","useRibbon","createRibbonName","ctaType","analytics","pricingTier","useHandleAnalytics","handleAddToBasketClick","mutateAsync","addToBasket","useEffect","timeoutRef","setTimeout","clearTimeout","defaultSkuId","paymentInterval","useHandleAddToBasketClick","handleConfigureClick","tier","formatPricingTier","query","URLSearchParams","append","q","toString","useHandleConfigureClick","handleSetVisibilityClick","setVisibility","useVisibilitySetsAction","visibilitySet","useHandleSetVisibilityClick","ctaId","linkAttribution","actionType","toggleVideoModal","isOpen","ADD_TO_BASKET","CONFIGURE","PLAY_VIDEO","handlePlayVideoClick","SET_VISIBILITY","NAVIGATION","videoId","provider","closeModal","root","cta","ctas","Info","title","subtitle","colorway","hBaseline","layout","hasTitle","isNilOrEmpty","hasSubtitle","hasCta","isMinSm","classNames","alignment","cx","getClassNames","findResponsiveItem","alignmentMobile","STARTING","alignmentTablet","Ribbon","Type","INFO","className","depth","component","block","concat","errorBoundary"],"mappings":"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","file":"pex-static/34/36.0499a4732ccbf9f876e2.chunk.js","sourcesContent":["import React from 'react';\nimport { Theme, useTheme, Colorway as Against } from '@uds/theme-utils';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst getColor = (theme: Theme, against: Against | undefined) => {\n switch (against) {\n case Against.LIGHT:\n return theme.palette.primary;\n case Against.NEUTRAL:\n return theme.palette.primary;\n case Against.DARK:\n return theme.palette.tertiary;\n default:\n return 'inherit';\n }\n};\nconst Alt = ({ RecursiveShortcode, elements, against, ...rest }: RecursiveShortcodeProps) => {\n const { theme } = useTheme();\n return (\n \n {RecursiveShortcode ? : null}\n \n );\n};\n\nAlt.displayName = 'Alt';\n\nexport default Alt;\n","import React from 'react';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n {RecursiveShortcode ? : null}\n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;\n","import React from 'react';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n {RecursiveShortcode ? : null}\n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;\n","import React from 'react';\nimport { ReactRouterTextButton } from '@uds/react-router-adapter';\nimport { Size as TextButtonSize } from '@uds/text-button';\nimport { useIsExternalRoute } from 'domain/selectors/common';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Link = ({ RecursiveShortcode, elements, contentType, attributes, against, ...rest }: RecursiveShortcodeProps) => {\n const [isExternalRoute, route] = useIsExternalRoute(attributes?.goto);\n return (\n \n {/* @ts-ignore: error when upgrading to @ux/config */}\n \n \n );\n};\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import React, { Fragment } from 'react';\n\nconst escapeShortCodes = (text: string) => {\n if (typeof text !== 'string') {\n return null;\n }\n const replaceA = (text ?? '').split('[!').join('[');\n const replaceB = replaceA.split('!/]').join('/]');\n const replaceC = replaceB.split('[/!').join('[/');\n return replaceC;\n // using split/join because for some reason replaceAll fails for backstop\n // tests but not for backstop storybook?\n // if anyone can tell me why, I'd appreciate it.\n // return (text ?? '').replaceAll('[!', '[').replaceAll('!/]', '/]')\n // .replaceAll('[/!', '[/');\n};\n\nconst replaceValues = (text: string, values?: Record) => {\n if (values == null) {\n return text;\n }\n return text.replace(/{(?[^{]*)}/g, (_, match) => {\n return values[match];\n });\n};\n\nconst nl2br = (string: string) =>\n (string ?? '')\n .split('\\n')\n // @ts-ignore typescript cant figure typing out\n // eslint-disable-next-line react/no-array-index-key\n .reduce((prev, cur, i) => [prev, , cur]);\n\nconst formatText = (text: string, newline: boolean | Element | undefined, values?: Record) => {\n const formattedText = replaceValues(escapeShortCodes(text) ?? '', values);\n if (newline === false) {\n return formattedText;\n }\n return nl2br(formattedText);\n};\n\ninterface OuterProps {\n text?: string | undefined;\n nl2br?: boolean | Element;\n values?: Record;\n}\nconst Text = ({ text, nl2br, values }: OuterProps) => {formatText(text ?? '', nl2br, values)};\n\nText.displayName = 'Text';\n\nexport default Text;\n","import React, { lazy, Suspense } from 'react';\nimport TextButton, { Size as TextButtonSize } from '@uds/text-button';\nimport { cssTheme } from '@uds/theme-utils';\nimport { useBreakpoints } from '@uds/responsive';\n\nimport { RecursiveShortcodeProps } from './Shortcode';\n\n/*\n React-Tooltip is a heavy dependency therefore we asynchronously load it in\n and gracefully decorate the functionality in once it has loaded\n*/\nconst ReactTooltip = lazy(\n () =>\n import(\n /* webpackChunkName: \"react-tooltip-lite\" */\n 'react-tooltip-lite'\n ),\n);\n\nconst TooltipShortcode = ({ RecursiveShortcode, attributes, elements }: RecursiveShortcodeProps) => {\n const { isMinLg } = useBreakpoints();\n const eventToggle = isMinLg ? undefined : 'onClick';\n const padding = cssTheme.gu2;\n const CallToAction = {attributes?.label};\n\n return (\n \n {/* @ts-ignore children doesnt exist */}\n \n {/* @ts-ignore: error when upgrading to @ux/config */}\n \n \n }\n >\n {CallToAction}\n \n \n );\n};\n\nTooltipShortcode.displayName = 'TooltipShortcode';\n\nexport default TooltipShortcode;\n","import React from 'react';\nimport { Shimmer } from '@uds/penders';\n\nimport { ShortcodeProps } from './';\n\nexport interface OuterProps {\n code?: ShortcodeProps;\n}\n\n// random % width for shimmer betwen 50% and 95%\nconst randomWidth = () => Math.floor(Math.random() * (95 - 50) + 50);\n\nconst PendingShortcode = ({ code }: OuterProps) => (\n \n \n \n);\n\nPendingShortcode.displayName = 'PendingShortcode';\n\nexport default PendingShortcode;\n","import React, { Suspense, lazy, ReactNode } from 'react';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport { Layout } from 'domain/constants/layout';\n/*\n These shortcodes should not be lazy loaded in as they are already in the\n main bundle and it causes a unnecessary shimmer which makes the page feel\n less responsive\n*/\nimport { Colorway as Against } from '@uds/theme-utils';\nimport { IconName } from '@uds/glyphs';\n\nimport Alt from './Alt';\nimport Bold from './Bold';\nimport Italic from './Italic';\nimport Link from './Link';\nimport Text from './Text';\nimport Tooltip from './Tooltip';\nimport PendingShortcode from './PendingShortcode';\n\nimport { ShortcodeProps } from '.';\n\nconst Glyph = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-glyph\" */\n './Glyph'\n ),\n);\n\nconst Sup = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-sup\" */\n './Sup'\n ),\n);\n\nconst List = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-list\" */\n './List'\n ),\n);\n\nconst OrderedList = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-ordered-list\" */\n './OrderedList'\n ),\n);\n\nconst ListItem = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-list-item\" */\n './ListItem'\n ),\n);\n\nconst TickListItem = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-tick-list-item\" */\n './TickListItem'\n ),\n);\n\nconst ProductPrice = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-product-price\" */\n './ProductPrice'\n ),\n);\n\nconst PhoneNumber = lazy(\n () =>\n import(\n /* webpackChunkName: \"shortcode-phone-number\" */\n './PhoneNumber'\n ),\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare const i: number;\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ndeclare const element: ShortcodeProps;\n\nexport interface ShortcodeAttributesProps {\n glyph: string;\n use?: number;\n number?: number;\n RecursiveShortcode: (props: RecursiveShortcodeProps) => JSX.Element;\n analyticskey?: string;\n goto?: string;\n label?: ReactNode;\n icon: IconName;\n prices?: Array<{\n gross: number;\n net: number;\n raw: number;\n tax: number;\n }>;\n inctax?: string;\n style?: string;\n rel?: string;\n newTab?: string;\n}\nexport interface RecursiveShortcodeProps {\n elements?: Array;\n RecursiveShortcode?: (props: RecursiveShortcodeProps) => JSX.Element;\n type?: string;\n name?: string;\n layout?: Layout;\n against?: Against;\n attributes?: ShortcodeAttributesProps | undefined;\n nl2br?: boolean;\n rest?: {\n [key: string]: any;\n };\n [key: string]: any;\n}\n\nconst RecursiveShortcode = ({ elements = [], ...rest }: RecursiveShortcodeProps) => (\n <>\n {elements.map((element, index) => (\n // Temporarily allow index as key waiting for BE to add ids\n // eslint-disable-next-line react/no-array-index-key\n \n ))}\n >\n);\n\nexport interface ShortcodeOuterProps {\n against?: Against;\n code: RecursiveShortcodeProps;\n type?: string;\n name?: string;\n values?: Record;\n}\n\nconst Shortcode = ({ code, ...rest }: RecursiveShortcodeProps) => {\n let props = {\n ...rest,\n } as RecursiveShortcodeProps;\n if (typeof code === 'string' || code instanceof String) {\n props.code = code;\n } else {\n props = {\n ...props,\n ...code,\n };\n }\n\n props.against = getAgainst(props.against);\n props.RecursiveShortcode = RecursiveShortcode;\n props.attributes = props?.attributes ?? ({} as ShortcodeAttributesProps);\n\n const { type, name, values } = props;\n if (typeof props.code === 'string') {\n return ;\n }\n if (props.type === 'text') {\n return ;\n }\n if (type === 'element') {\n switch (name) {\n case 'list':\n if (props?.attributes?.style === 'number') {\n return ;\n }\n return ;\n case 'li':\n if (props?.attributes?.style === 'glyph') {\n return ;\n }\n return ;\n case 'i':\n return ;\n case 'b':\n return ;\n case 'alt':\n return ;\n case 'sup':\n return ;\n case 'glyph':\n return ;\n case 'tel':\n return ;\n case 'link':\n return ;\n case 'productprice':\n return ;\n case 'tooltip':\n return ;\n case 'root':\n return ;\n default:\n return null;\n }\n }\n return null;\n};\n\nconst ShortcodeWrapper = (props: RecursiveShortcodeProps) => (\n }>\n \n \n);\n\nShortcodeWrapper.displayName = 'Shortcode';\n\nexport default ShortcodeWrapper;\n","import Shortcode, { RecursiveShortcodeProps } from './Shortcode';\n\n// TODO: help.. please.\nexport type ShortcodeProps = RecursiveShortcodeProps;\n\nexport default Shortcode;\n","export enum Alignment {\n STARTING = 'STARTING',\n CENTER = 'CENTER',\n}\n\nexport default null;\n","import React from 'react';\nimport { Status, Size } from '@uds/button';\nimport { CTA } from 'core/ribbons/cta';\nimport { Product } from '@uds/product';\nimport { Glyph, IconName } from '@uds/glyphs';\nimport callToAction from 'presentation/hocs/callToAction';\nimport { omit } from 'presentation/utils/generalUtils';\nimport { ReactRouterButton } from '@uds/react-router-adapter';\nimport { useIsExternalRoute } from 'domain/selectors/common';\n\ninterface OuterProps extends CTA {\n product?: Product;\n block?: boolean;\n size?: Size;\n ribbonId: string;\n index: number;\n glyph?: IconName;\n}\n\ninterface InnerProps extends OuterProps {\n addingStatus?: Status;\n handleClick: (props: any) => () => void;\n}\n\nconst getStatus = (addingStatus: string | undefined) => {\n switch (addingStatus) {\n case 'PENDING':\n return Status.PENDING;\n case 'SUCCESS':\n return Status.SUCCESS;\n case 'FAILURE':\n return Status.FAILURE;\n default:\n return Status.DEFAULT;\n }\n};\n\nconst PureCallToAction = ({ kind, label, addingStatus, handleClick, behavior, ...props }: InnerProps) => {\n const status = getStatus(addingStatus);\n const goto = 'goto' in behavior ? behavior.goto : undefined;\n const [isExternal, url] = useIsExternalRoute(goto);\n const newTab = 'newTab' in behavior ? behavior.newTab : null;\n const rel = 'rel' in behavior ? behavior.rel : undefined;\n\n const openNewWindowProps =\n newTab === 'true'\n ? {\n rel: rel,\n target: '_blank',\n }\n : {};\n\n const buttonProps = omit(\n [\n 'actions',\n 'buttonId',\n 'ribbonId',\n 'index',\n 'handlePlayVideoClick',\n 'handleSetVisibilityClick',\n 'handleConfigureClick',\n 'handleAddToBasketClick',\n 'handleNavigateClick',\n 'handleAnalytics',\n 'ribbonList',\n 'glyph',\n ],\n props,\n );\n\n return (\n }\n >\n {label}\n \n );\n};\n\nPureCallToAction.displayName = 'CallToAction';\n\nexport default callToAction(PureCallToAction);\n","export enum Behavior {\n NAVIGATION = 'navigation',\n ADD_TO_BASKET = 'addToBasket',\n CONFIGURE = 'configure',\n SET_VISIBILITY = 'changeActiveVisibilitySet',\n PLAY_VIDEO = 'playVideo',\n}\n\nexport default null;\n","import { useAdd, KnowledgeType } from '@uds/reactive-knowledge';\nimport { useIntl } from 'react-intl';\n\nexport type ShowToast = (messageId: string, type?: KnowledgeType) => void;\n\nexport default function useShowToast(): ShowToast {\n const add = useAdd();\n const intl = useIntl();\n return (message: string, type: KnowledgeType = KnowledgeType.SMIRK) => {\n add({\n type,\n message: intl.formatMessage({ id: message }),\n });\n };\n}\n","import { Http, Method } from '@ux/drivers';\nimport { setCookie } from '@uds/cookies';\nimport { CreateBasket } from 'core/basket';\nimport makeDriver from 'infrastructure/drivers/json';\n\nconst createBasket: CreateBasket = async (brandId: string) => {\n const driver: Http = makeDriver();\n\n const response = await driver({\n url: '/api/basket/api/v2/baskets',\n method: Method.POST,\n headers: {\n 'X-Tenant': brandId,\n },\n });\n\n const basketId = (await response.body.id) ?? null;\n if (basketId != null) {\n setCookie('basket', basketId);\n }\n\n return basketId;\n};\n\nexport default createBasket;\n","import decode from 'jwt-decode';\nimport { Http, Method } from '@ux/drivers';\nimport { getCookie } from '@uds/cookies';\nimport { AddToBasket } from 'core/basket';\nimport makeDriver from 'infrastructure/drivers/json';\nimport { getLanguageCookie } from 'domain/selectors/common';\n\nimport createBasket from './createBasket';\n\ntype CookieDecoded =\n | {\n basketId: string;\n }\n | {\n [key: string]: never;\n };\n\nconst makeAddToBasket = (brandId: string): AddToBasket => {\n const driver: Http = makeDriver();\n\n const getBaskedId = () => {\n const cookie = getCookie('basket');\n let basketId;\n\n try {\n const cookieDecoded: CookieDecoded = cookie != null ? decode(cookie) : {};\n if (cookieDecoded.basketId != null) {\n basketId = cookieDecoded.basketId;\n return basketId;\n }\n return createBasket(brandId);\n } catch (e: unknown) {\n basketId = cookie;\n return basketId;\n }\n };\n\n return async ({ items }) => {\n const localeCode = getLanguageCookie();\n const basketId = await getBaskedId();\n\n return driver({\n url: `/api/basket/api/v2/baskets/${basketId}/items?localeCode=${localeCode}`,\n method: Method.POST,\n data: { items },\n headers: {\n 'X-Tenant': brandId,\n },\n });\n };\n};\n\nexport default makeAddToBasket;\n","import { useMutation } from 'react-query';\nimport { useBrandId } from '@ux/whitelabel';\nimport { useRefreshBasketCount } from '@uds/bookends';\nimport { KnowledgeType } from '@uds/reactive-knowledge';\nimport makeAddToBasket from 'infrastructure/basket/addToBasket';\nimport { AddProductToBasketArgs } from 'core/basket';\n\nimport useShowToast from '../reactive-knowledge/useShowToast';\n\ninterface AddProductToBasketProps {\n handleAnalytics: () => void;\n postActionNavigate: () => void;\n}\n\nconst useAddProductToBasket = ({ postActionNavigate, handleAnalytics }: AddProductToBasketProps) => {\n const brandId = useBrandId();\n const showToast = useShowToast();\n const refetchBasket = useRefreshBasketCount();\n const addToBasket = (items: Array) => {\n handleAnalytics();\n return makeAddToBasket(brandId)({ items });\n };\n\n return useMutation(addToBasket, {\n onError: () => {\n showToast('usf.addToBasket.failure', KnowledgeType.ERK);\n },\n onSuccess: () => {\n refetchBasket();\n showToast('usf.addToBasket.success');\n postActionNavigate();\n },\n });\n};\n\nexport default useAddProductToBasket;\n","import { useHistory } from 'react-router';\nimport { useWindow } from '@uds/hooks';\nimport { isInternalUrl } from 'domain/url';\nimport { useOrderProcessUrl } from 'domain/selectors/common';\n\nconst usePostActionNavigate = (postAction?: { type: string; url?: string }) => {\n const type = postAction?.type;\n const url = postAction?.url;\n const history = useHistory();\n const isInternal = isInternalUrl(url);\n const orderUrl = useOrderProcessUrl();\n const window = useWindow();\n const navigateUrl = type === 'CHECKOUT' ? orderUrl : url;\n\n return () => {\n if (navigateUrl == null) {\n return;\n }\n if (isInternal) {\n history.push(navigateUrl);\n } else {\n window.location.href = navigateUrl;\n }\n };\n};\n\nexport default usePostActionNavigate;\n","import { Dispatch, useEffect } from 'react';\nimport { QueryStatus } from 'react-query';\nimport { Status } from '@uds/button';\nimport { Product } from '@uds/product';\nimport { AddProductToBasketArgs } from 'core/basket';\nimport { AddToBasketCta, BehaviorType } from 'core/ribbons/cta';\nimport useAddProductToBasket from 'application/actions/cta/useAddProductToBasket';\nimport usePostActionNavigate from 'application/actions/cta/usePostActionNavigate';\n\nconst statusMap: Record = {\n idle: Status.DEFAULT,\n loading: Status.PENDING,\n success: Status.SUCCESS,\n error: Status.FAILURE,\n};\n\ninterface HandleAddToBasketClick {\n product?: Product;\n behavior?: BehaviorType;\n setAddingStatus: Dispatch;\n handleAnalytics: () => void;\n postAction?: {\n type: string;\n url?: string;\n };\n}\n\nexport default ({ product, setAddingStatus, handleAnalytics, postAction }: HandleAddToBasketClick) => {\n const postActionNavigate = usePostActionNavigate(postAction);\n const { mutateAsync: addToBasket, status } = useAddProductToBasket({\n postActionNavigate,\n handleAnalytics,\n });\n\n useEffect(() => {\n let timeoutRef: ReturnType;\n setAddingStatus(statusMap[status]);\n\n if (status === 'error' || status === 'success') {\n timeoutRef = setTimeout(() => {\n setAddingStatus(Status.DEFAULT);\n }, 1000);\n }\n\n return () => {\n clearTimeout(timeoutRef);\n };\n }, [status, setAddingStatus]);\n\n return ({ behavior }: { behavior?: AddToBasketCta }) => {\n const items: Array = [];\n items.push({\n skuId: product?.defaultSkuId ?? behavior?.productId,\n quantity: 1,\n term: behavior?.pricingTier?.term,\n paymentInterval: behavior?.pricingTier?.paymentInterval,\n });\n\n addToBasket(items);\n };\n};\n","import { useWindow } from '@uds/hooks';\nimport { ConfigureProductCta } from 'core/ribbons/cta';\n\nimport { formatPricingTier } from './utils';\n\ninterface Props {\n behavior?: ConfigureProductCta;\n}\n\nexport default () => {\n const window = useWindow();\n\n return ({ behavior }: Props) => {\n const tier = formatPricingTier(behavior?.pricingTier);\n const productId = behavior?.productId;\n const query = new URLSearchParams();\n\n if (productId != null) {\n query.append('productId', productId);\n }\n\n if (tier != null) {\n query.append('pricingTier', tier);\n }\n\n const q = query.toString();\n window.location.href = `/configure?${q}`;\n };\n};\n","import { ecommerce } from '@uds/tagmg';\nimport { selectors as productSelectors } from '@uds/product';\nimport { GetProductData } from 'core/cta';\nimport { getLanguageCookie } from 'domain/selectors/common';\n\nconst sendProductClicked = ({\n productId,\n list,\n getProductData,\n}: {\n list: string;\n productId?: string | null;\n getProductData: GetProductData;\n}) => {\n const locale = getLanguageCookie();\n\n if (!productId) {\n return;\n }\n return getProductData({\n skuId: productId,\n locale,\n }).then((product) => {\n const id = product?.id;\n const name = product?.name;\n let price = 0;\n // in case we ever get a malformed product, getPrice would throw an error\n try {\n price = productSelectors.getPrice({\n product,\n includeTax: false,\n });\n } catch (e) {\n return;\n }\n\n ecommerce([\n [\n 'addProduct',\n {\n id: `${id}`,\n name,\n price,\n },\n ],\n ['setAction', 'click', { list }],\n ]);\n });\n};\n\nexport default sendProductClicked;\n","import { dispatchFBEvent, ecommerce } from '@uds/tagmg';\nimport { selectors as productSelectors } from '@uds/product';\nimport { GetProductData } from 'core/cta';\nimport { getLanguageCookie } from 'domain/selectors/common';\nimport { dispatchGA4Event } from 'infrastructure/ga4';\n\nconst sendProductOnAddToBasket = ({\n productId,\n list,\n getProductData,\n currency,\n brandId,\n term,\n}: {\n list: string;\n productId?: string | null;\n getProductData: GetProductData;\n currency: string;\n brandId: string;\n term?: number | null;\n}) => {\n const locale = getLanguageCookie();\n if (!productId) {\n return;\n }\n return getProductData({\n skuId: productId,\n locale,\n }).then((product) => {\n let price = 0;\n // in case we ever get a malformed product, getPrice would throw an error\n try {\n price = productSelectors.getPrice({\n product,\n includeTax: true,\n });\n } catch (e) {\n return;\n }\n if (product == null) return;\n const id = product.id;\n const name = product.name;\n const category = product.categoryName;\n dispatchFBEvent('AddToCart', {\n // eslint-disable-next-line camelcase\n content_ids: [id],\n // eslint-disable-next-line camelcase\n content_name: name,\n value: price,\n quantity: 1,\n // eslint-disable-next-line camelcase\n content_type: category,\n currency: currency,\n });\n ecommerce([\n [\n 'addProduct',\n {\n id: `${id}`,\n name,\n price,\n },\n ],\n [\n 'setAction',\n 'add',\n {\n list,\n },\n ],\n ]);\n // Send GA4 ecommerce data\n const items = [{\n 'item_name': product.name,\n 'item_id': product.id,\n 'item_group_id': product.id,\n 'item_brand': brandId,\n 'item_category': product.categoryName,\n 'item_variant': `${product.name} ${term ?? product.defaultPrice?.term}`,\n 'currency': currency,\n 'price': price,\n 'quantity': 1,\n }];\n dispatchGA4Event('add_to_cart', { items });\n });\n};\n\nexport default sendProductOnAddToBasket;\n","import { Ecommerce, ecommerce } from '@uds/tagmg';\nimport { promoNameToPromoId } from 'domain/logic/promotion';\n\nconst sendPromotion = ({ promotion, ec }: { promotion?: string; ec?: Ecommerce }) => {\n // for test purposes, we allow an overwrite\n const ecomm = ec || ecommerce;\n if (!promotion) {\n return;\n }\n\n const promoId = promoNameToPromoId(promotion);\n ecomm([\n [\n 'addPromo',\n {\n id: promoId,\n name: promotion,\n },\n ],\n ['setAction', 'promo_click'],\n ]);\n};\n\nexport default sendPromotion;\n","import { useState, Suspense, lazy, ElementType } from 'react';\nimport { Status } from '@uds/button';\nimport { Product } from '@uds/product';\nimport { BehaviorType } from 'core/ribbons/cta';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { useExternalRoutes } from 'domain/selectors/common';\n\nimport {\n useHandleAddToBasketClick,\n useHandleConfigureClick,\n handlePlayVideoClick,\n useHandleAnalytics,\n useHandleSetVisibilityClick,\n} from './callToActionHandlers';\n\nconst VideoModal = lazy(() => import('presentation/components/modal/Video'));\n\ninterface Props {\n id?: string;\n ribbonId?: string;\n product?: Product;\n behavior?: BehaviorType;\n [key: string]: any;\n}\n\nexport default function (Component: ElementType) {\n return function CallToActionWrapper({ id, ribbonId, behavior, product, ...props }: Props) {\n const [addingStatus, setAddingStatus] = useState(Status.DEFAULT);\n const [isVideoModalOpen, setIsVideoModalOpen] = useState(false);\n const externalRoutes = useExternalRoutes();\n const handleAnalytics = useHandleAnalytics({ ribbonId });\n const handleAddToBasketClick = useHandleAddToBasketClick({\n product,\n setAddingStatus,\n handleAnalytics: () => handleAnalytics({ behavior }),\n postAction: behavior != null && 'postAction' in behavior ? behavior.postAction : undefined,\n });\n const handleConfigureClick = useHandleConfigureClick();\n const handleSetVisibilityClick = useHandleSetVisibilityClick();\n // add an analytics prefixed `id` to the cta if required\n const ctaId = behavior?.analytics?.linkAttribution == null ? id : `usf-cta-${behavior.analytics.linkAttribution}`;\n const actionType = behavior?.type;\n const toggleVideoModal = () => {\n return setIsVideoModalOpen((isOpen) => !isOpen);\n };\n\n const handleClick = (() => {\n if (actionType === Behavior.ADD_TO_BASKET) {\n return () => handleAddToBasketClick({ behavior });\n }\n if (actionType === Behavior.CONFIGURE) {\n return () => handleConfigureClick({ behavior });\n }\n if (actionType === Behavior.PLAY_VIDEO) {\n return () => handlePlayVideoClick({ toggleVideoModal });\n }\n if (actionType === Behavior.SET_VISIBILITY) {\n return () => handleSetVisibilityClick({ behavior });\n }\n if (actionType === Behavior.NAVIGATION) {\n return () => handleAnalytics({ behavior });\n }\n\n return () => null;\n })();\n\n if (actionType === Behavior.PLAY_VIDEO) {\n return (\n <>\n \n {isVideoModalOpen && (\n \n )}\n \n \n >\n );\n }\n\n return (\n \n );\n };\n}\n","import { useCurrency } from '@ux/currency';\nimport { useBrandId } from '@ux/whitelabel';\nimport { Analytics } from 'core/ribbons/cta';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { sendProductClicked, sendProductOnAddToBasket, sendPromotion } from 'application/actions/cta';\nimport { getProductData } from 'infrastructure/cta';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { useRibbon } from 'domain/selectors/ribbons';\n\ninterface Props {\n ribbonId?: string;\n behavior?: {\n type: Behavior;\n analytics?: Analytics;\n productId?: string | null;\n pricingTier?: {\n term?: number | null;\n };\n };\n}\n\nexport default ({ ribbonId }: Props) => {\n const currency = useCurrency();\n const brandId = useBrandId();\n const ribbon = useRibbon(ribbonId);\n const list = createRibbonName(ribbon?.type, ribbon?.props?.name);\n\n return ({ behavior }: Props) => {\n const ctaType = behavior?.type;\n const type = behavior?.analytics?.type;\n const term = behavior?.pricingTier?.term;\n\n if (type === 'PRODUCT') {\n const productId = behavior?.analytics?.productId;\n sendProductClicked({\n productId,\n list,\n getProductData,\n });\n } else if (type === 'PROMOTION') {\n const promotion = behavior?.analytics?.promotion;\n sendPromotion({ promotion });\n } else if (ctaType === 'addToBasket') {\n const productId = behavior?.productId;\n sendProductOnAddToBasket({ productId, list, getProductData, currency, brandId, term });\n }\n };\n};\n","export const formatPricingTier = (tier: { paymentInterval?: number; term?: number } | undefined) => {\n if (tier == null) {\n return;\n }\n if (tier.paymentInterval == null || tier.term == null) {\n return;\n }\n return `${tier.paymentInterval}:${tier.term}`;\n};\n","import { VisibilitySetCta } from 'core/ribbons/cta';\nimport { useVisibilitySetsAction } from 'presentation/context/VisibilitySets';\n\nexport default () => {\n const setVisibility = useVisibilitySetsAction();\n\n return ({ behavior }: { behavior?: VisibilitySetCta }) => {\n if (setVisibility != null) {\n setVisibility(behavior?.visibilitySet);\n }\n };\n};\n","export default ({ toggleVideoModal }: { toggleVideoModal: () => void }) => {\n toggleVideoModal();\n};\n","import { Alignment } from 'domain/constants/alignment';\nimport { css, cx } from 'linaria';\nimport { cssTheme } from '@uds/theme-utils';\n\nconst subtitle = css`\n margin-top: ${cssTheme.gu2};\n`;\n\nconst root = {\n default: css`\n text-align: left;\n display: block;\n width: 100%;\n `,\n centered: css`\n text-align: center;\n `,\n};\n\nconst cta = {\n default: css`\n margin-top: ${cssTheme.gu1};\n &&& {\n ${cssTheme.breakpoints.sm} {\n margin-right: ${cssTheme.gu2};\n }\n }\n `,\n};\nconst ctas = {\n default: css`\n margin-top: ${cssTheme.gu2};\n overflow: hidden;\n &&& {\n ${cssTheme.breakpoints.sm} {\n display: flex;\n }\n }\n `,\n centered: css`\n justify-content: center;\n `,\n};\n\nexport default ({ alignment }: { alignment: Alignment }) => {\n return {\n root: cx(root.default, alignment === Alignment.CENTER && root.centered),\n cta: cta.default,\n ctas: cx(ctas.default, alignment === Alignment.CENTER && ctas.centered),\n subtitle,\n };\n};\n","import React, { ComponentType } from 'react';\nimport PaddingBox from '@uds/padding-box';\nimport { Container } from '@uds/grid';\nimport { Heading02, Heading04 } from '@uds/typography';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport Ribbon from 'components/ribbons/Ribbon';\nimport CallToAction from 'components/common/CallToAction';\nimport { useBreakpoints } from '@ux/responsive';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport { RibbonProps, Type } from 'domain/constants/ribbons';\nimport { CTA } from 'core/ribbons/cta';\nimport { isNilOrEmpty } from 'presentation/utils/generalUtils';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport { Alignment } from 'domain/constants/alignment';\n\nimport getClassNames from './Info.stylesheet';\n\ninterface OuterProps extends RibbonProps {\n title: ShortcodeProps;\n subtitle: ShortcodeProps;\n ctas: Array;\n}\n\nexport const Info = ({ id, loading, name, title, subtitle, ctas, colorway, hBaseline = 1, layout }: OuterProps) => {\n const hasTitle = !isNilOrEmpty(title);\n const hasSubtitle = !isNilOrEmpty(subtitle);\n const hasCta = !isNilOrEmpty(ctas);\n const { isMinSm } = useBreakpoints();\n\n const alignment = findResponsiveItem(useBreakpoints(), [\n layout?.alignmentMobile ?? Alignment.STARTING,\n layout?.alignmentTablet ?? Alignment.STARTING,\n layout?.alignment ?? Alignment.STARTING,\n ]);\n\n const classNames = getClassNames({\n alignment,\n });\n return (\n \n \n \n \n {hasTitle && (\n \n \n \n )}\n {hasSubtitle && (\n \n \n \n )}\n {hasCta && (\n \n {ctas.map((cta, i) => (\n \n \n \n ))}\n \n )}\n \n \n \n \n );\n};\n\nInfo.displayName = 'Info';\n\nexport default errorBoundary(visibilitySet(Info)) as ComponentType;\n","import Info from './Info';\n\nexport default Info;\n"],"sourceRoot":""}