{"version":3,"file":"js/5800.js","mappings":"wJAIA,MAAMA,GAAiBC,EAAAA,EAAAA,MACvBC,EAAAA,EAAAA,GAAQ,CAAEC,IAAKC,EAAAA,EAAYJ,kB,8HCK3B,MAAMK,GAAkBC,EAAAA,EAAAA,IAAS,CAADC,SAAA,GAAAC,SAAAA,GAAA,4BAAAC,OAAAA,CAAAC,GAAA,MAAAC,EAAA,KAAAC,QAAAF,GAAA,gBAAAH,SAAAI,MAAAE,EAAAA,EAAAF,EAAA,EAAAG,YAACA,IAAM,6MAA6BC,YAAAA,CAAAL,GAAA,MAAAC,EAAA,KAAAC,QAAAF,GAAA,YAAAH,SAAAI,IAAA,OAAAG,YAAAJ,GAAAM,MAAAT,IAAA,KAAAA,SAAAI,IAAA,EAAAJ,IAAA,EAAAU,WAAAA,CAAAP,GAAA,MAAAQ,EAAA,KAAAN,QAAAF,GAAA,OAAAS,EAAAD,EAAA,EAAAN,OAAAA,GAAA,eAAE,CACpEQ,KAAK,IAGDC,GAAYf,EAAAA,EAAAA,IAAS,CAADC,SAAA,GAAAC,SAAAA,GAAA,8BAAAC,OAAAA,CAAAC,GAAA,MAAAC,EAAA,KAAAC,QAAAF,GAAA,gBAAAH,SAAAI,MAAAE,EAAAA,EAAAF,EAAA,EAAAG,YAACA,IAAM,uCAA+BC,YAAAA,CAAAL,GAAA,MAAAC,EAAA,KAAAC,QAAAF,GAAA,YAAAH,SAAAI,IAAA,OAAAG,YAAAJ,GAAAM,MAAAT,IAAA,KAAAA,SAAAI,IAAA,EAAAJ,IAAA,EAAAU,WAAAA,CAAAP,GAAA,MAAAQ,EAAA,KAAAN,QAAAF,GAAA,OAAAS,EAAAD,EAAA,EAAAN,OAAAA,GAAA,cAAE,CAChEQ,KAAK,IAoBP,IAjBA,UAAa,eAAEpB,IACb,OACEsB,EAAAA,EAAAA,GAAAC,EAAAA,GAAA,CAAcC,MAAKC,EAAAA,GAAeC,UAChCJ,EAAAA,EAAAA,GAACK,EAAAA,EAAkB,CAACC,MAAO5B,EAAe0B,UACxCG,EAAAA,EAAAA,IAACC,EAAAA,GAAM,CAAAJ,SAAA,EACLJ,EAAAA,EAAAA,GAACS,EAAAA,GAAK,CAACC,KAAK,2BAA2BC,SAASX,EAAAA,EAAAA,GAACjB,EAAe,OAChEiB,EAAAA,EAAAA,GAACS,EAAAA,GAAK,CAACC,KAAK,YAAYC,SAASX,EAAAA,EAAAA,GAACY,EAAAA,EAAQ,OAC1CZ,EAAAA,EAAAA,GAACS,EAAAA,GAAK,CACJC,KAAK,sBACLC,SAASX,EAAAA,EAAAA,GAACD,EAAS,CAACc,QAASC,EAAAA,iBAAiBC,4BAM1D,C,gNC/BA,EAD6B,UAC7B,EAD2C,UAC3C,EAD2D,UAC3D,EAD8E,UAC9E,EAD+F,U,WCe/F,MAAMC,EAAiBA,EAAGC,aACxBjB,EAAAA,EAAAA,GAAAkB,EAAAA,GAAA,CACEC,UAAQ,EACRC,GAAIH,EAAOI,KAAO,SAAMC,EACxBD,KAAMJ,EAAOI,KACbE,QAASN,EAAOM,QAChBC,UAAWC,EAAcrB,SAExBa,EAAOS,OAgCZ,MAtBkBC,EAAGC,QAAOC,WAAUZ,aAElCjB,EAAAA,EAAAA,GAAA8B,EAAAA,GAAA,CAAWC,KAAG,EAAA3B,UACZG,EAAAA,EAAAA,IAAA,OAAKiB,UAAWC,EAAiBrB,SAAA,EAC/BJ,EAAAA,EAAAA,GAAA,OACEgC,KAAKC,EAAAA,EAAAA,GACH,mFACAC,EAAAA,IAAYC,gBAEdC,IAAI,iBACJZ,UAAWC,KAEbzB,EAAAA,EAAAA,GAAAqC,EAAAA,GAAA,CAAaC,KAAK,KAAKd,UAAWC,EAAarB,SAC5CwB,MAEAC,IAAY7B,EAAAA,EAAAA,GAAAuC,EAAAA,GAAA,CAAUf,UAAWC,EAAgBrB,SAAEyB,MACnDZ,IAAUjB,EAAAA,EAAAA,GAACgB,EAAc,CAACC,OAAQA,SC5CtC,IAAKH,EAAgB,SAAhBA,GAAgB,OAAhBA,EAAgB,qBAAhBA,EAAgB,gDAAhBA,EAAgB,oDAAhBA,EAAgB,kDAAhBA,EAAgB,kBAAhBA,EAAgB,uCAAhBA,CAAgB,MAoF5B,MAtEkBf,EAAGc,UAAS2B,mBAAkB,MAC9C,MAAMC,GAAaC,EAAAA,EAAAA,MAEnBC,EAAAA,EAAAA,YAAU,MACRC,EAAAA,EAAAA,IAAiB,CACfC,UAAW,wBACXC,WAAYjC,EACZkC,kBAAmBP,GACnB,GACD,CAAC3B,EAAS2B,IAEb,MAAMpD,GAAQ4D,EAAAA,EAAAA,UAAwB,KACpC,OAAQnC,GACN,KAAKC,EAAiBmC,SACpB,MAAO,CACLrB,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,uCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,2BACzCxB,OAAQ,CACNS,MAAMwB,EAAAA,EAAAA,IAAmBT,EAAY,gCACrCpB,KAAM,mBAGZ,KAAKP,EAAiBqC,sBACpB,MAAO,CACLvB,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,uCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,+BAE7C,KAAK3B,EAAiBsC,wBACpB,MAAO,CACLxB,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,iCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,wCACzCxB,OAAQ,CACNS,MAAMwB,EAAAA,EAAAA,IAAmBT,EAAY,oCACrCpB,KAAM,uCAGZ,KAAKP,EAAiBuC,uBACpB,MAAO,CACLzB,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,uCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,+BACzCxB,OAAQ,CACNS,MAAMwB,EAAAA,EAAAA,IAAmBT,EAAY,gCACrCpB,KAAM,mBAGZ,KAAKP,EAAiBC,kBACpB,MAAO,CACLa,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,sCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,4CACzCxB,OAAQ,CACNS,MAAMwB,EAAAA,EAAAA,IAAmBT,EAAY,6CACrCpB,KAAM,mBAGZ,KAAKP,EAAiBwC,QACtB,QACE,MAAO,CACL1B,OAAOsB,EAAAA,EAAAA,IAAmBT,EAAY,uCACtCZ,UAAUqB,EAAAA,EAAAA,IAAmBT,EAAY,2BACzCxB,OAAQ,CACNS,MAAMwB,EAAAA,EAAAA,IAAmBT,EAAY,sBACrClB,QAASA,IAAMgC,OAAOC,SAASC,WAGvC,GACC,CAAC5C,EAAS4B,IAEb,OAAOzC,EAAAA,EAAAA,GAAC2B,EAAS,IAAKvC,GAAS,C,wHC3E1B,MAAMsE,EAAuDC,OAAOC,OAAO,CAChFC,yBAAyB,EACzBC,sBAAsB,EACtBC,0BAA0B,EAC1BC,oBAAoB,EACpBC,oBAAoB,EACpBC,aAAc,KAGHC,EAA6DR,OAAOC,OAAO,CACtFQ,sBAAuBC,EAAAA,GAAaC,SACpCC,qBAAsBC,EAAAA,GAAYC,KAClCC,oBAAqBC,EAAAA,GAAWC,OAChCC,0BAA2BC,EAAAA,GAAgBC,KAC3CC,kCAAmCC,EAAAA,GAAiBC,kBACpDC,yBAA0BC,EAAAA,GAAeC,SACzCC,2BAA4B,KAGjBC,EAA4D5B,OAAOC,OAAO,CACrF4B,yBAA0BV,EAAAA,GAAgBC,KAC1CU,oBAAqBjB,EAAAA,GAAYC,KACjCiB,mBAAoBf,EAAAA,GAAWC,OAC/Be,yBAA0B,WAGfC,EAA0DjC,OAAOC,OAAO,CACnFiC,kBAAmBrB,EAAAA,GAAYC,KAC/BqB,iBAAkBnB,EAAAA,GAAWC,OAC7BmB,uBAAwBjB,EAAAA,GAAgBC,KACxCiB,uBAAwB,SACxBC,gBAAiB,KAGNC,EAA8CvC,OAAOC,OAAO,IACpEF,KACAS,KACAoB,G,yYC5CE,IAAKY,EAAiB,SAAjBA,GAAiB,OAAjBA,EAAiB,YAAjBA,EAAiB,gBAAjBA,CAAiB,MAKjBC,EAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,kBAAlBA,EAAkB,gBAAlBA,CAAkB,MAKlBC,EAAoB,SAApBA,GAAoB,OAApBA,EAAoB,oBAApBA,EAAoB,wBAApBA,CAAoB,MAKpBC,EAAmB,SAAnBA,GAAmB,OAAnBA,EAAmB,YAAnBA,EAAmB,YAAnBA,EAAmB,cAAnBA,CAAmB,MAMnBC,EAAmB,SAAnBA,GAAmB,OAAnBA,EAAmB,YAAnBA,EAAmB,YAAnBA,EAAmB,gBAAnBA,EAAmB,cAAnBA,EAAmB,cAAnBA,CAAmB,MAQnBC,EAA6B,SAA7BA,GAA6B,OAA7BA,EAA6B,0BAA7BA,EAA6B,cAA7BA,EAA6B,cAA7BA,EAA6B,gBAA7BA,CAA6B,MAO7BC,EAAoB,SAApBA,GAAoB,OAApBA,EAAoB,gBAApBA,EAAoB,gBAApBA,EAAoB,gBAApBA,CAAoB,MAMpBC,EAAwB,SAAxBA,GAAwB,OAAxBA,EAAwB,gBAAxBA,EAAwB,oBAAxBA,EAAwB,gBAAxBA,EAAwB,UAAxBA,EAAwB,0BAAxBA,CAAwB,MAaxBC,EAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,cAAlBA,EAAkB,gBAAlBA,EAAkB,cAAlBA,CAAkB,MAMlBC,EAAsB,SAAtBA,GAAsB,OAAtBA,EAAsB,oBAAtBA,EAAsB,kBAAtBA,EAAsB,UAAtBA,EAAsB,gBAAtBA,CAAsB,MAOtBC,EAAU,SAAVA,GAAU,OAAVA,EAAU,aAAVA,EAAU,mBAAVA,CAAU,MAeVC,EAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,oCAAlBA,EAAkB,qBAAlBA,EAAkB,wCAAlBA,EAAkB,yBAAlBA,CAAkB,MAmBlBC,EAAiB,SAAjBA,GAAiB,OAAjBA,EAAiB,oCAAjBA,EAAiB,wCAAjBA,EAAiB,yBAAjBA,CAAiB,MAejBC,EAAa,SAAbA,GAAa,OAAbA,EAAa,qBAAbA,EAAa,2BAAbA,CAAa,MAWbC,EAAqC,SAArCA,GAAqC,OAArCA,EAAqC,cAArCA,EAAqC,oBAArCA,EAAqC,oBAArCA,EAAqC,YAArCA,CAAqC,K,iHC1GjD,IApBiBhE,KACf,MAAMR,GAAayE,EAAAA,EAAAA,YAA4BC,EAAAA,IAS/C,OAPAxE,EAAAA,EAAAA,YAAU,MACRC,EAAAA,EAAAA,IAAiB,CACfC,UAAW,kBACXuE,SAAU,aACV,GACD,KAGD7G,EAAAA,EAAAA,IAAA,OAAK8G,IAAK5F,EAAAA,EAAO6F,gBAAgBlH,SAAA,EAC/BJ,EAAAA,EAAAA,GAAA,OAAKqH,IAAK5F,EAAAA,EAAO8F,oBAAoBnH,UACnCJ,EAAAA,EAAAA,GAAAwH,EAAAA,IAAA,CAAcC,MAAM,yBAEtBzH,EAAAA,EAAAA,GAAA0H,EAAAA,GAAA,CAAAtH,UAAY8C,EAAAA,EAAAA,IAAmBT,EAAY,0BACvC,C,sCCrBV,MAAMhB,EAAS,CACb6F,gBAAiBD,EAAAA,EAAG;;;;;IAMpBE,oBAAqBF,EAAAA,EAAG;;KAK1B,K,6HCwEA,MAAMM,EAAaC,EAAAA,cAAwC,MAE9CvH,EAAqBA,EAChCC,QACAF,eAKA,MAAOyH,EAAMC,IAAWC,EAAAA,EAAAA,UAASzH,GAE3B0H,GAAkBhF,EAAAA,EAAAA,UACtB,IACE6E,EACI,IACKA,EACHI,cAAeA,CAACvH,EAAcJ,KAC5BwH,GAASI,GAEFA,GACLC,IAAKD,EAAUxH,EAAMJ,GACd,IACF4H,IAHiBA,GAKtB,EAEJE,aAAeC,IACbP,GAASI,GAEFA,GACLA,EAASI,IAAID,UAAYA,EAClB,IACFH,IAHiBA,GAKtB,EAEJK,gBAAkBC,IAChBV,GAASI,GAEFA,GACLA,EAASM,aAAeA,EACjB,IACFN,IAHiBA,GAKtB,GAGN,MACN,CAACL,IAGH,OAAO7H,EAAAA,EAAAA,GAAC2H,EAAWc,SAAQ,CAACnI,MAAO0H,EAAgB5H,SAAEA,GAA+B,EAGzEsI,EAAgBA,KAAMxB,EAAAA,EAAAA,YAAWS,E,kFCxI9C,MAAMjF,EAAuBA,KAAMwE,EAAAA,EAAAA,YAA4BC,EAAAA,G,sBCG/D,IAPmBwB,CAACC,EAAyBC,KAC3C,IAAIC,EAAUF,EAAgB,KAAO,GAIrC,OAHIC,IACFC,EAAU,QAELA,CAAO,C,wJCqRT,IA6HKC,EAAiB,SAAjBA,GAAiB,OAAjBA,EAAiB,wBAAjBA,EAAiB,kBAAjBA,EAAiB,kBAAjBA,EAAiB,0BAAjBA,CAAiB,MAoCjBC,EAAe,SAAfA,GAAe,OAAfA,EAAe,iBAAfA,EAAe,mBAAfA,CAAe,MAKfC,EAAiB,SAAjBA,GAAiB,OAAjBA,EAAiB,+BAAjBA,EAAiB,YAAjBA,CAAiB,MA4HjBC,EAAmB,SAAnBA,GAAmB,OAAnBA,EAAAA,EAAmB,sCAAnBA,EAAAA,EAAmB,yCAAnBA,EAAAA,EAAmB,0CAAnBA,EAAAA,EAAmB,yCAAnBA,CAAmB,MAgBnBC,EAAU,SAAVA,GAAU,OAAVA,EAAU,uBAAVA,EAAU,uBAAVA,EAAU,2BAAVA,EAAU,4CAAVA,EAAU,8CAAVA,CAAU,K,wHC1kBtB,IAAIC,EAEJ,MAIaC,EAAeA,IACtBD,IAIJA,GAASE,EAAAA,EAAAA,QAAO,CACdC,IAAK,eACLC,OAAQ,GACRC,cAAe,IACfC,SAAU,SAGZN,EAAOO,gBAAe,WAGpB,MAAO,CACLC,aApB2BrG,QAAQC,UAAUqG,UAAY,GAsB7D,IAEOT,GAGHU,EAAoBC,IACxB,IAAKA,EACH,MAAO,GAGT,IAAIC,EAAgB,GACpB,IACEA,EAAmC,iBAAZD,EAAuBE,KAAKC,UAAUH,GAAWA,CAC1E,CAAE,MACAI,QAAQC,MAAM,wDAChB,CAEA,OAAOJ,CAAa,EAGTK,EAAgBA,CAACC,EAAeP,KAC3CV,IAAekB,KAAKD,EAAO,CAAEP,QAASD,EAAiBC,IAAW,EAGvDS,EAAiBA,CAACF,EAAeP,KAC5CV,IAAee,MAAME,EAAO,CAAEP,QAASD,EAAiBC,IAAW,EAGxDU,EAAgBA,CAACH,EAAeP,KAC3CV,IAAeqB,KAAKJ,EAAO,CAAEP,QAASD,EAAiBC,IAAW,C,wJC1C7D,MAUMY,EAAsBC,GAC5BA,EAGEA,EAASC,MAAM,KAFb,GASEC,EAA4CA,CACvDC,EACAC,KAEA,MAAMC,EAzByBD,IAC3BA,IAAcjC,EAAAA,GAAkBmC,SAAWF,IAAcjC,EAAAA,GAAkBoC,YACtE,sCAELH,IAAcjC,EAAAA,GAAkBqC,QAC3B,kCAEF,0BAkBUC,CAAiBL,GAElC,OAAOC,EADWK,EAAAA,EAAOC,KAAKR,EACH,EAkChBS,EAA+BA,CAC1CC,EACAC,IAEOD,EAAgBE,QAAQ,UAAW,IAAID,KAgBnCE,GAZVzC,EAAAA,GAAW0C,WACX1C,EAAAA,GAAW2C,WACX3C,EAAAA,GAAW4C,aACX5C,EAAAA,GAAW6C,wBACX7C,EAAAA,GAAW8C,yBAQeL,CAC3BM,EACAC,KAEA,MAAMC,EAAuBzB,EAAmBuB,GAAiB,IAC3DG,EACJF,GAAkBG,QAAQC,GAAoBA,EAAgBC,UAAW,GAC3E,OAAOC,OAAOL,EAAqBM,OAASL,EAA2BK,OAAO,E,+JC5EzE,MAAMxJ,EAAqBA,CAChCT,EACA7C,EACA+M,EAAkC,CAAC,IAE9B/M,EAIoB,IAAIgN,EAAAA,EAAcnK,EAAY,CACrD7C,OAEsB+M,OAAOA,GANtB,GAgFEE,EAAoBA,CAC/BpK,EACAqK,KAEA,IAAKA,EACH,MAAO,CACLC,OAAQ,IACRC,aAAc,MACdC,iBAAkB,GAItB,MAAMC,EAAoB,IAAIC,EAAAA,EAAe1K,EAAY,CACvDqK,WACAM,MAAO,kBAEHH,EAAmBC,EAAkBG,kBAAkBC,sBACvDC,EAAaL,EAAkBM,cAAc,GAC7CT,EAASQ,EAAWE,MAAMC,GAAuB,mBAAdA,EAAKC,QAA4BrN,MACpE0M,EAAeO,EAAWE,MAAMC,GAAuB,iBAAdA,EAAKC,QAA0BrN,MAE9E,MAAO,CACLyM,OAAQA,GAAU,GAClBC,aAAcA,GAAgBF,EAC9BG,mBACD,EAGUW,EAAiBA,CAC5BnL,EACAuK,EACAa,EACAC,GAA8B,EAC9BC,GAA4B,KAE5B,GAAIf,GAAkC,MAAlBa,EAAwB,CAC1C,MAAMG,EAAkBD,EACpB,CAAEjB,SAAUE,EAAcI,MAAO,iBACjC,CAAEN,SAAUE,GACVE,EAAoB,IAAIC,EAAAA,EAAe1K,EAAYuL,GAEzD,GAAIF,EACF,OAAOZ,EAAkBP,OAAOsB,OAAOJ,IAEzC,MAAM,sBAAEK,EAAqB,sBAAEZ,GAA0BJ,EAAkBG,kBAQ3E,MAAO,GANiB,IAAIc,EAAAA,EAAa1L,EAAY,CACnDyL,wBACAZ,0BAE8CX,OAAOsB,OAAOJ,OAEzBb,GACvC,CACA,OAAO,IAAI,C,mFC5Jb,MAAM9K,EAAa,CAAC,EAOpB,SAASkM,EAAKvG,GACZ,GAAKA,EAIL,IACE,MAAMwG,EAAoBpE,KAAKqE,MAAMzG,EAAK0G,sBAAwB,MAC5DC,EAAmBvE,KAAKqE,MAAMzG,EAAK4G,uBAAyB,MAClE9K,OAAO+K,OAAOxM,EAAY,IAAK2F,KAASwG,KAAsBG,IAEvBtM,GAAYO,YACjDkM,EAAAA,GAAWC,KAAK1M,EAAWO,WAE/B,CAAE,MAAOoM,IACPrE,EAAAA,EAAAA,IAAe,gBAAiBqE,EAAIC,WACtC,CACF,CAMA,M,+VCRA,MAAMC,EAA0B,CAC9B9H,EAAAA,GAAsC+H,MACtC/H,EAAAA,GAAsCgI,UAG3BC,EAA4BC,IACtCA,GAAiB,IAAIC,QAAO,CAACC,EAAKC,KACjCD,EAAIC,EAAKC,MAAQD,EAAKhP,MACf+O,IACN,CAAC,GAwCOG,EAAeA,CAC1BC,EACAC,EACApC,EAAgC,IARDqC,EAACC,EAAmBtC,EAAgC,KACnF,MAAMuC,EAAcC,KAAKC,IAAI,EAAGzC,GAChC,OAAQ,GAAGwC,KAAKE,MAAM/B,OAAO,GAAG2B,KAAaC,UAAoBA,GAAa,EASvEF,CADYF,EAAWC,EAAW,IACLpC,GAiDzB2C,EACXC,IAEA,MAAMC,EAAyBxM,OAAOyM,OAAOnJ,EAAAA,IAAuCqF,QACjF+D,IAAYH,EAAsBI,SAASD,KAGxCE,EAAwBxB,EAAwBzC,QAAQ+D,GAC5DH,EAAsBI,SAASD,KAOjC,MAJkB,CAChBG,cAAeD,EAAsB7D,OAAS,EAAI6D,EAAsBE,KAAK,KAAO,GACpFC,eAAgBP,EAAuBzD,OAAS,EAAIyD,EAAuBM,KAAK,KAAO,GAEzE,EA+BLE,EAAsCA,CACjDC,EACAC,EACA7D,EACA8D,EAKAC,EAGAC,KAEA,MAAMC,EACJH,EAAQI,oBAAsBxN,EAAAA,GAAmCI,qBAC7DqN,EACJL,EAAQM,uBAAyB1N,EAAAA,GAAmCG,wBAChEwN,EACJP,EAAQQ,uBAAyB5N,EAAAA,GAAmCK,yBAEhEwN,EAAW,CACf,CAACtK,EAAAA,GAAsC+H,OAAQiC,EAC/C,CAAChK,EAAAA,GAAsCgI,UAAWkC,EAClD,CAAClK,EAAAA,GAAsCuK,UAAWH,EAClD,CAACpK,EAAAA,GAAsCwK,OAAO,GAmBhD,OAjBuB9N,OAAOyM,OAAOnJ,EAAAA,IAAuCmI,QAC1E,CAACC,EAAKqC,IArGuBC,EAC/BC,EACAC,EACA/E,EACAgF,EACAf,EACAC,KAEA,GAAIY,IAAkB3K,EAAAA,GAAsCuK,WAAaT,EAAMgB,eAC7E,OAAO,EAET,GACEH,IAAkB3K,EAAAA,GAAsC+H,OACxDgC,IACCc,GAAcE,cAAcC,oBAE7B,OAAO,EAET,MAAMC,EAAsBJ,IAAeF,GACrCO,IAAyBD,GAAqBE,QAC9CC,EAvCwBC,EAC9BV,EACAC,EACA/E,EACAyF,KAEA,MAAML,EAAsBK,IAASX,GACrC,GAAIM,EAAqB,CACvB,MAAMM,GACHN,EAAoBO,oBACpBZ,GAAWK,EAAoBO,mBAAmBnC,SAASuB,GACxDa,GACHR,EAAoBS,qBACrBT,EAAoBS,oBAAoBrC,SAASxD,GACnD,OAAO0F,GAAsBE,CAC/B,CACA,OAAO,CAAI,EAuBYJ,CAAiBV,EAAeC,EAAS/E,EAAUgF,GAC1E,SAAKK,IAAyBE,EAGnB,EA8EiBV,CACtBD,EACAd,EACA5D,EACA6D,EACAE,EACAC,IAEqBO,EAASG,GACvBrC,EAAIuD,OAAOlB,GAEbrC,GAET,GAEmB,EAsEVwD,EAAmBC,IACtBC,EAAAA,GAA0BD,IAAWA,GAAU,SAASnH,QAAQ,IAAK,KAqDlEqH,EAAkBA,CAC7BvQ,EACAnC,EACA0M,EACAc,GAA8B,IAE1BxN,IAAU2I,EAAAA,EAAkBgK,eACvB/P,EAAAA,EAAAA,IAAmBT,EAAY,+BAGpCnC,IAAU2I,EAAAA,EAAkBiK,MACvBhQ,EAAAA,EAAAA,IAAmBT,EAAY,8BAGjCmL,EAAAA,EAAAA,IAAenL,EAAYuK,EAAc1M,EAAOwN,GAyH5CqF,EAAuBC,GACQ,UAA1CA,EAAgBC,sBAkBLC,EAAcA,IAClB/P,OAAOgQ,YAHuB,G,0QChavC,MAAMC,EAAY,CAChBC,QAASC,EAAAA,GACTC,UAAWC,EAAAA,GACXC,KAAMC,EAAAA,GACNC,UAAWC,EAAAA,IAGAC,EAAgBA,CAAC7M,EAA8BvE,EAAmByH,KAC7E,MAAM4J,EAAOC,EAAAA,GAAc/M,GAAY,IACvC,OAAIkD,EACK,IACFkJ,EACHU,OACAE,WAAYvR,EACZwR,EAAG/J,EACHgK,WAAYhK,GAGT,IACFkJ,EACHU,OACAjT,OAAQ4B,EACT,EAQU0R,EAAsBA,CACjCC,EACAC,EACAC,EACA9L,EACA+L,EACA9L,KAEA,MAAM+L,EAAmBD,GAAyBC,iBAC5CC,EAAoBF,GAAyBE,kBAC7CC,GAA0B5F,EAAAA,EAAAA,IAAyBsF,EAAcO,gBACjE3B,GAAkB4B,EAAAA,EAAAA,IACtBJ,EACAE,EACAD,GAEII,EAAiBT,EAAc5U,IAEnCsV,SAAUC,EACVC,MAAOC,EACP5N,MAAO6N,KACJC,GACDnC,EACEtK,GAAUH,EAAAA,EAAAA,GAAWC,EAAeC,GACpCqD,EAAgBkH,GAAiBoC,eAEjCC,EAAwBjB,EAAckB,iBAAiB,IAAIC,kBAGjE,MAAO,IACFJ,EACHK,aAAcP,EACdQ,aAAcP,EACdQ,YAAaX,EACbY,iBAAkBd,EAClBe,YAAavB,EACbwB,UAAWvB,EACX5L,UACAoN,aAXiBtK,EAAAA,EAAAA,IAAcM,EAAeuJ,GAY9CU,iBAXqBC,EAAAA,EAAAA,IAAkB5B,EAAckB,gBAAgB,GAYtE,EAuLU9S,EAAmBA,CAC9ByT,EACAC,EACAC,KAEA,GAAIhT,OAAOiT,QAAQC,WAAWC,SAAU,CACtC,MAAM,UAAE7T,EAAS,SAAEuE,KAAamO,GAAec,EACzCxO,EAAO,IACRoM,EAAc7M,EAAUvE,EAAW,SACnC0S,GAEDgB,EAEFhT,OAAOiT,OAAOC,UAAUC,SAAS9T,iBAAiB,CAAEC,aAAa,IAAKgF,KAASyO,IAE/E/S,OAAOiT,OAAOC,UAAUC,SAAS9T,iBAAiB,CAAEiF,QAAQyO,EAEhE,GAGWK,EAAeN,IAC1B,GAAI9S,OAAOiT,QAAQC,WAAWC,SAAU,CACtC,MAAM,UAAE7T,EAAS,SAAEuE,KAAamO,GAAec,EACzCxO,EAAO,IACRoM,EAAc7M,EAAUvE,EAAW,SACnC0S,GAGLhS,OAAOiT,OAAOC,UAAUC,SAASC,YAAY,CAAE9O,QACjD,GAGW+O,EAAkBP,IAC7B,GAAI9S,OAAOiT,QAAQC,WAAWC,SAAU,CACtC,MAAM,UAAE7T,EAAS,SAAEuE,KAAamO,GAAec,EACzCxO,EAAO,IACRoM,EAAc7M,EAAUvE,EAAW,SACnC0S,GAGLhS,OAAOiT,OAAOC,UAAUC,SAASG,YAAY,CAAEhP,QACjD,GAoBWiP,EAAmBA,CAACT,EAAoBU,KACnD,GAAIxT,OAAOiT,QAAQC,UAAW,CAC5B,MAAM,SAAErP,EAAQ,UAAEvE,EAAS,MAAEyH,KAAUiL,GAAec,EAChDxO,EAAO,IACRoM,EAAc7M,EAAUvE,EAAWyH,MACnCiL,GAELhS,OAAOiT,OAAOC,UAAUK,iBAAiBjP,EAAMkP,EACjD,GAGWC,EAAiBA,CAACX,EAAqBU,KAClD,GAAIxT,OAAOiT,QAAQC,UAAW,CAC5B,IAAI5O,EACJ,GAAIwO,EAAU,CACZ,MAAM,SAAEjP,EAAQ,UAAEvE,EAAS,MAAEyH,KAAUiL,GAAec,EACtDxO,EAAO,IACFoM,EAAc7M,EAAUvE,EAAWyH,MACnCiL,EAEP,CACAhS,OAAOiT,OAAOC,UAAUO,eAAenP,EAAMkP,EAC/C,E,yDC/ZF,MAQaX,EAAoBA,CAC/Ba,EACAC,KAEA,MAAMC,EAAiB,CAAC,EAsBxB,OArBAF,GAAeG,SAAQ,CAACC,EAAQC,KAC9B,MAAMjY,EAAM,WAAWiY,EAAQ,IAEzBC,EAAoBL,EAAW,iBAAmB,oBAClDM,EAAcH,EAFGH,EAAW,cAAgB,QAG5CO,EAAcJ,EAAOE,IAAoB7K,QAAU,EACnDgL,EACM,IAAVJ,EACI,CACEK,UACEN,EAAOE,IAAoBK,MAAMC,KAAqBA,EAAerL,WAAW,EAClFsL,UACET,EAAOE,IAAoBK,MAAMC,KAAqBA,EAAeE,UAAU,GAEnF,CAAC,EACPZ,EAAe9X,GAAO,CACpB2Y,aAAcR,EACdS,aAAcR,KACXC,EACJ,IAEIP,CAAc,C,wDCrChB,MAAMe,E,SAAe3F,GAAAA,C","sources":["webpack://nocodenodeweb/./src/client/bootstraps/bootstrapPayment.ts","webpack://nocodenodeweb/./src/client/components/App/index.tsx","webpack://nocodenodeweb/./src/client/components/ErrorPage/styles.css.ts","webpack://nocodenodeweb/./src/client/components/ErrorPage/ErrorView.tsx","webpack://nocodenodeweb/./src/client/components/ErrorPage/index.tsx","webpack://nocodenodeweb/./src/client/components/Settings/getInitialMerchantSettings.ts","webpack://nocodenodeweb/./src/client/components/buttons/types.ts","webpack://nocodenodeweb/./src/client/components/notfound/index.tsx","webpack://nocodenodeweb/./src/client/components/notfound/styles.ts","webpack://nocodenodeweb/./src/client/contexts/AppContext.tsx","webpack://nocodenodeweb/./src/client/contexts/WorldReadyContext.tsx","webpack://nocodenodeweb/./src/client/helpers/getVersion.ts","webpack://nocodenodeweb/./src/client/typings/Common.ts","webpack://nocodenodeweb/./src/client/utils/beaverLogger.ts","webpack://nocodenodeweb/./src/client/utils/image.ts","webpack://nocodenodeweb/./src/client/utils/localeHelper.ts","webpack://nocodenodeweb/./src/client/utils/server-data.ts","webpack://nocodenodeweb/./src/client/utils/utils.ts","webpack://nocodenodeweb/./src/common/analytics.ts","webpack://nocodenodeweb/./src/common/variants.ts","webpack://nocodenodeweb/./src/client/lib/constants.js"],"sourcesContent":["import React from 'react';\nimport PaymentApp from '@components/App';\nimport { initializeAppData, hydrate } from './bootstrap';\n\nconst initialAppData = initializeAppData();\nhydrate({ App: PaymentApp, initialAppData });\n","import React from 'react';\nimport { Routes, Route } from 'react-router-dom';\nimport { ThemeWrapper, PAYPAL_THEME } from '@paypalcorp/pp-react';\nimport loadable from '@loadable/component';\nimport { AppContextProvider } from '@client/contexts/AppContext';\nimport Notfound from '@components/notfound';\nimport { ErrorPageVariant } from '@components/ErrorPage';\nimport '@client/lib/datadog';\n\n// TODO: remove this after pp-react upgrade complete\nconst LoadablePayment = loadable(() => import('@components/payment'), {\n ssr: false\n});\n\nconst ErrorPage = loadable(() => import('@components/ErrorPage'), {\n ssr: false\n});\n\nfunction App({ initialAppData }) {\n return (\n \n \n \n } />\n } />\n }\n />\n \n \n \n );\n}\n\nexport default App;\n","import \"src/client/components/ErrorPage/styles.css.ts.vanilla.css!=!../../../../node_modules/@vanilla-extract/webpack-plugin/virtualFileLoader/dist/vanilla-extract-webpack-plugin-virtualFileLoader.cjs.js?{\\\"fileName\\\":\\\"src/client/components/ErrorPage/styles.css.ts.vanilla.css\\\",\\\"source\\\":\\\"LmQ2dTI3YzAgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGdhcDogMS41cmVtOwogIGhlaWdodDogY2FsYygxMDB2aCAtIDIyLjE4NzVyZW0pOwp9Ci5kNnUyN2MxIHsKICB3aWR0aDogNnJlbTsKfQouZDZ1MjdjMiB7CiAgbWFyZ2luLXRvcDogMDsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci5kNnUyN2MzIHsKICBtYXgtd2lkdGg6IDMxcmVtOwp9Ci5kNnUyN2M0IHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0=\\\"}!../../../../node_modules/@vanilla-extract/webpack-plugin/extracted.js\"\nvar __default__ = {container:'d6u27c0',img:'d6u27c1',title:'d6u27c2',subtitle:'d6u27c3',button:'d6u27c4'};\nexport default __default__;","import { BodyText, Button, Container, HeadingText } from '@paypalcorp/pp-react';\nimport React from 'react';\nimport { replaceGeoUrl } from '@common/replaceGeoUrl';\nimport serverData from '@client/utils/server-data';\nimport styles from './styles.css';\n\ninterface ErrorViewAction {\n text: string;\n href?: string;\n onClick?: React.MouseEventHandler;\n}\n\n/**\n * If the action has an href, it renders the Button as an \n * instead of a \n);\n\nexport interface ErrorViewProps {\n title: string;\n subtitle?: string;\n action?: ErrorViewAction;\n}\n\nconst ErrorView = ({ title, subtitle, action }: ErrorViewProps) => {\n return (\n \n
\n \n \n {title}\n \n {!!subtitle && {subtitle}}\n {!!action && }\n
\n
\n );\n};\n\nexport default ErrorView;\n","import { useWorldReadyContext } from '@client/contexts/WorldReadyContext';\nimport { getLocalizedString } from '@client/utils/localeHelper';\nimport { recordImpression } from '@common/analytics';\nimport React, { useEffect, useMemo } from 'react';\nimport ErrorView, { ErrorViewProps } from './ErrorView';\n\nexport enum ErrorPageVariant {\n NotFound = 'not_found',\n DuplicateButtonFailed = 'duplicate_button_failed',\n BusinessAccountRequired = 'business_account_required',\n SecondaryUserPrivilege = 'secondary_user_privilege',\n Unknown = 'unknown',\n AccountRestricted = 'account_restricted'\n}\n\ninterface ErrorPageProps {\n variant: ErrorPageVariant;\n isErrorBoundary?: boolean;\n}\n\nconst ErrorPage = ({ variant, isErrorBoundary = false }: ErrorPageProps) => {\n const worldReady = useWorldReadyContext();\n\n useEffect(() => {\n recordImpression({\n eventName: 'ncps_error_page_shown',\n error_type: variant,\n is_error_boundary: isErrorBoundary\n });\n }, [variant, isErrorBoundary]);\n\n const props = useMemo(() => {\n switch (variant) {\n case ErrorPageVariant.NotFound:\n return {\n title: getLocalizedString(worldReady, 'error.text.somethingWentWrong.title'),\n subtitle: getLocalizedString(worldReady, 'error.text.pageNotFound'),\n action: {\n text: getLocalizedString(worldReady, 'error.text.returnToDashboard'),\n href: '/mep/dashboard'\n }\n };\n case ErrorPageVariant.DuplicateButtonFailed:\n return {\n title: getLocalizedString(worldReady, 'error.text.somethingWentWrong.title'),\n subtitle: getLocalizedString(worldReady, 'error.text.duplicateButton')\n };\n case ErrorPageVariant.BusinessAccountRequired:\n return {\n title: getLocalizedString(worldReady, 'error.text.accountCheckFailed'),\n subtitle: getLocalizedString(worldReady, 'error.text.businessAccountSetupGuide'),\n action: {\n text: getLocalizedString(worldReady, 'error.text.createBusinessAccount'),\n href: '/myaccount/bundle/business/upgrade'\n }\n };\n case ErrorPageVariant.SecondaryUserPrivilege:\n return {\n title: getLocalizedString(worldReady, 'error.text.somethingWentWrong.title'),\n subtitle: getLocalizedString(worldReady, 'error.text.unauthorizedUser'),\n action: {\n text: getLocalizedString(worldReady, 'error.text.returnToDashboard'),\n href: '/mep/dashboard'\n }\n };\n case ErrorPageVariant.AccountRestricted:\n return {\n title: getLocalizedString(worldReady, 'error.text.accountRestricted.title'),\n subtitle: getLocalizedString(worldReady, 'error.text.accountRestricted.description'),\n action: {\n text: getLocalizedString(worldReady, 'error.text.accountRestricted.returnToHome'),\n href: '/mep/dashboard'\n }\n };\n case ErrorPageVariant.Unknown:\n default:\n return {\n title: getLocalizedString(worldReady, 'error.text.somethingWentWrong.title'),\n subtitle: getLocalizedString(worldReady, 'error.text.loadingIssue'),\n action: {\n text: getLocalizedString(worldReady, 'error.text.refresh'),\n onClick: () => window.location.reload()\n }\n };\n }\n }, [variant, worldReady]);\n\n return ;\n};\n\nexport default ErrorPage;\n","import type { WorldReadyProps } from '@client/utils/localeHelper';\nimport { MerchantSettings } from '@client/typings/Common';\n\nimport {\n ButtonLayout,\n ButtonShape,\n ButtonSize,\n ButtonColorType,\n SecondButtonType,\n ButtonTextType\n} from '@components/Settings/types';\n\nexport const DEFAULT_MERCHANT_CHECKOUT_SETTINGS: MerchantSettings = Object.freeze({\n payment_method_paylater: true,\n payment_method_venmo: true,\n payment_method_apple_pay: true,\n show_business_name: false,\n show_business_logo: false,\n homepage_url: ''\n});\n\nexport const DEFAULT_MERCHANT_STACKED_BUTTON_SETTINGS: MerchantSettings = Object.freeze({\n stacked_button_layout: ButtonLayout.Vertical,\n stacked_button_shape: ButtonShape.Rect,\n stacked_button_size: ButtonSize.Medium,\n stacked_button_color_type: ButtonColorType.Gold,\n stacked_button_second_button_type: SecondButtonType.PayPalRecommended,\n stacked_button_text_type: ButtonTextType.Checkout,\n stacked_button_custom_text: ''\n});\n\nexport const DEFAULT_MERCHANT_SINGLE_BUTTON_SETTINGS: MerchantSettings = Object.freeze({\n single_button_color_type: ButtonColorType.Gold,\n single_button_shape: ButtonShape.Rect,\n single_button_size: ButtonSize.Medium,\n single_button_color_code: 'FFD140'\n});\n\nexport const DEFAULT_MERCHANT_CART_BUTTON_SETTINGS: MerchantSettings = Object.freeze({\n cart_button_shape: ButtonShape.Rect,\n cart_button_size: ButtonSize.Medium,\n cart_button_color_type: ButtonColorType.Gold,\n cart_button_color_code: 'FFD140',\n auto_return_url: ''\n});\n\nexport const DEFAULT_MERCHANT_SETTINGS: MerchantSettings = Object.freeze({\n ...DEFAULT_MERCHANT_CHECKOUT_SETTINGS,\n ...DEFAULT_MERCHANT_STACKED_BUTTON_SETTINGS,\n ...DEFAULT_MERCHANT_SINGLE_BUTTON_SETTINGS\n});\n\nconst getInitialMerchantSettings = (\n worldReady: WorldReadyProps,\n merchantSettings: MerchantSettings | undefined,\n isSettingsEnabled?: boolean,\n isCartButtonSettingEnabled?: boolean\n): MerchantSettings => {\n const defaultMerchantSettings: MerchantSettings = {\n ...(isSettingsEnabled ? DEFAULT_MERCHANT_SETTINGS : {}),\n ...(isCartButtonSettingEnabled ? DEFAULT_MERCHANT_CART_BUTTON_SETTINGS : {})\n };\n\n if (merchantSettings) {\n return {\n ...defaultMerchantSettings,\n ...merchantSettings\n };\n }\n\n return defaultMerchantSettings;\n};\n\nexport default getInitialMerchantSettings;\n","import { ButtonType } from '@client/utils/constants';\nimport { PayPalPaymentOption } from '@client/typings/payment';\nimport { ButtonConfigExtensionFromSettings } from '@client/components/Settings/utils';\nimport { DynamicImageWithStatus } from '@client/typings/Common';\n\nexport enum PaymentButtonType {\n Link = 'LINK',\n Button = 'BUTTON'\n}\n\nexport enum CheckoutButtonType {\n Stacked = 'stacked',\n Single = 'single'\n}\n\nexport enum CheckoutButtonLayout {\n Vertical = 'vertical',\n Horizontal = 'horizontal'\n}\n\nexport enum CheckoutButtonShape {\n Rect = 'rect',\n Pill = 'pill',\n Sharp = 'sharp'\n}\n\nexport enum CheckoutButtonColor {\n Gold = 'gold',\n Blue = 'blue',\n Silver = 'silver',\n White = 'white',\n Black = 'black'\n}\n\nexport enum CheckoutSingleButtonColorType {\n Recommended = 'recommended',\n White = 'white',\n Black = 'black',\n Custom = 'custom'\n}\n\nexport enum SingleButtonTextType {\n Buynow = 'buynow',\n Paynow = 'paynow',\n Custom = 'custom'\n}\n\nexport enum CheckoutPaypalButtonText {\n Paypal = 'paypal',\n Checkout = 'checkout',\n Buynow = 'buynow',\n Pay = 'pay',\n Installment = 'installment'\n}\n\nexport enum CheckoutButtonTagline {\n True = 'true',\n False = 'false'\n}\n\nexport enum CheckoutButtonSize {\n Large = 'large',\n Medium = 'medium',\n Small = 'small'\n}\n\nexport enum CheckoutButtonTextType {\n Checkout = 'checkout',\n Proceed = 'proceed',\n Pay = 'pay',\n Custom = 'custom'\n}\n\nexport enum NoShipping {\n /**\n * Prompt for an address, but do not require one\n */\n // PromptOptional = '0',\n /**\n * Do not prompt for an address\n */\n NoPrompt = '1',\n /**\n * Prompt for an address and require one\n */\n PromptRequired = '2'\n}\n\nexport enum ShippingPreference {\n /**\n * Shipping from profile\n */\n FromProfile = 'shipping_from_profile',\n /**\n * Free shipping\n */\n Free = 'free_shipping',\n /**\n * Shipping not applicable\n */\n NotApplicable = 'shipping_not_applicable',\n /**\n * Custom shipping\n */\n Custom = 'custom_shipping'\n}\n\nexport enum TaxRatePreference {\n /**\n * Tax rate from profile\n */\n FromProfile = 'tax_rate_from_profile',\n /**\n * Tax rate not applicable\n */\n NotApplicable = 'tax_rate_not_applicable',\n /**\n * Custom tax rate\n */\n Custom = 'custom_tax_rate'\n}\n\nexport enum ReturnUrlType {\n /**\n * No return url\n */\n None = 'no_return_url',\n /**\n * Custom return url\n */\n Custom = 'custom_return_url'\n}\n\nexport enum CheckoutPaymentOptionsOtherThanPayPal {\n Venmo = 'venmo',\n PayLater = 'paylater',\n ApplePay = 'applepay',\n Card = 'card'\n}\n\nexport type CheckoutPaymentOptions = PayPalPaymentOption | CheckoutPaymentOptionsOtherThanPayPal;\n\n/**\n * Key values that are specific to client side and will not send to server\n */\ntype ClientConfig = {};\n\n/**\n * Key values that we want to pass to the server from the client\n */\ntype OverrideFlagsConfig = {\n /**\n * [DTNCPS-1141][TEMP] Adding in to handle overriding the 3-buttons elmo for our functional tests\n */\n is3ButtonsEligible?: boolean;\n};\n\nexport type CheckoutButtonStackedConfig = {\n /**\n * Checkout button layout\n */\n layout?: `${CheckoutButtonLayout}`;\n /**\n * Checkout button shape\n */\n shape?: `${CheckoutButtonShape}`;\n /**\n * Checkout button color\n */\n color?: `${CheckoutButtonColor}`;\n /**\n * Paypal checkout button text\n */\n paypalButtonText?: `${CheckoutPaypalButtonText}`;\n /**\n * Checkout button tagline\n * @deprecated\n * No longer being used in phase 2\n */\n tagline: `${CheckoutButtonTagline}`;\n /**\n * Checkout button text type\n */\n checkoutButtonTextType?: `${CheckoutButtonTextType}`;\n /**\n * Checkout button custom text\n */\n checkoutButtonCustomText?: string;\n /**\n * Checkout button size\n */\n size?: `${CheckoutButtonSize}`;\n};\n\nexport type CheckoutButtonSingleConfig = {\n /**\n * Checkout single button color type\n */\n singleButtonColorType?: `${CheckoutSingleButtonColorType}`;\n /**\n * Checkout single button color type in hex\n * E.g: \"FFD140\"\n */\n singleButtonColor?: string;\n /**\n * Checkout button text type\n */\n singleButtonTextType?: `${SingleButtonTextType}`;\n /**\n * Checkout button custom text\n */\n singleButtonCustomText: string;\n /**\n * Checkout single button color type\n */\n singleButtonSize?: `${CheckoutButtonSize}`;\n};\n\ntype CheckoutButtonConfig = CheckoutButtonStackedConfig &\n CheckoutButtonSingleConfig & {\n /**\n * Checkout button type\n */\n checkoutButtonType: `${CheckoutButtonType}`;\n\n /**\n * Enable button label customization\n */\n enableButtonLabels?: boolean;\n };\n\ntype ThankYouConfig = {\n /**\n * Return url type\n */\n returnUrlType: `${ReturnUrlType}`;\n /**\n * Custom return url\n */\n customReturnUrl: string;\n /**\n * Whether or not custom return url is enabled\n */\n enableCustomReturnUrl: boolean;\n};\n\nexport type VariantOption = {\n images?: DynamicImageWithStatus[];\n optionName: string;\n price?: string;\n};\n\nexport type Variant = {\n variantName: string;\n variantOptions: Array;\n};\n\nexport type VariantsConfig = {\n isEnableVariants: boolean;\n isEnablePricePerVariant: boolean;\n variants: Array;\n};\n\nexport type TransformedVariantOption = {\n images?: string;\n optionName: string;\n price?: string;\n};\n\nexport type TransformedVariant = {\n variantName: string;\n variantOptions: Array;\n};\n\nexport type ButtonConfigBase = ThankYouConfig & {\n /**\n * Button type\n */\n buttonType: `${ButtonType}`;\n /**\n * Product name\n */\n itemName: string;\n /**\n * Product description\n */\n productDescription: string;\n /**\n * Currency code\n * e.g: USD\n */\n currencyCode: string;\n /**\n * Shipping options toggle - optional\n */\n enableShipping?: boolean;\n /**\n * Custom shipping rate\n */\n shipping: string;\n /**\n * Shipping preference - optional\n */\n shippingPreference?: `${ShippingPreference}`;\n /**\n * Tax options toggle - optional\n */\n enableTax?: boolean;\n /**\n * Custom tax rate\n */\n taxRate: string;\n /**\n * Tax rate preference - optional\n */\n taxRatePreference?: `${TaxRatePreference}`;\n /**\n * Whether to not collect shipping address\n */\n isNotCollectShippingAddress: boolean;\n /**\n * Product id to show in order details. Does not show to buyer\n */\n productId: string;\n /**\n * Whether or not product id is enabled for collection\n */\n enableProductId?: boolean;\n /**\n * Memo notes for the buyers\n */\n memoLabel: string;\n /**\n * Determines whether or not customer memo is mandatory for the buyer\n */\n mandateCustomerMemo: boolean;\n /**\n * Signifies whether or not customer memo should be collected\n */\n enableCustomerMemo?: boolean;\n /**\n * Product dynamic images\n */\n productImagesWithStatus?: DynamicImageWithStatus[];\n /**\n * Whether or not product images toggle is enabled\n */\n enableProductImagesToggle?: boolean;\n} & VariantsConfig;\n\ntype QuantityConfig = {\n quantityOption: string;\n isEnableQuantityOption: boolean;\n};\n\nexport type BuyNowButtonConfig = CheckoutButtonConfig & {\n /**\n * Preference type to guide the merchant through button creation experience\n */\n paymentButtonType: `${PaymentButtonType}`;\n};\n\nexport type FixedButtonConfig = QuantityConfig & {\n amount: string;\n};\n\nexport type VariableButtonConfig = {\n invoiceLabel: string;\n /**\n * Determines whether or not invoice id is mandatory for the buyer\n */\n mandateInvoiceId: boolean;\n /**\n * Enable whether or not invoice id is collected\n */\n enableInvoiceId?: boolean;\n amountLabel: string;\n};\n\nexport type ButtonConfig = ClientConfig &\n OverrideFlagsConfig &\n ButtonConfigBase &\n BuyNowButtonConfig &\n FixedButtonConfig &\n VariableButtonConfig &\n ButtonConfigExtensionFromSettings;\n\nexport type CommonButtonConfig = ButtonConfigBase & FixedButtonConfig;\n\nexport enum AccordionName {\n BUTTON_PREFERENCE = 'buttonPreference',\n CREATE_PRODUCT = 'createProduct',\n CUSTOMIZE_THANK_YOU = 'customizeThankYou'\n}\n\nexport enum EditorTabName {\n PRODUCT = 'product',\n CHECKOUT = 'checkout',\n CONFIRMATION = 'confirmation'\n}\n","import React, { useContext, useEffect } from 'react';\nimport { CriticalIcon, TitleText } from '@paypalcorp/pp-react';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { getLocalizedString, WorldReadyProps } from '@client/utils/localeHelper';\nimport { recordImpression } from '@common/analytics';\nimport styles from './styles';\n\nconst NotFound = () => {\n const worldReady = useContext(WorldReadyContext);\n\n useEffect(() => {\n recordImpression({\n eventName: 'not_found_shown',\n pageName: 'not_found'\n });\n }, []);\n\n return (\n
\n
\n \n
\n {getLocalizedString(worldReady, 'error.text.default')}\n
\n );\n};\n\nexport default NotFound;\n","import { css } from '@emotion/react';\n\nconst styles = {\n containerStyles: css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 30rem;\n `,\n iconContainerStyles: css`\n margin: 0 0.5rem;\n `\n};\n\nexport default styles;\n","import React, { useState, useContext, useMemo } from 'react';\nimport _set from 'lodash/set';\nimport { FlowType, SourceType } from '@common/analytics';\nimport type {\n HostedButtonDetails,\n OrderDetails,\n HostedButton,\n UcpConfig,\n DeployEnvironment,\n MerchantInfo,\n PaymentPrefillData,\n ButtonVariation,\n MerchantSettings,\n EnableMessagingObj,\n InterstitialExperimentDetails\n} from '../typings/Common';\nimport { CartDetails } from '../typings/Cart';\nimport { WorldReadyProps } from './WorldReadyContext';\n\ninterface IData {\n app: {\n cdnHostName: string;\n context?: {\n locality: { country: string; language: string };\n };\n csrfToken: string;\n hostname: string;\n nonce: string;\n targetEnv: DeployEnvironment;\n worldReady: WorldReadyProps;\n locale: string;\n timeZone: string;\n region: string;\n config: UcpConfig;\n };\n clientId?: string;\n cartDetails?: CartDetails;\n hostedButtonDetails?: HostedButtonDetails; // From HBS\n orderDetails?: OrderDetails | null;\n hostedButton?: HostedButton; // From BFS\n serverData: {\n csrfToken: string;\n nonce: string;\n sdkUrl: string;\n sdkClientId: string;\n geoAwareDomain?: string;\n };\n isLoading?: boolean;\n paymentPrefillData?: PaymentPrefillData;\n merchantInfo?: MerchantInfo;\n buttonVariation?: ButtonVariation;\n merchantSettings?: MerchantSettings;\n showToggleInfo?: boolean;\n // Flags\n enablePaywall?: boolean;\n enableApplePay?: boolean;\n enableFireAid?: boolean;\n paypalButtonMessagingEnableData?: EnableMessagingObj;\n enablePaywallButtons?: boolean;\n enableBuyerAddToCart?: boolean;\n interstitial?: InterstitialExperimentDetails;\n is3ButtonsEligible?: boolean;\n isSlowRampMerchant?: boolean;\n shouldDisplayFeedbackButton?: boolean;\n isCartButtonSettingEnabled?: boolean;\n isSettingsEnabled?: boolean;\n isPayLaterDisabled?: boolean;\n sourcePage?: string;\n // fpti\n fptiData?: {\n flowType: FlowType;\n sourceType: SourceType;\n };\n supportProfileShipTaxConfig?: boolean;\n supportShipTaxOnCustomerSetPrice?: boolean;\n // Cart\n addToCartId?: string;\n accountIsRestricted?: boolean;\n}\n\nexport interface IAppContext extends IData {\n setCustomData: (path: string, value: unknown) => void;\n setCsrfToken: (csrfToken: string) => void;\n setHostedButton: (HostedButton: HostedButton) => void;\n}\n\nconst AppContext = React.createContext(null);\n\nexport const AppContextProvider = ({\n value,\n children\n}: {\n value: IData | null;\n children: React.ReactElement;\n}) => {\n const [data, setData] = useState(value);\n\n const appContextValue = useMemo(\n () =>\n data\n ? {\n ...data,\n setCustomData: (path: string, value: unknown) => {\n setData((prevData) => {\n /* istanbul ignore next */\n if (!prevData) return prevData;\n _set(prevData, path, value);\n return {\n ...prevData\n };\n });\n },\n setCsrfToken: (csrfToken: string) => {\n setData((prevData) => {\n /* istanbul ignore next */\n if (!prevData) return prevData;\n prevData.app.csrfToken = csrfToken;\n return {\n ...prevData\n };\n });\n },\n setHostedButton: (hostedButton: HostedButton) => {\n setData((prevData) => {\n /* istanbul ignore next */\n if (!prevData) return prevData;\n prevData.hostedButton = hostedButton;\n return {\n ...prevData\n };\n });\n }\n }\n : null,\n [data]\n );\n\n return {children};\n};\n\nexport const useAppContext = () => useContext(AppContext);\n","import { useContext } from 'react';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport type { WorldReadyProps } from '@client/utils/localeHelper';\n\nconst useWorldReadyContext = () => useContext(WorldReadyContext);\n\nexport { useWorldReadyContext, WorldReadyProps };\n","const getVersion = (enablePaywall?: boolean, enablePaywallButtons?: boolean) => {\n let version = enablePaywall ? 'v2' : '';\n if (enablePaywallButtons) {\n version = 'v2.1';\n }\n return version;\n};\nexport default getVersion;\n","import {\n CheckoutButtonColor,\n CheckoutButtonLayout,\n CheckoutButtonShape,\n CheckoutButtonTagline,\n CheckoutPaypalButtonText\n} from '@components/buttons/types';\nimport type { PayPalButtonsComponentProps } from '@paypal/react-paypal-js';\nimport type { WorldReadyProps } from '@client/utils/localeHelper';\nimport { ShippingOptions } from '@components/ConfirmationCart/types';\n\n/*\n U is union of all single key-value pairs in type T\n Therefore U[key of U] is any single key value pair\n*/\ntype AtLeastOne }> = Partial & U[keyof U];\n\ninterface LatmConf {\n trackSprigEvent: (\n event_name?: string,\n properties?: Record\n ) => void;\n}\n\ndeclare global {\n interface Window {\n __initialState__: any;\n ApplePaySession: typeof ApplePaySession | undefined;\n ApplePayError: typeof ApplePayError | undefined;\n PAYPAL?: {\n analytics?: {\n instance?: {\n recordClick: Function;\n recordImpression: Function;\n recordError: Function;\n logActivity: Function;\n };\n startCPLTracking: Function;\n endCPLTracking: Function;\n };\n };\n latmconf: LatmConf;\n }\n}\nexport interface ServerData {\n requestURI: string;\n worldReady: WorldReadyProps;\n locality: {\n locale: string;\n language: string;\n timezone: {\n value: string;\n determiner: string;\n };\n directionality: string;\n };\n fpti: object;\n csrfToken: string;\n nonce: string;\n sdkUrl: string;\n sdkClientId: string;\n geoAwareDomain?: string;\n multiAccountData?: {\n isMultiAcct?: boolean;\n accounts?: {\n current?: boolean;\n accountIdentifier?: string;\n accountNumber?: string;\n alias?: string;\n businessName?: string;\n }[];\n user?: {\n accountNumber?: string;\n email?: string;\n isPrimaryUser?: boolean;\n accountType: string;\n };\n enterpriseData?: {\n isEnterpriseAdmin?: boolean;\n isInTenantHierarchy?: boolean;\n hasAdminView?: boolean;\n operationalAccount?: object;\n };\n };\n timezone?: string;\n accountCurrencies?: string[];\n}\n\nexport interface UseRequestResult {\n data: null | T;\n initialDataHasLoaded?: boolean;\n errors: unknown;\n pending: boolean;\n}\n\nexport interface UseRequestOptions {\n url: string;\n query?: any;\n method?: string;\n methodPath?: string; // needed for additional info to be sent with PATCH/PUT\n methodOp?: string; // needed for additional info to be sent with PATCH/PUT\n listBased?: boolean;\n}\n\nexport interface UseRequestCallbackOptions {\n query?: object;\n requestBody?: any;\n isClear?: boolean;\n}\n\nexport type UseRequestCallbackFunction = (requestOptions?: UseRequestCallbackOptions) => void;\n\nexport interface MakeRequestOptions {\n method?: string;\n methodPath?: string; // needed for additional info to be sent with PATCH/PUT\n methodOp?: string; // needed for additional info to be sent with PATCH/PUT\n requestBody?: any;\n csrf?: string;\n}\n\nexport type HostedButtonDetails = {\n id: string;\n link_variables?: Array<{ name: string; value: string }>;\n country_code?: string;\n language?: string;\n status?: string;\n business_name?: string;\n option_details?: Array;\n create_time: string;\n update_time?: string;\n eligibility?: boolean;\n};\n\nexport type OptionDetail = {\n currency_code?: string;\n name: string;\n selection_details: Array;\n};\n\nexport type OptionItem = {\n primaryText: string;\n value: string;\n price?: string;\n};\n\nexport type QuantityOption = {\n primaryText: string;\n value: string;\n};\n\nexport type SelectionDetail = {\n price?: string;\n option_selection: string;\n images?: string;\n};\n\nexport type AmountDetails = {\n currency_code: string;\n value: string;\n breakdown: {\n item_total: Breakdown;\n shipping: Breakdown;\n handling: Breakdown;\n tax_total: Breakdown;\n insurance: Breakdown;\n shipping_discount: Breakdown;\n discount: Breakdown;\n };\n};\n\nexport type OrderDetails = {\n buttonType?: 'FIXED_PRICE' | 'SINGLE_SELECT_LIST' | 'VARIABLE_PRICE';\n name?: string;\n error?: boolean;\n link_id?: string;\n merchant_id?: string;\n context_id?: string;\n transaction_id?: string;\n status?: string;\n merchant_name?: string;\n payment_status?: string;\n payer?: {\n name?: {\n given_name: string;\n surname: string;\n };\n email_address: string;\n payer_id: string;\n };\n shipping?: {\n name?: {\n full_name?: string;\n };\n address?: Address;\n options?: ShippingOptions[];\n };\n amount?: AmountDetails;\n funding_method?: string;\n items?: Array<{\n description: string;\n name: string;\n quantity: string;\n tax: Breakdown;\n unit_amount: Breakdown;\n memos?: Array<{ label: string; value: string }>; // Spec change\n shipping_preference?: string; // Spec change\n option_selections?: Array<{\n name: string;\n select: string;\n }>; // Spec change\n image_url?: string;\n }>;\n returnURL: string;\n shippingPreference?: string;\n checkoutButtonTextType?: string;\n orderDate?: string;\n description?: string;\n invoiceLabel?: string;\n invoice_id?: string;\n};\n\nexport type Breakdown = {\n currency_code: string;\n value: string;\n};\n\nexport type ServerError = {\n error: boolean;\n name: string;\n message: string;\n status: number;\n details?: Array<{\n description?: string;\n field?: string;\n issue?: string;\n location?: string;\n value?: string;\n }>;\n isClientError?: boolean;\n};\n\nexport type CartItemInputType = {\n quantity?: string;\n item?: string; // TODO - This is added temporarily only for Preview. Please remove this prop, when DTNCPS-2122 story is completed\n};\n\nexport type CartItemErrorType = {\n id?: string;\n link_id?: string;\n quantity?: string;\n};\n\nexport type FormErrorMessageType = {\n isFormValid: boolean;\n isFocused: boolean;\n amount?: string;\n memo?: string;\n invoice?: string;\n item?: string;\n quantity?: string;\n cartItems?: Record;\n msgVariables: {\n min?: number;\n max?: number;\n currencySymbol?: string;\n };\n option_selections?: OptionSelection[];\n};\n\nexport type UserInputsType = {\n quantity?: string;\n item?: string;\n amount?: string;\n memo?: string;\n invoice?: string;\n currency?: string;\n currencySymbol?: string;\n cartItems?: Record;\n option_selections?: OptionSelection[];\n image_url?: string;\n};\n\nexport enum PaymentSource {\n PAYPAL = 'paypal',\n CARD = 'card',\n VENMO = 'venmo',\n PAYLATER = 'paylater',\n GOOGLEPAY = 'googlepay',\n APPLEPAY = 'applepay'\n}\n\nexport type Address = {\n address_line_1: string;\n admin_area_2: string;\n admin_area_1: string;\n postal_code: string;\n country_code: string;\n};\n\nexport type CreatedOrder = {\n context_id: string;\n link_id: string;\n merchant_id: string;\n status: string;\n};\n\nexport type CapturedOrder = {\n context_id: string;\n link_id: string;\n merchant_id: string;\n payment_status: string;\n status: string;\n};\n\nexport type HostedButton = {\n id?: string;\n type?: string;\n button_variables?: Array<{ name: string; value: string }>;\n country_code?: string;\n language?: string;\n status?: string;\n option_details?: Array;\n time_created: string;\n time_updated?: string;\n};\n\nexport type ButtonStyleConfig = {\n layout: `${CheckoutButtonLayout}`;\n shape: `${CheckoutButtonShape}`;\n color: `${CheckoutButtonColor}`;\n button_text: `${CheckoutPaypalButtonText}`;\n tagline: `${CheckoutButtonTagline}` | boolean;\n};\n\nexport type SDKButtonStyle = PayPalButtonsComponentProps['style'];\n\nexport type PaymentMethodConfig = {\n enabled: boolean;\n supportedCountries?: string[];\n supportedCurrencies?: string[];\n};\n\nexport type UcpConfig = {\n enablePhase2SlowRamp: boolean;\n enablePhase2BuyerExperience: boolean;\n disablePhase2BuyerCountries: string[];\n disablePhase2ButtonCountries: string[];\n applepay: PaymentMethodConfig;\n venmo: PaymentMethodConfig;\n paylater: PaymentMethodConfig;\n card: PaymentMethodConfig;\n sprigFeedbackEventName: string;\n featureFlags: {\n doNotCollectShipping?: boolean;\n shippingTaxExpansion?: boolean;\n singleButton?: boolean;\n jsSDKThreeButtonExp?: boolean;\n venmoShipTaxSupport?: boolean;\n supportShippingTaxProfileInPayment?: boolean;\n paywallButtons?: boolean;\n productImage?: boolean;\n };\n paypalButtonMessaging: PaymentMethodConfig;\n fireaid: {\n supportedMerchants: string[];\n sdkClientId: string;\n iosErrorMessage: string;\n showAmountLabel: boolean;\n };\n};\n\nexport type OrderShipping = {\n context_id: string;\n amount: {\n breakdown: {\n item_total: Breakdown;\n shipping: Breakdown | undefined;\n tax_total: Breakdown | undefined;\n };\n currency_code: Breakdown['currency_code'];\n value: Breakdown['value'];\n };\n shipping_options:\n | Array<{\n amount: Breakdown;\n id: string;\n label: string;\n selected: boolean;\n type: string;\n }>\n | undefined;\n};\n\nexport type PaymentAmountDetails = {\n itemPrice: string;\n quantity: number;\n shipping: string;\n taxRate: string;\n};\n\nexport type PaymentBreakdownAmount = {\n subtotal: number;\n shipping: number;\n taxAmount: number;\n total: number;\n};\n\nexport enum DeployEnvironment {\n PRODUCTION = 'production',\n SANDBOX = 'sandbox',\n STAGING = 'staging',\n DEVELOPMENT = 'development'\n}\n\nexport type MerchantInfo = {\n businessName: string;\n merchantId: string;\n primaryCurrencyCode: string | null;\n businessLogo?: string;\n countryCode?: string;\n};\n\nexport type OptionSelection = {\n name: string;\n select: string;\n};\n\nexport type Memo = {\n label: string;\n value: string;\n};\n\nexport type PaymentPrefillData = {\n hasVariants?: string;\n memo?: string;\n amount?: string;\n invoice?: string;\n quantity?: string;\n option_selections?: OptionSelection[];\n image_url?: string;\n selectedImageUrl?: string;\n};\n\nexport enum ButtonVariation {\n BuyNow = 'BUY_NOW',\n Cart = 'ADD_TO_CART'\n}\n\nexport enum FieldValueContent {\n EstimateLater = 'ESTIMATE_LATER',\n Free = 'FREE'\n}\n\nexport type Field = {\n showField: boolean;\n value: T;\n};\n\nexport interface TotalFields {\n tax: Field;\n shipping: Field;\n subtotal: Field;\n total: Field;\n}\n\nexport type MerchantSettingsQuery = {\n categories?: string;\n groups?: string;\n preferences?: string;\n};\n\nexport type MerchantPreferences = {\n categories: Category[];\n};\n\nexport type Category = {\n name: string;\n description?: string;\n groups: Group[];\n};\n\nexport type Group = {\n name: string;\n description?: string;\n preferences: Preference[];\n};\n\nexport type Preference = {\n name: string;\n value: string;\n description?: string;\n status?: string;\n};\n\nexport type PayLaterStatus = {\n isPayLaterDisabled: boolean;\n};\n\nexport type MerchantSettings = {\n //checkout related settings\n payment_method_paylater?: boolean;\n payment_method_venmo?: boolean;\n payment_method_apple_pay?: boolean;\n // TODO: Support Google Pay once Google Pay integration provided\n // payment_method_google_pay?: boolean;\n // TODO: Support paypal button message once JSSDK inner source work completed\n // paypal_button_message?: boolean;\n show_business_name?: boolean;\n show_business_logo?: boolean;\n homepage_url?: string;\n //stacked button related settings\n stacked_button_layout?: string;\n stacked_button_shape?: string;\n stacked_button_size?: string;\n stacked_button_color_type?: string;\n stacked_button_second_button_type?: string;\n stacked_button_text_type?: string;\n stacked_button_custom_text?: string;\n //single button related settings\n single_button_shape?: string;\n single_button_size?: string;\n single_button_color_type?: string;\n single_button_color_code?: string;\n //cart button related settings\n cart_button_shape?: string;\n cart_button_size?: string;\n cart_button_color_type?: string;\n cart_button_color_code?: string;\n auto_return_url?: string;\n};\n\nexport interface EnableMessagingObj {\n enabled: boolean;\n xe: string;\n xt: string;\n}\n\nexport type DynamicMediaImage = {\n assetId: string;\n links: {\n href: string;\n rel?: string;\n sizeId?: number;\n width?: number;\n height?: number;\n }[];\n};\n\nexport enum ImageStatus {\n ACTIVE = 'active',\n IDLE = 'idle',\n LOADING = 'loading'\n}\n\nexport type DynamicImageUrl = string;\n\nexport type DynamicImageActive = {\n status: ImageStatus.ACTIVE;\n assetId: string;\n exampleImageUrl: DynamicImageUrl; // e.g. https://pics.msmaster.qa.paypal.com/00/p/OTJiNzU3MDAtNDQ3NS00M2QxLWJkYTItZDYyN2FiYzQ1OTVk/image_12.PNG, _12 can be replaced by other size ids.\n};\n\nexport type DynamicImageWithStatus =\n | {\n status: ImageStatus.IDLE | ImageStatus.LOADING;\n assetId?: never;\n }\n | DynamicImageActive;\n\n/**\n * Refer to https://paypal.atlassian.net/wiki/spaces/PayPalMediaService/pages/471040357/Image+Request+Metadata+Data#ImageRequestMetadataData-ImageSizeIds for more size ids\n */\nexport enum DynamicImageSizeIds {\n DIMENSION_80x80 = 23,\n DIMENSION_200x200 = 2,\n DIMENSION_500x500 = 12,\n DIMENSION_800x800 = 3\n}\n\nexport type ImageItem = {\n id: string;\n type?: 'product' | 'variant';\n value?: string; // Each variant image should have a value to match the corresponding option.\n thumbnailUrl?: string;\n heroUrl?: string;\n altText?: string;\n};\n\nexport enum ImageError {\n TYPE_ERROR = 'typeError',\n SIZE_ERROR = 'sizeError',\n SERVER_ERROR = 'serverError',\n DIMENSION_TOO_LOW_ERROR = 'dimensionLowError',\n DIMENSION_TOO_HIGH_ERROR = 'dimensionHighError'\n}\n\nexport type FptiAdditionalTags = Record;\n\nexport type InterstitialExperimentDetails =\n | {\n isEnabled: true;\n isTreatment: boolean;\n experimentId: string;\n treatmentId: string;\n }\n | {\n isEnabled: false;\n };\n","import { Logger } from 'beaver-logger';\n\nlet logger; // beaver logger instance\n\nconst getCurrentPathname = () => window?.location?.pathname || '';\n\n// Reference: https://github.com/krakenjs/beaver-logger\n// NOTE: exporting beaverLogger for unit tests\nexport const beaverLogger = () => {\n if (logger) {\n return logger;\n }\n // eslint-disable-next-line new-cap\n logger = Logger({\n url: '/ncp/api/log',\n prefix: '',\n flushInterval: 10 * 1000,\n logLevel: 'info'\n });\n\n logger.addMetaBuilder(function () {\n // add the current pathname to the meta so we can log it before all the other logs\n // and can tell where the user is\n return {\n currPathname: getCurrentPathname()\n };\n });\n\n return logger;\n};\n\nconst getPayloadString = (payload: object | string | undefined): string => {\n if (!payload) {\n return '';\n }\n\n let payloadString = '';\n try {\n payloadString = typeof payload !== 'string' ? JSON.stringify(payload) : payload;\n } catch {\n console.error('getPayloadStringError Issue generating payload string');\n }\n\n return payloadString;\n};\n\nexport const logInfoClient = (event: string, payload?: object | string): void => {\n beaverLogger().info(event, { payload: getPayloadString(payload) });\n};\n\nexport const logErrorClient = (event: string, payload?: object | string): void => {\n beaverLogger().error(event, { payload: getPayloadString(payload) });\n};\n\nexport const logWarnClient = (event: string, payload?: object | string): void => {\n beaverLogger().warn(event, { payload: getPayloadString(payload) });\n};\n\nexport const logFptiClient = (payload?: object): void => {\n if (typeof payload !== 'object') {\n return;\n }\n beaverLogger().track(payload);\n};\n","import {\n DeployEnvironment,\n DynamicImageSizeIds,\n DynamicImageUrl,\n DynamicImageWithStatus,\n DynamicImageActive,\n DynamicMediaImage,\n ImageStatus,\n ImageError,\n SelectionDetail\n} from '@client/typings/Common';\nimport { getLocalizedString, WorldReadyProps } from './localeHelper';\n\nexport const getImageHostName = (targetEnv: DeployEnvironment | undefined): string => {\n if (targetEnv === DeployEnvironment.STAGING || targetEnv === DeployEnvironment.DEVELOPMENT) {\n return 'https://pics.msmaster.qa.paypal.com';\n }\n if (targetEnv === DeployEnvironment.SANDBOX) {\n return 'https://pics.sandbox.paypal.com';\n }\n return 'https://pics.paypal.com';\n};\n\nexport const splitImageAssetIds = (assetIds: string): string[] => {\n if (!assetIds) {\n return [];\n }\n return assetIds.split(',');\n};\n\nexport const joinImageAssetIds = (assetIdArr: string[]): string => {\n return assetIdArr.join(',');\n};\n\nexport const transDynamicImageAssetIdToExampleImageUrl = (\n assetId: string,\n targetEnv?: DeployEnvironment\n): string => {\n const hostName = getImageHostName(targetEnv);\n const imagePath = global.atob(assetId); // e.g. /00/p/OTJiNzU3MDAtNDQ3NS00M2QxLWJkYTItZDYyN2FiYzQ1OTVk/image_12.PNG\n return hostName + imagePath;\n};\n\nexport const transDynamicImageAssetIdsToImagesWithStatus = (\n assetIds: string,\n targetEnv?: DeployEnvironment\n): DynamicImageActive[] => {\n const assetIdArr = splitImageAssetIds(assetIds);\n return assetIdArr.map((assetId) => {\n return {\n status: ImageStatus.ACTIVE,\n assetId,\n exampleImageUrl: transDynamicImageAssetIdToExampleImageUrl(assetId, targetEnv)\n };\n });\n};\n\nexport const transDynamicMediaImageToImageWithStatus = (\n mediaImage: DynamicMediaImage\n): DynamicImageWithStatus => {\n return {\n status: ImageStatus.ACTIVE,\n assetId: mediaImage.assetId,\n exampleImageUrl:\n mediaImage.links.find((i) => i.sizeId === DynamicImageSizeIds.DIMENSION_500x500)?.href || '' // e.g. https://pics.msmaster.qa.paypal.com/00/p/NDNlZjJiOWUtYmU4OS00NmU5LTlmY2UtNTM2OTk1NWJhNDIx/image_12.PNG\n };\n};\n\n/**\n * Transform the dynamic image to another size by replacing size id in the url.\n * @param dynamicImageUrl One cdn url of the image. e.g. https://pics.msmaster.qa.paypal.com/00/p/NDNlZjJiOWUtYmU4OS00NmU5LTlmY2UtNTM2OTk1NWJhNDIx/image_12.PNG\n * @param sizeId size id in enum DynamicImageSizeIds\n * @returns another cdn url of the dynamic image\n */\nexport const transDynamicImageUrlBySizeId = (\n dynamicImageUrl: DynamicImageUrl,\n sizeId: DynamicImageSizeIds\n): DynamicImageUrl => {\n return dynamicImageUrl.replace(/_[0-9]*/, `_${sizeId}`);\n};\n\nconst ImageInlineErrorContentMapping = {\n [ImageError.TYPE_ERROR]: 'editor.image.uploader.error.file.type',\n [ImageError.SIZE_ERROR]: 'editor.image.uploader.error.file.size',\n [ImageError.SERVER_ERROR]: 'editor.image.uploader.error.service',\n [ImageError.DIMENSION_TOO_LOW_ERROR]: 'editor.image.uploader.error.low.dimension',\n [ImageError.DIMENSION_TOO_HIGH_ERROR]: 'editor.image.uploader.error.high.dimension'\n};\n\nexport const getImageInlineErrorContent = (worldReady: WorldReadyProps, error: ImageError) => {\n return getLocalizedString(worldReady, ImageInlineErrorContentMapping[error]);\n};\n\n// Primarily being used for FPTI\nexport const getImageCount = (\n productImages?: string,\n selectionDetails?: SelectionDetail[]\n): string => {\n const productImageAssetIds = splitImageAssetIds(productImages || '');\n const selectionDetailsWithImages =\n selectionDetails?.filter((selectionDetail) => selectionDetail.images) || [];\n return String(productImageAssetIds.length + selectionDetailsWithImages.length);\n};\n","import {\n MessageFormat,\n AddressFormat,\n CurrencyFormat,\n NumberFormat,\n DateTimeFormat\n} from '@paypalcorp/worldready';\nimport type { Address } from '../typings/Common';\nimport { PaymentButtonType } from '../components/buttons/types';\nimport temporaryLocale from './temporaryLocale';\n\nexport interface WorldReadyProps {\n language: string; // en, fr\n region: string; // US, GB\n locale: string; // en-US, en-GB\n bundle: string; // en-US, en-GB\n globalize: object;\n}\n\nexport type CurrencyConfigType = {\n symbol: string;\n currencyCode: string;\n maxDecimalPlaces: number;\n};\n\nexport const getLocalizedString = (\n worldReady: WorldReadyProps,\n id: string | undefined,\n format: Record = {}\n): string => {\n if (!id) {\n return '';\n }\n\n const messageFormatter = new MessageFormat(worldReady, {\n id\n });\n return messageFormatter.format(format);\n};\n\n/**\n * This function is for future temporary use in early stage when content are still to be decided.\n * @param id\n * @param format\n */\nexport const getTempLocalizedString = (\n id: string | undefined,\n format: Record = {}\n): string => {\n if (!id) {\n return '';\n }\n const placeholderRegex = /\\{(\\w+?)}/g;\n\n /* istanbul ignore next (since we do not have a regex temp content for now) */\n return (temporaryLocale[id] || '').replace(placeholderRegex, (_, name) => format[name]);\n};\n\ninterface ButtonAndLinkId {\n button: string;\n link: string;\n}\nexport const flexButtonAndLinkContent = (type: PaymentButtonType, id: ButtonAndLinkId): string => {\n if (type === PaymentButtonType.Link) {\n return id.link;\n }\n return id.button;\n};\n\nexport const getLocalizedAddress = (\n worldReady: WorldReadyProps,\n address: Address | undefined\n): string => {\n if (!address) {\n return '';\n }\n\n const addressFormatter = new AddressFormat(worldReady, {\n addressRegion: address.country_code,\n style: 'international-multiline'\n });\n return addressFormatter.format({\n addressLine1: address.address_line_1,\n adminArea1: address.admin_area_1,\n adminArea2: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code\n });\n};\n\nexport const getLocalizedAddressParts = (\n worldReady: WorldReadyProps,\n address: Address | undefined\n): ReturnType => {\n if (!address) {\n return [];\n }\n\n const addressFormatter = new AddressFormat(worldReady, {\n addressRegion: address.country_code,\n style: 'international-multiline'\n });\n return addressFormatter.formatToParts({\n addressLine1: address.address_line_1,\n adminArea1: address.admin_area_1,\n adminArea2: address.admin_area_2,\n countryCode: address.country_code,\n postalCode: address.postal_code\n });\n};\n\nexport const getCurrencyConfig = (\n worldReady: WorldReadyProps,\n currency: string | undefined\n): CurrencyConfigType => {\n if (!currency) {\n return {\n symbol: '$',\n currencyCode: 'USD',\n maxDecimalPlaces: 2\n };\n }\n\n const currencyFormatter = new CurrencyFormat(worldReady, {\n currency,\n style: 'international'\n });\n const maxDecimalPlaces = currencyFormatter.resolvedOptions().maximumFractionDigits;\n const dummyParts = currencyFormatter.formatToParts(1);\n const symbol = dummyParts.find((part) => part.type === 'currencySymbol')?.value;\n const currencyCode = dummyParts.find((part) => part.type === 'currencyCode')?.value;\n\n return {\n symbol: symbol || '',\n currencyCode: currencyCode || currency,\n maxDecimalPlaces\n };\n};\n\nexport const formatCurrency = (\n worldReady: WorldReadyProps,\n currencyCode: string | undefined,\n currencyAmount: string | number | undefined,\n showCurrencySymbol: boolean = false,\n showCurrencyCode: boolean = true\n) => {\n if (currencyCode && currencyAmount != null) {\n const currencyOptions = showCurrencyCode\n ? { currency: currencyCode, style: 'international' }\n : { currency: currencyCode };\n const currencyFormatter = new CurrencyFormat(worldReady, currencyOptions);\n\n if (showCurrencySymbol) {\n return currencyFormatter.format(Number(currencyAmount));\n }\n const { minimumFractionDigits, maximumFractionDigits } = currencyFormatter.resolvedOptions();\n\n const numberFormatter = new NumberFormat(worldReady, {\n minimumFractionDigits,\n maximumFractionDigits\n });\n const formattedCurrencyAmount = numberFormatter.format(Number(currencyAmount));\n\n return `${formattedCurrencyAmount} ${currencyCode}`;\n }\n return null;\n};\n\nexport const getLocalizedDate = (\n worldReady: WorldReadyProps,\n timeZone: string,\n date: Date,\n options?: {\n style?: string;\n }\n) => {\n if (!date) {\n return '';\n }\n\n const dateTimeFormatter = new DateTimeFormat(worldReady, {\n style: options?.style || 'date-short',\n timeZone\n });\n return dateTimeFormatter.format(date);\n};\n\nexport const getLocalizedPercentage = (\n worldReady: WorldReadyProps,\n number: number | string | undefined\n) => {\n if (!number) {\n return '';\n }\n\n const numberFormatter = new NumberFormat(worldReady, {\n style: 'percent',\n maximumFractionDigits: 4\n });\n\n return numberFormatter.format(Number(number) / 100);\n};\n","/**\n * Grabs the data we dump from the server into the DOM and exports them as a singleton.\n * This allows us to conveniently dump server data into the dom and use this to load\n * that data into our app.\n */\nimport { WorldReady } from '@paypalcorp/worldready';\nimport { ServerData } from '../typings/Common';\nimport { logErrorClient } from './beaverLogger';\n\nconst serverData = {} as ServerData;\n\nexport interface Data extends ServerData {\n serializedServerData?: string;\n serializedFptiConfigs?: string;\n}\n\nfunction init(data: Data) {\n if (!data) {\n return;\n }\n\n try {\n const serverDataDetails = JSON.parse(data.serializedServerData || '{}');\n const serverFPTIConfig = JSON.parse(data.serializedFptiConfigs || '{}');\n Object.assign(serverData, { ...data, ...serverDataDetails, ...serverFPTIConfig });\n\n if (process.env.NODE_ENV !== 'test' && serverData?.worldReady) {\n WorldReady.load(serverData.worldReady);\n }\n } catch (err) {\n logErrorClient('server-data: ', err.toString());\n }\n}\n\nconst supportedCurrencies = () => {\n return serverData.accountCurrencies || [];\n};\n\nexport default serverData;\nexport { init, supportedCurrencies };\n","import {\n CheckoutPaymentOptionsOtherThanPayPal,\n PaymentButtonType\n} from '@client/components/buttons/types';\nimport {\n ButtonVariation,\n type ButtonStyleConfig,\n type HostedButtonDetails,\n type PaymentAmountDetails,\n type PaymentBreakdownAmount,\n type SDKButtonStyle,\n type UcpConfig,\n FieldValueContent,\n type UserInputsType,\n MerchantInfo\n} from '@client/typings/Common';\nimport { WorldReadyProps } from '@client/contexts/WorldReadyContext';\nimport { getButtonVariablesFromMerchantSettings } from '@components/Settings/utils';\nimport type { ButtonConfig } from '@client/components/buttons/types';\nimport { SecondButtonType, Stacked3ButtonPaymentOption } from '@components/Settings/types';\nimport { IAppContext } from '@client/contexts/AppContext';\nimport { supportedCurrencies } from '@common/currencyConfigs';\nimport { getFeatureFlags } from '@client/helpers/ucpConfig';\nimport { JSSDK_SPECIAL_LOCALES_MAP } from '@common/constants';\nimport { extractSourceAndFlowType } from '@common/fpti';\nimport { FlowVariationType } from '@common/analytics';\nimport { PREVIEW_CART_ITEM_ID } from '@client/utils/constants';\nimport { CurrencyConfigType, formatCurrency, getLocalizedString } from './localeHelper';\nimport { DEFAULT_MERCHANT_CHECKOUT_SETTINGS } from '../components/Settings/getInitialMerchantSettings';\n\nconst ENABLED_FUNDING_METHODS = [\n CheckoutPaymentOptionsOtherThanPayPal.Venmo,\n CheckoutPaymentOptionsOtherThanPayPal.PayLater\n];\n\nexport const transformButtonVariables = (linkVariables: HostedButtonDetails['link_variables']) =>\n (linkVariables || []).reduce((acc, curr) => {\n acc[curr.name] = curr.value;\n return acc;\n }, {} as Record);\n\nexport const transformButtonVariablesToLinkVariables: (\n buttonVariables: Record\n) => Array<{ name: string; value: string | undefined }> = (buttonVariables) =>\n Object.entries(buttonVariables || {}).reduce(\n (acc, [name, value]) => [...acc, { name, value }],\n []\n );\n\nexport const transButtonStyleFromButtonVariables = (\n buttonStyleConfig: ButtonStyleConfig\n): SDKButtonStyle => {\n const { layout, shape, color, button_text: label, tagline } = buttonStyleConfig;\n const style: SDKButtonStyle = { layout, shape, color, label };\n\n if (layout !== 'vertical') {\n style.tagline = tagline === 'true' || tagline === true;\n } else {\n // JSSDK - style.tagline is not allowed for vertical layout\n style.tagline = false;\n }\n return style;\n};\n\nexport const isMerchantHostedExp = () =>\n typeof window !== 'undefined' && window.opener && window.opener !== window;\n\n/**\n * Align with round method used in worldready\n * (2.54, 0) => 3\n * (2.54, 1) => 2.5\n * (2.54, 2) => 2.54\n * (2.54, 3) => 2.54\n */\nexport const roundToMaxDecimal = (initValue: number, maximumFractionDigits: number = 2) => {\n const maxDecimals = Math.max(0, maximumFractionDigits);\n return +`${Math.round(Number(`${initValue}e${maxDecimals}`))}e-${maxDecimals}`;\n};\n\nexport const getTaxAmount = (\n subtotal: number,\n taxRate: number,\n maximumFractionDigits: number = 2\n) => {\n const taxAmount = (subtotal * taxRate) / 100;\n return roundToMaxDecimal(taxAmount, maximumFractionDigits);\n};\n\nexport const buttonIsEligible = (\n paymentMethod: CheckoutPaymentOptionsOtherThanPayPal,\n country: string | undefined,\n currency: string,\n config: UcpConfig | undefined\n) => {\n const paymentMethodConfig = config?.[paymentMethod];\n if (paymentMethodConfig) {\n const isSupportedCountry =\n !paymentMethodConfig.supportedCountries ||\n (country && paymentMethodConfig.supportedCountries.includes(country));\n const isSupportedCurrency =\n !paymentMethodConfig.supportedCurrencies ||\n paymentMethodConfig.supportedCurrencies.includes(currency);\n return isSupportedCountry && isSupportedCurrency;\n }\n return true;\n};\n\nexport const buttonIsAvailable = (\n paymentMethod: CheckoutPaymentOptionsOtherThanPayPal,\n country: string | undefined,\n currency: string,\n globalConfig: UcpConfig | undefined,\n flags: { enableApplePay: boolean },\n profileShipTax?: boolean\n) => {\n if (paymentMethod === CheckoutPaymentOptionsOtherThanPayPal.ApplePay && !flags.enableApplePay) {\n return false;\n }\n if (\n paymentMethod === CheckoutPaymentOptionsOtherThanPayPal.Venmo &&\n profileShipTax &&\n !globalConfig?.featureFlags?.venmoShipTaxSupport\n ) {\n return false;\n }\n const paymentMethodConfig = globalConfig?.[paymentMethod];\n const paymentMethodEnabled = !!paymentMethodConfig?.enabled;\n const buttonEligible = buttonIsEligible(paymentMethod, country, currency, globalConfig);\n if (!paymentMethodEnabled || !buttonEligible) {\n return false;\n }\n return true;\n};\n\nexport const transSDKFundingConfig = (\n allowedPaymentMethods: `${CheckoutPaymentOptionsOtherThanPayPal}`[]\n) => {\n const disabledPaymentMethods = Object.values(CheckoutPaymentOptionsOtherThanPayPal).filter(\n (method) => !allowedPaymentMethods.includes(method)\n );\n\n const enabledPaymentMethods = ENABLED_FUNDING_METHODS.filter((method) =>\n allowedPaymentMethods.includes(method)\n );\n\n const newConfig = {\n enableFunding: enabledPaymentMethods.length > 0 ? enabledPaymentMethods.join(',') : '',\n disableFunding: disabledPaymentMethods.length > 0 ? disabledPaymentMethods.join(',') : ''\n };\n return newConfig;\n};\n\nexport const getPaymentBreakdown = (\n paymentDetails: PaymentAmountDetails,\n currencyConfig: CurrencyConfigType\n): PaymentBreakdownAmount => {\n const maxDecimal = currencyConfig.maxDecimalPlaces;\n let shippingValue = parseFloat(paymentDetails.shipping);\n let taxRateValue = parseFloat(paymentDetails.taxRate);\n let itemPriceValue = parseFloat(paymentDetails.itemPrice);\n if (Number.isNaN(itemPriceValue)) {\n itemPriceValue = 0;\n }\n if (Number.isNaN(shippingValue)) {\n shippingValue = 0;\n }\n if (Number.isNaN(taxRateValue)) {\n taxRateValue = 0;\n }\n const roundedPrice = roundToMaxDecimal(itemPriceValue, maxDecimal);\n const subtotal = roundedPrice * paymentDetails.quantity;\n const taxAmount = getTaxAmount(subtotal, taxRateValue, maxDecimal);\n return {\n subtotal: roundToMaxDecimal(subtotal, maxDecimal),\n shipping: roundToMaxDecimal(shippingValue, maxDecimal),\n taxAmount: roundToMaxDecimal(taxAmount, maxDecimal),\n total: roundToMaxDecimal(subtotal + shippingValue + taxAmount, maxDecimal)\n };\n};\n\nexport const getAllowedPaymentMethodsFromConfigs = (\n merchantCountry: string | undefined,\n ucpConfig: UcpConfig | undefined,\n currencyCode: string,\n toggles: {\n paymentMethodVenmo: boolean | undefined;\n paymentMethodPayLater: boolean | undefined;\n paymentMethodApplePay: boolean | undefined;\n },\n flags: {\n enableApplePay: boolean; // TODO: Remove this after elmo is ramped to 100%\n },\n profileShipTax?: boolean\n): CheckoutPaymentOptionsOtherThanPayPal[] => {\n const venmoToggle =\n toggles.paymentMethodVenmo ?? DEFAULT_MERCHANT_CHECKOUT_SETTINGS.payment_method_venmo;\n const payLaterToggle =\n toggles.paymentMethodPayLater ?? DEFAULT_MERCHANT_CHECKOUT_SETTINGS.payment_method_paylater;\n const applePayToggle =\n toggles.paymentMethodApplePay ?? DEFAULT_MERCHANT_CHECKOUT_SETTINGS.payment_method_apple_pay;\n\n const switches = {\n [CheckoutPaymentOptionsOtherThanPayPal.Venmo]: venmoToggle,\n [CheckoutPaymentOptionsOtherThanPayPal.PayLater]: payLaterToggle,\n [CheckoutPaymentOptionsOtherThanPayPal.ApplePay]: applePayToggle,\n [CheckoutPaymentOptionsOtherThanPayPal.Card]: true\n };\n const allowedMethods = Object.values(CheckoutPaymentOptionsOtherThanPayPal).reduce(\n (acc, paymentOption) => {\n const buttonAvailable = buttonIsAvailable(\n paymentOption,\n merchantCountry,\n currencyCode,\n ucpConfig,\n flags,\n profileShipTax\n );\n if (buttonAvailable && switches[paymentOption]) {\n return acc.concat(paymentOption);\n }\n return acc;\n },\n [] as CheckoutPaymentOptionsOtherThanPayPal[]\n );\n return allowedMethods;\n};\n\nexport const shouldShow3ButtonsInDetails = (appContext: IAppContext | null) => {\n const originalButtonVariables = transformButtonVariables(\n appContext?.hostedButton?.button_variables\n );\n const merchantSettings = appContext?.merchantSettings;\n const isSettingsEnabled = appContext?.isSettingsEnabled;\n const buttonVariables = getButtonVariablesFromMerchantSettings(\n merchantSettings,\n originalButtonVariables,\n isSettingsEnabled\n );\n return !!(\n (appContext?.isSlowRampMerchant || !!buttonVariables.checkout_button_type) &&\n getFeatureFlags(appContext).jsSDKThreeButtonExp\n );\n};\n\nexport const shouldShow3ButtonsInEditor = (appContext: IAppContext | null) =>\n !!(appContext?.is3ButtonsEligible && getFeatureFlags(appContext).jsSDKThreeButtonExp);\n\nexport const get3ButtonsPaymentEligibility = (\n enableApplePay?: boolean,\n currencyCode?: string,\n country?: string,\n config?: UcpConfig,\n profileShipTax?: boolean\n) => {\n const flags = { enableApplePay: enableApplePay ?? false };\n const showVenmo = currencyCode\n ? buttonIsAvailable(\n CheckoutPaymentOptionsOtherThanPayPal.Venmo,\n country,\n currencyCode,\n config,\n flags,\n profileShipTax\n ) && window?.paypal?.isFundingEligible?.(CheckoutPaymentOptionsOtherThanPayPal.Venmo)\n : false;\n const showPayLater = currencyCode\n ? buttonIsAvailable(\n CheckoutPaymentOptionsOtherThanPayPal.PayLater,\n country,\n currencyCode,\n config,\n flags\n ) && window?.paypal?.isFundingEligible?.(CheckoutPaymentOptionsOtherThanPayPal.PayLater)\n : false;\n const eligibleApplePay = currencyCode\n ? buttonIsAvailable(\n CheckoutPaymentOptionsOtherThanPayPal.ApplePay,\n country,\n currencyCode,\n config,\n flags\n )\n : false;\n return {\n showVenmo,\n showPayLater,\n eligibleApplePay\n };\n};\n/**\n * Map WorldReady locale to jssdk locale.\n * @param locale\n * @returns\n */\nexport const sdkLocaleMapper = (locale: string) => {\n return (JSSDK_SPECIAL_LOCALES_MAP[locale] || locale || 'en-US').replace('-', '_');\n};\n\nexport const shouldShow3ButtonsAlert = (appContext: IAppContext | null) => {\n const originalButtonVariables = transformButtonVariables(\n appContext?.hostedButton?.button_variables\n );\n\n const merchantSettings = appContext?.merchantSettings;\n const isSettingsEnabled = appContext?.isSettingsEnabled;\n const buttonVariables = getButtonVariablesFromMerchantSettings(\n merchantSettings,\n originalButtonVariables,\n isSettingsEnabled\n );\n return (\n appContext?.hostedButton?.id &&\n shouldShow3ButtonsInEditor(appContext) &&\n !buttonVariables.checkout_button_type\n );\n};\n\nexport const getSourceAndFlowTypeForOrderStatus = (appContext: IAppContext | null) => {\n const checkoutButtonTextType = appContext?.orderDetails?.checkoutButtonTextType;\n const isSlowRampMerchant = appContext?.isSlowRampMerchant;\n let { sourceType, flowType } = extractSourceAndFlowType(appContext?.fptiData);\n if (isMerchantHostedExp()) {\n if (isSlowRampMerchant || !!checkoutButtonTextType) {\n flowType = 'merchant';\n sourceType = '3_button_code';\n } else {\n flowType = 'merchant';\n sourceType = 'button_code';\n }\n }\n return { sourceType, flowType };\n};\n\nexport const getButtonVariation = (appContext: IAppContext | null) =>\n appContext?.buttonVariation || ButtonVariation.BuyNow;\n\nexport const getFlowVariation = (appContext: IAppContext | null): FlowVariationType =>\n getButtonVariation(appContext) === ButtonVariation.Cart ? 'add_to_cart' : 'buy_now';\n\nexport const getCurrencyList = (country: string | undefined) => {\n return (\n country === 'MY' ? supportedCurrencies : supportedCurrencies.filter((_) => _ !== 'MYR')\n ).map((currency) => ({\n value: currency,\n label: currency\n }));\n};\n\nexport const getValueContent = (\n worldReady: WorldReadyProps,\n value: number | `${FieldValueContent}`,\n currencyCode: string | undefined,\n showCurrencySymbol: boolean = true\n) => {\n if (value === FieldValueContent.EstimateLater) {\n return getLocalizedString(worldReady, 'payment.text.estimatedLater');\n }\n\n if (value === FieldValueContent.Free) {\n return getLocalizedString(worldReady, 'payment.text.freeShipping');\n }\n\n return formatCurrency(worldReady, currencyCode, value, showCurrencySymbol);\n};\n\nexport const getNumItemsInPreviewCart = (userInputs: UserInputsType) =>\n parseInt(userInputs?.cartItems?.[PREVIEW_CART_ITEM_ID]?.quantity || '0', 10);\n\nexport const getPreviewMerchantInfoWithFallback = (\n worldReady: WorldReadyProps,\n merchantInfo: MerchantInfo | undefined\n): MerchantInfo => ({\n ...merchantInfo,\n businessName:\n merchantInfo?.businessName ||\n `[${getLocalizedString(worldReady, 'app.business.name.fallbackText')}]`,\n countryCode: merchantInfo?.countryCode || '',\n merchantId: merchantInfo?.merchantId || '',\n primaryCurrencyCode: merchantInfo?.primaryCurrencyCode || null\n});\n\nexport const get3ButtonRenderListFromButtonConfig = (\n buttonConfig: ButtonConfig,\n options: {\n showVenmo: boolean | undefined;\n showPayLater: boolean | undefined;\n isSettingsEnabled: boolean | undefined;\n }\n) => {\n const buttonRenderList = [Stacked3ButtonPaymentOption.PayPal];\n\n if (options?.isSettingsEnabled) {\n switch (buttonConfig.secondButtonType) {\n case SecondButtonType.PayPalRecommended:\n if (buttonConfig.paymentMethodVenmo && options?.showVenmo) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.Venmo);\n } else if (buttonConfig.paymentMethodPayLater && options?.showPayLater) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.PayLater);\n }\n break;\n\n case SecondButtonType.Venmo:\n if (buttonConfig.paymentMethodVenmo && options?.showVenmo) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.Venmo);\n }\n break;\n\n case SecondButtonType.PayLater:\n if (buttonConfig.paymentMethodPayLater && options?.showPayLater) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.PayLater);\n }\n break;\n\n default:\n break;\n }\n }\n\n if (!options?.isSettingsEnabled) {\n if (options?.showVenmo) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.Venmo);\n } else if (options?.showPayLater) {\n buttonRenderList.push(Stacked3ButtonPaymentOption.PayLater);\n }\n }\n\n buttonRenderList.push(Stacked3ButtonPaymentOption.Checkout);\n return buttonRenderList;\n};\n\nexport const get3ButtonPreferencesFromButtonVariables = (\n buttonVariables: Record,\n enableFundingMethods: CheckoutPaymentOptionsOtherThanPayPal[],\n isSettingsEnabled: boolean | undefined\n) => {\n const buttonPreferences: Array = [\n Stacked3ButtonPaymentOption.PayPal\n ];\n\n if (isSettingsEnabled) {\n switch (buttonVariables.second_button_type) {\n case SecondButtonType.PayPalRecommended:\n if (\n buttonVariables.payment_method_venmo === 'true' &&\n enableFundingMethods.includes(CheckoutPaymentOptionsOtherThanPayPal.Venmo)\n ) {\n buttonPreferences.push(Stacked3ButtonPaymentOption.Venmo);\n } else if (\n buttonVariables.payment_method_paylater === 'true' &&\n enableFundingMethods.includes(CheckoutPaymentOptionsOtherThanPayPal.PayLater)\n ) {\n buttonPreferences.push(Stacked3ButtonPaymentOption.PayLater);\n }\n break;\n\n case SecondButtonType.Venmo:\n if (\n buttonVariables.payment_method_venmo === 'true' &&\n enableFundingMethods.includes(CheckoutPaymentOptionsOtherThanPayPal.Venmo)\n ) {\n buttonPreferences.push(Stacked3ButtonPaymentOption.Venmo);\n }\n break;\n\n case SecondButtonType.PayLater:\n if (\n buttonVariables.payment_method_paylater === 'true' &&\n enableFundingMethods.includes(CheckoutPaymentOptionsOtherThanPayPal.PayLater)\n ) {\n buttonPreferences.push(Stacked3ButtonPaymentOption.PayLater);\n }\n break;\n\n default:\n break;\n }\n } else {\n buttonPreferences.push('default');\n }\n\n return buttonPreferences;\n};\n\nexport const isMemoLabelOptional = (buttonVariables: Record) =>\n buttonVariables.mandate_customer_memo === 'false';\n\nexport const isButtonsLabelsOverrideEnabled = (\n paymentButtonType: `${PaymentButtonType}`,\n isSectionToggledOn: boolean\n) => isSectionToggledOn && paymentButtonType === PaymentButtonType.Button;\n\n// Taken from pp-react\n// https://github.paypal.com/PayPal-UI-R/pp-react/blob/6815c9f62a7e461cc6d38eaac677ad9db0dbc4a2/packages/horizontal-scroll/src/horizontalScroll.tsx#L76-L79\n// https://github.paypal.com/PayPal-UI-R/pp-react/search?p=2&q=breakpoints.mediaMd\nexport const DESKTOP_WIDTH_BREAKPOINT = 752;\n\nexport const getIsDesktop = () => {\n return window.innerWidth >= DESKTOP_WIDTH_BREAKPOINT;\n};\n\nexport const MOBILE_WIDTH_BREAKPOINT = 751;\n\nexport const getIsMobile = () => {\n return window.innerWidth <= MOBILE_WIDTH_BREAKPOINT;\n};\n// We should expand the section by default if there is any toggle inside turned on\nexport const shouldShowMoreOptionsInEditor = (toggleValues: Array): boolean =>\n toggleValues.some((toggleValue) => toggleValue);\n","import React from 'react';\nimport type { DeepPartial } from 'react-hook-form';\nimport { HostedButton, HostedButtonDetails, MerchantSettings } from '@client/typings/Common';\nimport { KrakenRequest } from '@server/typings';\nimport { transformButtonVariables } from '@client/utils/utils';\nimport { getButtonVariablesFromMerchantSettings } from '@components/Settings/utils';\nimport {\n ButtonConfig,\n NoShipping,\n CheckoutButtonTextType,\n SingleButtonTextType,\n CheckoutSingleButtonColorType\n} from '@client/components/buttons/types';\nimport { logErrorClient } from '@client/utils/beaverLogger';\nimport { mapServerToClientVariants } from '@client/components/buttons/serverClientPayloadKeyMapper';\nimport getVersion from '@client/helpers/getVersion';\nimport { getImageCount } from '@client/utils/image';\nimport { fptiPageNames, FPTI_GROUP, COMPONENT, PRODUCT, SPACE_KEY } from './fpti';\nimport { getVariantDetails } from './variants';\n\nexport type FlowType =\n | 'paypal'\n | 'merchant'\n | 'unknown'\n | 'preview'\n | 'redirection'\n | 'third-party';\nexport type FlowVariationType = 'buy_now' | 'add_to_cart';\nexport type SourceType =\n | 'link'\n | 'qr_code'\n | 'button_code'\n | 'unknown'\n | 'checkout_button'\n | 'single_button'\n | '3_button_code'\n | 'add_to_cart_button'\n | 'view_cart_button';\nexport type PageName =\n | 'payment'\n | 'paywall'\n | 'order_status'\n | 'deploy_sheet'\n | 'not_found'\n | 'quick_actions'\n | 'account_check_failed'\n | 'confirmation_cart'\n | 'settings'\n | 'merchant_website'\n | 'fireaid'\n | 'subscriptions';\nexport type FptiData = {\n eventName: string;\n pageName?: PageName;\n hosted_button_id?: string;\n merchant_id?: string;\n order_id?: string | unknown;\n payment_source?: string;\n selected_payment_method?: string;\n error_type?: string;\n flow_type?: FlowType;\n source_type?: SourceType;\n api_response_code?: number;\n api_duration?: number;\n event?: string;\n flow_variation?: FlowVariationType;\n [key: string]: unknown;\n};\n\nexport type MerchantFptiData = {\n eventName: string;\n hosted_button_id?: string;\n merchant_id?: string;\n order_id?: string | unknown;\n payment_source?: string;\n selected_payment_method?: string;\n error_type?: string;\n flow_type?: FlowType;\n source_type?: SourceType;\n api_response_code?: number;\n api_duration?: number;\n [key: string]: unknown;\n};\n\nconst BASE_TAGS = {\n product: PRODUCT,\n component: COMPONENT,\n pgrp: FPTI_GROUP,\n space_key: SPACE_KEY\n};\n\nexport const buildBaseTags = (pageName: string | undefined, eventName: string, event?: string) => {\n const page = fptiPageNames[pageName || ''];\n if (event) {\n return {\n ...BASE_TAGS,\n page,\n event_name: eventName,\n e: event,\n event_type: event\n };\n }\n return {\n ...BASE_TAGS,\n page,\n action: eventName\n };\n};\n\nexport type MerchantSettingOptions = {\n merchantSettings?: MerchantSettings;\n isSettingsEnabled?: boolean;\n};\n\nexport const buildAdditionalTags = (\n buttonDetails: HostedButtonDetails,\n sourceType: SourceType,\n flowType: FlowType,\n enablePaywall?: boolean,\n merchantSettingsOptions?: MerchantSettingOptions,\n enablePaywallButtons?: boolean\n) => {\n const merchantSettings = merchantSettingsOptions?.merchantSettings;\n const isSettingsEnabled = merchantSettingsOptions?.isSettingsEnabled;\n const originalButtonVariables = transformButtonVariables(buttonDetails.link_variables);\n const buttonVariables = getButtonVariablesFromMerchantSettings(\n merchantSettings,\n originalButtonVariables,\n isSettingsEnabled\n );\n const hostedButtonId = buttonDetails.id;\n const {\n business: merchantId,\n shape: buttonShape,\n color: buttonColor,\n ...otherProps\n } = buttonVariables;\n const version = getVersion(enablePaywall, enablePaywallButtons);\n const productImages = buttonVariables?.product_images;\n // Only the first variant could have images\n const primaryVariantOptions = buttonDetails.option_details?.[0]?.selection_details;\n const imageCount = getImageCount(productImages, primaryVariantOptions);\n const variantDetails = getVariantDetails(buttonDetails.option_details, false);\n return {\n ...otherProps,\n button_shape: buttonShape,\n button_color: buttonColor,\n merchant_id: merchantId,\n hosted_button_id: hostedButtonId,\n source_type: sourceType,\n flow_type: flowType,\n version,\n image_count: imageCount,\n variant_details: variantDetails\n };\n};\n\nexport type ButtonConfigFptiFlags = {\n shouldSend3ButtonTags?: boolean;\n shouldSendSingleButtonTags?: boolean;\n flowVariation?: FlowVariationType;\n};\n\nexport const buildButtonConfigTagsV2 = (\n buttonConfig: DeepPartial,\n flags?: ButtonConfigFptiFlags\n) => ({\n button_color: buttonConfig.color,\n button_layout: buttonConfig.layout,\n button_shape: buttonConfig.shape,\n button_text: buttonConfig.paypalButtonText,\n button_type: buttonConfig.paymentButtonType,\n component: 'nocodenodeweb',\n is_no_shipping: buttonConfig.isNotCollectShippingAddress,\n variants: buttonConfig.variants,\n label_amount: buttonConfig.amountLabel,\n label_invoice: buttonConfig.invoiceLabel,\n label_note: buttonConfig.memoLabel,\n max_qty: buttonConfig.quantityOption,\n price: buttonConfig.amount,\n pricing_option_selected: buttonConfig.buttonType,\n product_name: buttonConfig.itemName,\n product_id: buttonConfig.productId,\n quantity_option: buttonConfig.isEnableQuantityOption,\n return_url: buttonConfig.customReturnUrl,\n return_url_option: buttonConfig.returnUrlType,\n shipping_config: buttonConfig.shippingPreference,\n shipping_fee: buttonConfig.shipping,\n tax_config: buttonConfig.taxRatePreference,\n tax_rate: buttonConfig.taxRate,\n version: 'v2',\n // 3-button fields, we need to add a ramp check here since these values get\n // pre-populated to default values\n ...(flags?.shouldSend3ButtonTags && {\n button_size: buttonConfig.size,\n button_text_checkout:\n buttonConfig.checkoutButtonTextType === CheckoutButtonTextType.Custom\n ? buttonConfig.checkoutButtonCustomText\n : buttonConfig.checkoutButtonTextType\n }),\n // single button fields\n ...(flags?.shouldSendSingleButtonTags && {\n checkout_button_type: buttonConfig.checkoutButtonType,\n button_size_single: buttonConfig.singleButtonSize,\n button_color_single:\n buttonConfig.singleButtonColorType === CheckoutSingleButtonColorType.Custom\n ? buttonConfig.singleButtonColor\n : buttonConfig.singleButtonColorType,\n button_text_single:\n buttonConfig.singleButtonTextType === SingleButtonTextType.Custom\n ? buttonConfig.singleButtonCustomText\n : buttonConfig.singleButtonTextType\n })\n});\n\n// TODO: replace appContext by specific params.\nexport const buildButtonDetailsTags = (\n hostedButton?: HostedButton,\n merchantSettings?: MerchantSettings,\n isSettingsEnabled?: boolean\n) => {\n const originalButtonVariables = transformButtonVariables(hostedButton?.button_variables);\n const buttonVariables = getButtonVariablesFromMerchantSettings(\n merchantSettings,\n originalButtonVariables,\n isSettingsEnabled\n );\n return {\n button_color: buttonVariables.color,\n button_layout: buttonVariables.layout,\n button_shape: buttonVariables.shape,\n button_text: buttonVariables.button_text,\n button_type: buttonVariables.payment_button_type,\n component: 'nocodenodeweb',\n is_no_shipping: buttonVariables.no_shipping === NoShipping.NoPrompt,\n label_amount: buttonVariables.amount_label,\n label_invoice: buttonVariables.invoice_label,\n label_note: buttonVariables.memo_label,\n max_qty: buttonVariables.quantity_option,\n price: buttonVariables.amount,\n pricing_option_selected: buttonVariables.button_sub_type,\n product_name: buttonVariables.item_name,\n product_id: buttonVariables.product_id,\n quantity_option: buttonVariables.quantity_option !== undefined,\n return_url: buttonVariables.custom_return_url,\n return_url_option: buttonVariables.return_url_type,\n shipping_config: buttonVariables.shipping_preference,\n shipping_fee: buttonVariables.shipping,\n tax_config: buttonVariables.tax_rate_preference,\n tax_rate: buttonVariables.tax_rate,\n version: 'v2',\n // 3-button fields\n button_size: buttonVariables.size,\n button_text_checkout:\n buttonVariables.checkout_button_text_type === CheckoutButtonTextType.Custom\n ? buttonVariables.checkout_button_custom_text\n : buttonVariables.checkout_button_text_type,\n // single button fields\n checkout_button_type: buttonVariables.checkout_button_type,\n button_size_single: buttonVariables.single_button_size,\n button_color_single:\n buttonVariables.single_button_color_type === CheckoutSingleButtonColorType.Custom\n ? buttonVariables.single_button_color\n : buttonVariables.single_button_color_type,\n button_text_single:\n buttonVariables.single_button_text_type === SingleButtonTextType.Custom\n ? buttonVariables.single_button_custom_text\n : buttonVariables.single_button_text_type\n };\n};\n\nexport type SettingsFptiFlags = {\n isSettingsEnabled?: boolean;\n isCartButtonSettingEnabled?: boolean;\n};\n\nexport const buildSettingsTags = (\n merchantSettings: MerchantSettings,\n flags?: SettingsFptiFlags\n) => {\n const {\n payment_method_paylater,\n payment_method_venmo,\n payment_method_apple_pay,\n show_business_name,\n show_business_logo,\n homepage_url,\n stacked_button_layout,\n stacked_button_shape,\n stacked_button_size,\n stacked_button_color_type,\n stacked_button_second_button_type,\n stacked_button_text_type,\n stacked_button_custom_text,\n single_button_color_type,\n single_button_shape,\n single_button_size,\n single_button_color_code,\n cart_button_shape,\n cart_button_size,\n cart_button_color_type,\n cart_button_color_code\n } = merchantSettings;\n\n return {\n ...(flags?.isSettingsEnabled\n ? {\n payment_method_paylater,\n payment_method_venmo,\n payment_method_apple_pay,\n show_business_name,\n show_business_logo,\n homepage_url,\n stacked_button_layout,\n stacked_button_shape,\n stacked_button_size,\n stacked_button_color_type,\n stacked_button_second_button_type,\n stacked_button_text_type,\n stacked_button_custom_text,\n single_button_shape,\n single_button_size,\n single_button_color_type,\n single_button_color_code\n }\n : {}),\n ...(flags?.isCartButtonSettingEnabled\n ? {\n cart_button_shape,\n cart_button_size,\n cart_button_color_type,\n cart_button_color_code\n }\n : {})\n };\n};\n\nexport const recordImpression = (\n fptiData: FptiData,\n onceData?: Partial,\n isFederated?: boolean\n) => {\n if (window.PAYPAL?.analytics?.instance) {\n const { eventName, pageName, ...otherProps } = fptiData;\n const data = {\n ...buildBaseTags(pageName, eventName, 'im'),\n ...otherProps\n };\n if (isFederated) {\n // when Federated don't send base data as that pollutes other events fired outside of our app.\n window.PAYPAL.analytics.instance.recordImpression({ eventName }, { ...data, ...onceData });\n } else {\n window.PAYPAL.analytics.instance.recordImpression({ data }, onceData);\n }\n }\n};\n\nexport const recordClick = (fptiData: FptiData) => {\n if (window.PAYPAL?.analytics?.instance) {\n const { eventName, pageName, ...otherProps } = fptiData;\n const data = {\n ...buildBaseTags(pageName, eventName, 'cl'),\n ...otherProps\n };\n\n window.PAYPAL.analytics.instance.recordClick({ data });\n }\n};\n\nexport const recordActivity = (fptiData: FptiData) => {\n if (window.PAYPAL?.analytics?.instance) {\n const { eventName, pageName, ...otherProps } = fptiData;\n const data = {\n ...buildBaseTags(pageName, eventName, 'ac'),\n ...otherProps\n };\n\n window.PAYPAL.analytics.instance.logActivity({ data });\n }\n};\n\nexport const recordError = (error: Error, info?: React.ErrorInfo) => {\n const isErrorBoundary = !!info?.componentStack;\n if (window.PAYPAL?.analytics?.instance) {\n const data = {\n ...BASE_TAGS,\n error_description: error.message,\n erpg: isErrorBoundary ? 'error_boundary' : undefined\n };\n\n window.PAYPAL.analytics.instance.recordError(data);\n }\n\n if (isErrorBoundary) {\n logErrorClient('ERROR_BOUNDARY_SHOWN', error.message);\n }\n};\n\nexport const startCPLTracking = (fptiData: FptiData, identifier?: string) => {\n if (window.PAYPAL?.analytics) {\n const { pageName, eventName, event, ...otherProps } = fptiData;\n const data = {\n ...buildBaseTags(pageName, eventName, event),\n ...otherProps\n };\n window.PAYPAL.analytics.startCPLTracking(data, identifier);\n }\n};\n\nexport const endCPLTracking = (fptiData?: FptiData, identifier?: string) => {\n if (window.PAYPAL?.analytics) {\n let data;\n if (fptiData) {\n const { pageName, eventName, event, ...otherProps } = fptiData;\n data = {\n ...buildBaseTags(pageName, eventName, event),\n ...otherProps\n };\n }\n window.PAYPAL.analytics.endCPLTracking(data, identifier);\n }\n};\n\nexport const recordServerSide = (\n req: KrakenRequest,\n fptiData: FptiData,\n shouldFlush: boolean = false\n) => {\n const { eventName, pageName = '', ...otherProps } = fptiData;\n const base = buildBaseTags(pageName, eventName, 'im');\n if (req.tracking) {\n // Adding this in now as a stop-gap until we figure out how to handle\n // multiple server-side FPTI calls in one request\n if (shouldFlush) {\n req.tracking.flushServerSide({ ...base, ...otherProps }, true);\n } else {\n req.tracking.addServerSideFptiData({ ...base, ...otherProps });\n req.tracking.doAnalytics();\n }\n }\n};\n\nexport const buildMerchantBaseTags = (eventName: string, event?: string) => {\n const data = {\n product: PRODUCT,\n component: COMPONENT,\n pgrp: FPTI_GROUP,\n space_key: 'SKS09G' // Insightly space key\n };\n if (event) {\n return {\n ...data,\n event_name: eventName,\n e: event,\n event_type: event\n };\n }\n return {\n ...data,\n action: eventName\n };\n};\n\n/**\n * Merchant hosted payment button FPTI\n */\nexport const recordMerchantFPTI = (\n req: KrakenRequest,\n fptiData: MerchantFptiData,\n shouldFlush: boolean = false,\n eventType: string = 'im'\n) => {\n const { eventName, ...otherProps } = fptiData;\n const base = buildMerchantBaseTags(eventName, eventType);\n if (req.tracking) {\n if (shouldFlush) {\n req.tracking.flushServerSide({ ...base, ...otherProps }, true);\n } else {\n req.tracking.addServerSideFptiData({ ...base, ...otherProps });\n req.tracking.doAnalytics();\n }\n }\n};\n","import { HostedButtonDetails } from '@client/typings/Common';\nimport { ButtonConfig } from '@components/buttons/types';\n// We want to prefix this to the field name before we hash it\n// so that we can differentiate between variant inputs and other inputs\n// in case the variant is named the same as our other input names\nconst INTERNAL_VARIANT_NAME_PREFIX = 'NOCODE_VARIANT_';\n\nexport const getVariantFieldName = (name: string) => `${INTERNAL_VARIANT_NAME_PREFIX}${name}`;\n\nexport const getVariantNames = (optionDetails: HostedButtonDetails['option_details']) =>\n optionDetails?.map((option) => option.name) || [];\n\n// Primarily being used for FPTI\nexport const getVariantDetails = (\n optionDetails: HostedButtonDetails['option_details'] | ButtonConfig['variants'],\n isEditor: boolean\n) => {\n const variantDetails = {};\n optionDetails?.forEach((option, index) => {\n const key = `variant_${index + 1}`;\n const variantNameKey = isEditor ? 'variantName' : 'name';\n const variantOptionsKey = isEditor ? 'variantOptions' : 'selection_details';\n const variantName = option[variantNameKey];\n const optionCount = option[variantOptionsKey]?.length || 0;\n const firstVariantDetails =\n index === 0\n ? {\n has_image:\n option[variantOptionsKey]?.some((variant_option) => !!variant_option.images) || false,\n has_price:\n option[variantOptionsKey]?.some((variant_option) => !!variant_option.price) || false\n }\n : {};\n variantDetails[key] = {\n variant_name: variantName,\n option_count: optionCount,\n ...firstVariantDetails\n };\n });\n return variantDetails;\n};\n","import config from '../../../config/config.json';\n\nexport const CONTEXT_ROOT = config.express.mountpath;\nexport const COMPONENT = 'nocodenodeweb';\nexport const PRODUCT = 'quantum_leap';\n\n// Account Types\nexport const BUSINESS = 'BUSINESS';\nexport const INDIVIDUAL = 'INDIVIDUAL';\n\nexport const fptiPageNames = {\n hostedExp: 'container'\n};\n\nexport const FPTI_GROUP = 'main:business:web:hostedcheckout';\n\nexport const facebookApplicationId = '1084613224964631';\nexport const facebookShareLink = 'https://www.facebook.com/dialog/share';\nexport const twitterShareLink = 'https://twitter.com/share';\nexport const whatsappShareLink = 'https://web.whatsapp.com/send';\n"],"names":["initialAppData","initializeAppData","hydrate","App","PaymentApp","LoadablePayment","loadable","resolved","chunkName","isReady","props","key","resolve","__webpack_modules__","importAsync","requireAsync","then","requireSync","id","__webpack_require__","ssr","ErrorPage","_jsx","_ThemeWrapper","theme","_PAYPAL_THEME","children","AppContextProvider","value","_jsxs","Routes","Route","path","element","Notfound","variant","ErrorPageVariant","AccountRestricted","TertiaryButton","action","_Button","tertiary","as","href","undefined","onClick","className","styles","text","ErrorView","title","subtitle","_Container","xxl","src","replaceGeoUrl","serverData","geoAwareDomain","alt","_HeadingText","size","_BodyText","isErrorBoundary","worldReady","useWorldReadyContext","useEffect","recordImpression","eventName","error_type","is_error_boundary","useMemo","NotFound","getLocalizedString","DuplicateButtonFailed","BusinessAccountRequired","SecondaryUserPrivilege","Unknown","window","location","reload","DEFAULT_MERCHANT_CHECKOUT_SETTINGS","Object","freeze","payment_method_paylater","payment_method_venmo","payment_method_apple_pay","show_business_name","show_business_logo","homepage_url","DEFAULT_MERCHANT_STACKED_BUTTON_SETTINGS","stacked_button_layout","ButtonLayout","Vertical","stacked_button_shape","ButtonShape","Rect","stacked_button_size","ButtonSize","Medium","stacked_button_color_type","ButtonColorType","Gold","stacked_button_second_button_type","SecondButtonType","PayPalRecommended","stacked_button_text_type","ButtonTextType","Checkout","stacked_button_custom_text","DEFAULT_MERCHANT_SINGLE_BUTTON_SETTINGS","single_button_color_type","single_button_shape","single_button_size","single_button_color_code","DEFAULT_MERCHANT_CART_BUTTON_SETTINGS","cart_button_shape","cart_button_size","cart_button_color_type","cart_button_color_code","auto_return_url","DEFAULT_MERCHANT_SETTINGS","PaymentButtonType","CheckoutButtonType","CheckoutButtonLayout","CheckoutButtonShape","CheckoutButtonColor","CheckoutSingleButtonColorType","SingleButtonTextType","CheckoutPaypalButtonText","CheckoutButtonSize","CheckoutButtonTextType","NoShipping","ShippingPreference","TaxRatePreference","ReturnUrlType","CheckoutPaymentOptionsOtherThanPayPal","useContext","WorldReadyContext","pageName","css","containerStyles","iconContainerStyles","_CriticalIcon","color","_TitleText","AppContext","React","data","setData","useState","appContextValue","setCustomData","prevData","_set","setCsrfToken","csrfToken","app","setHostedButton","hostedButton","Provider","useAppContext","getVersion","enablePaywall","enablePaywallButtons","version","DeployEnvironment","ButtonVariation","FieldValueContent","DynamicImageSizeIds","ImageError","logger","beaverLogger","Logger","url","prefix","flushInterval","logLevel","addMetaBuilder","currPathname","pathname","getPayloadString","payload","payloadString","JSON","stringify","console","error","logInfoClient","event","info","logErrorClient","logWarnClient","warn","splitImageAssetIds","assetIds","split","transDynamicImageAssetIdToExampleImageUrl","assetId","targetEnv","hostName","STAGING","DEVELOPMENT","SANDBOX","getImageHostName","global","atob","transDynamicImageUrlBySizeId","dynamicImageUrl","sizeId","replace","getImageCount","TYPE_ERROR","SIZE_ERROR","SERVER_ERROR","DIMENSION_TOO_LOW_ERROR","DIMENSION_TOO_HIGH_ERROR","productImages","selectionDetails","productImageAssetIds","selectionDetailsWithImages","filter","selectionDetail","images","String","length","format","MessageFormat","getCurrencyConfig","currency","symbol","currencyCode","maxDecimalPlaces","currencyFormatter","CurrencyFormat","style","resolvedOptions","maximumFractionDigits","dummyParts","formatToParts","find","part","type","formatCurrency","currencyAmount","showCurrencySymbol","showCurrencyCode","currencyOptions","Number","minimumFractionDigits","NumberFormat","init","serverDataDetails","parse","serializedServerData","serverFPTIConfig","serializedFptiConfigs","assign","WorldReady","load","err","toString","ENABLED_FUNDING_METHODS","Venmo","PayLater","transformButtonVariables","linkVariables","reduce","acc","curr","name","getTaxAmount","subtotal","taxRate","roundToMaxDecimal","initValue","maxDecimals","Math","max","round","transSDKFundingConfig","allowedPaymentMethods","disabledPaymentMethods","values","method","includes","enabledPaymentMethods","enableFunding","join","disableFunding","getAllowedPaymentMethodsFromConfigs","merchantCountry","ucpConfig","toggles","flags","profileShipTax","venmoToggle","paymentMethodVenmo","payLaterToggle","paymentMethodPayLater","applePayToggle","paymentMethodApplePay","switches","ApplePay","Card","paymentOption","buttonIsAvailable","paymentMethod","country","globalConfig","enableApplePay","featureFlags","venmoShipTaxSupport","paymentMethodConfig","paymentMethodEnabled","enabled","buttonEligible","buttonIsEligible","config","isSupportedCountry","supportedCountries","isSupportedCurrency","supportedCurrencies","concat","sdkLocaleMapper","locale","JSSDK_SPECIAL_LOCALES_MAP","getValueContent","EstimateLater","Free","isMemoLabelOptional","buttonVariables","mandate_customer_memo","getIsMobile","innerWidth","BASE_TAGS","product","PRODUCT","component","COMPONENT","pgrp","FPTI_GROUP","space_key","SPACE_KEY","buildBaseTags","page","fptiPageNames","event_name","e","event_type","buildAdditionalTags","buttonDetails","sourceType","flowType","merchantSettingsOptions","merchantSettings","isSettingsEnabled","originalButtonVariables","link_variables","getButtonVariablesFromMerchantSettings","hostedButtonId","business","merchantId","shape","buttonShape","buttonColor","otherProps","product_images","primaryVariantOptions","option_details","selection_details","button_shape","button_color","merchant_id","hosted_button_id","source_type","flow_type","image_count","variant_details","getVariantDetails","fptiData","onceData","isFederated","PAYPAL","analytics","instance","recordClick","recordActivity","logActivity","startCPLTracking","identifier","endCPLTracking","optionDetails","isEditor","variantDetails","forEach","option","index","variantOptionsKey","variantName","optionCount","firstVariantDetails","has_image","some","variant_option","has_price","price","variant_name","option_count","CONTEXT_ROOT"],"sourceRoot":""}