{"version":3,"file":"static/js/6e78de5def6341786fa5.bundle.js","mappings":";wJACO,MAAMA,EAAcC,GAEC,mIAEDC,KAAKD,GAUnBE,EAAqB,CAACC,EAAaC,KAA6B,MACzE,OAAIA,GAAsB,QAAnB,EAAIA,EAAIC,QAAQC,WAAG,OAAf,EAAiBC,OAAOC,sBACxBL,MAAAA,OAAG,EAAHA,EAAKM,QAAQ,kBAAmB,IAEpCN,GAWEO,EAAgC,CAACP,EAAaC,KAA6B,MACpF,GAAIA,GAAsB,QAAnB,EAAIA,EAAIC,QAAQC,WAAG,OAAf,EAAiBC,OAAOC,sBAAuB,OAEtD,MAAO,GAD+C,QAAzC,EAAGG,mBAAmBR,EAAIS,MAAM,MAAM,WAAG,aAAtC,EAAwCH,QAAQ,mBAAoB,QAGxF,OAAON,oFCjCJ,MAAMU,EAAkB,IAU1B,IAV2B,OAC5BC,EAAM,QACNC,EAAO,UACPC,EAAS,sBACTC,GAMH,EACG,MAAOC,EAAqBC,IAA0BC,EAAAA,EAAAA,UAASN,GACzDO,GAAUC,EAAAA,EAAAA,QAAuB,MACjCC,GAAWD,EAAAA,EAAAA,SAAQ,IAClBE,EAAYC,IAAiBL,EAAAA,EAAAA,YA8BpC,OA5BAM,EAAAA,EAAAA,YAAU,KACNP,EAAuBL,KACxB,CAACA,KAEJY,EAAAA,EAAAA,YAAU,KACNP,EAAuB,gBACxB,CAACH,KAEJU,EAAAA,EAAAA,YAAU,KACsB,eAAxBR,GACAC,EAAuBL,KAE5B,CAACI,KACJQ,EAAAA,EAAAA,YAAU,KACN,MAAMC,EAAeC,OAAOC,aAAY,KAAK,UACzC,MAAMC,EAAgC,QAAlB,EAAGT,EAAQU,eAAO,OAAsC,QAAtC,EAAf,EAAiBC,cAAc,8BAAsB,OAAgC,QAAhC,EAArD,EAAuDC,UAAUC,MAAM,sBAAc,WAAtE,EAAf,EAAwF,GAC3GJ,IACAL,EAAcK,GACdK,cAAcR,MAEnB,OAEPD,EAAAA,EAAAA,YAAU,KACFL,EAAQU,UACaV,EAAQU,QAAQK,MAAMC,QAA5B,MAAfb,EAAqD,OAAyC,UAEnG,CAACA,IAGAc,IAAAA,cAAAA,MAAAA,CACIC,aAAc,KACNtB,IACAM,EAASQ,QAAUH,OAAOC,aAAY,KAClC,MAAMW,EAA8BC,MAAMC,KAAKC,SAASC,iBAAiB,0BAA0BC,MAAML,IAC9FA,MAAAA,OAAM,EAANA,EAAQP,aAAc,QAAQT,cAErCgB,IACAA,EAAOM,UAAY,SAKnCC,aAAc,KACN9B,GACAkB,cAAcZ,EAASQ,UAE9B,eACY,iBAAgB,qBACTb,EACpBH,QAASA,EACTiC,IAAK3B,irBCpCjB,QAvBA4B,eAA4C7C,EAA8B8C,EAA2BC,GAAgB,MACjH,MAAMC,QAA0CC,EAAAA,EAAAA,SAA4B,IAAIC,EAAAA,2BAA2BJ,EAAWC,GAAU/C,GAmBhI,OAlBmEgD,MAAAA,GAAyB,QAArB,EAAJA,EAAMG,2BAAmB,WAArB,EAAJ,EAA2BC,KAAI,CAACC,EAAyCC,KACxI,IAAIC,EAAkB,GACtB,GAA+B,QAA3BF,EAAaG,gBAAoDC,IAA7BJ,EAAaK,aAA6BC,SAASN,EAAaK,YAAa,IAAM,EAAG,CAC1H,MAAME,EAAO,IAAIC,KACXC,EAAQC,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,UACjCC,EAAeH,GAAAA,CAAMV,EAAac,UAAUF,OAAO,UAErDV,EADAO,IAAUI,EACQ,qBAAqBH,GAAAA,CAAMV,EAAac,UAAUF,OAAO,WACpEC,IAAiBH,GAAAA,CAAMH,EAAKQ,QAAQR,EAAKS,UAAY,IAAIJ,OAAO,UACrD,wBAAwBF,GAAAA,CAAMV,EAAac,UAAUF,OAAO,WAE5D,eAAeF,GAAAA,CAAMV,EAAac,UAAUF,OAAO,gBAGzEV,EAAkBvD,EAAIsE,eAAepE,IAAIC,OAAOoE,uBAAyBvE,EAAIsE,eAAepE,IAAIC,OAAOoE,uBAAyB,GAEpI,OAAO,EAAP,KAAYlB,GAAY,IAAEE,gBAAAA,qLCtBlCQ,IAAAA,OAAaS,KACbT,IAAAA,OAAaU,KACbV,IAAAA,OAAaW,KAGb,MAAMT,EAAS,iBASTU,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,MAAOC,EAAG,EAAGC,EAAG,IAE7BC,iBAAiB,GAGRC,EAAiB,CAACC,EAAmBb,KAA2D,QACzG,IAAIc,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEJ,IAEIT,EAAeD,EAAU3E,MAAM,KAC/B6E,EAAgBD,EAAa,GAC7BE,EAAcF,EAAa,GAC3BG,EAAYH,EAAa,GAGzBI,EAAsBH,EAAc7E,MAAM,KAC1CiF,EAAYD,EAAoB,GAChCE,EAAYF,EAAoB,GAGhCG,EAAoBL,EAAY9E,MAAM,KACtCoF,EAAUD,EAAkB,GAC5BE,EAAUF,EAAkB,GAC9B,MAAOG,GACL,OAGJ,MAAMC,EAAc,GAAGN,KAAsB,QAAb,EAAIC,SAAS,aAAT,EAAWrF,QAAQ,KAAM,OACvD2F,EAAY,GAAGJ,KAAkB,QAAX,EAAIC,SAAO,aAAP,EAASxF,QAAQ,KAAM,OAEjD4F,EAAuBlC,GAAAA,CAAMgC,MAAAA,OAAW,EAAXA,EAAa1F,QAAQ,KAAM,MACxD6F,EAAqBnC,GAAAA,CAAMiC,MAAAA,OAAS,EAATA,EAAW3F,QAAQ,KAAM,MAG1D,IAAM4F,EAAqBE,YAAaD,EAAmBC,UACvD,OAIJ,MAAMC,EAAU9B,EAAe+B,YAAYC,aAAaC,UAAU,EAAGjC,EAAe+B,YAAYC,aAAaE,OAAS,GACtH,GAAIjB,EAAW,CACX,MAAMkB,EAAWlB,EAAUgB,UAAU,EAAGhB,EAAUiB,OAAS,GAO3D,MAAO,CACHE,IAFQ,GAAGN,IALSK,MAAAA,OAAQ,EAARA,EAAUpG,QAAQ,IAAK,KAAKsG,oBAQhDC,IALYH,EAASjG,MAAM,KAAK,GAMhCqG,MAAOC,EAAgBb,GACvBc,IAAKD,EAAgBZ,MAQ3BY,EAAmBE,GACdjD,GAAAA,CAAMiD,EAAK/C,OAAOA,GAASA,GAAQO,GAAG,mBAAmByC,QAGvDC,EAAoB,CAACC,EAA6B7C,KAI3D,GAFoBP,GAAAA,GAAQW,UAAUyC,EAAgBN,MAAOM,EAAgBJ,KAGzE,OACI7E,IAAAA,cAACkF,EAAAA,GAAK,CACFC,UAAW,4BACXC,aAAchD,EAAegD,cAAgB,GAC7CZ,IAAKS,EAAgBT,IACrBa,QAASJ,EAAgBP,IACzBY,MAAOL,EAAgBP,IACvBa,cAAe9C,KAQlB+C,EAAqB,CAC9BC,EACArD,KAGA,IADkBqD,EAEd,OAGJ,MAKMC,EAVYD,EAKOnH,MAAM,KAEH4C,KAAIyE,GAAS3C,EAAe2C,EAAOvD,KAG1BlB,KAAI0E,GAAeA,GAAeZ,EAAkBY,EAAaxD,KAEtG,OAAOsD,EAAkB1F,IAAAA,cAAAA,IAAAA,SAAAA,KAAG0F,GAAsB1F,IAAAA,cAAAA,IAAAA,SAAAA,uGC3HtD,MAAM6F,EAAyB,eAiFlBC,EAAiB,CAACC,EAA0CC,EAA0BC,KAAyC,QACxI,MAAMC,EAAYF,GAAoBH,EACtC,IAAIM,EAAuC,QAAvB,GAAGC,EAAAA,EAAAA,GAASL,UAAW,OAAwH,QAAxH,EAApB,EAAsBxF,MAAM8F,IAA6B,aAAKA,MAAAA,GAAmB,QAAN,EAAbA,EAAeC,YAAI,WAAN,EAAb,EAAqB7B,cAAc8B,WAAWL,MAAAA,OAAS,EAATA,EAAWzB,cAAc8B,kBAAO,WAAxH,EAApB,EAA8IC,UACrK,IAAKL,GAAoBM,EAAAA,GAAAA,UAAoB,OACzC,MAAMC,EAAkBC,aAAaC,QAAQ,uBAC7C,IAAIC,EAA+C,GAC/CH,IACAG,EAAiBC,KAAKC,MAAML,IAEhC,MAAMM,EAAyE,QAA3D,EAAGH,EAAetG,MAAK0G,GAAQA,EAAKC,YAAcjB,WAAS,aAAxD,EAA0DkB,UACjF,IAAGH,EAGC,OAFAb,EAAmBa,EAK3B,OAAOb,GAGEiB,EAAsB,CAACrB,EAA6BC,EAA0BC,KAGvF,IAAIE,EAAmBJ,GAAcA,EAFnBC,GAAoBH,GAGtC,IAAKM,GAAoBM,EAAAA,GAAAA,UAAoB,OACzC,MAAMC,EAAkBC,aAAaC,QAAQ,uBAC7C,IAAIC,EAA+C,GAC/CH,IACAG,EAAiBC,KAAKC,MAAML,IAEhC,MAAMM,EAAyE,QAA3D,EAAGH,EAAetG,MAAK0G,GAAQA,EAAKC,YAAcjB,WAAS,aAAxD,EAA0DkB,UACjF,IAAGH,EAGC,OAFAb,EAAmBa,EAK3B,OAAOb,GAIEkB,EAAoB,CAACtB,EAA0CC,KAAgD,MACxH,MAAMG,EACFJ,IAGC,QAHS,EACVA,EAAWxF,MACP8F,GAAiBA,EAAcC,MAAQD,EAAcC,KAAK7B,cAAc8B,SAAWP,EAAiBvB,cAAc8B,gBACrH,aAFD,EAEGC,WACP,GAAKL,EAGL,OAAOA,gGClIL,SAAUmB,EACZC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,GAAIF,GAA2B,IAAdA,EAAiB,CAC9B,MAAMG,EAAcF,GAAgBA,EAAaG,YAAe,IAC1DC,EAkBd,SAA4BC,EAAiBD,GACzC,GAAIC,GAAUD,EAAiB,CAC3B,MAAME,EAAgBD,EAAOE,QAAQ,GACrC,OAAOnG,EAAAA,EAAAA,QAAOgG,GAAmB,GAAIE,EAAe,KAExD,MAAO,GAvBqBE,CAAmBT,EAAWE,GAEtD,OACI5H,IAAAA,cAACoI,EAAAA,gBAAe,CACZb,QAASA,EACTE,GAAIA,EACJD,SAAUA,EACVE,UAAWA,EACXW,YAAaR,EACbS,UAAQ,EACRV,UAAWG,EACXjH,KAAM,KAId,OAAO,6DC9Bf,MAoBA,EApBsByG,IAClB,GAAId,EAAAA,GAAAA,WAAsBnH,OAAOiJ,WAAY,CACzC,MAAMnD,EAAemC,EAAQxJ,QAAQqH,aACrC,GAAIA,EACA,OAAIA,EAAazC,IAAMrD,OAAOiJ,YAAcnD,EAAazC,GAAGE,EACjD,KACAuC,EAAaoD,IAAMlJ,OAAOiJ,YAAcnD,EAAaoD,GAAG3F,EACxD,KACAuC,EAAaqD,IAAMnJ,OAAOiJ,YAAcnD,EAAaqD,GAAG5F,EACxD,KACAuC,EAAasD,IAAMpJ,OAAOiJ,YAAcnD,EAAasD,GAAG7F,EACxD,KAEA,KAInB,MAAO,gFClBJ,MAAM8F,EAAqB,CAACC,EAA+CC,IACvED,GAAmBA,EAAgBrI,MAAK8F,GAAiBA,EAAcC,MAAQD,EAAcC,KAAK7B,cAAc8B,SAAWsC,EAASpE,cAAc8B,SAEhJuC,EAA+B,CAACC,EAAyBF,IAC3DA,GAAYE,GAAQA,EAAKF,GAEvBG,EAAoC,CAACD,EAAyBF,IAChEA,GAAYE,GAAQA,EAAKF,GAKvBI,EAAiC,CAACC,EAA6BC,KAAoC,MAC5G,OAAOA,GAAWhJ,MAAMiJ,QAAQD,KAAYA,MAAAA,GAA4G,QAArG,EAAPA,EAAS5I,MAAM8I,GAAcH,IAAWG,MAAAA,OAAI,EAAJA,EAAMC,QAAQ7E,cAAc8B,UAAW2C,EAAQzE,cAAc8B,gBAAO,WAArG,EAAP,EAA8GgD,6ICNvJ,MAAMC,EAAqB7I,MAAO8I,EAAsBlC,KAC3D,MAAMmC,EAAuBnC,EAAQvJ,KAAOuJ,EAAQvJ,IAAIC,OAAO0L,WAC/D,GAAIF,GAAYA,EAASnF,OAAS,IAA+B,KAAzBoF,QAAwDnI,IAAzBmI,GAAqC,CACxG,MAAME,EAAgC,GACtCH,EAASvI,KAAI+F,IACT,MAAM4C,EAAuB,CACzBC,OAAQ7C,EAAK6C,OACbC,uBAAwB9C,EAAK8C,wBAEjCH,EAAMI,KAAKH,MAGf,MAAMI,EAAiD,CACnDC,WAAYR,EACZS,MAAOP,GAELQ,EAAyB,IAAIC,EAAAA,uBAAuBJ,OAAa1I,GAAW,GAClF,IACI,MAAM+I,QAAeC,EAAAA,EAAAA,SAAiBH,EAAwB7C,EAAQiD,eACtE,GAAIF,EACA,OAAOA,EAEb,MAAOG,GACLC,QAAQC,IAAI,QAASF,IAG7B,OAAO,MAGEG,EAAwBC,IACjC,GAAa,KAATA,GAAAA,MAAeA,EACf,MAAO,GAGX,IAAIC,EAAoB,GACpBpJ,EAAO,IAAIC,KACf,MAAMoJ,EAAWF,EAAKvM,MAAM,KAC5B,IAAI0D,EAAeL,KAAKG,MACxB,GAAIiJ,QAA4BxJ,IAAhBwJ,EAAS,IAAoBA,EAASzG,OAAQ,CAC1D,IAAI0G,EAAyB,GAsB7B,OArBAD,EAAS7J,KAAK+F,IAGV,GAFAvF,EAAO,IAAIC,KACXK,EAAeL,KAAKG,MAChBL,SAASwF,EAAM,IAAM,EAAG,CACxB,IAAIgE,EAAexJ,SAASwF,EAAM,IAC9BiE,EAAUlJ,EACd,KAAOiJ,EAAe,GAClBC,EAAUxJ,EAAKQ,QAAQR,EAAKS,UAAY,GACL,MAA/BN,GAAAA,CAAMqJ,GAASnJ,OAAO,MAA+C,MAA/BF,GAAAA,CAAMqJ,GAASnJ,OAAO,MAC5DkJ,IAGRH,EAAoBjJ,GAAAA,CAAMqJ,GAASnJ,OAAO,SACX,KAA3BiJ,EACAA,EAAyB,GAAGA,QAA6BF,KAEzDE,EAAyBF,EACzBI,EAAUxJ,EAAKQ,QAAQR,EAAKS,UAAYV,SAASwF,EAAK,GAAI,UAI/D,eAAe+D,IACnB,CACHF,EAAoBjJ,GAAAA,CAAMG,GAAcD,OAAO,SAC/C,IAAIkJ,EAAexJ,SAASoJ,EAAM,IAC9BK,EAAUlJ,EACVmJ,GAAO,EACX,KAAOF,EAAe,GAClBC,EAAUxJ,EAAKQ,QAAQR,EAAKS,UAAY,GACL,MAA/BN,GAAAA,CAAMqJ,GAASnJ,OAAO,MAA+C,MAA/BF,GAAAA,CAAMqJ,GAASnJ,OAAO,KAC5DkJ,IAEAE,GAAO,EAOf,OAJAL,EACIK,GAAiB,MAATN,EACF,YAAYhJ,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,WACrCF,GAAAA,CAAMqJ,GAASnJ,OAAO,cACzB,eAAe+I,MAuCxBM,EAAYtG,IACd,QAAavD,IAATuD,GAA+B,KAATA,EAAa,CACnC,MAAMuG,EAAOvG,EAAKxG,MAAM,KACxB,GAAI+M,GAAQA,EAAK/G,OAAS,EAAG,CACzB,IAAIgH,EAAkBzJ,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,YAE/C,OADAuJ,EAAkB,GAAGA,KAAmBD,EAAK,SAASA,EAAK,GAAGE,gBACvDD,GAGf,MAAO,IAQEE,EAA2BC,IACpC,IAAIC,EAAkB,CAClBZ,kBAAmB,GACnBa,WAAY,IAEhB,IAAKF,IAAuBA,EAAmBnH,OAC3C,OAAOoH,EAEX,IAAK,IAAIE,EAAQ,EAAGA,EAAQH,EAAmBnH,OAAQsH,IAAS,CAC5D,MAAM3E,EAAOwE,EAAmBG,GAChC,GAAuB,QAAnB3E,EAAK3F,gBAA4CC,IAArB0F,EAAKzF,aAA6BC,SAASwF,EAAKzF,YAAa,IAAM,EAAG,CAClG,MAAME,EAAO,IAAIC,KACXC,EAAQC,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,UACjCC,EAAeH,GAAAA,CAAMoF,EAAKhF,UAAUF,OAAO,UAC3C8J,EAAWhK,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,KAC1C,GAAIH,IAAUI,EAAc,CAOxB0J,EAAkB,CACdZ,kBAN6B,KAA7BM,EAASnE,EAAK6E,WACRrK,SAASI,GAAAA,CAAMuJ,EAASnE,EAAK6E,YAAY/J,OAAO,KAAM,IAAM,IAAMN,SAASoK,EAAU,IAAM,GACvF,qBAAqBhK,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,WAC9C,wBAAwBF,GAAAA,CAAMH,EAAKQ,QAAQR,EAAKS,UAAY,IAAIJ,OAAO,WAC3E,GAGN4J,WAAY1E,EAAK8E,WAErB,MAGAL,EAAkB,CACdZ,kBAFoB,eAAejJ,GAAAA,CAAMoF,EAAKhF,UAAUF,OAAO,WAG/D4J,WAAY1E,EAAK8E,WAErB,OAIZ,OAAOL,GAGEM,EAAoBP,IAC7B,IAAIC,EAAkB,CAClBZ,kBAAmB,GACnBa,WAAY,IAEhB,MAAM1E,EAAOwE,EACb,GAAuB,QAAnBxE,EAAK3F,gBAA4CC,IAArB0F,EAAKzF,aAA6BC,SAASwF,EAAKzF,YAAa,IAAM,EAAG,OAClG,MAAME,EAAO,IAAIC,KACXC,EAAQC,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,UACjCC,EAAeH,GAAAA,CAAMoF,EAAKhF,UAAUF,OAAO,UAC3C8J,EAAWhK,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,KACpCkK,GAA8B,QAAd,EAAAhF,EAAK6E,iBAAS,aAAd,EAAgBzH,UAAU,EAAE,KAAM,KACxD,GAAIzC,IAAUI,EAAc,CAKxB0J,EAAkB,CACdZ,kBAJArJ,SAASwK,EAAe,IAAM,IAAMxK,SAASoK,EAAU,IAAM,GACvD,qBAAqBhK,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,WAC9C,wBAAwBF,GAAAA,CAAMH,EAAKQ,QAAQR,EAAKS,UAAY,IAAIJ,OAAO,WAG7E4J,WAAY1E,EAAK8E,eAElB,CAEHL,EAAkB,CACdZ,kBAFoB,eAAejJ,GAAAA,CAAMoF,EAAKhF,UAAUF,OAAO,WAG/D4J,WAAY1E,EAAK8E,YAI7B,OAAOL,0HC1ML,MAAOQ,EAGTC,YAAYC,GAML,KAAAC,YAAc,IAAM,+BACpB,KAAAC,mBAAqB,IAAM,+BAC3B,KAAAC,cAAgB,IAA0B,cAP7CC,KAAKJ,QAAUA,GA0CvB,QAAeK,EAAAA,GAAoC,CAC/CC,OAPJ/L,eAAsBgM,EAA+C7O,GAGjE,aAFkB2O,EAAAA,GAA0BE,EAAMP,QAAS,QACtCtL,MAOrB2G,GAAI,oCACJkF,MAjBiBC,GACV,IAAIV,EAAuCU,MAAAA,OAAI,EAAJA,EAAMxK,eAAepE,IAAIC,OAAOmO,qKC/BhF,MAAOpL,EAITmL,YAAYvL,EAA2BC,GAOhC,KAAAwL,YAAc,KAAK,MACtB,OAAqB,QAArB,EAAOG,KAAK5L,iBAAS,aAAd,EAAgBiM,MAAK,CAACC,EAAGC,IAAMD,MAAAA,GAAAA,EAAGE,iBAAHF,MAAsBC,GAAAA,EAAGC,kBAAmBF,MAAAA,OAAC,EAADA,EAAGE,kBAAkBD,MAAAA,OAAC,EAADA,EAAGC,iBAAkB,GAAK,IAAG9L,KAAI+F,IAAI,YAAI,yBAAyBA,EAAK+F,mBAAmBR,KAAK3L,WAA+B,QAAxB,EAAIoG,EAAK+F,uBAAe,aAApB,EAAsB1I,YAAUwD,YAE9O,KAAAwE,mBAAqB,IAAM,wBAC3B,KAAAC,cAAgB,IAA0B,UAV7CC,KAAK5L,UAAYA,EACjB4L,KAAK3L,QAAUA,GA8CvB,QAAe4L,EAAAA,GAAoC,CAC/CC,OApBJ/L,eAAuCgM,EAAmC7O,GAA4B,MAElG,MAAMmP,EAA2C,CAC7CC,MAAO,EACPC,cAAe,WACfC,QAAS,GACTC,cAAexL,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,cACxCuL,QAAsB,QAAf,EAAEX,EAAM9L,eAAO,SAAI0M,EAAAA,EAAAA,GAAWzP,GACrC0P,UAAWb,EAAM/L,UACjB6M,oBAAqB5L,GAAAA,CAAMF,KAAKG,OAAOC,OAAO,uBAC9C2L,GAAI,EACJC,eAAgB,GAKpB,aAHuBC,EAAAA,EAAAA,IAAwB,CAAEC,cAAe/P,GAAOmP,IASvExF,GAAI,8HChEF,MAAOqG,UAA4BrB,EAAAA,GAErCN,YAAY4B,GACRC,MAAM,CAAEC,mBAAmB,EAAMC,gBAAiB,wBAAyBC,SAAU,0BAFjF,KAAAJ,oBAA8B,GAK/B,KAAAK,uBAAyB,IAAM5B,KAAKuB,oBACpC,KAAA1B,YAAc,IAAM,wBACpB,KAAAC,mBAAqB,IAAM,wBAC3B,KAAAC,cAAgB,IAA0B,UAL7CC,KAAKuB,oBAAsBA,GAoBnC,QAAetB,EAAAA,GAAoC,CAC/CC,OARJ/L,eAAsBgM,EAA4B7O,GAC9C,MACMuQ,EAD0BvQ,EAAIsE,eAAepE,IAAIC,OAAOqQ,yBACnB,GACrCC,QAAY9B,EAAAA,GAA0B4B,EAAS,OAErD,OADyBE,EAAIzN,MAAQyN,EAAIzN,MAKzC6L,MAfiB6B,GACbA,EAAUvQ,QAAUuQ,EAAUvQ,OAAO8P,oBAC9B,IAAID,EAAoBU,EAAUvQ,OAAO8P,qBAE7C,IAAID,EAAoB,6GCf7B,MAAOW,UAA+BhC,EAAAA,GAExCN,YAAYuC,GACRV,MAAM,CAAEC,mBAAmB,EAAMC,gBAAiB,2BAA4BC,SAAU,6BAFpF,KAAAO,uBAAiC,GAKlC,KAAAC,0BAA4B,IAAMnC,KAAKkC,uBACvC,KAAArC,YAAc,IAAM,2BACpB,KAAAC,mBAAqB,IAAM,2BAC3B,KAAAC,cAAgB,IAA0B,UAL7CC,KAAKkC,uBAAyBA,GAoBtC,QAAejC,EAAAA,GAAoC,CAC/CC,OARJ/L,eAAsBgM,EAA+B7O,GACjD,MACMuQ,EAD6BvQ,EAAIsE,eAAepE,IAAIC,OAAOyQ,wBACnB,GACxCH,QAAY9B,EAAAA,GAA0B4B,EAAS,OAErD,OAD4BE,EAAIzN,MAAQyN,EAAIzN,MAK5C6L,MAfiB6B,GACbA,EAAUvQ,QAAUuQ,EAAUvQ,OAAOyQ,uBAC9B,IAAID,EAAuBD,EAAUvQ,OAAOyQ,wBAEhD,IAAID,EAAuB,wyBCgBtC,IAAIG,GAA4B,EAI1B,MAAOC,EAKT1C,YAAYjF,EAAmB4H,EAAmBC,GAM3C,KAAA1C,YAAc,IAAM,kBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAAiB,OAPpCC,KAAKtF,UAAYA,EACjBsF,KAAKsC,UAAYA,EACjBtC,KAAKuC,wBAA0BA,GAA2B,IAyNlE,MAAMC,EAA8BC,IAChC,IACI,MAAMC,EAAyC,GAY/C,OAV4BD,EAAa3Q,MAAM,KAC3B6Q,SAAQC,IACxB,MAAOC,EAAqBC,GAAkBF,EAAc9Q,MAAM,KAC5DiR,EAAgB9N,SAAS4N,EAAqB,IACpDH,EAAkBlF,KAAK,CACnBuF,cAAAA,EACAD,eAAAA,OAIDJ,EACT,MAAOtL,GACL8G,QAAQC,IAAI/G,KAMP4L,EAAsB7O,MAAO8O,EAAkBlI,KACxD,MAAMmI,EAA+C,CACjDC,IAAK,CAACF,GACNG,QAAS,CACLC,WAAYtI,EAAQnF,eAAe+B,YAAY2K,UAC/CgB,WAAYvI,EAAQnF,eAAe+B,YAAY4L,WAEnDC,mBAAmB,EACnBC,gBAAiB,KAErB,IACI,MAAMC,QAA6BC,EAAAA,EAAAA,uBAC/B,CAAEtC,cAAetG,GACjBmI,GAKJ,GADAnI,EAAQ6I,UAAUC,MAAM,kCAAmCvJ,KAAKwJ,UAAUJ,IACtEA,EAAqB5L,OAAS,EAAG,aACjC,MAAMiM,GAA0C,QAAvB,EAAAL,EAAqB,UAAE,aAAvB,EAAyBM,uBAA8C,QAA3B,EAAIN,EAAqB,UAAE,OAE/F,QAF+F,EAAvB,EAAyBM,oBAAoBjQ,MACjHkQ,GAAiD,4BAAlBA,MAAAA,OAAQ,EAARA,EAAUC,cAC7C,OAAO,QAAP,EAFwE,EAEtEC,aAAK,WAFwF,EAAvB,EAE/DC,WACV,OAAQL,GAAyC,IAArBA,EAAqCA,OAAZhP,EAEzD,OACF,MAAOqC,GAGL,YADA2D,EAAQ6I,UAAU3F,MAAM,4CAA4C7G,OAQ5E,GAAeiN,EAAAA,EAAAA,IAA2B,CACtCpJ,GAAI,iEACJiF,OAzPJ/L,eAAwCgM,EAA6B7O,GAAmB,QAIpF,MAAMiR,EAAuD,QAAhC,EAAGpC,EAAMoC,+BAAuB,QAAI,GAC3DrQ,EAAYZ,EAAIsE,eAAepE,IAAIC,OAAO6S,4BAC1CC,EAAAA,EAAAA,IACEtK,EAAAA,GAAAA,UACM,IAAIuK,IAAI1R,OAAO2R,SAASC,KAAKpJ,YAC7BhK,EAAIsE,eAAe+O,IAAIC,WACzBC,EAAAA,QACN9P,EACN,IAAI+P,EACJ,IAAI,MACAA,QAAwBC,EAAAA,EAAAA,cACpB,CAAE1D,cAAe/P,GACmB,KAApCiR,MAAAA,OAAuB,EAAvBA,EAAyBzK,SAAgB5F,IAAc8S,OAAOC,MAAMD,OAAO9S,IACrE8S,OAAO9S,GACwC,QAD9B,QACX8Q,EAAoB7C,EAAMzF,UAAWpJ,UAAI,QAAI6O,EAAMzF,UAC/DyF,EAAMmC,WACZ,MAAOrE,GACLC,QAAQC,IAAI,mCAAoCF,GAWM,OARrD6G,GAAmB5S,IACpB4S,QAAwBC,EAAAA,EAAAA,cACpB,CAAE1D,cAAe/P,GACjB6O,EAAMzF,UACNyF,EAAMmC,aAIVwC,GAAmC,QAAhB,EAACA,SAAe,OAAf,EAAiBI,kBACrCJ,QAAwBC,EAAAA,EAAAA,cACpB,CAAE1D,cAAe/P,GACuC,QADlC,QAChB0R,EAAoB8B,EAAgBK,SAAU7T,UAAI,QAAI6O,EAAMzF,UAClEyF,EAAMmC,YAGd,MAAM8C,EAA6BzR,MAAMiJ,QAAQkI,GAC3CA,EAAgB,GAChBA,EAMN,IAAIO,EAAO,KAA8BD,GACzC,MAAME,EAA0BD,EAAQE,WAAaF,EAAQE,WAAWzN,OAAS,EAEjF,GAAIuN,GAAWA,EAAQF,SAAW,EAAG,SACjC,IAAIK,GAA4C,EAE9B,QAAlB,EAAAH,EAAQE,kBAAU,OAAlB,EAAoB5C,SAAQ8C,IACxB,MAAMC,EAAyBnD,EAAwBxO,MACnD4R,GAAmBA,EAAgBC,qBAAuBH,EAAUG,qBAGpEF,EACAD,EAAUI,eAAiBH,MAAAA,OAAsB,EAAtBA,EAAwBG,eAEnDL,GAAmC,KAI3C,MAAMM,EAAc,IAAIC,EAAAA,kCACpBV,EAAQF,SACRhF,EAAMmC,UACN+C,GASEW,EAA6G,QAAhG,SAPsCC,EAAAA,EAAAA,SAAgCH,EAAaxU,GACjG4U,OAAOjI,SAEF,IAIqClK,MAAKO,IAAI,YAAwC,sBAA3B,QAAT,EAAAA,EAAKwF,YAAI,aAAT,EAAW7B,cAAc8B,kBAA8B,aAA7F,EAA+FC,UAC/GmM,EAAoBH,EACpBxD,EAA2BwD,QAC3BjR,EACAqR,EAAwD,GAG9D,IAAKf,EAAQH,gBAAiB,OAG1B,MAAMmB,GAA+B,QAAlB,EAAAhB,EAAQE,kBAAU,aAAlB,EAAoB7Q,KAAIP,MAAAA,IAAkB,MACzD,MAAMmS,QAAwBC,EAAAA,EAAAA,yBAC1B,CAAElF,cAAe/P,EAAKkV,oBAAqB,IACpC,QAAP,EAAAnB,SAAO,OAAP,EAASH,gBACHG,EAAQH,gBAERG,EAAQF,SACdhF,EAAMmC,UACNmD,EAAUG,mBACVrD,EAAwBkE,QAAOC,GAASA,EAAMd,qBAAuBH,EAAUG,qBAC/E,MAKJ,GAA+B,IAA3BU,EAAgBxO,QAAgBsK,EAChCqD,EAAUI,eAAiBS,EAAgB,OACxC,OAEH,MAAMK,EAAqBR,MAAAA,GAC0D,QADzC,EAAjBA,EACrBpS,MAAK6S,GAAeA,EAAY7D,gBAAkB0C,EAAUG,4BAAmB,WADzC,EAAjB,EAErB9C,eAAe7K,cAChB8B,OAGC8M,EAAsDP,EAAgBvS,MACxE+S,IAAuB,eAAiC,QAA7B,EAAAA,EAAwB3C,aAAK,aAA7B,EAA+BlM,cAAc8B,UAAW4M,IAAyD,QAAnC,EAAAG,EAAwBC,mBAAW,aAAnC,EAAqC9O,cAAc8B,UAAW4M,KAGvKE,GAAoBzE,IACpBqD,EAAUI,eAAiBgB,GAInC,MAAMG,EAAa,OACZvB,GAAS,IACZwB,gBAAiBX,IAGrBF,EAA8B5I,KAAKwJ,QACjC,SAEAE,QAAQC,WAAWd,GAK7B,GAAID,EAA8BtO,OAAS,EAAG,CAC1C,MAAMsP,EAAmBhB,EACpBK,QAAOhB,GAAaA,GAAaA,EAAUI,iBAC3CnR,KAAI+Q,IACM,CACHG,mBAAoBH,EAAUG,mBAC9BC,eAAgBJ,EAAUI,eAC1B7B,oBAAqByB,EAAUzB,wBAI3C,GAAIsB,EAA0B,GAAKA,IAA4B8B,EAAiBtP,OAAQ,CACpF,MAAMuP,QAAiBC,EAAAA,EAAAA,mCACnB,CAAEjG,cAAe/P,EAAKkV,oBAAqB,IAC3CpB,EAAYD,SACZhF,EAAMmC,UACN8E,GAEAC,GAAgC,IAApBA,EAASvP,SAGrBuN,EAAUgC,EAAS,UAI1B,GAA6C,IAAzCjB,EAA8BtO,SAAiB0N,GAAoCjD,EAAwBzK,OAAS,EAAG,CAC5H,MAAMuP,QAAiBC,EAAAA,EAAAA,mCACnB,CAAEjG,cAAe/P,EAAKkV,oBAAqB,IAC3CpB,EAAYD,SACZhF,EAAMmC,UACNC,GAGA8E,GAAYA,EAASvP,OAAS,IAG9BuN,EAAUgC,EAAS,IAQ3B,MAAME,GAAcC,EAAAA,EAAAA,yBAAwBnC,EAAS/T,EAAIsE,eAAe+B,aAEpE4P,IACAlC,EAAQoC,gBAAkBF,GAMlC,OAFAnF,GAAmB,EAEZiD,GA+DPlF,MAzQiB6B,IACjB,MAAMtH,GAAYgN,EAAAA,EAAAA,qCAAoC1F,GACtD,GAAItH,EACA,OAAO,IAAI2H,GAAsB3H,GAAYsH,EAAUpM,eAAe+B,YAAY2K,UAAW,IAE7F,MAAM,IAAIqF,MAAM,wKC7DjB,MAAMC,EAAkB,CAC3BhP,EACA6O,EACA5O,EACAgP,EACAC,KAEA,IAAKL,IAAoB7O,EACrB,OAAO,KAEX,MAAM3C,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrC4F,GAAI,CAAE9F,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCyR,GAAI,CAAE3R,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzC0R,SAAUF,IAA4B,GAGpCG,EAAkB,CACpBjQ,IAAKyP,GAAoC,GACzC5O,QAASA,GAAoB,IAEjC,OACIrF,IAAAA,cAACkF,EAAAA,GAAK,iBACEuP,EAAG,CACPrP,aAAcA,EACdsP,YAAaL,EACb9O,cAAe9C,EACfkS,qBAAqB,EACrBC,uBAAuB,mLCnB7B,MAAOC,EAIT1I,YAAY2I,EAAe7O,GAOpB,KAAAoG,YAAc,IAAM,cAAcG,KAAKvG,WACvC,KAAAqG,mBAAqB,IAAM,aAC3B,KAAAC,cAAgB,IAA6B,UARhDC,KAAKsI,QAAUA,EACftI,KAAKvG,SAAWA,GA8ExB,QAAe8O,EAAAA,GAAuC,CAClDrI,OA5CJ/L,eAAyCgM,EAA2C7O,GAChF,IAAIkX,EACJ,MAAM1C,EAAc,IAAIpG,EAAAA,uCAAuCpO,EAAIsE,eAAepE,IAAIC,OAAOmO,SACvF6I,EAAcnX,EAAIsE,eAAepE,IAAIC,OAAOgX,YAC5CC,EAAepX,EAAIsE,eAAepE,IAAIC,OAAOiX,aAC7CC,QAA4BC,EAAAA,EAAAA,SAA4C9C,EAAaxU,GAC3F,IAEIuX,EAFAC,EAA6B,GAC7BC,EAAmC,GAEnCC,EAAgB,GACpB,GAAIL,EAAgB,CAChB,MAAMM,EAAU,0BAIhB,GAHAT,EAAkBrI,EAAM1G,WAAauL,OAAOC,MAAMD,OAAO7E,EAAM1G,WACzDuL,OAAO7E,EAAM1G,gBACPuJ,EAAAA,EAAAA,qBAAoBgC,QAAO0C,EAAAA,EAAAA,IAAoCpW,IAAOA,GAC9EqX,EAAe7Q,OAAS,GAAK0Q,EAAiB,qBAC9CO,EAAaJ,MAAAA,GAA0F,QAA5E,EAAdA,EAAgB5U,MAAM0G,GAAcuK,OAAOvK,EAAKyO,wBAA0BV,WAAgB,OAA6B,QAA7B,EAA1F,EAA4FW,mCAA2B,WAAzG,EAAd,EAAyHzU,KAAKgS,GAAeA,IAC1JmC,EAAwBF,MAAAA,GAA0F,QAA5E,EAAdA,EAAgB5U,MAAM0G,GAAcuK,OAAOvK,EAAKyO,wBAA0BV,WAAgB,WAA5E,EAAd,EAA4FK,sBACpHE,IAAwB,QAAV,EAAAA,SAAU,aAAV,EAAYjR,SAAU,IAAe,QAAd,EAAIiR,SAAU,OAAV,EAAYK,QAAQ,GAAGZ,MAChE,IAAIa,EAAuB,GAC3B,KAAIN,IAAwB,QAAV,EAAAA,SAAU,aAAV,EAAYjR,SAAU,GAKpC,MAAO,CAAEgR,eAAgB,KAAMpO,UAAW,KAAMqO,gBAAYhU,EAAW8T,sBAAAA,GAJvE,IAAK,IAAIzJ,EAAQ,EAAGA,GAAkB,QAAb,EAAG2J,SAAU,aAAV,EAAYjR,QAAQsH,IAAS,OACrDiK,GAAkC,IAAVjK,EAAc,aAAa2J,EAAW3J,KAAW,iBAAiB2J,EAAW3J,KAK7G,IAAIiK,EAAqBvR,OAIrB,MAAO,CAAEgR,eAAgB,KAAMpO,UAAW,KAAMqO,gBAAYhU,EAAW8T,sBAAAA,GAJ1C,CAC7B,MAAMS,EAAW,GAAGL,KAAWR,KAAeC,uDAAkEW,IAChHL,QAAiBT,EAAAA,GAA6Be,EAAU,OAM5D,OADAR,EAAyB,QAAX,EAAGE,SAAQ,OAAM,QAAN,EAAR,EAAU1U,YAAI,WAAN,EAAR,EAAgB0U,SAC1B,CAAEF,eAAAA,EAAgBpO,UAAW8N,EAAiBO,WAAYA,EAAYF,sBAAAA,IAKrF,MAAO,CAAEC,eAAgB,KAAMpO,UAAW,KAAMqO,gBAAYhU,EAAW8T,sBAAAA,IAMvE5N,GAAI,gCACJkF,MA7DiBC,IACjB,MAAMlO,EAAYkO,EAAKxK,eAAepE,IAAIC,OAAO6S,4BAC3CC,EAAAA,EAAAA,IACEtE,EAAAA,GAAAA,UACM,IAAIuE,IAAI1R,OAAO2R,SAASC,KAAKpJ,YAC7B8E,EAAKxK,eAAe+O,IAAIC,WAC9BC,EAAAA,QACF9P,EACN,OAAO,IAAIsT,EAAmCjI,EAAMlO,4LCzCjD,MAAMqX,EAAwDC,IACjE,MAAM,eAAEC,EAAc,gBAAEC,EAAe,gBAAEC,EAAe,mBAAEC,GAAsBJ,EAC1EK,EAAkBH,GAAmB1E,OAAO0E,GAAmB,EACrE,OAAIE,MAAAA,GAAAA,EAAoB7V,MAAK+V,IAAC,aAAIA,MAAAA,GAAiB,QAAhB,EAADA,EAAGL,sBAAc,WAAhB,EAAD,EAAmBxR,cAAc8B,WAAW0P,MAAAA,OAAc,EAAdA,EAAgBxR,cAAc8B,WAEpGvG,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,wBACXnF,IAAAA,cAAAA,KAAAA,CAAImF,UAAU,cAAc8Q,GACP,MAApBE,EAA0BnW,IAAAA,cAAAA,OAAAA,KAAAA,OAAmBA,IAAAA,cAAAA,OAAAA,KAAAA,OAKtDA,IAAAA,cAAAA,MAAAA,KACIA,IAAAA,cAAAA,KAAAA,CAAImF,UAAU,cAAc8Q,GAC5BjW,IAAAA,cAAAA,KAAAA,CAAImF,UAAU,SACT,IAAIhF,MAAM,IAAIe,KAAI,CAACqV,EAAGnV,IACnBA,EAAIiV,GAAmBjV,EAAI,EAAIiV,EAC1BrW,IAAAA,cAAAA,KAAAA,CAAIwW,IAAKpV,GAAGpB,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,gBAC1B/D,EAAIiV,EAAmBrW,IAAAA,cAAAA,KAAAA,CAAIwW,IAAKpV,GAAGpB,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,YAEzCnF,IAAAA,cAAAA,KAAAA,CAAIwW,IAAKpV,GAAGpB,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,yBCGvD,MAAMsR,EAA0ET,IACnF,MAAM,QAAEnE,EAAO,UAAE1K,EAAS,WAAEuP,EAAU,MAAEC,EAAK,MAAEC,EAAK,MAAEtR,EAAK,UACvDuR,EAAS,aAAEC,EAAY,QAAEC,EAAO,gBAAE1V,EAAe,eACjD2V,EAAc,MAAEpL,EAAK,QAAEqL,EAAO,aAAEC,EAAY,OAAEC,EAAM,QAAEC,EAAO,YAAEC,EAAW,mBAAEjB,GAAuBJ,EAiDvG,MAAMsB,EAAqB3W,UAA0B,UACjD,MAAM4W,EAAc1F,MAAAA,OAAO,EAAPA,EAASvL,KACvBkR,GAAY1O,EAAAA,EAAAA,IAA6B+I,EAAgB,eACzD4F,EAA6G,QAA9F,EAAuE,QAAvE,GAAGzO,EAAAA,EAAAA,IAAkC6I,EAAgB,0BAAkB,OAAQ,QAAR,EAApE,EAAsE6F,IAAI,UAAE,WAAR,EAApE,EAA8EpZ,MAAM,KAAK,UAAE,QAAI,GAGnH,SAAUgB,QAIVqY,KAAKC,KAAK,CACNC,MAAO,gBACPC,gBAAiB,gBACjBC,eAAgB,YAChBC,aAAc,gBACdC,YAAa,GAAGpG,MAAAA,OAAO,EAAPA,EAAS/H,WAAWyN,IACpCW,qBAAsB,QACtBC,kBAAmB,CAAC,0BACpBC,iBAAkB,CAAC,GAAGxM,KACtByM,WAAY,CAAC,GAAGxG,MAAAA,OAAO,EAAPA,EAAS/H,UACzBwO,aAAc,CAAC,GAAGf,KAClBgB,iBAAkB,CAAC,GAAGd,KACtBe,cAAe,CAAC,GAAGrR,KACnBsR,gBAAiB,CAAC,GAAGjB,QAI3BkB,EAAiB,KACvB,GAAGjS,EAAAA,GAAAA,UAAmB,CACrB,MAAMkS,EAAgBtY,SAASuY,eAAe,eAC9CD,MAAAA,GAAAA,EAAgBE,eAAe,CACtBC,SAAU,aAKfC,EAAoB,IAElB/Y,IAAAA,cAAAA,IAAAA,SAAAA,KACIA,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,sBACV2R,GAEL9W,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,8BAA8B1G,QAAS,IAAgB,IAAVmN,GAAe0L,KACtEV,GAEL5W,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iCACXnF,IAAAA,cAAAA,IAAAA,CAAGkR,KAAMwF,EAAU,aAAcpR,GAC7BtF,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,sCACXnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,8BAA8BG,MAAOA,GAChDA,IAGTtF,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,yBApGlC,SACI6T,EACAnC,GAEA,MAAMF,EAAsB,CACxBsC,UAAWpC,EACXqC,cAAerC,EACfsC,wBAAyBH,GAG7B,OAAOnC,EACH7W,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iBACVwR,EAAMuC,eAAiBvC,EAAMwC,yBAA2BxC,EAAMwC,wBAA0BxC,EAAMuC,cAAgBlZ,IAAAA,cAAAA,IAAAA,SAAAA,KAC3GA,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,mBAAiB,IAAGwR,EAAMwC,yBAC1CnZ,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,oBACZnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,0BACZnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,mBAAiB,IAAGwR,EAAMuC,kBAIlDlZ,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,+BACZnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,mBAAiB,IAAGwR,EAAMsC,aAGtD,KA6EgBG,CACGzC,EAAOE,IAGf7W,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,mBACV4R,GAEJ1V,GAELrB,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,+BACXnF,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,oCACXnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,eAAa,WAC7BnF,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,WACXnF,IAAAA,cAAAA,IAAAA,CAAGmF,UAAU,SAAS8R,GAAoB,MAC1CjX,IAAAA,cAAAA,MAAAA,CAAKwE,IAAK6S,EAAa3S,IAAK,GAAGuS,SAAgB9R,UAAU,mBAGjEnF,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,oCACXnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,eAAa,YAC7BnF,IAAAA,cAAAA,IAAAA,CAAGmF,UAAU,SAASiS,GAAoB,OAE9CpX,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,oCACXnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,eAAa,iBAC7BnF,IAAAA,cAAAA,IAAAA,CAAGmF,UAAU,SAAS+R,GAA8B,OAExDlX,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,oCACXnF,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,eAAa,UAC7BnF,IAAAA,cAAAA,IAAAA,CAAGmF,UAAU,SAASgS,GAAkB,QArG/D,SACIH,EACAZ,GAA0D,MAE1D,OAAOY,EACHhX,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,uBACXnF,IAAAA,cAAAA,KAAAA,CAAImF,UAAU,gCAA8B,eAC3C6R,MAAAA,GAAwF,QAA1E,EAAdA,EAAgBnK,MAAK,CAACC,EAAQC,KAAWD,MAAAA,OAAC,EAADA,EAAGmJ,iBAAiBlJ,MAAAA,OAAC,EAADA,EAAGkJ,gBAAiB,GAAK,WAAE,WAA1E,EAAd,EAA0FpJ,MAAK,CAACC,EAAQC,IACjGqJ,MAAAA,GAAAA,EAAoB7V,MAAKqD,IAAC,eAAIA,MAAAA,GAAiB,QAAhB,EAADA,EAAGqS,sBAAc,WAAhB,EAAD,EAAmB1K,kBAAkBuB,MAAAA,GAAiB,QAAhB,EAADA,EAAGmJ,sBAAc,WAAhB,EAAD,EAAmB1K,kBAC/E,EACA6K,MAAAA,GAAAA,EAAoB7V,MAAKqD,IAAC,eAAIA,MAAAA,GAAiB,QAAhB,EAADA,EAAGqS,sBAAc,WAAhB,EAAD,EAAmB1K,kBAAkBwB,MAAAA,GAAiB,QAAhB,EAADA,EAAGkJ,sBAAc,WAAhB,EAAD,EAAmB1K,mBACrF,EAED,IAEZrK,KAAI,CAACmY,EAAiBzN,IACd5L,IAAAA,cAAC+V,EAAiB,CAACS,IAAK5K,EAAOqK,eAAgBoD,EAAWpD,eAAgBE,gBAAiBkD,MAAAA,OAAU,EAAVA,EAAYlD,gBAAiBD,gBAAiBmD,EAAWC,MAAOlD,mBAAoBA,OAG9L,KAqFQmD,CAAkBvC,EAAgBZ,GACnCpW,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,mBAAmB1G,QAAS,IAAgB,IAAVmN,GAAe0L,KACjD,IAAV1L,EAAc5L,IAAAA,cAAAA,OAAAA,CAAMmF,UAAU,eAAe1G,QAAS,IAAMia,KAAgB,YACvE1Y,IAAAA,cAAAA,IAAAA,CAAGmF,UAAU,eAAe+L,KAAM,GAAGwF,KAAY,eAO1E,OACI1W,IAAAA,cAAAA,MAAAA,CAAKmF,UAAW,yBAAkC,IAAVyG,EAAc,yBAA2B,KAClE,IAAVA,EACG5L,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,kBAAkB1G,QAAS,IAAMia,KAC3CK,KAGL/Y,IAAAA,cAAAA,IAAAA,CAAGkR,KAAMwF,EAAU,aAAcpR,GAC5ByT,yqBC1KrB,MA6DA,EA7DiCS,GACtBA,MAAAA,OAAiB,EAAjBA,EAAmBtY,KAAK2Q,IAC3B,IAAI/G,EAAwC,GACxCE,EAAyB,GAC7B,MAAMyO,GAAcC,EAAAA,EAAAA,iBAAgB7H,EAAQ8H,cAC5C,GAAkC,SAA9BF,EAAYhV,cACZqG,EAAoB+G,EAAQ+H,wBAE3B,GAAkC,cAA9BH,EAAYhV,eAA+D,iBAA9BgV,EAAYhV,gBAAqCqG,EAAmB,OACtH,IAAI+O,EAAehI,EAAQgI,aAKJ,MAJvB,IACKA,GACDhI,EAAQiI,YACS,QAAjB,EAAAjI,EAAQiI,iBAAS,aAAjB,EAAmBxV,QAAS,EAC5B,GAAIuN,EAAQkI,MACS,QAAjB,EAAAlI,EAAQiI,iBAAS,OAAjB,EAAmB5Y,KAAK4Y,IAA6B,OAC7CA,MAAAA,GAAoB,QAAX,EAATA,EAAW3S,iBAAS,WAAX,EAAT,EAAsB1C,iBAAkBoN,EAAQkI,QAChDF,OACgCtY,IAA5BuY,EAAUE,eAA2D,KAA5BF,EAAUE,eAAoD,OAA5BF,EAAUE,cAC/EF,EAAUE,cACV,OAK1B,GAA0B,KAAtBlP,GAA4B+O,GAAiC,KAAjBA,QAAwCtY,IAAjBsY,EAA4B,OAC/F,MAAM9O,EAAuB,QAAf,EAAG8O,SAAY,aAAZ,EAAcvb,MAAM,KACjCyM,QAA4BxJ,IAAhBwJ,EAAS,IAAoBA,EAASzG,QAClDyG,MAAAA,GAAAA,EAAU7J,KAAI,CAAC+F,EAAc2E,KACzB,MAAMlK,EAAO,IAAIC,KACXK,EAAeN,EAAKQ,QAAQR,EAAKS,WACvC,GAAIV,SAASwF,EAAM,IAAM,EAAG,CACxB,IAAIgE,EAAexJ,SAASwF,EAAM,IAC9BiE,EAAUlJ,EACd,KAAOiJ,EAAe,GAClBC,EAAUxJ,EAAKQ,QAAQR,EAAKS,UAAY,GACL,MAA/BN,GAAAA,CAAMqJ,GAASnJ,OAAO,MAA+C,MAA/BF,GAAAA,CAAMqJ,GAASnJ,OAAO,MAC5DkJ,IAGRH,EAAoBjJ,GAAAA,CAAMqJ,GAASnJ,OAAO,SACX,KAA3BiJ,EACAA,EAAyB,GAAGA,QAA6BF,KAEzDE,EAAyBF,EACzBI,EAAUxJ,EAAKQ,QAAQR,EAAKS,UAAYV,SAASwF,EAAK,GAAI,UAItE6D,EAAoBE,GAEpBF,GAAoBmP,EAAAA,EAAAA,GAAiBJ,IAIjD,OAAO,EAAP,KACOhI,GAAO,IACVqI,gBAAiBpP,kqBCZtB,MAAMqP,EAAqFnE,IAAQ,0BAEtG,IAAIoE,EACJ,MAAOC,EAAaC,GAAkBta,EAAAA,cAA+DuB,IAC9FgZ,EAAWC,GAAgBxa,EAAAA,UAAe,IAC1Cya,EAAkBC,GAAuB1a,EAAAA,SAAwC,KACjF2a,EAAsBC,GAA2B5a,EAAAA,SAA8C,IAChG6a,EAAY7a,EAAAA,QAAa,GACzB8a,EAA6C,QAApC,EAAG9E,EAAMlV,KAAKia,8BAAsB,aAAjC,EAAmCzQ,OACrD,IAAI+K,EAAwByF,MAAAA,OAAS,EAATA,EAAWzF,sBACvC,MACM2F,GADU,IAAIC,EAAAA,GACIC,IAAI,YACtBC,EAAuC,QAA3B,EAAGnF,EAAMzO,QAAQvJ,IAAIC,cAAM,aAAxB,EAA0Bmd,+BA+BzCC,EArBkB,MAAY,YAChC,MAAMC,EAAsB,GACtBC,EAAmBT,MAAAA,OAAS,EAATA,EAAW5T,UACiD,MAArF,GAAIqU,GAAoBA,KAAqBvF,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,UACvEmJ,MAAAA,GAAyB,QAAhB,EAATA,EAAWxF,sBAAc,OAAzB,EAA2B7L,SAASvI,KAAK2Q,IAAgB,MACrDA,MAAAA,GAAiB,QAAV,EAAPA,EAASgC,gBAAQ,OAAjB,EAAmB3S,KAAI,CAACsa,EAAc5P,KAClC0P,EAAatR,KAAKwR,SAG1BnG,EAAwByF,MAAAA,OAAS,EAATA,EAAWzF,2BAElC,GAAIgF,MAAAA,GAA2B,QAAhB,EAAXA,EAAa/E,sBAAc,OAA3B,EAA6B7L,SAAU,OAC5C4Q,MAAAA,GAA2B,QAAhB,EAAXA,EAAa/E,sBAAc,OAA3B,EAA6B7L,SAASvI,KAAK2Q,IAAgB,MACvDA,MAAAA,GAAiB,QAAV,EAAPA,EAASgC,gBAAQ,OAAjB,EAAmB3S,KAAI,CAACsa,EAAc5P,KAClC0P,EAAatR,KAAKwR,SAG1BnG,EAAwBgF,MAAAA,OAAW,EAAXA,EAAahF,sBAEzC,OAAOiG,GAEiBG,GAEtBC,EAAoB/a,UACtB,GAAI0a,EAAoB/W,QAEhB,SAAUhF,OAAQ,OAClB,MAAMqc,EAAsB,GACtBC,EAAwB,GACxBC,EAAyB,GACzBC,EAA6B,GAC7BC,EAA0B,GAC1BC,EAA4B,GAC5BC,EAA0B,GAChCZ,EAAoBa,MAAM,GAAG/M,SAAQ,CAAClI,EAAW2E,KAAiB,oBAC9D,MAAMuQ,GAAkBrT,EAAAA,EAAAA,IAA6B7B,EAAM,eACrDmV,EAAQxQ,EAAQ,EACtB+P,EAAU3R,KAAK,GAAGoS,MAClBnV,MAAAA,OAAI,EAAJA,EAAM6C,SAAU8R,EAAY5R,KAAK/C,MAAAA,OAAI,EAAJA,EAAM6C,SACvC7C,MAAAA,OAAI,EAAJA,EAAMX,OAAQuV,EAAa7R,KAAK/C,MAAAA,OAAI,EAAJA,EAAMX,OACtCW,MAAAA,OAAI,EAAJA,EAAMoV,gBAAgB/X,SAAUwX,EAAiB9R,KAAsF,QAAlF,EAA2D,QAA3D,GAAChB,EAAAA,EAAAA,IAAkC/B,EAAM,0BAAkB,OAAQ,QAAR,EAA1D,EAA4DyQ,IAAI,UAAE,WAAR,EAA1D,EAAoEpZ,MAAM,KAAK,UAAE,QAAI,IAC3Iyd,EAAc/R,MAAK5C,EAAAA,EAAAA,IAAoBH,EAA4G,QAAxG,GAAEgC,EAAAA,EAAAA,IAA+B+M,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAK,QAAL,EAAd,EAAgBvJ,WAAG,OAAQ,QAAR,EAAnB,EAAqBC,cAAM,WAAtB,EAAL,EAA6Bqe,4BAA6BnB,UAAa,QAAI,KAAO,IAC9JgB,GAAmBH,EAAgBhS,KAAKmS,MAAAA,OAAe,EAAfA,EAAiBrU,YACzDmU,EAAcjS,KAAK/C,MAAAA,GAAa,QAAT,EAAJA,EAAMsV,eAAO,WAAT,EAAJ,EAAezU,eAKtC6P,KAAKC,KAAK,CACNC,MAAO,qBACPC,gBAAiB,qBACjBC,eAAgB,YAChBC,aAAc,qBACdC,YAA0B,QAAf,EAAEuE,WAAa,QAAI,GAC9BtE,qBAAsB,OACtBuE,6BAA8B,CAAC,0BAC/BC,4BAA6Bf,EAC7BgB,sBAAuBf,EACvBgB,wBAAyBf,EACzBgB,4BAA6Bf,EAC7BgB,yBAA0Bf,EAC1BgB,2BAA4Bf,EAC5BgB,yBAA0Bf,MAMpCO,EAAc,IACT/V,EAAAA,GAAAA,UACDnH,OAAO2R,SAASC,KAAK5S,MAAM2S,SAASgM,MAAM,GAAGC,SAAS,KAClD5d,OAAO2R,SAASC,KAAK5S,MAAM2S,SAASgM,MAAM,GAAG3e,MAAM,KAAK,GACxDgB,OAAO2R,SAASC,KAAK5S,MAAM2S,SAASgM,MAAM,GAC9C,GAoBJE,EAA0B,KAAe,QAC3C,MAAMC,EAA+B,GAcrC,OAbA/B,MAAAA,GAAAA,EAAqBna,KAAK2Q,IAAgB,MACtC,MAAMwL,EAAwBxL,GAAWA,EAAsF,QAA/E,GAAC5I,EAAAA,EAAAA,IAA+B,iCAAkCkS,UAAa,QAAI,IAC7HmC,EAAkBD,MAAAA,EAAAA,OAAyB9b,EACjD,QAAwBA,IAApB+b,EAA+B,CAC/B,MAAMC,EAAqBD,GAAmBA,EAAgBhf,MAAM,KACpEif,GACIA,EAAmBjZ,OAAS,GAC5BiZ,EAAmBrc,KAAI,CAAC+F,EAAW2E,KAAiB,MAChD,MAAM1F,EAAY2L,GAAWA,EAA0D,QAAnD,GAAC5I,EAAAA,EAAAA,IAA+BhC,EAAMkU,UAAa,QAAI,IAC3FjV,GAAeA,GAAakX,EAAmBpT,KAAK/C,UAI7B,QAAvC,EAAO,IAAI,IAAIuW,IAAIJ,WAAoB,OAA4D,QAA5D,EAAhC,EAAkCvQ,MAAK,CAACC,EAAGC,IAAMD,EAAEvB,cAAgBwB,EAAExB,cAAgB,GAAK,WAAE,WAA5D,EAAhC,EAA8FsB,MAAK,CAACC,EAAQC,KAAU,QACzH,OAAmC,QAAnC,EAAIiJ,EAAM/X,OAAOmY,0BAAkB,OAA/B,EAAiC7V,MAAKqD,IAAC,aAAIA,MAAAA,GAAiB,QAAhB,EAADA,EAAGqS,sBAAc,WAAhB,EAAD,EAAmB1K,kBAAkBuB,MAAAA,OAAC,EAADA,EAAGvB,kBAC5E,EAC+B,QAAnC,EAAIyK,EAAM/X,OAAOmY,0BAAkB,OAA/B,EAAiC7V,MAAKqD,IAAC,aAAIA,MAAAA,GAAiB,QAAhB,EAADA,EAAGqS,sBAAc,WAAhB,EAAD,EAAmB1K,kBAAkBwB,MAAAA,OAAC,EAADA,EAAGxB,mBAClF,EAED,OA2CZkS,EAAYC,KAAUC,EAAAA,EAAAA,IAAU,CACnCC,UAAW,EACXC,aAAa,IA0EXC,GAA0Bnd,MAAAA,IAAqD,MAEjF,MAAMod,EAA6C,QAApC,EADfC,EAAoBA,EAAkB/K,QAAOpB,GAAmE,UAAxD6H,EAAAA,EAAAA,iBAAgB7H,EAAQ8H,cAAclV,uBAC3C,aAAjB,EAAmBvD,KAAI2Q,IAC9C,CACH/H,OAAQ+H,MAAAA,OAAO,EAAPA,EAAS/H,OACjBmU,SAAU,EACVjR,gBAAiB6E,EAAQqM,UAAUpW,eAG3C,GAAIiW,GAAaA,EAAUzZ,OAAS,EAAG,CACnC,MAAM6Z,QAAoBC,EAAAA,EAAAA,GAA6BpI,EAAMzO,QAAQiD,cAAeuT,GAAWxQ,EAAAA,EAAAA,GAAWyI,EAAMzO,QAAQiD,qBACxGjJ,IAAhB4c,GAA6BvD,EAAwBuD,KA+D7D,OA7CAne,EAAAA,WAAgB,KAbWW,WAAW,UAClC,MAAM4a,EAAmBT,MAAAA,OAAS,EAATA,EAAW5T,UACpC,IAAKqU,GAAoBA,KAAqBvF,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,UAAU,eAElF,MAAM6D,QAAqD6I,EAAAA,EAAAA,SAA0B,IAAIxJ,EAAAA,mCAAmCmB,EAAM/X,OAAQ+X,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,OAAU,QAAV,EAA5B,EAA8BqH,gBAAQ,WAAjC,EAAL,EAAwC7J,YAAakO,EAAMzO,QAAQiD,eACzMgL,MAAAA,GAAwB,QAAhB,EAARA,EAAUF,sBAAc,OAAxB,EAA0B7L,SAC1B6Q,EAAe9E,GAEf8E,OAAe/Y,KAMlB+c,KACN,CAACtI,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,WAElC3R,EAAAA,WAAgB,KACZ,GAAIqb,GAAuBA,EAAoB/W,QAAU+W,EAAoB/W,QAAU,EAAG,CAzClE3D,OAAAA,IACxB,MAAMG,EAAOyd,EAAwBP,GAChCF,GAAwBE,GACzBld,GACA4Z,EAAoB5Z,IAkDf0d,CAZ8CnD,EAAoBna,KAAK2Q,IAAgB,gBACxF,MAAO,CACH/H,OAAQ+H,MAAAA,OAAO,EAAPA,EAAS/H,OACjBoU,UAAW1M,OAAOK,MAAAA,OAAO,EAAPA,EAASnT,WAC3Bob,UAAW9D,EAAMzO,QAAQvJ,IAAIC,OAAO6b,UACpCF,mBAAoB5D,EAAMzO,QAAQvJ,IAAIC,OAAOoE,uBAC7CwX,aAA4G,QAAhG,EAAEhI,EAAuF,QAAhF,GAAC5I,EAAAA,EAAAA,IAA+B+M,EAAMzO,QAAQvJ,IAAIC,OAAOwgB,SAAUtD,UAAa,QAAI,WAAG,QAAI,GAChHpB,MAAwH,QAAnH,EAAElI,EAA0G,QAAnG,GAAC5I,EAAAA,EAAAA,IAA+B+M,EAAMzO,QAAQvJ,IAAIC,OAAOqe,4BAA6BnB,UAAa,QAAI,WAAG,QAAI,GAC5HxB,aAA2H,QAA/G,EAAE9H,EAAsG,QAA/F,GAAC5I,EAAAA,EAAAA,IAA+B+M,EAAMzO,QAAQvJ,IAAIC,OAAOygB,wBAAyBvD,UAAa,QAAI,WAAG,QAAI,GAC/HjB,gBAAiB,WAK9B,CAACG,EAAarE,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,SAAUqJ,IAEzDhb,EAAAA,WAAgB,KACR0d,IACKhC,MAEV,CAACgC,KAEJ1d,EAAAA,WAAgB,KACRyG,EAAAA,GAAAA,YACA2T,GAA8BuE,EAAAA,EAAAA,mBAAkBrf,OAAQ,UAAU,IA7SlDiI,CAAAA,IACpB,MAAMqX,GAAWC,EAAAA,EAAAA,GAAatX,GAE1BiT,EADa,OAAboE,GAAkC,OAAbA,IA2SmDE,CAAe9I,EAAMzO,YAE1F,KACHd,EAAAA,GAAAA,WAAsBnH,OAAOyf,oBAAoB,SAAU3E,GAA8B,MAE9F,CAACpE,EAAMzO,QAAQxJ,QAAQqH,aAAcqB,EAAAA,GAAAA,WAAsBnH,OAAOiJ,aAErEvI,EAAAA,WAAgB,KACR6a,EAAUpb,QACVob,EAAUpb,SAAU,EAEfic,MAEV,CAAC1F,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,WAE7B0J,MAAAA,GAAAA,EAAqB/W,OAGnB0R,EAAMgJ,WAAW,OACjBhJ,GAAK,IACRiJ,cAAe5D,EAtJS,MAA+B,QACvD,MAAM6D,EAAiB/B,IACjBgC,EAAqC,QAA1B,EAAG9E,MAAAA,OAAW,EAAXA,EAAa9E,kBAAU,QAAIuF,MAAAA,OAAS,EAATA,EAAWvF,WAC1D,OAAO4J,IAAe9D,MAAAA,GAAsH,QAAnG,EAAnBA,EAAqBxO,MAAK,CAACC,EAAQC,KAAWoS,MAAAA,OAAW,EAAXA,EAAaC,QAAQtS,MAAAA,OAAC,EAADA,EAAGpO,aAAaygB,MAAAA,OAAW,EAAXA,EAAaC,QAAQrS,MAAAA,OAAC,EAADA,EAAGrO,qBAAW,WAAnG,EAAnB,EAAwHwC,KAAI,CAAC2Q,EAAcjG,KAAiB,4DAC9K,MAAMyT,EAAsBrJ,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAK,QAAL,EAAd,EAAgBvJ,WAAG,OAAQ,QAAR,EAAnB,EAAqBC,cAAM,WAAtB,EAAL,EAA6B6S,2BACzD,IAAI4F,GAAa4I,EAAAA,EAAAA,wBAAsB1hB,EAAAA,EAAAA,IAAmBiU,MAAAA,OAAO,EAAPA,EAASvL,KAAO0P,EAAMzO,UAAY,GAAI8X,GAAsBxN,EAAQH,iBAAuCG,EAAQnT,UAAWsX,EAAMzO,SAAWyO,EAAMzO,QAAQiD,mBAAejJ,GACtO,GAAI8d,GAAuBxN,EAAQH,gBAAiB,CAChD,MAAM6N,EAAuB7I,EAAWwG,SAAS,KAAO,IAAI7L,EAAAA,KAA0BQ,EAAQnT,YAAc,IAAI2S,EAAAA,KAA0BQ,EAAQnT,YAClJgY,GAAc6I,EAElB,MAAMC,EAhGY,EAACzZ,EAA6BmZ,KACpD,MAAMlI,EAAsB,GAa5B,OAZAkI,GACIA,EAAe5a,OAAS,GACxB4a,EAAehe,KAAI,CAAC+F,EAAM2E,KAAS,YAC/B,MAEM6T,EAAM,CACRxJ,eAAgBhP,EAChBqS,MAJmBvT,GAAcA,EAAuF,QAA7E,GAACkD,EAAAA,EAAAA,IAA8C,QAAhB,EAAC,GAAGhC,iBAAY,aAAf,EAAiBxC,cAAe0W,UAAa,QAAI,IAK5HhF,gBAJoBpQ,GAAcA,EAAiF,QAAvE,GAACkD,EAAAA,EAAAA,IAAwC,QAAV,EAAC,GAAGhC,WAAM,aAAT,EAAWxC,cAAe0W,UAAa,QAAI,KAM3HnE,EAAehN,KAAKyV,MAErBzI,GAkF2B0I,CAAkB7N,EAASqN,GACnDjI,EAAwG,QAAjG,GAAGnO,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B,UAAWkS,WAAc,QAAI,GAC5GwE,EAAqH,QAAxG,GAAG7W,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B,iBAAkBkS,WAAc,QAAI,GACzH/D,GAAwC,QAAjC,EAAGpB,EAAM/X,OAAO2hB,yBAAiB,aAA9B,EAAgCrf,MAAKsf,GAAUA,EAAOC,qBAAuBH,IACvFzI,GAAkH,QAAtG,GAAGpO,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B,eAAgBkS,WAAc,QAAI,GACtHhE,GAAsG,QAAhG,GAAGrO,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B,SAAUkS,WAAc,QAAI,GAC1GhU,IAAYC,EAAAA,EAAAA,IAAoByK,EAA+G,QAAxG,GAAE5I,EAAAA,EAAAA,IAA+B+M,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAK,QAAL,EAAd,EAAgBvJ,WAAG,OAAQ,QAAR,EAAnB,EAAqBC,cAAM,WAAtB,EAAL,EAA6Bqe,4BAA6BnB,UAAa,QAAI,KAAO,GAC1J7V,GAAQ6B,GAAY,GAAGA,MAAa0K,MAAAA,OAAO,EAAPA,EAASvL,OAAsB,QAAhB,EAAGuL,MAAAA,OAAO,EAAPA,EAASvL,YAAI,QAAI,GACvEyZ,GAAe/J,EAAMlV,KAAKkf,iBAAiB1V,OAC3C2V,IAAanX,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B+M,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAK,QAAL,EAAd,EAAgBvJ,WAAG,OAAQ,QAAR,EAAnB,EAAqBC,cAAM,WAAtB,EAAL,EAA6BiiB,sBAAuB/E,IACtIrQ,GApDiB,EAAC7E,EAA8Bka,KAC1D,IAAK1F,GAAoBA,EAAiBnW,OAAS,EAC/C,OAAOtE,EAAAA,cAAAA,EAAAA,SAAAA,MAEX,IAAIqB,EAAsC,GAC1C,GAAoD,UAAhDqY,EAAAA,EAAAA,iBAAgByG,GAAc1b,eAA4BkW,GAAwBA,EAAqBpa,MAAM0G,GAAcuK,OAAOvK,EAAK+F,mBAAqB/G,IAAW,OACvK,MAAMma,EAAoG,QAAtF,EAAGzF,EAAqBpa,MAAM0G,GAAcuK,OAAOvK,EAAK+F,mBAAqB/G,WAAS,aAAnF,EAAqF5E,gBACxG+e,GAAqC,KAAnBA,IAClB/e,EAAkB+e,GAIsB,MAIhD,OAJK/e,GAAuC,KAApBA,IACpBA,EAAkBoZ,MAAAA,GAA0D,QAA1C,EAAhBA,EAAkBla,MAAK8f,IAAOA,MAAAA,OAAG,EAAHA,EAAKnC,aAAcjY,WAAS,WAA1C,EAAhB,EAA4DiU,iBAI9Ela,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,kCACXnF,EAAAA,cAAAA,OAAAA,CAAMmF,UAAU,wCAAwC6Q,EAAMsK,UAAUC,YACxEvgB,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,0CACV9D,EACA2Z,GAAWhb,EAAAA,cAAAA,EAAAA,SAAAA,KAAEA,EAAAA,cAAAA,OAAAA,KAAAA,OAAgB,wBAAMmF,UAAU,0CAA0C6V,OA+BtEwF,CAAuBhP,OAAOK,MAAAA,OAAO,EAAPA,EAASnT,WAAqJ,QAA3I,GAAEoK,EAAAA,EAAAA,IAA6B+I,GAAS5I,EAAAA,EAAAA,IAA+B+M,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAK,QAAL,EAAd,EAAgBvJ,WAAG,OAAQ,QAAR,EAAnB,EAAqBC,cAAM,WAAtB,EAAL,EAA6BygB,wBAAyBvD,WAAc,QAAI,IAC1N,OACInb,EAAAA,cAACyW,EAA0B,CACvB7K,MAAOA,EACP4K,IAAK5K,EACL8K,WAAYA,EACZpR,MAAOA,GACPsR,OAAOxC,EAAAA,EAAAA,GACH4B,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,WAAT,EAAL,EAAgBxJ,QAAQqH,aACxByM,MAAAA,OAAO,EAAPA,EAASoC,gBACTpC,MAAAA,OAAO,EAAPA,EAASvL,MACTma,EAAAA,EAAAA,qBAAoB5O,MAAAA,OAAO,EAAPA,EAAS/H,OAAQkM,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,OAAS,QAAT,EAAd,EAAgBxJ,eAAO,WAAlB,EAAL,EAAyBoG,cAC9D,GACJwS,MAAO9E,MAAAA,OAAO,EAAPA,EAAS0K,QAChB1F,UAAWhF,MAAAA,OAAO,EAAPA,EAAS6O,gBACpB3J,QAASf,EAAM/X,OAAO0iB,cAAgB3gB,EAAAA,cAACzB,EAAAA,EAAe,CAACC,OAAQqT,MAAAA,OAAO,EAAPA,EAAS/H,OAAQpL,UAAWsX,MAAAA,GAAW,QAAN,EAALA,EAAOlV,YAAI,OAAS,QAAT,EAAX,EAAa+Q,eAAO,OAAQ,QAAR,EAApB,EAAsBvH,cAAM,WAAvB,EAAL,EAA8BqH,YA9ErH5L,GA8E+I8L,EA7ExJ9L,KAAcuB,EAAAA,EAAAA,GACjB0O,EAAMzO,QACNyO,EAAMxO,SACNwO,EAAMvO,IACNmZ,EAAAA,EAAAA,GAA0B7a,GAAkF,QAAxE,IAAEkD,EAAAA,EAAAA,IAA+B,yBAA0BkS,UAAa,UAAI,KAChHyF,EAAAA,EAAAA,GAA0B7a,GAA8E,QAApE,IAAEkD,EAAAA,EAAAA,IAA+B,qBAAsBkS,UAAa,UAAI,IAC5GnF,EAAMsK,UAAUvY,kBAwERiP,eAAgBwI,EAChB1I,cAActR,EAAAA,EAAAA,IAAmBya,GAAYjK,MAAAA,GAAc,QAAT,EAALA,EAAOzO,eAAO,WAAT,EAAL,EAAgBxJ,SAC7DsD,gBAAiByJ,GACjBmM,QAASA,EACTC,aAAcA,GACdC,OAAQA,GACRC,QAASA,MAAAA,QAAO,EAAPA,GAASyJ,sBAClBhP,QAASA,EACT1K,UAAWA,GACXI,QAASyO,EAAMzO,QACf8P,YAAa0I,IAAgBA,GAAa9I,KAAiC,QAAzB,EAAI8I,GAAa9I,UAAQ,aAArB,EAAuB6J,MAC7E1K,mBAAoBJ,EAAM/X,OAAOmY,qBA1F7BrQ,IAAAA,GAA4D,WAiMvCgb,GAAwB,KAC7D3D,mBAAoBD,IACpB9B,oBAAqBA,EACrBd,UAAWA,EACXlF,sBAAAA,EACA2L,mBAtG2B,KAC3B,MAAMC,GAAsCC,EAAAA,EAAAA,oBAAmB,wBAAyBlL,EAAMmL,aAAcnL,EAAM5F,WAC5GgR,GAAUC,EAAAA,EAAAA,kBAAiB,QAASJ,EAAkB,qCAAsC,KAClGK,EAAAA,EAAAA,kBAAiBL,EAAkBG,EAAS,qCAA5CE,IAoGAC,iBAlGyB,KACzB,MAAMN,GAAsCC,EAAAA,EAAAA,oBAAmB,wBAAyBlL,EAAMmL,aAAcnL,EAAM5F,WAC5GgR,GAAUC,EAAAA,EAAAA,kBAAiB,QAASJ,EAAkB,mCAAoC,KAChGK,EAAAA,EAAAA,kBAAiBL,EAAkBG,EAAS,mCAA5CE,IAgGA7D,WAAYA,KAXLzd,EAAAA,cAAAA,EAAAA,SAAAA,OAef,qHC1YA,QAAgBgW,IAAwC,MAEpD,MAAM,mBAAEoH,EAAkB,cAAE6B,EAAa,mBAAE+B,EAAkB,iBAAEO,EAAgB,WAAE9D,EAAU,UAAElD,EAAS,sBAAElF,GAA0BW,GAC5H,sBAAEwL,GAA0BxL,EAAMyL,MACxC,GAAKxC,MAAAA,IAAAA,EAAe3a,OAEhB,OADA0R,EAAMzO,QAAQ6I,UAAU3F,MAAM,iDACvB,KAEX,MAAMiX,EAAkB1L,EAAMlV,KAAK6gB,oBAAoBrX,OACvD,OACItK,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,kBAAkBzE,IAAK+c,GAClCzd,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,2BACXnF,EAAAA,cAAC4hB,EAAAA,QAAO,eAACzc,UAAU,mCAAsC6Q,EAAM/X,OAAO4jB,QAAO,CAAEC,KAAK,4BACpF9hB,EAAAA,cAAC+hB,EAAAA,GAAiB,CACd5c,UAAU,sCACV2c,KAAuD,QAAnD,EAAEzM,MAAAA,EAAAA,EAAyBW,EAAM/X,OAAO+jB,mBAAW,QAAI,MAGnEhiB,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,4BACXnF,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iCACXnF,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,4BACXnF,EAAAA,cAAAA,KAAAA,KACIA,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,SAC9CnF,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,cAC9CnF,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,WAC9CnF,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,YAC9CnF,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,iBAC9CnF,EAAAA,cAAAA,KAAAA,CAAImF,UAAU,kCAAgC,YAGtDnF,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,uBACXnF,EAAAA,cAAAA,KAAAA,KACKod,EAAmBlc,KAAK2gB,IAAO,aAC/B7hB,EAAAA,cAAAA,KAAAA,CAAIwW,IAAKqL,EAAS1c,UAAU,6BACzBnF,EAAAA,cAAAA,MAAAA,CAAKwE,IAAKkd,IAA2C,QAA5B,EAAIA,EAAgBG,UAAQ,aAAxB,EAA0Bf,MAAMpc,IAAK,GAAGmd,SAAgB1c,UAAU,oBAC/FnF,EAAAA,cAAAA,OAAAA,CAAMmF,UAAU,mBAAmB0c,UAMnD7hB,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,2CAA2C1G,QAAS,IAAMuiB,KACpE/B,GAAiBA,EAAc,IAEpCjf,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iCAAiC1G,QAAS,IAAM8iB,KAC1DhH,EAAYva,EAAAA,cAACiiB,IAAQ,CAClBra,UAAU,MACVsa,UAAW,EACXC,aAAa,SACbC,eAAe,EACfC,iBAAiB,YACjBC,aAAa,iCACbC,YAAa,EACbC,gBAAc,EACdC,mBAAiB,EACjBC,cAAc,EACdC,iBAAiB,GAEhB1D,GAAiBA,EAAc3a,OAAS,GAAK2a,EAAc/C,MAAM,IAGlE+C,GAAiBA,EAAc3a,OAAS,GAAM2a,EAAc/C,MAAM,GAAGhb,KAAK+F,GAC/DA,MAIvBjH,EAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iCAAiCqc,wJC5DrD,MAAM9H,EAAmBkJ,GACxBA,GAA6D,aAAtCA,EAAoBne,cACpC,OAEPme,GAA6D,WAAtCA,EAAoBne,cACpC,eAEPme,GAA6D,cAAtCA,EAAoBne,cACpC,YAEJ,GAGEoe,EAAmB,CAC5BhR,EACAtB,EACAuS,KAEA,GAAIjR,MAAAA,GAAAA,EAASkR,gBAAiB,CAC1B,GAAIxS,GAAyC,IAArBA,EACpB,OAAOA,EAAiBzI,WAE5B,GAAIgb,GAA6D,KAA/BA,EAC9B,OAAOA,EAGf,OAAOjR,MAAAA,OAAO,EAAPA,EAASF,SAAS7J,YAmE7B,EAhEoD,IAM/C,gBANgD,QACjD+J,EAAO,QACPtK,EAAO,gBACPqB,EAAe,oBACfoa,EAAmB,2BACnBF,GACH,EACOG,EAAyB,GAC7B,MAAM,IAAEjlB,GAAQuJ,EACV2b,EAA2Bta,IAEhC,QAF+C,EAAIA,EAAgBrI,MAC/D8I,IAAoB,aAAc,QAAT,EAAAA,EAAK/C,YAAI,aAAT,EAAWC,UAAWvI,EAAIC,OAAOygB,kCAC9D,OAAW,QAAX,EAFmD,EAEjDlY,iBAAS,WAAX,EAFmD,EAEtC/B,eAER0e,EAAoCH,IAEzC,QAF4D,EAAIA,EAAoBziB,MAChFkQ,GAAiD,6CAAlBA,MAAAA,OAAQ,EAARA,EAAUC,cAC7C,OAAO,QAAP,EAFgE,EAE9DC,aAAK,WAAP,EAFgE,EAEvDyS,aAEuF,MAAjG,GAAyF,SAApF1J,EAAgByJ,GAAqCD,GACtDD,EAAmD,QAA7B,EAAGpR,MAAAA,OAAO,EAAPA,EAAS/G,yBAAiB,QAAI,QACpD,GACkF,iBAApF4O,EAAgByJ,GAAqCD,IAC+B,cAApFxJ,EAAgByJ,GAAqCD,GACvD,OACC,IAAIrJ,EACAjR,IAA0F,QAA3E,EAAIA,EAAgBrI,MAAK8I,IAAI,aAAa,QAAT,EAAAA,EAAK/C,YAAI,aAAT,EAAWC,UAAWvI,EAAIC,OAAOwgB,mBAAS,aAAvE,EAAyEjY,WAChG,IACsB,KAAjBqT,GAAD,MAAwBA,IACxB7b,EAAIC,OAAO6b,WACX9b,EAAIC,OAAO6b,UAAUxV,OAAS,EAChC,SACE,MAAM+e,EACFza,IAKC,QALc,EACfA,EAAgBrI,MACZ8I,IAAI,aACArL,EAAIC,OAAOqlB,8BACF,QAAT,EAAAja,EAAK/C,YAAI,aAAT,EAAWC,UAAWvI,EAAIC,OAAOqlB,sCACxC,OAAW,QAAX,EAJD,EAIG9c,iBAAS,WAAX,EAJD,EAIc/B,eAEd4e,MAAAA,GAAmD,KAAVA,GACzCrlB,EAAIC,OAAO6b,UAAU5Y,KAAKqiB,IAClBA,EAAYpc,UAAU1C,gBAAkB4e,IACxCxJ,OACkCtY,IAA9BgiB,EAAYvJ,eACsB,KAA9BuJ,EAAYvJ,eACkB,OAA9BuJ,EAAYvJ,cACVuJ,EAAYvJ,cACZ,OAItBH,EAAe7b,EAAIC,OAAO6b,UAAU,GAAGE,cAEvCH,GAA2C,KAA3BoJ,IAChBA,GAAyBrY,EAAAA,EAAAA,IAAqBiP,IAItD,OAAOoJ,EACHjjB,IAAAA,cAAAA,MAAAA,CAAKmF,UAAU,iCACV8d,GAELjjB,IAAAA,cAACwjB,EAAAA,EAAc,CAACC,KAAK,OAAOte,UAAU,wpBC3G9C,MAAMue,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8B,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAI7P,MAAM,oBAAsB2P,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUxc,KAC3Dic,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUxc,IAAMqc,IAMhGJ,EAAQC,QAAQ,yBAA2B,CACxCQ,EAAG,IAAMC,EAAQ,MACjBC,MAAO,kBACPC,GAAI,CAAC,CAACC,KAAK,mBAAqBC,KAAK,uCAAwCC,MAAO,GAAG,CAACF,KAAK,UAAYC,KAAK,0EAA2EC,MAAO,GAAG,CAACF,KAAK,sBAAwBC,KAAK,gDAAiDC,MAAO,GAAG,CAACF,KAAK,mCAAqCC,KAAK,+CAAgDC,MAAO,GAAG,CAACF,KAAK,qBAAuBC,KAAK,uDAAwDC,MAAO,GAAG,CAACF,KAAK,yBAA2BC,KAAK,yEAA0EC,MAAO,IAEtmBC,KAAK,EACLC,GAAI,YACJC,EAAG,wBACHC,EAAG,YAEHC,IAAK,GAGLrc,GAAI,qCAOAob,EAF4B,0EACXO,EAAQ,KAQzBP,EAF4B,uDACXO,EAAQ,MAQzBP,EAF4B,+CACXO,EAAQ,MAQzBP,EAF4B,uCACXO,EAAQ,MAQzBP,EAF4B,gDACXO,EAAQ,MAQzBP,EAF4B,yEACXO,EAAQ,MAMjC9kB,OAAOylB,aAAezlB,OAAOylB,cAAgB,GAC7CzlB,OAAOylB,aAAapB,QAAO,OACpBrkB,OAAOylB,aAAapB,SAAW,IAC/BD,EAAQC,SAGXrkB,OAAOylB,aAAanB,YAAW,OAC5BtkB,OAAOylB,aAAanB,aAAe,IACnCF,EAAQE,aAEY,MAAMoB,EAAiB,GAC9BA,EAAe,2EAA6E,CACpGb,EAAG,IAAMC,EAAQ,MACjBa,GAAI,6CAEpB3lB,OAAOylB,aAAezlB,OAAOylB,cAAgB,GAC7CzlB,OAAOylB,aAAaC,eAAc,OACP1lB,OAAOylB,aAAaC,gBAAkB,IACtCA,+BCrH3B,IAAIE,EAAI,EAAQ,IACZC,EAAO,EAAQ,IACfC,EAAY,EAAQ,IACpBC,EAA6B,EAAQ,KACrCC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAKtBL,EAAE,CAAEM,OAAQ,UAAWC,MAAM,EAAMC,OAJO,EAAQ,MAIgC,CAChF/R,WAAY,SAAoBgS,GAC9B,IAAIC,EAAIpZ,KACJqZ,EAAaR,EAA2BS,EAAEF,GAC1CG,EAAUF,EAAWE,QACrBC,EAASH,EAAWG,OACpB1b,EAASgb,GAAQ,WACnB,IAAIW,EAAiBb,EAAUQ,EAAEG,SAC7BG,EAAS,GACTC,EAAU,EACVC,EAAY,EAChBb,EAAQI,GAAU,SAAUU,GAC1B,IAAIza,EAAQua,IACRG,GAAgB,EACpBF,IACAjB,EAAKc,EAAgBL,EAAGS,GAASE,MAAK,SAAUrT,GAC1CoT,IACJA,GAAgB,EAChBJ,EAAOta,GAAS,CAAE4a,OAAQ,YAAatT,MAAOA,KAC5CkT,GAAaL,EAAQG,OACtB,SAAUzb,GACP6b,IACJA,GAAgB,EAChBJ,EAAOta,GAAS,CAAE4a,OAAQ,WAAYC,OAAQhc,KAC5C2b,GAAaL,EAAQG,YAGzBE,GAAaL,EAAQG,MAGzB,OADI5b,EAAOG,OAAOub,EAAO1b,EAAO4I,OACzB2S,EAAWQ,0BCxCtB,EAAQ,yBCDRK,EAAOC,QAAU3mB,2BCAjB0mB,EAAOC,QAAUC","sources":["webpack://mattressfirm/./src/Utilities/allRegex.ts?9889","webpack://mattressfirm/./src/Utilities/components/BVRatingSummary.tsx?6e2e","webpack://mattressfirm/./src/Utilities/get-core-delivery-batch.ts?5a2b","webpack://mattressfirm/./src/Utilities/get-product-badge.tsx?635b","webpack://mattressfirm/./src/Utilities/get-product-brand.tsx?2b65","webpack://mattressfirm/./src/Utilities/get-rating.tsx?7b67","webpack://mattressfirm/./src/Utilities/get-view-port.tsx?4210","webpack://mattressfirm/./src/Utilities/getAttributeUtils.ts?f2d8","webpack://mattressfirm/./src/Utilities/product-search-result-utils.tsx?58f2","webpack://mattressfirm/./src/actions/fetch-choose-your-foundation-database.action.ts?867b","webpack://mattressfirm/./src/actions/fetch-core-delivery-list.action.ts?41e3","webpack://mattressfirm/./src/data-actions/get-comfort-type.action.ts?e535","webpack://mattressfirm/./src/data-actions/get-product-benefits-data.action.ts?1d43","webpack://mattressfirm/./src/data-actions/get-selected-variant.override.action.ts?02a3","webpack://mattressfirm/./src/modules/mfrm-choose-your-foundation/util/renderBaseImage.tsx?27d3","webpack://mattressfirm/./src/modules/mfrm-products-compare/get-unbxd-collection-compare-data.action.ts?e1f9","webpack://mattressfirm/./src/modules/mfrm-products-compare/components/product-mattribute.tsx?5c13","webpack://mattressfirm/./src/modules/mfrm-products-compare/components/product-compare-carousel-item.tsx?5085","webpack://mattressfirm/./src/Utilities/get-delivery-message-batch.ts?dcce","webpack://mattressfirm/./src/modules/mfrm-products-compare/mfrm-products-compare.tsx?d723","webpack://mattressfirm/./src/modules/mfrm-products-compare/mfrm-products-compare.view.tsx?d21c","webpack://mattressfirm/./src/themes/mattressfirm/views/components/delivery-message/deliverymessage.component.tsx?e440","webpack://mattressfirm/./lib/mfrm-products-compare/module-registration.js?e7eb","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.promise.all-settled.js?ad9a","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/esnext.promise.all-settled.js?b32a","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nexport const emailRegex = (emailValue: string) => {\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n const validationEmail = /^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]+(?:-+[a-z0-9]+)*\\.)+(?:xn--[a-z0-9]+|[a-z]{2,16})$/i;\r\n\r\n return validationEmail.test(emailValue);\r\n};\r\n\r\n/**\r\n * Method to remove special characters for product name from product URL\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialChars = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n return str?.replace(/[^a-zA-Z0-9- ]/g, '');\r\n }\r\n return str;\r\n};\r\n\r\n\r\n/**\r\n * Method to remove special characters for product URL's path\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialCharsFromURLPath = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n const urlPath = decodeURIComponent(str.split('.p')[0])?.replace(/[^a-zA-Z0-9-/ ]/g, '');\r\n return `${urlPath}.p`;\r\n }\r\n return str;\r\n};\r\n","import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport const BVRatingSummary = ({\r\n itemId,\r\n onClick,\r\n variantId,\r\n hideReadReviewsButton\r\n}: {\r\n itemId: string | undefined;\r\n onClick?: () => void;\r\n variantId?: number | undefined;\r\n hideReadReviewsButton?: boolean\r\n}) => {\r\n const [dataBvProductIdAttr, setDataBvProductIdAttr] = useState(itemId);\r\n const wrapper = useRef(null);\r\n const interval = useRef(-1);\r\n const [numReviews, setNumReviews] = useState();\r\n\r\n useEffect(() => {\r\n setDataBvProductIdAttr(itemId);\r\n }, [itemId]);\r\n\r\n useEffect(() => {\r\n setDataBvProductIdAttr('bv-refresh');\r\n }, [variantId]);\r\n\r\n useEffect(() => {\r\n if (dataBvProductIdAttr === 'bv-refresh') {\r\n setDataBvProductIdAttr(itemId);\r\n }\r\n }, [dataBvProductIdAttr]);\r\n useEffect(() => {\r\n const pollInterval = window.setInterval(() => {\r\n const numReviewsHTML = wrapper.current?.querySelector('.bv_numReviews_text')?.innerHTML.match(/\\(([^)]+)\\)/)?.[1];\r\n if (numReviewsHTML) {\r\n setNumReviews(numReviewsHTML);\r\n clearInterval(pollInterval);\r\n }\r\n }, 0);\r\n });\r\n useEffect(() => {\r\n if (wrapper.current) {\r\n numReviews === '0' ? wrapper.current.style.display = 'none' : wrapper.current.style.display = 'flex';\r\n }\r\n }, [numReviews]);\r\n\r\n return (\r\n {\r\n if (hideReadReviewsButton) {\r\n interval.current = window.setInterval(() => {\r\n const button: Element | undefined = Array.from(document.querySelectorAll('.bv_button_buttonFull')).find((button) => {\r\n return button?.innerHTML === `Read ${numReviews} Reviews`;\r\n });\r\n if (button) {\r\n button.outerHTML = '';\r\n }\r\n });\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n if (hideReadReviewsButton) {\r\n clearInterval(interval.current);\r\n }\r\n }}\r\n data-bv-show='rating_summary'\r\n data-bv-product-id={dataBvProductIdAttr}\r\n onClick={onClick}\r\n ref={wrapper}\r\n />\r\n );\r\n};\r\n","import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport { IMFIATPInventoryEntityPLP, IMFIATPInventoryPLPResponse, IMFICartLine } from '../actions/BatchCoreProductDataServiceEntities.g';\r\nimport fetchCoreDeliveryListAction, { FetchCoreDeliveryListInput } from \"../actions/fetch-core-delivery-list.action\";\r\n\r\nexport interface IMFIATPInventoryEntityPLPEx extends IMFIATPInventoryEntityPLP {\r\n deliveryMessage: string | undefined;\r\n}\r\n\r\nasync function getListOfCoreDeliveryMessage(ctx: Msdyn365.IActionContext, cartLines: IMFICartLine[], zipCode?: string): Promise {\r\n const data: IMFIATPInventoryPLPResponse = await fetchCoreDeliveryListAction(new FetchCoreDeliveryListInput(cartLines, zipCode), ctx);\r\n const updatedResponse: IMFIATPInventoryEntityPLPEx[] | undefined = data?.ATPInventoryPLPData?.map((deliveryItem: IMFIATPInventoryEntityPLP, i: number) => {\r\n let deliveryMessage = '';\r\n if (deliveryItem.Available === 'YES' && deliveryItem.ATPQuantity !== undefined && parseInt(deliveryItem.ATPQuantity, 10) > 0) {\r\n const date = new Date();\r\n const today = dayjs(Date.now()).format('D M YY');\r\n const deliveryDate = dayjs(deliveryItem.SlotDate).format('D M YY');\r\n if (today === deliveryDate) {\r\n deliveryMessage = `Delivery by Today ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n } else if (deliveryDate === dayjs(date.setDate(date.getDate() + 1)).format('D M YY')) {\r\n deliveryMessage = `Delivery by Tomorrow ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n } else {\r\n deliveryMessage = `Delivery by ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n }\r\n } else {\r\n deliveryMessage = ctx.requestContext.app.config.defaultDeliveryMessage ? ctx.requestContext.app.config.defaultDeliveryMessage : '';\r\n }\r\n return { ...deliveryItem, deliveryMessage };\r\n });\r\n return updatedResponse;\r\n}\r\n\r\nexport default getListOfCoreDeliveryMessage;","import { IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport tz from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\ndayjs.extend(tz);\r\ndayjs.extend(utc);\r\ndayjs.extend(isBetween);\r\nimport React from 'react';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nconst format = 'M/D/YYYY H:m:s';\r\n\r\nexport interface IBadgeData {\r\n src: string;\r\n alt: string;\r\n start: dayjs.Dayjs;\r\n end: dayjs.Dayjs;\r\n}\r\n\r\nconst defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `m=6`, w: 0, h: 0 }\r\n },\r\n disableLazyLoad: true\r\n};\r\n\r\nexport const parseBadgeData = (badgeData: string, requestContext: IRequestContext): IBadgeData | undefined => {\r\n let dataSegments;\r\n let scheduleStart;\r\n let scheduleEnd;\r\n let badgeType;\r\n let parsedScheduleStart;\r\n let startDate;\r\n let startTime;\r\n let parsedScheduleEnd;\r\n let endDate;\r\n let endTime;\r\n\r\n try {\r\n // split the data into its segments\r\n dataSegments = badgeData.split('#');\r\n scheduleStart = dataSegments[0];\r\n scheduleEnd = dataSegments[1];\r\n badgeType = dataSegments[2];\r\n\r\n // parse schedule start\r\n parsedScheduleStart = scheduleStart.split('_');\r\n startDate = parsedScheduleStart[0];\r\n startTime = parsedScheduleStart[1];\r\n\r\n // parse schedule end\r\n parsedScheduleEnd = scheduleEnd.split('_');\r\n endDate = parsedScheduleEnd[0];\r\n endTime = parsedScheduleEnd[1];\r\n } catch (e) {\r\n return;\r\n }\r\n\r\n const startMoment = `${startDate} ${startTime?.replace(/-/g, \":\")}`;\r\n const endMoment = `${endDate} ${endTime?.replace(/-/g, \":\")}`;\r\n\r\n const startMomentFormatted = dayjs(startMoment?.replace(/-/g, \"/\"));\r\n const endMomentFormatted = dayjs(endMoment?.replace(/-/g, \"/\"));\r\n\r\n // check if schedule is valid\r\n if (!(startMomentFormatted.isValid() && endMomentFormatted.isValid())) {\r\n return;\r\n }\r\n\r\n // parse badge type and create image src\r\n const baseUrl = requestContext.apiSettings.baseImageUrl.substring(0, requestContext.apiSettings.baseImageUrl.length - 1);\r\n if (badgeType) {\r\n const removed$ = badgeType.substring(1, badgeType.length - 1);\r\n const parsedBadgeType = removed$?.replace(' ', '-').toLowerCase();\r\n\r\n // remove page name portion\r\n const altText = removed$.split('-')[0];\r\n\r\n const src = `${baseUrl}${parsedBadgeType}.png`;\r\n return {\r\n src: src,\r\n alt: altText,\r\n start: convertTimeZone(startMomentFormatted),\r\n end: convertTimeZone(endMomentFormatted)\r\n };\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\n// convert given time to Central Time (CT)\r\nconst convertTimeZone = (time: dayjs.Dayjs): dayjs.Dayjs => {\r\n return dayjs(time.format(format), format).tz('America/Chicago').local();\r\n};\r\n\r\nexport const buildProductBadge = (parsedBadgeData: IBadgeData, requestContext: IRequestContext): JSX.Element | undefined => {\r\n // only build image if it is scheduled\r\n const isScheduled = dayjs().isBetween(parsedBadgeData.start, parsedBadgeData.end);\r\n\r\n if (isScheduled) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const renderProductBadge = (\r\n attributeName: string | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined => {\r\n const badgeData = attributeName;\r\n if (!badgeData) {\r\n return;\r\n }\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n\r\n // build product badge image components\r\n const finalizedBadges = parsedBadges.map(parsedBadge => parsedBadge && buildProductBadge(parsedBadge, requestContext));\r\n\r\n return finalizedBadges ? <>{finalizedBadges} : <>;\r\n};\r\n\r\nexport const renderProductBadgeByFilteringAttributes = (\r\n attributeName: string | undefined,\r\n attributes: AttributeValue[] | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined => {\r\n const badgeData =\r\n attributeName &&\r\n attributes?.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attributeName.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!badgeData) {\r\n return;\r\n }\r\n\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n // build product badge image components\r\n const finalizedBadges = parsedBadges.map(parsedBadge => parsedBadge && buildProductBadge(parsedBadge, requestContext));\r\n\r\n return finalizedBadges && <>{finalizedBadges};\r\n};\r\n","import { IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport { IBrandListData } from '../modules/mfrm-buybox/mfrm-buybox.view';\r\nimport { IProductBonusWithBrandName } from '../modules/mfrm-cart/mfrm-cart';\r\nimport {hasArray} from './emtpyChecker';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nconst fallBackBrandAttribute = 'VENDOR BRAND';\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity\r\nexport const parseBrandData = (\r\n attributes: AttributeValue[] | undefined,\r\n backendAttribute: string,\r\n gridSettings: IGridSettings,\r\n renderBrandNameOnly: Boolean = false,\r\n brandList: IBrandListData[],\r\n imageSettings?: IImageSettings\r\n): JSX.Element | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attribute.toLowerCase().trim())\r\n ?.TextValue;\r\n\r\n if (renderBrandNameOnly) {\r\n return {productBrandName};\r\n }\r\n\r\n const selectedBrand =\r\n (brandList &&\r\n productBrandName &&\r\n brandList.find(\r\n (brand: IBrandListData) => brand && brand.brandName.toLowerCase().trim() === productBrandName.toLowerCase().trim()\r\n )) ||\r\n undefined;\r\n\r\n if (!selectedBrand) {\r\n return undefined;\r\n }\r\n\r\n const copySelectedBrand: IBrandListData = selectedBrand;\r\n // set alt text to brand name if no alt text is configured\r\n if (copySelectedBrand && _useDefaultAltText(copySelectedBrand) && copySelectedBrand.brandLogo) {\r\n copySelectedBrand.brandLogo.altText = productBrandName;\r\n }\r\n\r\n // set height to configured value or the default\r\n const height = copySelectedBrand && copySelectedBrand.logoHeight !== undefined ? copySelectedBrand.logoHeight : 22;\r\n const brandImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n lg: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n xl: { q: `w=0&h=25&m=6`, w: 0, h: 25 }\r\n },\r\n lazyload: false\r\n };\r\n\r\n const brandLogo = copySelectedBrand && copySelectedBrand.brandLogo && (\r\n \r\n );\r\n // place logo inside a link if configured to\r\n const brandLink =\r\n copySelectedBrand &&\r\n copySelectedBrand.brandLink &&\r\n copySelectedBrand.brandLink.linkUrl &&\r\n copySelectedBrand.brandLink.linkUrl.destinationUrl &&\r\n copySelectedBrand.brandLink;\r\n const linkElement = brandLink && (\r\n \r\n {brandLogo}\r\n \r\n );\r\n\r\n return linkElement || brandLogo;\r\n};\r\n// get only brandName\r\nexport const parseBrandName = (attributes: AttributeValue[] | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\nexport const parseBrandNameUnbxd = (attributes: any | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n // let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n let productBrandName = attributes && attributes[attribute];\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get only brandName\r\nexport const getBrandNameCheck = (attributes: AttributeValue[] | undefined, backendAttribute: string): string | undefined => {\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === backendAttribute.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!productBrandName) {\r\n return undefined;\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get the appropriate image alt text\r\nconst _useDefaultAltText = (selectedBrand: IBrandListData): boolean => {\r\n const configuredAltText = selectedBrand.brandLogo?.altText;\r\n return !(configuredAltText && configuredAltText.trim() && configuredAltText !== 'No Data Available');\r\n};\r\n","import { RatingComponent } from '@msdyn365-commerce/components';\r\nimport {\r\n ICoreContext\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n format\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\nexport function renderRating(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string\r\n): JSX.Element | null {\r\n if (avgRating && avgRating !== 0) {\r\n const numRatings = (totalRatings && totalRatings.toString()) || '0';\r\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\r\n\r\n return (\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n}\r\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\r\n if (rating && ratingAriaLabel) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n return '';\r\n}","import MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst _getViewPort = (context: ICoreContext): GridSize => {\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n return 'xs';\r\n};\r\n\r\nexport default _getViewPort;\r\n","import { AttributeValue } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nexport const getAttributeByName = (attributeValues: AttributeValue[] | undefined, keyValue: string): AttributeValue | undefined => {\r\n return attributeValues && attributeValues.find(currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === keyValue.toLowerCase().trim());\r\n};\r\nexport const getAttributeValueByNameUnbxd = (list: any[] | undefined, keyValue: string | undefined): string | undefined => {\r\n return keyValue && list && list[keyValue];\r\n};\r\nexport const getAttributeArrayValueByNameUnbxd = (list: any[] | undefined, keyValue: string | undefined): string[] | undefined => {\r\n return keyValue && list && list[keyValue];\r\n};\r\nexport const getAttributeTextValue = (attribute: AttributeValue | undefined): string | undefined => {\r\n return attribute && attribute.TextValue;\r\n};\r\nexport const getunbxdAttributeNameByCRTName = (crtName: string | undefined, mapList: any): string | undefined => {\r\n return mapList && Array.isArray(mapList) && mapList?.find((attr: any) => crtName && attr?.CRTName.toLowerCase().trim() === crtName.toLowerCase().trim())?.UnbxdName;\r\n};","import { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport Cookies from 'universal-cookie';\r\nimport { IMFIATPInventoryEntity, IMFICartLine, IMFICLDeliveryScheduleParameters } from '../actions/CoreProductDataServiceEntities.g';\r\nimport { IMFIAvailablePromotionDescription, IMFIItem } from '../actions/EyebrowMessageDataServiceEntities.g';\r\nimport getEyebrowAction, { GetEyebrowMessageInput } from '../actions/get-eyebrow-message.action';\r\nimport _getDeliveryByMessage from './get-delivery-by-message';\r\nimport { IMFIATPInventoryEntityPLP } from '../actions/BatchCoreProductDataServiceEntities.g';\r\n\r\nexport const _getEyebrowMessage = async (products: IMFIItem[], context: ICoreContext>) => {\r\n const priceGroupForAPICall = context.app && context.app.config.priceGroup;\r\n if (products && products.length > 0 && (priceGroupForAPICall !== '' || priceGroupForAPICall !== undefined)) {\r\n const items: IMFIItem[] | undefined = [];\r\n products.map(item => {\r\n const singleItem: IMFIItem = {\r\n ItemId: item.ItemId,\r\n DistinctProductVariant: item.DistinctProductVariant\r\n };\r\n items.push(singleItem);\r\n });\r\n\r\n const requestBody: IMFIAvailablePromotionDescription = {\r\n PriceGroup: priceGroupForAPICall,\r\n Items: items\r\n };\r\n const getEyebrowMessageInput = new GetEyebrowMessageInput(requestBody, undefined, true);\r\n try {\r\n const result = await getEyebrowAction(getEyebrowMessageInput, context.actionContext);\r\n if (result) {\r\n return result;\r\n }\r\n } catch (error) {\r\n console.log('Error', error);\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const _makeDeliveryMessage = (days: string) => {\r\n if (days === '' || days === undefined || days === null) {\r\n return '';\r\n }\r\n\r\n let deliveryByMessage = '';\r\n let date = new Date();\r\n const daysSpan = days.split('-');\r\n let deliveryDate = Date.now();\r\n if (daysSpan && daysSpan[1] !== undefined && daysSpan.length) {\r\n let deliveryByMessageRange = '';\r\n daysSpan.map((item: string) => {\r\n date = new Date();\r\n deliveryDate = Date.now();\r\n if (parseInt(item, 10) > 0) {\r\n let numberOfDays = parseInt(item, 10);\r\n let newDate = deliveryDate;\r\n while (numberOfDays > 0) {\r\n newDate = date.setDate(date.getDate() + 1);\r\n if (dayjs(newDate).format('d') !== '0' && dayjs(newDate).format('d') !== '6') {\r\n numberOfDays--;\r\n }\r\n }\r\n deliveryByMessage = dayjs(newDate).format('MMM D');\r\n if (deliveryByMessageRange !== '') {\r\n deliveryByMessageRange = `${deliveryByMessageRange} to ${deliveryByMessage}`;\r\n } else {\r\n deliveryByMessageRange = deliveryByMessage;\r\n newDate = date.setDate(date.getDate() - parseInt(item[0], 10));\r\n }\r\n }\r\n });\r\n return `Delivery by ${deliveryByMessageRange}`;\r\n } else {\r\n deliveryByMessage = dayjs(deliveryDate).format('MMM D');\r\n let numberOfDays = parseInt(days, 10);\r\n let newDate = deliveryDate;\r\n let flag = true;\r\n while (numberOfDays > 0) {\r\n newDate = date.setDate(date.getDate() + 1);\r\n if (dayjs(newDate).format('d') !== '0' && dayjs(newDate).format('d') !== '6') {\r\n numberOfDays--;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n deliveryByMessage =\r\n flag && days === '1'\r\n ? `Tomorrow ${dayjs(Date.now()).format('MMM D')}`\r\n : dayjs(newDate).format('ddd MMM, D');\r\n return `Delivery by ${deliveryByMessage}`;\r\n }\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const _coreProductATPCall = async (\r\n itemLines: IMFICartLine[],\r\n setCoreProductATPData: React.Dispatch,\r\n context: ICoreContext>\r\n) => {\r\n const cookies = new Cookies();\r\n const zipcode = cookies.get('zip_code');\r\n if (itemLines && itemLines.length === 0) {\r\n setCoreProductATPData([]);\r\n }\r\n const currentDate = Date.now();\r\n const requestBody: IMFICLDeliveryScheduleParameters = {\r\n InventoryType: 'Delivery',\r\n Weeks: context.app.config.weeksPDPforATPCall,\r\n StoreId: '',\r\n Page: 'plp',\r\n RequestedDate: dayjs(currentDate).format('MM/DD/YYYY'),\r\n ZipCode: zipcode,\r\n ItemLines: itemLines\r\n };\r\n const getDeliveryByMessage = _getDeliveryByMessage(requestBody, context);\r\n getDeliveryByMessage\r\n .then(result => {\r\n if (result !== undefined && result?.ATPInventoryData && result?.ATPInventoryData.length > 0) {\r\n setCoreProductATPData(result?.ATPInventoryData);\r\n } else {\r\n setCoreProductATPData([]);\r\n }\r\n })\r\n .catch(e => {\r\n console.log('Error', e);\r\n });\r\n};\r\n\r\nconst _setTime = (time: string | undefined) => {\r\n if (time !== undefined && time !== '') {\r\n const temp = time.split(' ');\r\n if (temp && temp.length > 0) {\r\n let newDatewithTime = dayjs(Date.now()).format('M/D/YYYY');\r\n newDatewithTime = `${newDatewithTime} ${temp[0]}:00 ${temp[1].toUpperCase()}`;\r\n return newDatewithTime;\r\n }\r\n }\r\n return '';\r\n};\r\n\r\nexport interface IATPInventoryData {\r\n deliveryByMessage: string;\r\n locationId: string;\r\n}\r\n\r\nexport const _getSoonestDeliveryDate = (coreProductATPData: IMFIATPInventoryEntity[]): IATPInventoryData => {\r\n let deliveryDetails = {\r\n deliveryByMessage: '',\r\n locationId: ''\r\n };\r\n if (!coreProductATPData || !coreProductATPData.length) {\r\n return deliveryDetails;\r\n }\r\n for (let index = 0; index < coreProductATPData.length; index++) {\r\n const item = coreProductATPData[index];\r\n if (item.Available === 'YES' && item.ATPQuantity !== undefined && parseInt(item.ATPQuantity, 10) > 0) {\r\n const date = new Date();\r\n const today = dayjs(Date.now()).format('D M YY');\r\n const deliveryDate = dayjs(item.SlotDate).format('D M YY');\r\n const currHour = dayjs(Date.now()).format('H');\r\n if (today === deliveryDate) {\r\n const deliveryMessage =\r\n _setTime(item.StartTime) !== ''\r\n ? parseInt(dayjs(_setTime(item.StartTime)).format('H'), 10) < 14 && parseInt(currHour, 10) < 14\r\n ? `Delivery by Today ${dayjs(Date.now()).format('MMM D')}`\r\n : `Delivery by Tomorrow ${dayjs(date.setDate(date.getDate() + 1)).format('MMM D')}`\r\n : '';\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n break;\r\n } else {\r\n const deliveryMessage = `Delivery by ${dayjs(item.SlotDate).format('MMM D')}`;\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n return deliveryDetails;\r\n};\r\n\r\nexport const _getDeliveryDate = (coreProductATPData: IMFIATPInventoryEntityPLP) => {\r\n let deliveryDetails = {\r\n deliveryByMessage: '',\r\n locationId: ''\r\n };\r\n const item = coreProductATPData;\r\n if (item.Available === 'YES' && item.ATPQuantity !== undefined && parseInt(item.ATPQuantity, 10) > 0) {\r\n const date = new Date();\r\n const today = dayjs(Date.now()).format('D M YY');\r\n const deliveryDate = dayjs(item.SlotDate).format('D M YY');\r\n const currHour = dayjs(Date.now()).format('H');\r\n const startTimeHour = item.StartTime?.substring(0,2) || \"14\";\r\n if (today === deliveryDate) {\r\n const deliveryMessage =\r\n parseInt(startTimeHour, 10) < 14 && parseInt(currHour, 10) < 14\r\n ? `Delivery by Today ${dayjs(Date.now()).format('MMM D')}`\r\n : `Delivery by Tomorrow ${dayjs(date.setDate(date.getDate() + 1)).format('MMM D')}`;\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n } else {\r\n const deliveryMessage = `Delivery by ${dayjs(item.SlotDate).format('MMM D')}`;\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n }\r\n }\r\n return deliveryDetails;\r\n};\r\n\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * FetchChooseYourFoundationDatabase Input Action\r\n */\r\nexport class FetchChooseYourFoundationDatabaseInput implements Msdyn365.IActionInput {\r\n public jsonSrc: string;\r\n // Construct the input needed to run the action\r\n constructor(jsonSrc: string) {\r\n this.jsonSrc = jsonSrc;\r\n }\r\n\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `ChooseYourFoundationDatabase`;\r\n public getCacheObjectType = () => 'ChooseYourFoundationDatabase';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IFetchChooseYourFoundationDatabaseData {\r\n text: string;\r\n jsonSrc: string;\r\n}\r\n\r\nexport interface IDatabaseRow {\r\n mattressVariantReqId: string;\r\n baseVariantReqIdList: string[];\r\n recommendedBaseVariantReqId: string;\r\n}\r\n\r\nexport interface foo {\r\n database: AsyncResult;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new FetchChooseYourFoundationDatabaseInput(args?.requestContext.app.config.jsonSrc!);\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: FetchChooseYourFoundationDatabaseInput, ctx: Msdyn365.IActionContext): Promise {\r\n const res = await Msdyn365.sendRequest(input.jsonSrc, 'get');\r\n const database = res.data;\r\n return database;\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'FetchChooseYourFoundationDatabase',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getZipCode } from '../Utilities/get-zipcode';\r\nimport dayjs from 'dayjs';\r\nimport { mFIATPInventoryPLPAsync } from './BatchCoreProductDataActionExtension.g';\r\nimport { IMFIATPInventoryPLPResponse, IMFICartLine, IMFIDeliveryScheduleParameters } from './BatchCoreProductDataServiceEntities.g';\r\n\r\n/**\r\n * FetchCoreDeliveryList Input Action\r\n */\r\nexport class FetchCoreDeliveryListInput implements Msdyn365.IActionInput {\r\n // Construct the input needed to run the action\r\n public cartLines: IMFICartLine[];\r\n public zipCode?: string;\r\n constructor(cartLines: IMFICartLine[], zipCode?: string) {\r\n this.cartLines = cartLines;\r\n this.zipCode = zipCode;\r\n }\r\n\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => {\r\n return this.cartLines?.sort((a, b) => a?.VariantRecordId && b?.VariantRecordId && a?.VariantRecordId > b?.VariantRecordId ? 1 : -1).map(item => `FetchCoreDeliveryList-${item.VariantRecordId}-${this.zipCode}-${item.VariantRecordId?.length}`).toString();\r\n };\r\n public getCacheObjectType = () => 'FetchCoreDeliveryList';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IFetchCoreDeliveryListData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\n// const createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n// return new FetchCoreDeliveryListInput();\r\n// };\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function fetchCoreDeliveryAction(input: FetchCoreDeliveryListInput, ctx: Msdyn365.IActionContext): Promise {\r\n // const apiSettings = Msdyn365.msdyn365Commerce.apiSettings;\r\n const atpInput: IMFIDeliveryScheduleParameters = {\r\n Weeks: 6,\r\n InventoryType: 'Delivery',\r\n StoreId: '',\r\n RequestedDate: dayjs(Date.now()).format('MM/DD/YYYY'),\r\n ZipCode: input.zipCode ?? getZipCode(ctx),\r\n ItemLines: input.cartLines,\r\n CustomerRequestTime: dayjs(Date.now()).format('MM/DD/YYYY HH:mm:ss'),\r\n Id: 0,\r\n NoOfPriorityDC: 0\r\n };\r\n const response = await mFIATPInventoryPLPAsync({ callerContext: ctx }, atpInput);\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return response;\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >fetchCoreDeliveryAction,\r\n // Give your data action a unique id\r\n id: 'FetchCoreDeliveryList'\r\n // input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nexport class GetComfortTypesData extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n private comfortTypesDataUrl: string = '';\r\n constructor(comfortTypesDataUrl: string) {\r\n super({ shouldCacheOutput: true, cacheObjectType: 'comfortTypesDataCache', cacheKey: 'comfortTypesDataCache' });\r\n this.comfortTypesDataUrl = comfortTypesDataUrl;\r\n }\r\n public getComfortTypesDataUrl = () => this.comfortTypesDataUrl;\r\n public getCacheKey = () => `comfortTypesDataCache`;\r\n public getCacheObjectType = () => 'comfortTypesDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n if (inputData.config && inputData.config.comfortTypesDataUrl) {\r\n return new GetComfortTypesData(inputData.config.comfortTypesDataUrl);\r\n }\r\n return new GetComfortTypesData('');\r\n};\r\nasync function action(input: GetComfortTypesData, ctx: Msdyn365.IActionContext): Promise {\r\n const comfortTypesDataJsonUrl = ctx.requestContext.app.config.comfortTypesDataJsonUrl;\r\n const jsonUrl = comfortTypesDataJsonUrl || '';\r\n const res = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const comfortTypesData = res.data && res.data;\r\n return comfortTypesData;\r\n}\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n input: createInput\r\n});","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nexport class GetProductBenefitsData extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n private productBenefitsDataUrl: string = '';\r\n constructor(productBenefitsDataUrl: string) {\r\n super({ shouldCacheOutput: true, cacheObjectType: 'productBenefitsDataCache', cacheKey: 'productBenefitsDataCache' });\r\n this.productBenefitsDataUrl = productBenefitsDataUrl;\r\n }\r\n public getProductBenefitsDataUrl = () => this.productBenefitsDataUrl;\r\n public getCacheKey = () => `productBenefitsDataCache`;\r\n public getCacheObjectType = () => 'productBenefitsDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n if (inputData.config && inputData.config.productBenefitsDataUrl) {\r\n return new GetProductBenefitsData(inputData.config.productBenefitsDataUrl);\r\n }\r\n return new GetProductBenefitsData('');\r\n};\r\nasync function action(input: GetProductBenefitsData, ctx: Msdyn365.IActionContext): Promise {\r\n const productBenefitsDataJsonUrl = ctx.requestContext.app.config.productBenefitsDataUrl;\r\n const jsonUrl = productBenefitsDataJsonUrl || '';\r\n const res = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const productBenefitsData = res.data && res.data;\r\n return productBenefitsData;\r\n}\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n input: createInput\r\n});","import { generateProductImageUrl, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n getByIdAsync,\r\n getDimensionValuesAsync,\r\n getVariantsByDimensionValuesAsync,\r\n searchByCriteriaAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n AttributeValue,\r\n CommerceProperty,\r\n ProductDimension,\r\n ProductDimensionValue,\r\n ProductSearchCriteria,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { variantQueryStringName } from '../Utilities/constants';\r\nimport getAttributesForSelectedVariant, { AttributesForSelectedVariantInput } from './get-attributes-for-selected-variant';\r\nimport { getQueryParamsFromQueryByName } from './utilities/utils';\r\n// import { AttributesForSelectedVariantInput, getAttributesForSelectedVariantAction } from '@msdyn365-commerce-modules/product-specification/src/dataActions/get-attributes-for-selected-variant';\r\n\r\nexport interface IDefaultDimension {\r\n dimensionType: number;\r\n dimensionValue: string;\r\n}\r\n\r\nlet shouldDefaultSet: boolean = true;\r\n/**\r\n * Get selected variant action input class\r\n */\r\nexport class SelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public matchingDimensionValues: ProductDimension[];\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.matchingDimensionValues = matchingDimensionValues || [];\r\n }\r\n\r\n public getCacheKey = () => `SelectedVariant`;\r\n public getCacheObjectType = () => 'SimpleProduct';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action\r\n * @param inputData The input data passed to the createInput method\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new SelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Action method for the getSelectedVariant data aciton\r\n * @param input The action input class\r\n * @param ctx The action context\r\n */\r\n// tslint:disable-next-line:cyclomatic-complexity max-func-body-length\r\nasync function getSelectedVariantAction(input: SelectedVariantInput, ctx: IActionContext): Promise {\r\n //TODO: what is the use case for `matchingDimensionValues` to ever have values?\r\n // the `createInput` always passes an empty array to the input constructor. Where\r\n // else / how else is this getting called that would pass a populated array?\r\n const matchingDimensionValues = input.matchingDimensionValues ?? [];\r\n const variantId = ctx.requestContext.app.config.queryBasedVariantSelection\r\n ? getQueryParamsFromQueryByName(\r\n MsDyn365.isBrowser\r\n ? new URL(window.location.href.toString())\r\n : ctx.requestContext.url.requestUrl,\r\n variantQueryStringName)\r\n : undefined;\r\n let getByIdResponse;\r\n try {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n matchingDimensionValues?.length === 0 && variantId && !Number.isNaN(Number(variantId))\r\n ? Number(variantId)\r\n : await getDefaultVariantId(input.productId, ctx) ?? input.productId,\r\n input.channelId);\r\n } catch (error) {\r\n console.log('[getByIdAsync Error calling API]', error);\r\n }\r\n // bellow cond will only be 1 if we have invalid variantid\r\n if (!getByIdResponse && variantId) {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n input.productId,\r\n input.channelId);\r\n }\r\n\r\n // below condition will only be true if we have masterid in url and query\r\n if (getByIdResponse && !getByIdResponse?.MasterProductId) {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n await getDefaultVariantId(getByIdResponse.RecordId, ctx) ?? input.productId,\r\n input.channelId);\r\n }\r\n\r\n const baseProduct: SimpleProduct = Array.isArray(getByIdResponse)\r\n ? getByIdResponse[0]\r\n : getByIdResponse;\r\n // Need to dereference this before editing it. Otherwise we might not\r\n // properly get the mobx events because if things aren't properly observable\r\n // they won't fire when you set them, and then if you don't deref the value in\r\n // the cache will match the value when you try to save it, so it won't detect any\r\n // changes there either\r\n let product: SimpleProduct | null = { ...baseProduct };\r\n const originalDimensionLength = product.Dimensions ? product.Dimensions.length : 0;\r\n\r\n if (product && product.RecordId > 0) {\r\n let baseProductHadUnmatchedDimension: boolean = false;\r\n\r\n product.Dimensions?.forEach(dimension => {\r\n const matchedTargetDimension = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimension) {\r\n dimension.DimensionValue = matchedTargetDimension?.DimensionValue;\r\n } else {\r\n baseProductHadUnmatchedDimension = true;\r\n }\r\n });\r\n\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n product.RecordId,\r\n input.channelId,\r\n product\r\n );\r\n const productSpecificationData: AttributeValue[] = await getAttributesForSelectedVariant(actionInput, ctx)\r\n .catch((error: Error) => {\r\n error;\r\n }) || [];\r\n\r\n // check if default variant is given for product\r\n // const productSpecificationData: AttributeValue[] = await getAttributeValuesAsync({ callerContext: ctx, queryResultSettings: {} }, product.RecordId, input.channelId, 0);\r\n const defaultValues = productSpecificationData.find(data => data.Name?.toLowerCase().trim() === 'default variants')?.TextValue;\r\n const parsedDefaultData = defaultValues\r\n ? parseDefaultDimensionsData(defaultValues)\r\n : undefined;\r\n const productPreSelectionDimensions: ProductDimensionFull[] = [];\r\n\r\n //new - literally 10x faster!\r\n if (!product.MasterProductId) {\r\n // const now = (new Date()).valueOf()\r\n // console.time(`productPreSelectionDimensions${now}`);\r\n const asyncCalls = product.Dimensions?.map(async dimension => {\r\n const dimensionValues = await getDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n product?.MasterProductId\r\n ? product.MasterProductId\r\n // @ts-ignore: nested in `if(product && product.RecordId > 0)`\r\n : product.RecordId,\r\n input.channelId,\r\n dimension.DimensionTypeValue,\r\n matchingDimensionValues.filter(value => value.DimensionTypeValue !== dimension.DimensionTypeValue),\r\n null\r\n );\r\n\r\n // if dimensionValues have a length of exactly one then we need to make\r\n // it as selected dimension for getting variant of the product\r\n if (dimensionValues.length === 1 && shouldDefaultSet) {\r\n dimension.DimensionValue = dimensionValues[0];\r\n } else {\r\n // search through default dimensions to find current dimension\r\n const defaultValueToFind = parsedDefaultData\r\n ?.find(defaultData => defaultData.dimensionType === dimension.DimensionTypeValue)\r\n ?.dimensionValue.toLowerCase()\r\n .trim();\r\n\r\n // look through all dimension values to find the default one\r\n const defaultDimension: ProductDimensionValue | undefined = dimensionValues.find(\r\n availableDimensionValue => availableDimensionValue.Value?.toLowerCase().trim() === defaultValueToFind || availableDimensionValue.DimensionId?.toLowerCase().trim() === defaultValueToFind\r\n );\r\n\r\n if (defaultDimension && shouldDefaultSet) {\r\n dimension.DimensionValue = defaultDimension;\r\n }\r\n }\r\n\r\n const fullDimension: ProductDimensionFull = {\r\n ...dimension,\r\n DimensionValues: dimensionValues\r\n };\r\n\r\n productPreSelectionDimensions.push(fullDimension);\r\n }) || [];\r\n\r\n await Promise.allSettled(asyncCalls);\r\n }\r\n //*/\r\n\r\n // if there is any selection in productPreSelectionDimensions array then get the variant\r\n if (productPreSelectionDimensions.length > 0) {\r\n const mappedDimensions = productPreSelectionDimensions\r\n .filter(dimension => dimension && dimension.DimensionValue)\r\n .map(dimension => {\r\n return {\r\n DimensionTypeValue: dimension.DimensionTypeValue,\r\n DimensionValue: dimension.DimensionValue,\r\n ExtensionProperties: dimension.ExtensionProperties\r\n };\r\n });\r\n //console.log(\"mappedDimensions: \",mappedDimensions)\r\n if (originalDimensionLength > 0 && originalDimensionLength === mappedDimensions.length) {\r\n const variants = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct.RecordId,\r\n input.channelId,\r\n mappedDimensions\r\n );\r\n if (variants && variants.length === 1) {\r\n //TODO: why is the `product` variable that has been built up through the rest of the code\r\n // being overwriten in the final steps?\r\n product = variants[0];\r\n }\r\n }\r\n }\r\n else if (productPreSelectionDimensions.length === 0 && !baseProductHadUnmatchedDimension && matchingDimensionValues.length > 0) {\r\n const variants = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct.RecordId,\r\n input.channelId,\r\n matchingDimensionValues\r\n );\r\n\r\n if (variants && variants.length > 0) {\r\n //TODO: why is the `product` variable that has been built up through the rest of the code\r\n // being overwriten in the final steps?\r\n product = variants[0];\r\n }\r\n }\r\n else {\r\n //TODO: what should happen here??\r\n //console.log(\"in 'else' for getVariantsByDimensionValuesAsync\")\r\n }\r\n\r\n const newImageUrl = generateProductImageUrl(product, ctx.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n product.PrimaryImageUrl = newImageUrl;\r\n }\r\n }\r\n\r\n shouldDefaultSet = false;\r\n\r\n return product;\r\n}\r\n\r\nconst parseDefaultDimensionsData = (defaultValue: string): IDefaultDimension[] | undefined => {\r\n try {\r\n const defaultDimensions: IDefaultDimension[] = [];\r\n\r\n const splitDimensionTypes = defaultValue.split(',');\r\n splitDimensionTypes.forEach(dimensionData => {\r\n const [dimensionTypeString, dimensionValue] = dimensionData.split('_');\r\n const dimensionType = parseInt(dimensionTypeString, 10);\r\n defaultDimensions.push({\r\n dimensionType,\r\n dimensionValue\r\n });\r\n });\r\n\r\n return defaultDimensions;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const getDefaultVariantId = async (masterId: number, context: IActionContext): Promise => {\r\n const productSearchCriteria: ProductSearchCriteria = {\r\n Ids: [masterId],\r\n Context: {\r\n ChannelId: +context.requestContext.apiSettings.channelId,\r\n CatalogId: +context.requestContext.apiSettings.catalogId\r\n },\r\n IncludeAttributes: true,\r\n SearchCondition: '*'\r\n };\r\n try {\r\n const productSearchResults = await searchByCriteriaAsync(\r\n { callerContext: context },\r\n productSearchCriteria\r\n );\r\n // If the ProductSearchResult API finds the products then populate the product image urls and return\r\n // otherwise if the API does not exist or does not return products proceed to the legacy flows for legacy/backward compatibility reasons\r\n context.telemetry.debug('Product search results returned', JSON.stringify(productSearchResults));\r\n if (productSearchResults.length > 0) {\r\n const defaultVariantId = productSearchResults[0]?.ExtensionProperties && productSearchResults[0]?.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\"\r\n )?.Value?.LongValue;\r\n return !defaultVariantId || defaultVariantId === 0 ? undefined : defaultVariantId;\r\n }\r\n return undefined;\r\n } catch (e) {\r\n // In case of an error fall back to legacy flow\r\n context.telemetry.error(`Error while getting productSearchResult: ${e}`);\r\n return undefined;\r\n }\r\n};\r\n\r\n/**\r\n * The complete getSelectedVariant data action\r\n */\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\r\n action: >getSelectedVariantAction,\r\n input: createInput\r\n});\r\n","import React from 'react';\r\nimport { IGridSettings, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\n\r\n\r\nexport const renderBaseImage = (\r\n gridSettings?: IGridSettings,\r\n PrimaryImageUrl?: string,\r\n altText?: string,\r\n fallbackImageUrl?: any,\r\n lazyLoading?: boolean\r\n): JSX.Element | null => {\r\n if (!PrimaryImageUrl || !gridSettings) {\r\n return null;\r\n }\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=240&h=240&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: lazyLoading ? lazyLoading : false\r\n };\r\n\r\n const img: IImageData = {\r\n src: PrimaryImageUrl ? PrimaryImageUrl : '',\r\n altText: altText ? altText : ''\r\n };\r\n return (\r\n \r\n );\r\n};","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365All from '@msdyn365-commerce/core';\r\nimport Msdyn365 from '@msdyn365-commerce/core';\r\nimport fetchChooseYourFoundationDatabaseDataAction, { FetchChooseYourFoundationDatabaseInput } from '../../actions/fetch-choose-your-foundation-database.action';\r\nimport { getQueryParamsFromQueryByName, getSelectedProductIdFromActionInput } from '../../data-actions/utilities/utils';\r\nimport { getDefaultVariantId } from '../../data-actions/get-selected-variant.override.action';\r\nimport { variantQueryStringName } from '../../Utilities/constants';\r\n\r\n/**\r\n * GetUnbxdCollectionCompareData Input Action\r\n */\r\nexport class GetUnbxdCollectionCompareDataInput implements Msdyn365All.IActionInput {\r\n // Construct the input needed to run the action\r\n public configs?: any;\r\n public recordId?: string;\r\n constructor(configs?: any, recordId?: string) {\r\n this.configs = configs;\r\n this.recordId = recordId;\r\n }\r\n\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `VariantIDs-${this.recordId}`;\r\n public getCacheObjectType = () => 'VariantIDs';\r\n public dataCacheType = (): Msdyn365All.CacheType => 'request';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IGetUnbxdCollectionCompareDataData {\r\n collectionData: any | null;\r\n productId: number | undefined | null;\r\n variantIds: string[] | undefined;\r\n collectionDescription: string | undefined;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365All.ICreateActionContext): Msdyn365All.IActionInput => {\r\n const variantId = args.requestContext.app.config.queryBasedVariantSelection\r\n ? getQueryParamsFromQueryByName(\r\n Msdyn365.isBrowser\r\n ? new URL(window.location.href.toString())\r\n : args.requestContext.url.requestUrl,\r\n variantQueryStringName)\r\n : undefined;\r\n return new GetUnbxdCollectionCompareDataInput(args, variantId);\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function getUnbxdCollectionCompare(input: GetUnbxdCollectionCompareDataInput, ctx: Msdyn365All.IActionContext): Promise {\r\n let variantIdNumber: number | null | undefined;\r\n const actionInput = new FetchChooseYourFoundationDatabaseInput(ctx.requestContext.app.config.jsonSrc);\r\n const unbxdApiKey = ctx.requestContext.app.config.unbxdApiKey;\r\n const unbxdSiteKey = ctx.requestContext.app.config.unbxdSiteKey;\r\n const collectionJson: any = await fetchChooseYourFoundationDatabaseDataAction(actionInput, ctx);\r\n let collectionData: any | null = {};\r\n let variantIds: string[] | undefined = [];\r\n let collectionDescription: string | undefined;\r\n let response: any = {};\r\n if (collectionJson) {\r\n const baseURL = 'https://search.unbxd.io';\r\n variantIdNumber = input.recordId && !Number.isNaN(Number(input.recordId))\r\n ? Number(input.recordId)\r\n : await getDefaultVariantId(Number(getSelectedProductIdFromActionInput(ctx)), ctx);\r\n if (collectionJson.length > 0 && variantIdNumber) {\r\n variantIds = collectionJson?.find((item: any) => Number(item.mattressVariantReqId) === variantIdNumber)?.mattressComparisonReqIdList?.map((value: any) => value);\r\n collectionDescription = collectionJson?.find((item: any) => Number(item.mattressVariantReqId) === variantIdNumber)?.collectionDescription;\r\n variantIds && variantIds?.length >= 1 && variantIds?.unshift(`${variantIdNumber}`);\r\n let collectionCompareIds = '';\r\n if (variantIds && variantIds?.length >= 2) {\r\n for (let index = 0; index < variantIds?.length; index++) {\r\n collectionCompareIds += index === 0 ? `variantId:${variantIds[index]}` : ` OR variantId:${variantIds[index]}`;\r\n }\r\n } else {\r\n return { collectionData: null, productId: null, variantIds: undefined, collectionDescription };\r\n }\r\n if (collectionCompareIds.length) {\r\n const unbxdUrl = `${baseURL}/${unbxdApiKey}/${unbxdSiteKey}/search?q=*&variants=true&variants.count=*&filter= ${collectionCompareIds}`;\r\n response = await Msdyn365All.sendRequest(unbxdUrl, 'get');\r\n } else {\r\n return { collectionData: null, productId: null, variantIds: undefined, collectionDescription };\r\n }\r\n\r\n collectionData = response?.data?.response;\r\n return { collectionData, productId: variantIdNumber, variantIds: variantIds, collectionDescription };\r\n }\r\n }\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return { collectionData: null, productId: null, variantIds: undefined, collectionDescription };\r\n}\r\n\r\nexport default Msdyn365All.createObservableDataAction({\r\n action: >getUnbxdCollectionCompare,\r\n // Give your data action a unique id\r\n id: 'GetUnbxdCollectionCompareData',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n\r\n\r\n","import React from 'react';\r\nimport { IBooleanMattributesData } from '../mfrm-products-compare.props.autogenerated';\r\nexport interface IProductMattributeProps {\r\n mattributeName?: string | undefined,\r\n mattributeScore?: any | undefined,\r\n mattributeValue?: string | undefined,\r\n booleanMattributes?: IBooleanMattributesData[] | undefined;\r\n}\r\n\r\nexport const ProductMattribute: React.FC = (props) => {\r\n const { mattributeName, mattributeScore, mattributeValue, booleanMattributes} = props;\r\n const mattributescore = mattributeScore && Number(mattributeScore) / 2;\r\n if (booleanMattributes?.find(m => m?.mattributeName?.toLowerCase().trim() === mattributeName?.toLowerCase().trim())) {\r\n return (\r\n
\r\n
{mattributeName}
\r\n {mattributeValue === '1' ? YES : NO}\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n
{mattributeName}
\r\n
    \r\n {[...Array(5)].map((_, i) =>\r\n i < mattributescore && i + 1 > mattributescore ?\r\n (
  • )\r\n : i < mattributescore ? (
  • )\r\n : mattributescore === 0 || !mattributescore ? (
  • )\r\n : (
  • )\r\n )}\r\n\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport 'mfcl/variables.scss';\r\nimport { ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\n//** currently marking all as optional to excape errors */\r\nimport { ProductMattribute } from './product-mattribute';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { SimpleProductAndAttributes } from '../mfrm-products-compare';\r\nimport { getAttributeArrayValueByNameUnbxd, getAttributeValueByNameUnbxd } from '../../../Utilities/getAttributeUtils';\r\nimport { IBooleanMattributesData } from '../mfrm-products-compare.props.autogenerated';\r\nexport interface IProductCompareCarouselItemProps {\r\n productUrl?: string | undefined,\r\n zipCode?: string | undefined,\r\n title: string | undefined,\r\n price: number | undefined,\r\n image: JSX.Element | null,\r\n basePrice: number,\r\n productBadge: JSX.Element | undefined,\r\n ratings: React.ReactNode | undefined,\r\n deliveryMessage?: React.ReactNode | undefined\r\n mattributeData?: any[],\r\n index: number,\r\n comfort?: string,\r\n mattressType?: string,\r\n heigth?: string,\r\n bestFor?: string,\r\n product?: SimpleProductAndAttributes,\r\n brandName?: string,\r\n context?: any,\r\n comfortIcon?: any,\r\n booleanMattributes?: IBooleanMattributesData[] | undefined;\r\n}\r\n\r\nexport const ProductCompareCarouselItem: React.FC = (props) => {\r\n const { product, brandName, productUrl, price, image, title,\r\n basePrice, productBadge, ratings, deliveryMessage,\r\n mattributeData, index, comfort, mattressType, heigth, bestFor, comfortIcon, booleanMattributes } = props;\r\n function renderPrice(\r\n productPrice?: number,\r\n basePrice?: number\r\n ): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: basePrice,\r\n CustomerContextualPrice: productPrice\r\n };\r\n\r\n return basePrice ? (\r\n
\r\n {price.AdjustedPrice && price.CustomerContextualPrice && price.CustomerContextualPrice < price.AdjustedPrice ? <>\r\n ${price.CustomerContextualPrice}\r\n \r\n \r\n ${price.AdjustedPrice}\r\n \r\n \r\n :\r\n \r\n ${price.BasePrice}\r\n }\r\n
\r\n ) : null;\r\n }\r\n\r\n function renderMattributes(\r\n mattributeData: any,\r\n booleanMattributes?: IBooleanMattributesData[] | undefined\r\n ): JSX.Element | null {\r\n return mattributeData ? (\r\n
\r\n

Mattributes

\r\n {mattributeData?.sort((a: any, b: any) => a?.mattributeName > b?.mattributeName ? 1 : -1)?.sort((a: any, b: any) => {\r\n if (booleanMattributes?.find(e => e?.mattributeName?.toUpperCase() === a?.mattributeName?.toUpperCase())) {\r\n return 1;\r\n } else if (booleanMattributes?.find(e => e?.mattributeName?.toUpperCase() === b?.mattributeName?.toUpperCase())) {\r\n return -1;\r\n } else {\r\n return 0;\r\n }\r\n }).map((mattribute: any, index: number) => {\r\n return ;\r\n })}\r\n
\r\n ) : null;\r\n }\r\n const callTealiumOnClick = async (): Promise => {\r\n const productName = product?.Name;\r\n const variantID = getAttributeValueByNameUnbxd(product as any, 'v_VariantId');\r\n const productCategory = getAttributeArrayValueByNameUnbxd(product as any, 'categoryPathId2')?.at(-2)?.split('|')[1] ?? '';\r\n\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n // eslint-disable-next-line security/detect-non-literal-fs-filename\r\n utag.link({\r\n event: 'product-click',\r\n enhanced_action: 'product_click',\r\n event_category: 'ecommerce',\r\n event_action: 'product click',\r\n event_label: `${product?.ItemId}: ${productName}`,\r\n event_noninteraction: 'false',\r\n product_list_name: [`PDP Collection Compare`],\r\n product_position: [`${index}`],\r\n product_id: [`${product?.ItemId}`],\r\n product_name: [`${productName}`],\r\n product_category: [`${productCategory}`],\r\n product_brand: [`${brandName}`],\r\n product_variant: [`${variantID}`]\r\n });\r\n }\r\n };\r\n const scrollToBuybox = () => {\r\n if(MsDyn365.isBrowser){\r\n const currentProduct= document.getElementById('mfrm-buybox');\r\n currentProduct?.scrollIntoView({\r\n behavior: 'smooth'\r\n });\r\n }\r\n };\r\n\r\n const renderCompareCard = () => {\r\n return (\r\n <>\r\n
\r\n {productBadge}\r\n
\r\n
index !== 0 && callTealiumOnClick()}>\r\n {image}\r\n
\r\n
\r\n \r\n
\r\n \r\n {title}\r\n \r\n
\r\n
\r\n {renderPrice(\r\n price, basePrice)\r\n }\r\n
\r\n
\r\n {ratings}\r\n
\r\n {deliveryMessage}\r\n
\r\n
\r\n
\r\n Comfort\r\n
\r\n

{comfort ? comfort : '--'}

\r\n {`${comfort}\r\n
\r\n
\r\n
\r\n Best For\r\n

{bestFor ? bestFor : '--'}

\r\n
\r\n
\r\n Mattress Type\r\n

{mattressType ? mattressType : '--'}

\r\n
\r\n
\r\n Height\r\n

{heigth ? heigth : '--'}

\r\n
\r\n
\r\n {renderMattributes(mattributeData, booleanMattributes)}\r\n
index !== 0 && callTealiumOnClick()}>\r\n {index === 0 ? scrollToBuybox()}>Shop Now\r\n : Shop Now}\r\n
\r\n
\r\n \r\n );\r\n };\r\n\r\n return (\r\n
\r\n {index === 0 ?\r\n
scrollToBuybox()}>\r\n {renderCompareCard()}\r\n
\r\n :\r\n \r\n {renderCompareCard()}\r\n \r\n }\r\n
\r\n );\r\n};","import dayjs from \"dayjs\";\r\nimport { IBrandListData } from \"../modules/mfrm-buybox/mfrm-buybox.view\";\r\nimport { _deliveryMessage } from \"../modules/mfrm-buybox/components/buybox-devliery-by-message\";\r\nimport { _getProductType } from \"../themes/mattressfirm/views/components/delivery-message/deliverymessage.component\";\r\n\r\nexport interface IBatchDeliveryMessage {\r\n ItemId: string | undefined;\r\n Brand: string | undefined;\r\n brandList: any;\r\n deliveryDays: string | undefined;\r\n VariantId: number;\r\n ShippingInfo: string;\r\n DeliveryMessage: string | undefined;\r\n coreDefaultMessage: string | undefined\r\n}\r\nconst GetBatchDeliveryMessage = (prductIdsAndTypes: IBatchDeliveryMessage[]): IBatchDeliveryMessage[] => {\r\n return prductIdsAndTypes?.map((product: IBatchDeliveryMessage) => {\r\n let deliveryByMessage: string | undefined = '';\r\n let deliveryByMessageRange = '';\r\n const productType = _getProductType(product.ShippingInfo);\r\n if (productType.toLowerCase() === \"core\") {\r\n deliveryByMessage = product.coreDefaultMessage;\r\n }\r\n else if (productType.toLowerCase() === \"drop ship\" || productType.toLowerCase() === \"small parcel\" || !deliveryByMessage) {\r\n let deliveryDays = product.deliveryDays;\r\n if (\r\n !deliveryDays &&\r\n product.brandList &&\r\n product.brandList?.length > 0) {\r\n if (product.Brand) {\r\n product.brandList?.map((brandList: IBrandListData) => {\r\n if (brandList?.brandName?.toLowerCase() === product.Brand) {\r\n deliveryDays =\r\n brandList.brandLeadtime !== undefined && brandList.brandLeadtime !== '' && brandList.brandLeadtime !== null\r\n ? brandList.brandLeadtime\r\n : '';\r\n }\r\n });\r\n }\r\n }\r\n if (deliveryByMessage === '' && deliveryDays && deliveryDays !== '' && deliveryDays !== undefined) {\r\n const daysSpan = deliveryDays?.split('-');\r\n if (daysSpan && daysSpan[1] !== undefined && daysSpan.length) {\r\n daysSpan?.map((item: string, index: number) => {\r\n const date = new Date();\r\n const deliveryDate = date.setDate(date.getDate());\r\n if (parseInt(item, 10) > 0) {\r\n let numberOfDays = parseInt(item, 10);\r\n let newDate = deliveryDate;\r\n while (numberOfDays > 0) {\r\n newDate = date.setDate(date.getDate() + 1);\r\n if (dayjs(newDate).format('d') !== '0' && dayjs(newDate).format('d') !== '6') {\r\n numberOfDays--;\r\n }\r\n }\r\n deliveryByMessage = dayjs(newDate).format('MMM D');\r\n if (deliveryByMessageRange !== '') {\r\n deliveryByMessageRange = `${deliveryByMessageRange} to ${deliveryByMessage}`;\r\n } else {\r\n deliveryByMessageRange = deliveryByMessage;\r\n newDate = date.setDate(date.getDate() - parseInt(item[0], 10));\r\n }\r\n }\r\n });\r\n deliveryByMessage = deliveryByMessageRange;\r\n } else {\r\n deliveryByMessage = _deliveryMessage(deliveryDays);\r\n }\r\n }\r\n }\r\n return {\r\n ...product,\r\n DeliveryMessage: deliveryByMessage\r\n };\r\n });\r\n};\r\nexport default GetBatchDeliveryMessage;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { addThrottledEvent, getTelemetryObject, getPayloadObject, onTelemetryClick, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IMfrmProductsCompareData } from './mfrm-products-compare.data';\r\nimport { IMfrmProductsCompareProps } from './mfrm-products-compare.props.autogenerated';\r\nimport { ProductCompareCarouselItem } from './components/product-compare-carousel-item';\r\nimport { renderBaseImage } from '../mfrm-choose-your-foundation/util/renderBaseImage';\r\nimport { variantQueryStringName } from '../../Utilities/constants';\r\nimport { renderProductBadge } from '../../Utilities/get-product-badge';\r\nimport { parseBrandNameUnbxd } from '../../Utilities/get-product-brand';\r\nimport _getViewPort from '../../Utilities/get-view-port';\r\nimport GetBatchDeliveryMessage, { IBatchDeliveryMessage } from '../../Utilities/get-delivery-message-batch';\r\nimport { getAttributeArrayValueByNameUnbxd, getAttributeValueByNameUnbxd, getunbxdAttributeNameByCRTName } from '../../Utilities/getAttributeUtils';\r\nimport Cookies from 'universal-cookie';\r\nimport { _getProductType } from '../../themes/mattressfirm/views/components/delivery-message/deliverymessage.component';\r\nimport { _getSoonestDeliveryDate } from '../../Utilities/product-search-result-utils';\r\nimport { IFetchedCategoryIds } from '../mfrm-product-recommendations/mfrm-product-recommendations';\r\nimport { useInView } from 'react-intersection-observer';\r\nimport getUnbxdCollectionCompare, { GetUnbxdCollectionCompareDataInput, IGetUnbxdCollectionCompareDataData } from './get-unbxd-collection-compare-data.action';\r\nimport { IMFICartLine } from '../../actions/BatchCoreProductDataServiceEntities.g';\r\nimport getListOfCoreDeliveryMessage, { IMFIATPInventoryEntityPLPEx } from '../../Utilities/get-core-delivery-batch';\r\nimport { getZipCode } from '../../Utilities/get-zipcode';\r\nimport { BVRatingSummary } from '../../Utilities/components/BVRatingSummary';\r\nimport { getBVAttributeValuesUnbxd } from '../../Utilities/get-bv-attributes';\r\nimport { renderRating } from '../../Utilities/get-rating';\r\nimport { removeSpecialChars } from '../../Utilities/allRegex';\r\n\r\n\r\nexport interface IMfrmProductsCompareViewProps extends IMfrmProductsCompareProps {\r\n carouselItems: React.ReactNode[] | null;\r\n mattributeHeadings: string[],\r\n compareProductsList: SimpleProductAndAttributes[],\r\n isDesktop: boolean,\r\n collectionDescription: string | undefined\r\n onCurrentCardClick(): void;\r\n onOtherCardClick(): void;\r\n compareRef?: (node?: Element | null | undefined) => void\r\n}\r\nexport interface IMfrmAttributesList {\r\n RecordId: string | undefined;\r\n status: string | undefined;\r\n value: AttributeValue[] | undefined;\r\n}\r\nexport interface SimpleProductAndAttributes extends SimpleProduct {\r\n Attributes?: AttributeValue[] | undefined;\r\n Category?: IFetchedCategoryIds | undefined;\r\n}\r\n\r\n/**\r\n *\r\n * MfrmProductsCompare component\r\n * @extends {React.PureComponent>}\r\n */\r\nexport const MfrmProductsCompare: React.FC> = props => {\r\n\r\n let resizeThrottledEventHandler: (event: Event) => void;\r\n const [compareData, setCompareData] = React.useState(undefined);\r\n const [isDesktop, setIsDesktop] = React.useState(false);\r\n const [deliveryMessages, setDeliveryMessages] = React.useState([]);\r\n const [coreDeliveryMessages, setCoreDeliveryMessages] = React.useState([]);\r\n const onInitial = React.useRef(true);\r\n const unbxdData = props.data.unbxdCollectionCompare?.result;\r\n let collectionDescription = unbxdData?.collectionDescription;\r\n const cookies = new Cookies();\r\n const zipcode = cookies.get('zip_code');\r\n const attrListName = props.context.app.config?.attributeNamesMapingCrtToUnbxd;\r\n const updateViewPort = (context: ICoreContext): void => {\r\n const viewport = _getViewPort(context);\r\n if (viewport === 'lg' || viewport === 'xl') {\r\n setIsDesktop(true);\r\n } else {\r\n setIsDesktop(false);\r\n }\r\n };\r\n\r\n const getVariantsList = (): any[] => {\r\n const variantsData: any[] = [];\r\n const currentProductId = unbxdData?.productId;\r\n if (currentProductId && currentProductId === props?.data?.product?.result?.RecordId) {\r\n unbxdData?.collectionData?.products.map((product: any) => {\r\n product?.variants?.map((variant: any, index: number) => {\r\n variantsData.push(variant);\r\n });\r\n });\r\n collectionDescription = unbxdData?.collectionDescription;\r\n }\r\n else if (compareData?.collectionData?.products) {\r\n compareData?.collectionData?.products.map((product: any) => {\r\n product?.variants?.map((variant: any, index: number) => {\r\n variantsData.push(variant);\r\n });\r\n });\r\n collectionDescription = compareData?.collectionDescription;\r\n }\r\n return variantsData;\r\n };\r\n const compareProductsList = getVariantsList();\r\n\r\n const callTealiumOnLoad = async () => {\r\n if (compareProductsList.length) {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n const positions: string[] = [];\r\n const productPIds: string[] = [];\r\n const productsName: string[] = [];\r\n const productsCategory: string[] = [];\r\n const productsBrand: string[] = [];\r\n const productsVariant: string[] = [];\r\n const productsPrice: string[] = [];\r\n compareProductsList.slice(1).forEach((item: any, index: number) => {\r\n const retailVariantid = getAttributeValueByNameUnbxd(item, 'v_VariantId');\r\n const count = index + 1;\r\n positions.push(`${count}`);\r\n item?.ItemId && productPIds.push(item?.ItemId);\r\n item?.Name && productsName.push(item?.Name);\r\n item?.categoryPathId2.length && productsCategory.push(getAttributeArrayValueByNameUnbxd(item, 'categoryPathId2')?.at(-2)?.split('|')[1] ?? '');\r\n productsBrand.push(parseBrandNameUnbxd(item, getunbxdAttributeNameByCRTName(props?.context?.app?.config?.brandBackofficeAttributePdp, attrListName) ?? '') || '');\r\n retailVariantid && productsVariant.push(retailVariantid?.toString());\r\n productsPrice.push(item?.v_Price?.toString());\r\n });\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n // eslint-disable-next-line security/detect-non-literal-fs-filename\r\n utag.link({\r\n event: 'product-impression',\r\n enhanced_action: 'product_impression',\r\n event_category: 'ecommerce',\r\n event_action: 'product impression',\r\n event_label: getPagePath() ?? '',\r\n event_noninteraction: 'true',\r\n product_impression_list_name: [`PDP Collection Compare`],\r\n product_impression_position: positions,\r\n product_impression_id: productPIds,\r\n product_impression_name: productsName,\r\n product_impression_category: productsCategory,\r\n product_impression_brand: productsBrand,\r\n product_impression_variant: productsVariant,\r\n product_impression_price: productsPrice\r\n });\r\n }\r\n }\r\n };\r\n\r\n const getPagePath = (): string => {\r\n return MsDyn365.isBrowser\r\n ? window.location.href.split(location.host)[1].includes('?')\r\n ? window.location.href.split(location.host)[1].split('?')[0]\r\n : window.location.href.split(location.host)[1]\r\n : '';\r\n };\r\n\r\n const getMattributeData = (attributes: any | undefined, uniqueHeadings: string[]): any => {\r\n const mattributeData: any = [];\r\n uniqueHeadings &&\r\n uniqueHeadings.length > 0 &&\r\n uniqueHeadings.map((item, index) => {\r\n const scoreAttribute = attributes && attributes[getunbxdAttributeNameByCRTName(`${item} score`?.toLowerCase(), attrListName) ?? ''];\r\n const mattributeValue = attributes && attributes[getunbxdAttributeNameByCRTName(`${item}`?.toLowerCase(), attrListName) ?? ''];\r\n const obj = {\r\n mattributeName: item,\r\n score: scoreAttribute,\r\n mattributeValue\r\n };\r\n mattributeData.push(obj);\r\n });\r\n return mattributeData;\r\n };\r\n\r\n const getUniqueMattributeData = (): string[] => {\r\n const mattributeHeadings: string[] = [];\r\n compareProductsList?.map((product: any) => {\r\n const spotlightAttributeKey = product && product[getunbxdAttributeNameByCRTName('PDP_Feature Spotlight_Sequence', attrListName) ?? ''];\r\n const spotlightValues = spotlightAttributeKey ?? undefined;\r\n if (spotlightValues !== undefined) {\r\n const spotlightValuesArr = spotlightValues && spotlightValues.split(',');\r\n spotlightValuesArr &&\r\n spotlightValuesArr.length > 0 &&\r\n spotlightValuesArr.map((item: any, index: number) => {\r\n const attribute = product && product[getunbxdAttributeNameByCRTName(item, attrListName) ?? ''];\r\n attribute && !!attribute && mattributeHeadings.push(item);\r\n });\r\n }\r\n });\r\n return [...new Set(mattributeHeadings)]?.sort((a, b) => a.toUpperCase() > b.toUpperCase() ? 1 : -1)?.sort((a: any, b: any) => {\r\n if (props.config.booleanMattributes?.find(e => e?.mattributeName?.toUpperCase() === a?.toUpperCase())) {\r\n return 1;\r\n } else if (props.config.booleanMattributes?.find(e => e?.mattributeName?.toUpperCase() === b?.toUpperCase())) {\r\n return -1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n };\r\n\r\n const getRatings = (attributes: any | undefined): React.ReactNode | undefined => {\r\n return attributes && renderRating(\r\n props.context,\r\n props.typeName,\r\n props.id,\r\n getBVAttributeValuesUnbxd(attributes, getunbxdAttributeNameByCRTName('BVAverageOverallRating', attrListName) ?? ''),\r\n getBVAttributeValuesUnbxd(attributes, getunbxdAttributeNameByCRTName('BVTotalReviewCount', attrListName) ?? ''),\r\n props.resources.ratingAriaLabel\r\n );\r\n };\r\n\r\n const _renderDeliveryMessage = (recordId: number | undefined, shippingInfo: string | undefined) => {\r\n if (!deliveryMessages || deliveryMessages.length < 1) {\r\n return <>;\r\n }\r\n let deliveryMessage: string | undefined = '';\r\n if (_getProductType(shippingInfo).toLowerCase() === 'core' && coreDeliveryMessages && coreDeliveryMessages.find((item: any) => Number(item.VariantRecordId) === recordId)) {\r\n const atpDeliveryMsg = coreDeliveryMessages.find((item: any) => Number(item.VariantRecordId) === recordId)?.deliveryMessage;\r\n if (atpDeliveryMsg && atpDeliveryMsg !== '') {\r\n deliveryMessage = atpDeliveryMsg;\r\n\r\n }\r\n }\r\n if (!deliveryMessage || deliveryMessage === '') {\r\n deliveryMessage = deliveryMessages?.find(msg => msg?.VariantId === recordId)?.DeliveryMessage;\r\n }\r\n\r\n return (\r\n
\r\n {props.resources.deliveryBy}\r\n
\r\n {deliveryMessage}\r\n {zipcode && <> to{zipcode}}\r\n
\r\n
\r\n );\r\n };\r\n\r\n const [compareRef, inView] = useInView({\r\n threshold: 0,\r\n triggerOnce: true\r\n });\r\n\r\n const _renderCaouselItems = (): React.ReactNode[] | null => {\r\n const uniqueHeadings = getUniqueMattributeData();\r\n const sortedArray = compareData?.variantIds ?? unbxdData?.variantIds;\r\n return sortedArray && compareProductsList?.sort((a: any, b: any) => sortedArray?.indexOf(a?.variantId) - sortedArray?.indexOf(b?.variantId))?.map((product: any, index: number) => {\r\n const queryBasedSelection = props?.context?.app?.config?.queryBasedVariantSelection;\r\n let productUrl = getProductPageUrlSync(removeSpecialChars(product?.Name!, props.context) || '', queryBasedSelection ? product.MasterProductId || product.variantId : product.variantId, props.context && props.context.actionContext, undefined);\r\n if (queryBasedSelection && product.MasterProductId) {\r\n const variantIdQueryParams = productUrl.includes('?') ? `&${variantQueryStringName}=${product.variantId}` : `?${variantQueryStringName}=${product.variantId}`;\r\n productUrl += variantIdQueryParams;\r\n }\r\n const productMattributeData = getMattributeData(product, uniqueHeadings);\r\n const comfort = getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName('Comfort', attrListName)) ?? \"\";\r\n const sleepPosition = getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName('Sleep Position', attrListName)) ?? \"\";\r\n const bestFor = props.config.sleepStyleOptions?.find(option => option.selectedSleepStyle === sleepPosition);\r\n const mattressType = getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName('Product Type', attrListName)) ?? \"\";\r\n const heigth = getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName('Height', attrListName)) ?? \"\";\r\n const brandName = parseBrandNameUnbxd(product, getunbxdAttributeNameByCRTName(props?.context?.app?.config?.brandBackofficeAttributePdp, attrListName) ?? '') || '';\r\n const title = brandName ? `${brandName} ${product?.Name}` : product?.Name ?? '';\r\n const comfortIcons = props.data.comfortTypesData.result;\r\n const badgeValue = getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName(props?.context?.app?.config?.productBadgeAttribute, attrListName));\r\n const deliveryByMessage = _renderDeliveryMessage(Number(product?.variantId), getAttributeValueByNameUnbxd(product, getunbxdAttributeNameByCRTName(props?.context?.app?.config?.smallParcelAttributeKey, attrListName)) ?? '');\r\n return (\r\n : getRatings(product)}\r\n mattributeData={productMattributeData}\r\n productBadge={renderProductBadge(badgeValue, props?.context?.request)}\r\n deliveryMessage={deliveryByMessage}\r\n comfort={comfort}\r\n mattressType={mattressType}\r\n heigth={heigth}\r\n bestFor={bestFor?.sleepStyleDisplayName}\r\n product={product}\r\n brandName={brandName}\r\n context={props.context}\r\n comfortIcon={comfortIcons && comfortIcons[comfort] && comfortIcons[comfort]?.icon}\r\n booleanMattributes={props.config.booleanMattributes}\r\n />\r\n );\r\n });\r\n };\r\n\r\n const handleCurrentCardClick = () => {\r\n const telemetryContent: ITelemetryContent = getTelemetryObject('Products Details Page', props.friendlyName, props.telemetry);\r\n const payLoad = getPayloadObject('click', telemetryContent, 'Product Compare Current Card Click', '');\r\n onTelemetryClick(telemetryContent, payLoad, 'Product Compare Current Card Click')();\r\n };\r\n const handleOtherCardClick = () => {\r\n const telemetryContent: ITelemetryContent = getTelemetryObject('Products Details Page', props.friendlyName, props.telemetry);\r\n const payLoad = getPayloadObject('click', telemetryContent, 'Product Compare Other Card Click', '');\r\n onTelemetryClick(telemetryContent, payLoad, 'Product Compare Other Card Click')();\r\n };\r\n\r\n const getDeliveryMessages = async (productIdsAndtype: IBatchDeliveryMessage[]) => {\r\n const data = GetBatchDeliveryMessage(productIdsAndtype);\r\n void getCoreProductsDelivery(productIdsAndtype);\r\n if (data) {\r\n setDeliveryMessages(data);\r\n }\r\n };\r\n const getCoreProductsDelivery = async (productIdsAndtype: IBatchDeliveryMessage[]) => {\r\n productIdsAndtype = productIdsAndtype.filter(product => _getProductType(product.ShippingInfo).toLowerCase() === 'core');\r\n const itemLines: IMFICartLine[] = productIdsAndtype?.map(product => {\r\n return {\r\n ItemId: product?.ItemId,\r\n Quantity: 1,\r\n VariantRecordId: product.VariantId.toString()\r\n };\r\n });\r\n if (itemLines && itemLines.length > 0) {\r\n const atpResponse = await getListOfCoreDeliveryMessage(props.context.actionContext, itemLines, getZipCode(props.context.actionContext));\r\n atpResponse !== undefined && setCoreDeliveryMessages(atpResponse);\r\n\r\n }\r\n };\r\n\r\n const UpdateProductsData = async () => {\r\n const currentProductId = unbxdData?.productId;\r\n if (!currentProductId || currentProductId !== props?.data?.product?.result?.RecordId) {\r\n // get data from dataAction\r\n const response: IGetUnbxdCollectionCompareDataData = await getUnbxdCollectionCompare(new GetUnbxdCollectionCompareDataInput(props.config, props?.data?.product?.result?.RecordId?.toString()), props.context.actionContext);\r\n if (response?.collectionData?.products) {\r\n setCompareData(response);\r\n } else {\r\n setCompareData(undefined);\r\n }\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n void UpdateProductsData();\r\n }, [props?.data?.product?.result?.RecordId]);\r\n\r\n React.useEffect(() => {\r\n if (compareProductsList && compareProductsList.length && compareProductsList.length >= 1) {\r\n const productIdsAndtype: IBatchDeliveryMessage[] = compareProductsList.map((product: any) => {\r\n return {\r\n ItemId: product?.ItemId,\r\n VariantId: Number(product?.variantId),\r\n brandList: props.context.app.config.brandList,\r\n coreDefaultMessage: props.context.app.config.defaultDeliveryMessage,\r\n deliveryDays: product[getunbxdAttributeNameByCRTName(props.context.app.config.leadTime, attrListName) ?? ''] ?? '',\r\n Brand: product[getunbxdAttributeNameByCRTName(props.context.app.config.brandBackofficeAttributePdp, attrListName) ?? ''] ?? '',\r\n ShippingInfo: product[getunbxdAttributeNameByCRTName(props.context.app.config.smallParcelAttributeKey, attrListName) ?? ''] ?? '',\r\n DeliveryMessage: \"\"\r\n };\r\n });\r\n void getDeliveryMessages(productIdsAndtype);\r\n }\r\n }, [compareData, props?.data?.product?.result?.RecordId, zipcode]);\r\n\r\n React.useEffect(() => {\r\n if (inView) {\r\n void callTealiumOnLoad();\r\n }\r\n }, [inView]);\r\n\r\n React.useEffect(() => {\r\n if (MsDyn365.isBrowser) {\r\n resizeThrottledEventHandler = addThrottledEvent(window, 'resize', () => updateViewPort(props.context));\r\n }\r\n return () => {\r\n MsDyn365.isBrowser && window.removeEventListener('resize', resizeThrottledEventHandler!, false);\r\n };\r\n }, [props.context.request.gridSettings, MsDyn365.isBrowser && window.innerWidth]);\r\n\r\n React.useEffect(() => {\r\n if (onInitial.current) {\r\n onInitial.current = false;\r\n } else {\r\n void callTealiumOnLoad();\r\n }\r\n }, [props?.data?.product?.result?.RecordId]);\r\n\r\n if (!compareProductsList?.length) {\r\n return <>;\r\n }\r\n return props.renderView({\r\n ...props,\r\n carouselItems: compareProductsList ? _renderCaouselItems() : null,\r\n mattributeHeadings: getUniqueMattributeData(),\r\n compareProductsList: compareProductsList,\r\n isDesktop: isDesktop,\r\n collectionDescription,\r\n onCurrentCardClick: handleCurrentCardClick,\r\n onOtherCardClick: handleOtherCardClick,\r\n compareRef: compareRef\r\n });\r\n};\r\n\r\nexport default MfrmProductsCompare;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { Heading } from '@msdyn365-commerce-modules/utilities';\r\nimport { IMfrmProductsCompareViewProps } from './mfrm-products-compare';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport Carousel from 'mfcl/Carousel';\r\n\r\nexport default (props: IMfrmProductsCompareViewProps) => {\r\n\r\n const { mattributeHeadings, carouselItems, onCurrentCardClick, onOtherCardClick, compareRef, isDesktop, collectionDescription } = props;\r\n const { sleepExpertModuleSlot } = props.slots;\r\n if (!carouselItems?.length) {\r\n props.context.telemetry.error('Product Compare is empty, module wont render.');\r\n return null;\r\n }\r\n const mattributeIcons = props.data.productBenefitsData.result;\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
  • Price
  • \r\n
  • Deliver By
  • \r\n
  • Comfort
  • \r\n
  • Best For
  • \r\n
  • Mattress Type
  • \r\n
  • Height
  • \r\n
\r\n
\r\n
\r\n
    \r\n {mattributeHeadings.map((heading) =>\r\n (
  • \r\n {`${heading}\r\n {heading}\r\n
  • )\r\n )}\r\n
\r\n
\r\n
\r\n
onCurrentCardClick()}>\r\n {carouselItems && carouselItems[0]}\r\n
\r\n
onOtherCardClick()}>\r\n {isDesktop ? \r\n {carouselItems && carouselItems.length > 1 && carouselItems.slice(1)}\r\n \r\n :\r\n carouselItems && carouselItems.length > 1 && carouselItems.slice(1).map((item) => {\r\n return item;\r\n })}\r\n
\r\n
\r\n
{sleepExpertModuleSlot}
\r\n
\r\n );\r\n};\r\n","import { ICoreContext, IGeneric, IAny } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, CommerceProperty } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport { IBrandListData } from '../../../../../modules/mfrm-buybox/mfrm-buybox.view';\r\nimport { _getSoonestDeliveryDate, _makeDeliveryMessage } from '../../../../../Utilities/product-search-result-utils';\r\nimport { ProductSearchResultExtended } from '../../../custom-components/product-search-result-items';\r\nimport CustomSkeleton from '../../../custom-components/CustomSkeleton';\r\ninterface IDeliveryMessage {\r\n product?: ProductSearchResultExtended;\r\n context: ICoreContext>;\r\n isMasterProduct?: boolean;\r\n attributeValues?: AttributeValue[];\r\n extensionProperties?: CommerceProperty[];\r\n lowestPriceVariantRecordId?: string;\r\n}\r\n\r\n//TODO: common method; move to general utility file. AND change return type to an Enumeration\r\nexport const _getProductType = (shippingInformation: string | undefined): string => {\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'delivery') {\r\n return 'Core';\r\n }\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'parcel') {\r\n return 'Small Parcel';\r\n }\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'drop ship') {\r\n return 'Drop Ship';\r\n }\r\n return '';\r\n};\r\n\r\nexport const computeItemLines = (\r\n product: IDeliveryMessage['product'],\r\n defaultVariantId: number | undefined,\r\n lowestPriceVariantRecordId: string | undefined\r\n) => {\r\n if (product?.IsMasterProduct) {\r\n if (defaultVariantId && defaultVariantId !== 0) {\r\n return defaultVariantId.toString();\r\n }\r\n if (lowestPriceVariantRecordId && lowestPriceVariantRecordId !== '') {\r\n return lowestPriceVariantRecordId;\r\n }\r\n }\r\n return product?.RecordId.toString();\r\n};\r\n\r\nconst DeliveryMessage: React.FC = ({\r\n product,\r\n context,\r\n attributeValues,\r\n extensionProperties,\r\n lowestPriceVariantRecordId\r\n}) => {\r\n let productDeliveryMessage = '';\r\n const { app } = context;\r\n const shippingInformationSmall = attributeValues && attributeValues.find(\r\n (attr: AttributeValue) => attr.Name?.trim() === app.config.smallParcelAttributeKey\r\n )?.TextValue?.toLowerCase();\r\n\r\n const defaultVariantShippingInformation = extensionProperties && extensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantShippingInformation\"\r\n )?.Value?.StringValue;\r\n\r\n if ((_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Core') {\r\n productDeliveryMessage = product?.deliveryByMessage ?? '';\r\n } else if ((\r\n (_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Small Parcel' ||\r\n (_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Drop Ship'\r\n )) {\r\n let deliveryDays =\r\n attributeValues && attributeValues.find(attr => attr.Name?.trim() === app.config.leadTime)?.TextValue;\r\n if (\r\n (deliveryDays === '' || deliveryDays === undefined || deliveryDays === null) &&\r\n app.config.brandList &&\r\n app.config.brandList.length > 0\r\n ) {\r\n const brand =\r\n attributeValues &&\r\n attributeValues.find(\r\n attr =>\r\n app.config.brandBackofficeAttributePlp &&\r\n attr.Name?.trim() === app.config.brandBackofficeAttributePlp\r\n )?.TextValue?.toLowerCase();\r\n\r\n if (brand !== undefined && brand !== null && brand !== '') {\r\n app.config.brandList.map((singleBrand: IBrandListData) => {\r\n if (singleBrand.brandName.toLowerCase() === brand) {\r\n deliveryDays =\r\n singleBrand.brandLeadtime !== undefined &&\r\n singleBrand.brandLeadtime !== '' &&\r\n singleBrand.brandLeadtime !== null\r\n ? singleBrand.brandLeadtime\r\n : '';\r\n }\r\n });\r\n }\r\n deliveryDays = app.config.brandList[0].brandLeadtime;\r\n }\r\n if (deliveryDays && productDeliveryMessage === '') {\r\n productDeliveryMessage = _makeDeliveryMessage(deliveryDays);\r\n }\r\n }\r\n\r\n return productDeliveryMessage ? (\r\n
\r\n {productDeliveryMessage}\r\n
\r\n ) : ;\r\n};\r\n\r\nexport default DeliveryMessage;","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['mfrm-products-compare'] = {\n c: () => require('partner/modules/mfrm-products-compare/mfrm-products-compare.tsx'),\n $type: 'containerModule',\n da: [{name:'comfortTypesData', path:'data-actions/get-comfort-type.action', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productBenefitsData', path:'data-actions/get-product-benefits-data.action', runOn: 0},{name:'productCompareBuyboxStateSharing', path:'actions/product-compare-buybox-state-sharing', runOn: 0},{name:'productsCompareIds', path:'actions/fetch-choose-your-foundation-database.action', runOn: 0},{name:'unbxdCollectionCompare', path:'modules/mfrm-products-compare/get-unbxd-collection-compare-data.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-products-compare',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-products-compare'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/fetch-choose-your-foundation-database.action';\n let dataAction = require('partner/actions/fetch-choose-your-foundation-database.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/product-compare-buybox-state-sharing';\n let dataAction = require('partner/actions/product-compare-buybox-state-sharing');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/get-comfort-type.action';\n let dataAction = require('partner/data-actions/get-comfort-type.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/get-product-benefits-data.action';\n let dataAction = require('partner/data-actions/get-product-benefits-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-products-compare/get-unbxd-collection-compare-data.action';\n let dataAction = require('partner/modules/mfrm-products-compare/get-unbxd-collection-compare-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|mfrm-products-compare|mfrm-products-compare'] = {\n c: () => require('partner/modules/mfrm-products-compare/mfrm-products-compare.view.tsx'),\n cn: '__local__-__local__-mfrm-products-compare'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.all-settled.js');\n","module.exports = React;","module.exports = ReactDOM;"],"names":["emailRegex","emailValue","test","removeSpecialChars","str","ctx","request","app","config","removeSpecialCharsPDP","replace","removeSpecialCharsFromURLPath","decodeURIComponent","split","BVRatingSummary","itemId","onClick","variantId","hideReadReviewsButton","dataBvProductIdAttr","setDataBvProductIdAttr","useState","wrapper","useRef","interval","numReviews","setNumReviews","useEffect","pollInterval","window","setInterval","numReviewsHTML","current","querySelector","innerHTML","match","clearInterval","style","display","React","onMouseEnter","button","Array","from","document","querySelectorAll","find","outerHTML","onMouseLeave","ref","async","cartLines","zipCode","data","fetchCoreDeliveryListAction","FetchCoreDeliveryListInput","ATPInventoryPLPData","map","deliveryItem","i","deliveryMessage","Available","undefined","ATPQuantity","parseInt","date","Date","today","dayjs","now","format","deliveryDate","SlotDate","setDate","getDate","requestContext","defaultDeliveryMessage","tz","utc","isBetween","defaultImageSettings","viewports","xs","q","w","h","disableLazyLoad","parseBadgeData","badgeData","dataSegments","scheduleStart","scheduleEnd","badgeType","parsedScheduleStart","startDate","startTime","parsedScheduleEnd","endDate","endTime","e","startMoment","endMoment","startMomentFormatted","endMomentFormatted","isValid","baseUrl","apiSettings","baseImageUrl","substring","length","removed$","src","toLowerCase","alt","start","convertTimeZone","end","time","local","buildProductBadge","parsedBadgeData","Image","className","gridSettings","altText","title","imageSettings","renderProductBadge","attributeName","finalizedBadges","badge","parsedBadge","fallBackBrandAttribute","parseBrandName","attributes","backendAttribute","recordId","attribute","productBrandName","hasArray","currAttribute","Name","trim","TextValue","MsDyn365","getLocalStorage","localStorage","getItem","bonusItemArray","JSON","parse","checkBrandName","item","productId","brandName","parseBrandNameUnbxd","getBrandNameCheck","renderRating","context","typeName","id","avgRating","totalRatings","ariaLabel","numRatings","toString","ratingAriaLabel","rating","roundedRating","toFixed","getRatingAriaLabel","RatingComponent","ratingCount","readOnly","innerWidth","sm","md","lg","getAttributeByName","attributeValues","keyValue","getAttributeValueByNameUnbxd","list","getAttributeArrayValueByNameUnbxd","getunbxdAttributeNameByCRTName","crtName","mapList","isArray","attr","CRTName","UnbxdName","_getEyebrowMessage","products","priceGroupForAPICall","priceGroup","items","singleItem","ItemId","DistinctProductVariant","push","requestBody","PriceGroup","Items","getEyebrowMessageInput","GetEyebrowMessageInput","result","getEyebrowAction","actionContext","error","console","log","_makeDeliveryMessage","days","deliveryByMessage","daysSpan","deliveryByMessageRange","numberOfDays","newDate","flag","_setTime","temp","newDatewithTime","toUpperCase","_getSoonestDeliveryDate","coreProductATPData","deliveryDetails","locationId","index","currHour","StartTime","Location1","_getDeliveryDate","startTimeHour","FetchChooseYourFoundationDatabaseInput","constructor","jsonSrc","getCacheKey","getCacheObjectType","dataCacheType","this","Msdyn365","action","input","args","sort","a","b","VariantRecordId","atpInput","Weeks","InventoryType","StoreId","RequestedDate","ZipCode","getZipCode","ItemLines","CustomerRequestTime","Id","NoOfPriorityDC","mFIATPInventoryPLPAsync","callerContext","GetComfortTypesData","comfortTypesDataUrl","super","shouldCacheOutput","cacheObjectType","cacheKey","getComfortTypesDataUrl","jsonUrl","comfortTypesDataJsonUrl","res","inputData","GetProductBenefitsData","productBenefitsDataUrl","getProductBenefitsDataUrl","shouldDefaultSet","SelectedVariantInput","channelId","matchingDimensionValues","parseDefaultDimensionsData","defaultValue","defaultDimensions","forEach","dimensionData","dimensionTypeString","dimensionValue","dimensionType","getDefaultVariantId","masterId","productSearchCriteria","Ids","Context","ChannelId","CatalogId","catalogId","IncludeAttributes","SearchCondition","productSearchResults","searchByCriteriaAsync","telemetry","debug","stringify","defaultVariantId","ExtensionProperties","property","Key","Value","LongValue","createObservableDataAction","queryBasedVariantSelection","getQueryParamsFromQueryByName","URL","location","href","url","requestUrl","variantQueryStringName","getByIdResponse","getByIdAsync","Number","isNaN","MasterProductId","RecordId","baseProduct","product","originalDimensionLength","Dimensions","baseProductHadUnmatchedDimension","dimension","matchedTargetDimension","targetDimension","DimensionTypeValue","DimensionValue","actionInput","AttributesForSelectedVariantInput","defaultValues","getAttributesForSelectedVariant","catch","parsedDefaultData","productPreSelectionDimensions","asyncCalls","dimensionValues","getDimensionValuesAsync","queryResultSettings","filter","value","defaultValueToFind","defaultData","defaultDimension","availableDimensionValue","DimensionId","fullDimension","DimensionValues","Promise","allSettled","mappedDimensions","variants","getVariantsByDimensionValuesAsync","newImageUrl","generateProductImageUrl","PrimaryImageUrl","getSelectedProductIdFromActionInput","Error","renderBaseImage","fallbackImageUrl","lazyLoading","xl","lazyload","img","fallBackSrc","bypassHideOnFailure","imageFallbackOptimize","GetUnbxdCollectionCompareDataInput","configs","Msdyn365All","variantIdNumber","unbxdApiKey","unbxdSiteKey","collectionJson","fetchChooseYourFoundationDatabaseDataAction","collectionDescription","collectionData","variantIds","response","baseURL","mattressVariantReqId","mattressComparisonReqIdList","unshift","collectionCompareIds","unbxdUrl","ProductMattribute","props","mattributeName","mattributeScore","mattributeValue","booleanMattributes","mattributescore","m","_","key","ProductCompareCarouselItem","productUrl","price","image","basePrice","productBadge","ratings","mattributeData","comfort","mattressType","heigth","bestFor","comfortIcon","callTealiumOnClick","productName","variantID","productCategory","at","utag","link","event","enhanced_action","event_category","event_action","event_label","event_noninteraction","product_list_name","product_position","product_id","product_name","product_category","product_brand","product_variant","scrollToBuybox","currentProduct","getElementById","scrollIntoView","behavior","renderCompareCard","productPrice","BasePrice","AdjustedPrice","CustomerContextualPrice","renderPrice","mattribute","score","renderMattributes","prductIdsAndTypes","productType","_getProductType","ShippingInfo","coreDefaultMessage","deliveryDays","brandList","Brand","brandLeadtime","_deliveryMessage","DeliveryMessage","MfrmProductsCompare","resizeThrottledEventHandler","compareData","setCompareData","isDesktop","setIsDesktop","deliveryMessages","setDeliveryMessages","coreDeliveryMessages","setCoreDeliveryMessages","onInitial","unbxdData","unbxdCollectionCompare","zipcode","Cookies","get","attrListName","attributeNamesMapingCrtToUnbxd","compareProductsList","variantsData","currentProductId","variant","getVariantsList","callTealiumOnLoad","positions","productPIds","productsName","productsCategory","productsBrand","productsVariant","productsPrice","slice","retailVariantid","count","categoryPathId2","brandBackofficeAttributePdp","v_Price","getPagePath","product_impression_list_name","product_impression_position","product_impression_id","product_impression_name","product_impression_category","product_impression_brand","product_impression_variant","product_impression_price","host","includes","getUniqueMattributeData","mattributeHeadings","spotlightAttributeKey","spotlightValues","spotlightValuesArr","Set","compareRef","inView","useInView","threshold","triggerOnce","getCoreProductsDelivery","itemLines","productIdsAndtype","Quantity","VariantId","atpResponse","getListOfCoreDeliveryMessage","getUnbxdCollectionCompare","UpdateProductsData","GetBatchDeliveryMessage","getDeliveryMessages","leadTime","smallParcelAttributeKey","addThrottledEvent","viewport","_getViewPort","updateViewPort","removeEventListener","renderView","carouselItems","uniqueHeadings","sortedArray","indexOf","queryBasedSelection","getProductPageUrlSync","variantIdQueryParams","productMattributeData","obj","getMattributeData","sleepPosition","sleepStyleOptions","option","selectedSleepStyle","comfortIcons","comfortTypesData","badgeValue","productBadgeAttribute","shippingInfo","atpDeliveryMsg","msg","resources","deliveryBy","_renderDeliveryMessage","getFallbackImageUrl","v_AdjustedPrice","showBVRatings","getBVAttributeValuesUnbxd","sleepStyleDisplayName","icon","_renderCaouselItems","onCurrentCardClick","telemetryContent","getTelemetryObject","friendlyName","payLoad","getPayloadObject","onTelemetryClick","onOtherCardClick","sleepExpertModuleSlot","slots","mattributeIcons","productBenefitsData","Heading","heading","text","RichTextComponent","description","Carousel","layoutGap","controlStyle","variableWidth","controlAlignment","controlClass","itemsToShow","hideIndicators","disableEndButtons","hideControls","disableControls","shippingInformation","computeItemLines","lowestPriceVariantRecordId","IsMasterProduct","extensionProperties","productDeliveryMessage","shippingInformationSmall","defaultVariantShippingInformation","StringValue","brand","brandBackofficeAttributePlp","singleBrand","CustomSkeleton","type","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","$","call","aCallable","newPromiseCapabilityModule","perform","iterate","target","stat","forced","iterable","C","capability","f","resolve","reject","promiseResolve","values","counter","remaining","promise","alreadyCalled","then","status","reason","module","exports","ReactDOM"],"sourceRoot":""}