{"version":3,"file":"ProductImageGallery-Chunk-64c9bb7c55b80dab54fb.js","mappings":"6MA2BA,MAyFA,GAzFkBA,EAAAA,EAAAA,aAChB,CAAAC,EAaEC,KACG,IAbH,8BACEC,EAA6B,UAC7BC,EAAS,GACTC,EAAE,SACFC,GAAW,EAAK,mBAChBC,GAAqB,EAAI,cACzBC,EAAgB,YAAW,SAC3BC,EAAQ,kBACRC,EAAoB,iBAAgB,YACpCC,EAAW,QACXC,GACDX,EAGD,MAAM,cAAEY,EAAa,kBAAEC,IAAsBC,EAAAA,EAAAA,KACvCC,GAAYC,EAAAA,EAAAA,QAA0B,MAO5C,OALAC,EAAAA,EAAAA,qBAAoBhB,GAAK,KAAM,CAC7BiB,MAAOA,IAAMH,EAAUI,SAASD,QAChCb,WAAYU,EAAUI,SAASd,aAI/Be,MAAAC,cAAA,UACEpB,IAAKc,EACLX,GAAI,GACFD,IAAcmB,EAAAA,EAAwBC,KAAO,UAAY,aACvDnB,IACJoB,UAAWC,IACT,4DACAlB,EACA,CACE,qBACEJ,IAAcmB,EAAAA,EAAwBC,OAASlB,EACjD,sBACEF,IAAcmB,EAAAA,EAAwBI,QAAUrB,EAClD,kBAAmBA,EACnB,iBAAkBA,EAClB,gFACEC,IAAuBD,EACzB,CAAC,YAAWK,EAAc,GAAK,qBAC7BJ,GAAsBD,IAG5B,aACEF,IAAcmB,EAAAA,EAAwBC,KAClCV,EACAD,EAENP,SAAUA,EACV,gBAAeA,EACfsB,SAAUtB,GAAY,EAAI,EAC1B,cACEF,IAAcmB,EAAAA,EAAwBC,KAClC,iBACA,aAENK,UAAYC,IACI,UAAVA,EAAEC,KAAiBnB,IAAUkB,EAAE,EAErClB,QAASA,KACPA,OACAoB,EAAAA,EAAAA,GAAgB,CACdC,MAAO,WACPC,aAAc,aACdC,UACE/B,IAAcmB,EAAAA,EAAwBC,KAAO,WAAa,UACzDrB,GACH,GAGJkB,MAAAC,cAACc,EAAAA,EAAI,CACHC,KAAM,UACJjC,IAAcmB,EAAAA,EAAwBC,KAAO,OAAS,SAExDc,eACEhC,EACI,kBAAiBK,EAAc,GAAK,sBACpCD,EAEN6B,KAAM9B,IAED,G,+DC7Gf,MA8FA,EA9FgC+B,CAC9BC,EACAnC,KAEA,MAAOoC,EAAaC,IAAkBC,EAAAA,EAAAA,WAAS,GACzCC,GAAsB5B,EAAAA,EAAAA,QAKzB,CACD6B,IAAK,EACLC,KAAM,EACNC,EAAG,EACHC,EAAG,KAGLC,EAAAA,EAAAA,YAAU,KACR,MAAMC,EAAYV,EAAarB,QAC1B+B,GAAWC,cAEZD,EAAUC,aAAeD,EAAUE,aAAe/C,EACpD6C,EAAUG,MAAMC,OAAS,UAKzBJ,EAAUG,MAAMC,OADdb,EACuB,WAIF,OAAM,GAE9B,CAACA,EAAapC,KAEjB4C,EAAAA,EAAAA,YAAU,KACRL,EAAoBzB,QAAU,CAAE0B,IAAK,EAAGC,KAAM,EAAGC,EAAG,EAAGC,EAAG,GAC1D,MAAME,EAAYV,EAAarB,QAE/B,IAAK+B,EAAW,MAAO,KAAM,CAAG,GAChC,GAAI7C,EAIF,OAHA6C,EAAUK,UAAY,EACtBL,EAAUM,WAAa,EAEhB,KAAM,CAAG,GAGlB,MAAMC,EAAoB5B,IACxB,MAAM6B,EAAK7B,EAAE8B,QAAUf,EAAoBzB,QAAQ4B,EAC7Ca,EAAK/B,EAAEgC,QAAUjB,EAAoBzB,QAAQ6B,EAEnDE,EAAUK,UAAYX,EAAoBzB,QAAQ0B,IAAMe,EACxDV,EAAUM,WAAaZ,EAAoBzB,QAAQ2B,KAAOY,CAAE,EAGxDI,EAAiBA,KACrBC,SAASC,oBAAoB,YAAaP,GAC1CM,SAASC,oBAAoB,UAAWF,GACxCpB,GAAe,EAAM,EAGjBuB,EAAoBpC,IACxBe,EAAoBzB,QAAU,CAC5B0B,IAAKK,EAAUK,UACfT,KAAMI,EAAUM,WAChBT,EAAGlB,EAAE8B,QACLX,EAAGnB,EAAEgC,SAEPnB,GAAe,GAEfqB,SAASG,iBAAiB,YAAaT,GACvCM,SAASG,iBAAiB,UAAWJ,EAAe,EAGhDK,EAAWtC,IACE,IAAbA,EAAEuC,QAENlB,EAAUmB,SAAS,CACjBvB,KAAMI,EAAUM,WAAa3B,EAAEuC,OAC/BE,SAAU,UACV,EAMJ,OAHApB,EAAUgB,iBAAiB,YAAaD,GACxCf,EAAUgB,iBAAiB,QAASC,EAAS,CAAEI,SAAS,IAEjD,KACLrB,EAAUc,oBAAoB,YAAaC,GAC3Cf,EAAUc,oBAAoB,QAASG,EAAQ,CAChD,GAEA,CAAC9D,GAAU,E,qCCzFhB,MAyDA,EAzDmCmE,CACjChC,EACAiC,EACApE,KAEA,MAAM,gBAAEqE,IAAoBC,EAAAA,EAAAA,GAAU,CAAEzB,UAAWV,KAC5CoC,EAASC,IAAclC,EAAAA,EAAAA,WAAS,IAChCmC,EAAOC,IAAYpC,EAAAA,EAAAA,WAAS,IAC5BqC,EAAgBC,IAAqBtC,EAAAA,EAAAA,UAC1CuC,EAAAA,EAAmBC,OA6CrB,OA1CAC,EAAAA,EAAAA,GAAoBV,EAAiB,UAAWW,IAC1CA,EAAQZ,GACVQ,EAAkBC,EAAAA,EAAmBC,OAGnCE,GAASZ,GAAaY,GAAS,EAAIZ,GACrCQ,EAAkBC,EAAAA,EAAmBI,QAGnCD,EAAQ,EAAIZ,GACdQ,EAAkBC,EAAAA,EAAmBK,IACvC,KAGFtC,EAAAA,EAAAA,YAAU,KACR,MAAMC,EAAYV,EAAarB,QAC/B,IAAK+B,GAAWC,aAAe9C,EAAU,OAEzC,MAAM,YAAE8C,EAAW,YAAEC,GAAgBF,EACrC,GAAIC,GAAeC,EAIjB,OAHAyB,GAAW,QACXE,GAAS,GAKPC,IAAmBE,EAAAA,EAAmBC,QACxCN,GAAW,GACXE,GAAS,IAGPC,IAAmBE,EAAAA,EAAmBI,SACxCT,GAAW,GACXE,GAAS,IAGPC,IAAmBE,EAAAA,EAAmBK,KACxCR,GAAS,EACX,GAEC,CAAC1E,EAAU2E,IAEP,CAAEJ,UAASE,QAAO,E,6CC/B3B,MA2FA,GA3FkC/E,EAAAA,EAAAA,aAIhC,CAAAC,EAYEC,KACG,IAZH,SACEuF,EAAQ,UACRhE,EAAS,cACTiE,GAAgB,EAAK,aACrBC,EAAe,iCAAgC,UAC/CjB,EAAY,IAAI,UAChBkB,GAAY,EAAK,QACjBC,GAAU,EAAI,YACdC,EAAc,OAAM,gBACpBC,GAAkB,GACnB9F,EAGD,MAAMwC,GAAexB,EAAAA,EAAAA,QAAuB,OACtC,QAAE4D,EAAO,MAAEE,GAAUN,EACzBhC,EACAiC,EACAgB,GAcF,OAZAlD,EAAwBC,EAAciD,IAEtCxE,EAAAA,EAAAA,qBAAoBhB,GAAK,KAAM,CAC7BoE,SAAW0B,IACTvD,EAAarB,SAASkD,SAAS,CAC7BvB,KAAMiD,EACNzB,SAAU,UACV,EAEJ0B,eAAgBA,IAAMxD,EAAarB,SAAS8E,aAAe,MAI3D7E,MAAAC,cAAA,OAAKG,UAAWC,IAAWD,EAAW,aACpCJ,MAAAC,cAAC6E,EAAAA,EAAe,OACXtB,GAAWe,IACZvE,MAAAC,cAAC8E,EAAAA,EAAOC,KAAI,CACVC,QAAS,CAAEC,QAAS,GACpB9E,UAAWC,IACTiE,EACAG,EACA,mGAEFU,KAAM,CAAED,QAAS,GACjBE,QAAS,CAAEF,QAAS,GACpBG,WAAY,CAAEC,SAAU,QAK9BtF,MAAAC,cAAA,OACEpB,IAAKuC,EAELb,SAAU,EACVH,UAAWC,IACT,CACE,wBAAyBgE,EACzB,mBAAoBA,EACpB,oBAAqBK,GAEvB,wCAGDN,GAIHpE,MAAAC,cAAC6E,EAAAA,EAAe,MACZpB,GAASc,GACTxE,MAAAC,cAAC8E,EAAAA,EAAOC,KAAI,CACVC,QAAS,CAAEC,QAAS,GACpB9E,UAAWC,IACTiE,GAAgB,iCAChBG,EACA,oGAEFU,KAAM,CAAED,QAAS,GACjBE,QAAS,CAAEF,QAAS,GACpBG,WAAY,CAAEC,SAAU,QAI1B,G,6SC9FZ,MA6CA,EA7CiB1G,IAQe,IARd,kBAChB2G,EAAoB,GAAE,SACtBnB,EAAQ,UACRhE,EAAS,GACTpB,EAAK,WAAU,MACfwG,EAAQ,GAAE,iBACVC,GAAmB,KAChBC,GACsB9G,EACzB,OAAKwF,EAKHpE,MAAAC,cAAC0F,EAAAA,GAAMC,EAAA,CACL5G,GAAIA,EACJ6G,2BAA6BC,IACvBL,GAAyC,IAArBK,EAAOC,YAC7BpF,EAAAA,EAAAA,GAAgB,CACdC,MAAO,WACPC,aAAc,aACdC,UACEgF,EAAOE,cAAgBF,EAAOG,YAAc,OAAS,YAE3D,EAEFC,KAAM,CAAEC,SAAS,GACjB/F,UAAWA,EACXgG,WAAY,CACVD,UAAWX,EACXa,OAAQ,YAAYb,IACpBc,OAAQ,YAAYd,KAEtBe,SAAU,CACRJ,SAAS,EACTK,gBAAgB,GAElBC,QAAS,CAAKC,EAAAA,GAAMC,EAAAA,GAAUC,EAAAA,MAAgBrB,IAC1CG,GAEHtB,GA9BI,IA+BE,C,sLC3Cb,MA4JA,EA5JsBxF,IAUT,IAVU,cACrBiI,EAAa,QACbC,EAAO,MACPC,EAAK,SACLC,EAAQ,SACRC,EAAW,GAAE,KACbC,EAAI,WACJC,EAAU,SACVC,GAAW,EAAK,WAChBC,EAAa,uBACPzI,EACN,MAAO0I,EAAWC,IAAgBhG,EAAAA,EAAAA,WAAS,IACpCiG,EAAkBC,IAAuBlG,EAAAA,EAAAA,WAAS,IACnD,aAAEmG,IAAiBC,EAAAA,EAAAA,IAAsBC,IAAK,CAClDF,aAAcE,EAAMF,kBAEhB,mBAAEG,IAAuBnI,EAAAA,EAAAA,KAEzBoI,GAAoBC,EAAAA,EAAAA,cAAY,KAChCL,GACFH,GAAcS,IAAcA,GAC9B,GACC,CAACN,IAEJ,OAAON,EACLpH,MAAAC,cAAA,WACEG,UAAU,mEACVpB,GAAI,KAAKiI,IACT,cAAaI,GAEbrH,MAAAC,cAAA,OAAKG,UAAU,mBACbJ,MAAAC,cAAA,OAAKG,UAAU,gBACZsH,GACC1H,MAAAC,cAACgI,EAAAA,EAAa,CACZpB,cAAeA,EACfC,QAASA,EACToB,SAAUZ,EACVa,aAAcb,EACdc,aAAcA,IAAMb,GAAa,GACjCR,MAAOA,KAIb/G,MAAAC,cAAC6E,EAAAA,EAAe,MACZwC,GACAtH,MAAAC,cAAC8E,EAAAA,EAAOsD,IAAG,CACTjD,QAAS,CAAEF,QAAS,GACpBD,QAAS,CAAEC,QAAS,GACpBC,KAAM,CAAED,QAAS,GACjB9E,UAAU,8GAET+G,GACCnH,MAAAC,cAACqI,EAAAA,EAAK,CACJC,QAAQ,cACRC,QAAStB,GAAMuB,WAAWtB,WAC1BuB,MAAOvB,EACPwB,aAAa,sBACb,cAAa,GAAGtB,YAGpBrH,MAAAC,cAAA,UACE2I,KAAK,SACL,aAAYf,EACZtI,QAASA,IAAMmI,GAAgBH,GAAa,GAC5CnH,UAAU,oCACV,cAAa,GAAGiH,iBAEhBrH,MAAAC,cAAA,OAAKG,UAAU,+DACbJ,MAAAC,cAACc,EAAAA,EAAI,CAACC,KAAK,mBAAmBE,KAAK,eASjDlB,MAAAC,cAAA,WACEG,UAAU,8FACVpB,GAAI,KAAKiI,IACT,cAAaI,GAEbrH,MAAAC,cAAA,OAAKG,UAAU,UACbJ,MAAAC,cAAA,OAAKG,UAAU,wDACZ+G,GACCnH,MAAAC,cAAA,OACEG,UAAWC,IACT,8DACCmH,GAAoBL,EAAa,UAAY,aAEhD,cAAa,GAAGE,iBAEhBrH,MAAAC,cAACqI,EAAAA,EAAK,CACJC,QAAQ,sBACRI,aAAa,SACbD,MAAOvB,EACPqB,QAAStB,GAAMuB,WAAWtB,WAC1B,cAAa,GAAGE,YAGlBrH,MAAAC,cAAA,UACE2I,KAAK,SACLrJ,QAASA,KACHmI,GACFD,GAAqBO,IAAcA,GAAS,EAEhD5H,UAAU,0DACV,aAAYyH,EACZ,cAAa,GAAGR,iBAEhBrH,MAAAC,cAAA,OAAKG,UAAU,+DACbJ,MAAAC,cAACc,EAAAA,EAAI,CAACC,KAAK,mBAAmBE,KAAK,aAKzC6F,GAASC,IACThH,MAAAC,cAAA,OAAKG,UAAU,gFACZ2G,GACC/G,MAAAC,cAAA,KACEG,UAAU,KACV,gBAAe8G,GAAMuB,WAAW1B,MAChC,cAAa,GAAGM,WAEfN,GAGJC,GACChH,MAAAC,cAAA,KACEG,UAAU,4CACV,gBAAe8G,GAAMuB,WAAWzB,SAChC,cAAa,GAAGK,cAEfL,MAQbhH,MAAAC,cAAC4I,EAAAA,EAAU,CACTC,WAAY/B,EACZF,cAAeA,EACfC,QAASA,EACTiC,OAAQvB,EACRwB,aAAcvB,EACdwB,gBAAiBnB,EACjBoB,kCAAkC,EAClCC,aAAa,EACb9B,WAAY,GAAGA,kBAGpB,C,yGC1JH,MA+DA,EA/DyBzI,IASZ,IATa,cACxBwK,EAAgB,UAAS,cACzBC,EAAa,cACbC,EAAa,YACbC,EAAW,WACXlC,EAAa,oBAAmB,2BAChCmC,GAA6B,EAAK,WAClCC,GAAa,EAAI,YACjBC,EAAc,IACR9K,EACN,MAAM+K,GAAWC,EAAAA,EAAAA,GAAc,MAE/B,OACE5J,MAAAC,cAAA,OACEG,UAAWC,IAAW,CACpB,wDAAyDoJ,IAE3D,cAAapC,GAEbrH,MAAAC,cAAA,OAAKG,UAAU,oDACXoJ,GACAxJ,MAAAC,cAAA,KACEG,UAAWC,IACT,uBACAsJ,EAAW,YAAc,eAG1BJ,GAILvJ,MAAAC,cAAC4J,EAAAA,EAAS,CACR9K,UAAWmB,EAAAA,EAAwBC,KACnCnB,GAAIqK,EACJlK,cAAc,4CACdC,SAAUgK,EACVtK,8BAA+B,CAC7BgL,WAAYJ,EACZK,eAAgBT,KAInBE,GACCxJ,MAAAC,cAAA,KAAGG,UAAU,0CACVmJ,GAILvJ,MAAAC,cAAC4J,EAAAA,EAAS,CACR9K,UAAWmB,EAAAA,EAAwBI,MACnCtB,GAAIqK,EACJlK,cAAc,4CACdC,SAAUgK,EACVtK,8BAA+B,CAC7BgL,WAAYJ,EACZK,eAAgBT,MAIlB,C,+HC/DV,MAiDA,EAjDyB1K,IAMZ,IANa,SACxBoL,EAAQ,QACRzK,EAAO,KACP0K,EAAI,MACJC,EAAK,oBACLC,EAAsB,IAChBvL,EACN,MAAM+K,GAAWC,EAAAA,EAAAA,GAAc,MAE/B,OACE5J,MAAAC,cAAA,UACEM,SAAU,EACVhB,QAASA,EACTa,UAAWC,IACT,uKACA,CACE,4BAA6B2J,IAGjC/H,MAAO,IACD0H,EACA,CAAC,EACD,CACES,aAAcD,KAItBnK,MAAAC,cAAA,OAAKG,UAAU,2CACbJ,MAAAC,cAACc,EAAAA,EAAI,CACHC,KAAMiJ,EACNhJ,eAAe,+CAIlBiJ,GACClK,MAAAC,cAAA,OACES,IAAK,OAAOwJ,IACZ9J,UAAWC,IACT,8EACA2J,EAAW,cAAgB,kBAG7BhK,MAAAC,cAAA,OAAKG,UAAU,gCAAgC8J,IAG5C,E,sECzDb,MAGA,EAHuCG,GACrCA,EAAKC,WAAW,IAAK,K,0DCDvB,MAcA,EAdiC,SAC/BC,EACAC,GAEG,IADHtH,EAAwBuH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,SAE3BG,OAAO3H,SAAS,CACdC,WACAzB,KACG8I,EAAQM,wBAAwBpJ,KAAO,GACxCkB,SAASmI,KAAKD,wBAAwBpJ,IACtC+I,GAEN,E,wNCMyF,IAiB9EO,EAAe,SAAfA,GAAe,OAAfA,EAAe,cAAfA,EAAe,gBAAfA,CAAe,EAAfA,GAAe,IAK1B,MAqQA,EArQ4BnM,IAaf,IAbgB,KAC3BsI,EAAI,OACJ8D,EAAM,MACNC,EAAK,gBACLC,EAAe,WACfC,EAAa,GAAE,WACfC,EAAa,GAAE,UACfC,EAAY,GAAE,UACdC,EAAY,GAAE,SACdrE,EAAW,GAAE,MACbF,EAAK,SACLwE,EAAQ,YACRC,EAAc,KACR5M,EACN,MAAM6M,GAAW7B,EAAAA,EAAAA,GAAc,MACzBD,GAAWC,EAAAA,EAAAA,GAAc,MACxB8B,GAAiBC,MAAOC,KAAqBC,EAAAA,EAAAA,KAC9CzK,GAAexB,EAAAA,EAAAA,QAAuB,OAGrCkM,EAAWC,IAAgBxK,EAAAA,EAAAA,UAChCyJ,GAAQN,OAASK,EAAgBiB,OAASjB,EAAgBkB,QAErDC,EAAwBC,IAA6B5K,EAAAA,EAAAA,UAAS,GAC/D8H,EAAgB,wBAChB+C,EAA8B,GAAGF,KAA0BV,KAC/DR,GAAQN,QAAU,IAEd2B,EAAWpB,KAAWD,GAAQN,OAE9B4B,EAAUC,IACdR,EAAaQ,IACb5L,EAAAA,EAAAA,GAAgB,CACdC,MAAO,gBACPC,aAAc,0BACd2L,UAAWD,GACX,EAGJ,OAAKtB,GAAUD,GAAQN,OAGrB1K,MAAAC,cAAA,WACEjB,GAAI,KAAKiI,IACT7G,UAAU,+CACV,oBAAmB8G,GAAMuF,YACzB,cAAY,+BAEZzM,MAAAC,cAAA,OACEG,UAAWC,IAAW,YAAa,CACjC,4BAA6B0G,GAASwE,IAExC1M,IAAKuC,GAEJ2F,GAASwE,GACRvL,MAAAC,cAAA,OAAKG,UAAU,oJACbJ,MAAAC,cAAA,MACEG,UAAU,QACV,cAAY,qCAEXsM,EAA8B3F,IAEjC/G,MAAAC,cAAA,KACEG,UAAWC,IAAW,gBAAiBoL,EAAW,KAAO,MACzD,cAAY,wCAEXF,IAKPvL,MAAAC,cAAA,OACEG,UAAWC,IAAW,sCAAuC,CAC3D,WAAY0G,GAASwE,KAGtBO,IAAcf,EAAgBkB,OAC7BjM,MAAAC,cAAC8E,EAAAA,EAAOsD,IAAG,CACTjI,UAAU,4BACVgF,QAAS,CAAEF,QAAS,GACpBD,QAAS,CAAEC,QAAS,GACpBG,WAAY,CAAEC,SAAU,IACxBH,KAAM,CAAED,QAAS,IAEjBlF,MAAAC,cAAC0M,EAAAA,QAAa/G,EAAA,GAAKqF,EAAK,CAAE7D,UAAQ,MAIrC0E,IAAcf,EAAgBiB,QAC7BhM,MAAAC,cAAC8E,EAAAA,EAAOsD,IAAG,CACTjI,UAAU,SACVgF,QAAS,CAAEF,QAAS,GACpBD,QAAS,CAAEC,QAAS,GACpBG,WAAY,CAAEC,SAAU,IACxBH,KAAM,CAAED,QAAS,IAEjBlF,MAAAC,cAAA,OAAKG,UAAU,wBACbJ,MAAAC,cAAC2M,EAAAA,EAAQ,CACPrM,SAAU,EACVsM,cAAe,EACfC,MAAI,EACJtH,MAAO6D,EACP0D,cAAgBjH,IACdqG,EAA0BrG,EAAOC,UAAY,EAAE,EAEjD/G,GAAIqK,EACJ,cAAY,wCAEX2B,GAAQgC,KAAI,CAACtE,EAAOuE,IACnBjN,MAAAC,cAACiN,EAAAA,GAAW,CACVxM,IAAK,mBAAmBgI,EAAMyE,SAASC,MACvChN,UAAU,iDAEVJ,MAAAC,cAAA,OAAKG,UAAU,kDACbJ,MAAAC,cAACqI,EAAAA,EAAK,CACJI,MAAOA,EACPH,QAAQ,6BACRI,aAAa,+BACb0E,SAAoB,IAAVJ,EACV5F,WAAY,qCAAqC4F,UAMxD/B,GACClL,MAAAC,cAACqI,EAAAA,EAAK,CACJI,MAAOwC,EACP3C,QAAQ,SACRI,aAAa,uFACbtB,WAAW,kDAKjBrH,MAAAC,cAAA,OAAKG,UAAU,mGACbJ,MAAAC,cAAA,OACEqN,IAAI,iBACJC,IAAK,GAAGC,MACRpN,UAAU,wCASxBJ,MAAAC,cAAC6E,EAAAA,EAAe,KACbkG,GAAUA,GAAQN,OAAS,GAC1B1K,MAAAC,cAAC8E,EAAAA,EAAOsD,IAAG,CACTjI,UAAWC,IACT,yCACAyL,IAAcf,EAAgBiB,OAAS,SAAW,OAClD,CACE,cAAef,IAGnB7F,QAAS,CAAEF,QAAS,GACpBG,WAAY,CAAEC,SAAU,IACxBL,QAAS,CACPC,QAAS,IAGXlF,MAAAC,cAACwN,EAAAA,EAAgB,CACfpE,cAAeA,EACfC,cAAc,wBACdC,YAAa6C,EACbhD,cAAeqC,EAAW,SAAW,UACrC/B,YAAa3C,EACbM,WAAW,6CAMnBrH,MAAAC,cAAC6E,EAAAA,EAAe,KACbuH,GACCrM,MAAAC,cAAC8E,EAAAA,EAAOsD,IAAG,CACTjD,QAAS,CAAEF,QAAS,GACpBG,WAAY,CAAEC,SAAU,IACxBL,QAAS,CACPC,QACE0G,EAAkB,GAAwB,IAAnBZ,GAAQN,QAAgBe,EAAW,EAAI,IAGlEzL,MAAAC,cAACyN,EAAAA,EAAyB,CAACtN,UAAU,kBACnCJ,MAAAC,cAAA,OACEG,UAAU,6DACV,cAAY,2CAEX6K,GACCjL,MAAAC,cAAA,OAAKG,UAAU,uBACbJ,MAAAC,cAAC0N,EAAgB,CACfpO,QAASA,KACP4M,EAA0B,GAC1BG,EAAOvB,EAAgBkB,OACnBtC,GACFiE,EACExM,EAAarB,QACb,IAEJ,EAEFmK,MAAOiB,EACPlB,KAAMoB,EACNrB,SAAU8B,IAAcf,EAAgBkB,SAK7CjB,GACChL,MAAAC,cAAA,OAAKG,UAAU,gCACbJ,MAAAC,cAAC0N,EAAgB,CACfpO,QAASA,KACP+M,EAAOvB,EAAgBiB,QACnBrC,GACFiE,EACExM,EAAarB,QACb,IAEJ,EAEFmK,MAAOkB,EACPnB,KAAMqB,EACNtB,SAAU8B,IAAcf,EAAgBiB,OACxC7B,oBACEa,GAAQN,OAAS,GACjBoB,IAAcf,EAAgBiB,OAC1BJ,EAAkB,GAClB,KAIPZ,GAAQN,OAAS,GAChBoB,IAAcf,EAAgBiB,QAC5BhM,MAAAC,cAAA,OACEpB,IAAK6M,EACLtL,UAAU,sEAEVJ,MAAAC,cAACwN,EAAAA,EAAgB,CACfpE,cAAeA,EACfC,cAAc,wBACdC,YAAa6C,EACb5C,4BAA0B,EAC1BE,YAAa3C,EACb0C,YAAY,WA/MA,IA0N1B,C,oDCzSTvJ,EAAuB,SAAvBA,GAAuB,OAAvBA,EAAuB,YAAvBA,EAAuB,cAAvBA,CAAuB,EAAvBA,GAAuB,IAK5B,S,oDCLK4D,EAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,cAAlBA,EAAkB,gBAAlBA,EAAkB,UAAlBA,CAAkB,EAAlBA,GAAkB,IAMvB,S,+CCCA,MAKA,GAL6B+J,E,SAAAA,IAA4BC,IAAG,CAC1DpG,cAAc,EACdqG,gBAAkBrG,GAA0BoG,EAAI,CAAEpG,oB,+DCPpD,MAwBA,EAxBuBsG,IAKrB,MAAOC,EAAeC,IAAoB3M,EAAAA,EAAAA,YAEpC4M,GAAUpG,EAAAA,EAAAA,cAAY,KAC1B,MAAMqG,EAAiBxD,OAAOyD,WAAaL,EAC3CE,EAAiBE,EAAe,GAC/B,CAACJ,IAWJ,OATAnM,EAAAA,EAAAA,YAAU,KACR+I,OAAO9H,iBAAiB,SAAUqL,GAClCA,IAEO,KACLvD,OAAOhI,oBAAoB,SAAUuL,EAAQ,IAE9C,CAACA,IAEGF,CAAa,C,+DCrBtB,MA4CA,EA5C0BpC,KACxB,MAAMyC,GAAc1O,EAAAA,EAAAA,WACb2O,EAAkBC,IAAuBjN,EAAAA,EAAAA,UAAS,CACvDoK,MAAO,EACP8C,OAAQ,EACR1M,YAAa,EACb2M,aAAc,EACd1M,YAAa,EACb2M,aAAc,IAGVC,GAAe7G,EAAAA,EAAAA,cAAa8G,IAChC,IAAKC,MAAMC,QAAQF,GAAU,OAE7B,MAAMG,EAAQH,EAAQ,GAEtBL,EAAoB,CAClB7C,MAAOqD,GAAOC,YAAYtD,OAAS,EACnC8C,OAAQO,GAAOC,YAAYR,QAAU,EACrC1M,YAAaiN,GAAOE,OAAOnN,aAAe,EAC1C2M,aAAcM,GAAOE,OAAOR,cAAgB,EAC5C1M,YAAagN,GAAOE,OAAOlN,aAAe,EAC1C2M,aAAcK,GAAOE,OAAOP,cAAgB,GAC5C,GACD,IAiBH,MAAO,EAfK5G,EAAAA,EAAAA,cACToH,IACKb,EAAYvO,UAAYoP,IAC1Bb,EAAYvO,QAAQqP,aACpBd,EAAYvO,aAAU4K,IAGnB2D,EAAYvO,SAAWoP,IAC1Bb,EAAYvO,QAAU,IAAIsP,eAAeT,GACzCN,EAAYvO,QAAQuP,QAAQH,GAC9B,GAEF,CAACP,IAGUL,EAAiB,C,YC3ChCgB,EAAOC,QAAU,qtC","sources":["webpack://nikon-client/./components/atoms/NavButton/NavButton.tsx","webpack://nikon-client/./utility/hooks/useHorizontalGrabScroll.ts","webpack://nikon-client/./utility/hooks/useHorizontalScrollShadows.ts","webpack://nikon-client/./components/atoms/ShadowContainerHorizontal/ShadowContainerHorizontal.tsx","webpack://nikon-client/./components/molecules/Carousel/Carousel.tsx","webpack://nikon-client/./components/molecules/EmbeddedVideo/EmbeddedVideo.tsx","webpack://nikon-client/./components/molecules/PaginationArrows/PaginationArrows.tsx","webpack://nikon-client/./components/atoms/GalleryTabButton/GalleryTabButton.tsx","webpack://nikon-client/./utility/helpers/replaceWithNonBreakingHyphens.ts","webpack://nikon-client/./utility/helpers/scrollIntoViewWithOffset.ts","webpack://nikon-client/./components/organisms/ProductImageGallery/ProductImageGallery.tsx","webpack://nikon-client/./models/enums/HorizontalDirectionEnum.ts","webpack://nikon-client/./models/enums/ScrollProgressEnum.ts","webpack://nikon-client/./state-management/CookieStatusStore.ts","webpack://nikon-client/./utility/hooks/useMediaQuery.ts","webpack://nikon-client/./utility/hooks/useResizeObserver.ts","webpack://nikon-client/./assets/hue_hero.svg"],"sourcesContent":["import Icon from '@atoms/Icon/Icon';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { forwardRef, KeyboardEvent, useImperativeHandle, useRef } from 'react';\n\ninterface Props {\n readonly direction:\n | HorizontalDirectionEnum.Left\n | HorizontalDirectionEnum.Right;\n readonly id?: string;\n readonly disabled?: boolean;\n readonly hasBackgroundColor?: boolean;\n readonly sizeClassName?: string;\n readonly iconSize?: string;\n readonly enabledArrowColor?: string;\n readonly onClick?: (e?: KeyboardEvent) => void;\n readonly additionalDataLayerProperties?: Record;\n readonly isLightMode?: boolean;\n}\n\nexport interface NavButtonRef {\n focus: () => void;\n disabled: boolean;\n}\n\nconst NavButton = forwardRef(\n (\n {\n additionalDataLayerProperties,\n direction,\n id,\n disabled = false,\n hasBackgroundColor = true,\n sizeClassName = 'h-10 w-10',\n iconSize,\n enabledArrowColor = 'text-black-100',\n isLightMode,\n onClick,\n },\n ref\n ) => {\n const { nextAriaLabel, previousAriaLabel } = useAriaLabels();\n const buttonRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n focus: () => buttonRef.current?.focus(),\n disabled: !!buttonRef.current?.disabled,\n }));\n\n return (\n {\n if (e.key === 'Enter') onClick?.(e);\n }}\n onClick={() => {\n onClick?.();\n updateDataLayer({\n event: 'carousel',\n content_type: 'tab_change',\n link_text:\n direction === HorizontalDirectionEnum.Left ? 'Previous' : 'Next',\n ...additionalDataLayerProperties,\n });\n }}\n >\n \n \n );\n }\n);\n\nexport default NavButton;\n","import { RefObject, useEffect, useRef, useState } from 'react';\n\nconst useHorizontalGrabScroll = (\n containerRef: RefObject,\n disabled: boolean\n) => {\n const [isMouseDown, setIsMouseDown] = useState(false);\n const mouseScrollPosition = useRef<{\n top: number;\n left: number;\n x: number;\n y: number;\n }>({\n top: 0,\n left: 0,\n x: 0,\n y: 0,\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container?.clientWidth) return;\n\n if (container.clientWidth >= container.scrollWidth || disabled) {\n container.style.cursor = 'inherit';\n return;\n }\n\n if (isMouseDown) {\n container.style.cursor = 'grabbing';\n return;\n }\n\n container.style.cursor = 'grab';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMouseDown, disabled]);\n\n useEffect(() => {\n mouseScrollPosition.current = { top: 0, left: 0, x: 0, y: 0 };\n const container = containerRef.current;\n\n if (!container) return () => ({});\n if (disabled) {\n container.scrollTop = 0;\n container.scrollLeft = 0;\n\n return () => ({});\n }\n\n const mouseMoveHandler = (e: MouseEvent) => {\n const dx = e.clientX - mouseScrollPosition.current.x;\n const dy = e.clientY - mouseScrollPosition.current.y;\n\n container.scrollTop = mouseScrollPosition.current.top - dy;\n container.scrollLeft = mouseScrollPosition.current.left - dx;\n };\n\n const mouseUpHandler = () => {\n document.removeEventListener('mousemove', mouseMoveHandler);\n document.removeEventListener('mouseup', mouseUpHandler);\n setIsMouseDown(false);\n };\n\n const mouseDownHandler = (e: MouseEvent) => {\n mouseScrollPosition.current = {\n top: container.scrollTop,\n left: container.scrollLeft,\n x: e.clientX,\n y: e.clientY,\n };\n setIsMouseDown(true);\n\n document.addEventListener('mousemove', mouseMoveHandler);\n document.addEventListener('mouseup', mouseUpHandler);\n };\n\n const onWheel = (e: WheelEvent) => {\n if (e.deltaY === 0) return;\n\n container.scrollTo({\n left: container.scrollLeft + e.deltaY,\n behavior: 'smooth',\n });\n };\n\n container.addEventListener('mousedown', mouseDownHandler);\n container.addEventListener('wheel', onWheel, { passive: true });\n\n return () => {\n container.removeEventListener('mousedown', mouseDownHandler);\n container.removeEventListener('wheel', onWheel);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled]);\n};\n\nexport default useHorizontalGrabScroll;\n","import ScrollProgressEnum from '@models/enums/ScrollProgressEnum';\nimport { useMotionValueEvent, useScroll } from 'framer-motion';\nimport { RefObject, useEffect, useState } from 'react';\n\nconst useHorizontalScrollShadows = (\n containerRef: RefObject,\n threshold: number,\n disabled: boolean\n) => {\n const { scrollXProgress } = useScroll({ container: containerRef });\n const [isStart, setIsStart] = useState(true);\n const [isEnd, setIsEnd] = useState(false);\n const [scrollProgress, setScrollProgress] = useState(\n ScrollProgressEnum.Start\n );\n\n useMotionValueEvent(scrollXProgress, 'change', (value: number) => {\n if (value < threshold) {\n setScrollProgress(ScrollProgressEnum.Start);\n }\n\n if (value >= threshold && value <= 1 - threshold) {\n setScrollProgress(ScrollProgressEnum.Middle);\n }\n\n if (value > 1 - threshold) {\n setScrollProgress(ScrollProgressEnum.End);\n }\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container?.clientWidth || disabled) return;\n\n const { clientWidth, scrollWidth } = container;\n if (clientWidth >= scrollWidth) {\n setIsStart(true);\n setIsEnd(true);\n\n return;\n }\n\n if (scrollProgress === ScrollProgressEnum.Start) {\n setIsStart(true);\n setIsEnd(false);\n }\n\n if (scrollProgress === ScrollProgressEnum.Middle) {\n setIsStart(false);\n setIsEnd(false);\n }\n\n if (scrollProgress === ScrollProgressEnum.End) {\n setIsEnd(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, scrollProgress]);\n\n return { isStart, isEnd };\n};\n\nexport default useHorizontalScrollShadows;\n","import useHorizontalGrabScroll from '@utils/hooks/useHorizontalGrabScroll';\nimport useHorizontalScrollShadows from '@utils/hooks/useHorizontalScrollShadows';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport {\n PropsWithChildren,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nexport interface IShadowContainerHorizontalRef {\n readonly scrollTo: (offset: number) => void;\n readonly getOffsetWidth: () => number;\n}\n\ninterface Props {\n readonly className?: string;\n readonly shadowColour?: string;\n readonly threshold?: number;\n readonly showStart?: boolean; // Manually override shadows from a parent component\n readonly showEnd?: boolean;\n readonly disableScroll?: boolean; // Used together with showStart/showEnd to disable scrolling within the container (e.g. when we want to wrap a carousel within some left/right shadows, we want to use the carousel's scrolling/swiping, not the container's one)\n readonly shadowWidth?: string;\n readonly isNoWrapEnabled?: boolean;\n}\n\nconst ShadowContainerHorizontal = forwardRef<\n IShadowContainerHorizontalRef,\n PropsWithChildren\n>(\n (\n {\n children,\n className,\n disableScroll = false,\n shadowColour = 'from-white dark:from-black-100',\n threshold = 0.05,\n showStart = false,\n showEnd = true,\n shadowWidth = 'w-10',\n isNoWrapEnabled = true,\n },\n ref\n ) => {\n const containerRef = useRef(null);\n const { isStart, isEnd } = useHorizontalScrollShadows(\n containerRef,\n threshold,\n disableScroll\n );\n useHorizontalGrabScroll(containerRef, disableScroll);\n\n useImperativeHandle(ref, () => ({\n scrollTo: (leftOffset: number) => {\n containerRef.current?.scrollTo({\n left: leftOffset,\n behavior: 'smooth',\n });\n },\n getOffsetWidth: () => containerRef.current?.offsetWidth ?? 0,\n }));\n\n return (\n
\n \n {(!isStart || showStart) && (\n \n )}\n \n\n \n {children}\n
\n\n {/* isEnd is always false when using showEnd override so !isEnd is always true */}\n \n {!isEnd && showEnd && (\n \n )}\n \n \n );\n }\n);\n\nexport default ShadowContainerHorizontal;\n","import updateDataLayer from '@utils/helpers/gtm';\nimport { PropsWithChildren } from 'react';\nimport { A11y, Keyboard, Navigation } from 'swiper/modules';\nimport { Swiper, SwiperProps } from 'swiper/react';\nimport 'swiper/scss';\nimport 'swiper/scss/a11y';\nimport 'swiper/scss/autoplay';\nimport 'swiper/scss/effect-fade';\nimport 'swiper/scss/keyboard';\nimport { SwiperModule } from 'swiper/types';\n\ninterface Props extends SwiperProps {\n readonly additionalModules?: SwiperModule[];\n readonly className?: string;\n readonly id?: string;\n readonly navId?: string;\n readonly analyticsEnabled?: boolean;\n}\n\nconst Carousel = ({\n additionalModules = [],\n children,\n className,\n id = 'carousel',\n navId = '',\n analyticsEnabled = false,\n ...props\n}: PropsWithChildren) => {\n if (!children) {\n return null;\n }\n\n return (\n {\n if (analyticsEnabled && swiper.realIndex !== 0) {\n updateDataLayer({\n event: 'carousel',\n content_type: `tab_change`,\n link_text:\n swiper.previousIndex < swiper.activeIndex ? 'Next' : 'Previous',\n });\n }\n }}\n a11y={{ enabled: true }}\n className={className}\n navigation={{\n enabled: !!navId,\n prevEl: `#prevBtn-${navId}`,\n nextEl: `#nextBtn-${navId}`,\n }}\n keyboard={{\n enabled: true,\n onlyInViewport: true,\n }}\n modules={[...[A11y, Keyboard, Navigation], ...additionalModules]}\n {...props}\n >\n {children}\n \n );\n};\n\nexport default Carousel;\n","import Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport IExternalVideo from '@models/IExternalVideo';\nimport ExternalVideo from '@molecules/ExternalVideo/ExternalVideo';\nimport VideoModal from '@molecules/VideoModal/VideoModal';\nimport useCookieStatusStore from '@state/CookieStatusStore';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useCallback, useState } from 'react';\n\ninterface Props extends IExternalVideo {\n readonly anchorId?: string;\n readonly embedded?: boolean;\n readonly dataTestId?: string;\n}\n\nconst EmbeddedVideo = ({\n videoProvider,\n videoId,\n title,\n subTitle,\n anchorId = '',\n meta,\n coverImage,\n embedded = false,\n dataTestId = 'CT-10-A-Video-Embed',\n}: Props) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [isVideoModalOpen, setIsVideoModalOpen] = useState(false);\n const { cookieStatus } = useCookieStatusStore((state) => ({\n cookieStatus: state.cookieStatus,\n }));\n const { playVideoAriaLabel } = useAriaLabels();\n\n const onVideoModalClose = useCallback(() => {\n if (cookieStatus) {\n setIsPlaying((oldState) => !oldState);\n }\n }, [cookieStatus]);\n\n return embedded ? (\n \n
\n
\n {cookieStatus && (\n setIsPlaying(false)}\n title={title}\n />\n )}\n
\n \n {!isPlaying && (\n \n {coverImage && (\n \n )}\n cookieStatus && setIsPlaying(true)}\n className=\"absolute bottom-2.5 left-2.5 z-10\"\n data-testid={`${dataTestId}-Play-Button`}\n >\n
\n \n
\n \n \n )}\n
\n
\n \n ) : (\n \n
\n
\n {coverImage && (\n \n \n\n {\n if (cookieStatus)\n setIsVideoModalOpen((oldState) => !oldState);\n }}\n className=\"absolute bottom-2.5 left-2.5 z-10 md:bottom-5 md:left-5\"\n aria-label={playVideoAriaLabel}\n data-testid={`${dataTestId}-Play-Button`}\n >\n
\n \n
\n \n
\n )}\n {(title || subTitle) && (\n
\n {title && (\n \n {title}\n

\n )}\n {subTitle && (\n \n {subTitle}\n

\n )}\n
\n )}\n
\n \n\n \n \n );\n};\n\nexport default EmbeddedVideo;\n","import NavButton from '@atoms/NavButton/NavButton';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport classNames from 'classnames';\n\ninterface Props {\n readonly arrowIconSize?: string;\n readonly carouselNavId: string;\n readonly componentName: string;\n readonly counterText: string;\n readonly dataTestId?: string;\n readonly isCounterTextBetweenArrows?: boolean;\n readonly hasWrapper?: boolean;\n readonly productName?: string;\n}\n\nconst PaginationArrows = ({\n arrowIconSize = '1.05rem',\n carouselNavId,\n componentName,\n counterText,\n dataTestId = 'Pagination-Arrows',\n isCounterTextBetweenArrows = false,\n hasWrapper = true,\n productName = '',\n}: Props) => {\n const isMobile = useMediaQuery(1024);\n\n return (\n \n
\n {!isCounterTextBetweenArrows && (\n \n {counterText}\n

\n )}\n\n \n\n {isCounterTextBetweenArrows && (\n \n )}\n\n \n
\n \n );\n};\n\nexport default PaginationArrows;\n","import Icon from '@atoms/Icon/Icon';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport classNames from 'classnames';\n\ninterface Props {\n readonly isActive: boolean;\n readonly onClick: () => void;\n readonly icon: string;\n readonly label: string;\n readonly rightDesktopPadding?: number;\n}\n\nconst GalleryTabButton = ({\n isActive,\n onClick,\n icon,\n label,\n rightDesktopPadding = 15,\n}: Props) => {\n const isMobile = useMediaQuery(1024);\n\n return (\n \n
\n \n
\n\n {label && (\n \n
{label}
\n \n )}\n \n );\n};\n\nexport default GalleryTabButton;\n","const replaceWithNonBreakingHyphens = (text: string) =>\n text.replaceAll('-', '‑');\n\nexport default replaceWithNonBreakingHyphens;\n","const scrollIntoViewWithOffset = (\n element: HTMLElement,\n offset: number,\n behavior: ScrollBehavior = 'smooth'\n) => {\n window.scrollTo({\n behavior,\n top:\n (element.getBoundingClientRect().top ?? 0) -\n document.body.getBoundingClientRect().top -\n offset,\n });\n};\n\nexport default scrollIntoViewWithOffset;\n","import Hue from '@assets/hue_hero.svg';\nimport GalleryTabButton from '@atoms/GalleryTabButton/GalleryTabButton';\nimport Image from '@atoms/Image/Image';\nimport ShadowContainerHorizontal from '@atoms/ShadowContainerHorizontal/ShadowContainerHorizontal';\nimport IExternalVideo from '@models/IExternalVideo';\nimport { IImage } from '@models/IImage';\nimport { IMeta } from '@models/IMeta';\nimport Carousel from '@molecules/Carousel/Carousel';\nimport EmbeddedVideo from '@molecules/EmbeddedVideo/EmbeddedVideo';\nimport PaginationArrows from '@molecules/PaginationArrows/PaginationArrows';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport replaceWithNonBreakingHyphens from '@utils/helpers/replaceWithNonBreakingHyphens';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useRef, useState } from 'react';\nimport { SwiperSlide } from 'swiper/react';\nimport scrollIntoViewWithOffset from '../../../utility/helpers/scrollIntoViewWithOffset';\n\ninterface Props {\n readonly meta?: IMeta;\n readonly images?: IImage[];\n readonly video?: IExternalVideo;\n readonly backgroundImage?: IImage;\n readonly videoLabel?: string;\n readonly imageLabel?: string;\n readonly videoIcon?: string;\n readonly imageIcon?: string;\n readonly anchorId?: string;\n readonly title?: string;\n readonly subtitle?: string;\n readonly dividerText?: string;\n}\n\nconst enum GalleryTabsEnum {\n Video = 'video',\n Images = 'images',\n}\n\nconst ProductImageGallery = ({\n meta,\n images,\n video,\n backgroundImage,\n videoLabel = '',\n imageLabel = '',\n videoIcon = '',\n imageIcon = '',\n anchorId = '',\n title,\n subtitle,\n dividerText = '/',\n}: Props) => {\n const isTablet = useMediaQuery(1024);\n const isMobile = useMediaQuery(768);\n const [paginationRef, { width: paginationWidth }] = useResizeObserver();\n const containerRef = useRef(null);\n\n // When 3D is implemented, tab must be called 'view_3d' to integrate with Nikon GA\n const [activeTab, setActiveTab] = useState(\n images?.length ? GalleryTabsEnum.Images : GalleryTabsEnum.Video\n );\n const [currentImageSlideIndex, setCurrentImageSlideIndex] = useState(1);\n const carouselNavId = 'product-image-gallery';\n const imagesPaginationCounterText = `${currentImageSlideIndex} ${dividerText} ${\n images?.length ?? 0\n }`;\n const showTabs = video && !!images?.length;\n\n const setTab = (tab: GalleryTabsEnum) => {\n setActiveTab(tab);\n updateDataLayer({\n event: 'selectContent',\n content_type: 'product_image_side_menu',\n selection: tab,\n });\n };\n\n if (!video && !images?.length) return null;\n\n return (\n \n \n {title && subtitle && (\n
\n \n {replaceWithNonBreakingHyphens(title)}\n \n \n {subtitle}\n

\n
\n )}\n\n \n {activeTab === GalleryTabsEnum.Video && (\n \n \n \n )}\n\n {activeTab === GalleryTabsEnum.Images && (\n \n
\n {\n setCurrentImageSlideIndex(swiper.realIndex + 1);\n }}\n id={carouselNavId}\n data-testid=\"CT-14-Product-Image-Gallery-Carousel\"\n >\n {images?.map((image, index) => (\n \n
\n \n
\n \n ))}\n\n {backgroundImage && (\n \n )}\n \n\n
\n \n
\n
\n \n )}\n \n \n\n \n {images && images?.length > 1 && (\n \n \n \n )}\n \n\n \n {showTabs && (\n 0 || images?.length === 1 || isTablet ? 1 : 0,\n }}\n >\n \n \n {video && (\n
\n {\n setCurrentImageSlideIndex(1);\n setTab(GalleryTabsEnum.Video);\n if (isMobile) {\n scrollIntoViewWithOffset(\n containerRef.current as HTMLElement,\n 120\n );\n }\n }}\n label={videoLabel}\n icon={videoIcon}\n isActive={activeTab === GalleryTabsEnum.Video}\n />\n
\n )}\n\n {images && (\n
\n {\n setTab(GalleryTabsEnum.Images);\n if (isMobile) {\n scrollIntoViewWithOffset(\n containerRef.current as HTMLElement,\n 120\n );\n }\n }}\n label={imageLabel}\n icon={imageIcon}\n isActive={activeTab === GalleryTabsEnum.Images}\n rightDesktopPadding={\n images?.length > 1 &&\n activeTab === GalleryTabsEnum.Images\n ? paginationWidth + 45\n : 15\n }\n />\n\n {images?.length > 1 &&\n activeTab === GalleryTabsEnum.Images && (\n \n \n
\n )}\n \n )}\n \n
\n \n )}\n
\n \n );\n};\n\nexport default ProductImageGallery;\n","enum HorizontalDirectionEnum {\n Left = 'LEFT',\n Right = 'RIGHT',\n}\n\nexport default HorizontalDirectionEnum;\n","enum ScrollProgressEnum {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nexport default ScrollProgressEnum;\n","import create from 'zustand';\n\ninterface ICookieStatusState {\n readonly cookieStatus: boolean;\n readonly setCookieStatus: (cookieStatus: boolean) => void;\n}\n\nconst useCookieStatusStore = create((set) => ({\n cookieStatus: false,\n setCookieStatus: (cookieStatus: boolean) => set({ cookieStatus }),\n}));\n\nexport default useCookieStatusStore;\n","import { useCallback, useEffect, useState } from 'react';\n\nconst useMediaQuery = (minWidth: number) => {\n // Set the default value to undefined in order to properly distinguish the falsey values\n // where undefined is the value before computing whether the screen size is smaller than the minWidth\n // i.e. a state where we don't really know whether we're below the threshold or not\n // and false is the value where the computation returns false\n const [isSmallerThan, setIsSmallerThan] = useState();\n\n const handler = useCallback(() => {\n const isDesiredWidth = window.innerWidth < minWidth;\n setIsSmallerThan(isDesiredWidth);\n }, [minWidth]);\n\n useEffect(() => {\n window.addEventListener('resize', handler);\n handler();\n\n return () => {\n window.removeEventListener('resize', handler);\n };\n }, [handler]);\n\n return isSmallerThan;\n};\n\nexport default useMediaQuery;\n","import { useCallback, useRef, useState } from 'react';\n\nconst useResizeObserver = () => {\n const observerRef = useRef();\n const [resizeParameters, setResizeParameters] = useState({\n width: 0,\n height: 0,\n clientWidth: 0,\n clientHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n if (!Array.isArray(entries)) return;\n\n const entry = entries[0];\n\n setResizeParameters({\n width: entry?.contentRect.width ?? 0,\n height: entry?.contentRect.height ?? 0,\n clientWidth: entry?.target.clientWidth ?? 0,\n clientHeight: entry?.target.clientHeight ?? 0,\n scrollWidth: entry?.target.scrollWidth ?? 0,\n scrollHeight: entry?.target.scrollHeight ?? 0,\n });\n }, []);\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n if (observerRef.current && !node) {\n observerRef.current.disconnect();\n observerRef.current = undefined;\n }\n\n if (!observerRef.current && node) {\n observerRef.current = new ResizeObserver(handleResize);\n observerRef.current.observe(node);\n }\n },\n [handleResize]\n );\n\n return [ref, resizeParameters] as const;\n};\n\nexport default useResizeObserver;\n","module.exports = \"data:image/svg+xml,%3csvg width='1151' height='1150' viewBox='0 0 1151 1150' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cg opacity='0.35' filter='url(%23filter0_df_4014_178052)'%3e %3cpath d='M801 575C801 699.264 700.04 800 575.5 800C450.96 800 350 699.264 350 575C350 450.736 450.96 350 575.5 350C700.04 350 801 450.736 801 575Z' fill='%23FFDD00'/%3e %3c/g%3e %3cdefs%3e %3cfilter id='filter0_df_4014_178052' x='0' y='0' width='1151' height='1150' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3e %3cfeFlood flood-opacity='0' result='BackgroundImageFix'/%3e %3cfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3e %3cfeOffset dy='1.66516'/%3e %3cfeGaussianBlur stdDeviation='0.832579'/%3e %3cfeComposite in2='hardAlpha' operator='out'/%3e %3cfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3e %3cfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_4014_178052'/%3e %3cfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_4014_178052' result='shape'/%3e %3cfeGaussianBlur stdDeviation='175' result='effect2_foregroundBlur_4014_178052'/%3e %3c/filter%3e %3c/defs%3e %3c/svg%3e\""],"names":["forwardRef","_ref","ref","additionalDataLayerProperties","direction","id","disabled","hasBackgroundColor","sizeClassName","iconSize","enabledArrowColor","isLightMode","onClick","nextAriaLabel","previousAriaLabel","useAriaLabels","buttonRef","useRef","useImperativeHandle","focus","current","React","createElement","HorizontalDirectionEnum","Left","className","classNames","Right","tabIndex","onKeyDown","e","key","updateDataLayer","event","content_type","link_text","Icon","name","colorClassName","size","useHorizontalGrabScroll","containerRef","isMouseDown","setIsMouseDown","useState","mouseScrollPosition","top","left","x","y","useEffect","container","clientWidth","scrollWidth","style","cursor","scrollTop","scrollLeft","mouseMoveHandler","dx","clientX","dy","clientY","mouseUpHandler","document","removeEventListener","mouseDownHandler","addEventListener","onWheel","deltaY","scrollTo","behavior","passive","useHorizontalScrollShadows","threshold","scrollXProgress","useScroll","isStart","setIsStart","isEnd","setIsEnd","scrollProgress","setScrollProgress","ScrollProgressEnum","Start","useMotionValueEvent","value","Middle","End","children","disableScroll","shadowColour","showStart","showEnd","shadowWidth","isNoWrapEnabled","leftOffset","getOffsetWidth","offsetWidth","AnimatePresence","motion","span","animate","opacity","exit","initial","transition","duration","additionalModules","navId","analyticsEnabled","props","Swiper","_extends","onSlideChangeTransitionEnd","swiper","realIndex","previousIndex","activeIndex","a11y","enabled","navigation","prevEl","nextEl","keyboard","onlyInViewport","modules","A11y","Keyboard","Navigation","videoProvider","videoId","title","subTitle","anchorId","meta","coverImage","embedded","dataTestId","isPlaying","setIsPlaying","isVideoModalOpen","setIsVideoModalOpen","cookieStatus","useCookieStatusStore","state","playVideoAriaLabel","onVideoModalClose","useCallback","oldState","ExternalVideo","autoPlay","isInvisible","onEndedVideo","div","Image","classes","epiEdit","editHints","image","imageClasses","type","VideoModal","videoTitle","isOpen","onOpenChange","onCloseCallback","shouldCloseOnClickOutsideContent","transparent","arrowIconSize","carouselNavId","componentName","counterText","isCounterTextBetweenArrows","hasWrapper","productName","isMobile","useMediaQuery","NavButton","product_id","component_name","isActive","icon","label","rightDesktopPadding","paddingRight","text","replaceAll","element","offset","arguments","length","undefined","window","getBoundingClientRect","body","GalleryTabsEnum","images","video","backgroundImage","videoLabel","imageLabel","videoIcon","imageIcon","subtitle","dividerText","isTablet","paginationRef","width","paginationWidth","useResizeObserver","activeTab","setActiveTab","Images","Video","currentImageSlideIndex","setCurrentImageSlideIndex","imagesPaginationCounterText","showTabs","setTab","tab","selection","contentLink","replaceWithNonBreakingHyphens","EmbeddedVideo","Carousel","slidesPerView","loop","onSlideChange","map","index","SwiperSlide","desktop","url","lazyLoad","alt","src","Hue","PaginationArrows","ShadowContainerHorizontal","GalleryTabButton","scrollIntoViewWithOffset","create","set","setCookieStatus","minWidth","isSmallerThan","setIsSmallerThan","handler","isDesiredWidth","innerWidth","observerRef","resizeParameters","setResizeParameters","height","clientHeight","scrollHeight","handleResize","entries","Array","isArray","entry","contentRect","target","node","disconnect","ResizeObserver","observe","module","exports"],"sourceRoot":""}