{"version":3,"file":"static/js/89e01f43db5cc7cfa8bd.bundle.js","mappings":"0KASkBA,EAKAC,EAKAC,E,0FCTXC,eAAeC,EAClBC,EACAC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAc,IAAIC,EAAAA,sCAAsCN,EAAWC,EAAWG,GAEpF,OAAOG,EAAAA,EAAAA,qCAAoCF,EAAaH,GACnDM,MAAKC,GACEA,EACOC,QAAQC,IAAIF,EAAeG,KAAIC,GAAiBC,EAA0BD,EAAeV,MAAiBK,MAC7GO,GACWA,EAAMC,QAAOC,GAAQA,EAAK,KAAIL,KAAIK,GAAQA,EAAK,OAK3D,KAEVC,OAAMC,IACHjB,EAAckB,UAAUC,UAAUF,GAClCjB,EAAckB,UAAUE,MAAM,sDACvB,MAIZxB,eAAeyB,EAClBd,EACAP,EACAC,GAEA,OAAOO,QAAQC,IAAIF,EAAeG,KAAIC,GAAiBC,EAA0BD,EAAeV,MAC3FK,MAAKO,GACKA,EAAMC,QAAOC,GAAQA,EAAK,KAAIL,KAAIK,GAAQA,EAAK,OAEzDC,OAAMC,IACHjB,EAAckB,UAAUC,UAAUF,GAClCjB,EAAckB,UAAUE,MAAM,qCACvB,MAKnBxB,eAAegB,EAA0BD,EAA8BV,GACnE,MAAMqB,EAAY,CACdC,IAAKZ,EAAca,KAAO,GAC1BC,QAASd,EAAce,SAAW,IAGtC,MAAsB,KAAlBJ,EAAUC,IACH,CAACD,GAAW,GAGhB,IAAId,SAA+BmB,IACtC,IACI,MAAMC,EAAO,IAAIC,eACjBD,EAAKE,KAAK,OAAQR,EAAUC,KAAK,GAEjCK,EAAKG,iBAAiB,QAAQ,KAC1BJ,EAAQ,CAACL,EAA2B,MAAhBM,EAAKI,QAAkC,MAAhBJ,EAAKI,YAGpDJ,EAAKG,iBAAiB,SAAS,KAC3BJ,EAAQ,CAACL,GAAW,OAGxBM,EAAKK,OACP,SACEN,EAAQ,CAACL,GAAW,Q,skBDvEhC,SAAkB7B,GACdA,EAAAA,YAAAA,cACAA,EAAAA,UAAAA,YAFJ,CAAkBA,IAAAA,EAAW,KAK7B,SAAkBC,GACdA,EAAAA,OAAAA,SACAA,EAAAA,UAAAA,YAFJ,CAAkBA,IAAAA,EAAS,KAK3B,SAAkBC,GACdA,EAAAA,SAAAA,WACAA,EAAAA,WAAAA,aAFJ,CAAkBA,IAAAA,EAAqB,KEkEvC,MAAMuC,UAAqBC,EAAAA,UAyBvBC,YAAmBC,GAAoD,UACnEC,MAAMD,GAAM,OAzBC,KAAAE,kBAAiD,IAAIC,IAErD,KAAAC,4BAA8C,CAC3DC,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,YAAaC,EAAG,EAAGC,EAAG,IAEnCI,UAAU,EACVC,iBAAiB,GAGJ,KAAAC,8BAAgD,CAC7DV,UAAW,CACPC,GAAI,CAAEC,EAAG,YAAaC,EAAG,IAAKC,EAAG,GACjCG,GAAI,CAAEL,EAAG,YAAaC,EAAG,IAAKC,EAAG,IAErCI,UAAU,EACVC,iBAAiB,GAsKJ,KAAAE,UAAY,KACzBC,KAAKC,SAAS,CAAEC,WAAW,KAGd,KAAAC,SAAW,KACxBH,KAAKC,SAAS,CAAEC,WAAW,KAMd,KAAAE,KAAO,KAEpB,IADAC,EAAAA,EAAAA,8BAC0BC,IAAtBN,KAAKO,aACL,OAGJ,MAAMC,EAAYR,KAAKO,aAAe,EAAIP,KAAKS,MAAMC,YAAc,EACnEV,KAAKW,UAAUH,GAEfR,KAAKY,uBAMQ,KAAAC,SAAW,MACxBR,EAAAA,EAAAA,yBACA,MAAMS,EAASd,KAAKS,MAAMM,kBACpBP,EAAYR,KAAKgB,cAAiBF,EAASA,EAAOG,OAAS,EAAI,EAAKjB,KAAKS,MAAMC,YAAc,EACnGV,KAAKW,UAAUH,GACfR,KAAKY,uBAGQ,KAAAD,UAAaO,IAC1BlB,KAAKC,SAAS,CAAES,YAAaQ,KAwHhB,KAAAC,iBAAmB,SAChCC,EACAzE,EACAuE,GAAa,IACbG,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAA0B,OAE1BxC,EAAAA,cAACyC,EAAAA,GAAK,eACFC,eAAgB,EAAKxC,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,0BACNL,EAAK,CACTM,aAAc,EAAK3C,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,EACfiF,oBAAoB,UACpBC,GAAI,GAAG,EAAK9C,MAAM8C,sBAAsBX,IACxCY,sBAAuBT,MAId,KAAAU,kBAAoB,CACjCX,EACAzE,EACAuE,EACAc,KAOO,CACHC,4BAA6B,CACzBC,IAAK,KACLT,UARQU,GAAAA,CACZ,mCACAH,IAAwBd,EAAQ,0CAA4C,IAOxEkB,KAAM,MACNC,SAAU,EACVC,IAAKpB,EACL,aAAcE,EAAMjD,QACpB,gBAAiB6D,IAAwBd,EACzCqB,QAASvC,KAAKwC,0BAA0BtB,GACxCuB,UAAWzC,KAAK0C,4BAA4BxB,IAEhDyB,QACI9D,EAAAA,cAACyC,EAAAA,GAAK,eACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,+BACNL,EAAK,CACTM,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,EACfiF,oBAAoB,eAWnB,KAAAgB,YAAe1B,GAAmB2B,IAC/C7C,KAAKf,kBAAkB6D,IAAI5B,EAAO2B,IAGrB,KAAAH,4BAA+BxB,GACpC6B,IACAA,EAAMC,QAAUC,EAAAA,SAASC,OAASH,EAAMC,QAAUC,EAAAA,SAASE,QAC3DJ,EAAMK,iBAENpD,KAAKW,UAAUO,KAKV,KAAAsB,0BAA6BtB,GAClC6B,IACJA,EAAMK,iBAENpD,KAAKW,UAAUO,IA4NN,KAAAF,YAAc,IAAiC,IAA3BhB,KAAKS,MAAMC,YAE/B,KAAAH,WAAa,KAC1B,MAAMO,EAASd,KAAKS,MAAMM,kBAC1B,OAAOD,GAAUd,KAAKS,MAAMC,cAAgBI,EAAOG,OAAS,GAG/C,KAAAoC,gBAAkB,KAC/BrD,KAAKsD,gBAwBQ,KAAAC,iBAAoBC,IACjC,MACIC,MACIC,SAAWC,OAAQD,IACtB,UACDE,GACA5D,KAAKjB,MACT,IAAIgC,EAAoBf,KAAKS,MAAMM,kBAKnC,IAHKA,GAAqB2C,IACtB3C,EAAoB,CAACf,KAAK6D,uBAAuBH,KAEjD1D,KAAKS,MAAMqD,YAAa,CACxB,MAAMC,EAAgB,CAClB7B,IAAK8B,EAAAA,SACLvC,UAAW,6BACXwC,MACIlD,GACAA,EAAkB3D,KAAI,CAAC8G,EAAkBhD,IACrClB,KAAKmE,6BAA6BX,EAAUU,EAAMlE,KAAKoE,qBAAsBlD,GAAO,KAE5FR,YAAaV,KAAKS,MAAMC,YACxBN,KAAMJ,KAAKI,KACXS,SAAUb,KAAKa,SACfwD,UAAU,EACVC,kBAAmBV,EAAUW,8BAC7BC,kBAAmBZ,EAAUa,0BAC7BC,yBAA0B1E,KAAKW,UAC/BgE,uBAAuB,EACvBC,eAAe,EACfC,UAAU,EACVC,eAAgB9E,KAAKG,SACrB4E,gBAAiB/E,KAAKD,UACtBiF,wBAAyBhF,KAAKS,MAAMwE,qBAGlCC,EAAWrG,EAAAA,cAACmF,EAAAA,SAAQ,iBAAKD,IAEzBoB,EAAyC,CAC3CrB,YAAa9D,KAAKS,MAAMqD,YACxBsB,SAAUpF,KAAKsD,aACf+B,gBAAiBH,EACjBI,WAAYnD,GAAAA,CAAW,0BAA2B,6BAEtD,OAAOoD,EAAAA,EAAAA,eAAcJ,GAEzB,OAAOtG,EAAAA,cAAAA,MAAAA,OAjrBPmB,KAAKsD,aAAetD,KAAKsD,aAAakC,KAAKxF,MAC3CA,KAAKS,MAAQ,CAAEC,YAAa,EAAGR,WAAW,EAAOuF,eAAe,EAAO3B,aAAa,GAEpF9D,KAAKoE,qBACoE,QADhD,EACW,QADX,EACrBrF,EAAM2G,OAAOC,2BAAmB,QAAI5G,EAAM2G,OAAOE,4BAAoB,QAAI5F,KAAKb,4BAElFa,KAAK6F,iBAAmB7F,KAAK6F,iBAAiBL,KAAKxF,MACnDA,KAAK8F,wBAA0B9F,KAAK8F,wBAAwBN,KAAKxF,MACjEA,KAAK+F,oBAAsB/F,KAAK+F,oBAAoBP,KAAKxF,MACzDA,KAAKgG,2BAA6BhG,KAAKgG,2BAA2BR,KAAKxF,MACvEA,KAAKiG,yBAA2BjG,KAAKiG,yBAAyBT,KAAKxF,MAGhEkG,WAEH,MAAgB,QADHA,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAU7E,QAASxB,KAAKjB,MAAMyC,QAAQG,UAIhF,0BACH,MAAM2E,EAAStG,KAAKjB,MAAM2G,OAAOvJ,aAAeA,EAAYoK,YACtDC,EAA0CxG,KAAKjB,MAAM2G,OAAOc,wCAElE,GAAIF,IAAWnK,EAAYoK,YAAa,CACpC,QAAqCjG,IAAjCN,KAAKS,MAAMM,mBAAmCf,KAAKjB,MAAM0E,KAAKgD,iCAAiC9C,OAAQ,OACvG,MAAM7C,QAAe/C,EACjBiC,KAAKjB,MAAM0E,KAAKgD,iCAAiC9C,OACjD3D,KAAKjB,MAAMyC,QAAQ9E,cACqB,QADR,EAChCsD,KAAKjB,MAAM2G,OAAOgB,8BAAsB,QAAI1G,KAAKF,+BAErDE,KAAK2G,WAAW7F,QACb,QAAqCR,IAAjCN,KAAKS,MAAMM,mBAAmCf,KAAKjB,MAAM0E,KAAKC,QAAQC,OAAQ,CACrF,MAAMD,EAAU1D,KAAKjB,MAAM0E,KAAKC,QAAQC,OAClC7C,QAAevE,EACjBmH,EAAQkD,UACP5G,KAAKjB,MAAMyC,QAAQG,QAAQkF,YAAYpK,UACxCuD,KAAKjB,MAAMyC,QAAQ9E,cACnBsD,KAAKjB,MAAM2G,OAAOgB,wBAA0B1G,KAAKF,8BACjD4D,EAAQoD,gBAGZ9G,KAAK2G,WAAW7F,QAEhBd,KAAK2G,WAAW,KAGpBI,EAAAA,EAAAA,KACI,KAAK,MACD,MAAMrD,EAAU1D,KAAKjB,MAAM0E,KAAKC,QAAQC,OACxC,OAAKD,GAIA8C,GAA2CQ,EAAAA,iBAAiBC,kBAAwC,QAAvB,EAACvD,EAAQoD,sBAAc,aAAtB,EAAwBF,UAChG,GAAGlD,EAAQkD,WAGf,GAAGlD,EAAQkD,YAAYlD,EAAQoD,eAAgBF,WAP3C,QASftK,UACI,MAAMoH,EAAU1D,KAAKjB,MAAM0E,KAAKC,QAAQC,OACxC,GAAID,EAAS,OACT,MAAM5C,QAAevE,EACjBmH,EAAQkD,UACP5G,KAAKjB,MAAMyC,QAAQG,QAAQkF,YAAYpK,UACxCuD,KAAKjB,MAAMyC,QAAQ9E,cACqB,QADR,EAChCsD,KAAKjB,MAAM2G,OAAOgB,8BAAsB,QAAI1G,KAAKF,8BACjD0G,EAA0C9C,EAAQoD,oBAAiBxG,GAEvEN,KAAK2G,WAAW7F,QAEhBd,KAAK2G,WAAW,OAMhC,GAAIL,IAAWnK,EAAYK,WAAawD,KAAKjB,MAAM0E,KAAKxG,eAAe0G,OAAQ,CAC3E,MAAM7C,QAAe/C,EACjBiC,KAAKjB,MAAM0E,KAAKxG,eAAe0G,OAC/B3D,KAAKjB,MAAMyC,QAAQ9E,cACnBsD,KAAKjB,MAAM2G,OAAOgB,wBAA0B1G,KAAKF,+BAErDE,KAAK2G,WAAW7F,IAIjBoG,sBAAsBC,EAA0DC,GACnF,OAAIpH,KAAKS,QAAU2G,GAAapH,KAAKjB,MAAM0E,OAAS0D,EAAU1D,KAM3D4D,SACH,MAAM,GAAExF,EAAE,OAAE6D,EAAM,UAAE9B,GAAc5D,KAAKjB,OAEjC,UAAE0C,EAAS,sBAAEkD,GAA0Be,EAEvC4B,EAAsB5B,EAAOrJ,wBAA0BA,EAAsBkL,SAC7EC,EAA+BxH,KAAKkG,YAAcR,EAAO+B,kBAAmB,EAC5EC,EACFhC,EAAOtJ,YAAcA,EAAUuL,OAASvL,EAAUuL,OAASjC,EAAOtJ,YAAcA,EAAUwL,UAAYxL,EAAUwL,UAAY,GAE1HC,EAA4B7H,KAAK8H,sBAAsBN,EAAqBE,GAC5EK,EAAqC/H,KAAKgI,iCAC1CC,EAAS,OACPjI,KAAKjB,OAAuD,IAChE0B,MAAOT,KAAKS,MACZ7B,aAAc,CACVsJ,YAAalI,KAAKjB,MAClB0C,UAAWU,GAAAA,CAAW,qBAAoBmF,EAAa,WAAa,IAAM7F,IAE9E0G,MAAOX,EAAsBxH,KAAKuD,iBAAiBmE,GAAgB,KACnEU,eAAgBpI,KAAKqD,gBACrBgF,uBAAwBrI,KAAKwC,0BAC7B8F,yBAA0BtI,KAAK0C,4BAC/B6F,cAAe,CACXrG,IAAK8B,EAAAA,SACLvC,UAAW,6BACXwC,MAAO4D,EAA0B5D,MACjCvD,YAAaV,KAAKS,MAAMC,YACxBN,KAAMJ,KAAKI,KACXS,SAAUb,KAAKa,SACfwD,UAAU,EACVC,kBAAmBV,EAAUW,8BAC7BC,kBAAmBZ,EAAUa,0BAC7BC,yBAA0B1E,KAAKW,UAC/BgE,uBAAiD,IAA1BA,EACvB6D,kBAAmB5E,EAAU6E,kBAC7B3D,eAAgB9E,KAAKG,SACrB4E,gBAAiB/E,KAAKD,UACtBuC,IAAKuF,EAA0Ba,MAEnCC,WAAY,CACRC,yBAA0B,CAAEnH,UAAW,0CACvCoH,kCAAmC,CAC/B3G,IAAK4G,EAAAA,oBACLrH,UAAW,+BACX8F,SAAUD,EACVyB,iBAAkBnF,EAAUW,8BAC5ByE,iBAAkBpF,EAAUa,0BAC5BwE,SAAUpH,EACVqH,YAAY,EACZ5G,IAAK6G,KAAKC,UAAUrB,EAAmCW,OAE3DzE,MAAO8D,EAAmC9D,SAIlD,OAAOjE,KAAKjB,MAAMsK,WAAWpB,GAM1BrH,sBACHZ,KAAKC,SAAS,CAAEwF,eAAe,IAyC3BuC,iCACJ,MAAMjH,EAAoBf,KAAKS,MAAMM,kBAC/B2F,EAAyB1G,KAAKjB,MAAM2G,OAAOgB,uBAC7CA,IACAA,EAAuB7G,iBAAkB,GAK7C,IAF6ByJ,EAAAA,gBAAgBC,YAAYxI,GAE9B,CACvB,GAAIf,KAAKS,MAAM+I,WAAY,CACvB,MAAMC,EAAa,EACnB,MAAO,CACHxF,MAAO,CAACjE,KAAK0J,uBAAuBhD,EAAwB+C,EAAYzJ,KAAKS,MAAMC,cACnFgI,KAAM,CAAC,UAGf,MAAO,CAAEzE,MAAO,GAAIyE,KAAM,IAG9B,MAAO,CACHzE,MAAO,IACAlD,EAAmB3D,KAAI,CAAC8G,EAAkBhD,IACzClB,KAAK+B,kBACDmC,EACAwC,MAAAA,EAAAA,EAA0B1G,KAAKF,8BAC/BoB,EACAlB,KAAKS,MAAMC,gBAIvBgI,KAAM,IAAI3H,EAAmB3D,KAAI8G,GAAQA,EAAKjG,QAI9C6J,sBAAsBN,EAA8BE,GACxD,MAAM3G,EAAoBf,KAAKS,MAAMM,kBAC/B6E,EAAuB5F,KAAKjB,MAAM2G,OAAOE,qBAC3CA,IACAA,EAAqB/F,iBAAkB,GAG3C,MAAM8J,EAAWnC,EAAsB,aAAeE,EAItD,OAF6B4B,EAAAA,gBAAgBC,YAAYxI,GASlD,CACHkD,MAAO,IACAlD,EAAmB3D,KAAI,CAAC8G,EAAkBhD,IACzClB,KAAKmE,6BAA6BwF,EAAUzF,EAAM0B,MAAAA,EAAAA,EAAwB5F,KAAKb,4BAA6B+B,MAGpHwH,KAAM,IAAI3H,EAAmB3D,KAAI8G,GAAQA,EAAKjG,QAZ1C+B,KAAKS,MAAM+I,WACJ,CAAEvF,MAAO,CAACjE,KAAK4J,kBAAkBhE,IAAwB8C,KAAM,CAAC,UAEpE,CAAEzE,MAAO,GAAIyE,KAAM,IAa1B/B,WAAW7F,GAAqB,MACpC,MAAM+I,EAAe7J,KAAKjB,MAAM2G,OAAO5E,QAAU,GAGjD,IAAIgJ,EAAchJ,MAAAA,EAAAA,EAAU,IAF6D,QAA5D,EAAGd,KAAKjB,MAAM2G,OAAOqE,+CAAuC,YAQrFD,EAAcA,EAAYtM,QAAO,CAAC0G,EAAMhD,KAAS,MAC7C,IAAI8I,EAAmB9I,EACvB,MAAM+I,IAAkBD,EAAL,IACnB,OAAe,QAAf,EAAO9F,EAAKjG,WAAG,aAAR,EAAUiM,SAASD,OAIlCjK,KAAKC,SAAS,CACVc,kBAAmB,IAAI+I,KAAgBD,GACvCnJ,YAAa,EACb8I,WAAYW,KAAKC,QAIjBjG,6BACJwF,EACAvI,EACAzE,EACAuE,GAC0B,IAA1BG,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAEA,GAAIrB,KAAKkG,WACL,OAAI7E,EACOrB,KAAKqK,8BAA8BjJ,EAAOpB,KAAKoE,qBAAsBlD,GAEzElB,KAAKsK,6BAA6BlJ,EAAOzE,EAAeuE,GAGnE,OAAQyI,GACJ,IAAK,YACD,OAAO3J,KAAKqK,8BAA8BjJ,EAAOpB,KAAKoE,qBAAsBlD,GAEhF,IAAK,SACD,OAAOlB,KAAKuK,yBAAyBnJ,EAAOpB,KAAKoE,qBAAsBlD,GAE3E,IAAK,aACD,OAAOlB,KAAKsK,6BAA6BlJ,EAAOzE,EAAeuE,GAKvE,OAAOrC,EAAAA,cAAAA,EAAAA,SAAAA,KAAGmB,KAAKmB,iBAAiBC,EAAOzE,EAAeuE,EAAOG,IAoFzDkJ,yBAAyBnJ,EAAmBzE,EAA+BuE,GAAa,MAC5F,OACIrC,EAAAA,cAAAA,MAAAA,CACI4C,UAAW,mBAAkBzB,KAAKS,MAAMgF,cAAgB,SAAW,IACnE+E,IAAKxK,KAAK4C,YAAY1B,GAAM,aACW,QADX,EAChBlB,KAAKjB,MAAM2G,OAAO+E,iBAAS,QAAIC,EAAAA,kBAE3C7L,EAAAA,cAACyC,EAAAA,GAAK,eACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,0BACNL,EAAK,CACTM,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,EACfiF,oBAAoB,UACpBW,QAASvC,KAAK+F,oBACd4E,YAAc3K,KAAKS,MAAMgF,eAAiBzF,KAAK8F,8BAA4BxF,EAC3EuB,GAAI,GAAG7B,KAAKjB,MAAM8C,sBAAsBX,IACxCY,uBAAqB,KAEzBjD,EAAAA,cAACyC,EAAAA,GAAK,eACFc,KAAK,eACLb,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,6BACNL,EAAK,CACTmB,QAASvC,KAAK6F,iBACdnE,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,EACfiF,oBAAoB,UACpBC,GAAI,GAAG7B,KAAKjB,MAAM8C,aAAaX,IAC/B0J,YAAc5K,KAAKS,MAAMgF,eAAiBoF,EAAAA,iCAA+BvK,EACzEwB,uBAAqB,MAM7BgE,wBAAwB/C,GAAyC,OACrE+H,EAAAA,EAAAA,wBAAuB/H,EAAkC,QAA7B,EAAE/C,KAAKjB,MAAM2G,OAAO+E,iBAAS,QAAIM,OAAOL,EAAAA,mBAGhEM,kCAAkCjI,GACtC,MAAMkI,EAASlI,EAAMmI,cACfC,EAA+B,uBACrC,GAAKnL,KAAKS,MAAMwE,oBAiBZgG,EAAOG,MAAMC,UAAY,GACzBJ,EAAOK,UAAUC,OAAOJ,GACxBF,EAAOO,cAAeJ,MAAMK,SAAW,GACvCzL,KAAKC,SAAS,CACVgF,qBAAqB,QArBQ,OACjC,MAAMyG,EAAST,EAAOU,wBAChBlB,EAAYmB,OAAkC,QAA5B,EAAC5L,KAAKjB,MAAM2G,OAAO+E,iBAAS,QAAIC,EAAAA,kBAElDmB,EAAY9I,EAAM+I,QAAUJ,EAAOK,KACnCC,EAAYjJ,EAAMkJ,QAAUP,EAAOQ,IACnCC,EAAkBN,EAAYpB,EAC9B2B,EAAkBJ,EAAYvB,EAEpCQ,EAAOG,MAAMC,UAAY,SAASZ,KAClCQ,EAAOK,UAAUe,IAAIlB,GACrBF,EAAOO,cAAeJ,MAAMK,SAAW,OACvCR,EAAOO,cAAec,SAASH,EAAkBN,EAAWO,EAAkBJ,GAC9EhM,KAAKC,SAAS,CACVgF,qBAAqB,KAYzBc,oBAAoBhD,GAAyC,MAC7DwJ,OAAOC,YAAc,IAErBxM,KAAKgL,kCAAkCjI,KAG3C0J,EAAAA,EAAAA,qBAAoB1J,EAAkC,QAA7B,EAAE/C,KAAKjB,MAAM2G,OAAO+E,iBAAS,QAAIM,OAAOL,EAAAA,mBACjE1K,KAAKC,SAAS,CACVwF,eAAe,KAIfI,iBAAiB9C,IACrB2J,EAAAA,EAAAA,2BAA0B3J,GAC1B/C,KAAKC,SAAS,CACVwF,eAAe,IAIfO,2BAA2BjD,GAC3BwJ,OAAOC,YAAc,IAErBxM,KAAKgL,kCAAkCjI,KAI3C4J,EAAAA,EAAAA,qBAAoB5J,GAEpB/C,KAAKC,SAAS,CACVwF,eAAe,KAIfQ,yBAAyBlD,IAC7B6J,EAAAA,EAAAA,yBAAwB7J,GAExB/C,KAAKC,SAAS,CACVwF,eAAe,IAIf4E,8BAA8BjJ,EAAmBzE,EAA+BuE,GAAa,MACjG,OACIrC,EAAAA,cAAAA,MAAAA,CAAK4C,UAAU,+BACX5C,EAAAA,cAAAA,MAAAA,CAAA,aAC2C,QAD3C,EACgBmB,KAAKjB,MAAM2G,OAAO+E,iBAAS,QAAIC,EAAAA,iBAC3CjJ,UAAU,8BACVW,KAAK,eACLyK,WAAY7M,KAAKiG,yBACjB1D,QAASvC,KAAKiG,yBACd2E,YAAc5K,KAAKS,MAAMgF,eAAiBqH,EAAAA,+BAA6BxM,IAE3EzB,EAAAA,cAACyC,EAAAA,GAAK,eACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,0BACNL,EAAK,CACTM,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzCqL,aAAc/M,KAAKgG,2BACnBrJ,cAAeA,EACfiF,oBAAoB,UACpB+I,YAAc3K,KAAKS,MAAMgF,eAAiBuH,EAAAA,gCAA8B1M,EACxEuB,GAAI,GAAG7B,KAAKjB,MAAM8C,sBAAsBX,IACxCY,uBAAqB,MAM7BwI,6BAA6BlJ,EAAmBzE,EAA+BuE,GACnF,OACIrC,EAAAA,cAAAA,MAAAA,CAAK4C,UAAU,yBACX5C,EAAAA,cAACyC,EAAAA,GAAK,eACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,0BACNL,EAAK,CACTM,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,EACfiF,oBAAoB,aAExB/C,EAAAA,cAAAA,MAAAA,CAAK4C,UAAU,kCACX5C,EAAAA,cAAAA,IAAAA,CACIoO,KAAK,sBACLC,MAAOlN,KAAKjB,MAAM6E,UAAUuJ,oBAC5B/K,KAAK,SACLG,QAASvC,KAAKqD,gBACd5B,UAAU,mDAOtBoC,uBAAuBH,GAC3B,MAAO,CACHzF,IAAKyF,EAAQ0J,iBAAmB,IAIhCxD,kBAAkBjN,GACtB,OACIkC,EAAAA,cAAAA,MAAAA,CAAK4C,UAAU,0BACX5C,EAAAA,cAACyC,EAAAA,GAAK,CACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,gCACVxD,IAAI,QACJyD,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,MAAAA,EAAAA,EAAiBqD,KAAKb,4BACrCyC,oBAAoB,WAM5B8H,uBACJ/M,EACAuE,EACAc,GAMA,MAAO,CACHC,4BAA6B,CACzBC,IAAK,KACLT,UAPQU,GAAAA,CACZ,mCACAH,IAAwBd,EAAQ,0CAA4C,IAMxEkB,KAAM,MACNC,SAAU,EACVC,IAAK,QACL,aAAc,GACd,gBAAiBN,IAAwBd,EACzCqB,QAASvC,KAAKwC,0BAA0BtB,GACxCuB,UAAWzC,KAAK0C,4BAA4BxB,IAEhDyB,QACI9D,EAAAA,cAACyC,EAAAA,GAAK,CACFC,eAAgBvB,KAAKjB,MAAMyC,QAAQ9E,cAAc6E,eACjDE,UAAU,0CACVxD,IAAI,QACJyD,aAAc1B,KAAKjB,MAAMyC,QAAQG,QAAQD,aACzC/E,cAAeA,MAAAA,EAAAA,EAAiBqD,KAAKF,8BACrC8B,oBAAoB,WAiB5B0B,eACJ,GAAItD,KAAKS,MAAMqD,YAAa,CACxB,MAAMuJ,EAAYrN,KAAKf,kBAAkBqO,IAAItN,KAAKS,MAAMC,aACxD,GAAI2M,GAAaA,EAAUE,UAAYF,EAAUE,SAAStM,QAAU,EAAG,CACnE,MAAMG,EAAQiM,EAAUE,SAAS,GAAGC,cAAc,OAC9CpM,GACAA,EAAMqM,gBAAgB,SAG9BzN,KAAKC,SAAS,CACVwF,eAAe,IAGvBzF,KAAKC,SAAS,CACVwF,eAAe,EACf3B,aAAc9D,KAAKS,MAAMqD,eAE7BzD,EAAAA,EAAAA,0BACAqN,EAAAA,EAAAA,6BAqDR,W,oECtxBA,MAYMC,EAAqBC,IACvB,MAAM,yBAAEhF,EAAwB,kCAAEC,EAAiC,MAAE5E,GAAU2J,EAE/E,OACI/O,EAAAA,cAACgP,EAAAA,KAAI,iBAAKjF,GACN/J,EAAAA,cAACgP,EAAAA,KAAI,iBAAKhF,GAAoC5E,GAASA,EAAM7G,IAAI0Q,MAKvEA,EAAwBC,IAC1B,MAAM,4BAAE9L,EAA2B,QAAEU,GAAYoL,EAEjD,OAAOlP,EAAAA,cAACgP,EAAAA,KAAI,iBAAK5L,GAA8BU,IAGnD,EA5B2D5D,IACvD,MAAM,cAAEwJ,EAAa,WAAEI,EAAU,aAAE/J,EAAY,MAAEuJ,GAAUpJ,EAE3D,OACIF,EAAAA,cAACmP,EAAAA,OAAM,iBAAKpP,GACRC,EAAAA,cAACgP,EAAAA,KAAI,iBAAKtF,IACTJ,EACAwF,EAAkBhF,M,omBCtB/B,MAAMsF,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8B,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQE,UAAU5M,KAC3DoM,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQE,UAAU5M,IAAMwM,IAMhGJ,EAAQC,QAAQ,sBAAwB,CACrCS,EAAG,IAAMC,EAAQ,MACjBC,MAAO,gBACPC,GAAI,CAAC,CAACC,KAAK,iBAAmBC,KAAK,+EAAgFC,MAAO,GAAG,CAACF,KAAK,mCAAqCC,KAAK,8FAA+FC,MAAO,GAAG,CAACF,KAAK,UAAYC,KAAK,0EAA2EC,MAAO,IAE/XC,KAAK,EACLC,GAAI,YACJC,EAAG,qBACHC,EAAG,YAEHC,IAAK,GAGL5P,GAAI,kCAOA0O,EAF4B,+EACXQ,EAAQ,MAQzBR,EAF4B,8FACXQ,EAAQ,MAQzBR,EAF4B,0EACXQ,EAAQ,KAMjCrC,OAAOgD,aAAehD,OAAOgD,cAAgB,GAC7ChD,OAAOgD,aAAarB,QAAO,OACpB3B,OAAOgD,aAAarB,SAAW,IAC/BD,EAAQC,SAGX3B,OAAOgD,aAAapB,YAAW,OAC5B5B,OAAOgD,aAAapB,aAAe,IACnCF,EAAQE,aAEY,MAAMqB,EAAiB,GAC9BA,EAAe,qEAAuE,CAC9Fb,EAAG,IAAMC,EAAQ,MACjBa,GAAI,0CAEpBlD,OAAOgD,aAAehD,OAAOgD,cAAgB,GAC7ChD,OAAOgD,aAAaC,eAAc,OACPjD,OAAOgD,aAAaC,gBAAkB,IACtCA,I,MCjG3BE,EAAOC,QAAU9Q,O,OCAjB6Q,EAAOC,QAAUC,W","sources":["webpack://msdyn365.commerce.online/./src/modules/test-media-gallery/test-media-gallery.props.autogenerated.ts?9c2a","webpack://msdyn365.commerce.online/./src/modules/test-media-gallery/utils/get-valid-product-images.ts?e34b","webpack://msdyn365.commerce.online/./src/modules/test-media-gallery/test-media-gallery.tsx?0161","webpack://msdyn365.commerce.online/./src/modules/test-media-gallery/test-media-gallery.view.tsx?d57f","webpack://msdyn365.commerce.online/./lib/test-media-gallery/module-registration.js?e303","webpack://msdyn365.commerce.online/external var \"React\"?0d3b","webpack://msdyn365.commerce.online/external var \"ReactDOM\"?853b"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ITestMediaGallery contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum imageSource {\r\n pageContext = 'pageContext',\r\n productId = 'productId'\r\n}\r\n\r\nexport const enum imageZoom {\r\n inline = 'inline',\r\n container = 'container'\r\n}\r\n\r\nexport const enum thumbnailsOrientation {\r\n vertical = 'vertical',\r\n horizontal = 'horizontal'\r\n}\r\n\r\nexport interface ITestMediaGalleryConfig extends Msdyn365.IModuleConfig {\r\n imageSource?: imageSource;\r\n images?: Msdyn365.IImageData[];\r\n productId?: string;\r\n imageZoom?: imageZoom;\r\n allowFullScreen?: boolean;\r\n dataScale?: string;\r\n zoomedImageSettings?: Msdyn365.IImageSettings;\r\n thumbnailsOrientation?: thumbnailsOrientation;\r\n thumbnailImageSettings?: Msdyn365.IImageSettings;\r\n galleryImageSettings?: Msdyn365.IImageSettings;\r\n shouldHideMasterProductImagesForVariant?: boolean;\r\n showPaginationTooltip?: boolean;\r\n shouldUpdateOnPartialDimensionSelection?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport interface ITestMediaGalleryResources {\r\n nextScreenshotFlipperText: string;\r\n previousScreenshotFlipperText: string;\r\n fullScreenTitleText: string;\r\n ariaLabelForSlide: string;\r\n}\r\n\r\nexport interface ITestMediaGalleryProps extends Msdyn365.IModule {\r\n resources: ITestMediaGalleryResources;\r\n config: ITestMediaGalleryConfig;\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 { IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport async function getValidProductImages(\r\n productId: number,\r\n channelId: number,\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings,\r\n selectedProduct?: SimpleProduct\r\n): Promise {\r\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct);\r\n\r\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\r\n .then(mediaLocations => {\r\n if (mediaLocations) {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\r\n pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n }\r\n );\r\n }\r\n\r\n return [];\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\r\n return [];\r\n });\r\n}\r\n\r\nexport async function validateProductImages(\r\n mediaLocations: MediaLocation[],\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings\r\n): Promise {\r\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings)))\r\n .then(pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to validate prodcut images');\r\n return [];\r\n });\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n return new Promise<[IImageData, boolean]>(resolve => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', imageData.src, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve([imageData, false]);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve([imageData, false]);\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 { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n defaultDataScale,\r\n IComponentNodeProps,\r\n ImagefullView,\r\n IModalViewProps,\r\n IModuleProps,\r\n inlineZoomImageOnHover,\r\n inlineZoomImageOnMouseMove,\r\n inlineZoomImageOnMouseOut,\r\n inlineZoomInitClick,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n isMobile,\r\n KeyCodes,\r\n NodeTag,\r\n onContainerZoomInit,\r\n onMouseMoveLensContainer,\r\n onMouseOutLensContainer,\r\n onMouseOverImageContainer,\r\n removeContainerZoomStyle,\r\n removeInlineZoomStyle,\r\n SingleSlideCarousel,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { ITestMediaGalleryData } from './test-media-gallery.data';\r\nimport { imageSource, imageZoom, ITestMediaGalleryProps, thumbnailsOrientation } from './test-media-gallery.props.autogenerated';\r\nimport { getValidProductImages, validateProductImages } from './utils';\r\n\r\nexport interface IMediaGalleryState {\r\n animating: boolean;\r\n activeIndex: number;\r\n isImageZoomed: boolean;\r\n modalIsOpen: boolean;\r\n lastUpdate?: number;\r\n isMobileImageZoomed?: boolean;\r\n mediaGalleryItems?: IImageData[];\r\n}\r\n\r\nexport interface IMediaGalleryThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n items?: IMediaGalleryThumbnailItemViewProps[];\r\n}\r\n\r\nexport interface IMediaGalleryThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n Picture: React.ReactElement;\r\n}\r\n\r\nexport interface IMediaGalleryViewProps extends ITestMediaGalleryProps {\r\n state: IMediaGalleryState;\r\n MediaGallery: IModuleProps;\r\n CarouselProps: INodeProps;\r\n Thumbnails: IMediaGalleryThumbnailsViewProps;\r\n Modal?: React.ReactElement | null;\r\n callbackToggle?(): void;\r\n callbackThumbnailClick?(index: number): void;\r\n callbackThumbnailKeyDown?(index: number): void;\r\n}\r\n\r\n/**\r\n * Props for carousel.\r\n */\r\ninterface IMediaGalleryCarouselItems {\r\n items: ItemType[];\r\n keys: (string | undefined)[];\r\n}\r\n\r\n/**\r\n * Media gallery component.\r\n */\r\nclass MediaGallery extends React.Component, IMediaGalleryState> {\r\n private readonly _inlineZoomDivRef: Map = new Map();\r\n\r\n private readonly defaultGalleryImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\r\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\r\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\r\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n private readonly _zoomedImageSettings: IImageSettings;\r\n\r\n public constructor(props: ITestMediaGalleryProps) {\r\n super(props);\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this.state = { activeIndex: 0, animating: false, isImageZoomed: false, modalIsOpen: false };\r\n\r\n this._zoomedImageSettings =\r\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\r\n\r\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\r\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\r\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\r\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\r\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\r\n }\r\n\r\n public isMobile(): boolean {\r\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n return size === 'xs';\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const source = this.props.config.imageSource || imageSource.pageContext;\r\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\r\n\r\n if (source === imageSource.pageContext) {\r\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocationsForSelectedVariant.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\r\n const product = this.props.data.product.result;\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings || this.defaultThumbnailImageSettings,\r\n product.productVariant\r\n );\r\n\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n\r\n reaction(\r\n () => {\r\n const product = this.props.data.product.result;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n if (!shouldUpdateOnPartialDimensionSelection || ObjectExtensions.isNullOrUndefined(product.productVariant?.RecordId)) {\r\n return `${product.RecordId}`;\r\n }\r\n\r\n return `${product.RecordId}-${product.productVariant!.RecordId}`;\r\n },\r\n async () => {\r\n const product = this.props.data.product.result;\r\n if (product) {\r\n const images = await getValidProductImages(\r\n product.RecordId,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\r\n );\r\n this._setImages(images);\r\n } else {\r\n this._setImages([]);\r\n }\r\n }\r\n );\r\n }\r\n\r\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\r\n const images = await validateProductImages(\r\n this.props.data.mediaLocations.result,\r\n this.props.context.actionContext,\r\n this.props.config.thumbnailImageSettings || this.defaultThumbnailImageSettings\r\n );\r\n this._setImages(images);\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ITestMediaGalleryProps, nextState: IMediaGalleryState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { id, config, resources } = this.props;\r\n\r\n const { className, showPaginationTooltip } = config;\r\n\r\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\r\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\r\n const zoomViewMode: string =\r\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\r\n\r\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\r\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\r\n const viewProps: IMediaGalleryViewProps = {\r\n ...(this.props as ITestMediaGalleryProps),\r\n state: this.state,\r\n MediaGallery: {\r\n moduleProps: this.props,\r\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\r\n },\r\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\r\n callbackToggle: this.openModalDialog,\r\n callbackThumbnailClick: this._generateOnThumbnailClick,\r\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryCarouselItems.items,\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: showPaginationTooltip === true,\r\n indicatorAriaText: resources.ariaLabelForSlide,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n key: mediaGalleryCarouselItems.keys\r\n } as IComponentNodeProps,\r\n Thumbnails: {\r\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: 'ms-media-gallery__thumbnails',\r\n vertical: isVertical,\r\n flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\r\n } as IComponentNodeProps,\r\n items: mediaGalleryThumbnailCarouselItems.items\r\n }\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Zoomed out image on previous/next click.\r\n */\r\n public updateZoomedInImage(): void {\r\n this.setState({ isImageZoomed: false });\r\n }\r\n\r\n private readonly onExiting = () => {\r\n this.setState({ animating: true });\r\n };\r\n\r\n private readonly onExited = () => {\r\n this.setState({ animating: false });\r\n };\r\n\r\n /**\r\n * On click next in carousel.\r\n */\r\n private readonly next = (): void => {\r\n removeInlineZoomStyle();\r\n if (this.isLastItem() === undefined) {\r\n return;\r\n }\r\n\r\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this.goToIndex(nextIndex);\r\n\r\n this.updateZoomedInImage();\r\n };\r\n\r\n /**\r\n * On click previous in carousel.\r\n */\r\n private readonly previous = (): void => {\r\n removeInlineZoomStyle();\r\n const images = this.state.mediaGalleryItems;\r\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\r\n this.goToIndex(nextIndex);\r\n this.updateZoomedInImage();\r\n };\r\n\r\n private readonly goToIndex = (index: number): void => {\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems;\r\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\r\n if (thumbnailImageSettings) {\r\n thumbnailImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n const defaultKey = 0;\r\n return {\r\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\r\n keys: ['empty']\r\n };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\r\n this._getThumbnailItem(\r\n item,\r\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\r\n index,\r\n this.state.activeIndex\r\n )\r\n )\r\n ],\r\n keys: [...mediaGalleryItems!.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\r\n const mediaGalleryItems = this.state.mediaGalleryItems;\r\n const galleryImageSettings = this.props.config.galleryImageSettings;\r\n if (galleryImageSettings) {\r\n galleryImageSettings.cropFocalRegion = true;\r\n }\r\n\r\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\r\n\r\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\r\n\r\n if (!hasMediaGalleryItems) {\r\n if (this.state.lastUpdate) {\r\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\r\n }\r\n return { items: [], keys: [] };\r\n }\r\n\r\n return {\r\n items: [\r\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index)\r\n )\r\n ],\r\n keys: [...mediaGalleryItems!.map(item => item.src)]\r\n };\r\n }\r\n\r\n private _setImages(images?: IImageData[]): void {\r\n const curatedImage = this.props.config.images || [];\r\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\r\n\r\n let imagesToSet = images ?? [];\r\n if (shouldHidePrimaryImages) {\r\n // Currently returned image response is having duplicate image\r\n // along with non-selected variant and previous selection is not getting cleared. With the help of index we\r\n // select item from 0 index till it is having non repeating image source name ending with index number.\r\n // Here we are keeping '.' to make sure that we are considering any digit just before '.' in image source path\r\n imagesToSet = imagesToSet.filter((item, index) => {\r\n let incrementedIndex = index;\r\n const imageIndex = `${++incrementedIndex}.`;\r\n return item.src?.includes(imageIndex);\r\n });\r\n }\r\n\r\n this.setState({\r\n mediaGalleryItems: [...imagesToSet, ...curatedImage],\r\n activeIndex: 0,\r\n lastUpdate: Date.now()\r\n });\r\n }\r\n\r\n private _renderCarouselItemImageView(\r\n zoomView: string,\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode {\r\n if (this.isMobile()) {\r\n if (isInPopup) {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }\r\n\r\n switch (zoomView) {\r\n case 'container': {\r\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'inline': {\r\n return this._renderImageInlineOnZoom(image, this._zoomedImageSettings, index);\r\n }\r\n case 'fullscreen': {\r\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\r\n }\r\n\r\n // No default\r\n }\r\n return <>{this._getCarouselItem(image, imageSettings, index, isInPopup)};\r\n }\r\n\r\n private readonly _getCarouselItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n isInPopup: boolean = false\r\n ): React.ReactNode => (\r\n \r\n );\r\n\r\n private readonly _getThumbnailItem = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n };\r\n\r\n /**\r\n * Ref Handler.\r\n * @param index -Remove item click function.\r\n * @returns Set inline zoom.\r\n */\r\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\r\n this._inlineZoomDivRef.set(index, divRef);\r\n };\r\n\r\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\r\n return (event: React.KeyboardEvent) => {\r\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n }\r\n };\r\n };\r\n\r\n private readonly _generateOnThumbnailClick = (index: number) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n };\r\n };\r\n\r\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\r\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n }\r\n\r\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\r\n const target = event.currentTarget;\r\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\r\n if (!this.state.isMobileImageZoomed) {\r\n const bounds = target.getBoundingClientRect();\r\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\r\n\r\n const positionX = event.clientX - bounds.left;\r\n const positionY = event.clientY - bounds.top;\r\n const scaledPositionX = positionX * dataScale;\r\n const scaledPositionY = positionY * dataScale;\r\n\r\n target.style.transform = `scale(${dataScale})`;\r\n target.classList.add(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = 'auto';\r\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\r\n this.setState({\r\n isMobileImageZoomed: true\r\n });\r\n } else {\r\n target.style.transform = '';\r\n target.classList.remove(mobileZoomedInImageClassName);\r\n target.parentElement!.style.overflow = '';\r\n this.setState({\r\n isMobileImageZoomed: false\r\n });\r\n }\r\n }\r\n\r\n private _onInlineImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onImageMouseOut(event: React.MouseEvent): void {\r\n inlineZoomImageOnMouseOut(event);\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\r\n if (window.innerWidth <= 768) {\r\n // $msv-breakpoint-m\r\n this._handleMobileViewZoomedImageClick(event);\r\n return;\r\n }\r\n\r\n onContainerZoomInit(event);\r\n\r\n this.setState({\r\n isImageZoomed: true\r\n });\r\n }\r\n\r\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\r\n onMouseOutLensContainer(event);\r\n\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n\r\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _mapProductToImageData(product: SimpleProduct): IImageData {\r\n return {\r\n src: product.PrimaryImageUrl || ''\r\n };\r\n }\r\n\r\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _getEmptyThumbnailItem(\r\n imageSettings: IImageSettings | undefined,\r\n index: number,\r\n modifiedActiveIndex: number\r\n ): IMediaGalleryThumbnailItemViewProps {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 'empty',\r\n 'aria-label': '',\r\n 'aria-selected': modifiedActiveIndex === index,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n }\r\n\r\n private readonly isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private readonly isLastItem = () => {\r\n const images = this.state.mediaGalleryItems;\r\n return images && this.state.activeIndex === images.length - 1;\r\n };\r\n\r\n private readonly openModalDialog = (): void => {\r\n this._toggleModal();\r\n };\r\n\r\n private _toggleModal(): void {\r\n if (this.state.modalIsOpen) {\r\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\r\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\r\n const image = parentDiv.children[1].querySelector('img');\r\n if (image) {\r\n image.removeAttribute('style');\r\n }\r\n }\r\n this.setState({\r\n isImageZoomed: false\r\n });\r\n }\r\n this.setState({\r\n isImageZoomed: false,\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n removeInlineZoomStyle();\r\n removeContainerZoomStyle();\r\n }\r\n\r\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\r\n const {\r\n data: {\r\n product: { result: product }\r\n },\r\n resources\r\n } = this.props;\r\n let mediaGalleryItems = this.state.mediaGalleryItems;\r\n\r\n if (!mediaGalleryItems && product) {\r\n mediaGalleryItems = [this._mapProductToImageData(product)];\r\n }\r\n if (this.state.modalIsOpen) {\r\n const carouselprops = {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items:\r\n mediaGalleryItems &&\r\n mediaGalleryItems.map((item: IImageData, index: number) =>\r\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\r\n ),\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: true,\r\n hideIndicator: false,\r\n keyboard: false,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting,\r\n isDisabledFunctionality: this.state.isMobileImageZoomed\r\n } as IComponentNodeProps;\r\n\r\n const carousel = ;\r\n\r\n const imageModalSliderProps: IModalViewProps = {\r\n modalIsOpen: this.state.modalIsOpen,\r\n ontoggle: this._toggleModal,\r\n galleryCarousel: carousel,\r\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\r\n };\r\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\r\n }\r\n return
;\r\n };\r\n}\r\n\r\nexport default MediaGallery;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\n\r\nconst MediaGalleryView: React.FC = props => {\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n\r\n return (\r\n \r\n \r\n {Modal}\r\n {_renderThumbnails(Thumbnails)}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\r\n\r\n return (\r\n \r\n {items && items.map(_renderThumbnailItem)}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return {Picture};\r\n};\r\n\r\nexport default MediaGalleryView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['test-media-gallery'] = {\n c: () => require('partner/modules/test-media-gallery/test-media-gallery.tsx'),\n $type: 'contentModule',\n da: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'mediaLocationsForSelectedVariant', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'test-media-gallery',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/test-media-gallery'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|test-media-gallery|test-media-gallery'] = {\n c: () => require('partner/modules/test-media-gallery/test-media-gallery.view.tsx'),\n cn: '__local__-__local__-test-media-gallery'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["imageSource","imageZoom","thumbnailsOrientation","async","getValidProductImages","productId","channelId","actionContext","imageSettings","selectedProduct","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","Promise","all","map","mediaLocation","validateMediaLocaionAsync","pairs","filter","pair","catch","error","telemetry","exception","debug","validateProductImages","imageData","src","Uri","altText","AltText","resolve","http","XMLHttpRequest","open","addEventListener","status","send","MediaGallery","React","constructor","props","super","_inlineZoomDivRef","Map","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","cropFocalRegion","defaultThumbnailImageSettings","onExiting","this","setState","animating","onExited","next","removeInlineZoomStyle","undefined","isLastItem","nextIndex","state","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","length","index","_getCarouselItem","image","isInPopup","Image","requestContext","context","className","gridSettings","request","loadFailureBehavior","id","shouldSkipToMainImage","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","classnames","role","tabIndex","key","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","_refHandler","divRef","set","event","which","KeyCodes","Enter","Space","preventDefault","openModalDialog","_toggleModal","imageModalSlider","ZoomView","data","product","result","resources","_mapProductToImageData","modalIsOpen","carouselprops","Carousel","items","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","ontoggle","galleryCarousel","classNames","ImagefullView","bind","isImageZoomed","config","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","source","pageContext","shouldUpdateOnPartialDimensionSelection","mediaLocationsForSelectedVariant","thumbnailImageSettings","_setImages","RecordId","apiSettings","productVariant","reaction","ObjectExtensions","isNullOrUndefined","shouldComponentUpdate","nextProps","nextState","render","isVertical","vertical","isFullscreenAllowed","allowFullScreen","zoomViewMode","inline","container","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","moduleProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","renderView","ArrayExtensions","hasElements","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","_renderEmptyImage","curatedImage","imagesToSet","shouldHideMasterProductImagesForVariant","incrementedIndex","imageIndex","includes","Date","now","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","ref","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","window","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","onMouseOut","onMouseMoveLensContainer","onMouseEnter","onMouseOverImageContainer","href","title","fullScreenTitleText","PrimaryImageUrl","parentDiv","get","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","Node","_renderThumbnailItem","thumbnail","Module","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}