{"version":3,"sources":["webpack:///./presentation/hooks/useIntersectionObserver.ts","webpack:///../node_modules/@ux/grid/dist/es/grid.js","webpack:///./presentation/hocs/deepLink.tsx","webpack:///./presentation/utils/ribbonWidth.ts","webpack:///./domain/impression/index.ts","webpack:///./presentation/components/ribbons/Ribbon/RibbonImpression.tsx","webpack:///./presentation/components/ribbons/Ribbon/Ribbon.tsx","webpack:///./presentation/components/ribbons/Ribbon/Ribbon.stylesheet.ts","webpack:///src/presentation/hocs/errorBoundary.tsx","webpack:///./presentation/hocs/visibilitySet.tsx","webpack:///../node_modules/@ux/message/dist/es/message.js","webpack:///./presentation/utils/ribbonPadding.ts","webpack:///./infrastructure/drivers/middleware.ts","webpack:///./domain/transformers/ribbons/index.ts","webpack:///./infrastructure/cta/getProductData.ts","webpack:///../node_modules/ramda/es/toLower.js","webpack:///./domain/logic/promotion.ts"],"names":["useIntersectionObserver","elementRef","threshold","root","rootMargin","freezeOnceVisible","entry","setEntry","useState","frozen","isIntersecting","updateEntry","useEffect","node","current","window","IntersectionObserver","observer","observe","disconnect","JSON","stringify","Direction","Align","Wrap","Justify","Container","fluid","vblock","props","_ref","theme","_withBreakpointsHook","isMinSm","isMinMd","isMinLg","isMinXl","spacing","createMaxWidth","default","position","marginLeft","marginRight","paddingLeft","paddingRight","width","maxWidth","height","sm","md","lg","xl","stylesheet","enhance","styles","children","createElement","style","Row","gutters","component","direction","ROW","align","STRETCH","wrap","WRAP","justify","FLEX_START","list","display","flexDirection","alignItems","justifyContent","WebkitFlexWrap","msFlexWrap","flexWrap","listStyle","marginTop","marginBottom","stylesheet$1","enhance$1","getWidth","size","widthStyles","flexBasis","Column","xs","offsetXs","offsetSm","offsetMd","offsetLg","offsetXl","minHeight","WebkitBoxFlex","WebkitFlexBasis","msFlexPreferredSize","WebkitFlexGrow","msFlexPositive","flexGrow","alignSelf","stylesheet$2","enhance$2","deepLink","compose","withRouter","lifecycle","componentDidMount","this","location","hash","name","scrollWhenReady","loading","animationComplete","setTimeout","scroller","scrollTo","duration","delay","smooth","WrappedComponent","getProductIds","productIds","toString","split","map","id","trim","filter","Boolean","productId","ImpressionRibbon","type","analytics","useRibbonAnalytics","ref","useRef","createRibbonName","view","async","promises","getProductData","impressions","Promise","all","product","ecommerce","nonInteraction","sendProductDetail","sendProductImpression","promotion","promoId","promoNameToPromoId","sendPromotionImpression","className","colorway","displayName","PureRibbon","layout","flush","duoLayout","useTheme","palette","fit","breakpoints","useBreakpoints","activeFit","findResponsiveItem","padding","ribbonPadding","duoLayoutFlex","flex","duoRibbonWidth","useStyles","mapFit","inner","ribbon","modifier","Colorway","PRIMARY_GRADIENT","backgroundImage","primary","primaryGradient","useStylesheet","targetRef","useLayoutEffect","process","RibbonImpression","backgroundColor","getBackgroundColor","color","getTitleColor","cssSides","Side","gu2px","textAlign","ErrorBoundary","r","withState","componentDidCatch","withProps","BaseComponent","getMessage","intl","cascade","length","hasCascade","found","find","item","messages","slice","values","Object","assign","formatMessage","Message","Fragment","useMessage","getPaddingSize","shrinkSide","isFlush","shrinkLeading","shrinkTrailing","linariaPadding","leading","trailing","Flush","LEADING","TRAILING","getSizes","paddingTop","paddingBottom","middleware","bodyOnly","cradle","jsonRpc","json","xray","fetch","join","skuId","locale","invoker"],"mappings":"8EAAA,WAuCeA,IA/Bf,SACEC,EADF,GAGyC,IADvC,UAAEC,EAAY,EAAd,KAAiBC,EAAO,KAAxB,WAA8BC,EAAa,KAA3C,kBAAiDC,GAAoB,GAC9B,EACvC,MAAOC,EAAOC,GAAYC,qBAEpBC,GAASH,aAAA,EAAAA,EAAOI,iBAAkBL,EAElCM,EAAc,IAAqD,IAAnDL,GAAmD,EACvEC,EAASD,IAmBX,OAhBAM,oBAAU,KACR,MAAMC,EAAOZ,aAAH,EAAGA,EAAYa,QAGzB,MAFuBC,OAAOC,sBAETP,IAAWI,EAAM,OAEtC,MACMI,EAAW,IAAID,qBAAqBL,EADnB,CAAET,YAAWC,OAAMC,eAK1C,OAFAa,EAASC,QAAQL,GAEV,IAAMI,EAASE,cAGrB,CAAClB,EAAYmB,KAAKC,UAAUnB,GAAYC,EAAMC,EAAYK,IAEtDH,I,oBCpCT,gNAyJIgB,EASAC,EAYAC,EAQAC,EAtLJ,4IA+FIC,EAbU,YAAM,YAAN,CAAmB,uBAAa,CAC5CC,OAAO,EACPC,QAAQ,IACN,qBAAU,SAAUC,GACtB,OA7Ee,SAAWC,GAC1B,IAAIH,EAAQG,EAAKH,MACbC,EAASE,EAAKF,OAGdG,EADY,cACMA,MAElBC,EAAuB,YAAoB,IAC3CC,EAAUD,EAAqBC,QAC/BC,EAAUF,EAAqBE,QAC/BC,EAAUH,EAAqBG,QAC/BC,EAAUJ,EAAqBI,QAE/BC,EAAUN,EAAMM,QAEhBC,EAAiB,YAAS,IAAI,YAAM,EAAGD,IAC3C,OAAO,YAAU,CACfE,QAAS,CACPpC,KAAM,CACJqC,SAAU,WACVC,WAAY,OACZC,YAAa,OACbC,YAAa,YAAM,EAAGN,GACtBO,aAAc,YAAM,EAAGP,GACvBQ,MAAO,YAAW,KAClBC,SAAU,YAAW,OAGzBlB,OAAQ,CACNzB,KAAM,CACJ4C,OAAQ,YAAW,OAGvBd,QAAS,CACP9B,KAAM,CACJ2C,SAAUR,EAAe,IAAYU,MAGzCd,QAAS,CACP/B,KAAM,CACJ2C,SAAUR,EAAe,IAAYW,MAGzCd,QAAS,CACPhC,KAAM,CACJ2C,SAAUR,EAAe,IAAYY,MAGzCd,QAAS,CACPjC,KAAM,CACJ2C,SAAUR,EAAe,IAAYa,MAGzCxB,MAAO,CACLxB,KAAM,CACJ2C,SAAU,YAAW,QAGxB,CAAC,CACFb,QAASA,GACR,CACDC,QAASA,GACR,CACDC,QAASA,GACR,CACDC,QAASA,GACR,CACDT,MAAOA,GACN,CACDC,OAAQA,KAQHwB,CAAWvB,MASJwB,EAPI,SAAuBvB,GACzC,IAAIwB,EAASxB,EAAKwB,OACdC,EAAWzB,EAAKyB,SACpB,OAAO,IAAMC,cAAc,MAAO,CAChCC,MAAOH,EAAOnD,MACboD,OA8DL,SAAWjC,GACTA,EAAe,IAAI,MACnBA,EAAuB,YAAI,cAC3BA,EAAkB,OAAI,SACtBA,EAA0B,eAAI,iBAJhC,CAKGA,IAAcA,EAAY,KAI7B,SAAWC,GACTA,EAAgB,SAAI,WACpBA,EAAc,OAAI,MAClBA,EAAc,OAAI,SAClBA,EAAkB,WAAI,aACtBA,EAAgB,SAAI,WACpBA,EAAe,QAAI,UACnBA,EAAW,IAAI,QAPjB,CAQGA,IAAUA,EAAQ,KAIrB,SAAWC,GACTA,EAAa,OAAI,SACjBA,EAAW,KAAI,OACfA,EAAmB,aAAI,eAHzB,CAIGA,IAASA,EAAO,KAInB,SAAWC,GACTA,EAAoB,WAAI,aACxBA,EAAkB,SAAI,WACtBA,EAAgB,OAAI,SACpBA,EAAuB,cAAI,gBAC3BA,EAAsB,aAAI,eAC1BA,EAAsB,aAAI,eAN5B,CAOGA,IAAYA,EAAU,KAEzB,IAmBIiC,EAnBY,YAAM,MAAN,CAAa,uBAAa,CACxCC,SAAS,EACTC,UAAW,MACXC,UAAWvC,EAAUwC,IACrBC,MAAOxC,EAAMyC,QACbC,KAAMzC,EAAK0C,KACXC,QAAS1C,EAAQ2C,WACjBxC,QAAQ,IACN,qBAAU,SAAUC,GACtB,OAzGiB,SAAWC,GAC5B,IAAI8B,EAAY9B,EAAK8B,UACjBD,EAAU7B,EAAK6B,QACf/B,EAASE,EAAKF,OACdiC,EAAY/B,EAAK+B,UACjBE,EAAQjC,EAAKiC,MACbE,EAAOnC,EAAKmC,KACZE,EAAUrC,EAAKqC,QAKf9B,EAHY,cACMN,MAEFM,QAChBgC,EAAO,YAAQ,CAAC,YAAO,MAAO,YAAO,OAA9B,CAAsCT,GACjD,OAAO,YAAU,CACfrB,QAAS,CACPpC,KAAM,CACJmE,QAAS,OACTC,cAAeV,EACfW,WAAYT,EACZU,eAAgBN,EAChBO,eAAgBT,EAChBU,WAAYV,EACZW,SAAUX,EACVxB,WAAY,EACZC,YAAa,IAGjBd,OAAQ,CACNzB,KAAM,CACJ4C,OAAQ,SAGZY,QAAS,CACPxD,KAAM,CACJsC,WAAY,YAAO,YAAM,EAAGJ,IAC5BK,YAAa,YAAO,YAAM,EAAGL,MAGjCgC,KAAM,CACJlE,KAAM,CACJwC,YAAa,EACbkC,UAAW,OACXC,UAAW,EACXC,aAAc,KAGjB,CAAC,CACFpB,QAASA,GACR,CACDU,KAAMA,GACL,CACDzC,OAAQA,KAqDHoD,CAAanD,MAUZoD,EARI,SAAiBnD,GAC7B,IAAIwB,EAASxB,EAAKwB,OACdM,EAAY9B,EAAK8B,UACjBL,EAAWzB,EAAKyB,SACpB,OAAO,wBAAcK,EAAW,CAC9BH,MAAOH,EAAOnD,MACboD,MAID2B,EAAW,YAAO,YAAO,YAAO,QAAS,KAAQ,YAAO,SAAS,SAAUC,GAC7E,OAAO,IAAM,GAAKA,KAEhBC,EAAc,YAAO,YAAO,QAAS,YAAO,CAC9CC,UAAW,OACXvC,SAAU,YAAW,QACnB,SAAUD,GACZ,MAAO,CACLwC,UAAW,YAAWxC,GACtBA,MAAO,YAAWA,GAClBC,SAAU,YAAWD,OAoIrByC,EAdY,YAAM,SAAN,CAAgB,uBAAa,CAC3C3B,SAAS,EACTC,UAAW,QACT,qBAAU,SAAU/B,GACtB,OAvHiB,SAAWC,GAC5B,IAAI6B,EAAU7B,EAAK6B,QACfI,EAAQjC,EAAKiC,MACbwB,EAAKzD,EAAKyD,GACVvC,EAAKlB,EAAKkB,GACVC,EAAKnB,EAAKmB,GACVC,EAAKpB,EAAKoB,GACVC,EAAKrB,EAAKqB,GACVqC,EAAW1D,EAAK0D,SAChBC,EAAW3D,EAAK2D,SAChBC,EAAW5D,EAAK4D,SAChBC,EAAW7D,EAAK6D,SAChBC,EAAW9D,EAAK8D,SAGhB7D,EADY,cACMA,MAElBC,EAAuB,YAAoB,IAC3CC,EAAUD,EAAqBC,QAC/BC,EAAUF,EAAqBE,QAC/BC,EAAUH,EAAqBG,QAC/BC,EAAUJ,EAAqBI,QAE/BC,EAAUN,EAAMM,QACpB,OAAO,YAAU,CACfE,QAAS,CACPpC,KAAM,CACJwC,YAAa,EACbC,aAAc,EACdJ,SAAU,WACVqD,UAAW,EACXC,cAAe,EACfC,gBAAiB,OACjBC,oBAAqB,EACrBC,eAAgB,EAChBC,eAAgB,EAChBC,SAAU,EACVd,UAAW,OACXvC,SAAU,YAAW,KACrBsD,UAAWrC,IAGfJ,QAAS,CACPxD,KAAM,CACJwC,YAAa,YAAM,EAAGN,GACtBO,aAAc,YAAM,EAAGP,KAI3BkD,GAAI,CACFpF,KAAMiF,EAAYF,EAASK,KAE7BvC,GAAI,CACF7C,KAAMiF,EAAYF,EAASlC,KAE7BC,GAAI,CACF9C,KAAMiF,EAAYF,EAASjC,KAE7BC,GAAI,CACF/C,KAAMiF,EAAYF,EAAShC,KAE7BC,GAAI,CACFhD,KAAMiF,EAAYF,EAAS/B,KAG7BqC,SAAU,CACRrF,KAAM,CACJsC,WAAY,YAAWyC,EAASM,MAGpCC,SAAU,CACRtF,KAAM,CACJsC,WAAY,YAAWyC,EAASO,MAGpCC,SAAU,CACRvF,KAAM,CACJsC,WAAY,YAAWyC,EAASQ,MAGpCC,SAAU,CACRxF,KAAM,CACJsC,WAAY,YAAWyC,EAASS,MAGpCC,SAAU,CACRzF,KAAM,CACJsC,WAAY,YAAWyC,EAASU,OAGnC,CAAC,CACFjC,QAASA,GACR,CACD4B,GAAU,MAANA,GACH,CACDvC,GAAIf,GAAiB,MAANe,GACd,CACDC,GAAIf,GAAiB,MAANe,GACd,CACDC,GAAIf,GAAiB,MAANe,GACd,CACDC,GAAIf,GAAiB,MAANe,GACd,CACDqC,SAAsB,MAAZA,GACT,CACDC,SAAUxD,GAAuB,MAAZwD,GACpB,CACDC,SAAUxD,GAAuB,MAAZwD,GACpB,CACDC,SAAUxD,GAAuB,MAAZwD,GACpB,CACDC,SAAUxD,GAAuB,MAAZwD,KAQhBS,CAAaxE,MAUTyE,EARI,SAAoBxE,GACnC,IAAI8B,EAAY9B,EAAK8B,UACjBN,EAASxB,EAAKwB,OACdC,EAAWzB,EAAKyB,SACpB,OAAO,wBAAcK,EAAW,CAC9BH,MAAOH,EAAOnD,MACboD,O,2ICxTUgD,MArCEC,YACfC,IACAC,YAAU,CACRC,kBAAmB,WAKjB,GAAIC,KAAK/E,MAAMgF,SAASC,OAAU,IAAGF,KAAK/E,MAAMkF,KAAQ,CACtD,MAAMC,EAAkB,KAGtB,GAAIJ,KAAK/E,MAAMoF,UAAYL,KAAK/E,MAAMqF,kBACpC,OAAOC,WAAWH,EAAiB,KAGrCI,WAASC,SAAST,KAAK/E,MAAMkF,KAAM,CACjCO,SAAU,IACVC,MAAO,IACPC,QAAQ,KAGZL,WAAWH,EAAiB,SAIjCS,GAES5F,GACN,eAAC,WAAD,WACE,cAAC,UAAD,CAASkF,KAAMlF,EAAMkF,OACrB,cAACU,EAAD,IAAsB5F,Q,yDCzBf,I,gECKf,MAAM6F,EAAgB,eAACC,EAAD,uDAA6B,GAA7B,OACpB,MAACA,IAAc,IACZC,WACAC,MAAM,KACNC,IAAKC,GAAeA,EAAGC,QACvBC,OAAOC,SACPJ,IAAKK,IAAD,CAAkBA,gB,aCL3B,MAAMC,EAAoBvG,IACxB,MAAM,GAAEkG,EAAF,KAAMhB,EAAN,KAAYsB,GAASxG,EACrByG,EAAYC,YAAmBR,GAC/BS,EAAMC,iBAA8B,MACpCnI,EAAQN,YAAwBwI,EAAK,CACzCnI,mBAAmB,IAkBrB,OAfAO,oBAAU,KACR,GAAiB,MAAb0H,IAA+C,KAA1BhI,aAAA,EAAAA,EAAOI,gBAC9B,OAEF,MAAM2D,EAAOqE,YAAiBL,EAAMtB,GAEb,YAAnBuB,EAAUD,MAAyC,WAAnBC,EAAUK,KDPjBC,WAC/B,MAAM,UAAET,GAAF,MAAgBG,IAAa,GAE7BO,EADanB,EAAcS,GACLL,IAAIgB,KAE1BC,SADiBC,QAAQC,IAAIJ,IACNf,IAAKoB,GACD,CAC7B,aACA,CACEnB,GAAImB,EAAQnB,GACZhB,KAAMmC,EAAQnC,QAKpBoC,YAAU,IAAIJ,EAAa,CAAC,YAAa,WAAY,CAAEK,gBAAgB,KCPnEC,CAAkBf,GACU,YAAnBA,EAAUD,MAAyC,eAAnBC,EAAUK,KDSpBC,OAAON,EAAsBjE,KAChE,MAAM,UAAE8D,GAAF,MAAgBG,IAAa,GAE7BO,EADanB,EAAcS,GACLL,IAAIgB,KAE1BC,SADiBC,QAAQC,IAAIJ,IACNf,IAAKoB,GACD,CAC7B,gBACA,CACEnB,GAAImB,EAAQnB,GACZhB,KAAMmC,EAAQnC,KACd1C,UAKN8E,YAAUJ,EAAa,CAAEK,gBAAgB,KCxBrCE,CAAsBhB,EAAWjE,GACL,cAAnBiE,EAAUD,MD0Bc,EAACC,EAAsBjE,KAC5D,MAAM,UAAEkF,GAAF,MAAgBjB,IAAa,GAEnC,GAAiB,MAAbiB,GAAmC,KAAdA,EACvB,OAAO,KAGT,MAAMC,EAAUC,YAAmBF,GACnCJ,YACE,CACE,CACE,gBACA,CACEpB,GAAIyB,EACJzC,KAAMwC,EACNlF,UAIN,CAAE+E,gBAAgB,KC5ChBM,CAAwBpB,EAAWjE,IAEpC,CAAC/D,aAAD,EAACA,EAAOI,eAAgB4H,EAAWvB,EAAMsB,IAG1C,cAAC,IAAD,CAAUsB,UAAW9H,EAAM8H,UAAW/F,UAAU,UAAUgG,SAAU/H,EAAM+H,SAAUnG,MAAO5B,EAAM4B,MAAO+E,IAAKA,EAA7G,SACG3G,EAAM0B,YAKb6E,EAAiByB,YAAc,mBAEhBzB,QCnCR,MAAM0B,EAAa,IAWR,IAXS,SACzBvG,EADyB,SAEzBqG,EAFyB,QAGzB3C,EAHyB,OAIzB8C,EAJyB,MAKzBC,EALyB,UAMzBC,EANyB,GAOzBlC,EAPyB,KAQzBhB,EARyB,KASzBsB,EATyB,UAUzBsB,GACgB,EAChB,MAAM,OAAErG,GCbK,KAYT,IAZU,SACdsG,EADc,QAEd3C,EAFc,OAGd8C,EAHc,MAIdC,EAJc,UAKdC,GAOI,EACJ,MAAM,MAAElI,GAAUmI,eACZ,QAAEC,EAAF,QAAW9H,GAAYN,GACvB,IAAEqI,GAAF,MAAUL,IAAU,GACpBM,EAAcC,eACd,QAAErI,EAAF,QAAWC,EAAX,QAAoBC,GAAYkI,EAEhCE,EAAYC,YAAmBH,EAAaD,GAE5CK,EAAUC,YAAc,CAC5BrI,UACAJ,UACAE,UACA4H,SACAC,UAGIW,EJ1CsB,KAAuE,IAAtE,QAAEzI,EAAF,UAAW+H,GAA2D,EACnG,IAAK/H,GAAwB,MAAb+H,EACd,MAAO,GAIT,MAAO,CACLW,MAFe1I,GAAW+H,EAAY,GAAK,KAEpC,MImCaY,CAAe,CACnC3I,UACA+H,cAGF,OAAOa,YACL,CACEvI,QAAS,CAEPpC,KAAM,CACJqC,SAAU,WACV8B,QAAS,OACTC,cAAe,SACf1B,MAAO,UACJkI,YAAOR,GAAW,MAClBE,KACAE,GAELK,MAAO,CACLJ,KAAM,EACNvF,UAAW,OACXf,QAAS,OACTvB,OAAQ,QAEVkI,OAAQ,CACN3G,QAAS,OACTC,cAAe,SACf1B,MAAO,SAIX,CAACqI,YAAS,WAAYC,IAASC,mBAAoB,CACjDjL,KAAM,CACJkL,gBAAkB,6BAA4BlB,EAAQmB,YAAYnB,EAAQoB,sBAIhF,CAAC,CAAEtE,WAAW,CAAE2C,YAAY,CAAE3H,WAAW,CAAEC,WAAW,CAAEC,cDrDvCqJ,CAAc,CAC/B5B,WACA3C,UACA8C,SACAC,QACAC,cAEIwB,EAAYhD,iBAAO,MAczB,OAZAiD,0BAAgB,KAIVC,GAMH,IAGD,cAACC,EAAD,CAAkBjC,UAAWA,EAAWC,SAAUA,EAAU7B,GAAIA,EAAIhB,KAAMA,EAAMsB,KAAMA,EAAM5E,MAAOH,EAAOnD,KAA1G,SACE,qBAAKsD,MAAOH,EAAO0H,MAAnB,SACE,qBAAKvH,MAAOH,EAAO2H,OAAQzC,IAAKiD,EAAhC,SACGlI,SAOXuG,EAAWD,YAAc,SAEVtD,QAASuD,I,oBE5DxB,0GA2BA,MAAM0B,EAAgB,IAA6C,IAA5C,0BAAoBxB,GAAwB,EACjE,MAAM,MAAEjI,GAAUmI,eACZ,4BAAoB/H,GAAYmI,eAChC,QAAEjI,GAAR,EAEA,OAAOyI,YACL,CACEvI,QAAS,CAEPpC,KAAM,CACJ0L,gBAAiBC,YAAmB/J,EADhC,GAEJgK,MAAOC,YAAcjK,EAFjB,MAGD2I,YAAc,wCAKfV,aAECiC,YAAS,OAAQC,IAAT,EAAiBC,YAAM,EAV9B,IAWJC,UAAW,WAGfnK,QAAS,CACP9B,KAAM,IACD8L,YAAS,OAAQC,IAAT,EAAiBC,YAAM,EAAvB,OAIjB,CAAC,CAAEvC,YAAY,CAAE3H,WAAW,CAAEC,cAInB,QACb,MAAMmK,EAAgB,IACpBC,kBADoB,GAEpB,QAAC,OAAEhJ,GAAH,SACE,qBAAKG,MAAOH,EAAZ,cACE,4BACE,mBAASyE,GAAT,gCAIN,GAAuB,oBATzB,KAYA,OAAOvB,YACL+F,YAAU,aAAc,iBADZ,GAEZ7F,YAAU,CACR8F,kBAAmB,WAEjB5F,KAAA,2BAGJ6F,YARKjG,IAAP,K,oBCzEF,iCAGgBkG,OACdJ,IACEA,IAAO,WACNzK,GAAU,cAAC6K,EAAD,IAAmB7K,IAC7BA,GACC,qBAAK4B,MAAO,CAAEa,QAAS,QAAvB,SACE,cAACoI,EAAD,IAAmB7K,Q,oBCT3B,qCAIA,MAEM8K,EAAa,CAAC9K,EAAO+K,KACzB,GAHiB/K,IAASA,EAAMgL,SAAWhL,EAAMgL,QAAQC,OAAS,EAG9DC,CAAWlL,GAAQ,CACrB,MAGMmL,EAHQnL,EAAMgL,QAAQI,KAAKC,GACxBN,EAAKO,SAASD,EAAKnF,MAELlG,EAAMgL,QAAQO,OAAO,GAAG,GACzCC,EAASC,OAAOC,OAAO,GAAI1L,EAAMwL,OAAQL,EAAMK,QACrD,OAAOV,EAAW,IAAKK,EACrBK,UACCT,GAGL,MAAM,GACJ7E,EAAE,OACFsF,GACExL,EACJ,OAAO+K,EAAKY,cAAc,CACxBzF,MACCsF,IASL,IAAII,EAJY,YAAM,UAAN,EAIFpK,CAFMxB,GAAsB,IAAM2B,cAAc,IAAMkK,SAAU,KAJ3D7L,IAAS8K,EAAW9K,EAAO,eAIsC8L,CAAW9L,KAIhF,O,oBCnCf,kBAWA,MAAM+L,EAAiB,IAYjB,IAZkB,WACtBC,EADsB,QAEtBC,EAFsB,OAGtB/D,EAHsB,QAItB9H,EAJsB,QAKtBE,GAOI,EACJ,MAAM,cAAE4L,EAAF,eAAiBC,GAAmBjE,EAM1C,OAAI+D,EACK,GAGiB,IARZ,CACZC,gBACAC,kBAMQH,GACJ5L,EACK,EAEF,GAELE,EACK,EAELF,EACK,EAEF,GAkCM,QAcT,IAdU,QACdI,EADc,QAEdJ,EAFc,QAGdE,EAHc,OAId4H,EAAS,GAJK,MAKdC,EALc,eAMdiE,GAAiB,GAQb,EACJ,IAAc,IAAVjE,EAEF,MAAO,GAET,MAAM,QAAEkE,EAAF,SAAWC,GAlDF,KAUX,IAVY,MAChBnE,EADgB,OAEhBD,EAFgB,QAGhB9H,EAHgB,QAIhBE,GAMI,EAeJ,MAAO,CACL+L,QAfcN,EAAe,CAC7BC,WAAY,gBACZC,QAAS9D,IAAUoE,IAAMC,QACzBtE,SACA9H,UACAE,YAWAgM,SATeP,EAAe,CAC9BC,WAAY,iBACZC,QAAS9D,IAAUoE,IAAME,SACzBvE,SACA9H,UACAE,cA2B4BoM,CAAS,CACrCvE,QACAD,SACA9H,UACAE,YAGF,OAAI8L,EACK,CAAE,2BAA4BC,EAAS,8BAA+BC,GAExE,CACLK,WAAYrC,YAAM+B,EAAS7L,GAC3BoM,cAAetC,YAAMgC,EAAU9L,M,oBC/GnC,+BAIe,QAAMiK,IAAUoC,cAAcC,cAAYC,cAAUC,cAAWC,cAAQC,cAAjEzC,CAAyE0C,M,oBCJ9F,kCAAO,MAAMtG,EAAmB,CAACL,EAAetB,IAAkB,CAAC,SAAUsB,EAAMtB,GAAMkB,OAAOC,SAAS+G,KAAK,Q,mECY/FnG,MARwB,IAAyC,IAAxC,UAAEX,EAAF,MAAa+G,EAAb,OAAoBC,EAAS,MAAW,EAC9E,OAAOT,cAAa,IAAK,aAAc,CACrCvG,YACA+G,QACAC,a,2ECYW,EADf,OAAAC,EAAA,GAAQ,EAAG,e,SCbJ,MAAM3F,EAAqB6C,IAAOA,EAAWA,IAAU,OAAQ,KAAMA,IAAU,gBAAiB","file":"pex-static/90/0.a27ac4e49492e03186f0.chunk.js","sourcesContent":["// SOURCE: I stole it. (https://usehooks-ts.com/react-hook/use-intersection-observer)\n\nimport { RefObject, useEffect, useState } from 'react';\n\ninterface Args extends IntersectionObserverInit {\n freezeOnceVisible?: boolean;\n}\n\nfunction useIntersectionObserver(\n elementRef: RefObject,\n { threshold = 0, root = null, rootMargin = '0%', freezeOnceVisible = false }: Args,\n): IntersectionObserverEntry | undefined {\n const [entry, setEntry] = useState();\n\n const frozen = entry?.isIntersecting && freezeOnceVisible;\n\n const updateEntry = ([entry]: Array): void => {\n setEntry(entry);\n };\n\n useEffect(() => {\n const node = elementRef?.current; // DOM Ref\n const hasIOSupport = !!window.IntersectionObserver;\n\n if (!hasIOSupport || frozen || !node) return;\n\n const observerParams = { threshold, root, rootMargin };\n const observer = new IntersectionObserver(updateEntry, observerParams);\n\n observer.observe(node);\n\n return () => observer.disconnect();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [elementRef, JSON.stringify(threshold), root, rootMargin, frozen]);\n\n return entry;\n}\n\nexport default useIntersectionObserver;\n","import React, { createElement } from 'react';\nimport { puree } from '@ux/pure-enhance';\nimport { defaultProps, withProps } from '@team-griffin/rehook';\nimport { useTheme, gu2px } from '@ux/theme-utils';\nimport { useStyles } from '@team-griffin/stylr';\nimport { percentage } from '@ux/style-utils';\nimport { withBreakpointsHook, breakpoints } from '@ux/responsive';\nimport { subtract, __, anyPass, equals, negate, ifElse, either, isNil, always } from 'ramda';\n\nvar stylesheet = (function (_ref) {\n var fluid = _ref.fluid,\n vblock = _ref.vblock;\n\n var _useTheme = useTheme(),\n theme = _useTheme.theme;\n\n var _withBreakpointsHook = withBreakpointsHook({}),\n isMinSm = _withBreakpointsHook.isMinSm,\n isMinMd = _withBreakpointsHook.isMinMd,\n isMinLg = _withBreakpointsHook.isMinLg,\n isMinXl = _withBreakpointsHook.isMinXl;\n\n var spacing = theme.spacing; // remove 1GU of padding from given breakpoint number\n\n var createMaxWidth = subtract(__, gu2px(1, spacing));\n return useStyles({\n default: {\n root: {\n position: 'relative',\n marginLeft: 'auto',\n marginRight: 'auto',\n paddingLeft: gu2px(1, spacing),\n paddingRight: gu2px(1, spacing),\n width: percentage(100),\n maxWidth: percentage(100)\n }\n },\n vblock: {\n root: {\n height: percentage(100)\n }\n },\n isMinSm: {\n root: {\n maxWidth: createMaxWidth(breakpoints.sm)\n }\n },\n isMinMd: {\n root: {\n maxWidth: createMaxWidth(breakpoints.md)\n }\n },\n isMinLg: {\n root: {\n maxWidth: createMaxWidth(breakpoints.lg)\n }\n },\n isMinXl: {\n root: {\n maxWidth: createMaxWidth(breakpoints.xl)\n }\n },\n fluid: {\n root: {\n maxWidth: percentage(100)\n }\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinMd: isMinMd\n }, {\n isMinLg: isMinLg\n }, {\n isMinXl: isMinXl\n }, {\n fluid: fluid\n }, {\n vblock: vblock\n }]);\n});\n\nvar enhance = puree('Container')(defaultProps({\n fluid: false,\n vblock: false\n}), withProps(function (props) {\n return stylesheet(props);\n}));\nvar PureContainer = function PureContainer(_ref) {\n var styles = _ref.styles,\n children = _ref.children;\n return React.createElement(\"div\", {\n style: styles.root\n }, children);\n};\nvar Container = enhance(PureContainer); // eslint-disable-next-line no-underscore-dangle\n\nvar stylesheet$1 = (function (_ref) {\n var component = _ref.component,\n gutters = _ref.gutters,\n vblock = _ref.vblock,\n direction = _ref.direction,\n align = _ref.align,\n wrap = _ref.wrap,\n justify = _ref.justify;\n\n var _useTheme = useTheme(),\n theme = _useTheme.theme;\n\n var spacing = theme.spacing;\n var list = anyPass([equals('ul'), equals('ol')])(component);\n return useStyles({\n default: {\n root: {\n display: 'flex',\n flexDirection: direction,\n alignItems: align,\n justifyContent: justify,\n WebkitFlexWrap: wrap,\n msFlexWrap: wrap,\n flexWrap: wrap,\n marginLeft: 0,\n marginRight: 0\n }\n },\n vblock: {\n root: {\n height: '100%'\n }\n },\n gutters: {\n root: {\n marginLeft: negate(gu2px(1, spacing)),\n marginRight: negate(gu2px(1, spacing))\n }\n },\n list: {\n root: {\n paddingLeft: 0,\n listStyle: 'none',\n marginTop: 0,\n marginBottom: 0\n }\n }\n }, [{\n gutters: gutters\n }, {\n list: list\n }, {\n vblock: vblock\n }]);\n});\n\nvar Direction;\n\n(function (Direction) {\n Direction[\"ROW\"] = \"row\";\n Direction[\"ROW_REVERSE\"] = \"row-reverse\";\n Direction[\"COLUMN\"] = \"column\";\n Direction[\"COLUMN_REVERSE\"] = \"column-reverse\";\n})(Direction || (Direction = {}));\n\nvar Align;\n\n(function (Align) {\n Align[\"BASELINE\"] = \"baseline\";\n Align[\"BOTTOM\"] = \"end\";\n Align[\"CENTER\"] = \"center\";\n Align[\"FLEX_START\"] = \"flex-start\";\n Align[\"FLEX_END\"] = \"flex-end\";\n Align[\"STRETCH\"] = \"stretch\";\n Align[\"TOP\"] = \"start\";\n})(Align || (Align = {}));\n\nvar Wrap;\n\n(function (Wrap) {\n Wrap[\"NOWRAP\"] = \"nowrap\";\n Wrap[\"WRAP\"] = \"wrap\";\n Wrap[\"WRAP_REVERSE\"] = \"wrap-reverse\";\n})(Wrap || (Wrap = {}));\n\nvar Justify;\n\n(function (Justify) {\n Justify[\"FLEX_START\"] = \"flex-start\";\n Justify[\"FLEX_END\"] = \"flex-end\";\n Justify[\"CENTER\"] = \"center\";\n Justify[\"SPACE_BETWEEN\"] = \"space-between\";\n Justify[\"SPACE_AROUND\"] = \"space-around\";\n Justify[\"SPACE_EVENLY\"] = \"space-evenly\";\n})(Justify || (Justify = {}));\n\nvar enhance$1 = puree('Row')(defaultProps({\n gutters: true,\n component: 'div',\n direction: Direction.ROW,\n align: Align.STRETCH,\n wrap: Wrap.WRAP,\n justify: Justify.FLEX_START,\n vblock: false\n}), withProps(function (props) {\n return stylesheet$1(props);\n}));\nvar PureRow = function PureRow(_ref) {\n var styles = _ref.styles,\n component = _ref.component,\n children = _ref.children;\n return createElement(component, {\n style: styles.root\n }, children);\n};\nvar Row = enhance$1(PureRow); // eslint-disable-next-line no-underscore-dangle\n\nvar getWidth = ifElse(either(equals('auto'), isNil), always('auto'), function (size) {\n return 100 / 12 * size;\n});\nvar widthStyles = ifElse(equals('auto'), always({\n flexBasis: 'auto',\n maxWidth: percentage(100)\n}), function (width) {\n return {\n flexBasis: percentage(width),\n width: percentage(width),\n maxWidth: percentage(width)\n };\n});\nvar stylesheet$2 = (function (_ref) {\n var gutters = _ref.gutters,\n align = _ref.align,\n xs = _ref.xs,\n sm = _ref.sm,\n md = _ref.md,\n lg = _ref.lg,\n xl = _ref.xl,\n offsetXs = _ref.offsetXs,\n offsetSm = _ref.offsetSm,\n offsetMd = _ref.offsetMd,\n offsetLg = _ref.offsetLg,\n offsetXl = _ref.offsetXl;\n\n var _useTheme = useTheme(),\n theme = _useTheme.theme;\n\n var _withBreakpointsHook = withBreakpointsHook({}),\n isMinSm = _withBreakpointsHook.isMinSm,\n isMinMd = _withBreakpointsHook.isMinMd,\n isMinLg = _withBreakpointsHook.isMinLg,\n isMinXl = _withBreakpointsHook.isMinXl;\n\n var spacing = theme.spacing;\n return useStyles({\n default: {\n root: {\n paddingLeft: 0,\n paddingRight: 0,\n position: 'relative',\n minHeight: 1,\n WebkitBoxFlex: 1,\n WebkitFlexBasis: 'auto',\n msFlexPreferredSize: 0,\n WebkitFlexGrow: 1,\n msFlexPositive: 1,\n flexGrow: 1,\n flexBasis: 'auto',\n maxWidth: percentage(100),\n alignSelf: align\n }\n },\n gutters: {\n root: {\n paddingLeft: gu2px(1, spacing),\n paddingRight: gu2px(1, spacing)\n }\n },\n // Sizes\n xs: {\n root: widthStyles(getWidth(xs))\n },\n sm: {\n root: widthStyles(getWidth(sm))\n },\n md: {\n root: widthStyles(getWidth(md))\n },\n lg: {\n root: widthStyles(getWidth(lg))\n },\n xl: {\n root: widthStyles(getWidth(xl))\n },\n // Offsets\n offsetXs: {\n root: {\n marginLeft: percentage(getWidth(offsetXs))\n }\n },\n offsetSm: {\n root: {\n marginLeft: percentage(getWidth(offsetSm))\n }\n },\n offsetMd: {\n root: {\n marginLeft: percentage(getWidth(offsetMd))\n }\n },\n offsetLg: {\n root: {\n marginLeft: percentage(getWidth(offsetLg))\n }\n },\n offsetXl: {\n root: {\n marginLeft: percentage(getWidth(offsetXl))\n }\n }\n }, [{\n gutters: gutters\n }, {\n xs: xs != null\n }, {\n sm: isMinSm && sm != null\n }, {\n md: isMinMd && md != null\n }, {\n lg: isMinLg && lg != null\n }, {\n xl: isMinXl && xl != null\n }, {\n offsetXs: offsetXs != null\n }, {\n offsetSm: isMinSm && offsetSm != null\n }, {\n offsetMd: isMinMd && offsetMd != null\n }, {\n offsetLg: isMinLg && offsetLg != null\n }, {\n offsetXl: isMinXl && offsetXl != null\n }]);\n});\n\nvar enhance$2 = puree('Column')(defaultProps({\n gutters: true,\n component: 'div'\n}), withProps(function (props) {\n return stylesheet$2(props);\n}));\nvar PureColumn = function PureColumn(_ref) {\n var component = _ref.component,\n styles = _ref.styles,\n children = _ref.children;\n return createElement(component, {\n style: styles.root\n }, children);\n};\nvar Column = enhance$2(PureColumn); // eslint-disable-next-line no-underscore-dangle\n\nexport { Align, Column, Container, Direction, Justify, Row, Wrap };\n","import React, { Fragment } from 'react';\nimport { compose, lifecycle } 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: error after upgrading eslint config. Please replace with relevant comment\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: error after upgrading eslint config. Please replace with relevant comment\n if (this.props.loading || !this.props.animationComplete) {\n return setTimeout(scrollWhenReady, 100);\n }\n // @ts-ignore: error after upgrading eslint config. Please replace with relevant comment\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 // eslint-disable-next-line react/display-name\n return (props: any) => (\n \n \n \n \n );\n },\n);\n\nexport default deepLink;\n","export const duoRibbonWidth = ({ isMinMd, duoLayout }: { isMinMd: boolean; duoLayout?: boolean }) => {\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;\n","import { Product } from '@uds/product';\nimport { ecommerce } from '@ux/tagmg';\nimport { Maybe } from 'core';\nimport { Analytics } from 'domain/constants/ribbons';\nimport { promoNameToPromoId } from 'domain/logic/promotion';\nimport { getProductData } from 'infrastructure/cta';\n\ntype Impression = [\n string,\n {\n id: number;\n name: string;\n list?: string;\n },\n];\n\nconst getProductIds = (productIds: Maybe = '') =>\n (productIds ?? '')\n .toString()\n .split(',')\n .map((id: string) => id.trim())\n .filter(Boolean)\n .map((productId) => ({ productId }));\n\nexport const sendProductDetail = async (analytics: Analytics) => {\n const { productId } = analytics ?? {};\n const productIds = getProductIds(productId);\n const promises = productIds.map(getProductData);\n const products = await Promise.all(promises);\n const impressions = products.map((product: Product) => {\n const impression: Impression = [\n 'addProduct',\n {\n id: product.id,\n name: product.name,\n },\n ];\n return impression;\n });\n ecommerce([...impressions, ['setAction', 'detail']], { nonInteraction: true });\n};\n\nexport const sendProductImpression = async (analytics: Analytics, list: string) => {\n const { productId } = analytics ?? {};\n const productIds = getProductIds(productId);\n const promises = productIds.map(getProductData);\n const products = await Promise.all(promises);\n const impressions = products.map((product: Product) => {\n const impression: Impression = [\n 'addImpression',\n {\n id: product.id,\n name: product.name,\n list,\n },\n ];\n return impression;\n });\n ecommerce(impressions, { nonInteraction: true });\n};\n\nexport const sendPromotionImpression = (analytics: Analytics, list: string) => {\n const { promotion } = analytics ?? {};\n\n if (promotion == null || promotion === '') {\n return null;\n }\n\n const promoId = promoNameToPromoId(promotion);\n ecommerce(\n [\n [\n 'addImpression',\n {\n id: promoId,\n name: promotion,\n list,\n },\n ],\n ],\n { nonInteraction: true },\n );\n};\n","import { PropsWithChildren, useRef, useEffect, StyleHTMLAttributes } from 'react';\nimport { Type } from 'domain/constants/ribbons';\nimport useIntersectionObserver from 'presentation/hooks/useIntersectionObserver';\nimport { useRibbonAnalytics } from 'domain/selectors/ribbons';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { sendProductDetail, sendProductImpression, sendPromotionImpression } from 'domain/impression';\nimport Colorway, { Colorways } from '@uds/colorway';\n\ninterface OuterProps {\n id: string;\n name: string;\n type?: Type;\n style?: StyleHTMLAttributes;\n colorway: Colorways;\n className?: string | undefined;\n}\n\nconst ImpressionRibbon = (props: PropsWithChildren) => {\n const { id, name, type } = props;\n const analytics = useRibbonAnalytics(id);\n const ref = useRef(null);\n const entry = useIntersectionObserver(ref, {\n freezeOnceVisible: true,\n });\n\n useEffect(() => {\n if (analytics == null || entry?.isIntersecting !== true) {\n return;\n }\n const list = createRibbonName(type, name);\n\n if (analytics.type === 'PRODUCT' && analytics.view === 'DETAIL') {\n sendProductDetail(analytics);\n } else if (analytics.type === 'PRODUCT' && analytics.view === 'IMPRESSION') {\n sendProductImpression(analytics, list);\n } else if (analytics.type === 'PROMOTION') {\n sendPromotionImpression(analytics, list);\n }\n }, [entry?.isIntersecting, analytics, name, type]);\n\n return (\n \n {props.children}\n \n );\n};\n\nImpressionRibbon.displayName = 'ImpressionRibbon';\n\nexport default ImpressionRibbon;\n","import React, { useRef, useLayoutEffect, ReactNode, ComponentType } from 'react';\nimport { Flush, RibbonProps } from 'domain/constants/ribbons';\nimport deepLink from 'presentation/hocs/deepLink';\n\nimport useStylesheet from './Ribbon.stylesheet';\nimport RibbonImpression from './RibbonImpression';\n\nexport { Flush };\n\ninterface OuterProps extends RibbonProps {\n children?: ReactNode;\n className?: string | undefined;\n}\n\nexport const PureRibbon = ({\n children,\n colorway,\n loading,\n layout,\n flush,\n duoLayout,\n id,\n name,\n type,\n className,\n}: OuterProps) => {\n const { styles } = useStylesheet({\n colorway,\n loading,\n layout,\n flush,\n duoLayout,\n });\n const targetRef = useRef(null);\n\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 if (process.env.NODE_ENV !== 'production') {\n setTimeout(() => {\n // eslint-disable-next-line no-console\n console.log('BACKSTOP_RIBBON_READY');\n }, 3000);\n }\n }, []);\n\n return (\n \n
\n
\n {children}\n
\n
\n
\n );\n};\n\nPureRibbon.displayName = 'Ribbon';\n\nexport default deepLink(PureRibbon) as ComponentType;\n","import { useBreakpoints } from '@ux/responsive';\nimport { useStyles } from '@team-griffin/stylr';\nimport { modifier } from '@ux/style-utils';\nimport { useTheme } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Flush } from 'domain/constants/ribbons';\nimport { Layout } from 'domain/constants/layout';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { duoRibbonWidth } from 'presentation/utils/ribbonWidth';\n\nimport { mapFit } from './utils';\n\nexport default ({\n colorway,\n loading,\n layout,\n flush,\n duoLayout,\n}: {\n colorway: Colorway;\n loading: boolean;\n layout: Layout;\n flush?: Flush | boolean;\n duoLayout?: boolean;\n}) => {\n const { theme } = useTheme();\n const { palette, spacing } = theme;\n const { fit } = layout ?? {};\n const breakpoints = useBreakpoints();\n const { isMinSm, isMinMd, isMinLg } = breakpoints;\n\n const activeFit = findResponsiveItem(breakpoints, fit);\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 {\n default: {\n // @ts-ignore: error after upgrading to ux-configs\n root: {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n ...mapFit(activeFit, true),\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: '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 }, { colorway }, { isMinSm }, { isMinMd }, { isMinLg }],\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 useStylesheet = ({ 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 // @ts-ignore: error when upgrading to @ux/config\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: error after upgrading eslint config. Please replace with relevant comment\n this.props.setHasErrored(true);\n },\n }),\n withProps(useStylesheet),\n )(ErrorBoundary);\n};\n","import React from 'react';\nimport * as r from 'ramda';\n\nexport default (BaseComponent: any) =>\n r.ifElse(\n r.prop('visible'),\n (props) => ,\n (props) => (\n
\n \n
\n ),\n );\n","import React from 'react';\nimport { puree } from '@ux/pure-enhance';\nimport { useIntl } from 'react-intl';\n\nconst hasCascade = props => props.cascade && props.cascade.length > 0;\n\nconst getMessage = (props, intl) => {\n if (hasCascade(props)) {\n const match = props.cascade.find(item => {\n return intl.messages[item.id];\n });\n const found = match || props.cascade.slice(-1)[0];\n const values = Object.assign({}, props.values, found.values);\n return getMessage({ ...found,\n values\n }, intl);\n }\n\n const {\n id,\n values\n } = props;\n return intl.formatMessage({\n id\n }, values);\n};\n\nconst useMessage = props => getMessage(props, useIntl());\n\nconst enhance = puree('Message')();\n\nconst PureMessage = props => /*#__PURE__*/React.createElement(React.Fragment, null, useMessage(props));\n\nvar Message = enhance(PureMessage); // eslint-disable-next-line no-underscore-dangle\n\nexport default Message;\nexport { Message, getMessage, useMessage };\n","import { Flush } from 'domain/constants/ribbons';\nimport { gu2px } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/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*/\nconst getPaddingSize = ({\n shrinkSide,\n isFlush,\n layout,\n isMinSm,\n isMinLg,\n}: {\n shrinkSide: 'shrinkLeading' | 'shrinkTrailing';\n isFlush: boolean;\n layout: Layout;\n isMinSm: boolean;\n isMinLg: boolean;\n}) => {\n const { shrinkLeading, shrinkTrailing } = layout;\n\n const sides = {\n shrinkLeading,\n shrinkTrailing,\n };\n if (isFlush) {\n return 0;\n }\n\n if (sides[shrinkSide] === true) {\n if (isMinSm) {\n return 1;\n }\n return 0.5;\n }\n if (isMinLg) {\n return 6;\n }\n if (isMinSm) {\n return 5;\n }\n return 4;\n};\n\nconst getSizes = ({\n flush,\n layout,\n isMinSm,\n isMinLg,\n}: {\n flush?: Flush | boolean;\n layout: Layout;\n isMinSm: boolean;\n isMinLg: boolean;\n}) => {\n const leading = getPaddingSize({\n shrinkSide: 'shrinkLeading',\n isFlush: flush === Flush.LEADING,\n layout,\n isMinSm,\n isMinLg,\n });\n const trailing = getPaddingSize({\n shrinkSide: 'shrinkTrailing',\n isFlush: flush === Flush.TRAILING,\n layout,\n isMinSm,\n isMinLg,\n });\n return {\n leading,\n trailing,\n };\n};\n\nexport default ({\n spacing,\n isMinSm,\n isMinLg,\n layout = {},\n flush,\n linariaPadding = false,\n}: {\n spacing: number;\n isMinSm: boolean;\n isMinLg: boolean;\n layout?: Layout;\n flush?: Flush | boolean;\n linariaPadding?: boolean;\n}) => {\n if (flush === true) {\n // Component will handle all padding, used on full bleed image ribbons\n return {};\n }\n const { leading, trailing } = getSizes({\n flush,\n layout,\n isMinSm,\n isMinLg,\n });\n\n if (linariaPadding) {\n return { '--centerfold-padding-top': leading, '--centerfold-padding-bottom': trailing };\n }\n return {\n paddingTop: gu2px(leading, spacing),\n paddingBottom: gu2px(trailing, spacing),\n };\n};\n","import { json, jsonRpc, middleware, xray, fetch, bodyOnly } from '@ux/drivers';\nimport { middleware as cradle } from '@ux/cradle';\nimport * as r from 'ramda';\n\nexport default () => r.compose(middleware(), bodyOnly(), cradle(), jsonRpc(), json(), xray())(fetch);\n","export const createRibbonName = (type?: string, name?: string) => ['Ribbon', type, name].filter(Boolean).join(' - ');\n\nexport default null;\n","import { GetProductData } from 'core/cta';\n\nimport middleware from '../drivers/middleware';\n\nconst getProductData: GetProductData = ({ productId, skuId, locale = 'en' }) => {\n return middleware()('0', 'getProduct', {\n productId,\n skuId,\n locale,\n });\n};\n\nexport default getProductData;\n","import invoker from \"./invoker.js\";\n/**\n * The lower case version of a string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category String\n * @sig String -> String\n * @param {String} str The string to lower case.\n * @return {String} The lower case version of `str`.\n * @see R.toUpper\n * @example\n *\n * R.toLower('XYZ'); //=> 'xyz'\n */\n\nvar toLower =\n/*#__PURE__*/\ninvoker(0, 'toLowerCase');\nexport default toLower;","import * as r from 'ramda';\n\n// \"My Promotion\" -> \"my_promotion\"\n// as GA ids have to adhere to certain rules (like no spaces)\n// and we don't get a specific id, just a promotion name\n// we remove spaces and strip any invalid characters (anything that's not a letter, number, or _)\nexport const promoNameToPromoId = r.pipe(r.toLower, r.replace(/ +?/g, '_'), r.replace(/[^a-z0-9_]/gim, ''));\n\nexport default null;\n"],"sourceRoot":""}