{"version":3,"file":"static/js/25.45b07c95d8801a48330a.chunk.js","mappings":";oKAKYA,8CAAZ,SAAYA,GACRA,EAAA,+BACAA,EAAA,uBACAA,EAAA,sCACAA,EAAA,qCACAA,EAAA,yBACAA,EAAA,iCACAA,EAAA,6BACAA,EAAA,mCACAA,EAAA,0BATJ,CAAYA,IAAAA,EAAkB,KCQf,MAAeC,EAS1BC,YAAYC,EAA0CC,GAClDC,KAAKF,MAAQA,EACbE,KAAKD,QAAUA,EAOZ,kBACH,SAAUC,KAAKC,WAAY,CACHC,OAASC,gBAAkBH,KAAKI,qBAEpDJ,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,iFACfJ,OAASK,UAAUC,YAAYC,eAAeC,IAAIC,mBAAmBX,KAAKI,sBAE9F,MAAMQ,EAAUZ,KAAKa,aAIrB,OAHAb,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,0CAA0CM,OACzDV,OAASK,UAAUC,YAAYC,eAAeC,IAAII,mBAAmB,CAAEF,QAASA,IAAW,IAExG,EAEP,OAAO,wkBC7BJ,MAAMG,UAA0BnB,EAU3CC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GART,KAAAkB,YAAsB,EAS1BjB,KAAKkB,IAAMlB,KAAKF,MAAMqB,OAAOC,yBAC7BpB,KAAKqB,IAAMrB,KAAKF,MAAMqB,OAAOG,yBAE7BtB,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,UAAUS,EAAkBQ,2DAA2DvB,KAAKkB,eAAelB,KAAKqB,SAQjH,iBACH,MAAMG,QAAaxB,KAAKyB,WACxB,GAAID,EAAKE,QAEL,OADA1B,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUS,EAAkBQ,wDACxD,EAGXvB,KAAKiB,YAAcO,EAAKA,KAAKG,aAAe,EAE5C,IAAIC,GAAkB,EActB,OAbI5B,KAAKkB,IAEDU,EADA5B,KAAKqB,IACIrB,KAAKkB,KAAOlB,KAAKiB,aAAejB,KAAKiB,aAAejB,KAAKqB,IAEzDrB,KAAKkB,KAAOlB,KAAKiB,YAEvBjB,KAAKqB,MACZO,EAAS5B,KAAKiB,aAAejB,KAAKqB,KAGtCrB,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,UAAUS,EAAkBQ,6BAA6BK,oBAAyB5B,KAAKiB,iBAEpFW,EAOJxB,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmBuC,WAC1BF,eAAe,GAEnBE,WAAY,CACRH,MAAO/B,KAAKiB,YACZe,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAOgB,8BAAgCnC,KAAKF,MAAMqB,OAAOiB,wBAOvE,iBACJ,OAAOC,EAAAA,EAAAA,cAAarC,KAAKF,MAAMC,QAAQuC,qlBCvFhC,MAAMC,UAAiC3C,EAUlDC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GART,KAAAyC,cAAwB,EAS5BxC,KAAKkB,IAAMlB,KAAKF,MAAMqB,OAAOsB,4BAC7BzC,KAAKqB,IAAMrB,KAAKF,MAAMqB,OAAOuB,4BAE7B1C,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIiC,EAAyBhB,oEAAoEvB,KAAKkB,eAAelB,KAAKqB,SAQ3H,iBACH,MAAMG,QAAaxB,KAAKyB,WACxB,GAAID,EAAKE,QAEL,OADA1B,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUiC,EAAyBhB,wDAC/D,EAGXvB,KAAKwC,cAAgBhB,EAAKA,KAAKmB,YAAc,EAE7C,IAAIf,GAAkB,EActB,OAbI5B,KAAKkB,IAEDU,EADA5B,KAAKqB,IACIrB,KAAKkB,KAAOlB,KAAKwC,eAAiBxC,KAAKwC,eAAiBxC,KAAKqB,IAE7DrB,KAAKkB,KAAOlB,KAAKwC,cAEvBxC,KAAKqB,MACZO,EAAS5B,KAAKwC,eAAiBxC,KAAKqB,KAGxCrB,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIiC,EAAyBhB,6BAA6BK,iCAAsC5B,KAAKwC,mBAElGZ,EAOJxB,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmBiD,cAC1BZ,eAAe,GAEnBa,kBAAmB,CACfd,MAAO/B,KAAKwC,cACZR,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAO2B,iCAAmC9C,KAAKF,MAAMqB,OAAOiB,wBAO1E,iBACJ,OAAOC,EAAAA,EAAAA,cAAarC,KAAKF,MAAMC,QAAQuC,0lBCxFhC,MAAMS,UAAmCnD,EAAxDC,cAAA,oBACY,KAAAmD,QAAkB,GAMnB,iBACH,IAAIC,GAAU,EACd,MAAMzB,QAAaxB,KAAKyB,WACxB,GAAKD,EAAKE,QAsCN1B,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUyC,EAA2BxB,8BArCxE,GAAIC,EAAKA,KAAK0B,UAAW,CAAC,IAADC,EACrBnD,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIyC,EAA2BxB,wCAA2D,QAAvD4B,EAAoC3B,EAAKA,KAAK0B,iBAAS,IAAAC,OAAA,EAAnBA,EAAqBC,WAGhG,IAAK,IAAIC,EAAI,EAAGA,GAAuB,QAAtBC,EAAG9B,EAAKA,KAAK0B,iBAAS,IAAAI,OAAA,EAAnBA,EAAqBF,QAAQC,IAAK,CAAC,IAADC,EAClD,IAAI9B,EAAKA,KAAK0B,UAAUG,GAwBpB,MAvBA,GAAIrD,KAAKF,MAAMqB,OAAOoC,mCAAoC,CAAC,IAADC,EACtDxD,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIyC,EAA2BxB,iFAAqI,QAAjIiC,EAA6ExD,KAAKF,MAAMqB,OAAOoC,0CAAkC,IAAAC,OAAA,EAApDA,EAAsDJ,WAI1K,IAAK,IAAIK,EAAI,EAAGA,IAAyD,QAApDC,EAAA1D,KAAKF,MAAMqB,OAAOoC,0CAAkC,IAAAG,OAAA,EAApDA,EAAsDN,SAAU,GAAIK,IAAK,CAAC,IAADC,EAC1F,GACI1D,KAAKF,MAAMqB,OAAOoC,oCAClB/B,EAAKA,KAAK0B,UAAUG,GAAGM,QACvB3D,KAAKF,MAAMqB,OAAOoC,mCAAmCE,KAAOjC,EAAKA,KAAK0B,UAAUG,GAAGM,OACrF,CACE3D,KAAKgD,QAAUxB,EAAKA,KAAK0B,UAAUG,GAAGM,QAAU,GAChD3D,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIyC,EAA2BxB,oCAAoCC,EAAKA,KAAK0B,UAAUG,GAAGM,8EAE9FV,GAAU,EACV,eAUpBjD,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUyC,EAA2BxB,8CAOhF,OADAvB,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUyC,EAA2BxB,+BAA+B0B,OAChGA,EAOJ7C,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmBiE,gBAC1B5B,eAAe,GAEnB6B,oBAAqB,CACjB9B,MAAO/B,KAAKgD,QACZhB,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAO2C,uCAAyC9D,KAAKF,MAAMqB,OAAOiB,wBAOhF,iBACJ,OAAOC,EAAAA,EAAAA,cAAarC,KAAKF,MAAMC,QAAQuC,qlBC5FhC,MAAMyB,UAAyBnE,EAS1CC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GACbC,KAAKgE,MAAQhE,KAAKiE,QAAQjE,KAAKF,MAAMqB,OAAO+C,2BAC5ClE,KAAKmE,IAAMnE,KAAKiE,QAAQjE,KAAKF,MAAMqB,OAAOiD,yBAE1CpE,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIyD,EAAiBxC,qDAAqDvB,KAAKgE,iBAAiBhE,KAAKmE,SAQtG,iBACH,MAAME,EAAM,IAAIC,KAChBD,EAAIE,SAAS,EAAG,EAAG,EAAG,GAEtB,IAAI3C,GAAkB,EActB,OAbI5B,KAAKgE,MAEDpC,EADA5B,KAAKmE,IACInE,KAAKgE,MAAMQ,WAAaH,EAAIG,WAAaH,EAAIG,WAAaxE,KAAKmE,IAAIK,UAEnExE,KAAKgE,MAAMQ,WAAaH,EAAIG,UAElCxE,KAAKmE,MACZvC,EAASyC,EAAIG,WAAaxE,KAAKmE,IAAIK,WAGvCxE,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIyD,EAAiBxC,6BAA6BK,sCAA2CyC,OAE1FzC,EAOJxB,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmB8E,UAC1BzC,eAAe,GAEnB0C,kBAAmB,CACf3C,MAAO/B,KAAKgE,MAAQhE,KAAKgE,MAAMW,cAAgB,GAC/C3C,eAAe,GAEnB4C,gBAAiB,CACb7C,MAAO/B,KAAKmE,IAAMnE,KAAKmE,IAAIQ,cAAgB,GAC3C3C,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAO0D,6BAA+B7E,KAAKF,MAAMqB,OAAOiB,wBAQtE6B,QAAQa,GACZ,GAAIA,EAAM,CACN,MAAMC,EAAYD,EAAKE,MAAM,KAC7B,OAAO,IAAIV,MAAMS,EAAU,IAAKA,EAAU,GAAK,GAAIA,EAAU,2kBCzF1D,MAAME,UAAgCrF,EAK1C,iBACH,IAAIqD,GAAU,EACd,GAAIjD,KAAKF,MAAMqB,OAAO+D,gCAAiC,CAAC,IAAD1B,EACnDxD,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAI2E,EAAwB1D,2EAA4H,QAAxHiC,EAAuExD,KAAKF,MAAMqB,OAAO+D,uCAA+B,IAAA1B,OAAA,EAAjDA,EAAmDJ,YAG9J,IAAK,IAAIC,EAAI,EAAGA,IAAsD,QAAjDK,EAAA1D,KAAKF,MAAMqB,OAAO+D,uCAA+B,IAAAxB,OAAA,EAAjDA,EAAmDN,SAAU,GAAIC,IAAK,CAAC,IAADK,EACvF,MAAMyB,EAAkCnF,KAAKF,MAAMqB,OAAO+D,gCAAgC7B,GAAG+B,OAS7F,GAPApF,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,UAAU2E,EAAwB1D,4BAA4BrB,OAAOmF,SAASC,cAElFtF,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAI2E,EAAwB1D,uEAAuE4D,OAGnGjF,OAAOmF,SAASC,SAASC,QAAQJ,IAA4B,EAAG,CAChElC,GAAU,EACV,aAIRjD,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,UAAU2E,EAAwB1D,+DAK1C,OADAvB,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAU2E,EAAwB1D,+BAA+B0B,OAC7FA,EAOJ7C,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmB6F,iBAC1BxD,eAAe,GAEnByD,aAAc,CACV1D,MAAO7B,OAAOmF,SAASC,SACvBtD,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAOuE,oCAAsC1F,KAAKF,MAAMqB,OAAOiB,8lBChE1E,MAAMuD,UAAyB/F,EAW1CC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GAXT,KAAA6F,aAAuB,EACvB,KAAAC,WAAqB,mBAWzB7F,KAAK8F,QAAU9F,KAAKF,MAAMC,QAAQgG,QAAQD,QAC1C9F,KAAKgG,QAAU,IAAI1B,KAGnBtE,KAAKgG,QAAQC,QAAQjG,KAAKgG,QAAQxB,UAAY,SAC9CxE,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,qCAAqCvB,KAAKgG,aAExGhG,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,mCAAmCvB,KAAK8F,QAAQI,sBAC1GlG,KAAK8F,QAAQI,kBACblG,KAAK8F,QAAQK,mBAGjBnG,KAAKoG,sBAOF,iBACH,IAAIxE,GAAkB,EAOtB,OALI5B,KAAKF,MAAMqB,OAAOkF,6BAClBzE,EAAS5B,KAAK4F,cAAgB5F,KAAKF,MAAMqB,OAAOkF,4BAGpDrG,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,6BAA6BK,OACpFA,EAMJ0E,QACHtG,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,iDAC9DvB,KAAK8F,QAAQS,IAAYvG,KAAK6F,WAAY,EAAG,CACzCW,OAAQtG,OAAOuG,SAASC,SACxBC,KAAMzG,OAAOuG,SAASG,SACtBC,QAAS7G,KAAKgG,UAQf5F,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmBmH,WAC1B9E,eAAe,GAEnB+E,eAAgB,CACZhF,MAAO/B,KAAK4F,aACZ5D,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAO6F,6BAA+BhH,KAAKF,MAAMqB,OAAOiB,wBAMtEgE,sBACJpG,KAAK4F,aAAe5F,KAAK8F,QAAQmB,IAAYjH,KAAK6F,YAAY9D,OAAS,EAEvE/B,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,4CAA4CvB,KAAK4F,mBAC7G5F,KAAK4F,aACP5F,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUqF,EAAiBpE,2CAA2CvB,KAAK4F,iBAE9G5F,KAAK8F,QAAQS,IAAYvG,KAAK6F,WAAY7F,KAAK4F,aAAc,CACzDY,OAAQtG,OAAOuG,SAASC,SACxBC,KAAMzG,OAAOuG,SAASG,SACtBC,QAAS7G,KAAKgG,glBCpGX,MAAMkB,UAAqCtH,EAQtDC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GACbC,KAAKmH,oBAAyCnH,KAAKF,MAAMC,QAAQgG,QAASqB,iBAAmB,MAC7FpH,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAI4G,EAA6B3F,wCAAwCvB,KAAKmH,yBAQ/E,iBACH,MAAMvF,IAAkB5B,KAAKF,MAAMqB,OAAOkG,yCACpCrH,KAAKF,MAAMqB,OAAOkG,wCAAwCC,cAAc/B,QAAQvF,KAAKmH,oBAAoBG,gBAAkB,EAIjI,OADAtH,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAU4G,EAA6B3F,+BAA+BK,OAClGA,EAOJxB,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBuF,gBAAiB,CACbxF,MAAO/B,KAAKF,MAAMqB,OAAOkG,yCAA2C,GACpErF,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmB6H,eAC1BxF,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAOsG,yCAA2CzH,KAAKF,MAAMqB,OAAOiB,8lBC5D/E,MAAMsF,UAA4B9H,EAAjDC,cAAA,oBACY,KAAA8H,iBAA2B,GAM5B,iBACH,IAAI1E,GAAU,EACd,GAAIjD,KAAKF,MAAMqB,OAAOyG,4BAA6B,CAAC,IAADpE,EAC/CxD,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAIoH,EAAoBnG,uEAAoH,QAAhHiC,EAAmExD,KAAKF,MAAMqB,OAAOyG,mCAA2B,IAAApE,OAAA,EAA7CA,EAA+CJ,YAGlJ,IAAK,IAAIC,EAAI,EAAGA,IAAkD,QAA7CK,EAAA1D,KAAKF,MAAMqB,OAAOyG,mCAA2B,IAAAlE,OAAA,EAA7CA,EAA+CN,SAAU,GAAIC,IAAK,CAAC,IAADK,EACnF,MAAMmE,EAA8B7H,KAAKF,MAAMqB,OAAOyG,4BAA4BvE,GAAG+B,OAKrF,GAHApF,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,4BAA4BJ,OAAOuG,SAASqB,SAC/E9H,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,8DAA8DuH,MAE7F3H,OAAOuG,SAASqB,KAAKvC,QAAQsC,IAAwB,EAAG,CACxD7H,KAAK2H,iBAAmBE,EACxB5E,GAAU,EACV,aAIRjD,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUoH,EAAoBnG,0DAIrE,OADAvB,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAUoH,EAAoBnG,+BAA+B0B,OACzFA,EAOJ7C,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmBoI,aAC1B/F,eAAe,GAEnBgG,cAAe,CACXjG,MAAO/B,KAAK2H,iBACZ3F,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAO8G,gCAAkCjI,KAAKF,MAAMqB,OAAOiB,8lBC7DtE,MAAM8F,UAA0BtI,EAQ3CC,YAAYC,EAA0CC,GAClDiB,MAAMlB,EAAOC,GACTC,KAAKF,MAAMqB,OAAOgH,6BAA+BC,MAAMpI,KAAKF,MAAMqB,OAAOgH,8BACzEnI,KAAKqI,uBAAgF,IAAvDC,OAAOtI,KAAKF,MAAMqB,OAAOgH,4BACvDnI,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,UAAU4H,EAAkB3G,iCAAiCvB,KAAKqI,6BASvE,iBACH,MAAMzG,OAAkD2G,IAAhCvI,KAAKqI,uBAE7B,OADArI,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,UAAU4H,EAAkB3G,+BAA+BK,OACvFA,EAOJ,kBACH,SAAU5B,KAAKC,WAAY,CACHC,OAASC,gBAAkBH,KAAKI,qBAEpDJ,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAI4H,EAAkB3G,0FAENrB,OAASK,UAAUC,YAAYC,eAAeC,IAAIC,mBAAmBX,KAAKI,sBAC9F,MAAMQ,EAAUZ,KAAKa,aASrB,OAPAb,KAAKF,MAAMC,QAAQM,UAAUC,MACzB,IAAI4H,EAAkB3G,oDAAoDvB,KAAKqI,oDAAoDzH,OAEvI4H,YAAW,KACatI,OAASK,UAAUC,YAAYC,eAAeC,IAAII,mBAAmB,CAAEF,QAASA,IAAW,KAChHZ,KAAKqI,yBAED,EAEP,OAAO,EAQRjI,qBACH,MAAO,IACHyB,EAAAA,EAAA,GACO7B,KAAKD,SAAO,IACf+B,gBAAiB,CACbC,MAAO,OACPC,eAAe,GAEnBC,cAAe,CACXF,MAAOpC,EAAmB8I,WAC1BzG,eAAe,GAEnB0G,WAAY,CACR3G,MAAO/B,KAAKqI,uBAAyBrI,KAAKqI,uBAAyB,EACnErG,eAAe,KAUxBnB,aACH,OAAOb,KAAKF,MAAMqB,OAAOwH,4BAA8B3I,KAAKF,MAAMqB,OAAOiB,yBCtE1E,MAAMwG,EAAqC,CAC9C7E,EACA2D,EACAzC,EACAU,EACAuB,EACAnG,EACAwB,EACAQ,EACAmF,GCxBW,MAAMW,EAGjBhJ,YAAYC,GACRE,KAAKF,MAAQA,EACbE,KAAK8I,KAAOhJ,EAAMC,QAAQgG,QAAQ+C,KAM/B,YACH,IACI,MAAMC,EAAc/I,KAAKgJ,cACnBC,QAAgCjJ,KAAKkJ,gBAAgBH,GACvC7I,OAASC,gBAAkB,IACpC4I,EAGX/I,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,uCAAuC2I,OACrEA,IACDjJ,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,qEACfJ,OAASK,UAAUC,YAAYC,eAAeC,IAAIC,oBAAmB,IAAMoI,KAErG,MAAOI,GAGLnJ,KAAKF,MAAMO,UAAU+I,UAAUD,IAQ/BH,cAAW,IAAAK,EACf,MAAO,CACHC,KAAM,CACFvH,MAAO/B,KAAK8I,KAAKvH,KAAOvB,KAAK8I,KAAKvH,KAAO,GACzCS,eAAe,GAEnBuH,cAAe,CACXxH,MAAO/B,KAAK8I,KAAKU,sBAAwBxJ,KAAK8I,KAAKU,sBAAwB,GAC3ExH,eAAe,GAEnByH,MAAO,CACH1H,MAAO/B,KAAK8I,KAAKY,aAAe1J,KAAK8I,KAAKY,aAAe,GACzD1H,eAAe,GAEnB2H,MAAO,CACH5H,MAAO/B,KAAK8I,KAAKc,MAAQ5J,KAAK8I,KAAKc,MAAQ,QAC3C5H,eAAe,GAEnB6H,eAAgB,CACZ9H,MAAO7B,OAAOuG,SAASqB,KACvB9F,eAAe,GAEnB8H,6BAA8B,CAC1B/H,MAAO/B,KAAKF,MAAMC,QAAQgG,QAAQgE,YAAYC,IAC9ChI,eAAe,GAEnBiI,iBAAkB,CACdlI,MAAO/B,KAAKF,MAAMC,QAAQgG,QAAQgE,YAAYG,QAC9ClI,eAAe,GAEnBmI,yBACqE5B,KAA/B,QAAlCc,EAAArJ,KAAKF,MAAMC,QAAQgG,QAAQqE,eAAO,IAAAf,OAAA,EAAlCA,EAAoCgB,+BAC9B9B,EACA,CACIxG,MAAO/B,KAAKF,MAAMC,QAAQgG,QAAQqE,QAAQC,yBAC1CrI,eAAe,IAU7B,sBAAsB+G,GAC1B,IAAIuB,GAAgB,EACpB,MAAMC,EAAgCvK,KAAKF,MAAMqB,OAAOoJ,qBAGxD,GADAvK,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,uCAAuCiK,OACtEA,EACA,IAAK,IAAIlH,EAAI,EAAGA,EAAIuF,EAAkBxF,OAAQC,IAAK,CAC/C,MAAMmH,EAAY,IAAI5B,EAAkBvF,GAAGrD,KAAKF,MAAOiJ,GAEvD,SAAUyB,EAAUC,YAAa,CAC7BzK,KAAKF,MAAMC,QAAQM,UAAUC,MAAM,oCAAoCkK,EAAU3K,YAAY0B,UAC7F+I,GAAgB,EAChB,OAIZ,OAAOA,GCxFA,MAAMI,UAAgCC,EAAAA,cACjD9K,YAAYC,GACRkB,MAAMlB,IAEF8K,EAAAA,EAAAA,IAAa5K,KAAKF,MAAMC,QAAQgG,UAIhC8E,EAAAA,GAAiBC,WAA+B,oBAAX5K,SACrCA,OAAO6K,iBAAiB,aAAcC,IAElChL,KAAKF,MAAMO,UAAU4K,MAAM,YAAaD,MAG5C9K,OAAO6K,iBAAiB,aAAa,KACd,IAAIlC,EAAK7I,KAAKF,OAC5BoL,MAAMC,OAAMhC,IACbnJ,KAAKF,MAAMO,UAAU4K,MAAM9B,UAMpCiC,qBAEAC,SACH,OAAIT,EAAAA,EAAAA,IAAa5K,KAAKF,MAAMC,QAAQgG,SACzB,KAGJ/F,KAAKF,MAAMwL,WAAWtL,KAAKF,wECtC1C,MAoCA,EAAgBA,IACZ,MAAMyL,EArCWzL,CAAAA,IACjB,MAAMyL,EAAkB,CACpB,cAAezL,EAAMqB,OAAOqK,WAAa1L,EAAMC,QAAQ0L,IAAItK,OAAOuK,iCAClE,cAAe5L,EAAMqB,OAAOwK,WAAa7L,EAAMC,QAAQ0L,IAAItK,OAAOyK,iCAClE,eAAgB9L,EAAMqB,OAAO0K,YAAc/L,EAAMC,QAAQ0L,IAAItK,OAAO2K,mCA6BxE,YA3BwCvD,IAApCzI,EAAMqB,OAAO4K,mBACbR,EAAK,yBAA2BzL,EAAMqB,OAAO4K,mBACtCjM,EAAMC,QAAQ0L,IAAItK,OAAO6K,4CAChCT,EAAK,yBAA2BzL,EAAMC,QAAQ0L,IAAItK,OAAO6K,2CAEzDlM,EAAMqB,OAAO8K,kBACbV,EAAK,uBAAyBzL,EAAMqB,OAAO8K,kBACpCnM,EAAMC,QAAQ0L,IAAItK,OAAO+K,2CAChCX,EAAK,uBAAyBzL,EAAMC,QAAQ0L,IAAItK,OAAO+K,0CAEvDpM,EAAMqB,OAAOgL,uBACbZ,EAAK,6BAA+BzL,EAAMqB,OAAOgL,uBAC1CrM,EAAMC,QAAQ0L,IAAItK,OAAOiL,gDAChCb,EAAK,6BAA+BzL,EAAMC,QAAQ0L,IAAItK,OAAOiL,+CAE7DtM,EAAMqB,OAAOkL,sBACbd,EAAK,2BAA6BzL,EAAMqB,OAAOkL,qBAE/CvM,EAAMqB,OAAOmL,mBACbf,EAAK,uBAAyBzL,EAAMqB,OAAOmL,kBAE3CxM,EAAMqB,OAAOoL,wBACbhB,EAAK,4BAA8BzL,EAAMqB,OAAOoL,4BAELhE,IAA3CzI,EAAMqB,OAAOqL,4BACbjB,EAAK,gCAAkCzL,EAAMqB,OAAOqL,2BAEjDjB,GAIiBkB,CAAY3M,GAgBpC,OAXA6K,EAAAA,WAAgB,KAAK,IAAA+B,EAAAC,EACjB,MAAMC,EAAiB,QAAXF,EAAGrH,gBAAQ,IAAAqH,OAAA,EAARA,EAAUG,cAAc,UACvCD,EAAOE,KAAO,kBACdF,EAAOG,IAAMjN,EAAMqB,OAAO4L,KAAOjN,EAAMC,QAAQ0L,IAAItK,OAAO6L,2BAC1DJ,EAAOK,GAAK,iCACZC,OAAOC,KAAK5B,GAAM6B,SAAQC,IACtBT,EAAOU,aAAaD,EAAG9B,EAAK8B,OAExB,QAARV,EAAAtH,gBAAQ,IAAAsH,GAAM,QAANA,EAARA,EAAUY,YAAI,IAAAZ,GAAdA,EAAgBa,YAAYZ,KAC7B,IAEI","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/helpers/constants.ts?f7d4","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/proactive-chat-trigger.ts?abbc","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-amount-trigger.ts?2618","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?f906","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?3777","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/date-range-trigger.ts?9e10","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/from-specific-page-trigger.ts?519b","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/page-visit-trigger.ts?0f25","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-country-region-trigger.ts?9736","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/specific-page-trigger.ts?1b0d","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/triggers/wait-on-time-trigger.ts?6968","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/proactive/index.ts?8d6b","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/helpers/chat.ts?5bd6","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/msdyn365-cs-chat-connector.tsx?5279","webpack://Msdyn365.Commerce.Online/./src/modules/msdyn365-cs-chat-connector/msdyn365-cs-chat-connector.view.tsx?5c92"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n CartAmount = 'Cart Total Amount',\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n NumberOfItems = 'Cart Number of Items',\n PageVisits = 'Page Visits',\n SpecificMarket = 'Specific Market',\n SpecificPage = 'Specific Page',\n SpecificProduct = 'Specific Product',\n WaitOnTime = 'Wait on Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IProactiveChatTrigger, IWindow } from '../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\n\n/**\n * ProactiveChatTrigger class.\n * Checks if proactive chat should be triggered, starts the chat and sets context.\n */\nexport default abstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IMsdyn365CsChatConnectorViewProps;\n public context: IChatContext;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Triggers the proactive chat if proactive chat validation passes.\n * @returns {Promise} True if proactive chat is triggered.\n */\n public async startChat(): Promise {\n if (await this.validate()) {\n ((window)).contextProvider = this.getContextProvider();\n\n this.props.context.telemetry.debug('Chat widget \"lcw:ready\" event listener has been triggered for proactive chat.');\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(this.getContextProvider());\n\n const message = this.getMessage();\n this.props.context.telemetry.debug(`Starting proactive chat with message: '${message}'.`);\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.startProactiveChat({ message: message }, false);\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} Chat context.\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if proactive chat is triggered.\n * @returns {string} Chat welcome message.\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if proactive chat should be initiated.\n * @returns {Promise} True if proactive chat should be triggered.\n */\n public abstract validate(): Promise;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartAmountContext, IChatContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class.\n * Proactive chat is triggered if cart amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax).\n */\nexport default class CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the total amount in the cart should be within the min and max values.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n\n let retVal: boolean = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else if (this.max) {\n retVal = this.totalInCart <= this.max;\n }\n\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartAmountContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.CartAmount,\n isDisplayable: true\n },\n CartAmount: {\n value: this.totalInCart,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartNumberOfItemsContext, IChatContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class.\n * Proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax).\n */\nexport default class CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n /**\n * Validates whether the conditions are met to trigger proactive chat: the number of items in the cart should be within the min and max values.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal: boolean = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else if (this.max) {\n retVal = this.numberOfItems <= this.max;\n }\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartNumberOfItemsContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.NumberOfItems,\n isDisplayable: true\n },\n CartNumberOfItems: {\n value: this.numberOfItems,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise} The cart.\n */\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { ICartSpecificProductContext, TContextProvider } from '../../../interfaces';\nimport { ProactiveChatNames } from '../../helpers';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class.\n * Proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList).\n */\nexport default class CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the cart contains the specified product to trigger proactice chat.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.product = cart.cart.CartLines[i].ItemId || '';\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ICartSpecificProductContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificProduct,\n isDisplayable: true\n },\n CartSpecificProduct: {\n value: this.product,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Gets the cart.\n * @returns {Promise} The cart.\n */\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IChatContext, IDateRangeContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class.\n * Proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd).\n */\nexport default class DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current time is within the start and end time.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal: boolean = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IDateRangeContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.DateRange,\n isDisplayable: true\n },\n ProactiveFromDate: {\n value: this.start ? this.start.toUTCString() : '',\n isDisplayable: true\n },\n ProactiveToDate: {\n value: this.end ? this.end.toUTCString() : '',\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date.\n * @param {string} [date] The date to convert (mm/dd/yyyy).\n * @returns {Date | undefined} The date or undefined.\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IFromSpecificPageTriggerContext, TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class.\n * Proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList).\n */\nexport default class FromSpecificPageTrigger extends ProactiveChatTrigger {\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: the user has come from a specific page.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IFromSpecificPageTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.FromSpecificPage,\n isDisplayable: true\n },\n CameFromPage: {\n value: window.document.referrer,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IChatContext, IPageVisitContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class.\n * Proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times.\n */\nexport default class PageVisitTrigger extends ProactiveChatTrigger {\n private visitCounter: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current page count is great than or equal to threshold.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visitCounter >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Resets the page visit counter cookie to zero.\n */\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IPageVisitContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.PageVisits,\n isDisplayable: true\n },\n NumberOfVisits: {\n value: this.visitCounter,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Increments the page visit counter by one.\n */\n private _updateVisitCounter(): void {\n this.visitCounter = this.cookies.get(this.cookieName).value || 0;\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visitCounter}.`);\n ++this.visitCounter;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visitCounter}.`);\n\n this.cookies.set(this.cookieName, this.visitCounter, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, ISpecificLocationTriggerContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class.\n * Proactive chat is triggered if user geographically belongs to the list of country codes: (config.proactiveOnSpecificCountryRegionCountry).\n */\nexport default class SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: user geographically belongs to the list of country codes.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificCountryRegionCountry\n ? this.props.config.proactiveOnSpecificCountryRegionCountry.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} Chat context.\n */\n public getContextProvider(): TContextProvider {\n return (): ISpecificLocationTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n CustCountryCode: {\n value: this.props.config.proactiveOnSpecificCountryRegionCountry || '',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificMarket,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Generates chat welcome message to be used if proactive chat is triggered.\n * @returns {string} Chat welcome message.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { ISpecificPageTriggerContext, TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class.\n * Proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList.\n */\nexport default class SpecificPageTrigger extends ProactiveChatTrigger {\n private specificPageName: string = '';\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: current page is listed in the proactive chat list of pages.\n * @returns {Promise} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n this.specificPageName = specificPageTrimmed;\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): ISpecificPageTriggerContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.SpecificPage,\n isDisplayable: true\n },\n ProactivePage: {\n value: this.specificPageName,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/constants';\nimport { IWindow } from '../../interfaces';\nimport { IChatContext, IWaitOnTimeContext, TContextProvider } from '../../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../../msdyn365-cs-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger class.\n * Proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds.\n */\nexport default class WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n /**\n * Class constructor.\n * @param {IMsdyn365CsChatConnectorViewProps} props The chat connector view properties.\n * @param {IChatContext} context The context.\n */\n constructor(props: IMsdyn365CsChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n /**\n * Validates whether the condition(s) is met to trigger proactive chat: user stays on page longer than the specific time.\n * @returns {IContextProvider} True if condition is met. Otherwise, false.\n */\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n /**\n * Starts the chat by configuring the LiveChatWidget SDK code.\n * @returns {Promise} True when the chat has started. Otherwise, false.\n */\n public async startChat(): Promise {\n if (await this.validate()) {\n ((window)).contextProvider = this.getContextProvider();\n\n this.props.context.telemetry.debug(\n `[${WaitOnTimeTrigger.name}] Chat widget \"lcw:ready\" event listener has been triggered within proactive chat.`\n );\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(this.getContextProvider());\n const message = this.getMessage();\n\n this.props.context.telemetry.debug(\n `[${WaitOnTimeTrigger.name}] Starting wait on-time proactive chat with '${this.waitTimeInMilliseconds}' (ms) delay and message: '${message}'.`\n );\n setTimeout(() => {\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.startProactiveChat({ message: message }, false);\n }, this.waitTimeInMilliseconds);\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Gets the context.\n * @returns {TContextProvider} The context.\n */\n public getContextProvider(): TContextProvider {\n return (): IWaitOnTimeContext => {\n return {\n ...this.context,\n IsProactiveChat: {\n value: 'True',\n isDisplayable: true\n },\n ProactiveType: {\n value: ProactiveChatNames.WaitOnTime,\n isDisplayable: true\n },\n TimeOnPage: {\n value: this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0,\n isDisplayable: true\n }\n };\n };\n }\n\n /**\n * Gets the message to be displayed when proactive chat is triggered.\n * @returns {string} The message to be displayed when proactive chat is triggered.\n */\n public getMessage(): string {\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visit-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-country-region-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of proactive chat validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited).\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { IWindow } from '../interfaces';\nimport { IChatContext } from '../../interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from '../msdyn365-cs-chat-connector';\nimport { ProactiveTriggers } from '../proactive';\n\n/**\n * Chat class - generates chat context, and checks for proactive triggers, starts the chat.\n */\nexport default class Chat {\n public props: IMsdyn365CsChatConnectorViewProps;\n private user: IRequestContextUser;\n constructor(props: IMsdyn365CsChatConnectorViewProps) {\n this.props = props;\n this.user = props.context.request.user;\n }\n\n /**\n * Generates chat context, and checks for proactive triggers, starts the chat.\n */\n public async run(): Promise {\n try {\n const chatContext = this._getContext();\n const chatHasStarted: boolean = await this._proactiveCheck(chatContext);\n ((window)).contextProvider = () => {\n return chatContext;\n };\n\n this.props.context.telemetry.debug(`[Chat] Proactive chat was started: '${chatHasStarted}'.`);\n if (!chatHasStarted) {\n this.props.context.telemetry.debug('[Chat] Chat widget \"lcw:ready\" event listener has been triggered.');\n ((window)).Microsoft.Omnichannel.LiveChatWidget.SDK.setContextProvider(() => chatContext);\n }\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e as Error);\n }\n }\n\n /**\n * Generates default chat context.\n * @returns {IChatContext} The chat context.\n */\n private _getContext(): IChatContext {\n return {\n Name: {\n value: this.user.name ? this.user.name : '',\n isDisplayable: true\n },\n AccountNumber: {\n value: this.user.customerAccountNumber ? this.user.customerAccountNumber : '',\n isDisplayable: true\n },\n Email: {\n value: this.user.emailAddress ? this.user.emailAddress : '',\n isDisplayable: true\n },\n IsB2b: {\n value: this.user.isB2b ? this.user.isB2b : 'false',\n isDisplayable: true\n },\n CurrentPageURL: {\n value: window.location.href,\n isDisplayable: true\n },\n eCommerceOperatingUnitNumber: {\n value: this.props.context.request.apiSettings.oun,\n isDisplayable: false\n },\n eCommerceBaseUrl: {\n value: this.props.context.request.apiSettings.baseUrl,\n isDisplayable: false\n },\n eCommerceDataAreaId:\n this.props.context.request.channel?.InventLocationDataAreaId === undefined\n ? undefined\n : {\n value: this.props.context.request.channel.InventLocationDataAreaId,\n isDisplayable: false\n }\n };\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized.\n * @param {IChatContext} chatContext The chat context.\n * @returns {Promise} The result of whether the chat has started.\n */\n private async _proactiveCheck(chatContext: IChatContext): Promise {\n let isChatStarted = false;\n const proactiveChatEnabled: boolean = this.props.config.proactiveChatEnabled;\n\n this.props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${proactiveChatEnabled}'.`);\n if (proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, chatContext);\n // Only first detected proactive trigger gets executed\n if (await proactive.startChat()) {\n this.props.context.telemetry.debug(`[Chat] Proactive chat detected: '${proactive.constructor.name}'.`);\n isChatStarted = true;\n break;\n }\n }\n }\n return isChatStarted;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { msdyn365Commerce, isOboRequest } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport Chat from './helpers/chat';\nimport { IMsdyn365CsChatConnectorData } from './interfaces';\nimport { IMsdyn365CsChatConnectorProps } from './msdyn365-cs-chat-connector.props.autogenerated';\n\n/**\n * Provides options for chat connector view.\n */\nexport interface IMsdyn365CsChatConnectorViewProps extends IMsdyn365CsChatConnectorProps {\n // Do nothing. Keeps lint happy.\n}\n\n/**\n * Msdyn365CsChatConnector component.\n * @augments {React.PureComponent>}\n */\nexport default class Msdyn365CsChatConnector extends React.PureComponent> {\n constructor(props: IMsdyn365CsChatConnectorProps) {\n super(props);\n\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n if (msdyn365Commerce.isBrowser && typeof window !== 'undefined') {\n window.addEventListener('lcw:error', (errorEvent: object) => {\n // Handle LiveChat SDK error event\n this.props.telemetry.error('lcw:error', errorEvent);\n });\n\n window.addEventListener('lcw:ready', () => {\n const chat: Chat = new Chat(this.props);\n chat.run().catch(e => {\n this.props.telemetry.error(e);\n });\n });\n }\n }\n\n public componentDidMount(): void {}\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\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 { IChatData } from './interfaces';\nimport { IMsdyn365CsChatConnectorViewProps } from './msdyn365-cs-chat-connector';\n\n/**\n * Returns data parameters for Omnichannel chat script.\n * @param {IMsdyn365CsChatConnectorViewProps} props The properties.\n * @returns {IChatData} Chat data.\n */\nconst getChatData = (props: IMsdyn365CsChatConnectorViewProps): IChatData => {\n const data: IChatData = {\n 'data-app-id': props.config.dataAppId || props.context.app.config.msDyn365CsChatConnectorDataAppId,\n 'data-org-id': props.config.dataOrgId || props.context.app.config.msDyn365CsChatConnectorDataOrgId,\n 'data-org-url': props.config.dataOrgUrl || props.context.app.config.msDyn365CsChatConnectorDataOrgUrl\n };\n if (props.config.dataHideChatButton !== undefined) {\n data['data-hide-chat-button'] = props.config.dataHideChatButton;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataHideChatButton) {\n data['data-hide-chat-button'] = props.context.app.config.msDyn365CsChatConnectorDataHideChatButton;\n }\n if (props.config.dataColorOverride) {\n data['data-color-override'] = props.config.dataColorOverride;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataColorOverride) {\n data['data-color-override'] = props.context.app.config.msDyn365CsChatConnectorDataColorOverride;\n }\n if (props.config.dataFontFamilyOverride) {\n data['data-font-family-override'] = props.config.dataFontFamilyOverride;\n } else if (props.context.app.config.msDyn365CsChatConnectorDataFontFamilyOverride) {\n data['data-font-family-override'] = props.context.app.config.msDyn365CsChatConnectorDataFontFamilyOverride;\n }\n if (props.config.dataEnableTelemetry) {\n data['data-disable-telemetry'] = !props.config.dataEnableTelemetry;\n }\n if (props.config.dataOpenInWindow) {\n data['data-open-in-window'] = props.config.dataOpenInWindow;\n }\n if (props.config.dataEnableLcwAutofill) {\n data['data-enable-lcw-autofill'] = props.config.dataEnableLcwAutofill;\n }\n if (props.config.dataSuggestedActionLayout !== undefined) {\n data['data-suggested-action-layout'] = props.config.dataSuggestedActionLayout;\n }\n return data;\n};\n\nexport default (props: IMsdyn365CsChatConnectorViewProps) => {\n const data: IChatData = getChatData(props);\n\n // we cannot use server rendering here, because OCCS fires 'lcw:ready' event ASAP when initialized\n // and by the time when execution comes to Msdyn365CsChatConnector, that event is already fired\n // thus, we can only add OCCS script to DOM on client side to control execution flow.\n React.useEffect(() => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.src = props.config.src || props.context.app.config.msDyn365CsChatConnectorSrc;\n script.id = 'Microsoft_Omnichannel_LCWidget';\n Object.keys(data).forEach(k => {\n script.setAttribute(k, data[k]);\n });\n document?.body?.appendChild(script);\n }, []);\n\n return null;\n};\n"],"names":["ProactiveChatNames","ProactiveChatTrigger","constructor","props","context","this","validate","window","contextProvider","getContextProvider","telemetry","debug","Microsoft","Omnichannel","LiveChatWidget","SDK","setContextProvider","message","getMessage","startProactiveChat","CartAmountTrigger","super","totalInCart","min","config","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","name","cart","_getCart","isEmpty","TotalAmount","retVal","_objectSpread","IsProactiveChat","value","isDisplayable","ProactiveType","CartAmount","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","NumberOfItems","CartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","length","i","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","SpecificProduct","CartSpecificProduct","proactiveOnCartSpecificProductMessage","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","ProactiveFromDate","toUTCString","ProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","document","referrer","indexOf","FromSpecificPage","CameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visitCounter","cookieName","cookies","request","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","location","hostname","path","pathname","expires","PageVisits","NumberOfVisits","proactiveOnPageVisitMessage","get","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificCountryRegionCountry","toLowerCase","CustCountryCode","SpecificMarket","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","specificPageName","proactiveOnSpecificPageList","specificPageTrimmed","href","SpecificPage","ProactivePage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","undefined","setTimeout","WaitOnTime","TimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","Chat","user","chatContext","_getContext","chatHasStarted","_proactiveCheck","e","exception","_this$props$context$r","Name","AccountNumber","customerAccountNumber","Email","emailAddress","IsB2b","isB2b","CurrentPageURL","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","isChatStarted","proactiveChatEnabled","proactive","startChat","Msdyn365CsChatConnector","React","isOboRequest","msdyn365Commerce","isBrowser","addEventListener","errorEvent","error","run","catch","componentDidMount","render","renderView","data","dataAppId","app","msDyn365CsChatConnectorDataAppId","dataOrgId","msDyn365CsChatConnectorDataOrgId","dataOrgUrl","msDyn365CsChatConnectorDataOrgUrl","dataHideChatButton","msDyn365CsChatConnectorDataHideChatButton","dataColorOverride","msDyn365CsChatConnectorDataColorOverride","dataFontFamilyOverride","msDyn365CsChatConnectorDataFontFamilyOverride","dataEnableTelemetry","dataOpenInWindow","dataEnableLcwAutofill","dataSuggestedActionLayout","getChatData","_document","_document2","script","createElement","type","src","msDyn365CsChatConnectorSrc","id","Object","keys","forEach","k","setAttribute","body","appendChild"],"sourceRoot":""}