{"version":3,"file":"static/js/21.14b23c31055b47d1caf0.chunk.js","mappings":";mJAiBA,MAAMA,UAA8BC,EAAAA,cACzBC,SACH,OAAOC,KAAKC,MAAMC,WAAWF,KAAKC,QAI1C,qFCbA,MAqCA,EArCoEA,IAChE,MAAOE,EAAmBC,GAAwBN,EAAAA,WAsBlD,OAJAA,EAAAA,WAAgB,KAhBEO,WACd,MAAMC,EAAM,CAAEC,cAAeN,EAAMO,QAAQC,eACrCC,EACFT,EAAMO,QAAQG,QAAQC,OAASX,EAAMO,QAAQG,QAAQC,MAAMC,OACrDZ,EAAMO,QAAQG,QAAQC,MAAMC,OAC5B,sCAEJC,QAAmBC,EAAAA,EAAAA,IAAwBT,EAAKI,GAElDI,GACAV,EAAqBU,IAOpBE,KACN,CAACf,EAAMgB,OAGNnB,EAAAA,cAAA,OAAKoB,MAAO,CAAEC,MAAO,OAAQC,gBAAiB,SAC1CtB,EAAAA,cAAA,OAAKoB,MAAO,CAAEG,QAAS,OAAQC,eAAgB,iBAC3CxB,EAAAA,cAAA,OAEIyB,wBAAyB,CACrBC,OAAQrB,GAAqBA,EAAkBsB,YAActB,EAAkBsB,YAAc,4ZC3BrH,MAsJMC,EAA4BzB,IAC9B,MAAM0B,EAAgBC,EAAiB3B,GACvC,OACIA,EAAM4B,sBACN5B,EAAMgB,KAAKa,MAAMC,iBACjB9B,EAAMgB,KAAKa,MAAME,iBACjB/B,EAAMgB,KAAKa,MAAMC,gBAAkB9B,EAAMgB,KAAKa,MAAME,gBAE7C/B,EAAMgB,KAAKa,MAAME,gBAAkBL,KAG1CA,IAAiB1B,EAAMgB,KAAKa,MAAMG,0BAC3BN,EAAgB1B,EAAMgB,KAAKa,MAAMG,yBAM1CL,EAAoB3B,IAAuC,IAAAiC,EAAAC,EAAAC,EAC7D,OAAOC,KAAKC,IACkB,QADfJ,EACXjC,EAAMgB,KAAKa,MAAMS,iBAAS,IAAAL,EAAAA,EA1KL,EA2Ke,QADMC,EAC1ClC,EAAMgB,KAAKa,MAAMU,2BAAmB,IAAAL,EAAAA,EA3Kf,EA4KS,QADsBC,EACpDnC,EAAMgB,KAAKa,MAAMW,qBAAa,IAAAL,EAAAA,EA5KT,IAgLvBM,EAAiBA,CAACzC,EAA6B6B,EAA2Ba,SAC9DC,IAAVd,EACO,GAGPa,GApLkB,IAoLQb,GAAuB7B,EAAM4C,cAChD5C,EAAM4C,cAGV5C,EAAMO,QAAQsC,iBAAiBJ,eAAeZ,GAGnDiB,EAAsB9C,IACxB,MAAM+C,EAAuBN,EAAezC,EAAOA,EAAMgB,KAAKa,MAAMG,yBAAyB,GACvFgB,EAA0BP,EAAezC,EAAOA,EAAMgB,KAAKa,MAAMC,iBAAiB,GAClFmB,EAA0BR,EAAezC,EAAOA,EAAMgB,KAAKa,MAAME,iBAAiB,GAExF,IAAImB,EACAC,EAEAC,EAAoB,GAExB,MAAMC,EAAkB,CACpB,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEEC,EAA0BC,IAC5B,IAAK,MAAMC,KAAQD,EACf,GAAIF,EAAgBI,SAASD,GACzB,OAAO,EAIf,OAAO,GAGX,SAASE,EAAwBH,GAE7B,OADqB,IAAII,OAAO,YACZC,KAAKL,GAE7B,GACIvD,EAAM4B,sBACN5B,EAAMgB,KAAKa,MAAMC,iBACjB9B,EAAMgB,KAAKa,MAAME,iBACjB/B,EAAMgB,KAAKa,MAAMC,gBAAkB9B,EAAMgB,KAAKa,MAAME,gBACtD,KAAA8B,EACE,IAAIC,EACAC,EAiCJ,OAhCI/D,EAAMgE,gBACFf,EAAgBQ,SAASzD,EAAMgE,gBAC/BF,EAAcb,EAAgBQ,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAC/DhB,EAAgBiB,QAAQlE,EAAMgE,cAAe,IAC7Cf,EACNc,EAAcf,EAAgBS,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAC/DjB,EAAgBkB,QAAQlE,EAAMgE,cAAe,IAC7ChB,IAENc,EAAcb,EAAgBQ,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAC/DhB,EAAgBiB,QAAQlE,EAAMgE,cAAcC,MAAM,GAAI,GAAI,IAC1DhB,EACNc,EAAcf,EAAgBS,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAC/DjB,EAAgBkB,QAAQlE,EAAMgE,cAAcC,MAAM,GAAI,GAAI,IAC1DjB,IAGVc,GAEAZ,EAA+BQ,EAAwBI,GACvDX,EAA+BG,EAAuBQ,IAC/CC,IAEPb,EAA+BQ,EAAwBK,GACvDZ,EAA+BG,EAAuBS,MAGrB,IAAjCb,IAA2E,IAAjCC,GAAyCnD,EAAMgE,gBAEjD,IAAjCd,IAA2E,IAAjCC,GAA0CnD,EAAMgE,iBADjGZ,EAAepD,EAAMgE,eAKrBnE,EAAAA,cAAA,QAAMsE,UAAU,wBAAwBC,SAAS,SAC5C,IACDvE,EAAAA,cAAA,QAAMsE,UAAU,sBAAsBC,SAAS,UACzCpE,EAAMqE,eAAiBP,GAAe,GAAGA,KAAeV,IACzDpD,EAAMqE,eACHrE,EAAMsE,SACNtE,EAAMuE,iBACN,GAAGvE,EAAMuE,gBAAgBC,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,KACtFhE,EAAMqE,gBACFrE,EAAMuE,iBACP,GAAGvE,EAAMgB,KAAKa,MAAME,gBAAgByC,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,MAEtGnE,EAAAA,cAAA,QAAMsE,UAAU,uBAAuBC,SAAS,SAC3CpE,EAAMsE,UAA+B,QAAxBT,EAAI7D,EAAMyE,sBAAc,IAAAZ,OAAA,EAApBA,EAAsBa,sBAE5C7E,EAAAA,cAAA,QAAMsE,UAAU,sBAAsBC,SAAS,UACzCpE,EAAMqE,eAAiBrE,EAAMsE,SAAWP,GAAe,GAAGA,KAAeX,IAC1EpD,EAAMqE,eACHrE,EAAMsE,SACNtE,EAAM2E,iBACN,GAAG3E,EAAM2E,gBAAgBH,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,KACtFhE,EAAMqE,gBACFrE,EAAM2E,iBACP,GAAG3E,EAAMgB,KAAKa,MAAMC,gBAAgB0C,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,MAC9F,KAIpB,IAAIY,EAwBJ,OAvBI5E,EAAMgE,gBAEFY,EADA7B,EAAaU,SAASzD,EAAMgE,eACVjB,EAAaU,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAChElB,EAAamB,QAAQlE,EAAMgE,cAAe,IAC1CjB,EAEYA,EAAaU,SAASzD,EAAMgE,cAAcC,MAAM,GAAI,IAChElB,EAAamB,QAAQlE,EAAMgE,cAAcC,MAAM,GAAI,GAAI,IACvDlB,GAGVA,IAEAG,EAA+BQ,EAAwBkB,GACvDzB,EAA+BG,EAAuBP,MAGrB,IAAjCG,IAA2E,IAAjCC,GAAyCnD,EAAMgE,gBAEjD,IAAjCd,IAA2E,IAAjCC,GAA0CnD,EAAMgE,iBADjGZ,EAAepD,EAAMgE,eAMrBnE,EAAAA,cAAA,QAAMsE,UAAU,oBAAoBC,SAAS,UACvCpE,EAAMqE,eAAiBO,GAAmB,GAAGA,KAAmBxB,IACjEpD,EAAMqE,eACHrE,EAAMsE,SACNtE,EAAM6E,iBACN,GAAG7E,EAAM6E,gBAAgBL,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,KACtFhE,EAAMqE,gBACFrE,EAAM6E,iBACP7E,EAAMgB,KAAKa,MAAMG,yBACjB,GAAGhC,EAAMgB,KAAKa,MAAMG,wBAAwBwC,QAAQ,MAAMxE,EAAMgE,cAAgBhE,EAAMgE,cAAgB,OAKhHc,EAAuC9E,IACzC,MAAM0B,EAAwBC,EAAiB3B,GACzC+C,EAAuBN,EAAezC,EAAO0B,GAAe,GAElE,OACI7B,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMsE,UAAU,WACX,IACAnE,EAAM+E,kBAAiB,IAAGhC,EAAY,IAAG/C,EAAMgF,iBAAgB,IAAGlC,EAAmB9C,IAE1FH,EAAAA,cAAA,QAAMsE,UAAU,2BAA0B,cAAa,QAClDpB,GAELlD,EAAAA,cAAA,sBAAkB,QAAQiD,EAAmB9C,IAC5CA,EAAMiF,aAAepF,EAAAA,cAAA,QAAMsE,UAAU,sBAAsBnE,EAAMiF,eAKjEC,EAAgEC,EAAAA,GAAiBC,wBAC1F,6WAAOC,CAAA,CACLC,UArUyCtF,IAAmD,IAAAuF,EAAAC,EAC9F,MAAOC,EAAMC,GAAW7F,EAAAA,YACjB8F,EAAWC,GAAgB/F,EAAAA,YAC3BgG,EAAUC,GAAejG,EAAAA,WAchC,IAAIkG,EAOAC,EACoD,IAAAC,GAPxDpG,EAAAA,WAAgB,KAbAO,WACZ,MAAMqF,QAAaS,EAAAA,EAAAA,cAAalG,EAAMO,QAAQC,eAC9CkF,EAAQD,GACRzF,EAAMsE,SAAU,GAWhB6B,GARe/F,WACf,MAAMC,EAAM,CAAEC,cAAeN,EAAMO,QAAQC,eACrCmF,QAAkBS,EAAAA,EAAAA,IAAwB/F,EAAKL,EAAMO,QAAQC,cAAc6F,eAAeC,QAASC,SAAU,SACnHX,EAAaD,IAMba,GACAT,EAAeU,eAAeC,QAAQ,mBACtCZ,EAAYC,KACb,CAAC/F,EAAMgB,KAAKa,MAAMG,0BAEjByD,GAAQA,EAAKA,MAAQA,EAAKA,KAAKkB,uBAC/BX,EAAiBP,EAAoC,QAAhCQ,EAAGR,EAAKA,KAAKkB,2BAAmB,IAAAV,GAAuC,QAAvCA,EAA7BA,EAA+BW,MAAMC,GAAqB,YAAVA,EAAEC,aAAkB,IAAAb,OAAA,EAApEA,EAAsEc,MAAMC,YAAc,IAEtH,IAAIC,EAMAC,EAC+B,IAAAC,EAAAC,EAAAC,GAN/B1B,GAAaA,EAAU2B,OAAS,IAChCL,EAActB,EAAU4B,QAAQC,GACrBA,EAAQC,kBAAoBzB,KAIvCiB,GAAeA,EAAY,MAC3BC,GAE+C,QAA3CC,EAAAF,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAI,OAAA,EAA3CA,EAA6CH,gBAA2D,QAAhDI,EAAKH,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAK,OAAA,EAA3CA,EAA6CJ,kBACpGrE,GAE2C,QAA3C0E,EAAAJ,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAM,OAAA,EAA3CA,EAA6CK,cAAe,KAM1E,IAAIC,GAA0B,EAC1BC,EACAX,GAAeA,EAAY,IAAMA,EAAY,GAAGN,qBAAkE,QAA/CpB,EAAI0B,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAxB,GAA3CA,EAA6CyB,YACnE,QAD8ExB,EACzHyB,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAvB,OAAA,EAA3CA,EAA6CwB,YAC7C,KASH,IAAAa,EAAAC,EAPHZ,GAC4C,aAA5ClH,EAAMO,QAAQG,QAAQqH,mBACsB,iBAA5C/H,EAAMO,QAAQG,QAAQqH,mBACsB,sBAA5C/H,EAAMO,QAAQG,QAAQqH,mBACsB,iBAA5C/H,EAAMO,QAAQG,QAAQqH,kBAEtBJ,GAA0B,EAE1BC,EACIX,GAAeA,EAAY,IAAMA,EAAY,GAAGN,qBAAkE,QAA/CkB,EAAIZ,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAc,GAA3CA,EAA6Cb,YACnE,QAD8Ec,EACzHb,EAAY,GAAGN,oBAAoB,GAAGI,aAAK,IAAAe,OAAA,EAA3CA,EAA6Cd,YAC7C,KAKd,GAHInB,IACA7F,EAAMgE,cAAgB6B,GAEtB+B,EAAsB,CAClB7B,IAAiB6B,GACjBnB,eAAeuB,QAAQ,kBAAmBJ,GAE9C5H,EAAMgE,cAAgB+B,GAA8B6B,EACpD,IAAIK,EAAejI,EAAMgB,KAAKa,MAAMC,iBAAmB,EACvD,MAAM6C,EAAkB3E,EAAMgB,KAAKa,MAAMC,iBAAmBoF,EAAmBe,GAAgBf,EAAmB,KAClH,IAAIgB,EAAelI,EAAMgB,KAAKa,MAAME,iBAAmB,EACvD,MAAMwC,EAAkBvE,EAAMgB,KAAKa,MAAME,iBAAmBmF,EAAmBgB,GAAgBhB,EAAmB,KAClH,IAAIiB,EAAoBnI,EAAMgB,KAAKa,MAAMW,eAAiB,EAC1D,MAAMqC,EAAkB7E,EAAMgB,KAAKa,MAAMW,eAAiB0E,EAAmBiB,GAAqBjB,EAAmB,KACrHlH,EAAM2E,gBAAkBA,EACxB3E,EAAMuE,gBAAkBA,EACxBvE,EAAM6E,gBAAkBA,EACxB7E,EAAMqE,cAAgBsD,EACtB3H,EAAM4B,sBAAuB,EAC7B5B,EAAMsE,SAAU,EAGpB,YAAiD3B,IAA7C3C,EAAMgB,KAAKa,MAAMG,wBACV,KAIPnC,EAAAA,cAAA,QAAMsE,UAAWiE,GAAAA,CAAW,YAAapI,EAAMmE,YAC1C1C,EAAyBzB,GAAS8E,EAAoC9E,GAAS8C,EAAmB9C,MArGjF,KA+U9B,wFClXA,MAAMqI,UAA8BxI,EAAAA,cAChCyI,YAAYtI,GACRuI,MAAMvI,GAGHF,SACH,MAAM,OAAE0I,GAAWzI,KAAKC,OACxByI,EAAAA,EAAAA,IAAS,2BAA2B1I,KAAKC,MAAM0I,MAAM3I,KAAKC,MAAM2I,YAAa5I,KAAKC,MAAM4I,WACxF,IAAIC,EAASL,EAAOM,aAEhBC,EAA0B,GAO9B,GALIhJ,KAAKC,MAAMO,UACXwI,GAAmBhJ,KAAKC,MAAMO,QAAQG,QAAQsI,IAAIC,aAClDF,GAAmB5D,EAAAA,GAAiB+D,uBAAuB,iBAAmB,KAG9EC,EAAAA,EAAAA,IAAcN,GAEdA,EAAS,GAAGE,KAAmBK,EAAAA,KAAUP,UACtC,GAAe,KAAXA,KAAkBQ,EAAAA,EAAAA,IAAcR,GAKvC,OAJAS,EAAAA,EAAAA,IACI,mKACAvJ,KAAKC,MAAM4I,WAER,KAEX,MAAMW,EAAa,gBAAgBV,cAAmBL,EAAOpI,iBAAiBoI,EAAOgB,oBAErF,OAAO3J,EAAAA,cAAoB4J,EAAAA,GAAmB,CAAEC,IAAK3J,KAAKC,MAAM0I,GAAIpH,wBAAyB,CAAEC,OAAQgI,MAI/G,2FClCA,MAAMI,UAA4B9J,EAAAA,cAC9ByI,YAAYtI,GACRuI,MAAMvI,GAGHF,SACH,MAAM,OAAE0I,GAAWzI,KAAKC,OACxByI,EAAAA,EAAAA,IAAS,2BAA2B1I,KAAKC,MAAM0I,MAAM3I,KAAKC,MAAM2I,YAAa5I,KAAKC,MAAM4I,WACxF,MAAMC,EAASL,EAAOoB,aAEtB,IAAKf,GAAqB,KAAXA,IAAiBQ,EAAAA,EAAAA,IAAcR,KAAWM,EAAAA,EAAAA,IAAcN,GAKnE,OAJAS,EAAAA,EAAAA,IACI,wKACAvJ,KAAKC,MAAM4I,WAER,KAGX,GAAIC,EAAOpF,SAAS,cAEhB,OADA6F,EAAAA,EAAAA,IAAS,qEAAsEvJ,KAAKC,MAAM4I,WACnF,KAGX,MAAMiB,EAAa9J,KAAKC,MAAMO,UAAWuJ,EAAAA,EAAAA,IAAe/J,KAAKC,MAAMO,QAAQG,SACrE6I,EAAa,WAAWM,EAAa,UAAUA,KAAgB,MAAMhB,cAC3E,OAAOhJ,EAAAA,cAAoB4J,EAAAA,GAAmB,CAAEC,IAAK3J,KAAKC,MAAM0I,GAAIpH,wBAAyB,CAAEC,OAAQgI,MAI/G,2FC5BA,MAmBA,EAnB4BvJ,IACxB,MAAM,OAAEwI,EAAM,GAAEE,EAAE,SAAEC,EAAQ,UAAEC,GAAc5I,GAC5CyI,EAAAA,EAAAA,IAAS,0BAA0BC,KAAMC,KAAaC,GACtD,MAAMC,EAASL,EAAOuB,YAEtB,IAAKlB,GAAqB,KAAXA,IAAiBQ,EAAAA,EAAAA,IAAcR,KAAWM,EAAAA,EAAAA,IAAcN,GAEnE,OADAS,EAAAA,EAAAA,IAAS,yFAA0FV,GAC5F,KAGX,GAAIC,EAAOpF,SAAS,YAEhB,OADA6F,EAAAA,EAAAA,IAAS,mEAAoEV,GACtE,KAGX,MAAMoB,EAAY,UAAUnB,YAC5B,OAAOhJ,EAAAA,cAAoB4J,EAAAA,GAAmB,CAAEC,IAAKhB,EAAIpH,wBAAyB,CAAEC,OAAQyI,qFCzBzF,MAAMvB,EAAWA,CAACwB,EAAsBrB,KAC3CA,GAAaA,EAAUsB,IAAIC,EAAAA,GAASC,MAAOH,IAGlCX,EAAWA,CAACe,EAAsBzB,KAC3CA,GAAaA,EAAUsB,IAAIC,EAAAA,GAASG,MAAOD,IAQlChB,EAAiBR,GAEnB,kFAAkFjF,KAAKiF,GAGrFM,EAAiBN,GACnB,8DAA8DjF,KAAKiF,6qBCL9E,MAAM0B,UAAkB1K,EAAAA,cAAxByI,cAAA,oBAiBW,KAAAkC,iBAAoBC,GAA0C1K,KAAKC,MAAMwI,OAAOkC,QAAUD,EAAME,OAAOC,MAhBvG9K,SACH,MAAM,QAAE4K,EAAO,UAAEvG,GAAcpE,KAAKC,MAAMwI,OACpCqC,EAAOH,GACT7K,EAAAA,cAACiL,EAAAA,GAA0B,CACvBD,KAAMH,EACNK,UAAW,CAAEC,OAAQjL,KAAKyK,iBAAkBnE,eAAgBtG,KAAKC,MAAMO,QAAQG,WAGjFuK,EAAkB5F,EAAAA,EAAA,GACjBtF,KAAKC,OAAK,IACb0K,QAASG,EACT1G,UAAWiE,GAAAA,CAAW,gBAAiBjE,KAE3C,OAAOpE,KAAKC,MAAMC,WAAWgL,IAMrC,0ECjCA,MAMA,EANqDjL,GACjDH,EAAAA,cAAA,MAAAqL,OAAAC,OAAA,CAAKhH,UAAWnE,EAAMmE,UAAWuE,GAAI1I,EAAM0I,IAAQ1I,EAAMoL,uBAAuBpL,IAC3EA,EAAM0K,+ECMf,MAAMW,UAA2BxL,EAAAA,cACtBC,SAAM,IAAAwL,EACT,QAAkD3I,IAA9C5C,KAAKC,MAAMgB,KAAKuK,mBAAmBC,OACnC,MAAM,IAAIlB,MAAM,uFAEpB,IACItJ,MACIuK,oBACIC,QAAQ,MAAEC,EAAK,YAAEC,EAAW,SAAEC,EAAQ,gBAAEC,EAAe,WAAEC,MAGjE9L,KAAKC,MAET,MAAM,OACFwI,EAAM,QACNjI,EACAS,MACIuK,oBACIC,QAAQ,aAAEM,EAAY,UAAEC,EAAS,aAAEC,EAAY,MAAEnK,MAGzD9B,KAAKC,MAGHiM,EAAcR,EACdS,EAAqBR,EACrBS,EAAkBP,EAGxBH,EAAQjD,EAAOiD,OAASA,EACxBC,EAAclD,EAAOkD,aAAeA,EACpCC,EAAWnD,EAAOmD,UAAYA,EAC9BC,EAAmBpD,EAAO4D,cAAgB5D,EAAO4D,aAAaC,KAAQT,EACtEC,EAAarD,EAAOqD,YAAcA,EAGlC,MAAMS,EAAYvM,KAAKwM,oBAAoBd,EAAOlL,GAAWA,EAAQG,SAAWH,EAAQG,QAAQ8L,KAChG,OACI3M,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC4M,EAAAA,GAAe,KACXH,GAAazM,EAAAA,cAAA,aAAQyM,GACrBZ,GAAe7L,EAAAA,cAAA,QAAM6M,KAAK,cAAchC,QAASgB,IACjDC,GAAY9L,EAAAA,cAAA,QAAM6M,KAAK,WAAWhC,QAASiB,IAC3CG,GAAgBjM,EAAAA,cAAA,QAAM8M,IAAI,YAAYC,KAAMd,IAC5CD,GAAchM,EAAAA,cAAA,QAAM8M,IAAI,gBAAgBC,KAAMf,KAElD9L,KAAK8M,uBACFZ,EACAC,EACAC,EACAL,EACAC,EACAlK,EACuB,QADlByJ,EACL/K,EAAQG,QAAQ4F,eAAO,IAAAgF,OAAA,EAAvBA,EAAyBwB,SACzBd,IAEFxD,EAAOuE,eAAiBhN,KAAKiN,cAAcV,EAAWZ,EAAaE,IACnEpD,EAAOyE,oBAAsBlN,KAAKmN,mBAAmBZ,EAAWZ,EAAaE,IAYnFoB,cAAcvB,EAA2BC,EAAiCE,GAC9E,OACI/L,EAAAA,cAAC4M,EAAAA,GAAe,KACXhB,GAAS5L,EAAAA,cAAA,QAAMsN,SAAS,WAAWzC,QAASe,IAC5CC,GAAe7L,EAAAA,cAAA,QAAMsN,SAAS,iBAAiBzC,QAASgB,IACxDE,GAAmB/L,EAAAA,cAAA,QAAMsN,SAAS,WAAWzC,QAASkB,IACvD/L,EAAAA,cAAA,QAAMsN,SAAS,UAAUzC,QAAQ,aAiBrCmC,uBACJZ,EACAP,EACAE,EACAE,EACAC,EACAlK,EACAuL,EACApB,GAGA,MAAMqB,EAAkBC,KAAKC,UAAU,CACnC,WAAY,oBACZ,QAAS,UACTb,KAAMT,EACNP,YAAAA,EACA8B,MAAO5B,EACP6B,IAAK1B,EACL2B,MAAO,CACH,QAAS,QACThB,KAAMV,GAEV2B,OAAQ,CACJ,QAAS,QACT3E,IAAK8C,EACL8B,cAAeR,EACfvL,MAAAA,KAGR,OACIhC,EAAAA,cAAC4M,EAAAA,GAAe,KAEZ5M,EAAAA,cAAA,4BAAwB,UAAUgO,KAAK,sBAAsBvM,wBAAyB,CAAEC,OAAQ8L,MAWpGH,mBACJzB,EACAC,EACAE,GAEA,OACI/L,EAAAA,cAAC4M,EAAAA,GAAe,KACXhB,GAAS5L,EAAAA,cAAA,QAAM6M,KAAK,gBAAgBhC,QAASe,IAC7CC,GAAe7L,EAAAA,cAAA,QAAM6M,KAAK,sBAAsBhC,QAASgB,IACzDE,GAAmB/L,EAAAA,cAAA,QAAM6M,KAAK,gBAAgBhC,QAASkB,IACxD/L,EAAAA,cAAA,QAAM6M,KAAK,eAAehC,QAAQ,aAUtC6B,oBAAoBd,EAA2Be,GAC9Cf,IACDA,EAAQ,IAEZ,MAAMqC,EAAe/N,KAAKC,MAAMwI,OAChC,GAAIsF,GAAgBA,EAAaC,wBAC7B,OAAOtC,EAEX,MAAMuC,EAAYxB,GAAOA,EAAIyB,SAU7B,OATID,IACIA,EAAUE,kBACVzC,EAAQ,GAAGuC,EAAUE,kBAAkBzC,KAEvCuC,EAAUG,kBACV1C,EAAQ,GAAGA,IAAQuC,EAAUG,oBAI9B1C,GAIf,sqBC9KA,MAAM2C,UAAevO,EAAAA,cACVC,SACH,MAAM,UAAEqE,GAAcpE,KAAKC,MAAMwI,OAC3B6F,EAActO,KAAKC,MAAMwI,OAAO8F,aAAe,MAAMvO,KAAKC,MAAMwI,OAAO8F,eAAiB,YACxFC,EAASlJ,EAAAA,EAAA,GAGRtF,KAAKC,OAAK,IACbmE,UAAYA,GAAaiE,GAAAA,CAAWiG,EAAalK,IAAekK,IAGpE,OAAOtO,KAAKC,MAAMC,WAAWsO,IAIrC,0ECzBA,MAUA,EAV+CvO,IAC3C,MAAMwO,EAAQxO,EAAMwI,OAAOiG,SAAW5O,EAAAA,cAAA,MAAIsE,UAAW,uBAErD,OACItE,EAAAA,cAAA,MAAAqL,OAAAC,OAAA,CAAKhH,UAAWnE,EAAMmE,UAAWuE,GAAI1I,EAAM0I,IAAQ1I,EAAMoL,uBAAuBpL,IAC3EwO,8qBCMb,MAAME,UAAkB7O,EAAAA,cAAxByI,cAAA,oBAiBW,KAAAkC,iBAAoBC,GAA0C1K,KAAKC,MAAMwI,OAAOmG,UAAYlE,EAAME,OAAOC,MAhBzG9K,SACH,MAAM,UAAE6O,EAAS,UAAExK,GAAcpE,KAAKC,MAAMwI,OACtCqC,EAAO8D,GACT9O,EAAAA,cAACiL,EAAAA,GAA0B,CACvBD,KAAM8D,EACN5D,UAAW,CAAEC,OAAQjL,KAAKyK,iBAAkBnE,eAAgBtG,KAAKC,MAAMO,QAAQG,WAGjFkO,EAAkBvJ,EAAAA,EAAA,GACjBtF,KAAKC,OAAK,IACb2O,UAAW9D,EACX1G,UAAWiE,GAAAA,CAAW,gBAAiBjE,KAE3C,OAAOpE,KAAKC,MAAMC,WAAW2O,IAKrC,0EC9BA,MAMA,EANqD5O,GACjDH,EAAAA,cAAA,MAAAqL,OAAAC,OAAA,CAAKhH,UAAWnE,EAAMmE,UAAWuE,GAAI1I,EAAM0I,IAAQ1I,EAAMoL,uBAAuBpL,IAC3EA,EAAM2O","sources":["webpack://lds-commerce/./src/modules/lds-terms-and-conditions/lds-terms-and-conditions.tsx?f29f","webpack://lds-commerce/./src/modules/lds-terms-and-conditions/lds-terms-and-conditions.view.tsx?41ce","webpack://lds-commerce/./src/themes/fabrikam/views/components/price.component.tsx?fc53","webpack://lds-commerce/./src/modules/default-external-script/default-external-script.tsx?2a33","webpack://lds-commerce/./src/modules/default-inline-script/default-inline-script.tsx?5ccd","webpack://lds-commerce/./src/modules/default-inline-style/default-inline-style.tsx?3552","webpack://lds-commerce/./src/utils/script-utils.ts?cb52","webpack://lds-commerce/./src/modules/html-block/html-block.tsx?c080","webpack://lds-commerce/./src/modules/html-block/html-block.view.tsx?b072","webpack://lds-commerce/./src/modules/product-page-summary/product-page-summary.tsx?2924","webpack://lds-commerce/./src/modules/spacer/spacer.tsx?7565","webpack://lds-commerce/./src/modules/spacer/spacer.view.tsx?1f15","webpack://lds-commerce/./src/modules/text-block/text-block.tsx?db84","webpack://lds-commerce/./src/modules/text-block/text-block.view.tsx?9307"],"sourcesContent":["/*!\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\n\r\nimport { ILdsTermsAndConditionsData } from './lds-terms-and-conditions.data';\r\nimport { ILdsTermsAndConditionsProps } from './lds-terms-and-conditions.props.autogenerated';\r\n\r\nexport interface ILdsTermsAndConditionsViewProps extends ILdsTermsAndConditionsProps {}\r\n\r\n/**\r\n *\r\n * LdsFooter component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass LdsTermsAndConditions extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default LdsTermsAndConditions;\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 React from 'react';\r\n\r\nimport { ILdsTermsAndConditionsViewProps } from './lds-terms-and-conditions';\r\nimport { lDSPublisherPolicyAsync } from '../../actions/DataActionExtension.g';\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const [currentPolicyData, setCurrentPolicyData] = React.useState();\r\n\r\n const getPolicy = async () => {\r\n const ctx = { callerContext: props.context.actionContext };\r\n const currentPolicy =\r\n props.context.request.query && props.context.request.query.policy\r\n ? props.context.request.query.policy\r\n : 'Sales & Refund Terms and Conditions';\r\n\r\n const findPolicy = await lDSPublisherPolicyAsync(ctx, currentPolicy);\r\n\r\n if (findPolicy) {\r\n setCurrentPolicyData(findPolicy);\r\n }\r\n\r\n return findPolicy;\r\n };\r\n\r\n React.useEffect(() => {\r\n void getPolicy();\r\n }, [props.data]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ContentBlockView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { getCountryLanguageAsync } from '../../../../actions/DataActionExtension.g';\r\nimport * as React from 'react';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n localCurrency?: boolean;\r\n countryRegion?: string;\r\n customMaxAmount?: number | null;\r\n customMinAmount?: number | null;\r\n customSetAmount?: number | null;\r\n isReady?: boolean;\r\n}\r\nexport interface IPriceComponent extends IComponent {\r\n localCurrency?: boolean;\r\n countryRegion?: string;\r\n customMaxAmount?: number | null;\r\n customMinAmount?: number | null;\r\n customSetAmount?: number | null;\r\n}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n const [cart, setCart] = React.useState();\r\n const [countries, setCountries] = React.useState();\r\n const [currency, setCurrency] = React.useState();\r\n\r\n const getCart = async () => {\r\n const cart = await getCartState(props.context.actionContext);\r\n setCart(cart);\r\n props.isReady = true;\r\n return cart;\r\n };\r\n const getCurrecy = async () => {\r\n const ctx = { callerContext: props.context.actionContext };\r\n const countries = await getCountryLanguageAsync(ctx, props.context.actionContext.requestContext.channel!.RecordId, 'en-us');\r\n setCountries(countries);\r\n return countries;\r\n };\r\n let storageCheck;\r\n React.useEffect(() => {\r\n getCart();\r\n getCurrecy();\r\n storageCheck = sessionStorage.getItem('currencyDecimal');\r\n setCurrency(storageCheck);\r\n }, [props.data.price.CustomerContextualPrice]);\r\n let currentCountry: any;\r\n if (cart && cart.cart && cart.cart.ExtensionProperties) {\r\n currentCountry = cart ? cart.cart.ExtensionProperties?.find((x: any) => x.Key === 'Country')?.Value.StringValue : '';\r\n }\r\n let countryData;\r\n if (countries && countries.length > 1) {\r\n countryData = countries.filter((country: any) => {\r\n return country.countryRegionId === currentCountry;\r\n });\r\n }\r\n let currencyDecimal;\r\n if (countryData && countryData[0]) {\r\n currencyDecimal =\r\n //@ts-ignore\r\n countryData[0].ExtensionProperties[7].Value?.StringValue === countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? undefined\r\n : //@ts-ignore\r\n countryData[0].ExtensionProperties[6].Value?.DecimalValue / 100;\r\n }\r\n\r\n // if (this.state.isCustomPriceSelected && newPrice) {\r\n // newPrice.CustomerContextualPrice = customPrice;\r\n // }\r\n let shouldShowLocalCurrency = false;\r\n let currentCountryRegion =\r\n countryData && countryData[0] && countryData[0].ExtensionProperties && countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? countryData[0].ExtensionProperties[8].Value?.StringValue\r\n : null;\r\n if (\r\n currencyDecimal &&\r\n props.context.request.telemetryPageName !== 'CartPage' &&\r\n props.context.request.telemetryPageName !== 'CheckoutPage' &&\r\n props.context.request.telemetryPageName !== 'orderconfirmation' &&\r\n props.context.request.telemetryPageName !== 'OrderDetails'\r\n ) {\r\n shouldShowLocalCurrency = true;\r\n } else {\r\n currentCountryRegion =\r\n countryData && countryData[0] && countryData[0].ExtensionProperties && countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? countryData[0].ExtensionProperties[7].Value?.StringValue\r\n : null;\r\n }\r\n if (currency) {\r\n props.countryRegion = currency;\r\n }\r\n if (currentCountryRegion) {\r\n if (storageCheck !== currentCountryRegion) {\r\n sessionStorage.setItem('currencyDecimal', currentCountryRegion);\r\n }\r\n props.countryRegion = storageCheck ? storageCheck : currentCountryRegion;\r\n let maxPriceCopy = props.data.price.MaxVariantPrice || 0;\r\n const customMaxAmount = props.data.price.MaxVariantPrice && currencyDecimal ? (maxPriceCopy *= currencyDecimal) : null;\r\n let minPriceCopy = props.data.price.MinVariantPrice || 0;\r\n const customMinAmount = props.data.price.MinVariantPrice && currencyDecimal ? (minPriceCopy *= currencyDecimal) : null;\r\n let adjustedPriceCopy = props.data.price.AdjustedPrice || 0;\r\n const customSetAmount = props.data.price.AdjustedPrice && currencyDecimal ? (adjustedPriceCopy *= currencyDecimal) : null;\r\n props.customMaxAmount = customMaxAmount;\r\n props.customMinAmount = customMinAmount;\r\n props.customSetAmount = customSetAmount;\r\n props.localCurrency = shouldShowLocalCurrency;\r\n props.isPriceMinMaxEnabled = true;\r\n props.isReady = true;\r\n }\r\n // CustomerContextualPrice could be zero\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\nconst showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n const originalPrice = getOriginalPrice(props);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return props.data.price.MinVariantPrice < originalPrice;\r\n }\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\r\n};\r\n\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined, shouldUseFreePriceText: boolean | undefined): string => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const initialPrice: string = formatCurrency(props, props.data.price.CustomerContextualPrice, true);\r\n const maxVariantPrice: string = formatCurrency(props, props.data.price.MaxVariantPrice, false);\r\n const minVariantPrice: string = formatCurrency(props, props.data.price.MinVariantPrice, false);\r\n\r\n let containsCurrencyLettersCheck: any;\r\n let containsCurrencySymbolsCheck: any;\r\n\r\n let currencyType: any = '';\r\n\r\n const currencySymbols = [\r\n '$',\r\n '€',\r\n '£',\r\n '¥',\r\n '₣',\r\n '₹',\r\n 'د.ك',\r\n 'د.إ',\r\n '﷼‎',\r\n '₻',\r\n '₽',\r\n '₾',\r\n '₺',\r\n '₼',\r\n '₸',\r\n '₴',\r\n '₷',\r\n '฿',\r\n '원',\r\n '₫',\r\n '₮',\r\n '₯',\r\n '₱',\r\n '₳',\r\n '₵',\r\n '₲',\r\n '₪',\r\n '₰'\r\n ];\r\n const containsCurrencySymbol = (inputString: any) => {\r\n for (const char of inputString) {\r\n if (currencySymbols.includes(char)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n function containsCurrencyLetters(inputString: any) {\r\n const regexPattern = new RegExp(`[A-Za-z]`);\r\n return regexPattern.test(inputString);\r\n }\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n let newMinPrice;\r\n let newMaxPrice;\r\n if (props.countryRegion) {\r\n if (minVariantPrice.includes(props.countryRegion)) {\r\n newMinPrice = minVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? minVariantPrice.replace(props.countryRegion, '')\r\n : minVariantPrice;\r\n newMaxPrice = maxVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? maxVariantPrice.replace(props.countryRegion, '')\r\n : maxVariantPrice;\r\n } else {\r\n newMinPrice = minVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? minVariantPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : minVariantPrice;\r\n newMaxPrice = maxVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? maxVariantPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : maxVariantPrice;\r\n }\r\n }\r\n if (newMinPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(newMinPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newMinPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(newMinPrice);\r\n } else if (newMaxPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(newMaxPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newMaxPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(newMaxPrice);\r\n }\r\n\r\n if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === true && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n } else if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === false && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n }\r\n return (\r\n \r\n {' '}\r\n \r\n {!props.localCurrency && newMinPrice && `${newMinPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customMinAmount &&\r\n `${props.customMinAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customMinAmount &&\r\n `${props.data.price.MinVariantPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n \r\n \r\n {props.isReady && props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {!props.localCurrency && props.isReady && newMaxPrice && `${newMaxPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customMaxAmount &&\r\n `${props.customMaxAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customMaxAmount &&\r\n `${props.data.price.MaxVariantPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {' '}\r\n \r\n );\r\n }\r\n let newInitialPrice;\r\n if (props.countryRegion) {\r\n if (initialPrice.includes(props.countryRegion)) {\r\n newInitialPrice = initialPrice.includes(props.countryRegion.slice(0, -1))\r\n ? initialPrice.replace(props.countryRegion, '')\r\n : initialPrice;\r\n } else {\r\n newInitialPrice = initialPrice.includes(props.countryRegion.slice(0, -1))\r\n ? initialPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : initialPrice;\r\n }\r\n }\r\n if (initialPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(initialPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newInitialPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(initialPrice);\r\n }\r\n\r\n if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === true && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n } else if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === false && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n }\r\n\r\n return (\r\n \r\n {!props.localCurrency && newInitialPrice && `${newInitialPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customSetAmount &&\r\n `${props.customSetAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customSetAmount &&\r\n props.data.price.CustomerContextualPrice &&\r\n `${props.data.price.CustomerContextualPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n \r\n );\r\n};\r\n\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const originalPrice: number = getOriginalPrice(props);\r\n const initialPrice: string = formatCurrency(props, originalPrice, true);\r\n\r\n return (\r\n <>\r\n \r\n {' '}\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n \r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'Price',\r\n { component: Price, ...priceComponentActions }\r\n);\r\n\r\nexport default PriceComponent;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SDK_FRAGMENT_NAME, msdyn365Commerce } from '@msdyn365-commerce/core-internal';\nimport * as path from 'path';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultExternalScriptProps } from './default-external-script.props.autogenerated';\n\n/**\n *\n * DefaultExternalScript component\n * @extends {React.PureComponent>}\n */\nclass DefaultExternalScript extends React.PureComponent> {\n constructor(props: IDefaultExternalScriptProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n logDebug(`Adding script tags for '${this.props.id}/${this.props.typeName}'`, this.props.telemetry);\n let source = config.scriptSource;\n\n let relativeBaseUrl: string = '';\n // Construct the relative base url, i.e. the base url from which statics will be served\n if (this.props.context) {\n relativeBaseUrl += this.props.context.request.url.staticCdnUrl;\n relativeBaseUrl += msdyn365Commerce.getEnvironmentVariable('SUBMISSIONID') || '';\n }\n\n if (isRelativeUrl(source)) {\n // If the source is a relative URL prepend the relative base url to the resolved source url for the actual source\n source = `${relativeBaseUrl}/${path.join(source)}`;\n } else if (source === '' || !isAbsoluteUrl(source)) {\n logError(\n 'Invalid external script - not a url. The external source is not an external or relative url, please use default-inline-script if you wish to load inline scripts',\n this.props.telemetry\n );\n return null;\n }\n const scriptHtml = ``;\n\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultExternalScript;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineScriptProps } from './default-inline-script.props.autogenerated';\n\n/**\n *\n * DefaultScript\n * @extends {React.PureComponent>}\n */\nclass DefaultInlineScript extends React.PureComponent> {\n constructor(props: IDefaultInlineScriptProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n logDebug(`Adding script tags for '${this.props.id}/${this.props.typeName}'`, this.props.telemetry);\n const source = config.inlineScript;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError(\n 'Invalid inline script - Empty inline source defined or a url is being used as a source. Use default-external-script to load scripts from an external or relative url.',\n this.props.telemetry\n );\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline script - inline script should not contain html tags', this.props.telemetry);\n return null;\n }\n\n const nonceToken = this.props.context && isNonceEnabled(this.props.context.request);\n const scriptHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultInlineScript;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineStyleProps } from './default-inline-style.props.autogenerated';\n\n/**\n *\n * DefaultStyle\n * @extends {React.PureComponent>}\n */\n\nconst DefaultInlineStyle = (props: IDefaultInlineStyleProps<{}>) => {\n const { config, id, typeName, telemetry } = props;\n logDebug(`Adding style tags for '${id}/${typeName}'`, telemetry);\n const source = config.inlineStyle;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError('Invalid inline style - Empty inline source defined or a url is being used as a source.', telemetry);\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline style - inline style should not contain html tags', telemetry);\n return null;\n }\n\n const styleHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: id, dangerouslySetInnerHTML: { __html: styleHtml } });\n};\n\nexport default DefaultInlineStyle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInternalTelemetry, LogLevel } from '@msdyn365-commerce/telemetry-internal';\n\nexport const logDebug = (debugMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Debug, debugMessage);\n};\n\nexport const logError = (errorMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Error, errorMessage);\n};\n\n/**\n * Returns true if the given string matches an URL pattern\n *\n * @param source The string to check against\n */\nexport const isAbsoluteUrl = (source: string): boolean => {\n // eslint-disable-next-line security/detect-unsafe-regex\n return /^(http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(source);\n};\n\nexport const isRelativeUrl = (source: string): boolean => {\n return /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/).*(\\.js){1}$/.test(source);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\n\nimport { IHtmlBlockProps } from './html-block.props.autogenerated';\n\nexport interface IHtmlBlockViewProps extends IHtmlBlockProps<{}> {\n content?: React.ReactNode;\n className?: string;\n}\n\n/**\n *\n * HtmlBlock component\n * @extends {React.PureComponent>}\n */\nclass HtmlBlock extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { content, className } = this.props.config;\n const text = content && (\n \n );\n const htmlBlockViewProps = {\n ...this.props,\n content: text,\n className: classnames('ms-html-block', className)\n };\n return this.props.renderView(htmlBlockViewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.content = event.target.value);\n}\n\nexport default HtmlBlock;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { IHtmlBlockViewProps } from './html-block';\n\nconst HtmlBlockView: React.FC = props => (\n
\n {props.content}\n
\n);\n\nexport default HtmlBlockView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { HtmlHeadInclude, IAny, IGeneric } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IProductPageSummaryData } from './product-page-summary.data';\nimport { IProductPageSummaryProps } from './product-page-summary.props.autogenerated';\n\n/**\n *\n * ProductPageSummary component.\n * @extends {React.PureComponent}\n */\nclass ProductPageSummary extends React.PureComponent> {\n public render(): JSX.Element {\n if (this.props.data.productPageSummary.result === undefined) {\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\n }\n let {\n data: {\n productPageSummary: {\n result: { title, description, keywords, sharingImageUrl, faviconUrl }\n }\n }\n } = this.props;\n\n const {\n config,\n context,\n data: {\n productPageSummary: {\n result: { canonicalUrl, productId, productBrand, price }\n }\n }\n } = this.props;\n\n // Product SEO metadata specific information - non-overridable\n const productName = title;\n const productDescription = description;\n const productImageUrl = sharingImageUrl;\n\n // Override values coming from data action if config values are provided\n title = config.title || title;\n description = config.description || description;\n keywords = config.keywords || keywords;\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\n faviconUrl = config.faviconUrl || faviconUrl;\n\n // Construct page title with suffix and prefix if provided from app settings\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\n return (\n <>\n \n {pageTitle && {pageTitle}}\n {description && }\n {keywords && }\n {canonicalUrl && }\n {faviconUrl && }\n \n {this._renderProductMetadata(\n productName,\n productDescription,\n productImageUrl,\n canonicalUrl,\n productId,\n price,\n context.request.channel?.Currency,\n productBrand\n )}\n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\n \n );\n }\n\n /**\n * Renders the facebook and other social media specific metadata tags.\n *\n * @param title Page title.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n */\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n /**\n * Constructs and renders the JSON-LD tag used to output product specific metadata used by search engine crawlers.\n *\n * @param productName Product name.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n * @param canonicalUrl Product canonical url.\n * @param productId Master product id.\n * @param price Proudct price.\n * @param currencyCode Current channel currency code.\n * @param productBrand Product brand.\n */\n private _renderProductMetadata(\n productName: string | undefined,\n description: string | undefined,\n sharingImageUrl: string | undefined,\n canonicalUrl: string | undefined,\n productId: number | undefined,\n price: number | undefined,\n currencyCode: string | undefined,\n productBrand: string | undefined\n ): JSX.Element {\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\n const productMetaData = JSON.stringify({\n '@context': 'http://schema.org',\n '@type': 'Product',\n name: productName,\n description,\n image: sharingImageUrl,\n sku: productId,\n brand: {\n '@type': 'Brand',\n name: productBrand\n },\n offers: {\n '@type': 'Offer',\n url: canonicalUrl,\n priceCurrency: currencyCode,\n price\n }\n });\n return (\n \n {/* eslint-disable-next-line react/no-danger -- Implementation is a copy.*/}\n