{"version":3,"sources":["webpack:///./presentation/components/ribbons/info/Info.tsx","webpack:///./presentation/components/ribbons/info/Info.stylesheet.ts","webpack:///./presentation/components/ribbons/info/index.ts","webpack:///./presentation/utils/ribbonPadding.ts","webpack:///src/presentation/hocs/errorBoundary.tsx","webpack:///./presentation/hocs/withRibbonImpression.ts","webpack:///./presentation/utils/ribbonWidth.ts","webpack:///./presentation/hocs/deepLink.tsx","webpack:///./presentation/components/ribbons/Ribbon/Ribbon.tsx","webpack:///./presentation/components/ribbons/Ribbon/ConnectedRibbon.ts","webpack:///./presentation/components/ribbons/Ribbon/index.ts","webpack:///./presentation/utils/getBreakpoints.ts","webpack:///../node_modules/@ux/typography/dist/es/typography.js","webpack:///./presentation/components/Shortcode/PendingShortcode.tsx","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/Shortcode.tsx","webpack:///./presentation/components/Shortcode/index.ts","webpack:///./presentation/hocs/visibilitySet.tsx","webpack:///./domain/constants/alignment.ts","webpack:///./presentation/components/common/CallToAction.tsx","webpack:///./domain/constants/callToAction.ts","webpack:///./presentation/hocs/callToAction.js","webpack:///./presentation/hocs/callToActionHandlers/handleAnalytics.ts","webpack:///./presentation/hocs/callToActionHandlers/handleAddToBasketClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleNavigateClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleApplyVoucherClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleConfigureClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handleSetVisibilityClick.ts","webpack:///./presentation/hocs/callToActionHandlers/handlePlayVideoClick.ts","webpack:///./crosscutting/ramda.ts"],"names":["enhance","pureEnhance","hocs","errorBoundary","visibilitySet","hooks","withBreakpointsHook","defaultProps","hBaseline","withProps","ownerProps","hasTitle","isNotNilOrEmpty","title","hasSubtitle","subtitle","hasCta","ctas","theme","layout","colorway","isMinSm","spacing","alignment","useStyles","default","root","textAlign","display","width","percentage","color","getTitleColor","getBodyColor","overflow","marginTop","gu2px","cta","marginRight","modifier","Alignment","CENTER","justifyContent","id","styles","loading","name","Ribbon","type","style","depth","Shortcode","against","code","component","key","i","CallToAction","getAgainst","ribbonId","index","block","r","Info","isMinLg","flush","shrinkLeading","shrinkTrailing","getPaddingSize","shrinkSide","isFlush","leading","Flush","LEADING","trailing","TRAILING","paddingTop","paddingBottom","stylesheet","useTheme","useBreakpoints","backgroundColor","getBackgroundColor","ribbonPadding","cssSides","Side","isMinMd","ErrorBoundary","compose","withState","lifecycle","componentDidCatch","this","hooksA","pipe","mapProps","props","selector","useMemo","getRibbonAnalytics","analytics","useSelector","dispatch","useDispatch","actions","bindActionCreators","sendImpression","withHandlers","onImpression","ribbonName","ribbonType","hooksB","isFullyInViewport","stopWatcher","useEffect","mapPropsHoc","branch","Watch","deepLink","withRouter","componentDidMount","location","hash","scrollWhenReady","animationComplete","setTimeout","scroller","scrollTo","duration","delay","smooth","WrappedComponent","mapFit","fit","Fit","FULLSCREEN","minHeight","FILL","flex","flexBasis","AUTO","height","isFinite","targetRef","useRef","palette","duoLayout","activeFit","findResponsiveItem","getBreakpoints","padding","duoLayoutFlex","duoRibbonWidth","position","flexDirection","inner","ribbon","Colorway","PRIMARY_GRADIENT","backgroundImage","primary","primaryGradient","children","ref","withRibbonImpression","mergeStyles","createHeading","headingSize","Object","assign","Number","concat","_ref","typography","Y","fontWeight","fontFamily","Heading01","Heading02","Heading03","Heading04","Heading05","Heading06","stylesheet$1","_ref$theme","gu","marginBottom","SubHeading01","SubHeading02","stylesheet$2","PreHeading01","PreHeading02","BodyCopy01","content","randomWidth","Math","floor","random","PendingShortcode","lines","elements","displayName","getColor","Against","LIGHT","NEUTRAL","DARK","tertiary","Alt","RecursiveShortcode","rest","Bold","fontStyle","Link","contentType","attributes","externalRoutes","useAppConfig","to","goto","analyticskey","size","TextButtonSize","INHERIT","rel","target","newTab","formatText","text","newline","formattedText","split","join","escapeShortCodes","string","reduce","prev","cur","nl2br","Text","ReactTooltip","lazy","TooltipShortcode","eventToggle","cssTheme","fallback","tagName","useDefaultStyles","maxWidth","Glyph","Sup","List","OrderedList","ListItem","TickListItem","ProductPrice","PhoneNumber","map","element","JSON","stringify","Element","glyph","Italic","Tooltip","ShortcodeWrapper","BaseComponent","PureCallToAction","kind","label","addingStatus","handleClick","behavior","status","Status","PENDING","SUCCESS","FAILURE","DEFAULT","getStatus","openNewWindowProps","buttonProps","omit","onClick","callToAction","Behavior","formatPricingTier","tier","paymentInterval","term","window","useWindow","connect","state","buttonId","getExternalRoutes","getRibbon","product","linkAttribution","ribbonList","createRibbonName","isNilOrEmpty","getAddingStatus","addToBasket","applyVoucher","setVisibility","openReduxModal","signals","open","productClicked","promotionClicked","productAddToBasket","stateProps","dispatchProps","ownProps","handleAnalytics","ctaType","list","productId","promotion","handleAddToBasketClick","postAction","pricingTier","productData","skuId","defaultSkuId","price","selectors","getPrice","includeTax","category","categoryName","handleNavigateClick","handleApplyVoucherClick","voucherCode","handleConfigureClick","query","URLSearchParams","append","q","toString","href","handleSetVisibilityClick","handlePlayVideoClick","videoId","provider","route","params","ADD_TO_BASKET","APPLY_VOUCHER","CONFIGURE","PLAY_VIDEO","SET_VISIBILITY","NAVIGATION","isNotEmpty","isNotNil","mapIndexed","rA","arr","fn","obj"],"mappings":"kdA+IeA,MArBQC,YACrB,QAAS,CACPC,KAAM,CACJC,IACAC,KAEFC,MAAO,CACLC,IACAC,uBAAa,CACXC,UAAW,IAEbC,oBAAWC,IAAD,CACRC,SAAUC,YAAgBF,EAAWG,OACrCC,YAAaF,YAAgBF,EAAWK,UACxCC,OAAQJ,YAAgBF,EAAWO,SAErCR,oBC3HS,EACbS,QACAC,SACAC,WACAC,cAEA,MAAM,QACJC,GACEJ,GAEE,UACJK,GACEJ,EAEJ,OAAOK,YAAU,CACfC,QAAS,CACPC,KAAM,CACJC,UAAW,OACXC,QAAS,QACTC,MAAOC,YAAW,MAEpBjB,MAAO,CACLkB,MAAOC,YAAcd,EAAOE,IAE9BL,SAAU,CACRgB,MAAOE,YAAaf,EAAOE,IAE7BH,KAAM,CACJiB,SAAU,SACVC,UAAWC,YAAM,EAAGd,IAEtBe,IAAK,CACHF,UAAWC,YAAM,EAAGd,KAIxBD,QAAS,CACPJ,KAAM,CACJW,QAAS,QAEXS,IAAK,CACHC,YAAaF,YAAM,EAAGd,KAI1B,CAACiB,YAAS,YAAaC,IAAUC,SAAU,CACzCf,KAAM,CACJC,UAAW,UAEbV,KAAM,CACJyB,eAAgB,YAInB,CACD,CAAErB,WACF,CAAEE,mBDwESvB,CAvGS,EACtB2C,KACAC,SACA1B,QACA2B,UACAC,OACAjC,QACAE,WACAE,OACAG,WACAT,WACAG,cACAE,SACAR,YACAa,UACAF,YAEA,kBAAC4B,EAAA,EAAD,CACEJ,GAAIA,EACJzB,MAAOA,EACPE,SAAUA,EACVyB,QAASA,EACT1B,OAAQA,EACR2B,KAAMA,EACNE,KAAK,QAEL,yBAAKC,MAAOL,EAAOlB,MACjB,kBAAC,IAAD,KACE,kBAAC,IAAD,KACiBf,EACb,kBAAC,IAAD,CACEO,MAAOA,EACPgC,MAAO1C,EACPyC,MAAOL,EAAO/B,OAEd,kBAACsC,EAAA,EAAD,CACEC,QAAShC,EACTiC,KAAMxC,KATd,KAaiBC,EACb,kBAAC,IAAD,CACEI,MAAOA,EACPoC,UAAU,IACVL,MAAOL,EAAO7B,UAEd,kBAACoC,EAAA,EAAD,CACEC,QAAShC,EACTiC,KAAMtC,KArBd,KAyBiBC,EACb,yBAAKiC,MAAOL,EAAO3B,MAGXA,EAHR,0BAMI,yBACEsC,IAAKC,EACLP,MAAOL,EAAOP,KAEd,kBAACoB,EAAA,EAAD,GACEvC,MAAOA,EACPkC,QAASM,YAAWtC,GACpBuC,SAAUhB,EACViB,MAAOJ,EACPK,MAAOC,IAAMzC,IACTgB,YAhBZ,IA1BJ,UElEO0B,a,oBCFf,0EAKe,MACbzC,UACAD,UACA2C,UACA7C,SACA8C,YASA,GAAIH,IAASG,GAAO,GAElB,MAAO,GAGT,MAAM,cAEJC,EAFI,eAIJC,GACEL,IAAY,GAAI3C,GASdiD,EAAiB,CAACC,EAAoBC,IAEtCA,EACK,EAGFR,IAAO,CACZ,CAAEA,IAASO,GAAY,GAAO,IAAMP,IAClCA,KAAS,GACTA,IAAS,GACTA,IAAS,IAHyBA,CAIlCzC,IACF,CAAEyC,IAAS,WAAW,GAAOA,IAAS,IACtC,CAAEA,IAAS,WAAW,GAAOA,IAAS,IACtC,CAAEA,IAAKA,IAAS,KARXA,CASJ,CACDE,UACA3C,UACA6C,gBACAC,mBAIEI,EAAUH,EAAe,gBAAiBH,IAAUO,IAAMC,SAC1DC,EAAWN,EAAe,iBAAkBH,IAAUO,IAAMG,UAElE,MAAO,CACLC,WAAYxC,YAAMmC,EAASjD,GAC3BuD,cAAezC,YAAMsC,EAAUpD,M,oBClEnC,4GA2BA,MAAMwD,EAAa,EAAC,oBAAoBb,YACtC,MAAM,MAAE/C,GAAU6D,eACZ,4BAAoBf,GAAYgB,eAChC,QAAE1D,GAAR,EAEA,OAAOE,YACL,CACEC,QAAS,CACPC,KAAM,CACJuD,gBAAiBC,YAAmBhE,EADhC,GAEJa,MAAOC,YAAcd,EAFjB,MAGDiE,YAAc,wCAKflB,aAECmB,YAAS,OAAQC,IAAT,EAAiBjD,YAAM,EAV9B,IAWJT,UAAW,WAGfN,QAAS,CACPK,KAAM,IACD0D,YAAS,OAAQC,IAAT,EAAiBjD,YAAM,EAAvB,OAIjB,CAAC,CAAEhB,YAAY,CAAEC,WAAW,CAAEiE,cAInB,QACb,MAAMC,EAAgB,IACpBzB,kBADoB,GAEpB,EAAGlB,YACD,yBAAKK,MAAOL,EAAZ,MACE,2BACE,uBAASD,GAAT,6BAIN,GAAuB,oBATzB,IAYA,OAAO6C,YACLC,YAAU,aAAc,iBADZ,GAEZC,YAAU,CACRC,kBAAmB,WAEjBC,KAAA,2BAGJnF,YARK+E,IAAP,K,8KC5DF,MAAMK,EAASC,eACbC,mBAAUC,IACR,MAAM,GAAErD,GAAOqD,EACTC,EAAWC,kBAAQ,IAAMC,YAAmBxD,GAAK,CAAEA,IACnDyD,EAAYC,YAAYJ,GACxBK,EAAWC,cACXC,EAAUC,6BAAmB,CAAEC,oBAAkBJ,GAEvD,OAAOxC,IAAgBkC,EAAO,CAC5BI,YACAI,cAGJG,uBAAa,CACXC,aAAc,EACZ9D,OACAE,OACAoD,YACAI,SACEE,qBASE,IAAMA,EAAe,IACtBN,EACHS,WAAY/D,EACZgE,WAAY9D,OAKZ+D,EAASjB,eACbrF,oBAAU,EACRuG,oBACAC,cACAL,eACAR,gBAOAc,oBAAU,KACJF,IACFC,IACAL,EAAaR,KAEd,CAAEY,OAIM/G,kBAAY,mBAAoB,CAC7CC,KAAM,CACJiH,YAAYtB,GACZuB,YACEtD,IAAgBA,IAAaA,KAAU,aACvCuD,SAEFF,YAAYJ,M,mCC3DD,I,wBC2BAO,MApCE9B,YACf+B,IACA7B,YAAU,CACR8B,kBAAmB,WAKjB,GAAI5B,KAAKI,MAAMyB,SAASC,OAAU,IAAG9B,KAAKI,MAAMlD,KAAQ,CACtD,MAAM6E,EAAkB,KAGtB,GAAI/B,KAAKI,MAAMnD,UAAY+C,KAAKI,MAAM4B,kBACpC,OAAOC,WAAWF,EAAiB,KAGrCG,WAASC,SAASnC,KAAKI,MAAMlD,KAAM,CACjCkF,SAAU,IACVC,MAAO,IACPC,QAAQ,KAGZL,WAAWF,EAAiB,SAIjCQ,GACSnC,GACN,kBAAC,WAAD,KACE,kBAAC,UAAD,CAASlD,KAAMkD,EAAMlD,OACrB,kBAACqF,EAAqBnC,K,wECK9B,MAAMoC,EAAUC,GAAavE,IAAO,CAClC,CAAEA,IAASwE,IAAIC,YAAazE,IAAS,CACnC0E,UAAW,WAEb,CAAE1E,IAASwE,IAAIG,MAAO3E,IAAS,CAC7B4E,KAAM,EACNC,UAAW,UAEb,CAAE7E,IAASwE,IAAIM,MAAO9E,IAAS,CAC7B+E,OAAQ,UAEV,CAAEC,SAAUhF,IAAS,CACnB0E,UAAWH,KAEb,CAAEvE,IAAKA,IAAS,CACd+E,OAAQ,WAfiB/E,CAiB1BuE,GAkIYrI,MA9BQC,YAAY,SAAU,CAC3CC,KAAM,CACJoH,GAEFjH,MAAO,CACLI,oBAAU,KAgBD,CACLsI,UAhBgBC,iBAAO,OAmB3B1I,IACAG,oBA5He,EACjBS,QACAE,WACAyB,UACA1B,SACA8C,WACG+B,MAEH,MAAM,QACJiD,EADI,QAEJ3H,GACEJ,GACE,IAEJmH,GACEvE,IAAY,GAAI3C,IAEd,QACJE,EADI,QAEJiE,EAFI,QAGJtB,EAHI,UAIJkF,GACElD,EAEEmD,EAAYC,YAChBC,YAAerD,GACfqC,GAGIiB,EAAUnE,YAAc,CAC5B7D,UACAD,UACA2C,UACA7C,SACA8C,UAGIsF,EFnGsB,GAC5BjE,UACA4D,gBAKA,IAAK5D,GAAwB,MAAb4D,EACd,MAAO,GAIT,MAAO,CACLR,MAFgBpD,GAAW4D,EAAa,GAAK,KAEtC,MEsFaM,CAAe,CACnClE,UACA4D,cAGF,OAAO1H,YAAU,CACfC,QAAS,CACPC,KAAM,CACJuD,gBAAiBC,YAAmBhE,EAAOE,GAC3CqI,SAAU,WACV7H,QAAS,OACT8H,cAAe,SACf7H,MAAOC,YAAW,QACfsG,EAAOe,MACPG,KACAC,GAELI,MAAO,CACLjB,KAAM,EACNC,UAAW,OACX/G,QAAS,OACTiH,OAAQ,QAEVe,OAAQ,CACNhI,QAAS,OACT8H,cAAe,SACf7H,MAAOC,YAAW,OAItB,CAACS,YAAS,WAAYsH,IAASC,mBAAoB,CACjDpI,KAAM,CACJqI,gBAAkB,6BAA4Bd,EAAQe,YAAYf,EAAQgB,sBAG7E,CACD,CAAEpH,WACF,CAAEzB,YACF,CAAEC,WACF,CAAEiE,WACF,CAAEtB,iBAmDShE,CA/CW,EACxB4C,SACAmG,YACAmB,cAEA,6BAASjH,MAAOL,EAAOlB,MACrB,yBAAKuB,MAAOL,EAAO+G,OACjB,yBACE1G,MAAOL,EAAOgH,OACdO,IAAKpB,GAEJmB,MCjJMlK,MAJCC,YAAY,kBAAmB,CAC7CC,KAAM,CAAEkK,IAGKpK,CAAQ+C,GCJRA,O,oBCLf,aAMgBiD,OAAoBlC,IAAO,CACzC,UACA,UACA,UACA,WACCkC,I,oBCXH,4hBAWIqE,EAAc,YAAK,YAAS,YAAM,SAAU,CAAC,YAAS,IAAgB,CAAC,YAAK,CAAC,SAAU,SAAU,YAAO,GAAI,WAAY,MAAY,YAAO,WAE3IC,EAAgB,SAAuBxH,EAAMQ,EAAWiH,EAAazF,GACvE,OAAO,YAAYhC,EAAM,CACvB5C,KAAM,CAAC,KACPG,MAAO,CAAC,uBAAa,CACnBiD,UAAWA,IACT,aAAe,SAAU0C,GAC3B,OAAOlB,EAAW0F,OAAOC,OAAO,GAAIzE,EAAO,CACzCuE,YAAaA,QAEb,mBAAS,YAAKF,GAAa,SAAUrE,GAEvC,OAAI,YAAG0E,OAAQ1E,EAAM9C,OACZ,YAAM,YAAa,IAAIyH,OAAO3E,EAAM9C,OAAQ8C,GAG9CA,QAdJ,EAgBJ,SAAU4E,GACX,IAAI3H,EAAQ2H,EAAK3H,MACbiH,EAAWU,EAAKV,SAChB5G,EAAYsH,EAAKtH,UACrB,OAAO,wBAAcA,EAAW,CAC9BL,MAAOA,GACNiH,OAIHpF,EAAa,SAAoB8F,GACnC,IAAIC,EAAaD,EAAK1J,MAAM2J,WACxBxJ,EAAUuJ,EAAKvJ,QACf2C,EAAU4G,EAAK5G,QACfuG,EAAcK,EAAKL,YACvB,OAAO,IAAS,CACd9I,QAAS,CACPC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,GAAa,YAAS,SAAU,IAAKC,EAAG,GAAI,CACjFC,WAAY,SACZC,WAAYH,EAAWjJ,WAG3BP,QAAS,CACPK,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,KAEzC7G,QAAS,CACPtC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,MAExC,CAAC,CACFxJ,QAASA,GACR,CACD2C,QAASA,MAMTiH,EAAYX,EAAc,YAAa,KAAM,CAAC,YAAW,aAAY,WAAUxF,GAC/EoG,EAAYZ,EAAc,YAAa,KAAM,CAAC,WAAU,YAAW,cAAaxF,GAChFqG,EAAYb,EAAc,YAAa,KAAM,CAAC,WAAU,WAAU,aAAYxF,GAC9EsG,EAAYd,EAAc,YAAa,KAAM,CAAC,WAAU,WAAU,YAAWxF,GAC7EuG,EAAYf,EAAc,YAAa,KAAM,CAAC,YAAW,WAAU,YAAWxF,GAC9EwG,EAAYhB,EAAc,YAAa,KAAM,CAAC,aAAY,YAAW,YAAWxF,GAEhFyG,EAAe,SAAoBX,GACrC,IAAIY,EAAaZ,EAAK1J,MAClB2J,EAAaW,EAAWX,WACxBvJ,EAAUkK,EAAWlK,QACrBmK,EAAKb,EAAKa,GACVpK,EAAUuJ,EAAKvJ,QACf2C,EAAU4G,EAAK5G,QACfuG,EAAcK,EAAKL,YACvB,OAAO,IAAS,CACd9I,QAAS,CACPC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,GAAa,CAClD1I,UAAW,YAAM,YAAU,EAAGsJ,GAAKnK,GACnCoK,aAAc,EACdX,WAAY,SACZC,WAAYH,EAAWjJ,WAG3BP,QAAS,CACPK,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,KAEzC7G,QAAS,CACPtC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,MAExC,CAAC,CACFxJ,QAASA,GACR,CACD2C,QAASA,MAMT2H,EAAerB,EAAc,eAAgB,KAAM,CAAC,YAAW,WAAU,YAAWiB,GACpFK,EAAetB,EAAc,eAAgB,KAAM,CAAC,aAAY,aAAY,cAAY,SAAUtE,GACpG,OAAOuF,EAAa,YAAevF,EAAO,CACxCyF,GAAI,QAIJI,EAAe,SAAoBjB,GACrC,IAAIY,EAAaZ,EAAK1J,MAClB2J,EAAaW,EAAWX,WACxBvJ,EAAUkK,EAAWlK,QACrBD,EAAUuJ,EAAKvJ,QACf2C,EAAU4G,EAAK5G,QACfuG,EAAcK,EAAKL,YACvB,OAAO,IAAS,CACd9I,QAAS,CACPC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,GAAa,CAClD1I,UAAW,EACXuJ,aAAc,YAAM,EAAGpK,GACvByJ,WAAY,SACZC,WAAYH,EAAWjJ,WAG3BP,QAAS,CACPK,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,KAEzC7G,QAAS,CACPtC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,MAExC,CAAC,CACFxJ,QAASA,GACR,CACD2C,QAASA,MAMT8H,EAAexB,EAAc,eAAgB,MAAO,CAAC,aAAY,YAAW,YAAWuB,GACvFE,EAAezB,EAAc,eAAgB,MAAO,CAAC,aAAY,aAAY,aAAYuB,GAiCzFG,EAAa1B,EAAc,aAAc,IAAK,CAAC,UAAS,UAAS,YA/BlD,SAAoBM,GACrC,IAAIY,EAAaZ,EAAK1J,MAClB2J,EAAaW,EAAWX,WACxBvJ,EAAUkK,EAAWlK,QACrBD,EAAUuJ,EAAKvJ,QACf2C,EAAU4G,EAAK5G,QACfuG,EAAcK,EAAKL,YACvB,OAAO,IAAS,CACd9I,QAAS,CACPC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,GAAa,CAClD1I,UAAW,YAAM,EAAGb,GACpBoK,aAAc,EACdX,WAAY,SACZC,WAAYH,EAAWoB,WAG3B5K,QAAS,CACPK,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,KAEzC7G,QAAS,CACPtC,KAAM8I,OAAOC,OAAO,GAAIF,EAAY,GAAGM,MAExC,CAAC,CACFxJ,QAASA,GACR,CACD2C,QAASA,S,iDCjKb,MAAMkI,EAAc,IAAMC,KAAKC,MAAO,GAAAD,KAAKE,SAAwB,IAE7DC,EAAmB,EACvBjJ,OACAD,aAEA,0BACEH,MAAO,CACLrB,QAAS,eACTC,MAAUqK,IAAF,MAGV,kBAAC,IAAD,CACEK,MAAOlJ,GAAQA,EAAKmJ,SAAW,EAAI,EACnCpJ,QAASA,KAKfkJ,EAAiBG,YAAc,mBAEhBH,Q,uOC3Bf,MAAMI,EAAW,CAACxL,EAAckC,KAC9B,OAAQA,GACR,KAAKuJ,IAAQC,MACb,KAAKD,IAAQE,QAAS,OAAO3L,EAAM+H,QAAQe,QAC3C,KAAK2C,IAAQG,KAAM,OAAO5L,EAAM+H,QAAQ8D,SACxC,QAAS,MAAO,YAGZC,EAAM,EACVC,qBACAT,WACApJ,aACG8J,MAEH,MAAM,MACJhM,GACE6D,cACJ,OACE,0BAAM9B,MAAO,CACXlB,MAAO2K,EAASxL,EAAOkC,KAGvB,kBAAC6J,EAAD,GACET,SAAUA,EACVtL,MAAOA,EACPkC,QAASA,GACL8J,MAMZF,EAAIP,YAAc,MAEHO,Q,+MCpCf,MAAMG,EAAO,EAAGX,WAAUS,wBAAuBC,KAC/C,0BAAMjK,MAAO,CAAE8H,WAAY,SACzB,kBAACkC,EAAD,GACET,SAAUA,GACNU,KAKVC,EAAKV,YAAc,OAEJU,Q,+MCXf,MAAMA,EAAO,EAAGX,WAAUS,wBAAuBC,KAC/C,0BAAMjK,MAAO,CAAEmK,UAAW,WACxB,kBAACH,EAAD,GACET,SAAUA,GACNU,KAKVC,EAAKV,YAAc,OAEJU,Q,gOCNf,MAAME,EAAO,EACXJ,qBACAT,WACAc,cACAC,aACAnK,aACG8J,MAC0B,QAC7B,MAAM,MACJhM,GACE6D,cACEyI,EAAc,mBAAGC,YAAa,cAAhB,aAAG,EAAqBD,gBAAxB,EAA0C,GAC9D,OACE,kBAAC,IAAD,CACEtM,MAAOA,EACPwM,GAAIH,EAAWI,KACfhL,GAAI4K,EAAWK,aAAgB,kBAAiBL,EAAWK,aAAiB,KAC5ExK,QAASA,EACTkK,YAAaA,EACbO,KAAMC,IAAeC,QACrBP,eAAgBA,EAChBQ,IAAKT,EAAWS,IAChBC,OAA4B,SAApBV,EAAWW,OAAkB,SAAW,MAEhD,kBAACjB,EAAD,GACET,SAAUA,GACNU,MAMZG,EAAKZ,YAAc,OAEJY,QCxCf,MAoBMc,EAAa,CAACC,EAAcC,KAEhC,MAAMC,EAtBkBF,KACxB,GAAoB,iBAATA,EACT,OAAO,KAKT,OAHiB,MAACA,IAAQ,IAAIG,MAAM,MAAMC,KAAK,KACrBD,MAAM,OAAOC,KAAK,MAClBD,MAAM,OAAOC,KAAK,OAgBtBC,CAAiBL,GACvC,OAAgB,IAAZC,EACKC,EATII,KAAmB,MAACA,IAAU,IAAIH,MAAM,MAGpDI,OAAO,CAACC,EAAMC,EAAKrL,IAAM,CAAEoL,EAAO,wBAAIrL,IAAKC,IAAOqL,IAQ5CC,CAAMR,IAOTS,EAAO,EAAGX,OAAMU,WACpB,kBAAC,WAAD,KACGX,EAAWC,EAAMU,IAItBC,EAAKtC,YAAc,OAEJsC,Q,QCjCf,MAAMC,EAAeC,eAAK,IAAM,qCAK1BC,EAAmB,EAAC,4CAIxB1C,eAEA,MAAM,QACJxI,GACEgB,eACE,MACJ9D,GACE6D,cACEoK,EAAcnL,OAAU,EAA9B,UACMsF,EAAU8F,IAAhB,IACM3L,EACJ,uBACEvC,MADF,EAEE2M,KAAMC,IAFR,QAGE1K,QAHF,GAKGmK,EAAD,OAIJ,OACE,8BAAU8B,SAAV,GAEE,qBACEC,QADF,OAEEH,YAFF,EAGEI,kBAHF,EAIEjG,QAJF,EAKE2C,QACE,yBACEhJ,MAAO,CACLuM,SAAU,MAGZ,qBACEhD,SADF,MAMJ,KAMR0C,iCAEA,Q,+MChDA,MAAMO,EAAQR,eAAK,IAAM,iCAKnBS,EAAMT,eAAK,IAAM,iCAKjBU,EAAOV,eAAK,IAAM,iCAKlBW,EAAcX,eAAK,IAAM,iCAKzBY,EAAWZ,eAAK,IAAM,iCAKtBa,EAAeb,eAAK,IAAM,iCAK1Bc,EAAed,eAAK,IAAM,iCAK1Be,EAAcf,eAAK,IAAM,iCAyCzBhC,EAAqB,EAAGT,cAAaU,KACzC,oCACGV,EAASyD,IAAKC,GACb,kBAAC/M,EAAD,GAGEI,IAAM,sBAAqB4M,KAAKC,UAAUF,GAC1C7M,KAAM6M,GACFhD,MAaN/J,EAAY,EAAGE,UAAS6J,MAAoC,QAChE,IAAIlH,EAAQ,IACPkH,GAEe,iBAAT7J,EACT2C,EAAM3C,KAAOA,EAEb2C,EAAQ,IACHA,KACA3C,GAIP2C,EAAM5C,QAAUM,YAAWsC,EAAM5C,SACjC4C,EAAMiH,mBAAqBA,EAC3BjH,EAAMuH,WAAN,mBAAmBvH,SAAnB,aAAmB,EAAOuH,YAA1B,EAAwC,GACxC,MAAM8C,EAAWrK,IAAe,QAC9B,MAAM,KACJ3C,EADI,KAEJL,EAFI,KAGJF,GACEkD,EACJ,GAA0B,iBAAfA,EAAM3C,KACf,OACE,kBAAC,EAAD,CAAM+K,KAAM/K,IAGhB,GAAmB,SAAf2C,EAAMhD,KACR,OACE,kBAAC,EAASgD,GAGd,GAAa,YAAThD,EACF,OAAQF,GACR,IAAK,OACH,MAAiC,YAA7BkD,SAAA,UAAAA,EAAOuH,kBAAP,eAAmBtK,OAEnB,kBAAC2M,EAAgB5J,GAInB,kBAAC2J,EAAS3J,GAEd,IAAK,KACuC,QAA1C,MAAiC,WAA7BA,SAAA,UAAAA,EAAOuH,kBAAP,eAAmBtK,OAEnB,kBAAC6M,EAAD,KACM9J,EADN,CAEEsK,MAAK,mBAAEtK,EAAMuH,kBAAR,aAAE,EAAkB+C,OAApB,EAA6B,UAKtC,kBAACT,EAAa7J,GAElB,IAAK,IACH,OACE,kBAACuK,EAAWvK,GAEhB,IAAK,IACH,OACE,kBAAC,EAASA,GAEd,IAAK,MACH,OACE,kBAAC,EAAQA,GAEb,IAAK,MACH,OACE,kBAAC0J,EAAQ1J,GAEb,IAAK,QACH,OACE,kBAACyJ,EAAUzJ,GAEf,IAAK,MACH,OACE,kBAACgK,EAAgBhK,GAErB,IAAK,OACH,OACE,kBAAC,EAASA,GAEd,IAAK,eACH,OACE,kBAAC+J,EAAiB/J,GAEtB,IAAK,UACH,OACE,kBAACwK,EAAYxK,GAEjB,IAAK,OACH,OACE,kBAAC,EAAuBA,GAE5B,QAAS,OAAO,KAGlB,OAAO,MAGT,OACE,kBAACqK,EAAYrK,IAIXyK,EAAoBzK,GACxB,kBAAC,WAAD,CACEqJ,SACE,kBAAC,EAAqBrJ,IAGxB,kBAAC7C,EAAc6C,IAInByK,EAAiBhE,YAAc,YAEhBgE,QCrOAtN,O,oBCLf,oCAGgBuN,OAAuB5M,IACrCA,IAAO,WACNkC,GAAU,kBAAC0K,EAAkB1K,GAC7BA,GACC,yBAAK/C,MAAO,CAAErB,QAAS,SACrB,kBAAC8O,EAAkB1K,M,oBCRlB,IAAKxD,EAAZ,kC,SAAYA,K,oBAAAA,E,iBAAAA,M,wRC4BZ,MASMmO,EAAmB,EACvBC,OACAxN,UAAUuJ,IAAQC,MAClBiE,QACAC,eACAC,cACAC,cACGhL,MACa,UAEhB,MAAMiL,EAnBWH,KACjB,OAAQA,GACR,IAAK,YAAa,OAAOI,IAAOC,QAChC,IAAK,UAAW,OAAOD,IAAOE,QAC9B,IAAK,SAAU,OAAOF,IAAOG,QAC7B,QAAS,OAAOH,IAAOI,UAcRC,CAAUT,GAEnBnD,EAAI,SAAGqD,aAAH,EAAGA,EAAUrD,MAAb,EAAqB,KAEzBO,EAAM,SAAG8C,aAAH,EAAGA,EAAU9C,QAAb,EAAuB,KAE7BF,EAAG,SAAGgD,aAAH,EAAGA,EAAUhD,KAAb,EAAoB,KAEvBwD,EAA8B,SAATtD,EAAkB,CAC3CF,IAAKA,EACLC,OAAQ,UACN,GAEEwD,EAAcC,YAAK,CACvB,WACA,UACA,WACA,WACA,QACA,uBACA,2BACA,uBACA,0BACA,yBACA,sBACA,kBACA,cACC1L,GAEH,OACE,kBAAC,IAAD,GACE4K,KAAMA,EACNxN,QAASA,EACT6N,OAAQA,EACRU,QAASZ,EACTrD,GAAIC,GACA6D,EACAC,GAEHZ,IAKPF,EAAiBlE,YAAc,eAEhBmF,gBAAajB,I,sJC7FrB,IAAKkB,G,SAAAA,K,wBAAAA,E,4BAAAA,E,8BAAAA,E,sBAAAA,E,2CAAAA,E,wBAAAA,M,KASG,I,0BCaR,MAAMC,EAAqBC,IAChC,GAAY,MAARA,GAGwB,MAAxBA,EAAKC,iBAAwC,MAAbD,EAAKE,KAGzC,MAAQ,GAAEF,EAAKC,mBAAmBD,EAAKE,QAyD1BzM,gBACb/E,YAAU,KAAM,CACdyR,OAAQC,iBAEVC,YA1DsB,CAACC,EAAOrM,KAAU,MACxC,MAAMsM,EAAY,GAAEtM,EAAMrC,gBAAgBqC,EAAMpC,QAC1C4J,EAAiB+E,YAAkBF,GACnCzI,EAAS4I,YAAUxM,EAAMrC,SAAhB6O,CAA0BH,GACnCvL,EAAa8C,aAAH,EAAGA,EAAQ5G,KACrB6D,EAAa+C,SAAH,UAAGA,EAAQ5D,aAAX,aAAG,EAAelD,KAC5B2P,EAAUzM,aAAH,EAAGA,EAAOyM,QAEjB9P,EAAK,MAAO,MAChB,MAAMqO,EAAWhL,EAAMgL,SACjBrO,EAAKqD,EAAMrD,GACjB,OAAIqO,SAAJ,UAAIA,EAAU5K,iBAAd,aAAI,EAAqBsM,iBACf,WAAU1B,EAAS5K,UAAUsM,gBAEhC/P,GANE,GAQLgQ,EAAaC,YAAiB9L,EAAYD,GAC1CmK,EAAW6B,YAAa7M,EAAMgL,UAAY,GAAKhL,EAAMgL,SAC3D,MAAO,CACLxD,iBACAsD,aAAcgC,YAAgBR,EAAhBQ,CAA0BT,GACxCC,WACAK,aACAF,UACA9P,KACAqO,aAIwB1K,GAC1BG,6BACE,CACEsM,gBACAC,iBACAC,kBACAC,eAAgBC,IAAQC,KACxBC,mBACAC,qBACAC,wBAEFjN,GAGe,CAACkN,EAAYC,EAAeC,KACtC,IACFF,KACAE,EACHlN,QAAS,IACJiN,KACAC,EAASlN,YAUhBG,YAAa,CACXgN,gBCzFF3N,GAiBG,KAAM,UACT,MAAM4N,EAAU5N,SAAH,UAAGA,EAAOgL,gBAAV,aAAG,EAAiBhO,KAC3BA,EAAOgD,SAAH,UAAGA,EAAOgL,gBAAV,iBAAG,EAAiB5K,iBAApB,aAAG,EAA4BpD,KACnC6Q,EAAO7N,EAAM2M,WACbF,EAAUzM,EAAMyM,QAEtB,GAAa,YAATzP,EAAoB,SACtB,MAAM8Q,EAAY9N,SAAH,UAAGA,EAAOgL,gBAAV,iBAAG,EAAiB5K,iBAApB,aAAG,EAA4B0N,UAC9C9N,EAAMQ,QAAQ6M,eAAe,CAC3BS,YACAD,cAEG,GAAa,cAAT7Q,EAAsB,SAC/B,MAAM+Q,EAAY/N,SAAH,UAAGA,EAAOgL,gBAAV,iBAAG,EAAiB5K,iBAApB,aAAG,EAA4B2N,UAC9C/N,EAAMQ,QAAQ8M,iBAAiB,CAAES,kBACZ,gBAAZH,GACT5N,EAAMQ,QAAQ+M,mBAAmB,CAC/BM,OACApB,eDwDJ9L,YAAa,CACXqN,uBE5FYhO,GAYV,KACJ,MAAM,SACJsM,EADI,QAEJG,EACAjM,SAAS,YAAEuM,GACX/B,UAAU,UAAE8C,EAAF,WAAaG,EAAb,YAAyBC,GAJ/B,gBAKJP,GACE3N,EACEmO,EAAc,CAClBC,MAAO3B,EAAUA,EAAQ4B,aAAe,KACxCvR,KAAM2P,EAAUA,EAAQ3P,KAAO,KAC/BwR,MAAO7B,EAAU8B,IAAUC,SAAS,CAClC/B,UACAgC,YAAY,IACT,KACLC,SAAUjC,EAAUA,EAAQkC,aAAe,MAE7C5B,EACET,EACAwB,EACAG,EACAnC,EAAkBoC,GAClB,EACAC,GAGFR,KFuDEiB,oBGhGW,EAAGjB,qBAAgD,KAChEA,KHgGEkB,wBIjGW,EACbvC,WACA9L,SACEwM,gBAEFhC,UACE8D,cACAb,iBAWE,KACJjB,EAAaV,EAAUwC,EAAab,IJ+ElCc,qBKhGW,EACb7C,SACAlB,UACE8C,YACAI,kBASK,KACL,MAAMnC,EAAOD,EAAkBoC,GACzBc,EAAQ,IAAIC,gBAClBD,EAAME,OAAO,YAAapB,GACtB/B,GACFiD,EAAME,OAAO,cAAenD,GAE9B,MAAMoD,EAAIH,EAAMI,WAChBlD,EAAOzK,SAAS4N,KAAQ,cAAaF,GL4ErCG,yBMnGW,EACb9O,SACEyM,iBAEFjC,cAQI,KACJiC,EAAcjC,EAAS5Q,gBNuFrBmV,qBOpGW,EACb/O,SACE0M,kBAEFlC,UACEwE,UACAC,eAUE,KACJvC,EAAe,CACbwC,MAAO,aACPC,OAAQ,CACNH,UACAC,iBPiFJhV,YAAWC,IAAD,CACRqQ,YAAa,MAAO,MAClB,iBAAQrQ,EAAWsQ,gBAAnB,aAAQ,EAAqBhO,MAC3B,KAAK6O,EAAS+D,cACZ,OAAOlV,EAAWsT,uBACpB,KAAKnC,EAASgE,cACZ,OAAOnV,EAAWmU,wBACpB,KAAKhD,EAASiE,UACZ,OAAOpV,EAAWqU,qBACpB,KAAKlD,EAASkE,WACZ,OAAOrV,EAAW6U,qBACpB,KAAK1D,EAASmE,eACZ,OAAOtV,EAAW4U,yBACpB,KAAKzD,EAASoE,WACZ,OAAOvV,EAAWkU,oBACpB,QACE,MAAO,IAAM,OAfN,Q,oBQvGjB,kKAOA,MAAM,WACJsB,EADI,SAEJC,EAFI,WAGJC,GACEC,EAUkBvS,IAAS,EAAG,CAACuL,EAAeiH,IAAexS,IAC/DA,IAAY,IACZA,IACAA,IAAYuL,GAHmDvL,CAI/DwS,IAEyBxS,IACzBA,IACAA,KAG2BA,IAE3BA,IACAA,KAGqBA,IAAS,EAAG,CAACyS,EAASC,IAAa1S,IACxDA,IAAY,IACZA,IACEA,IACEA,IAAUA,KACV,CACEA,IACEA,IAAS,GACTyS,GAEFzS,OAINA,IACAA,IAfwDA,CAgBxD0S","file":"pex-static/40/32.4379f5b10f21cb1ef3e3.chunk.js","sourcesContent":["import React from 'react';\nimport {\n withProps,\n defaultProps,\n} from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Container } from '@ux/grid';\nimport PaddingBox from '@ux/padding-box';\nimport { Heading02, SubHeading01 } from '@ux/typography';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport Ribbon from 'components/ribbons/Ribbon';\nimport CallToAction from 'components/common/CallToAction';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { isNotNilOrEmpty } from 'crosscutting/ramda';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport stylesheet, { Styles } from './Info.stylesheet';\nimport * as r from 'ramda';\nimport { RibbonProps } from 'domain/constants/ribbons';\nimport { CTA } from 'core/ribbons/cta';\n\ninterface OuterProps extends RibbonProps {\n title: ShortcodeProps,\n subtitle: ShortcodeProps,\n ctas: CTA[],\n}\ninterface DefaultProps extends OuterProps {\n hBaseline: number,\n}\nexport interface InnerProps extends DefaultProps, BreakpointProps {\n styles: Styles,\n hasTitle: boolean,\n hasSubtitle: boolean,\n hasCta: boolean,\n}\n\ndeclare const i: number;\ndeclare const cta: CTA;\n\nexport const PureInfo = ({\n id,\n styles,\n theme,\n loading,\n name,\n title,\n subtitle,\n ctas,\n colorway,\n hasTitle,\n hasSubtitle,\n hasCta,\n hBaseline,\n isMinSm,\n layout,\n}: InnerProps) => (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n \n
\n \n \n \n \n \n);\n\nexport const enhance = pureEnhance(\n 'Intro', {\n hocs: [\n errorBoundary,\n visibilitySet,\n ],\n hooks: [\n withBreakpointsHook,\n defaultProps({\n hBaseline: 1,\n }),\n withProps((ownerProps: DefaultProps) => ({\n hasTitle: isNotNilOrEmpty(ownerProps.title),\n hasSubtitle: isNotNilOrEmpty(ownerProps.subtitle),\n hasCta: isNotNilOrEmpty(ownerProps.ctas),\n })),\n withProps(stylesheet),\n ],\n }\n);\n\nexport default enhance(PureInfo);\n","import { useStyles } from '@team-griffin/stylr';\nimport { modifier, percentage } from '@ux/style-utils';\nimport { getTitleColor, getBodyColor } from 'presentation/utils/colorway';\nimport { gu2px } from '@ux/theme-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport { InnerProps } from './Info';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n title: CSSProperties,\n subtitle: CSSProperties,\n ctas: CSSProperties,\n cta: CSSProperties,\n}\nexport default ({\n theme,\n layout,\n colorway,\n isMinSm,\n}: InnerProps) => {\n const {\n spacing,\n } = theme;\n\n const {\n alignment,\n } = layout;\n\n return useStyles({\n default: {\n root: {\n textAlign: 'left',\n display: 'block',\n width: percentage(100),\n },\n title: {\n color: getTitleColor(theme, colorway),\n },\n subtitle: {\n color: getBodyColor(theme, colorway),\n },\n ctas: {\n overflow: 'hidden',\n marginTop: gu2px(2, spacing),\n },\n cta: {\n marginTop: gu2px(1, spacing),\n },\n },\n\n isMinSm: {\n ctas: {\n display: 'flex',\n },\n cta: {\n marginRight: gu2px(1, spacing),\n },\n },\n\n [modifier('alignment', Alignment.CENTER)]: {\n root: {\n textAlign: 'center',\n },\n ctas: {\n justifyContent: 'center',\n },\n },\n\n }, [\n { isMinSm },\n { alignment },\n ]);\n};\n","import Info from './Info';\n\nexport default Info;\n","import { Flush } from 'domain/constants/ribbons';\nimport { gu2px } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { Layout } from 'domain/constants/layout';\n\nexport default ({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n}: {\n spacing: number,\n isMinSm: boolean,\n isMinLg: boolean,\n layout?: Layout,\n flush?: Flush|boolean,\n}) => {\n\n if (r.equals(flush, true)) {\n // Component will handle all padding, used on full bleed image ribbons\n return {};\n }\n\n const {\n //@ts-ignore\n shrinkLeading,\n //@ts-ignore\n shrinkTrailing,\n } = r.defaultTo({}, layout);\n\n /*\n shrinkSide:\n shrink[Leading/Trailing] prop is true then return a reduced padding\n depending on screen size\n isFlush:\n leading or trailing edge has been designated as flush, no padding\n */\n const getPaddingSize = (shrinkSide: string, isFlush: boolean) => {\n\n if (isFlush) {\n return 0;\n }\n\n return r.cond([\n [ r.propEq(shrinkSide, true), () => r.ifElse(\n r.equals(true),\n r.always(1),\n r.always(0.5),\n )(isMinSm) ],\n [ r.propEq('isMinLg', true), r.always(6) ],\n [ r.propEq('isMinSm', true), r.always(5) ],\n [ r.T, r.always(4) ],\n ])({\n isMinLg,\n isMinSm,\n shrinkLeading,\n shrinkTrailing,\n });\n };\n\n const leading = getPaddingSize('shrinkLeading', flush === Flush.LEADING);\n const trailing = getPaddingSize('shrinkTrailing', flush === Flush.TRAILING);\n\n return {\n paddingTop: gu2px(leading, spacing),\n paddingBottom: gu2px(trailing, spacing),\n };\n};\n","import React, { CSSProperties } from 'react';\nimport { compose, lifecycle, withState, withProps } from 'recompose';\nimport Message from '@ux/message';\nimport { Container } from '@ux/grid';\nimport * as r from 'ramda';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { getBackgroundColor, getTitleColor } from 'presentation/utils/colorway';\nimport { gu2px, useTheme } from '@ux/theme-utils';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { useStyles } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\nimport { Flush } from 'domain/constants/ribbons';\nimport { BreakpointProps, useBreakpoints } from '@ux/responsive';\n\ninterface OuterProps extends BreakpointProps {\n colorway: Colorway;\n layout: Layout;\n flush?: Flush | boolean;\n}\n\ninterface InnerProps extends OuterProps {\n styles: {\n root: CSSProperties;\n };\n hasErrored: boolean;\n}\nconst stylesheet = ({ colorway, layout, flush }: InnerProps) => {\n const { theme } = useTheme();\n const { isMinSm, isMinMd, isMinLg } = useBreakpoints();\n const { spacing } = theme;\n\n return useStyles(\n {\n default: {\n root: {\n backgroundColor: getBackgroundColor(theme, colorway),\n color: getTitleColor(theme, colorway),\n ...ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n }),\n ...cssSides('Side', Side.X, gu2px(3, spacing)),\n textAlign: 'center',\n },\n },\n isMinSm: {\n root: {\n ...cssSides('Side', Side.X, gu2px(4, spacing)),\n },\n },\n },\n [{ colorway }, { isMinSm }, { isMinMd }],\n );\n};\n\nexport default (WrappedComponent: any) => {\n const ErrorBoundary = r.ifElse(\n r.propEq('hasErrored', true),\n ({ styles }) => (\n
\n \n \n \n
\n ),\n (props: InnerProps) => ,\n );\n\n return compose(\n withState('hasErrored', 'setHasErrored', false),\n lifecycle({\n componentDidCatch: function() {\n //@ts-ignore\n this.props.setHasErrored(true);\n },\n }),\n withProps(stylesheet),\n )(ErrorBoundary);\n};\n","import { useMemo, useEffect } from 'react';\nimport { branch, mapProps as mapPropsHoc } from 'recompose';\nimport pureEnhance from '@ux/pure-enhance';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { pipe, withProps, mapProps, withHandlers } from '@team-griffin/rehook';\nimport { Watch } from 'scrollmonitor-react';\nimport * as r from 'ramda';\nimport { sendImpression } from 'application/signals/ribbons';\nimport { getRibbonAnalytics } from 'domain/selectors/ribbons';\nimport { Type } from 'domain/constants/ribbons';\n\nconst hooksA = pipe(\n mapProps((props: any) => {\n const { id } = props;\n const selector = useMemo(() => getRibbonAnalytics(id), [ id ]);\n const analytics = useSelector(selector);\n const dispatch = useDispatch();\n const actions = bindActionCreators({ sendImpression }, dispatch);\n\n return r.mergeDeepLeft(props, {\n analytics,\n actions,\n });\n }),\n withHandlers({\n onImpression: ({\n name,\n type,\n analytics,\n actions: {\n sendImpression,\n },\n }: {\n name: string,\n type: Type,\n analytics: any,\n actions: {\n sendImpression: Function,\n }\n }) => () => sendImpression({\n ...analytics,\n ribbonName: name,\n ribbonType: type,\n }),\n }),\n);\n\nconst hooksB = pipe(\n withProps(({\n isFullyInViewport,\n stopWatcher,\n onImpression,\n analytics,\n }: {\n isFullyInViewport: boolean,\n stopWatcher: () => void,\n onImpression: (a: any) => void,\n analytics: any,\n }) => {\n useEffect(() => {\n if (isFullyInViewport) {\n stopWatcher();\n onImpression(analytics);\n }\n }, [ isFullyInViewport ]);\n }),\n);\n\nexport default pureEnhance('RibbonImpression', {\n hocs: [\n mapPropsHoc(hooksA),\n branch(\n r.propSatisfies(r.complement(r.isNil), 'analytics'),\n Watch,\n ),\n mapPropsHoc(hooksB),\n ],\n});\n","export const duoRibbonWidth = ({\n isMinMd,\n duoLayout,\n}: {\n isMinMd: boolean,\n duoLayout?: boolean,\n}) => {\n if (!isMinMd || duoLayout == null) {\n return {};\n }\n\n const flexSize = (isMinMd && duoLayout) ? 50 : 100;\n return {\n flex: `${flexSize}%`,\n };\n};\n\nexport default null;","import React, { Fragment } from 'react';\nimport {\n compose,\n lifecycle,\n} from 'recompose';\nimport { withRouter } from 'react-router';\nimport { Element, scroller } from 'react-scroll';\n\nconst deepLink = compose(\n withRouter,\n lifecycle({\n componentDidMount: function() {\n //Adding some ts-ignores here so it doesn't throw not recognizing\n //this.props\n\n //@ts-ignore\n if (this.props.location.hash === `#${this.props.name}`) {\n const scrollWhenReady = () => {\n // we can't scroll to eagerly or we'll end up in the wrong place\n //@ts-ignore\n if (this.props.loading || !this.props.animationComplete) {\n return setTimeout(scrollWhenReady, 100);\n }\n //@ts-ignore\n scroller.scrollTo(this.props.name, {\n duration: 500,\n delay: 100,\n smooth: true,\n });\n };\n setTimeout(scrollWhenReady, 100);\n }\n },\n }),\n (WrappedComponent: any) => {\n return (props: any) => (\n \n \n \n \n );\n },\n);\n\nexport default deepLink;\n","import React, { useRef, useLayoutEffect, CSSProperties, ReactNode, Ref } from 'react';\nimport { withProps } from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { duoRibbonWidth } from 'presentation/utils/ribbonWidth';\nimport { percentage, modifier } from '@ux/style-utils';\nimport deepLink from 'presentation/hocs/deepLink';\nimport { getBackgroundColor } from 'presentation/utils/colorway';\nimport { useStyles } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Fit, Flush, RibbonProps } from 'domain/constants/ribbons';\nimport * as r from 'ramda';\n\nexport {\n Flush,\n};\n\ninterface OuterProps extends RibbonProps {\n children?: ReactNode,\n}\ninterface WithHandlerProps extends OuterProps {\n setAnimationComplete: Function,\n setRibbonHeight: Function,\n setHeight: Function,\n onAnimationEnd: (props: {\n newHeight: number;\n }) => void,\n}\n\ninterface InnerProps extends WithHandlerProps, BreakpointProps {\n rendered: boolean,\n targetRef: Ref,\n duration: number,\n styles: {\n root: CSSProperties,\n inner: CSSProperties,\n ribbon: CSSProperties,\n }\n}\n\nconst mapFit = (fit: Fit) => r.cond([\n [ r.equals(Fit.FULLSCREEN), r.always({\n minHeight: '100vh',\n }) ],\n [ r.equals(Fit.FILL), r.always({\n flex: 1,\n flexBasis: 'auto',\n }) ],\n [ r.equals(Fit.AUTO), r.always({\n height: 'auto',\n }) ],\n [ isFinite, r.always({\n minHeight: fit,\n }) ],\n [ r.T, r.always({\n height: 'auto',\n }) ],\n])(fit);\n\nconst stylesheet = ({\n theme,\n colorway,\n loading,\n layout,\n flush,\n ...props\n}: InnerProps) => {\n const {\n palette,\n spacing,\n } = theme;\n const {\n //@ts-ignore\n fit,\n } = r.defaultTo({}, layout);\n\n const {\n isMinSm,\n isMinMd,\n isMinLg,\n duoLayout,\n } = props;\n\n const activeFit = findResponsiveItem(\n getBreakpoints(props),\n fit,\n );\n\n const padding = ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n });\n\n const duoLayoutFlex = duoRibbonWidth({\n isMinMd,\n duoLayout,\n });\n\n return useStyles({\n default: {\n root: {\n backgroundColor: getBackgroundColor(theme, colorway),\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: percentage(100),\n ...mapFit(activeFit),\n ...padding,\n ...duoLayoutFlex,\n },\n inner: {\n flex: 1,\n flexBasis: 'auto',\n display: 'flex',\n height: 'auto',\n },\n ribbon: {\n display: 'flex',\n flexDirection: 'column',\n width: percentage(100),\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY_GRADIENT)]: {\n root: {\n backgroundImage: `linear-gradient(to right, ${palette.primary}, ${palette.primaryGradient})`,\n },\n },\n }, [\n { loading },\n { colorway },\n { isMinSm },\n { isMinMd },\n { isMinLg },\n ]);\n};\n\nexport const PureRibbon = ({\n styles,\n targetRef,\n children,\n}: InnerProps) => (\n
\n
\n \n {children}\n
\n \n
\n);\n\nexport const enhance = pureEnhance('Ribbon', {\n hocs: [\n deepLink,\n ],\n hooks: [\n withProps(() => {\n const targetRef = useRef({});\n\n if (process.env.NODE_ENV !== 'production') {\n useLayoutEffect(() => {\n // when backstop runs on ribbons, this lets us filter out a lot of false\n // positives and a lot of race condition fails by only initialising\n // the snapshot once loading has finished + a delay to wait for fonts etc to load\n // eslint-disable-next-line\n setTimeout(() => {\n // eslint-disable-next-line\n console.log('BACKSTOP_RIBBON_READY');\n }, 3000);\n }, [ targetRef.current ]);\n }\n\n return {\n targetRef,\n };\n }),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n});\n\nexport default enhance(PureRibbon);\n","import pureEnhance from '@ux/pure-enhance';\nimport withRibbonImpression from 'presentation/hocs/withRibbonImpression';\n\nimport Ribbon from './Ribbon';\n\nconst enhance = pureEnhance('ConnectedRibbon', {\n hocs: [ withRibbonImpression ],\n});\n\nexport default enhance(Ribbon);\n","import Ribbon from './ConnectedRibbon';\nimport { Flush } from './Ribbon';\n\nexport { Flush };\n\nexport default Ribbon;\n","import * as r from 'ramda';\nimport { BreakpointProps } from '@ux/responsive';\n\ninterface anyProps extends BreakpointProps {\n [key: string]: any,\n}\nexport default (props: anyProps) => r.pick([\n 'isMinSm',\n 'isMinMd',\n 'isMinLg',\n 'isMinXl',\n], props) as anyProps;\n","import { headingXl, headingXxl, display, headingL, headingM, headingS, headingXs, headingXxs, content } from '@ux/type-size';\nimport reactCSS from 'reactcss';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { createElement } from 'react';\nimport { defaultProps, mapProps } from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withStylesHook } from '@ux/style-utils';\nimport { withBreakpoints } from '@ux/responsive';\nimport { pipe, converge, assoc, mergeDeepRight, path, propOr, identity, dissoc, is, defaultTo } from 'ramda';\nimport { gu2px } from '@ux/theme-utils';\n\nvar mergeStyles = pipe(converge(assoc('style'), [converge(mergeDeepRight, [path(['styles', 'root']), propOr({}, 'style')]), identity]), dissoc('styles'));\n\nvar createHeading = function createHeading(name, component, headingSize, stylesheet) {\n return pureEnhance(name, {\n hocs: [withBreakpoints],\n hooks: [defaultProps({\n component: component\n }), withStylesHook(function (props) {\n return stylesheet(Object.assign({}, props, {\n headingSize: headingSize\n }));\n }), mapProps(pipe(mergeStyles, function (props) {\n // if a `depth` prop is provided, make the `` element\n if (is(Number, props.depth)) {\n return assoc('component', \"h\".concat(props.depth), props);\n }\n\n return props;\n }))]\n })(function (_ref) {\n var style = _ref.style,\n children = _ref.children,\n component = _ref.component;\n return createElement(component, {\n style: style\n }, children);\n });\n};\n\nvar stylesheet = function stylesheet(_ref) {\n var typography = _ref.theme.typography,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), cssSides('margin', Side.Y, 0), {\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar Heading01 = createHeading('Heading01', 'h1', [headingXl, headingXxl, display], stylesheet);\nvar Heading02 = createHeading('Heading02', 'h1', [headingL, headingXl, headingXxl], stylesheet);\nvar Heading03 = createHeading('Heading03', 'h1', [headingM, headingL, headingXl], stylesheet);\nvar Heading04 = createHeading('Heading04', 'h1', [headingS, headingM, headingL], stylesheet);\nvar Heading05 = createHeading('Heading05', 'h1', [headingXs, headingS, headingM], stylesheet);\nvar Heading06 = createHeading('Heading06', 'h1', [headingXxs, headingXs, headingS], stylesheet);\n\nvar stylesheet$1 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n gu = _ref.gu,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: gu2px(defaultTo(2, gu), spacing),\n marginBottom: 0,\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar SubHeading01 = createHeading('SubHeading01', 'h2', [headingXs, headingS, headingM], stylesheet$1);\nvar SubHeading02 = createHeading('SubHeading02', 'h3', [headingXxs, headingXxs, headingXs], function (props) {\n return stylesheet$1(mergeDeepRight(props, {\n gu: 1\n }));\n});\n\nvar stylesheet$2 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: 0,\n marginBottom: gu2px(1, spacing),\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar PreHeading01 = createHeading('PreHeading01', 'div', [headingXxs, headingXs, headingS], stylesheet$2);\nvar PreHeading02 = createHeading('PreHeading02', 'div', [headingXxs, headingXxs, headingXs], stylesheet$2);\n\nvar stylesheet$3 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: gu2px(1, spacing),\n marginBottom: 0,\n fontWeight: 'normal',\n fontFamily: typography.content\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar BodyCopy01 = createHeading('BodyCopy01', 'p', [content, content, content], stylesheet$3);\n\nvar index = null;\n\nexport default index;\nexport { BodyCopy01, Heading01, Heading02, Heading03, Heading04, Heading05, Heading06, PreHeading01, PreHeading02, SubHeading01, SubHeading02 };\n","import React from 'react';\nimport Shimmer from '@ux/shimmer';\nimport { ShortcodeProps } from './';\nimport { Colorway } from '@ux/theme-utils';\n\nexport interface OuterProps {\n against?: Colorway,\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 = ({\n code,\n against,\n}: OuterProps) => (\n \n \n \n);\n\nPendingShortcode.displayName = 'PendingShortcode';\n\nexport default PendingShortcode;\n","import React from 'react';\nimport { RecursiveShortcodeProps } from './Shortcode';\nimport { Against } from 'domain/constants/colorway';\nimport { Theme, useTheme } from '@ux/theme-utils';\n\nconst getColor = (theme: Theme, against: Against) => {\n switch (against) {\n case Against.LIGHT: return theme.palette.primary;\n case Against.NEUTRAL: return theme.palette.primary;\n case Against.DARK: return theme.palette.tertiary;\n default: return 'inherit';\n }\n};\nconst Alt = ({\n RecursiveShortcode,\n elements,\n against,\n ...rest\n}: RecursiveShortcodeProps) => {\n const {\n theme,\n } = useTheme();\n return (\n \n \n \n );\n};\n\nAlt.displayName = 'Alt';\n\nexport default Alt;","import React from 'react';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n \n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;","import React from 'react';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst Bold = ({ elements, RecursiveShortcode, ...rest }: RecursiveShortcodeProps) => (\n \n \n \n);\n\nBold.displayName = 'Bold';\n\nexport default Bold;","import React from 'react';\nimport TextButton, {\n Size as TextButtonSize,\n} from '@ux/text-button';\nimport { RecursiveShortcodeProps } from './Shortcode';\nimport { useTheme } from '@ux/theme-utils';\nimport { useAppConfig } from '@ux/whitelabel';\n\nconst Link = ({\n RecursiveShortcode,\n elements,\n contentType,\n attributes,\n against,\n ...rest\n}: RecursiveShortcodeProps) => {\n const {\n theme,\n } = useTheme();\n const externalRoutes = useAppConfig('usf')?.externalRoutes ?? [];\n return (\n \n \n \n );\n};\n\nLink.displayName = 'Link';\n\nexport default Link;","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 nl2br = (string: string) => (string ?? '').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) => {\n\n const formattedText = escapeShortCodes(text);\n if (newline === false) {\n return formattedText;\n }\n return nl2br(formattedText);\n};\n\ninterface OuterProps {\n text: string,\n nl2br?: Element,\n}\nconst Text = ({ text, nl2br }: OuterProps) => (\n \n {formatText(text, nl2br)}\n \n);\n\nText.displayName = 'Text';\n\nexport default Text;","import React, { lazy, Suspense } from 'react';\nimport TextButton, { Size as TextButtonSize } from '@ux/text-button';\nimport { RecursiveShortcodeProps } from './Shortcode';\nimport { useTheme, cssTheme } from '@ux/theme-utils';\nimport { useBreakpoints } from '@ux/responsive';\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(() => import(\n /* webpackChunkName: \"react-tooltip-lite\" */\n 'react-tooltip-lite'\n));\n\nconst TooltipShortcode = ({\n RecursiveShortcode,\n against,\n attributes,\n elements,\n}: RecursiveShortcodeProps) => {\n const {\n isMinLg,\n } = useBreakpoints();\n const {\n theme,\n } = useTheme();\n const eventToggle = isMinLg ? void 0 : 'onClick';\n const padding = cssTheme.gu2;\n const CallToAction = (\n \n {attributes.label}\n \n );\n\n return (\n \n {/*@ts-ignore children doesnt exist */}\n \n \n \n )}\n >\n {CallToAction}\n \n \n );\n};\n\nTooltipShortcode.displayName = 'TooltipShortcode';\n\nexport default TooltipShortcode;\n","import React, { Suspense, lazy, ReactNode } from 'react';\nimport PendingShortcode from './PendingShortcode';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport { Layout } from 'domain/constants/layout';\nimport { ShortcodeProps } from '.';\n\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 Alt from './Alt';\nimport Bold from './Bold';\nimport Italic from './Italic';\nimport Link from './Link';\nimport Text from './Text';\nimport Tooltip from './Tooltip';\nimport { Against } from 'domain/constants/colorway';\n\nconst Glyph = lazy(() => import(\n /* webpackChunkName: \"shortcode-glyph\" */\n './Glyph'\n));\n\nconst Sup = lazy(() => import(\n /* webpackChunkName: \"shortcode-sup\" */\n './Sup'\n));\n\nconst List = lazy(() => import(\n /* webpackChunkName: \"shortcode-list\" */\n './List'\n));\n\nconst OrderedList = lazy(() => import(\n /* webpackChunkName: \"shortcode-ordered-list\" */\n './OrderedList'\n));\n\nconst ListItem = lazy(() => import(\n /* webpackChunkName: \"shortcode-list-item\" */\n './ListItem'\n));\n\nconst TickListItem = lazy(() => import(\n /* webpackChunkName: \"shortcode-tick-list-item\" */\n './TickListItem'\n));\n\nconst ProductPrice = lazy(() => import(\n /* webpackChunkName: \"shortcode-product-price\" */\n './ProductPrice'\n));\n\nconst PhoneNumber = lazy(() => import(\n /* webpackChunkName: \"shortcode-phone-number\" */\n './PhoneNumber'\n));\n\ndeclare const i: number;\ndeclare const element: ShortcodeProps;\n\nexport interface ShortcodeAttributesProps {\n use?: number,\n number?: number,\n RecursiveShortcode: (props: RecursiveShortcodeProps) => JSX.Element,\n analyticskey?: string,\n goto?: string,\n label?: ReactNode,\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?: ShortcodeProps[],\n RecursiveShortcode?: (props: RecursiveShortcodeProps) => JSX.Element,\n type?: string,\n name?: string,\n layout?: Layout,\n against?: Against,\n attributes?: ShortcodeAttributesProps,\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) => (\n \n ))}\n \n);\n\nexport interface ShortcodeOuterProps {\n against?: Against,\n code: RecursiveShortcodeProps,\n type?: string,\n name?: string,\n}\n\nconst Shortcode = ({ code, ...rest }: RecursiveShortcodeProps) => {\n let props = {\n ...rest,\n } as RecursiveShortcodeProps;\n if (typeof code === '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 const Element = (props: any) => {\n const {\n code,\n type,\n name,\n } = props;\n if (typeof props.code === 'string') {\n return (\n \n );\n }\n if (props.type === 'text') {\n return (\n \n );\n }\n if (type === 'element') {\n switch (name) {\n case 'list':\n if (props?.attributes?.style === 'number') {\n return (\n \n );\n }\n return (\n \n );\n case 'li':\n if (props?.attributes?.style === 'glyph') {\n return (\n \n );\n }\n return (\n \n );\n case 'i':\n return (\n \n );\n case 'b':\n return (\n \n );\n case 'alt':\n return (\n \n );\n case 'sup':\n return (\n \n );\n case 'glyph':\n return (\n \n );\n case 'tel':\n return (\n \n );\n case 'link':\n return (\n \n );\n case 'productprice':\n return (\n \n );\n case 'tooltip':\n return (\n \n );\n case 'root':\n return (\n \n );\n default: return null;\n }\n }\n return null;\n };\n\n return (\n \n );\n};\n\nconst ShortcodeWrapper = (props: RecursiveShortcodeProps) => (\n \n )}\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","import React from 'react';\nimport * as r from 'ramda';\n\nexport default (BaseComponent: any) => r.ifElse(\n r.prop('visible'),\n (props) => ,\n (props) => (\n
\n \n
\n ),\n);\n","export enum Alignment {\n STARTING = 'STARTING',\n CENTER = 'CENTER',\n}\n\nexport default null;\n","import React from 'react';\nimport Button, {\n Against,\n Status,\n Size,\n} from '@ux/reactive-button';\nimport callToAction from 'presentation/hocs/callToAction';\nimport { Theme } from '@ux/theme-utils';\nimport { CTA } from 'core/ribbons/cta';\nimport { Product } from '@ux/product';\nimport { omit } from 'presentation/utils/generalUtils';\n\ninterface OuterProps extends CTA {\n product?: Product,\n theme: Theme,\n against?: Against,\n block?: boolean,\n size?: Size,\n ribbonId: string,\n index: number,\n glyph?: string,\n}\n\ninterface InnerProps extends OuterProps {\n addingStatus: Status,\n handleClick: (props: any) => () => void,\n}\n\nconst getStatus = (addingStatus: string) => {\n switch (addingStatus) {\n case 'REQUESTED': return Status.PENDING;\n case 'SUCCESS': return Status.SUCCESS;\n case 'FAILED': return Status.FAILURE;\n default: return Status.DEFAULT;\n }\n};\n\nconst PureCallToAction = ({\n kind,\n against = Against.LIGHT,\n label,\n addingStatus,\n handleClick,\n behavior,\n ...props\n}: InnerProps) => {\n\n const status = getStatus(addingStatus);\n //@ts-ignore goto exists on NavigationCTA\n const goto = behavior?.goto ?? null;\n //@ts-ignore newTab exists on NavigationCTA\n const newTab = behavior?.newTab ?? null;\n //@ts-ignore rel exists on NavigationCTA\n const rel = behavior?.rel ?? null;\n\n const openNewWindowProps = newTab==='true' ? {\n rel: rel,\n target: '_blank',\n } : { };\n\n const buttonProps = omit([\n 'colorway',\n 'actions',\n 'buttonId',\n 'ribbonId',\n 'index',\n 'handlePlayVideoClick',\n 'handleSetVisibilityClick',\n 'handleConfigureClick',\n 'handleApplyVoucherClick',\n 'handleAddToBasketClick',\n 'handleNavigateClick',\n 'handleAnalytics',\n 'ribbonList',\n ], props);\n\n return (\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 APPLY_VOUCHER = 'APPLY_VOUCHER',\n CONFIGURE = 'configure',\n SET_VISIBILITY = 'changeActiveVisibilitySet',\n PLAY_VIDEO = 'playVideo',\n}\n\nexport default null;\n","import { compose, withProps, withHandlers } from 'recompose';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { useWindow } from '@ux/hooks';\nimport { addToBasket, applyVoucher } from 'application/signals/basket';\nimport { setVisibility } from 'application/signals/ribbons';\nimport { productClicked, promotionClicked, productAddToBasket } from 'application/signals/cta';\nimport { getAddingStatus } from 'domain/selectors/basket';\nimport { getExternalRoutes } from 'domain/selectors/common';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { getRibbon } from 'domain/selectors/ribbons';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { signals } from '@team-griffin/redux-modal-router';\nimport handleAddToBasketClick from './callToActionHandlers/handleAddToBasketClick';\nimport handleApplyVoucherClick from './callToActionHandlers/handleApplyVoucherClick';\nimport handleConfigureClick from './callToActionHandlers/handleConfigureClick';\nimport handlePlayVideoClick from './callToActionHandlers/handlePlayVideoClick';\nimport handleSetVisibilityClick from './callToActionHandlers/handleSetVisibilityClick';\nimport handleNavigateClick from './callToActionHandlers/handleNavigateClick';\nimport handleAnalytics from './callToActionHandlers/handleAnalytics';\nimport { isNilOrEmpty } from 'presentation/utils/generalUtils';\n\nexport const formatPricingTier = (tier) => {\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\nconst mapStateToProps = (state, props) => {\n const buttonId = `${props.ribbonId}-cta-${props.index}`;\n const externalRoutes = getExternalRoutes(state);\n const ribbon = getRibbon(props.ribbonId)(state);\n const ribbonType = ribbon?.type;\n const ribbonName = ribbon?.props?.name;\n const product = props?.product;\n // add an analytics prefixed `id` to the cta if required\n const id = (() => {\n const behavior = props.behavior;\n const id = props.id;\n if (behavior?.analytics?.linkAttribution) {\n return `usf-cta-${behavior.analytics.linkAttribution}`;\n }\n return id;\n })();\n const ribbonList = createRibbonName(ribbonType, ribbonName);\n const behavior = isNilOrEmpty(props.behavior) ? {} : props.behavior;\n return {\n externalRoutes,\n addingStatus: getAddingStatus(buttonId)(state),\n buttonId,\n ribbonList,\n product,\n id,\n behavior,\n };\n};\n\nconst mapDispatchToProps = (dispatch) =>\n bindActionCreators(\n {\n addToBasket,\n applyVoucher,\n setVisibility,\n openReduxModal: signals.open,\n productClicked,\n promotionClicked,\n productAddToBasket,\n },\n dispatch,\n );\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n return {\n ...stateProps,\n ...ownProps,\n actions: {\n ...dispatchProps,\n ...ownProps.actions,\n },\n };\n};\n\nexport default compose(\n withProps(() => ({\n window: useWindow(),\n })),\n connect(mapStateToProps, mapDispatchToProps, mergeProps),\n withHandlers({\n handleAnalytics: handleAnalytics,\n }),\n withHandlers({\n handleAddToBasketClick: handleAddToBasketClick,\n handleNavigateClick: handleNavigateClick,\n handleApplyVoucherClick: handleApplyVoucherClick,\n handleConfigureClick: handleConfigureClick,\n handleSetVisibilityClick: handleSetVisibilityClick,\n handlePlayVideoClick: handlePlayVideoClick,\n }),\n withProps((ownerProps) => ({\n handleClick: (() => {\n switch (ownerProps.behavior?.type) {\n case Behavior.ADD_TO_BASKET:\n return ownerProps.handleAddToBasketClick;\n case Behavior.APPLY_VOUCHER:\n return ownerProps.handleApplyVoucherClick;\n case Behavior.CONFIGURE:\n return ownerProps.handleConfigureClick;\n case Behavior.PLAY_VIDEO:\n return ownerProps.handlePlayVideoClick;\n case Behavior.SET_VISIBILITY:\n return ownerProps.handleSetVisibilityClick;\n case Behavior.NAVIGATION:\n return ownerProps.handleNavigateClick;\n default:\n return () => null;\n }\n })(),\n })),\n);\n","import { Product } from '@ux/product';\n\nexport default (\n props: {\n behavior: {\n type: any;\n analytics: {\n type: any;\n productId: string;\n promotion: string;\n };\n };\n ribbonList: any;\n product: Product;\n actions: {\n productClicked: (arg0: { productId: any; list: any; }) => void;\n promotionClicked: (arg0: { promotion: any; }) => void;\n productAddToBasket: (arg0: { list: any; product: any; }) => void;\n };\n },\n) => () => {\n const ctaType = props?.behavior?.type;\n const type = props?.behavior?.analytics?.type;\n const list = props.ribbonList;\n const product = props.product;\n\n if (type === 'PRODUCT') {\n const productId = props?.behavior?.analytics?.productId;\n props.actions.productClicked({\n productId,\n list,\n });\n } else if (type === 'PROMOTION') {\n const promotion = props?.behavior?.analytics?.promotion;\n props.actions.promotionClicked({ promotion });\n } else if (ctaType === 'addToBasket') {\n props.actions.productAddToBasket({\n list,\n product,\n });\n }\n};","import { Product, selectors } from '@ux/product';\nimport { formatPricingTier } from '../callToAction';\n\nexport default (props: {\n buttonId: string;\n product: Product;\n actions: {\n addToBasket: any;\n };\n behavior: {\n productId: any;\n postAction: any;\n pricingTier: any;\n };\n handleAnalytics: any;\n}) => () => {\n const {\n buttonId,\n product,\n actions: { addToBasket },\n behavior: { productId, postAction, pricingTier },\n handleAnalytics,\n } = props;\n const productData = {\n skuId: product ? product.defaultSkuId : null,\n name: product ? product.name : null,\n price: product ? selectors.getPrice({\n product,\n includeTax: false,\n }) : null,\n category: product ? product.categoryName : null,\n };\n addToBasket(\n buttonId,\n productId,\n postAction,\n formatPricingTier(pricingTier),\n 1, //quantity\n productData,\n );\n\n handleAnalytics();\n};","export default ({ handleAnalytics }: { handleAnalytics: any }) => () => {\n handleAnalytics();\n};","export default ({\n buttonId,\n actions: {\n applyVoucher,\n },\n behavior: {\n voucherCode,\n postAction,\n },\n}: {\n buttonId: string,\n actions: {\n applyVoucher: any,\n },\n behavior: {\n voucherCode: string;\n postAction: any;\n }\n}) => () => {\n applyVoucher(buttonId, voucherCode, postAction);\n};","import { formatPricingTier } from '../callToAction';\n\nexport default ({\n window,\n behavior: {\n productId,\n pricingTier,\n },\n}: {\n window: Window,\n behavior: {\n productId: string;\n pricingTier: string;\n }\n}) => {\n return () => {\n const tier = formatPricingTier(pricingTier);\n const query = new URLSearchParams();\n query.append('productId', productId);\n if (tier) {\n query.append('pricingTier', tier);\n }\n const q = query.toString();\n window.location.href = `/configure?${q}`;\n };\n};","export default ({\n actions: {\n setVisibility,\n },\n behavior,\n}: {\n\tactions: {\n\t\tsetVisibility: any,\n\t},\n\tbehavior: {\n\t\tvisibilitySet: any,\n\t}\n}) => () => {\n setVisibility(behavior.visibilitySet);\n};","export default ({\n actions: {\n openReduxModal,\n },\n behavior: {\n videoId,\n provider,\n },\n}: {\n actions: {\n openReduxModal: any;\n },\n behavior: {\n videoId: string;\n provider: string;\n }\n}) => () => {\n openReduxModal({\n route: 'PLAY_VIDEO',\n params: {\n videoId,\n provider,\n },\n });\n};","import * as rA from 'ramda-adjunct';\nimport * as r from 'ramda';\nimport {\n curry2,\n isNotNilOrEmpty,\n} from '@team-griffin/capra';\n\nconst {\n isNotEmpty,\n isNotNil,\n mapIndexed,\n} = rA;\n\nexport {\n curry2,\n isNotNilOrEmpty,\n isNotEmpty,\n isNotNil,\n mapIndexed,\n};\n\nexport const headOr = r.curryN(2, (fallback: any, arr: any[]) => r.pipe(\n r.defaultTo([]),\n r.head,\n r.defaultTo(fallback),\n)(arr));\n\nexport const getFirstKey = r.pipe(\n r.keys,\n r.head,\n) as (data: any)=>string;\n\nexport const getFirstValue = r.pipe(\n //@ts-ignore\n r.values,\n r.head,\n);\n\nexport const mapKeys = r.curryN(2, (fn: any, obj: any) => r.pipe(\n r.defaultTo({}),\n r.mapObjIndexed(\n r.converge(\n r.unapply(r.identity),\n [\n r.pipe(\n r.nthArg(1),\n fn,\n ),\n r.identity,\n ]\n ),\n ),\n r.values,\n r.fromPairs,\n)(obj));\n"],"sourceRoot":""}