{"version":3,"file":"static/js/20.ced5ab60e51ef975965c.chunk.js","mappings":";4vBAoBA,MAAMA,UAA0BC,EAAAA,cACrBC,SACH,MACMF,EAAiBG,EAAAA,EAAA,GAAQC,KAAKC,OAAK,IAAEC,QAD3B,eAEhB,OAAOF,KAAKC,MAAME,WAAWP,IAIrC,mECpBA,QAAgBK,IACZ,MAAMG,EAAUH,EAChB,OACIJ,EAAAA,cAAA,OAAKQ,UAAU,OACXR,EAAAA,cAAA,2BAAmBI,EAAMK,OAAOC,UAChCV,EAAAA,cAAA,6BAAqBI,EAAMO,UAAUC,aACrCZ,EAAAA,cAAA,uBAAeO,spBCmD3B,MAAMM,UAAyBb,EAAAA,cACpBc,gBAAa,IAAAC,EAChB,OACIf,EAAAA,cAAA,OAAKQ,UAAU,gBAOXR,EAAAA,cAAA,OACIQ,UAAU,eACVQ,wBAAyBC,EAAAA,GAAsD,QAA9BF,EAACZ,KAAKC,MAAMc,KAAKC,OAAOC,cAAM,IAAAL,GAAM,QAANA,EAA7BA,EAA+BM,YAAI,IAAAN,OAAA,EAAnCA,EAAqCO,YAMhGrB,SACH,MAAMsB,EAAqBrB,EAAAA,EAAA,GACpBC,KAAKC,OAAK,IACboB,UAAWrB,KAAKW,kBAGpB,OAAOX,KAAKC,MAAME,WAAWiB,IAIrC,qGCjFO,MAAME,EAAYA,CAACC,EAAaC,EAAkBC,KACrD5B,EAAAA,WAAgB,KACZ,MAAM6B,EAA4BC,SAASC,cAAcJ,GACnDK,EAA4BF,SAASG,cAAc,UAOzD,OALAD,EAAOE,IAAMR,EACbM,EAAOJ,WAAyB,IAAVA,GAAgCA,EAEtDC,MAAAA,GAAAA,EAAWM,YAAYH,GAEhB,KACHH,MAAAA,GAAAA,EAAWO,YAAYJ,QAKtBK,EAAcA,CAACC,EAAaC,EAAeC,KACpDxC,EAAAA,WAAgB,KACZ,MAAM6B,EAA4BC,SAASC,cAAc,QACnDU,EAAOX,SAASG,cAAc,QAQpC,OANAQ,EAAKC,aAAa,MAAOJ,GACzBG,EAAKC,aAAa,QAASH,GAC3BE,EAAKC,aAAa,OAAQF,GAE1BX,MAAAA,GAAAA,EAAWM,YAAYM,GAEhB,KACHZ,MAAAA,GAAAA,EAAWO,YAAYK,QAKnC,EAAgBrC,IAAqC,IAAAuC,EAAAC,EACjD,MAAM,UAAEpB,EAAS,KAAEN,GAASd,EAE5B,OACIJ,EAAAA,cAAAA,EAAAA,SAAA,MACuB,QAAlB2C,EAAAzB,EAAKC,OAAOC,cAAM,IAAAuB,GAAM,QAANA,EAAlBA,EAAoBtB,YAAI,IAAAsB,OAAA,EAAxBA,EAA0BE,aACvBR,EACI,aACA,MACA,GAAGjC,EAAMK,OAAOqC,iDAAmE,QAA5DF,EAA0C1B,EAAKC,OAAOC,cAAM,IAAAwB,GAAM,QAANA,EAAlBA,EAAoBvB,YAAI,IAAAuB,OAAA,EAAxBA,EAA0BC,kBAWlGrB,2ECvDb,MAcMuB,EAAiB3C,GAEfJ,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAK9C,EAAM+C,aACX/C,EAAMgD,UACNhD,EAAMiD,IACNjD,EAAMkD,YAKnB,EAxBmElD,IAC/D,MAAM,QAAEmD,EAAO,eAAEC,EAAc,eAAEC,EAAc,YAAEC,GAAgBtD,EACjE,OACIJ,EAAAA,cAAC2D,EAAAA,OAAMV,OAAAC,OAAA,GAAKQ,GACPH,EACDvD,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKO,GACLD,EAAeI,KAAIC,GACTd,EAAcc,6GCkCzC,MAAMC,EAAsBC,IACxB,MAAMC,EAAWD,GAAsBA,EAAmB3C,OAC1D,OAAOpB,EAAAA,cAAAA,EAAAA,SAAA,KAAGgE,EAAWA,EAASC,WAAaD,EAASE,KAAO,KA4E/D,SAASC,EAAqBC,GAC1B,OACIpE,EAAAA,cAAAA,EAAAA,SAAA,KACKoE,GAASA,EAAMC,OAAS,EACnBD,EAAMR,KAAI,CAACU,EAAuBC,IACvBvE,EAAAA,cAACA,EAAAA,SAAc,CAACwE,IAAKD,GAAQD,KAExC,MAKlB,QAjI+ClE,IAC3C,MAAM,UAAEqE,EAAS,gBAAEC,EAAe,sBAAEC,EAAqB,QAAEC,GAAYxE,EACvE,OACIJ,EAAAA,cAAC2D,EAAAA,OAAMV,OAAAC,OAAA,GAAKuB,GACRzE,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKwB,GACN1E,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKyB,GACLvE,EAAMyE,QACNzE,EAAM0E,KACNX,EAAqB/D,EAAM2E,QAC3B3E,EAAM4E,eAuE3B,SAA6B5E,EAAyB6E,GAClD,MAAM,mCACFC,EAAkC,0CAClCC,EAAyC,0BACzCC,EAAyB,YACzBC,EAAW,WACXC,EAAU,aACVC,GACAnF,EAEJ,GAAI8E,EAAoC,CACpC,MAAMM,EAAmBC,GAAAA,CACrBP,EAAmC1E,UACnCyE,EAAkB,iBAAmB,mBAEzC,GAAIE,EACA,OACInF,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKgC,EAAkC,CAAE1E,UAAWgF,IACpDJ,EACDpF,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKiC,KACLI,GAAeA,EAAa3B,KAAKnB,GAA0BA,IAC3D4C,IAIV,GAAIC,EACP,OACItF,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKgC,EAAkC,CAAE1E,UAAWgF,IACpDF,GAMjB,OAAO,KAxGUI,CAAoBtF,GAAO,GAC3BA,EAAMuF,oBACP3F,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAK0B,IACTxE,EAAMwF,SACNzB,EAAqB/D,EAAMyF,cAShD,SAA6BzF,GACzB,MAAM,QAAEwE,EAAO,yBAAEkB,EAAwB,oBAAEC,GAAwB3F,EACnE,OACIJ,EAAAA,cAACgG,EAAAA,SAAQ,CAACxF,UAAU,mCAAmCyF,QAASF,GAC5D/F,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAK4C,GACL3B,EAAqB/D,EAAM2E,QAgB5C,SAAmC3E,EAAyB6E,GACxD,MAAM,mCAAEC,EAAkC,YAAEG,EAAW,WAAEC,EAAU,KAAEpE,EAAI,aAAEqE,GAAiBnF,EAE5F,GAAI8E,EAAoC,CACpC,MAAMM,EAAmBC,GAAAA,CACrB,oBACAP,EAAmC1E,UACnCyE,EAAkB,iBAAmB,mBAGzC,GAAIM,EACA,OACIvF,EAAAA,cAACkG,EAAAA,OAAM,CACH1F,UAAWgF,EACXW,UAAU,yBACVC,WAAW,0BACXC,eAAe,MACfC,iBAAkBxC,EAAmB5C,EAAK6C,qBAE1C/D,EAAAA,cAAA,aACKuF,GAAeA,EAAa3B,KAAKnB,GAA0BA,IAC3D4C,IAIV,GAAIC,EACP,OACItF,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKgC,EAAkC,CAAE1E,UAAWgF,IACpDF,GAKjB,OAAO,KAhDMiB,CAA0BnG,GAAO,GACjCA,EAAMoG,mBACNpG,EAAMyF,aAEX7F,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAK0B,IACTT,EAAqB/D,EAAMqG,UAlBvBC,CAAoBtG,GACrBJ,EAAAA,cAACgD,EAAAA,KAAI,CAACxC,UAAU,2BAA2B2D,EAAqB/D,EAAMqG,yuBCQ/E,MAAME,UAA2B3G,EAAAA,cAapC4G,YAAYxG,GACRyG,MAAMzG,GAbF,KAAA0G,aAAuB,EAEd,KAAAC,qBAA+B,EAE/B,KAAAC,UAAoB,GAqcpB,KAAAC,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEnF,IAAKgF,EAAkBI,QAASF,IAGtEG,EAAAA,gBAAgBC,YAAYL,EAAOM,qBACnCN,EAAOM,mBAAmB7D,KAAIC,IAC1B,GAAIA,GAAQA,EAAK6D,MAAO,CACpB,MAAMC,EAAW9D,EAAK6D,MAAMxF,IACtB0F,EAA+B/D,EAAK6D,MAAMG,cAChDR,EAAiBS,KAAK,CAClB5F,IAAKyF,EACLL,QAASzD,EAAKkE,KACdF,cAAeD,EACfI,qBAAsB,CAAEC,QAASpE,EAAKoE,QAAQC,sBAK9D/H,KAAKgI,SAAS,CACVC,cAAef,EAAiBhD,OAAS,EAAIgD,EAAmB,CAAC,CAAEnF,IAAK,UACxEmG,qBAAsBjB,KAUb,KAAAkB,sBAAwB,CAACpH,EAAqBqH,IAAsB,KAC5EpI,KAAKC,MAAMoI,aASZrI,KAAKgI,SAAS,CACVM,WAAYvH,EAAKwH,GACjBC,WAAYJ,KAVhBpI,KAAKgI,SAAS,CACVM,WAAYtI,KAAKyI,MAAMH,YAActI,KAAKyI,MAAMH,aAAevH,EAAKwH,QAAMG,EAAY3H,EAAKwH,GAC3FC,WAAYJ,IAEZpI,KAAKC,MAAM0I,mBACX3I,KAAK8G,qBAAqB/F,EAAK6H,YAAc7H,EAA7Cf,IASRA,KAAK6I,eAMQ,KAAAA,YAAc,KACvB7I,KAAKC,MAAMoI,cACXS,YAAW,KACP9I,KAAK+I,UAAY/I,KAAK+I,SAASC,SAAWhJ,KAAK+I,SAASC,QAAQC,UACjE,IAQM,KAAAC,oBAAuBC,IAChCnJ,KAAK+I,SAASC,UAAYhJ,KAAK+I,SAASC,QAAQI,SAASD,EAAME,SAC/DrJ,KAAKgI,SAAS,CACVM,gBAAYI,EACZT,cAAe,QASV,KAAAqB,oBAAuBH,IAChCnJ,KAAK+I,SAASC,UAAYhJ,KAAK+I,SAASC,QAAQI,SAASD,EAAMI,gBAC/DvJ,KAAKwJ,iBAiBI,KAAAC,aAAgBN,IAC7B,GAAIA,EAAMO,UAAY1J,KAAK6G,UAAW,CAClC,IAAK7G,KAAKC,MAAMoI,aAAc,CAC1B,MAAMsB,EAAgBC,MAAMC,KAAK7J,KAAK+I,SAASC,QAASc,YACxD,IAAK,MAAMpG,KAAQiG,EAAe,CAC9B,MAAMI,EAAkBrG,EAAKsG,WACyB,SAAlDD,EAAgBE,aAAa,kBAC7BF,EAAgBd,SAI5BjJ,KAAKwJ,kBAII,KAAAU,kBAAqBjC,IAClC,IAAKA,IAAkBA,EAAclG,IACjC,OAAO,KAGX,MAAMoI,GAAmBC,EAAAA,EAAAA,kBAAiBnC,EAAclG,IAAK/B,KAAKC,MAAMoK,QAAQC,cAAcC,eAAeC,aACvGC,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCG,GAAI,CAAEL,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCI,UAAU,GAEd,QAAyBxC,IAArByB,EAAgC,CAAC,IAADgB,EAAAC,EAChC,MAAMC,EAAwB,CAAEtJ,IAAKoI,GACrC,OACItK,EAAAA,cAACyL,EAAAA,GAAKxI,OAAAC,OAAA,CACFwH,eAAgBvK,KAAKC,MAAMoK,QAAQC,cAAcC,eACjDlK,UAAU,sBACNgL,EAAS,CACbE,aAAcvL,KAAKC,MAAMoK,QAAQmB,QAAQD,aACzC7D,cAAqF,QAAxEyD,EAA6B,QAA7BC,EAAEnD,EAAcP,qBAAa,IAAA0D,EAAAA,EAAIpL,KAAKC,MAAMK,OAAOmL,6BAAqB,IAAAN,EAAAA,EAAIV,EACzFiB,oBAAoB,OACpBC,KAAK,WACLpD,GAAI,GAAGN,EAAclG,qBACrBoF,QAASc,EAAcd,WAInC,OAAO,MAOM,KAAAyE,gBAAmBC,IAChC,MAAM,eAAEC,GAAmB9L,KAAKyI,MAE1BsD,EAAU,CAAE,MADoCrD,IAA3BmD,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAY/F,QAC5C9F,KAAKgI,SAAS,CAAE8D,eAAc/L,EAAAA,EAAA,GAAO+L,GAAmBC,MArlBxD/L,KAAK+I,SAAWlJ,EAAAA,YAChBG,KAAKyI,MAAQ,CAAEH,gBAAYI,EAAWF,gBAAYE,EAAWR,qBAAsB,GAAI4D,eAAgB,IACvG9L,KAAKwJ,cAAgBxJ,KAAKwJ,cAAcyC,KAAKjM,MAC7CA,KAAKyJ,aAAezJ,KAAKyJ,aAAawC,KAAKjM,MAC3CA,KAAKkM,kBAAmBC,EAAAA,EAAAA,oBACpBnM,KAAKC,MAAMoK,QAAQmB,QAAQY,kBAC3BpM,KAAKC,MAAMoM,aACXrM,KAAKC,MAAMqM,WAEftM,KAAKuM,SAAUC,EAAAA,EAAAA,kBAAiB,QAASxM,KAAKkM,iBAAkB,GAAI,IAGjEO,oBACCC,EAAAA,GAASC,YACThL,SAASiL,KAAKC,iBAAiB,UAAY7M,KAAKyJ,cAA2C,GAC3F9H,SAASiL,KAAKC,iBAAiB,YAAa7M,KAAKkJ,qBACjDvH,SAASiL,KAAKC,iBAAiB,WAAY7M,KAAKsJ,sBAIjDwD,uBACCJ,EAAAA,GAASC,YACThL,SAASoL,oBAAoB,UAAY/M,KAAKyJ,cAA2C,GACzF9H,SAASiL,KAAKG,oBAAoB,YAAa/M,KAAKkJ,qBAAqB,GACzEvH,SAASiL,KAAKG,oBAAoB,WAAY/M,KAAKsJ,qBAAqB,IAIzExJ,SACH,MAAM,aAAEuI,GAAiBrI,KAAKC,MAG9B,OADAD,KAAK2G,aAAe,EACb9G,EAAAA,cAAAA,EAAAA,SAAA,KAAGwI,EAAerI,KAAKgN,oBAAsBhN,KAAKiN,sBAOrDD,oBACJ,MAAM,aAAE3E,EAAY,aAAE6E,EAAY,WAAEC,GAAenN,KAAKC,MACxD,OACIJ,EAAAA,cAAC2D,EAAAA,OAAMV,OAAAC,OAAA,GAAKoK,EAAU,CAAE9M,UAAWiF,GAAAA,CAAW6H,EAAW9M,UAAWgI,EAAe,cAAgB,kBAC9F6E,EAAazJ,KAAI,CAAC2J,EAAyBC,IACjCrN,KAAKsN,kBAAkBF,EAAUF,EAAahJ,OAAQmJ,EAAWrN,KAAK4G,yBAUrFqG,qBACJ,MAAM,SAAEM,EAAQ,WAAEJ,GAAenN,KAAKC,MACtC,OACIJ,EAAAA,cAAC2D,EAAAA,OAAMV,OAAAC,OAAA,GAAKoK,EAAU,CAAE9M,UAAWiF,GAAAA,CAAW6H,EAAW9M,aACrDR,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKwK,EAAQ,CAAEC,IAAKxN,KAAK+I,SAAU0E,SAAS,OAC5CzN,KAAK0N,mBAadJ,kBAAkBF,EAAyBO,EAAiBN,GAChE,OAAID,GAAYA,EAASQ,SAAWxG,EAAAA,gBAAgBC,YAAY+F,EAASQ,SAC9D5N,KAAK6N,cAAcT,EAAUO,EAASN,GAE1CrN,KAAK8N,oBAAoBV,OAAU1E,GAAW,GAAM,EAAOiF,EAASN,GAUvEQ,cAAcT,EAAyBO,EAAkBN,GAC7D,MAAMlH,EAAmBiH,EAASnG,SAC5B8G,EAAW/N,KAAKyI,MAAMqD,eACtBE,OAAkCtD,IAArBvC,EAAiCA,EAAmB,GACjE6H,OAAoBtF,IAAbqF,EAAyBA,EAAW,IAC3C,aAAE1F,GAAiBrI,KAAKC,MAE9B,IAAIgO,GAAe,EACfD,EAAKhC,KACLiC,GAAe,GAEnB,MAAMC,EAA2B,CAAEpI,OAAQmI,GAC3C,OACIpO,EAAAA,cAACkG,EAAAA,OAAM,CACH4F,KAAK,UACLwC,kBAAmB,CACf,eAAgBR,EAChB,gBAAiBN,EACjB1B,KAAM,YAEVyC,UAAW/F,EAAe+E,EAASgB,eAAY1F,EAC/CrE,IAAK+I,EAAS7E,GACdlI,UAAU,iBACV2F,UAAU,sBACVqI,SAAUrO,KAAK4L,gBACf0C,cAAeJ,EACfjI,WAAW,uBACXC,eAAe,MACfC,iBAAkBnG,KAAKuO,gBAAgBpI,EAAkBwH,EAASN,IAElExN,EAAAA,cAAA,OAAK8L,KAAK,WACLyB,EAASQ,QAASnK,KAAI,CAAC+K,EAA4BC,KAAsB,IAAAC,EAChBC,EAAtD,OAAIvH,EAAAA,gBAAgBC,YAAYmH,EAAYZ,SACjC5N,KAAK6N,cAAcW,EAA6B,QAAlBG,EAAEvB,EAASQ,eAAO,IAAAe,OAAA,EAAhBA,EAAkBzK,OAAQuK,EAAazO,KAAK4G,sBAEhF5G,KAAK4O,kBAAkBJ,EAA6B,QAAlBE,EAAEtB,EAASQ,eAAO,IAAAc,OAAA,EAAhBA,EAAkBxK,OAAQuK,EAAazO,KAAK4G,2BAcnG2H,gBAAgBtH,EAA8B0G,EAA6BN,GAC/E,OACIxN,EAAAA,cAAA,uBAAoB8N,EAAO,gBAAiBN,GACvCpG,GAYL2H,kBAAkBlL,EAAqBiK,EAA6BN,GACxE,OAAI3J,GAAQA,EAAKuD,UAAYvD,EAAKmL,SAAWnL,EAAKmL,QAAQ3K,OAAS,EACxDlE,KAAK8N,oBAAoBpK,OAAMgF,GAAW,GAAM,EAAOiF,EAASN,GAChE3J,GAAQA,EAAKuD,WAAavD,EAAKmL,QAC/B7O,KAAK8O,oBAAoBpL,GAE7B,KAOHgK,iBACJ,MAAM,SAAEqB,EAAQ,aAAE7B,EAAY,aAAE7E,GAAiBrI,KAAKC,OAChD,WAAEqI,GAAetI,KAAKyI,MACtBuG,EAA8B,GAEpC,GAAI3G,QAA+BK,IAAfJ,GAA4B4E,EAAahJ,OAAS,EAAG,CACrE,IAAIkJ,EAA0B,GAC9B,IAAK,MAAM6B,KAAiB/B,EAAc,CACtC,GAAI+B,GAAiBA,EAAc1G,KAAOD,EAAY,CAClD8E,EAAW6B,EACXjP,KAAKgI,SAAS,CAAEQ,gBAAYE,IAC5B,MAGJ,GADA0E,EAAWpN,KAAKkP,gBAAgBD,GAC5B7B,GAAYA,EAAS7E,KAAOD,EAC5B,MAIR8E,GACI4B,EAAarH,KACT9H,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,CAACsB,IAAK+I,EAAS7E,IAAQwG,GACvB,IACA/O,KAAKmP,oBAAoB/B,GACzB,WAIbF,EAAakC,SAAQ,CAAC1L,EAAqBU,KACvC4K,EAAarH,KACT9H,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,CAACsB,IAAKD,GAAW2K,GACjB/O,KAAKmP,oBAAoBzL,QAM1C,OAAOsL,EAQHE,gBAAgBxL,GACpB,MAAM2L,EAAW3L,GAAQA,EAAKkK,QAC9B,GAAIyB,GAAYA,EAASnL,OAAS,EAC9B,IAAK,IAAIoL,EAAI,EAAGA,GAAKD,EAASnL,OAAS,EAAGoL,IAAK,CAC3C,GAAID,EAASC,GAAG/G,KAAOvI,KAAKyI,MAAMH,WAE9B,OADAtI,KAAKgI,SAAS,CAAEQ,WAAY9E,MAAAA,OAAI,EAAJA,EAAM6E,KAC3B8G,EAASC,GAEpB,MAAMC,EAAQvP,KAAKkP,gBAAgBG,EAASC,IAC5C,GAAIC,EACA,OAAOA,EAInB,OAAO,KAQHJ,oBAAoBjC,GACxB,OAAIA,GAAgBA,EAAaU,SAAWV,EAAaU,QAAQ1J,OAAS,EAClElE,KAAKC,MAAMoI,mBAA0CK,IAA1B1I,KAAKyI,MAAMH,WAC/BtI,KAAKwP,eAAetC,EAAaU,QAASV,EAAa3E,IAG9D1I,EAAAA,cAAAA,EAAAA,SAAA,KACKG,KAAKyP,sBAAsBvC,GAC3BlN,KAAKwP,eAAetC,EAAaU,QAASV,EAAa3E,KAGzD2E,GAAgBA,EAAajG,UAAYiG,EAAa2B,SAAW3B,EAAa2B,QAAQ3K,OAAS,EAC/FlE,KAAK8N,oBAAoBZ,EAAcA,EAAa3E,IAAI,GAAO,GAC/D2E,GAAgBA,EAAajG,WAAaiG,EAAa2B,QACvD7O,KAAK8O,oBAAoB5B,EAAcA,EAAa3E,IAAI,GAG5D,KAGHiH,eAAeH,EAA4B/G,EAAqBoH,GACpE,MAAM,aAAErH,EAAY,SAAE0G,GAAa/O,KAAKC,MAClC0P,EAAyB3P,KAAKC,MAAMK,OAAOsP,uBAAwB,EAEnEC,EAA0B7P,KAAKC,MAAMK,OAAOwP,kBAD7B,EAIrB,GAAIxH,GAActI,KAAKyI,MAAMH,aAAeA,EAExC,OADAtI,KAAKC,MAAMoK,QAAQiC,UAAUyD,MAAM,gEAC5B,KAGX,IAAKV,GAAgC,IAApBA,EAASnL,OAEtB,OADAlE,KAAKC,MAAMoK,QAAQiC,UAAUyD,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EACFZ,GACAA,EAAS5L,KAAI,CAACuD,EAAuBkJ,KACjC,MAAMC,EAAanJ,EAAO4G,SAAW5G,EAAO4G,QAAQ1J,OAAS,EAC7D,IAAIkJ,EAMAQ,EAJAR,EADA+C,GAAc9H,EACHrI,KAAKyP,sBAAsBzI,EAAQsB,EAAY4H,GAE/ClJ,EAAO6H,QAAU7O,KAAK8N,oBAAoB9G,EAAQkJ,GAAOlQ,KAAK8O,oBAAoB9H,GAGjG,MAAMoJ,EAAcD,GAAcR,GAA0B3P,KAAK2G,cAAgB0J,KAAKC,MAAMT,GAA2B,EAMvH,OALIO,IACApQ,KAAK2G,eACLqJ,EAAiBL,EAAyB,SAAS3P,KAAK2G,aAAa4J,aAAe,GACpF3C,EAAU5N,KAAKwP,eAAexI,EAAO4G,QAASvF,EAAerB,EAAOuB,QAAKG,GAAW,IAGpF7I,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKgM,EAAQ,CAAE1K,IAAK2C,EAAOuB,GAAIlI,UAAWiF,GAAAA,CAAWyJ,EAAS1O,UAAW+P,GAAe,iBACxFhD,EACAQ,MAIjB,OAAO5N,KAAKwQ,YAAYR,EAAgBC,EAAa3H,EAAYoH,GAU7DD,sBAAsBzI,EAAuBsB,EAAqBlE,GACtE,MAAM,OAAEqM,GAAWzQ,KAAKC,MACxB,OACIJ,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,CACDsB,IAAKD,GACDqM,EAAM,CACVC,QAAS1Q,KAAKmI,sBAAsBnB,EAAQsB,GAC5CqI,QAAS3Q,KAAKwJ,cAAa,kBACVxJ,KAAKyI,MAAMH,YAActI,KAAKyI,MAAMH,aAAetB,EAAOuB,IAAG,mBAC5DvI,KAAKyI,MAAMH,YAActI,KAAKyI,MAAMH,aAAetB,EAAOuB,IAAG,cAClED,IAEZtB,EAAOC,UAeZ6G,oBACJ9G,EACA5C,GAIiB,IAHjBwM,IAAAC,UAAA3M,OAAA,QAAAwE,IAAAmI,UAAA,KAAAA,UAAA,GACAC,EAAAD,UAAA3M,OAAA,QAAAwE,IAAAmI,UAAA,IAAAA,UAAA,GACAlD,EAAgBkD,UAAA3M,OAAA,EAAA2M,UAAA,QAAAnI,EAChB2E,EAAiBwD,UAAA3M,OAAA,EAAA2M,UAAA,QAAAnI,EAEjB,MAAM,KAAEqI,EAAI,aAAE1I,GAAiBrI,KAAKC,MAC9BgH,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/C+J,EAAchK,EAAO4B,YAAc5B,EAAO4B,YAAc,GAC9D5I,KAAKuM,QAAQ0E,cAAcC,MAAQjK,EACnC,MAAMkK,GAAaC,EAAAA,EAAAA,wBAAuBpR,KAAKkM,iBAAkBlM,KAAKuM,SACtE,OACI1M,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,gBACasF,EAAesF,OAAUjF,EAAS,gBACjCL,EAAegF,OAAW3E,EAAS,aACtCL,EAAerB,EAAOoH,eAAY1F,GAC1CqI,EAAI,CACR1M,IAAKD,EACLuM,QAASG,GAAY9Q,KAAKwJ,cAC1BH,OAAQrC,EAAOqK,iBAAmB,cAAW3I,EAC7C4I,YAAaV,GAAe5Q,KAAK8G,qBAAqBkK,EAAahK,GACnE3E,KAAM2E,EAAO6H,SACTsC,EAAU,CACdT,SAASa,EAAAA,EAAAA,kBAAiBvR,KAAKkM,iBAAkBlM,KAAKuM,QAAStF,KAE9DD,EAAOC,UAWZuK,uBAAuBvK,EAAmBa,GAC9C,MAAM,KAAEiJ,GAAS/Q,KAAKC,MACtBD,KAAKuM,QAAQ0E,cAAcC,MAAQjK,EACnC,MAAMkK,GAAaC,EAAAA,EAAAA,wBAAuBpR,KAAKkM,iBAAkBlM,KAAKuM,SACtE,OAAItF,GAAYa,EAERjI,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAKgO,EAAI,CAAE1O,KAAMyF,GAAaqJ,EAAU,CAAET,SAASa,EAAAA,EAAAA,kBAAiBvR,KAAKkM,iBAAkBlM,KAAKuM,QAAStF,KACzGA,GAIN,KAUH6H,oBAAoB9H,EAAuB5C,GAAyC,IAAzB0M,EAAAD,UAAA3M,OAAA,QAAAwE,IAAAmI,UAAA,IAAAA,UAAA,GAC/D,MAAM,KAAEY,GAASzR,KAAKC,MACtB,OACIJ,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,CAACsB,IAAKD,GAAWqN,EAAI,CAAEd,QAASG,GAAY9Q,KAAKwJ,gBACjDxC,EAAOC,UAaZuJ,YAAYkB,EAAezB,EAA4B0B,EAAsBC,GACjF,MAAM,aAAEC,EAAY,SAAEtE,EAAQ,kBAAEuE,EAAiB,kBAAEnJ,EAAiB,aAAEN,EAAY,uBAAE0J,GAA2B/R,KAAKC,MAC9G+R,GACD3J,GAAgBM,GAAkD,OAA7B3I,KAAKyI,MAAMR,oBAAuDS,IAA7B1I,KAAKyI,MAAMR,gBAAgC2J,EACpHK,GACD5J,GAAgB0J,GAA0B3K,EAAAA,gBAAgBC,YAAYrH,KAAKyI,MAAMR,iBAAmB2J,EACnGM,EAAoBlS,KAAK2G,aAAe,GAAKqL,EAAuBH,EAAcxR,UAAY,kBAEpG,OADAL,KAAK2G,aAAe,EAEhB9G,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GAAK8O,EAAY,CAAExR,UAAW6R,IAC/BrS,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,GACGwK,EAAQ,CACZlN,UAAWiF,GAAAA,CACPiI,EAASlN,UACTqR,EACAM,GAAwB,gBACxBA,GACIhS,KAAKC,MAAMK,OAAOwP,kBAClB9P,KAAKC,MAAMK,OAAOwP,iBAAmB,GACrC,yBAGPG,GAELpQ,EAAAA,cAAA,OAAKQ,UAAU,4BACV2R,GACGhS,KAAKyI,MAAMR,eACXjI,KAAKyI,MAAMR,cAAcxE,KAAIC,IAAI,IAAAyO,EAAA,OAC7BtS,EAAAA,cAACgD,EAAAA,KAAIC,OAAAC,OAAA,CAACsB,IAAKX,EAAK3B,KAAS+P,EAAiB,CAAEzR,UAAWyR,EAAmBzR,YACrEL,KAAKyI,MAAMR,eAAiBjI,KAAKkK,kBAAkBxG,GACnDuO,GAA6BjS,KAAKwR,uBAAuB9N,EAAKyD,QAAkC,QAA3BgL,EAAEzO,EAAKmE,4BAAoB,IAAAsK,OAAA,EAAzBA,EAA2BrK,eA+FvH0B,gBACCxJ,KAAKC,MAAMoI,cACZrI,KAAKgI,SAAS,CAAEM,gBAAYI,KAqExC,2EC7nBA,MAAM0J,UAAsBvS,EAAAA,cAQxB4G,YAAYxG,GACRyG,MAAMzG,GARO,KAAAoS,UAAqC,CAClD9H,eAAgBvK,KAAKC,MAAMoK,QAAQmB,QACnC8G,OAASnJ,GAA0CnJ,KAAKC,MAAMK,OAAOiS,cAAgBpJ,EAAME,OAAOmJ,OAOlGxS,KAAKkM,kBAAmBC,EAAAA,EAAAA,oBACpBnM,KAAKC,MAAMoK,QAAQmB,QAAQY,kBAC3BpM,KAAKC,MAAMoM,aACXrM,KAAKC,MAAMqM,WAIZxM,SACH,OAAKE,KAAKC,MAAMK,OAAOmS,YAMnB5S,EAAAA,cAAC6S,EAAAA,UAAS,CACNrQ,KAAMrC,KAAKC,MAAMK,OAAOmS,YACxBE,MAAO3S,KAAKC,MAAMK,OAAOqS,MAAK,aAClB3S,KAAKC,MAAMK,OAAO8N,UAC9B/N,UAAU,iBACVgS,UAAWrS,KAAKqS,UAChBzK,KAAM5H,KAAKC,MAAMK,OAAOiS,cACxBrG,iBAAkBlM,KAAKkM,oBAZ3BlM,KAAKC,MAAMqM,UAAUyD,MAAM,oEACpB,OAiBnB,iFCrCA,MAAM6C,UAA2B/S,EAAAA,cACtBC,SAAM,IAAA+S,EACT,QAAkDnK,IAA9C1I,KAAKC,MAAMc,KAAK+R,mBAAmB7R,OACnC,MAAM,IAAI8R,MAAM,uFAEpB,IACIhS,MACI+R,oBACI7R,QAAQ,MAAE0R,EAAK,YAAEK,EAAW,SAAEC,EAAQ,gBAAEC,EAAe,WAAEC,MAGjEnT,KAAKC,MAET,MAAM,OACFK,EAAM,QACN+J,EACAtJ,MACI+R,oBACI7R,QAAQ,aAAEmS,EAAY,UAAEC,EAAS,aAAEC,EAAY,MAAEC,MAGzDvT,KAAKC,MAGHuT,EAAcb,EACdc,EAAqBT,EACrBU,EAAkBR,EAGxBP,EAAQrS,EAAOqS,OAASA,EACxBK,EAAc1S,EAAO0S,aAAeA,EACpCC,EAAW3S,EAAO2S,UAAYA,EAC9BC,EAAmB5S,EAAOqT,cAAgBrT,EAAOqT,aAAa5R,KAAQmR,EACtEC,EAAa7S,EAAO6S,YAAcA,EAGlC,MAAMS,EAAY5T,KAAK6T,oBAAoBlB,EAAOtI,GAAWA,EAAQmB,SAAWnB,EAAQmB,QAAQsI,KAChG,OACIjU,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACkU,EAAAA,GAAe,KACXH,GAAa/T,EAAAA,cAAA,aAAQ+T,GACrBZ,GAAenT,EAAAA,cAAA,QAAMmU,KAAK,cAAc7S,QAAS6R,IACjDC,GAAYpT,EAAAA,cAAA,QAAMmU,KAAK,WAAW7S,QAAS8R,IAC3CG,GAAgBvT,EAAAA,cAAA,QAAMsC,IAAI,YAAYE,KAAM+Q,IAC5CD,GAActT,EAAAA,cAAA,QAAMsC,IAAI,gBAAgBE,KAAM8Q,KAElDnT,KAAKiU,uBACFT,EACAC,EACAC,EACAN,EACAC,EACAE,EACuB,QADlBV,EACLxI,EAAQmB,QAAQ0I,eAAO,IAAArB,OAAA,EAAvBA,EAAyBsB,SACzBb,IAEFhT,EAAO8T,eAAiBpU,KAAKqU,cAAcT,EAAWZ,EAAaE,IACnE5S,EAAOgU,oBAAsBtU,KAAKuU,mBAAmBX,EAAWZ,EAAaE,IAYnFmB,cAAc1B,EAA2BK,EAAiCE,GAC9E,OACIrT,EAAAA,cAACkU,EAAAA,GAAe,KACXpB,GAAS9S,EAAAA,cAAA,QAAM2U,SAAS,WAAWrT,QAASwR,IAC5CK,GAAenT,EAAAA,cAAA,QAAM2U,SAAS,iBAAiBrT,QAAS6R,IACxDE,GAAmBrT,EAAAA,cAAA,QAAM2U,SAAS,WAAWrT,QAAS+R,IACvDrT,EAAAA,cAAA,QAAM2U,SAAS,UAAUrT,QAAQ,aAiBrC8S,uBACJT,EACAR,EACAE,EACAE,EACAC,EACAE,EACAkB,EACAnB,GAGA,MAAMoB,EAAkBC,KAAKC,UAAU,CACnC,WAAY,oBACZ,QAAS,UACTZ,KAAMR,EACNR,YAAAA,EACAzL,MAAO2L,EACP2B,IAAKxB,EACLyB,MAAO,CACH,QAAS,QACTd,KAAMV,GAEVyB,OAAQ,CACJ,QAAS,QACTxT,IAAK6R,EACL4B,cAAeP,EACflB,MAAAA,KAGR,OACI1T,EAAAA,cAACkU,EAAAA,GAAe,KAEZlU,EAAAA,cAAA,4BAAwB,UAAUoV,KAAK,sBAAsBpU,wBAAyB,CAAEqU,OAAQR,MAWpGH,mBACJ5B,EACAK,EACAE,GAEA,OACIrT,EAAAA,cAACkU,EAAAA,GAAe,KACXpB,GAAS9S,EAAAA,cAAA,QAAMmU,KAAK,gBAAgB7S,QAASwR,IAC7CK,GAAenT,EAAAA,cAAA,QAAMmU,KAAK,sBAAsB7S,QAAS6R,IACzDE,GAAmBrT,EAAAA,cAAA,QAAMmU,KAAK,gBAAgB7S,QAAS+R,IACxDrT,EAAAA,cAAA,QAAMmU,KAAK,eAAe7S,QAAQ,aAUtC0S,oBAAoBlB,EAA2BmB,GAC9CnB,IACDA,EAAQ,IAEZ,MAAMwC,EAAenV,KAAKC,MAAMK,OAChC,GAAI6U,GAAgBA,EAAaC,wBAC7B,OAAOzC,EAEX,MAAM0C,EAAYvB,GAAOA,EAAIwB,SAU7B,OATID,IACIA,EAAUE,kBACV5C,EAAQ,GAAG0C,EAAUE,kBAAkB5C,KAEvC0C,EAAUG,kBACV7C,EAAQ,GAAGA,IAAQ0C,EAAUG,oBAI9B7C,GAIf","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/dyn-ctpmaxdate/dyn-ctpmaxdate.tsx?2771","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-ctpmaxdate/dyn-ctpmaxdate.view.tsx?58ab","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-wordpress-page/dyn-wordpress-page.tsx?c283","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-wordpress-page/dyn-wordpress-page.view.tsx?6a0f","webpack://Msdyn365.Commerce.Online/./src/themes/dyn-tebutheme/views/ratings-histogram.view.tsx?7769","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/header.view.tsx?6d84","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/back-top-footer/back-top-footer.tsx?f47e","webpack://Msdyn365.Commerce.Online/./src/modules/product-page-summary/product-page-summary.tsx?2924"],"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\n//import { ReactElement } from 'enzyme/node_modules/@types/react';\r\nimport * as React from 'react';\r\n\r\nimport { IDynCtpmaxdateData } from './dyn-ctpmaxdate.data';\r\nimport { IDynCtpmaxdateProps } from './dyn-ctpmaxdate.props.autogenerated';\r\n\r\nexport interface IDynCtpmaxdateViewProps extends IDynCtpmaxdateProps {\r\n dateMax: string;\r\n}\r\n\r\n/**\r\n *\r\n * ProductAtpmaxdate component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass ProductAtpmaxdate extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n const DateMax = '01/01/2022';\r\n const ProductAtpmaxdate = { ...this.props, DateMax };\r\n return this.props.renderView(ProductAtpmaxdate) as React.ReactElement; // this.props);\r\n }\r\n}\r\n\r\nexport default ProductAtpmaxdate;\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\nimport { IDynCtpmaxdateViewProps } from './dyn-ctpmaxdate';\r\n\r\nexport default (props: IDynCtpmaxdateViewProps) => {\r\n const dateMax = props;\r\n return (\r\n
\r\n

Config Value: {props.config.showText}

\r\n

Resource Value: {props.resources.resourceKey}

\r\n

Date max: {dateMax}

\r\n
\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 React from 'react';\r\n\r\nimport { IDynWordpressPageData } from './dyn-wordpress-page.data';\r\nimport { IDynWordpressPageProps } from './dyn-wordpress-page.props.autogenerated';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface IDynWordpressPageViewProps extends IDynWordpressPageProps {\r\n postNodes: React.ReactNode;\r\n}\r\n\r\nexport interface PageGQL {\r\n content: string;\r\n date: Date;\r\n slug: string;\r\n title: string;\r\n status: string;\r\n databaseId: number;\r\n}\r\n\r\nexport interface SeoPressData {\r\n title: string;\r\n description: string;\r\n canonical: string;\r\n og: {\r\n title: string;\r\n description: string;\r\n image: string;\r\n };\r\n twitter: {\r\n title: string;\r\n description: string;\r\n image: string;\r\n };\r\n robots: {\r\n noindex: boolean;\r\n nofollow: boolean;\r\n noodp: boolean;\r\n noarchive: boolean;\r\n nosnippet: boolean;\r\n noimageindex: boolean;\r\n };\r\n redirections: {\r\n enabled: boolean;\r\n status: string;\r\n type: number;\r\n value: string;\r\n };\r\n}\r\n\r\nexport interface PageGQLWithSeo {\r\n post: PageGQL | null;\r\n seo: SeoPressData | null;\r\n}\r\n\r\n/**\r\n *\r\n * DynWordpressPost component\r\n * @extends {React.PureComponent>}\r\n */\r\n\r\nclass DynWordpressPage extends React.PureComponent> {\r\n public _getpostNodes(): React.ReactNode | undefined {\r\n return (\r\n
\r\n {/*\r\n // WP REST API\r\n this.props.data.wpPost.result?.title.rendered\r\n // WP GRAPHQL\r\n this.props.data.wpPost.result?.title\r\n */}\r\n
\r\n \r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const dynWordpressPostProps: IDynWordpressPageViewProps = {\r\n ...this.props,\r\n postNodes: this._getpostNodes()\r\n };\r\n\r\n return this.props.renderView(dynWordpressPostProps);\r\n }\r\n}\r\n\r\nexport default DynWordpressPage;\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\n// import { HtmlHeadInclude } from '@msdyn365-commerce/core-internal';\r\nimport * as React from 'react';\r\nimport { IDynWordpressPageViewProps } from './dyn-wordpress-page';\r\n\r\n// First string is your URL\r\n// Second string can be head or body\r\n// Third parameter is true or false.\r\nexport const useScript = (url: string, position: string, async: boolean) => {\r\n React.useEffect(() => {\r\n const placement: Element | null = document.querySelector(position);\r\n const script: HTMLScriptElement = document.createElement('script');\r\n\r\n script.src = url;\r\n script.async = typeof async === 'undefined' ? false : async;\r\n\r\n placement?.appendChild(script);\r\n\r\n return () => {\r\n placement?.removeChild(script);\r\n };\r\n });\r\n};\r\n\r\nexport const useMetaLink = (rel: string, media: string, href: string) => {\r\n React.useEffect(() => {\r\n const placement: Element | null = document.querySelector('head');\r\n const link = document.createElement('link');\r\n\r\n link.setAttribute('rel', rel);\r\n link.setAttribute('media', media);\r\n link.setAttribute('href', href);\r\n\r\n placement?.appendChild(link);\r\n\r\n return () => {\r\n placement?.removeChild(link);\r\n };\r\n });\r\n};\r\n\r\nexport default (props: IDynWordpressPageViewProps) => {\r\n const { postNodes, data } = props;\r\n\r\n return (\r\n <>\r\n {data.wpPost.result?.post?.databaseId &&\r\n useMetaLink(\r\n 'stylesheet',\r\n 'all',\r\n `${props.config.blogUrl}/wp-content/uploads/elementor/css/post-${data.wpPost.result?.post?.databaseId}.css`\r\n )}\r\n {/* \r\n {data.wpPost.result?.post?.databaseId && (\r\n \r\n )}\r\n */}\r\n {postNodes}\r\n \r\n );\r\n};\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\n/* eslint-disable no-duplicate-imports */\r\nimport { IHistogramItemViewProps, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst RatingsHistogramView: React.FC = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps } = props;\r\n return (\r\n \r\n {heading}\r\n \r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n \r\n {props.starLabel}\r\n {props.bar}\r\n {props.percentage}\r\n \r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header';\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nconst headerView: React.FC = props => {\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderAccountBlock(props, false)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n {_renderCollapseMenu(props)}\n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\n const { Divider, MobileMenuLinksContainer, mobileMenuCollapsed } = props;\n return (\n \n \n {_renderReactFragment(props.search)}\n {_renderMobileAccountBlock(props, true)}\n {props.wishListIconMobile}\n {props.siteOptions}\n \n \n {_renderReactFragment(props.menuBar)}\n \n );\n}\n\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\n const customer = accountInformation && accountInformation.result;\n return <>{customer ? customer.FirstName || customer.Name : ''};\n};\n\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const { AccountInfoDropdownParentContainer, signOutLink, signInLink, data, accountLinks } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n 'ms-header__drawer',\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n\n if (accountLinks) {\n return (\n \n
\n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n
\n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n return null;\n}\n\nfunction _renderAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { BackToTop, getTelemetryObject, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBackTopFooterProps } from './back-top-footer.props.autogenerated';\n\n/**\n *\n * BackTopFooter component.\n * @extends {React.PureComponent>}\n */\nclass BackTopFooter extends React.PureComponent> {\n private readonly editProps: Msdyn365.ITextEditProps = {\n requestContext: this.props.context.request,\n onEdit: (event: Msdyn365.ContentEditableEvent) => (this.props.config.backtoTopText = event.target.value)\n };\n\n private readonly telemetryContent?: ITelemetryContent;\n\n constructor(props: IBackTopFooterProps<{}>) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element | null {\n if (!this.props.config.destination) {\n this.props.telemetry.error('BackToTop.destination has not been provided, module wont render.');\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default BackTopFooter;\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