{"version":3,"file":"productdetails.bundle.js","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/create fake namespace object","webpack:///webpack/runtime/load script","webpack:///webpack/runtime/css loading","webpack:///./node_modules/lozad/dist/lozad.min.js","webpack:///./node_modules/smoothscroll-polyfill/dist/smoothscroll.js","webpack:///./node_modules/swiper/modules/thumbs/thumbs.js","webpack:///./node_modules/swiper/modules/a11y/a11y.js","webpack:///./components/general_carousel/GeneralCarousel.tsx","webpack:///./node_modules/react-intersection-observer/react-intersection-observer.modern.mjs","webpack:///./components/pdp/PdpEventBus.tsx","webpack:///./components/shopping_bag/utils/analyticsEvents.tsx","webpack:///./components/shopping_bag/hooks/useCart.tsx","webpack:///./components/shopping_bag/utils/isBagEmpty.tsx","webpack:///./components/ui/sheet.tsx","webpack:///./components/add_to_bag/components/FreeShippingEarned.tsx","webpack:///./components/add_to_bag/components/FreeShippingProgress.tsx","webpack:///./components/add_to_bag/i18n.ts","webpack:///./components/add_to_bag/components/ItemCard.tsx","webpack:///./components/add_to_bag/add-to-bag.component.tsx","webpack:///./external/service/findmine.service.ts","webpack:///./components/findmine/FindmineCarousel.tsx","webpack:///./components/findmine/Findmine.tsx","webpack:///./components/truefit_pdp/truefit-pdp.component.tsx","webpack:///./tscapi/model/product.ts","webpack:///./components/pdp/i18n.ts","webpack:///./components/pdp/PdpAdvanceOrder.tsx","webpack:///./components/pdp/PdpEasyPayButton.tsx","webpack:///./components/pdp/PdpFreeShippingItemNo.tsx","webpack:///./components/common/use-previous.tsx","webpack:///./components/common/portal.tsx","webpack:///./components/pdp/PdpName.tsx","webpack:///./components/pdp/PdpPrice.tsx","webpack:///./components/pdp/PdpSticky.tsx","webpack:///./components/pdp/PdpDescription.tsx","webpack:///./node_modules/drift-zoom/es/util/dom.js","webpack:///./node_modules/drift-zoom/es/util/throwIfMissing.js","webpack:///./node_modules/drift-zoom/es/BoundingBox.js","webpack:///./node_modules/drift-zoom/es/Trigger.js","webpack:///./node_modules/drift-zoom/es/ZoomPane.js","webpack:///./node_modules/drift-zoom/es/Drift.js","webpack:///./node_modules/drift-zoom/es/injectBaseStylesheet.js","webpack:///./node_modules/photoswipe/dist/photoswipe-lightbox.esm.js","webpack:///./components/pdp/AutoPlayInfoIcon.tsx","webpack:///./components/pdp/PdpVideoItem.tsx","webpack:///./components/pdp/PdpGallery.tsx","webpack:///./components/pdp_details/PdpReadMore.script.ts","webpack:///./components/pdp_details/PdpDetailAccordion.script.ts","webpack:///./components/pdp/pdp.tsx","webpack:///./components/pdp/index.tsx","webpack:///./components/tracking_third_party/fbAddToCart.tsx","webpack:///./components/tracking_third_party/tiktokAddToCart.tsx","webpack:///./components/tracking_third_party/fbViewContent.ts","webpack:///external var \"jQuery\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/ensure chunk","webpack:///webpack/runtime/get javascript chunk filename","webpack:///webpack/runtime/get mini-css chunk filename","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/runtimeId","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/runtime/nonce","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tsc-react:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t8314: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"7867\":1,\"8652\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","/*! lozad.js - v1.16.0 - 2020-09-06\n* https://github.com/ApoorvSaxena/lozad.js\n* Copyright (c) 2020 Apoorv Saxena; Licensed MIT */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.lozad=e()}(this,function(){\"use strict\";\n/**\n * Detect IE browser\n * @const {boolean}\n * @private\n */var g=\"undefined\"!=typeof document&&document.documentMode,f={rootMargin:\"0px\",threshold:0,load:function(t){if(\"picture\"===t.nodeName.toLowerCase()){var e=t.querySelector(\"img\"),r=!1;null===e&&(e=document.createElement(\"img\"),r=!0),g&&t.getAttribute(\"data-iesrc\")&&(e.src=t.getAttribute(\"data-iesrc\")),t.getAttribute(\"data-alt\")&&(e.alt=t.getAttribute(\"data-alt\")),r&&t.append(e)}if(\"video\"===t.nodeName.toLowerCase()&&!t.getAttribute(\"data-src\")&&t.children){for(var a=t.children,o=void 0,i=0;i<=a.length-1;i++)(o=a[i].getAttribute(\"data-src\"))&&(a[i].src=o);t.load()}t.getAttribute(\"data-poster\")&&(t.poster=t.getAttribute(\"data-poster\")),t.getAttribute(\"data-src\")&&(t.src=t.getAttribute(\"data-src\")),t.getAttribute(\"data-srcset\")&&t.setAttribute(\"srcset\",t.getAttribute(\"data-srcset\"));var n=\",\";if(t.getAttribute(\"data-background-delimiter\")&&(n=t.getAttribute(\"data-background-delimiter\")),t.getAttribute(\"data-background-image\"))t.style.backgroundImage=\"url('\"+t.getAttribute(\"data-background-image\").split(n).join(\"'),url('\")+\"')\";else if(t.getAttribute(\"data-background-image-set\")){var d=t.getAttribute(\"data-background-image-set\").split(n),u=d[0].substr(0,d[0].indexOf(\" \"))||d[0];// Substring before ... 1x\nu=-1===u.indexOf(\"url(\")?\"url(\"+u+\")\":u,1===d.length?t.style.backgroundImage=u:t.setAttribute(\"style\",(t.getAttribute(\"style\")||\"\")+\"background-image: \"+u+\"; background-image: -webkit-image-set(\"+d+\"); background-image: image-set(\"+d+\")\")}t.getAttribute(\"data-toggle-class\")&&t.classList.toggle(t.getAttribute(\"data-toggle-class\"))},loaded:function(){}};function A(t){t.setAttribute(\"data-loaded\",!0)}var m=function(t){return\"true\"===t.getAttribute(\"data-loaded\")},v=function(t){var e=1 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n }\n };\n\n const init = () => {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n initSlides(); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(``);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport Swiper, { Navigation, Thumbs, A11y } from 'swiper';\r\n\r\nconst GeneralCarousel = () => {\r\n const [swiperInstance, setSwiperInstance] = useState(null as Swiper);\r\n\r\n useEffect(() => {\r\n initGeneralGallery();\r\n }, []);\r\n\r\n const initGeneralGallery = () => {\r\n const carousel = document.getElementById('may-we-suggest');\r\n //swiper\r\n const swiperGallery = new Swiper(carousel, {\r\n modules: [Navigation, Thumbs, A11y],\r\n direction: 'horizontal',\r\n freeMode: false,\r\n // loop: true,\r\n slidesPerView: 1,\r\n spaceBetween: 25,\r\n navigation: {\r\n nextEl: '.carousel-button-next',\r\n prevEl: '.carousel-button-prev',\r\n },\r\n watchSlidesProgress: true,\r\n a11y: { enabled: true },\r\n breakpoints: {\r\n // when window width is >= 768\r\n 768: {\r\n slidesPerView: 2,\r\n slidesPerGroup: 2,\r\n spaceBetween: 0,\r\n },\r\n // when window width is >= 768\r\n 992: {\r\n slidesPerView: 4,\r\n slidesPerGroup: 4,\r\n spaceBetween: 0,\r\n },\r\n },\r\n });\r\n setSwiperInstance(swiperGallery);\r\n };\r\n\r\n return <>;\r\n};\r\n\r\nexport default GeneralCarousel;\r\n","import * as React from 'react';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst observerMap = new Map();\nconst RootIds = new WeakMap();\nlet rootId = 0;\nlet unsupportedValue = undefined;\n/**\r\n * What should be the default behavior if the IntersectionObserver is unsupported?\r\n * Ideally the polyfill has been loaded, you can have the following happen:\r\n * - `undefined`: Throw an error\r\n * - `true` or `false`: Set the `inView` value to this regardless of intersection state\r\n * **/\n\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\n/**\r\n * Generate a unique ID for the root element\r\n * @param root\r\n */\n\nfunction getRootId(root) {\n if (!root) return '0';\n if (RootIds.has(root)) return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\n/**\r\n * Convert the options to a string Id, based on the values.\r\n * Ensures we can reuse the same observer when observing elements with the same options.\r\n * @param options\r\n */\n\n\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(key => options[key] !== undefined).map(key => {\n return `${key}_${key === 'root' ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\n\nfunction createObserver(options) {\n // Create a unique ID for this observer instance, based on the root, root margin and threshold.\n let id = optionsToId(options);\n let instance = observerMap.get(id);\n\n if (!instance) {\n // Create a map of elements this observer is going to observe. Each element has a list of callbacks that should be triggered, once it comes into view.\n const elements = new Map();\n let thresholds;\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n var _elements$get;\n\n // While it would be nice if you could just look at isIntersecting to determine if the component is inside the viewport, browsers can't agree on how to use it.\n // -Firefox ignores `threshold` when considering `isIntersecting`, so it will never be false again if `threshold` is > 0\n const inView = entry.isIntersecting && thresholds.some(threshold => entry.intersectionRatio >= threshold); // @ts-ignore support IntersectionObserver v2\n\n if (options.trackVisibility && typeof entry.isVisible === 'undefined') {\n // The browser doesn't support Intersection Observer v2, falling back to v1 behavior.\n // @ts-ignore\n entry.isVisible = inView;\n }\n\n (_elements$get = elements.get(entry.target)) == null ? void 0 : _elements$get.forEach(callback => {\n callback(inView, entry);\n });\n });\n }, options); // Ensure we have a valid thresholds array. If not, use the threshold from the options\n\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n\n return instance;\n}\n/**\r\n * @param element - DOM Element to observe\r\n * @param callback - Callback function to trigger when intersection status changes\r\n * @param options - Intersection Observer options\r\n * @param fallbackInView - Fallback inView value.\r\n * @return Function - Cleanup function that should be triggered to unregister the observer\r\n */\n\n\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === 'undefined' && fallbackInView !== undefined) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === 'number' ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {// Nothing to cleanup\n };\n } // An observer with the same options can be reused, so lets use this fact\n\n\n const {\n id,\n observer,\n elements\n } = createObserver(options); // Register the callback listener for this element\n\n let callbacks = elements.get(element) || [];\n\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n // Remove the callback from the callback list\n callbacks.splice(callbacks.indexOf(callback), 1);\n\n if (callbacks.length === 0) {\n // No more callback exists for element, so destroy it\n elements.delete(element);\n observer.unobserve(element);\n }\n\n if (elements.size === 0) {\n // No more elements are being observer by this instance, so destroy it\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\nconst _excluded = [\"children\", \"as\", \"triggerOnce\", \"threshold\", \"root\", \"rootMargin\", \"onChange\", \"skip\", \"trackVisibility\", \"delay\", \"initialInView\", \"fallbackInView\"];\n\nfunction isPlainChildren(props) {\n return typeof props.children !== 'function';\n}\n/**\r\n ## Render props\r\n\n To use the `` component, you pass it a function. It will be called\r\n whenever the state changes, with the new value of `inView`. In addition to the\r\n `inView` prop, children also receive a `ref` that should be set on the\r\n containing DOM element. This is the element that the IntersectionObserver will\r\n monitor.\r\n\n If you need it, you can also access the\r\n [`IntersectionObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry)\r\n on `entry`, giving you access to all the details about the current intersection\r\n state.\r\n\n ```jsx\r\n import { InView } from 'react-intersection-observer';\r\n\n const Component = () => (\r\n \r\n {({ inView, ref, entry }) => (\r\n
\r\n

{`Header inside viewport ${inView}.`}

\r\n
\r\n )}\r\n
\r\n );\r\n\n export default Component;\r\n ```\r\n\n ## Plain children\r\n\n You can pass any element to the ``, and it will handle creating the\r\n wrapping DOM element. Add a handler to the `onChange` method, and control the\r\n state in your own component. Any extra props you add to `` will be\r\n passed to the HTML element, allowing you set the `className`, `style`, etc.\r\n\n ```jsx\r\n import { InView } from 'react-intersection-observer';\r\n\n const Component = () => (\r\n console.log('Inview:', inView)}>\r\n

Plain children are always rendered. Use onChange to monitor state.

\r\n
\r\n );\r\n\n export default Component;\r\n ```\r\n */\n\n\nclass InView extends React.Component {\n constructor(props) {\n super(props);\n this.node = null;\n this._unobserveCb = null;\n\n this.handleNode = node => {\n if (this.node) {\n // Clear the old observer, before we start observing a new element\n this.unobserve();\n\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n // Reset the state if we get a new node, and we aren't ignoring updates\n this.setState({\n inView: !!this.props.initialInView,\n entry: undefined\n });\n }\n }\n\n this.node = node ? node : null;\n this.observeNode();\n };\n\n this.handleChange = (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n // If `triggerOnce` is true, we should stop observing the element.\n this.unobserve();\n }\n\n if (!isPlainChildren(this.props)) {\n // Store the current State, so we can pass it to the children in the next render update\n // There's no reason to update the state for plain children, since it's not used in the rendering.\n this.setState({\n inView,\n entry\n });\n }\n\n if (this.props.onChange) {\n // If the user is actively listening for onChange, always trigger it\n this.props.onChange(inView, entry);\n }\n };\n\n this.state = {\n inView: !!props.initialInView,\n entry: undefined\n };\n }\n\n componentDidUpdate(prevProps) {\n // If a IntersectionObserver option changed, reinit the observer\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n\n componentWillUnmount() {\n this.unobserve();\n this.node = null;\n }\n\n observeNode() {\n if (!this.node || this.props.skip) return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(this.node, this.handleChange, {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n }, fallbackInView);\n }\n\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n\n this._unobserveCb = null;\n }\n }\n\n render() {\n if (!isPlainChildren(this.props)) {\n const {\n inView,\n entry\n } = this.state;\n return this.props.children({\n inView,\n entry,\n ref: this.handleNode\n });\n }\n\n const _this$props = this.props,\n {\n children,\n as\n } = _this$props,\n props = _objectWithoutPropertiesLoose(_this$props, _excluded);\n\n return React.createElement(as || 'div', _extends({\n ref: this.handleNode\n }, props), children);\n }\n\n}\n\n/**\r\n * React Hooks make it easy to monitor the `inView` state of your components. Call\r\n * the `useInView` hook with the (optional) [options](#options) you need. It will\r\n * return an array containing a `ref`, the `inView` status and the current\r\n * [`entry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry).\r\n * Assign the `ref` to the DOM element you want to monitor, and the hook will\r\n * report the status.\r\n *\r\n * @example\r\n * ```jsx\r\n * import React from 'react';\r\n * import { useInView } from 'react-intersection-observer';\r\n *\r\n * const Component = () => {\r\n * const { ref, inView, entry } = useInView({\r\n * threshold: 0,\r\n * });\r\n *\r\n * return (\r\n *
\r\n *

{`Header inside viewport ${inView}.`}

\r\n *
\r\n * );\r\n * };\r\n * ```\r\n */\n\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n const unobserve = React.useRef();\n const callback = React.useRef();\n const [state, setState] = React.useState({\n inView: !!initialInView\n }); // Store the onChange callback in a `ref`, so we can access the latest instance inside the `useCallback`.\n\n callback.current = onChange;\n const setRef = React.useCallback(node => {\n if (unobserve.current !== undefined) {\n unobserve.current();\n unobserve.current = undefined;\n } // Skip creating the observer\n\n\n if (skip) return;\n\n if (node) {\n unobserve.current = observe(node, (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current) callback.current(inView, entry);\n\n if (entry.isIntersecting && triggerOnce && unobserve.current) {\n // If it should only trigger once, unobserve the element after it's inView\n unobserve.current();\n unobserve.current = undefined;\n }\n }, {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n }, fallbackInView);\n }\n }, // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [// If the threshold is an array, convert it to a string so it won't change between renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n Array.isArray(threshold) ? threshold.toString() : threshold, root, rootMargin, triggerOnce, skip, trackVisibility, fallbackInView, delay]);\n /* eslint-disable-next-line */\n\n React.useEffect(() => {\n if (!unobserve.current && state.entry && !triggerOnce && !skip) {\n // If we don't have a ref, then reset the state (unless the hook is set to only `triggerOnce` or `skip`)\n // This ensures we correctly reflect the current state - If you aren't observing anything, then nothing is inView\n setState({\n inView: !!initialInView\n });\n }\n });\n const result = [setRef, state.inView, state.entry]; // Support object destructuring, by adding the specific values.\n\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\n\nexport { InView, defaultFallbackInView, observe, useInView };\n//# sourceMappingURL=react-intersection-observer.modern.mjs.map\n","const EventBus = {\r\n on(event, callback) {\r\n document.addEventListener(event, (e) => callback(e.detail));\r\n },\r\n dispatch(event, data) {\r\n document.dispatchEvent(new CustomEvent(event, { detail: data }));\r\n },\r\n remove(event, callback) {\r\n document.removeEventListener(event, callback);\r\n },\r\n};\r\n\r\nexport default EventBus;\r\n","import { TmCart } from '@/tscapi/model/cart';\r\n\r\n//cart object exposed for analytics\r\nexport const setupAnalyticsData = (cart: TmCart) => {\r\n window.analyticsData.cart = cart;\r\n};\r\n\r\n//prepare analytics object that highlights item that was removed and qty\r\n//looks in previousCart, finds cartlineid of item being removed\r\nexport const setupAnalyticsRemove = (newCart: TmCart, previousCart: TmCart, cartLineId) => {\r\n const currentQty = previousCart.CartLines.find((prevCartLine) => cartLineId == prevCartLine.Id).InCart.Quantity;\r\n const currentItemNo = previousCart.CartLines.find((prevCartLine) => cartLineId == prevCartLine.Id).CartLineItem\r\n .ItemNo;\r\n const changedProduct = previousCart.Products.find((product) => product.ItemNo == currentItemNo);\r\n window.analyticsData.cart = newCart;\r\n window.analyticsData.productChange = {};\r\n window.analyticsData.productChange.product = changedProduct;\r\n window.analyticsData.productChange.quantity = -currentQty;\r\n if (previousCart.CartLines.find((prevCartLine) => cartLineId == prevCartLine.Id).CartLineItem.IsSoldOut) {\r\n window.analyticsData.productChange.reason = 'sold out';\r\n }\r\n window.analyticsData.event.eventTitle = 'change-in-cart';\r\n};\r\n\r\n//fire off 'cart updated event' so Truefit component can refresh recommendations\r\nexport const setupTruefitUpdateEvent = (cart: TmCart) => {\r\n if (cart != null && cart.CartLines.length > 0) {\r\n const truefitEvent = new CustomEvent('tf-update', { detail: { cart: cart } });\r\n document.dispatchEvent(truefitEvent);\r\n }\r\n};\r\n\r\n//send analytics change qty event;\r\nexport const setupAnalyticsUpdateQty = (newCart: TmCart, variables, context) => {\r\n const cartLineId = variables?.lineId;\r\n const previousCart: TmCart = context?.previousBag;\r\n const prevCartline = previousCart.CartLines.find((PreviousCartLine) => cartLineId == PreviousCartLine?.Id);\r\n const changedProduct = previousCart.Products.find(\r\n (product) => prevCartline.CartLineItem?.ItemNo == product?.ItemNo,\r\n );\r\n window.analyticsData.cart = newCart;\r\n window.analyticsData.productChange = {};\r\n window.analyticsData.productChange.product = changedProduct;\r\n window.analyticsData.productChange.quantity = variables?.addRemove;\r\n window.analyticsData.event.eventTitle = 'change-in-cart';\r\n};\r\n\r\n//when pressing 'cancel order modification' button on shopping bag\r\nexport const setupAnalyticsCancelModification = () => {\r\n window.analyticsData = window.analyticsData || {};\r\n window.analyticsData.page = window.analyticsData.page || {};\r\n window.analyticsData.page.pageTitle = 'order modification cancel';\r\n window.analyticsData.form = window.analyticsData.form || {};\r\n window.analyticsData.form.formStepName = 'cancel modification';\r\n};\r\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\r\n\r\nimport { TmCart } from '@/tscapi/model/cart';\r\nimport { createCartAndAddItem } from '@/tscapi/service/cart.service';\r\nimport http from '@/tscapi/service/httpservice';\r\nimport { Storage } from '@/tscapi/utils/browser-storage';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport {\r\n setupAnalyticsData,\r\n setupAnalyticsRemove,\r\n setupTruefitUpdateEvent,\r\n setupAnalyticsUpdateQty,\r\n} from '../utils/analyticsEvents';\r\n\r\ntype TmCartDerived = {\r\n isShowBagEmpty: boolean;\r\n};\r\ntype TmCartExtended = TmCart & TmCartDerived;\r\n// const cookie: Cookie = new Cookie();\r\n// const headers = {\r\n// 'Content-Type': 'application/json',\r\n// 'cache-control': 'no-cache',\r\n// currentdatetime: cookie.CurrentDate,\r\n// };\r\n\r\nexport const useCart = (isAuth: boolean) => {\r\n const cookie: Cookie = new Cookie();\r\n return useQuery({\r\n queryKey: ['bag', cookie.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n queryFn:\r\n cookie.UserAccessToken != undefined &&\r\n cookie.UserAccessToken.Token.length > 0 &&\r\n cookie.UserAccessToken.Edp > 0\r\n ? fetchBagAccount\r\n : fetchBagGuid,\r\n useErrorBoundary: true,\r\n retry: 1,\r\n });\r\n\r\n async function fetchBagAccount(): Promise {\r\n //signed in\r\n const base = '/api/v2/';\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n const userAccessTokenEdp = cookie.UserAccessToken?.Edp;\r\n if (\r\n !(\r\n cookie.UserAccessToken != undefined &&\r\n cookie.UserAccessToken.Token.length > 0 &&\r\n cookie.UserAccessToken.Edp > 0\r\n )\r\n ) {\r\n throw new Error('UserToken expired');\r\n }\r\n try {\r\n const response = await http.get(`${base}${lang}/accounts/${userAccessTokenEdp}/cart`);\r\n //console.log(response.data);\r\n setupAnalyticsData(response.data);\r\n return response.data;\r\n } catch (error) {\r\n //if this state happens, user will be re-directed to signin page anyway\r\n console.log('Error getting Shopping Bag for Account');\r\n // throw new Error('Error getting Shopping Bag for Account');\r\n\r\n return new Promise(function (resolve, reject) {\r\n resolve({} as TmCart);\r\n });\r\n }\r\n }\r\n\r\n async function fetchBagGuid(): Promise {\r\n //not signed in\r\n const base = '/api/v2/';\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n if (cookie.CartGuid) {\r\n try {\r\n const response = await http.get(`${base}${lang}/carts/${cookie.CartGuid}`);\r\n //console.log(response.data);\r\n setupAnalyticsData(response.data);\r\n return response.data;\r\n } catch (error) {\r\n console.log(error);\r\n console.log('GUID failed so clearing bag');\r\n return new Promise(function (resolve, reject) {\r\n resolve({} as TmCart);\r\n });\r\n }\r\n } else {\r\n cookie.CartProductCount = '0';\r\n console.log('no GUID exist so clearing bag');\r\n return new Promise(function (resolve, reject) {\r\n resolve({} as TmCart);\r\n });\r\n }\r\n }\r\n};\r\n\r\n// used to remove donation from bag\r\n// used in order summary\r\nexport const useRemoveDonation = (Id, cartGuid) => {\r\n const queryClient = useQueryClient();\r\n const base = '/api/v2/';\r\n const cookie: Cookie = new Cookie();\r\n const storage = new Storage();\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n return useMutation({\r\n mutationFn: () => {\r\n return http.delete(`${base}${lang}/carts/${cartGuid}/cartlines/${Id}`);\r\n },\r\n onSuccess: (response, variables, context) => {\r\n // update detail view directly\r\n setupAnalyticsData(response.data);\r\n cookie.CartGuid = response.data.CartGuid;\r\n cookie.CartProductCount = response.data.OrderSummary.TotalQuantity.toString();\r\n storage.deleteSessionLanguageQC();\r\n if (response?.data?.CartLines && response?.data?.CartLines?.length == 0) {\r\n //remove redirect if cart is empty\r\n cookie.deleteTargetUrl();\r\n }\r\n queryClient.setQueryData(\r\n ['bag', response.data.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n response?.data,\r\n );\r\n },\r\n onError: (error, variables, context) => {\r\n console.log(`${context} ${error}`);\r\n },\r\n });\r\n};\r\n\r\n// used to remove items from bag\r\n// used in the Itemcard component\r\n// used in the Notices to remove item if sold out\r\nexport const useRemoveItem = (data) => {\r\n const queryClient = useQueryClient();\r\n const base = '/api/v2/';\r\n const cookie: Cookie = new Cookie();\r\n const storage = new Storage();\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n return {\r\n ...useMutation({\r\n mutationFn: (Id: number) => {\r\n return http.delete(`${base}${lang}/carts/${data.CartGuid}/cartlines/${Id}`);\r\n },\r\n onSuccess: (response, variables, context) => {\r\n // update detail view directly\r\n setupAnalyticsRemove(response.data, data, variables);\r\n setupTruefitUpdateEvent(response.data);\r\n cookie.CartGuid = response.data.CartGuid;\r\n cookie.CartProductCount = response.data.OrderSummary.TotalQuantity.toString();\r\n storage.deleteSessionLanguageQC();\r\n\r\n if (response?.data?.CartLines && response?.data?.CartLines?.length == 0) {\r\n //remove redirect if cart is empty\r\n cookie.deleteTargetUrl();\r\n }\r\n\r\n queryClient.setQueryData(\r\n ['bag', response.data.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n response?.data,\r\n );\r\n },\r\n onError: (error, variables, context) => {\r\n console.log(`${context} ${error}`);\r\n },\r\n }),\r\n };\r\n};\r\n\r\n// used to add donation to bag\r\n// used by donation picker component\r\n// returns bag with donation added\r\nexport const useAddItem = (CustomerEdp, Quantity, cartGuid) => {\r\n const queryClient = useQueryClient();\r\n const base = '/api/v2/';\r\n const cookie: Cookie = new Cookie();\r\n const storage = new Storage();\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n\r\n const createAndAddToCart = (itemEDP) => {\r\n // not signed in , no cart exists yet\r\n return createCartAndAddItem({\r\n Customization: '',\r\n ItemEDP: itemEDP,\r\n Quantity: Quantity,\r\n CustomerEdp: 0,\r\n //SOPeriod: \"D\",\r\n //SOInterval:30,\r\n });\r\n };\r\n const addToExistingCart = (itemEDP) => {\r\n // signed in\r\n return http.post(`${base}${lang}/carts/${cartGuid}/cartlines`, {\r\n CustomerEdp: CustomerEdp,\r\n Customization: '',\r\n ItemEDP: itemEDP,\r\n Quantity: Quantity,\r\n });\r\n };\r\n return useMutation({\r\n onSuccess: async (response, variables, context) => {\r\n // update detail view directly\r\n setupAnalyticsData(response.data);\r\n cookie.CartGuid = response.data.CartGuid;\r\n cookie.CartProductCount = response.data.OrderSummary.TotalQuantity.toString();\r\n storage.deleteSessionLanguageQC();\r\n //remove other bags that may be cached from previous accounts\r\n await queryClient.removeQueries({ queryKey: ['bag'] });\r\n //save new bag\r\n queryClient.setQueryData(\r\n ['bag', response.data.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n response.data as TmCart,\r\n );\r\n },\r\n onError: (error, variables, context) => {\r\n console.log('error');\r\n },\r\n mutationFn: cookie.CartGuid ? addToExistingCart : createAndAddToCart,\r\n });\r\n};\r\n\r\n//\r\n// used to change quantity of item in bag\r\n// used in Itemcard\r\nexport const useUpdateCart = (CustomerEdp, cartGuid) => {\r\n const queryClient = useQueryClient();\r\n const base = '/api/v2/';\r\n const cookie: Cookie = new Cookie();\r\n const storage = new Storage();\r\n const lang = cookie.Language.substring(0, 2) || 'en';\r\n const updateCart = ({ lineId, edpNo, qty, addRemove }) => {\r\n return http.put(`${base}${lang}/carts/${cartGuid}/cartlines/${lineId}`, {\r\n CustomerEdp: CustomerEdp,\r\n Customization: '',\r\n ItemEdp: edpNo,\r\n Quantity: qty,\r\n });\r\n };\r\n return useMutation({\r\n onMutate: async (data) => {\r\n // Cancel any outgoing refetches\r\n // (so they don't overwrite our optimistic update)\r\n await queryClient.cancelQueries({ queryKey: ['bag'] });\r\n\r\n // Snapshot the previous value\r\n const previousBag = queryClient.getQueryData([\r\n 'bag',\r\n cookie.CartGuid,\r\n cookie.UserAccessToken?.Edp,\r\n cookie.Language,\r\n ]);\r\n const newBag = JSON.parse(JSON.stringify(previousBag));\r\n newBag.CartLines.find((x) => x.Id == data.lineId).InCart.Quantity = data.qty;\r\n\r\n // Optimistically update to the new value\r\n if (newBag) {\r\n queryClient.setQueryData(['bag', cookie.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language], {\r\n ...newBag,\r\n });\r\n }\r\n\r\n // Return a context object with the snapshotted value\r\n return { previousBag };\r\n },\r\n onSuccess: async (response, variables, context) => {\r\n setupAnalyticsUpdateQty(response.data, variables, context);\r\n cookie.CartGuid = response.data.CartGuid;\r\n cookie.CartProductCount = response.data.OrderSummary.TotalQuantity.toString();\r\n storage.deleteSessionLanguageQC();\r\n queryClient.setQueryData(\r\n ['bag', response.data.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n response.data as TmCart,\r\n );\r\n },\r\n onError: (err, variables, context) => {\r\n if (context?.previousBag) {\r\n queryClient.setQueryData(\r\n ['bag', cookie.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n context.previousBag,\r\n );\r\n }\r\n },\r\n mutationFn: updateCart,\r\n });\r\n};\r\n\r\n// exprimental - not used\r\n// function to transform incoming new cart to derive new state\r\n// derive if bag should look empty (it excludes donation)\r\nexport const transformBagData = (cart: TmCart) => {\r\n const derivedCart: TmCartExtended = Object.assign({ isShowBagEmpty: true }, cart);\r\n if (!cart) {\r\n derivedCart.isShowBagEmpty = true;\r\n } else {\r\n if (cart?.CartLines?.length > 0) {\r\n //cart has products\r\n if (cart?.CartLines?.length == 1 && cart?.CartLines[0]?.CartLineItem?.IsDonation) {\r\n //cart one products but only donation\r\n derivedCart.isShowBagEmpty = true;\r\n } else {\r\n derivedCart.isShowBagEmpty = false;\r\n }\r\n } else {\r\n //cart has data but no products\r\n derivedCart.isShowBagEmpty = true;\r\n }\r\n }\r\n return derivedCart as TmCartExtended;\r\n};\r\n","import { TmCart } from '@/tscapi/model/cart';\r\n\r\nexport const getShowBagEmpty = (cart: TmCart) => {\r\n //\r\n // derive if bag should show 'empty bag' message (it excludes donation)\r\n //\r\n let isShowBagEmpty = true;\r\n if (!cart) {\r\n isShowBagEmpty = true;\r\n } else {\r\n if (cart?.CartLines?.length > 0) {\r\n //cart has products\r\n if (cart?.CartLines?.length == 1 && cart?.CartLines[0]?.CartLineItem?.IsDonation) {\r\n //cart one products but only donation\r\n isShowBagEmpty = true;\r\n } else {\r\n isShowBagEmpty = false;\r\n }\r\n } else {\r\n //cart has data but no products\r\n isShowBagEmpty = true;\r\n }\r\n }\r\n return isShowBagEmpty;\r\n};\r\n\r\nexport const cartContainsOnlyDonation = (cart: TmCart) => {\r\n //\r\n // derive if any item in cart is a donation\r\n //\r\n if (!cart) {\r\n return false;\r\n } else {\r\n if (cart?.CartLines?.length > 0) {\r\n if (cart?.CartLines?.length == 1 && cart?.CartLines[0]?.CartLineItem?.IsDonation) {\r\n //cart one products but only donation\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n};\r\n","'use client';\r\n\r\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/tscapi/utils/utils';\r\n\r\nimport CloseSvg from '../common/CloseSvg';\r\n\r\nconst Sheet = SheetPrimitive.Root;\r\n\r\nconst SheetTrigger = SheetPrimitive.Trigger;\r\n\r\nconst SheetClose = SheetPrimitive.Close;\r\n\r\nconst SheetPortal = SheetPrimitive.Portal;\r\n\r\nconst SheetOverlay = React.forwardRef<\r\n React.ElementRef,\r\n React.ComponentPropsWithoutRef\r\n>(({ className, ...props }, ref) => (\r\n \r\n));\r\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\r\n\r\nconst sheetVariants = cva(\r\n 'fixed z-[1000] gap-4 bg-background shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\r\n {\r\n variants: {\r\n side: {\r\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\r\n bottom: 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\r\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\r\n right: 'inset-y-0 right-0 h-full w-full sm:w-[470px] border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right',\r\n },\r\n },\r\n defaultVariants: {\r\n side: 'right',\r\n },\r\n },\r\n);\r\n\r\ninterface SheetContentProps\r\n extends React.ComponentPropsWithoutRef,\r\n VariantProps {}\r\n\r\nconst SheetContent = React.forwardRef, SheetContentProps>(\r\n ({ side = 'right', className, children, ...props }, ref) => (\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n Close\r\n \r\n \r\n \r\n ),\r\n);\r\nSheetContent.displayName = SheetPrimitive.Content.displayName;\r\n\r\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes) => (\r\n
\r\n);\r\nSheetHeader.displayName = 'SheetHeader';\r\n\r\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes) => (\r\n
\r\n);\r\nSheetFooter.displayName = 'SheetFooter';\r\n\r\nconst SheetTitle = React.forwardRef<\r\n React.ElementRef,\r\n React.ComponentPropsWithoutRef\r\n>(({ className, ...props }, ref) => (\r\n \r\n));\r\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\r\n\r\nconst SheetDescription = React.forwardRef<\r\n React.ElementRef,\r\n React.ComponentPropsWithoutRef\r\n>(({ className, ...props }, ref) => (\r\n \r\n));\r\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\r\n\r\nexport {\r\n Sheet,\r\n SheetPortal,\r\n SheetOverlay,\r\n SheetTrigger,\r\n SheetClose,\r\n SheetContent,\r\n SheetHeader,\r\n SheetFooter,\r\n SheetTitle,\r\n SheetDescription,\r\n};\r\n","import React from 'react';\r\n\r\nimport { Progress } from '@/components/ui/progressbar';\r\n\r\ninterface FreeShippingEarnedProps {\r\n freeShippingThresholdNumber: number;\r\n delayedPercentage: number;\r\n hideBar: boolean;\r\n}\r\n\r\nconst FreeShippingEarned: React.FC = ({\r\n freeShippingThresholdNumber,\r\n delayedPercentage: delayedPercentage1,\r\n hideBar,\r\n}) => (\r\n <>\r\n {!hideBar ? (\r\n <>\r\n
\r\n You've earned FREE standard shipping!\r\n
\r\n
\r\n
$0
\r\n
\r\n \r\n
\r\n
${freeShippingThresholdNumber}
\r\n
\r\n \r\n ) : (\r\n <>\r\n
\r\n You've earned FREE standard shipping with{' '}\r\n Rogers Bank Mastercard!\r\n
\r\n \r\n )}\r\n \r\n);\r\n\r\nexport default FreeShippingEarned;\r\n","import React, { memo } from 'react';\r\n\r\nimport { Progress } from '@/components/ui/progressbar';\r\n\r\ninterface FreeShippingProgressProps {\r\n delayedPercentage: number;\r\n cart: any;\r\n freeShippingThresholdNumber: number;\r\n}\r\n\r\nconst FreeShippingProgress: React.FC = ({\r\n delayedPercentage: delayedPercentage1,\r\n cart,\r\n freeShippingThresholdNumber,\r\n}) => (\r\n <>\r\n
\r\n
\r\n You're {cart?.OrderSummary?.AutoFreeShipAwayFromThreshold} from{' '}\r\n \r\n FREE standard shipping on{' '}\r\n \r\n eligible items\r\n \r\n \r\n
\r\n
\r\n
\r\n
$0
\r\n
\r\n \r\n
\r\n
${freeShippingThresholdNumber}
\r\n
\r\n \r\n);\r\n\r\nexport default memo(FreeShippingProgress);\r\n","export const en = {\r\n 'test': 'test'\r\n};\r\nexport const fr = {\r\n 'test': 'testfr'\r\n};","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { TmCartLine } from '@/tscapi/model/cart';\r\nimport { TmProduct } from '@/tscapi/model/product';\r\n\r\nimport { en, fr } from '../i18n';\r\n\r\ninterface ICartLine {\r\n CartLine: TmCartLine;\r\n CartProducts: TmProduct[];\r\n Remove: () => void;\r\n Update: () => void;\r\n QuantityAddedOveride?: number;\r\n}\r\n\r\nexport const ItemCard = ({ CartLine, CartProducts, Remove, QuantityAddedOveride }: ICartLine) => {\r\n const { i18n, t } = useTranslation('addtobag');\r\n i18n.addResourceBundle('en', 'addtobag', en, true, true);\r\n i18n.addResourceBundle('fr', 'addtobag', fr, true, true);\r\n\r\n if (!CartProducts) {\r\n return null;\r\n }\r\n\r\n //find full product data for this item\r\n const product: TmProduct = CartProducts.find((x) => x.ItemNo == CartLine.CartLineItem.ItemNo);\r\n //find edpdata specific to this lineitem\r\n const edpData = product?.Edps.find((y) => y.EdpNo == CartLine.CartLineItem.EdpNo);\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {product.PriceIsLabel ? (\r\n
\r\n {product.PriceIsLabel}\r\n
\r\n ) : null}\r\n\r\n \r\n \r\n {product.Name}\r\n \r\n \r\n\r\n
\r\n {CartLine.CartLineItem.ItemNo.slice(0, 3) + '-' + CartLine.CartLineItem.ItemNo.slice(3, 6)}\r\n
\r\n\r\n {(CartLine.CartLineItem.Size || CartLine.CartLineItem.Style) && (\r\n
\r\n {CartLine.CartLineItem.Size && (\r\n \r\n {t('Size')}: {CartLine.CartLineItem.Size}\r\n \r\n )}\r\n {CartLine.CartLineItem.Size && CartLine.CartLineItem.Style && (\r\n |\r\n )}\r\n {CartLine.CartLineItem.Style && (\r\n \r\n {t('Style')}: {CartLine.CartLineItem.Style}\r\n \r\n )}\r\n
\r\n )}\r\n\r\n
Quantity: {QuantityAddedOveride ? QuantityAddedOveride : CartLine.InCart.Quantity}
\r\n
\r\n
\r\n
\r\n {CartLine.InCart.UnitPrice}\r\n {CartLine.InCart.UnitPrice != edpData.WasPrice && (\r\n {edpData.WasPrice}\r\n )}\r\n
\r\n
\r\n {!CartLine.CartLineItem.IsDonation &&\r\n (CartLine.InCart.ShippingHandling == 'FREE' ||\r\n CartLine.InCart.ShippingHandling == 'GRATUIT') && (\r\n \r\n {t('Free shipping')}\r\n \r\n )}\r\n
\r\n
\r\n {CartLine.InCart.IsEditable && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n","import { useIsMutating } from '@tanstack/react-query';\r\nimport React, { useState, useEffect, Fragment, useRef, memo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport insightsClient from 'search-insights';\r\n\r\nimport LoadingSvg from '@/components/common/LoadingSvg';\r\nimport EventBus from '@/components/pdp/PdpEventBus';\r\nimport { useAuthenticated } from '@/components/shopping_bag/hooks/useAuthenticated';\r\nimport { useCart, useRemoveItem, useUpdateCart } from '@/components/shopping_bag/hooks/useCart';\r\nimport { getShowBagEmpty } from '@/components/shopping_bag/utils/isBagEmpty';\r\nimport { Sheet, SheetContent, SheetDescription, SheetHeader } from '@/components/ui/sheet';\r\nimport { TmCartLine } from '@/tscapi/model/cart';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\nimport { cn } from '@/tscapi/utils/utils';\r\n\r\nimport FraudModal from '../v2/FraudModal/FraudModal';\r\n\r\nimport FreeShippingEarned from './components/FreeShippingEarned';\r\nimport FreeShippingProgress from './components/FreeShippingProgress';\r\nimport { ItemCard } from './components/ItemCard';\r\nimport { en, fr } from './i18n';\r\n\r\nconst AddToBag = () => {\r\n const freeShippingThresholdNumber = Number(window?.tscConfig?.FreeShippingThreshold);\r\n const { i18n, t } = useTranslation('addtobag');\r\n i18n.addResourceBundle('en', 'addtobag', en, true, true);\r\n i18n.addResourceBundle('fr', 'addtobag', fr, true, true);\r\n const cookie: Cookie = new Cookie();\r\n const [cartLine, setCartLine] = useState(null);\r\n const [quantity, setQuantity] = useState(0);\r\n const [currentCartCount, setCurrentCartCount] = useState(null);\r\n const [edpNo, setEdpNo] = useState(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [donationInCart, setDonationInCart] = useState(false);\r\n const [showFraudModal, setShowFraudModal] = useState(false);\r\n const isAuthenticated = useAuthenticated();\r\n const { data: cart } = useCart(isAuthenticated);\r\n const isAutoFreeShipApplied = cart?.OrderSummary?.IsAutoFreeShipApplied;\r\n const isRogersCCFreeShipApplied = cart?.OrderSummary?.IsRogersCCFreeShipApplied;\r\n const autoFreeShipAwayFromThresholdAmount = Number(cart?.OrderSummary?.AutoFreeShipAwayFromThresholdAmount);\r\n const difference =\r\n autoFreeShipAwayFromThresholdAmount == 0\r\n ? 0\r\n : freeShippingThresholdNumber - autoFreeShipAwayFromThresholdAmount;\r\n const percentage = Math.min(Math.round((difference / freeShippingThresholdNumber) * 100), 100);\r\n const [delayedPercentage, setDelayedPercentage] = useState(0);\r\n const mutation = useRemoveItem(cart);\r\n const isMutating = useIsMutating();\r\n const updateMutation = useUpdateCart(cookie?.UserAccessToken?.Edp, cookie?.CartGuid);\r\n const currentDate = new Date();\r\n const hasMounted = useRef(false);\r\n const uniqueId =\r\n currentDate.getFullYear().toString() +\r\n (currentDate.getMonth() + 1).toString().padStart(2, '0') +\r\n currentDate.getDate().toString().padStart(2, '0') +\r\n currentDate.getHours().toString().padStart(2, '0') +\r\n currentDate.getMinutes().toString().padStart(2, '0') +\r\n currentDate.getSeconds().toString().padStart(2, '0');\r\n const [esiEventId, setESIEventId] = useState(parseInt(uniqueId));\r\n const prevIsOpen = useRef(isOpen);\r\n const checkout = () => {\r\n if (cart && cart.Buyer != null && cart.Buyer.IsFraud) {\r\n setIsOpen(false);\r\n setShowFraudModal(true);\r\n } else {\r\n window.location.href = '/pages/shoppingbag';\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n let timer;\r\n if (prevIsOpen.current === false && isOpen === true) {\r\n //delayed open\r\n timer = setTimeout(() => {\r\n setDelayedPercentage(percentage);\r\n }, 600);\r\n } else {\r\n setDelayedPercentage(percentage);\r\n }\r\n prevIsOpen.current = isOpen;\r\n // Cleanup function to clear the timer\r\n return () => clearTimeout(timer);\r\n }, [isOpen, percentage]);\r\n\r\n useEffect(() => {\r\n if (hasMounted.current) {\r\n // Fire ESI event\r\n // Create a custom event with the new event ID as detail\r\n const event = new CustomEvent('addBagEvent', {\r\n detail: { eventId: esiEventId, cart: cart, edpNo: edpNo, quantity: quantity },\r\n });\r\n // Dispatch the event\r\n document.dispatchEvent(event);\r\n }\r\n }, [esiEventId]);\r\n\r\n const incrementESIEventId = () => {\r\n setESIEventId((prevEventId) => prevEventId + 1);\r\n };\r\n const trackConversion = () => {\r\n try {\r\n const algoliaClickData = JSON.parse(window.sessionStorage.getItem('TSC_AlgoliaClick')) || null;\r\n if (algoliaClickData) {\r\n if (algoliaClickData.objectIDs[0] == window.analyticsData.product.ItemNo) {\r\n //if current product matches last tracked searched item, fire a conversion event\r\n setTimeout(() => {\r\n insightsClient('convertedObjectIDsAfterSearch', {\r\n eventName: 'Add To Cart',\r\n index: 'products',\r\n objectIDs: [algoliaClickData.objectIDs[0]],\r\n queryID: algoliaClickData.queryID ? algoliaClickData.queryID : '',\r\n });\r\n }, 2000);\r\n try {\r\n window.sessionStorage.removeItem('TSC_AlgoliaClick');\r\n } catch (error) {\r\n // if it fails\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n // if it fails\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const processCartData = () => {\r\n let cartLineClone: TmCartLine;\r\n if (cart != null && cart?.CartLines?.length > 0) {\r\n const donationFilteredCart = cart?.CartLines.filter((item) => {\r\n return !item?.CartLineItem?.IsDonation;\r\n });\r\n if (edpNo) {\r\n //item added to bag\r\n\r\n //find cartline of edp added to bag\r\n cartLineClone =\r\n cart.CartLines[cart.CartLines.findIndex((c) => c.CartLineItem.EdpNo.toString() == edpNo)];\r\n\r\n setCartLine(cartLineClone);\r\n //count items already in bag\r\n const count = donationFilteredCart.filter((item) => {\r\n if (item?.CartLineItem.EdpNo == edpNo) {\r\n return item.InCart.Quantity - quantity > 0;\r\n }\r\n return true;\r\n });\r\n setCurrentCartCount(count.length);\r\n } else {\r\n //items already exist in cart\r\n //count items already in bag\r\n setCurrentCartCount(donationFilteredCart.length);\r\n setCartLine(null);\r\n }\r\n setDonationInCart(cart.CartLines.some((line) => line.CartLineItem.IsDonation === true));\r\n if (getShowBagEmpty(cart)) {\r\n setIsOpen(false);\r\n }\r\n } else {\r\n if (getShowBagEmpty(cart)) {\r\n setIsOpen(false);\r\n }\r\n }\r\n };\r\n processCartData();\r\n }, [cart, edpNo, quantity]);\r\n\r\n useEffect(() => {\r\n const handleAnalytics = (data) => {\r\n if (data != undefined) {\r\n trackConversion();\r\n setIsOpen(true);\r\n setEdpNo(data.edp);\r\n setQuantity(data.qty);\r\n //send analytic event odd to cart\r\n window.analyticsData.productChange = {};\r\n window.analyticsData.productChange.sku = data.edp;\r\n window.analyticsData.productChange.quantity = data.qty;\r\n window.analyticsData.event.eventTitle = 'change-in-cart';\r\n //for esi promocode\r\n\r\n incrementESIEventId();\r\n hasMounted.current = true;\r\n }\r\n };\r\n EventBus.on('change', handleAnalytics);\r\n // returned function will be called on component unmount\r\n return () => {\r\n EventBus.remove('change', handleAnalytics);\r\n setDelayedPercentage(0);\r\n hasMounted.current = false;\r\n };\r\n }, []);\r\n\r\n const HideProgressBar = () =>
 
;\r\n\r\n if (cart == null) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n
\r\n {cartLine && edpNo && cartLine.CartLineItem && (\r\n <>\r\n \r\n \r\n Added to your bag\r\n \r\n \r\n {\r\n // if item.Incart.Quantity - quantity > 0\r\n // do a cart update instead of a remove lineitem\r\n {\r\n if (cartLine.InCart.Quantity - quantity > 0) {\r\n updateMutation.mutate(\r\n {\r\n lineId: cartLine.Id,\r\n edpNo: edpNo,\r\n qty: cartLine.InCart.Quantity - quantity,\r\n addRemove: quantity,\r\n },\r\n {\r\n onSuccess: (data) => {\r\n incrementESIEventId();\r\n setEdpNo(null);\r\n setQuantity(null);\r\n },\r\n },\r\n );\r\n } else {\r\n mutation.mutate(cartLine.Id, {\r\n onSuccess: (data) => {\r\n incrementESIEventId();\r\n setEdpNo(null);\r\n setQuantity(null);\r\n },\r\n });\r\n }\r\n }\r\n }}\r\n Update={null}\r\n />\r\n
\r\n \r\n )}\r\n\r\n {cart?.CartLines?.length > 0 && (\r\n <>\r\n {currentCartCount && currentCartCount > 0 ? (\r\n
\r\n Currently in your bag\r\n
\r\n ) : null}\r\n\r\n {cart?.CartLines.filter((item) => !item.CartLineItem.IsDonation).map((item) => {\r\n if (item?.CartLineItem.EdpNo == edpNo) {\r\n if (item.InCart.Quantity - quantity <= 0) {\r\n // Don't display because it was shown above\r\n return null;\r\n } else {\r\n // Show with qty adjusted qty\r\n return (\r\n \r\n {\r\n if (cartLine.InCart.Quantity - quantity > 0) {\r\n updateMutation.mutate(\r\n {\r\n lineId: cartLine.Id,\r\n edpNo: edpNo,\r\n qty: quantity,\r\n addRemove: quantity,\r\n },\r\n {\r\n onSuccess: (data) => {\r\n incrementESIEventId();\r\n },\r\n },\r\n );\r\n } else {\r\n mutation.mutate(cartLine.Id, {\r\n onSuccess: (data) => {\r\n incrementESIEventId();\r\n setEdpNo(null);\r\n setQuantity(null);\r\n },\r\n });\r\n }\r\n // mutation.mutate(item.Id);\r\n }}\r\n Update={null}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n } else {\r\n // Show but don't adjust quantity\r\n return (\r\n \r\n {\r\n mutation.mutate(item.Id, {\r\n onSuccess: (data) => {\r\n incrementESIEventId();\r\n },\r\n });\r\n }}\r\n Update={null}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n })}\r\n \r\n )}\r\n
\r\n
\r\n\r\n 0 ? 'h-52' : 'h-44',\r\n )}\r\n >\r\n
\r\n
\r\n
\r\n
\r\n Subtotal ({cart?.OrderSummary?.TotalQuantity}{' '}\r\n {cart?.OrderSummary?.TotalQuantity > 1 ? 'items' : 'item'}){' '}\r\n
\r\n
\r\n {cart?.OrderSummary?.MerchandiseSubTotal == null\r\n ? '$0.00'\r\n : cart?.OrderSummary?.MerchandiseSubTotal}\r\n {donationInCart ? * : null}\r\n
\r\n
\r\n {donationInCart ? (\r\n
*includes donation item
\r\n ) : null}\r\n
\r\n {isAutoFreeShipApplied || isRogersCCFreeShipApplied ? (\r\n \r\n ) : autoFreeShipAwayFromThresholdAmount > 0 ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n checkout()}\r\n >\r\n View bag & checkout\r\n \r\n
\r\n
\r\n
\r\n
\r\n {updateMutation.isLoading || isMutating ? (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n {showFraudModal && setShowFraudModal(false)} />}\r\n \r\n );\r\n};\r\n\r\nexport default AddToBag;\r\n","import http from '@/tscapi/service/httpservice';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nconst cachebleHeaders = {\r\n 'Content-Type': 'application/json',\r\n};\r\n\r\nconst cookie: Cookie = new Cookie();\r\nlet userEDP;\r\nif (cookie.UserAccessToken != undefined && cookie.UserAccessToken.Token.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n userEDP = cookie.UserAccessToken.Edp;\r\n}\r\n\r\nexport function getFindMine(configData, successCallback: any, errorCallback: any, mcID) {\r\n const { productID, findmineID, findmineUrl, productInStock, productColourID } = configData;\r\n const mcIDParam = mcID ? `&customer_session_id=${mcID}` : '';\r\n const userEDPParam = userEDP ? `&customer_id=${userEDP}` : '';\r\n const productColourIDParam = productColourID ? `&product_color_id=${productColourID}` : '&product_color_id=None';\r\n const apiLinkFindMineProductdetails = `https://${findmineUrl}/api/v3/complete-the-look?application=${findmineID}&product_id=${productID}${productColourIDParam}&product_in_stock=${productInStock}${mcIDParam}${userEDPParam}`;\r\n\r\n http.get(apiLinkFindMineProductdetails, {\r\n headers: cachebleHeaders,\r\n })\r\n .then((result) => {\r\n successCallback(result.data);\r\n })\r\n .catch((error) => {\r\n errorCallback(error);\r\n });\r\n}\r\n","import React, { useEffect, useState, useCallback } from 'react';\r\nimport { Navigation, Pagination, A11y } from 'swiper';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { Swiper as SwiperClass } from 'swiper/types';\r\n\r\nimport useBreakpoint from '@/components/v2/utils/useBreakPoint';\r\n\r\nexport interface FindmineCarouselProps {\r\n data: {\r\n looks: [{ items: any[]; look_id: '' }];\r\n response_uuid: '';\r\n };\r\n beacon: (action: string, set: number, item: number, activeSlide: number) => any;\r\n}\r\n\r\nexport const FindmineCarousel = ({ data, beacon }: FindmineCarouselProps) => {\r\n const { isMobile, isTablet, isDesktop } = useBreakpoint();\r\n\r\n const [swiperRef, setSwiperRef] = useState();\r\n\r\n const handlePrevious = useCallback(() => {\r\n swiperRef?.slidePrev();\r\n }, [swiperRef]);\r\n\r\n const handleNext = useCallback(() => {\r\n swiperRef?.slideNext();\r\n }, [swiperRef]);\r\n\r\n const getWrapperClass = (itemLength) => {\r\n let finalClass = 'findmine__wrap ';\r\n if (isMobile) {\r\n finalClass += 'justifyNormal';\r\n } else if (isTablet) {\r\n if (itemLength == 5) {\r\n finalClass += 'justifyNormal';\r\n } else {\r\n finalClass += 'justifyNormal';\r\n }\r\n } else if (isDesktop) {\r\n if (itemLength == 4) {\r\n finalClass += 'justifyBetween';\r\n } else if (itemLength == 5) {\r\n finalClass += 'justifyNormal';\r\n } else {\r\n finalClass += 'justifyEven';\r\n }\r\n } else {\r\n if (itemLength == 4) {\r\n finalClass += 'justifyBetween';\r\n } else if (itemLength == 5) {\r\n finalClass += 'justifyEven';\r\n } else {\r\n finalClass += 'justifyEven';\r\n }\r\n }\r\n return finalClass;\r\n };\r\n\r\n const handleClick = (event, url, set, item) => {\r\n event.preventDefault();\r\n beacon('item_click', set, item, swiperRef.realIndex);\r\n setTimeout(() => {\r\n window.location.href = url;\r\n }, 150);\r\n };\r\n\r\n if (!data || !data?.looks || data?.looks?.length < 1) {\r\n return <>no results;\r\n }\r\n\r\n return (\r\n <>\r\n {data && data?.looks && data?.looks?.length > 0 && (\r\n <>\r\n
\r\n {data?.looks?.length > 1 && (\r\n \r\n Previous\r\n \r\n )}\r\n\r\n

Get The Look

\r\n\r\n {data?.looks?.length > 1 && (\r\n <>\r\n \r\n Next\r\n \r\n \r\n )}\r\n
\r\n\r\n {\r\n beacon('previous_click', null, null, swiperRef.activeIndex);\r\n }}\r\n onSlideNextTransitionStart={(swiper) => {\r\n beacon(\r\n 'next_click',\r\n null,\r\n null,\r\n (((swiperRef.realIndex + 1 - 2) % data?.looks?.length) + data?.looks?.length) %\r\n data?.looks?.length,\r\n );\r\n }}\r\n watchOverflow={true}\r\n autoplay={false}\r\n >\r\n {data &&\r\n data?.looks &&\r\n data?.looks?.length > 0 &&\r\n data?.looks?.map((look, i) => (\r\n \r\n {look.items.map((item, j) => (\r\n
\r\n {\r\n handleClick(\r\n event,\r\n item.item_url + '&stylecode=' + item.details.color_id,\r\n i,\r\n j,\r\n );\r\n }}\r\n href={item.item_url + '&stylecode=' + item.details.color_id}\r\n className=\"prec-product-link\"\r\n data-component-type=\"get_the_look\"\r\n data-link-type=\"link\"\r\n data-link-title={item.details.ItemNo + ':' + item.title}\r\n data-link-position=\"widget\"\r\n >\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
{item.title}
\r\n
\r\n {item.details.Brand && <>By: {item.details.Brand}}\r\n {!item.details.Brand && <>}\r\n
\r\n
\r\n
\r\n {item.details.IsPriceRange}\r\n
\r\n\r\n {item.details.IsPriceRange !== item.details.WasPriceRange && (\r\n \r\n {item.details.WasPriceRange}\r\n \r\n )}\r\n
\r\n \r\n
\r\n ))}\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","import lozad from 'lozad';\r\nimport React, { useEffect, useState, useCallback } from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { IProduct, IProductEdp } from '@/components/pdp/IProduct';\r\nimport { getFindMine } from '@/external/service/findmine.service';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport { FindmineCarousel } from './FindmineCarousel';\r\n\r\nexport interface FindmineProps {\r\n SelectedEdpItem: IProductEdp;\r\n productData: IProduct;\r\n}\r\n\r\nexport const Findmine = ({ SelectedEdpItem, productData }: FindmineProps) => {\r\n const queryStrings = ['www.tsc.ca', 'origin1.tsc.ca', 'origin1s.tsc.ca'];\r\n\r\n const prodAppID = '04A3499628541E4C3995';\r\n const stagingAppID = '3AE190C3C1D080D096C1';\r\n const pageUrl = window.location.hostname;\r\n const isProd = includes(queryStrings, pageUrl);\r\n const findmineAppID = isProd ? prodAppID : stagingAppID;\r\n const findmineUrl = 'api.findmine.com';\r\n const domNode = document.getElementById('findMine');\r\n const [findmineData, setFindmineData] = useState(null);\r\n const [isLooksAvailable, setIsLooksAvailable] = useState(false);\r\n const [mcid, setMcid] = useState('');\r\n\r\n function includes(array, element) {\r\n return array.indexOf(element) >= 0;\r\n }\r\n\r\n const processData = useCallback((responseData) => {\r\n //format findmine data response, ie. add dash in itemNo\r\n const dataClone = { ...responseData };\r\n if (dataClone.looks) {\r\n dataClone.looks.forEach((look, index) => {\r\n if (look.items) {\r\n look.items.forEach((items, j) => {\r\n if (items.details.ItemNo) {\r\n dataClone.looks[index].items[j].details.ItemNo =\r\n items.details.ItemNo.substring(0, 3) + '-' + items.details.ItemNo.substring(3, 6);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // set state true if any looks returned\r\n if (typeof dataClone.looks != 'undefined' && dataClone.looks.length > 0) {\r\n setIsLooksAvailable(true);\r\n //there is no findmine so unhide teaser text (product overview text)\r\n const elem = document.getElementById('divProductTeaser');\r\n if (elem) {\r\n elem.style.display = 'block';\r\n }\r\n hideMayWeSuggest();\r\n } else {\r\n setIsLooksAvailable(false);\r\n unHideMayWeSuggest();\r\n }\r\n return dataClone;\r\n }, []);\r\n const unHideMayWeSuggest = () => {\r\n if (document.getElementById('divCuratedProductRecs')) {\r\n document.getElementById('divCuratedProductRecs').classList.remove('hidden');\r\n const observer = lozad();\r\n observer.observe();\r\n //there is no may we suggest so unhide teaser text (product overview text)\r\n if (document.getElementById('divProductTeaser')) {\r\n document.getElementById('divProductTeaser').style.display = 'block';\r\n }\r\n }\r\n //unhide title\r\n if (document.getElementById('findmine__header-wrap')) {\r\n document.getElementById('findmine__header-wrap').classList.add('hidden');\r\n }\r\n };\r\n const hideMayWeSuggest = () => {\r\n if (document.getElementById('divCuratedProductRecs')) {\r\n document.getElementById('divCuratedProductRecs').classList.add('hidden');\r\n }\r\n //hide title\r\n if (document.getElementById('findmine__header-wrap')) {\r\n document.getElementById('findmine__header-wrap').classList.add('hidden');\r\n }\r\n };\r\n const getFindMineData = useCallback(\r\n (mcID) => {\r\n const edpData = SelectedEdpItem;\r\n const configData = {\r\n findmineID: findmineAppID,\r\n findmineUrl: findmineUrl,\r\n productID: edpData.ItemNo,\r\n productColourID: edpData.StyleDimensionId,\r\n productPrice: edpData.AppliedPrice,\r\n productInStock: edpData.Inventory > 0 ? true : false,\r\n };\r\n getFindMine(\r\n configData,\r\n (responseData) => {\r\n if (responseData.result == 'error') {\r\n //no looks returned\r\n setFindmineData(processData(responseData));\r\n } else {\r\n setFindmineData(processData(responseData));\r\n }\r\n },\r\n (responseData) => {\r\n //on error show 'may we suggest' instead\r\n setFindmineData(processData(responseData));\r\n console.log(responseData);\r\n console.log('Failed to get findmine content');\r\n },\r\n mcID,\r\n );\r\n },\r\n [SelectedEdpItem, findmineAppID, processData],\r\n );\r\n const getECID = async () => {\r\n try {\r\n const result = await window.alloy('getIdentity');\r\n return result.identity.ECID;\r\n } catch (error) {\r\n console.log('Error retrieving ECID ' + 'error');\r\n console.log('find ecid error ');\r\n return '';\r\n }\r\n };\r\n const isValidCategory = (array) => {\r\n return array.some((element) => element === window['analyticsData'].page.category1DimensionId);\r\n };\r\n function checkAlloy() {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n clearInterval(interval);\r\n reject('Timeout: alloy variable was not defined');\r\n }, 1500);\r\n\r\n const interval = setInterval(() => {\r\n if (typeof window.alloy !== 'undefined') {\r\n clearInterval(interval);\r\n clearTimeout(timeout);\r\n resolve(true);\r\n }\r\n }, 100);\r\n });\r\n }\r\n const beacon = (action: string, set: number, item: number, currentSlide: number) => {\r\n const cookie: Cookie = new Cookie();\r\n let userEDP;\r\n let itemID = '';\r\n let setID = '';\r\n let setItemIDs = '';\r\n const interaction = `&interaction=${action}`;\r\n const responseID = `&response_uuid=${findmineData.response_uuid}`;\r\n if (action == 'item_click') {\r\n itemID = set != null ? `&item_id=${findmineData.looks[set].items[item].item_id}` : '';\r\n setID = `&set_id=${findmineData.looks[set].look_id}`;\r\n setItemIDs = findmineData.looks[set].items.map((item) => item.item_id).join(',');\r\n setItemIDs = `&set_item_ids=${setItemIDs}`;\r\n }\r\n if (action == 'next_click' || action == 'previous_click') {\r\n setID = `&set_id=${findmineData.looks[currentSlide].look_id}`;\r\n setItemIDs = findmineData.looks[currentSlide].items.map((item) => item.item_id).join(',');\r\n setItemIDs = `&set_item_ids=${setItemIDs}`;\r\n }\r\n if (\r\n cookie.UserAccessToken != undefined &&\r\n cookie.UserAccessToken.Token.length > 0 &&\r\n cookie.UserAccessToken.Edp > 0\r\n ) {\r\n userEDP = cookie.UserAccessToken.Edp;\r\n }\r\n const mcIDParam = mcid ? `&fm_session_id=${mcid}` : '';\r\n const customerID = userEDP ? `&customer_id=${userEDP}` : '';\r\n\r\n const apiBeacon = `https://api.findmine.com/api/v3/analytics?application=${findmineAppID}${setID}${setItemIDs}${interaction}${itemID}${responseID}${customerID}${mcIDParam}`;\r\n interface NewImage extends HTMLImageElement {\r\n callback: (...args: any[]) => void;\r\n }\r\n function createImage(): NewImage {\r\n return document.createElement('IMG') as NewImage;\r\n }\r\n const newImage = createImage();\r\n newImage.style.width = '1px';\r\n newImage.src = apiBeacon;\r\n };\r\n\r\n useEffect(() => {\r\n const findMineCategories = ['100101', '100047', '128153', '100071', '3002802', '100038', '100072'];\r\n async function checkAlloyThenGetData() {\r\n let alloyDefined = null;\r\n try {\r\n //check for Adobe Experience ID for analytics\r\n alloyDefined = await checkAlloy();\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n if (isValidCategory(findMineCategories)) {\r\n if (alloyDefined) {\r\n const mcID = await getECID();\r\n setMcid(mcID);\r\n getFindMineData(mcID);\r\n } else {\r\n getFindMineData(null);\r\n }\r\n } else {\r\n //unhide May We Suggest : Curated Product Recommendations\r\n unHideMayWeSuggest();\r\n }\r\n }\r\n\r\n checkAlloyThenGetData();\r\n }, [getFindMineData]);\r\n\r\n return (\r\n <>\r\n {ReactDOM.createPortal(\r\n <>{isLooksAvailable && },\r\n domNode,\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default Findmine;\r\n","/* eslint-disable prefer-const */\r\n/* eslint-disable @typescript-eslint/camelcase */\r\nimport React, { Component } from 'react';\r\n\r\nimport { Cookie } from '../../tscapi/utils/cookie';\r\nimport { IProduct, IProductEdp } from '../pdp/IProduct';\r\nimport EventBus from '../pdp/PdpEventBus';\r\ninterface MyState {}\r\n\r\ndeclare global {\r\n interface Window {\r\n tfcapi: any;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\ninterface MyProps {\r\n SelectedEdpItem: IProductEdp;\r\n ProductData: IProduct;\r\n}\r\n\r\nconst clientID = 'tsc';\r\nconst options = { autoCalculate: false };\r\n\r\nexport default class Truefit extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n state = {\r\n styleID: this.props.SelectedEdpItem.StyleDimensionId,\r\n };\r\n\r\n loadTrueFitLibrary = () => {\r\n const queryStrings = ['www.tsc.ca', 'origin1.tsc.ca', 'origin1s.tsc.ca'];\r\n function includes(array, element) {\r\n return array.indexOf(element) >= 0;\r\n }\r\n const pageUrl = window.location.hostname;\r\n const isProd = includes(queryStrings, pageUrl);\r\n const environment = isProd ? 'prod' : 'staging';\r\n /* eslint-disable */\r\n // prettier-ignore\r\n (function(r,e,o){\r\n var w=window,d=document,t,s,x;\r\n w.tfcapi=t=w.tfcapi||function(){t.q=t.q||[]; t.q.push(arguments);};\r\n t('init', {storeKey: r, environment: e, ...o});\r\n x=d.getElementsByTagName('script')[0];\r\n s=d.createElement('script');\r\n s.type='text/javascript';s.async=true;\r\n s.src='https://'+r+'-cdn'+(e==='dev'||e==='staging'?'.'+e:'')+ '.truefitcorp.com/fitrec/'+r+'/js/tf-integration.js';\r\n x.parentNode.insertBefore(s,x);\r\n // Don't change anything above this line\r\n })(clientID,environment,{autoCalculate:false});\r\n /* eslint-enable */\r\n };\r\n\r\n calculateAvailableSizes = (selectedEdpData, productData) => {\r\n //return colon separated list of sizes\r\n let result = [] as any;\r\n const allAvailableSizes = [];\r\n if (productData.Sizes != null) {\r\n productData.Sizes.forEach((size) => {\r\n result = productData.Edps.filter(\r\n (edps) =>\r\n edps.SizeDimensionId == size.DimensionId &&\r\n edps.StyleDimensionId == selectedEdpData.StyleDimensionId &&\r\n edps.Inventory > 0,\r\n );\r\n if (result.length > 0) {\r\n allAvailableSizes.push(result[0].Size);\r\n }\r\n });\r\n }\r\n return allAvailableSizes.join(':');\r\n };\r\n\r\n configWidget = () => {\r\n const { SelectedEdpItem } = this.props;\r\n let userID = null;\r\n const cookie: Cookie = new Cookie();\r\n const selectedEdpData = SelectedEdpItem;\r\n const productEdp = this.props.ProductData;\r\n const itemNo = SelectedEdpItem.ItemNo.replace(/-/g, '');\r\n if (\r\n cookie.UserAccessToken != undefined &&\r\n cookie.UserAccessToken.Token.length > 0 &&\r\n cookie.UserAccessToken.Edp > 0\r\n ) {\r\n userID = cookie.UserAccessToken.Edp;\r\n }\r\n const widgetConfig = {\r\n products: {},\r\n };\r\n if (userID) {\r\n widgetConfig['userId'] = userID;\r\n widgetConfig['registered'] = userID ? true : false;\r\n }\r\n widgetConfig['locale'] = cookie.Language;\r\n widgetConfig.products[itemNo] = {\r\n availableSizes: this.calculateAvailableSizes(selectedEdpData, productEdp),\r\n };\r\n if (selectedEdpData.Style) {\r\n widgetConfig.products[itemNo]['colorId'] = selectedEdpData.Style;\r\n }\r\n window.tfcapi('calculate', widgetConfig);\r\n };\r\n\r\n sendTrueFitCall = () => {\r\n window.tfcapi(\r\n 'event',\r\n 'tfc-fitrec-product',\r\n 'autoSizeSelect',\r\n function (context) {\r\n // truefit recommends a specific size, so fire off an event that pdp will listen for\r\n const tfSizeEvent = new CustomEvent('tf-sizechanage', {\r\n detail: { size: context.size },\r\n });\r\n\r\n document.dispatchEvent(tfSizeEvent);\r\n }.bind(this),\r\n );\r\n\r\n //window.tfcapi('event', 'tfc-fitrec-product', 'error', function(context) {\r\n // console.log(context);\r\n //});\r\n\r\n //window.tfcapi('event', 'tfc-fitrec-product', 'pageload', function(context) {\r\n // console.log(context);\r\n //});\r\n\r\n //window.tfcapi('event', 'tfc-fitrec-product', 'render', function(context) {\r\n // console.log(context);\r\n //});\r\n\r\n //window.tfcapi('event', 'tfc-fitrec-product', 'nostylenouser', function(context) {\r\n // console.log('nostylenouser');\r\n //});\r\n };\r\n\r\n componentDidMount() {\r\n this.loadTrueFitLibrary();\r\n this.configWidget();\r\n this.sendTrueFitCall();\r\n }\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.SelectedEdpItem?.StyleDimensionId !== this.props.SelectedEdpItem?.StyleDimensionId) {\r\n this.configWidget();\r\n }\r\n }\r\n\r\n render() {\r\n const itemNo = this.props.SelectedEdpItem.ItemNo.replace(/-/g, '');\r\n const selectedEdpData = this.props.SelectedEdpItem;\r\n return (\r\n \r\n {selectedEdpData && (\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n","export class TmProductForPRP {\r\n ProductType: string;\r\n BadgeImagePath: string;\r\n Installments: number;\r\n IsPriceRange: string;\r\n ItemNo: string;\r\n Name: string;\r\n Overview: string;\r\n PricePromoLabel: string;\r\n AppliedOfferMessage: string;\r\n ProductReviewCount: number;\r\n ProductReviewRating: number;\r\n VideosCount: number;\r\n WasPriceRange: string;\r\n LinkWithoutDomain: string;\r\n EasyPaymentPrice: string;\r\n ImageUrl: string;\r\n ShowBadgeImage: boolean;\r\n DefaultEdp: number;\r\n Edps: TmEdpForPRP[];\r\n OnAirInfo: TmOnAirInfo;\r\n IsLive: boolean;\r\n ProductTypes: string[];\r\n Brand: string;\r\n}\r\n\r\nexport class TmOnAirInfo {\r\n OnAirStart: Date;\r\n DurationInSecond: number;\r\n}\r\n\r\nexport type TmSellerType = 'TSC' | 'TSCPartner' | 'Marketplace';\r\n\r\nexport enum TmSellerTypeEnum {\r\n TSC = '0',\r\n TSCPartner = '1',\r\n Marketplace = '2',\r\n}\r\n\r\nexport class TmProduct {\r\n // AlternateImages: TmImage[];\r\n AlternateImageUrls: string[];\r\n BadgeImagePath: string;\r\n Brand: string;\r\n BrandLink: TmLink;\r\n CustomFields: TmProductCustomField[];\r\n DefaultDimensionId: number;\r\n DefaultEdp: number;\r\n EasyPaymentPrice: string;\r\n Edps: TmEdp[];\r\n EnabledAddToCart: boolean;\r\n ImageUrl: string;\r\n Installments: number;\r\n IsLive: boolean;\r\n IsPriceRange: string;\r\n IsShowstopper: boolean;\r\n IsSoldOut: boolean;\r\n IsWebOnly: boolean;\r\n IsRestricted: boolean;\r\n IsDonation: boolean;\r\n RestrictedProvinces: string[];\r\n ItemNo: string;\r\n Name: string;\r\n OnAirInfo: TmOnAirInfo;\r\n Overview: string;\r\n PriceIsLabel: string;\r\n PricePromoLabel: string;\r\n PriceWasLabel: string;\r\n ProductLink: TmLink;\r\n ProductMessages: TmProductMessages;\r\n ProductReviewCount: number;\r\n ProductReviewRating: number;\r\n ProductType: string;\r\n ProductTypeLink: TmLink;\r\n ProductTypes: string[];\r\n ProductTypePath: TmFacet[];\r\n QuickViewLink: TmLink;\r\n RelatedItemNos: string[];\r\n AutoDeliveryItemNos: string[];\r\n SavePriceLabel: string;\r\n SellerType: TmSellerType;\r\n SellerId: string;\r\n SellerName: string;\r\n SellerPageLink: string;\r\n ShowBadgeImage: boolean;\r\n ShowPriceIs: boolean;\r\n ShowPricePromo: boolean;\r\n ShowPriceWas: boolean;\r\n Sizes: TmDimension[];\r\n Styles: TmDimension[];\r\n DeliveryOptions: TmDeliveryOption[];\r\n AvailableSwatches: string[];\r\n Videos: TmVideo[];\r\n WasPriceRange: string;\r\n}\r\n\r\nexport class TmEdp {\r\n EdpNo: number;\r\n UpcNo: number;\r\n AppliedPrice: string;\r\n AppliedShipping: string;\r\n EasyPaymentPrice: string;\r\n // Images: TmImage[];\r\n ImageUrl: string;\r\n Inventory: number;\r\n ItemNo: string;\r\n PriceWasLabel: string;\r\n SavePrice: string;\r\n Size: string;\r\n SizeDimensionId: string;\r\n SkuAvailabilityMessage: string;\r\n //SkuAvailabilityType: number;\r\n Style: string;\r\n StyleDimensionId: string;\r\n WasPrice: string;\r\n Quantities: number[];\r\n IsSoldOut: boolean;\r\n IsDonation: boolean;\r\n IsAdvanceOrBackOrder: boolean;\r\n IsSOEligible: boolean;\r\n}\r\n\r\nexport class TmImage {\r\n Height: number;\r\n ImageURL: string;\r\n Width: number;\r\n}\r\n\r\nexport class TmEdpForPRP {\r\n AppliedPrice: string;\r\n AppliedShipping: string;\r\n EasyPaymentPrice: string;\r\n EdpNo: number;\r\n ImageUrl: string;\r\n Inventory: number;\r\n Size: string;\r\n SizeDimensionId: string;\r\n Style: string;\r\n StyleDimensionId: string;\r\n Upc: number;\r\n PriceWasLabel: string;\r\n SavePrice: string;\r\n UpcNo: string;\r\n}\r\n\r\nexport class TmDimension {\r\n DimensionId: string;\r\n DisplayName: string;\r\n Disabled: boolean;\r\n}\r\n\r\nexport class TmDeliveryOption {\r\n EdpNo: number;\r\n DisplayName: string;\r\n}\r\n\r\nexport class TmVideo {\r\n Description: string;\r\n Thumbnail: string;\r\n Filename: string;\r\n Format: string;\r\n}\r\n\r\nexport class TmProductCustomField {\r\n Sequence: number;\r\n DisplayName: string;\r\n MaxLength: number;\r\n DisplayValue: string;\r\n}\r\n\r\nexport class TmProductMessages {\r\n AppliedOfferMessage: string;\r\n}\r\n\r\nexport class TmTellAFriendEmail {\r\n constructor(\r\n public senderName: string,\r\n public senderEmail: string,\r\n public recipientName: string,\r\n public recipientEmail: string,\r\n public itemName: string,\r\n public itemImage: string,\r\n public itemURL: string,\r\n public customMessage: string,\r\n ) {}\r\n}\r\nexport class TmProductSection {\r\n Name: string;\r\n Order: number;\r\n Contents: TmProductSectionContent;\r\n}\r\n\r\nexport class TmProductSectionContent {\r\n ContentOrder: number;\r\n Content: string;\r\n}\r\n\r\nexport class TmFacet {\r\n FacetTypeId: string;\r\n FacetValueId: string;\r\n FacetValueNameEn: string;\r\n FacetValueNameFr: string;\r\n FacetValueDisplayName: string;\r\n FacetValueParentId: string;\r\n FacetValueDisplayOrder: number;\r\n}\r\n\r\nexport class TmLink {\r\n ShortLinkText: string;\r\n LinkText: string;\r\n LinkWithoutDomain: string;\r\n}\r\n\r\nexport class AlterModel {\r\n public Images: OneAlterModel[];\r\n}\r\n\r\nexport class OneAlterModel {\r\n public SmallHeight: string;\r\n public BigHeight: string;\r\n public SmallWidth: string;\r\n public BigWidth: string;\r\n public id: number;\r\n public SmallImage: string;\r\n public BigImage: string;\r\n}\r\n\r\nexport class OneEdpImageModel {\r\n public SmallImage: string;\r\n public MidImage: string;\r\n public BigImage: string;\r\n public ImageFileName: string;\r\n public Edp: boolean;\r\n public StyleId: string;\r\n public Index: number;\r\n\r\n constructor(edp: boolean, styleId: string) {\r\n this.StyleId = styleId;\r\n this.Edp = edp;\r\n }\r\n}\r\n\r\nexport class TmProductRecentlyViewed extends TmProduct {\r\n favoured = false;\r\n}\r\n","export const en = {\r\n addToFavourite: 'Add to favorites',\r\n addedToFavourite: 'Added to favorites',\r\n permanentlyOutOfStockButtonText: 'Out of Stock',\r\n emailWhenInStockText: 'Email when in stock',\r\n addToBagText: 'Add to bag',\r\n reviewsText: 'reviews',\r\n wasText: 'Was',\r\n shippingText: 'Shipping',\r\n easyPayText: 'Easy Pay',\r\n sizeGuideIconAlt: 'Size Guide',\r\n sizeGuideSizeGuideText: 'Size guide',\r\n savingText: 'Savings',\r\n freeShipping: 'FREE SHIPPING',\r\n addReviewText: 'Add a review',\r\n paymentsOfText: 'Payments of',\r\n withText: 'with',\r\n orText: 'or',\r\n outOfStockText: 'Out of Stock',\r\n quantity: 'Quantity',\r\n quantityShort: 'Qty',\r\n only: 'Only ',\r\n left: ' left!',\r\n favoriteTooltip: 'Please sign in/register to add items to your Favorites list.',\r\n closeText: 'Close',\r\n colours: 'Colours',\r\n colour: 'Colour',\r\n style: 'Style',\r\n sizes: 'Sizes',\r\n size: 'Size',\r\n frequency: 'Frequency',\r\n recommendedSize: 'Recommended size',\r\n selectSize: 'Select size',\r\n selectStyle: 'Select style',\r\n selectSizeAndStyle: 'Select size & style',\r\n oneTimeShipment: '1 Time Shipment',\r\n autoDelivery: 'Auto Delivery',\r\n addedToBag: 'Added to bag',\r\n sizeGuideTitle: 'Size Guide',\r\n please: 'Please',\r\n signIn: 'sign in',\r\n register: 'register',\r\n toAddItemsToYourFavoritesList: 'to add items to your Favorites list.',\r\n brandText: 'Brand: {{brand}}',\r\n videoDesc: 'Pre-recorded videos contain pricing or promotional offers that may have expired.',\r\n autoPlayText: 'Autoplay Videos',\r\n autoPlayDisclaimerText:\r\n 'You can switch this setting anytime by selecting the checkbox and we will remember your choice for any additional pages you view',\r\n 'Sold and fulfilled by': 'Sold and fulfilled by',\r\n};\r\n\r\nexport const fr = {\r\n addToFavourite: 'Ajouter aux Favoris',\r\n addedToFavourite: 'Ajouté aux Favoris',\r\n permanentlyOutOfStockButtonText: 'Out of Stock',\r\n emailWhenInStockText: 'Envoyez-moi un e-mail lorsque l’article est de nouveau en stock.',\r\n addToBagText: 'Ajouter au panier',\r\n reviewsText: 'commentaires',\r\n wasText: 'A été',\r\n shippingText: 'Expédition',\r\n easyPayText: 'Paiement facile',\r\n sizeGuideIconAlt: 'Guide des tailles',\r\n sizeGuideSizeGuideText: 'Guide des tailles',\r\n savingText: 'Économie',\r\n freeShipping: 'LIVRAISON GRATUITE',\r\n addReviewText: 'Ajouter un commentaire',\r\n paymentsOfText: 'Paiements de',\r\n withText: 'avec',\r\n orText: 'ou',\r\n outOfStockText: 'En Rupture de Stock',\r\n quantity: 'Quantité',\r\n quantityShort: 'Qté',\r\n only: 'Seulement ',\r\n left: ' en stock!',\r\n favoriteTooltip: 'Veuillez vous connecter ou vous inscrire pour ajouter des articles à votre liste de favoris.',\r\n closeText: 'Fermer',\r\n colours: 'Couleurs',\r\n colour: 'Couleur',\r\n style: 'Style',\r\n sizes: 'Tailles',\r\n size: 'Taille',\r\n recommendedSize: 'Taille recommandée',\r\n selectSize: 'Sélectionnez la taille',\r\n selectStyle: 'Select style',\r\n selectSizeAndStyle: 'Select size & style',\r\n addedToBag: 'Ajouté au panier',\r\n sizeGuideTitle: 'Guide des tailles',\r\n please: 'Veuillez vous',\r\n signIn: 'connecter',\r\n register: 'enregistrer',\r\n toAddItemsToYourFavoritesList: 'pour ajouter des articles à votre liste de favoris.',\r\n brandText: 'Marque : {{brand}}',\r\n autoPlayText: 'Vidéos en lecture automatique',\r\n autoPlayDisclaimerText:\r\n 'Vous pouvez changer ce paramètre à tout moment en sélectionnant la case à cocheret nous nous souviendrons de votre choix pour toutes les pages supplémentaires que vous consultez.',\r\n videoDesc:\r\n 'Les vidéos préenregistrées contiennent des prix ou des offres promotionnelles qui peuvent avoir expiré.',\r\n 'Sold and fulfilled by': 'Vendu et expédié par',\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\n\r\nexport interface PdpAdvanceOrderProps {\r\n SelectedEdpItem: IProductEdp;\r\n}\r\n// Easiest way to declare a Function Component; return type is inferred.\r\nconst PdpAdvanceOrder = ({ SelectedEdpItem }: PdpAdvanceOrderProps) => {\r\n const isAdvanceOrder = useMemo(() => {\r\n if (!SelectedEdpItem || !SelectedEdpItem?.IsAdvanceOrBackOrder) {\r\n return false;\r\n }\r\n return true;\r\n }, [SelectedEdpItem]);\r\n\r\n const [isStyledMessage, setIsStyledMessage] = useState(false);\r\n const [advanceOrderMessage, setAdvanceOrderMessage] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!SelectedEdpItem || !SelectedEdpItem?.SkuAvailabilityMessage) {\r\n setAdvanceOrderMessage('');\r\n } else {\r\n const message = SelectedEdpItem?.SkuAvailabilityMessage;\r\n if (message && message.includes(':')) {\r\n setIsStyledMessage(true);\r\n } else {\r\n setIsStyledMessage(false);\r\n }\r\n setAdvanceOrderMessage(message);\r\n }\r\n }, [SelectedEdpItem]);\r\n\r\n return (\r\n <>\r\n {isAdvanceOrder && (\r\n <>\r\n
\r\n {isStyledMessage && (\r\n <>\r\n {advanceOrderMessage.split(':')[0]}:\r\n {advanceOrderMessage.split(':')[1]}\r\n \r\n )}\r\n {!isStyledMessage &&
{advanceOrderMessage}
}\r\n
\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default PdpAdvanceOrder;\r\n","import React, { useEffect, useMemo, Dispatch, SetStateAction } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\n\r\nexport interface PdpAdvanceOrderProps {\r\n SelectedEdpItem: IProductEdp;\r\n isAutoDeliveryEnabled: boolean;\r\n ProductData: IProduct;\r\n //setIsPropertyTrue: Dispatch>;\r\n getEasyPayArticle: () => {};\r\n}\r\nconst domNode = document.getElementById('divEasyPayment');\r\nif (domNode) {\r\n domNode.innerHTML = '';\r\n}\r\n\r\nconst PdpEasyPayButton = ({\r\n SelectedEdpItem,\r\n ProductData,\r\n getEasyPayArticle,\r\n isAutoDeliveryEnabled,\r\n}: PdpAdvanceOrderProps) => {\r\n const {\r\n Name,\r\n ItemNo,\r\n DefaultEdp,\r\n IsSoldOut,\r\n DeliveryOptions,\r\n IsPriceRange,\r\n WasPriceRange,\r\n ProductReviewCount,\r\n ProductReviewRating,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n NoReturnsMessage,\r\n Edps,\r\n Brand,\r\n BrandDimensionId,\r\n BadgeImagePath,\r\n ProductTypePath,\r\n } = ProductData;\r\n const isEasyPay = useMemo(() => {\r\n if (!SelectedEdpItem || !SelectedEdpItem?.EasyPaymentPrice) {\r\n return false;\r\n }\r\n return true;\r\n }, [SelectedEdpItem]);\r\n\r\n const productName = useMemo(() => {\r\n if (isAutoDeliveryEnabled) {\r\n return DeliveryOptions.find((item) => item.EdpNo == SelectedEdpItem.EdpNo).DisplayName;\r\n } else {\r\n return Name;\r\n }\r\n }, [DeliveryOptions, SelectedEdpItem, Name, isAutoDeliveryEnabled]);\r\n\r\n const easyPay = useMemo(() => {\r\n {\r\n if (!SelectedEdpItem || !SelectedEdpItem?.EasyPaymentPrice) {\r\n return false;\r\n } else {\r\n return SelectedEdpItem.EasyPaymentPrice;\r\n }\r\n }\r\n }, [DeliveryOptions, SelectedEdpItem, Name, isAutoDeliveryEnabled]);\r\n\r\n if (!domNode) {\r\n return null;\r\n }\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n {(isEasyPay || NoReturnsMessage) && (\r\n <>\r\n
\r\n {isEasyPay && (\r\n
\r\n or \r\n {easyPay} \r\n \r\n with{' '}\r\n \r\n getEasyPayArticle()}\r\n >\r\n EASY PAY®\r\n \r\n \r\n \r\n
\r\n )}\r\n {NoReturnsMessage && (\r\n
\r\n {NoReturnsMessage}\r\n
\r\n )}\r\n
\r\n
\r\n \r\n )}\r\n ,\r\n domNode,\r\n );\r\n};\r\n\r\nexport default PdpEasyPayButton;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport AddBagSvg from '@/components/common/AddBagSvg';\r\nimport CheckmarkSvg from '@/components/common/CheckmarkSvg';\r\n\r\nimport { IProduct, IProductEdp } from './IProduct';\r\n\r\nexport interface PdpProps {\r\n SelectedEdpItem: IProductEdp;\r\n ProductData: IProduct;\r\n isAutoDeliveryEnabled: boolean;\r\n}\r\nconst domNode = document.getElementById('itemNumberPortal');\r\nif (domNode) {\r\n domNode.innerHTML = '';\r\n}\r\n\r\nconst PdpItemNo = ({ SelectedEdpItem, ProductData, isAutoDeliveryEnabled }: PdpProps) => {\r\n const {\r\n Name,\r\n ItemNo,\r\n DefaultEdp,\r\n IsSoldOut,\r\n DeliveryOptions,\r\n IsPriceRange,\r\n ShowFreeShipEligibleMessage,\r\n WasPriceRange,\r\n ProductReviewCount,\r\n ProductReviewRating,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n Edps,\r\n Brand,\r\n BrandDimensionId,\r\n BadgeImagePath,\r\n ProductTypePath,\r\n } = ProductData;\r\n const formatNumber = (itemNo) => {\r\n return itemNo.replace(/(\\d{3})(\\d{3})/, '$1-$2');\r\n };\r\n const productItemNo = useMemo(() => {\r\n if (isAutoDeliveryEnabled) {\r\n const deliveryItemNo = DeliveryOptions.find((item) => item.EdpNo == SelectedEdpItem.EdpNo).ItemNo;\r\n return formatNumber(deliveryItemNo);\r\n } else {\r\n return formatNumber(ItemNo);\r\n }\r\n }, [DeliveryOptions, ItemNo, SelectedEdpItem, isAutoDeliveryEnabled]);\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n
{productItemNo}
\r\n {window.tscConfig?.AutoFreeShippingEnabled == 'true' &&\r\n ShowFreeShipEligibleMessage &&\r\n window.tscConfig?.FreeShippingThreshold && (\r\n
\r\n \r\n {`Ships FREE with a $${window.tscConfig?.FreeShippingThreshold}+ order`}\r\n
\r\n )}\r\n ,\r\n domNode,\r\n );\r\n};\r\n\r\nexport default PdpItemNo;\r\n","import React, { useEffect, useRef } from 'react';\r\n\r\nfunction usePrevious(value) {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value; //assign the value of ref to the argument\r\n }, [value]); //this code will run when the value of 'value' changes\r\n return ref.current; //in the end, return the current ref value.\r\n}\r\nexport default usePrevious;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport usePrevious from './use-previous';\r\n\r\nexport interface PdpProps {\r\n children: any;\r\n selector: any;\r\n}\r\n\r\nconst Portal = ({ children, selector }: PdpProps) => {\r\n const prevSelector = usePrevious(selector);\r\n const prevChild = usePrevious(children);\r\n const domNode = document.getElementById(selector);\r\n\r\n if (!domNode) {\r\n return null;\r\n }\r\n if (prevSelector != selector) {\r\n domNode.innerHTML = '';\r\n }\r\n\r\n return ReactDOM.createPortal(<>{children}, domNode);\r\n};\r\n\r\nexport default Portal;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\nimport Portal from '../common/portal';\r\n\r\nexport interface PdpProps {\r\n SelectedEdpItem: IProductEdp;\r\n ProductData: IProduct;\r\n isAutoDeliveryEnabled: boolean;\r\n Selector?: any;\r\n}\r\n//const domNode = document.getElementById('lblProductName');\r\n//domNode.innerHTML = '';\r\nconst PdpName = ({ SelectedEdpItem, ProductData, isAutoDeliveryEnabled, Selector }: PdpProps) => {\r\n const {\r\n Name,\r\n ItemNo,\r\n DefaultEdp,\r\n IsSoldOut,\r\n DeliveryOptions,\r\n IsPriceRange,\r\n WasPriceRange,\r\n ProductReviewCount,\r\n ProductReviewRating,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n Edps,\r\n Brand,\r\n BrandDimensionId,\r\n BadgeImagePath,\r\n ProductTypePath,\r\n } = ProductData;\r\n\r\n const productName = useMemo(() => {\r\n if (isAutoDeliveryEnabled) {\r\n return DeliveryOptions.find((item) => item.EdpNo == SelectedEdpItem.EdpNo).DisplayName;\r\n } else {\r\n return Name;\r\n }\r\n }, [DeliveryOptions, SelectedEdpItem, Name, isAutoDeliveryEnabled]);\r\n\r\n if (!Selector) {\r\n return <>{productName};\r\n }\r\n return {productName};\r\n};\r\n\r\nexport default React.memo(PdpName);\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { en, fr } from './i18n';\r\nimport { useTranslation, Trans } from 'react-i18next';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\n\r\nexport interface PdpProps {\r\n SelectedEdpItem: IProductEdp;\r\n ProductData: IProduct;\r\n Selector?: any;\r\n}\r\nconst domNode = document.getElementById('pricesPortal');\r\ndomNode.innerHTML = '';\r\nconst PdpPrice = ({ SelectedEdpItem, ProductData, Selector }: PdpProps) => {\r\n const { i18n, t } = useTranslation('pdp-price');\r\n\r\n const {\r\n Name,\r\n ItemNo,\r\n DefaultEdp,\r\n IsSoldOut,\r\n IsPriceRange,\r\n WasPriceRange,\r\n ProductReviewCount,\r\n ProductReviewRating,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n Edps,\r\n Brand,\r\n BrandDimensionId,\r\n BadgeImagePath,\r\n DeliveryOptions,\r\n ProductTypePath,\r\n } = ProductData;\r\n\r\n i18n.addResourceBundle('en', 'pdp-price', en, true, true);\r\n i18n.addResourceBundle('fr', 'pdp-price', fr, true, true);\r\n\r\n const isPrice = useMemo(() => {\r\n const currentEdp = SelectedEdpItem;\r\n if (!currentEdp || !currentEdp?.AppliedPrice) {\r\n return IsPriceRange;\r\n }\r\n return currentEdp.AppliedPrice;\r\n }, [IsPriceRange, SelectedEdpItem]);\r\n\r\n const wasPrice = useMemo(() => {\r\n const currentEdp = SelectedEdpItem;\r\n if (!currentEdp || !currentEdp?.WasPrice) {\r\n return WasPriceRange;\r\n }\r\n return currentEdp.WasPrice;\r\n }, [WasPriceRange, SelectedEdpItem]);\r\n\r\n const showWasPrice = useMemo(() => {\r\n return wasPrice !== isPrice;\r\n }, [wasPrice, isPrice]);\r\n\r\n const saving = useMemo(() => {\r\n const currentEdp = SelectedEdpItem;\r\n if (!currentEdp) {\r\n return '';\r\n }\r\n return currentEdp.SavePrice;\r\n }, [SelectedEdpItem]);\r\n\r\n const shipping = useMemo(() => {\r\n let edp = SelectedEdpItem;\r\n if (!edp) {\r\n edp = SelectedEdpItem;\r\n }\r\n const text = edp.AppliedShipping;\r\n if (text === '') {\r\n return {\r\n show: true,\r\n text: t('freeShipping'),\r\n isFreeShipping: true,\r\n };\r\n }\r\n return {\r\n show: true,\r\n text,\r\n isFreeShipping: false,\r\n };\r\n }, [SelectedEdpItem, t]);\r\n\r\n const priceDisplay = () => {\r\n return (\r\n <>\r\n
\r\n
{isPrice}
\r\n {showWasPrice && (\r\n
\r\n {t('wasText')}\r\n {wasPrice}\r\n
\r\n )}\r\n
\r\n\r\n {Selector && (\r\n
\r\n {shipping.show && (\r\n
\r\n {shipping.isFreeShipping && (\r\n \r\n {shipping.text}\r\n \r\n )}\r\n {!shipping.isFreeShipping && (\r\n \r\n {t('shippingText')}:{' '}\r\n \r\n {shipping.text}\r\n \r\n \r\n )}\r\n
\r\n )}\r\n {saving && (\r\n
\r\n {t('savingText')}:{' '}\r\n \r\n {saving}\r\n \r\n
\r\n )}\r\n
\r\n )}\r\n \r\n );\r\n };\r\n\r\n if (!Selector) {\r\n return priceDisplay();\r\n }\r\n\r\n return ReactDOM.createPortal(priceDisplay(), domNode);\r\n};\r\n\r\nexport default PdpPrice;\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\nimport classnames from 'classnames';\r\n\r\nexport interface PdpProps {\r\n SelectedEdpItem: IProductEdp;\r\n ProductData: IProduct;\r\n isAutoDeliveryEnabled: boolean;\r\n showSticky: boolean;\r\n children: any;\r\n entry: any;\r\n}\r\nconst PdpSticky = ({ SelectedEdpItem, ProductData, isAutoDeliveryEnabled, showSticky, children, entry }: PdpProps) => {\r\n const {\r\n Name,\r\n ItemNo,\r\n DefaultEdp,\r\n IsSoldOut,\r\n DeliveryOptions,\r\n IsPriceRange,\r\n WasPriceRange,\r\n ProductReviewCount,\r\n ProductReviewRating,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n Edps,\r\n Brand,\r\n BrandDimensionId,\r\n BadgeImagePath,\r\n ProductTypePath,\r\n } = ProductData;\r\n\r\n const productName = useMemo(() => {\r\n if (isAutoDeliveryEnabled) {\r\n return DeliveryOptions.find((item) => item.EdpNo == SelectedEdpItem.EdpNo).DisplayName;\r\n } else {\r\n return Name;\r\n }\r\n }, [DeliveryOptions, SelectedEdpItem, Name, isAutoDeliveryEnabled]);\r\n\r\n return (\r\n \r\n {children}\r\n
\r\n );\r\n};\r\n\r\nexport default PdpSticky;\r\n","/* eslint-disable no-useless-escape */\r\nimport { useQueryClient } from '@tanstack/react-query';\r\nimport classNames from 'classnames';\r\nimport dayjs from 'dayjs';\r\nimport React, { useCallback, useEffect, useMemo, useState, useRef } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useInView } from 'react-intersection-observer';\r\nimport smoothscroll from 'smoothscroll-polyfill';\r\n\r\nimport AddToBag from '@/components/add_to_bag/add-to-bag.component';\r\nimport InfoTooltipSvgWhite from '@/components/common/InfoTooltipSvgWhite';\r\nimport { Popover, PopoverTrigger, PopoverContent, PopoverArrow, PopoverClose } from '@/components/common/popover';\r\nimport TooltipClose from '@/components/common/TooltipCloseSvg';\r\nimport Findmine from '@/components/findmine/Findmine';\r\nimport PdpEasyPayPopup from '@/components/pdp_easypay_popup/PdpEasyPayPopup';\r\nimport Truefit from '@/components/truefit_pdp/truefit-pdp.component';\r\nimport { ProductHelpers } from '@/components/v2/utils/ProductHelpers';\r\nimport SizeHelpers, { Size } from '@/components/v2/utils/SizeHelpers';\r\nimport { SwatchHelpers } from '@/components/v2/utils/SwatchHelpers';\r\nimport useBreakpoint from '@/components/v2/utils/useBreakPoint';\r\nimport { TmCart } from '@/tscapi/model/cart';\r\nimport { TmFavourite } from '@/tscapi/model/favourite';\r\nimport { TmSellerTypeEnum } from '@/tscapi/model/product';\r\nimport { TmCartLineRequest } from '@/tscapi/model/request/cart-request';\r\nimport { createCartAndAddItem, addItemToCart } from '@/tscapi/service/cart.service';\r\nimport http from '@/tscapi/service/httpservice';\r\nimport { Storage } from '@/tscapi/utils/browser-storage';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\nimport { FavouriteStorage } from '@/tscapi/utils/favourites-storage';\r\n\r\nimport RadioButtonOffSvg from '../common/RadioButtonOffSvg';\r\nimport RadioButtonOnSvg from '../common/RadioButtonOnSvg';\r\nimport { trackFBSearchEvent } from '../tracking_third_party/fbSearch';\r\n\r\nimport FavoriteEmptyIcon from './FavoriteEmptyIcon';\r\nimport FavoriteIcon from './FavoriteIcon';\r\nimport { en, fr } from './i18n';\r\nimport { IProduct, IProductEdp } from './IProduct';\r\nimport PdpAdvanceOrder from './PdpAdvanceOrder';\r\nimport PdpEasyPayButton from './PdpEasyPayButton';\r\nimport EventBus from './PdpEventBus';\r\nimport PdpItemNo from './PdpFreeShippingItemNo';\r\nimport PdpName from './PdpName';\r\nimport PdpPrices from './PdpPrice';\r\nimport PdpSticky from './PdpSticky';\r\n\r\nexport interface PdpProps {\r\n productData: IProduct;\r\n}\r\nexport interface EasyPayData {\r\n title: string;\r\n content: string;\r\n}\r\ndeclare let pwr: any;\r\ndeclare global {\r\n interface Window {\r\n pwr: any;\r\n }\r\n}\r\n\r\ntype FavoriteEventDetail = {\r\n productData: IProduct;\r\n selectedEdp: number;\r\n};\r\n\r\n// Easiest way to declare a Function Component; return type is inferred.\r\nconst PdpDescriptionArea = ({ productData }: PdpProps) => {\r\n const {\r\n DefaultEdp,\r\n IsSoldOut,\r\n Styles = [],\r\n Sizes = [],\r\n AvailableSwatches,\r\n Edps,\r\n DeliveryOptions,\r\n ProductTypePath,\r\n SellerName,\r\n SellerPageLink,\r\n SellerType,\r\n } = productData;\r\n const hasFBTrackingFired = useRef(false);\r\n\r\n const { i18n, t } = useTranslation('pdp-description');\r\n i18n.addResourceBundle('en', 'pdp-description', en, true, true);\r\n i18n.addResourceBundle('fr', 'pdp-description', fr, true, true);\r\n\r\n const FAVORITE_TOOLTIP_CLOSE_TIMEOUT = 3000;\r\n const IMAGE_URL_PREFIX = 'https://item.tscimg.ca/TSC/';\r\n const LOADING_ASSET_PATH = '/App_Assets/public/loading.gif';\r\n const referenceRef = useRef(null);\r\n\r\n const { isMobile } = useBreakpoint();\r\n\r\n const isSignedIn = useMemo(() => {\r\n const cookie = new Cookie();\r\n return !!cookie.UserAccessToken;\r\n }, []);\r\n\r\n const styles = useMemo(() => {\r\n return !Styles ? [] : Styles;\r\n }, [Styles]);\r\n\r\n const sizes = useMemo(() => {\r\n return !Sizes ? [] : Sizes;\r\n }, [Sizes]);\r\n\r\n const edps = useMemo(() => {\r\n return !Edps ? [] : Edps;\r\n }, [Edps]);\r\n\r\n const onFavoriteTooltipCloseClick = (\r\n e: React.MouseEvent | React.MouseEvent,\r\n ) => {\r\n e.preventDefault();\r\n setShowFavoriteTooltip(false);\r\n };\r\n const getDefaultEdpItem = useMemo(() => {\r\n return edps.find((edpItem) => edpItem.EdpNo === DefaultEdp);\r\n }, [edps, DefaultEdp]);\r\n const [selectedStyleIndex, setSelectedStyleIndex] = useState(\r\n !Styles ? -1 : Styles.findIndex((v) => v.DimensionId === getDefaultEdpItem.StyleDimensionId),\r\n );\r\n const [selectedSizeIndex, setSelectedSizeIndex] = useState(\r\n !Sizes ? -1 : Sizes.findIndex((v) => v.DimensionId === getDefaultEdpItem.SizeDimensionId),\r\n );\r\n const isAutoDeliveryEnabled = useMemo(() => {\r\n //setReferenceElement(document.getElementById('adpPopup') as HTMLElement);\r\n return DeliveryOptions && DeliveryOptions.length > 0;\r\n }, [DeliveryOptions]);\r\n\r\n const [isFavourite, setIsFavourite] = useState(false);\r\n const [favourites, setFavourites] = useState([]);\r\n const [currentIsFavorite, setCurrentIsFavorite] = useState(/*isFavorite*/ false);\r\n const [showFavoriteTooltip, setShowFavoriteTooltip] = useState(false);\r\n const [showEasyPayPopup, setShowEasyPayPopup] = useState(false);\r\n const [selectedQuantity, setSelectedQuantity] = useState(1);\r\n const [selectedADP, setSelectedADP] = useState();\r\n const [isAddedToBag, setIsAddedToBag] = useState(false);\r\n const [gotoIndex, setGotoIndex] = useState(0);\r\n const [popupOpen, setPopupOpen] = useState(false);\r\n const [isAddToBagLoading, setIsAddToBagLoading] = useState(false);\r\n const [easyPayPopupData, setEasyPayPopupData] = useState({ title: '', content: '' });\r\n const [isSwatch, setIsSwatch] = useState(false);\r\n const [labelSize, setLabelSize] = useState('md');\r\n const isInitialMount = useRef(true);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [frequency, setFrequency] = useState(null);\r\n const cookie: Cookie = new Cookie();\r\n\r\n //useEffect(()=>{},[])\r\n\r\n const getCurrentEdpItem = useMemo(() => {\r\n let currentEdp: IProductEdp | undefined = undefined;\r\n if (sizes.length === 0 && styles.length === 0) {\r\n //has no styles or sizes\r\n if (isAutoDeliveryEnabled) {\r\n currentEdp = currentEdp = selectedADP\r\n ? edps.find((edpItem) => {\r\n return edpItem.EdpNo === selectedADP;\r\n })\r\n : getDefaultEdpItem;\r\n } else {\r\n const tmp = getDefaultEdpItem;\r\n currentEdp = tmp;\r\n }\r\n } else if (sizes.length > 0 && styles.length === 0) {\r\n // has sizes no styles\r\n if (selectedSizeIndex !== -1) {\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.SizeDimensionId === sizes[selectedSizeIndex].DimensionId;\r\n });\r\n } else {\r\n const tmp = getDefaultEdpItem;\r\n currentEdp = tmp && tmp.Inventory > 0 && tmp.Inventory < 10 ? tmp : undefined;\r\n }\r\n } else if (styles.length > 0 && sizes.length === 0) {\r\n // has styles no size\r\n if (selectedStyleIndex !== -1) {\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.StyleDimensionId === styles[selectedStyleIndex].DimensionId;\r\n });\r\n } else {\r\n const tmp = getDefaultEdpItem;\r\n currentEdp = tmp && tmp.Inventory > 0 && tmp.Inventory < 10 ? tmp : undefined;\r\n }\r\n } else if (selectedSizeIndex === -1 && selectedStyleIndex === -1) {\r\n // has both Style/Size but not selected\r\n const tmp = getDefaultEdpItem;\r\n currentEdp = tmp;\r\n } else if (selectedSizeIndex !== -1 && selectedStyleIndex !== -1) {\r\n // has both Style/Size and both selected\r\n currentEdp = edps.find((edpItem) => {\r\n return (\r\n edpItem.SizeDimensionId === sizes[selectedSizeIndex].DimensionId &&\r\n edpItem.StyleDimensionId === styles[selectedStyleIndex].DimensionId\r\n );\r\n });\r\n }\r\n //set default Standing Order selection\r\n if (currentEdp.IsSOEligible) {\r\n setFrequency('AUTO DELIVERY');\r\n } else {\r\n setFrequency('1 TIME SHIPMENT');\r\n }\r\n return currentEdp;\r\n }, [\r\n edps,\r\n getDefaultEdpItem,\r\n selectedSizeIndex,\r\n selectedStyleIndex,\r\n sizes,\r\n styles,\r\n selectedADP,\r\n isAutoDeliveryEnabled,\r\n ]);\r\n\r\n useEffect(() => {\r\n // fire event to trigger FB viewContent event with productData and currentEdpItem\r\n if (!hasFBTrackingFired.current) {\r\n document.dispatchEvent(\r\n new CustomEvent('pdpEvent', { detail: { productData, selectedEdp: getCurrentEdpItem } }),\r\n );\r\n\r\n hasFBTrackingFired.current = true;\r\n }\r\n }, [getCurrentEdpItem, productData]);\r\n\r\n useEffect(() => {\r\n try {\r\n const searchString = window.sessionStorage.getItem('TSC_SearchString');\r\n const searchClick = window.sessionStorage.getItem('TSC_SearchClick');\r\n if (searchClick) {\r\n if (searchString) {\r\n trackFBSearchEvent(searchString, searchClick);\r\n window.sessionStorage.removeItem('TSC_SearchString');\r\n window.sessionStorage.removeItem('TSC_SearchClick');\r\n }\r\n } else {\r\n if (searchString) {\r\n trackFBSearchEvent(searchString, searchClick);\r\n window.sessionStorage.removeItem('TSC_SearchString');\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error accessing sessionStorage:', error);\r\n }\r\n }, []);\r\n\r\n const buildSnippetObject = useCallback(\r\n (itemNo: string, host: string) => {\r\n return {\r\n api_key: 'b98bac63-38d8-44ac-9c40-3e650c5439a6',\r\n locale: cookie.Language.toLowerCase() == 'en_ca' ? 'en_CA' : 'en_CA',\r\n merchant_group_id: '12623',\r\n merchant_id: '3077',\r\n REVIEW_MEDIA_MODAL_STYLE: 'CARD',\r\n page_id: itemNo,\r\n review_wrapper_url: 'https://' + host + '/pages/writereview?pr_page_id=' + itemNo,\r\n components: {\r\n ReviewSnippet: 'pr-reviewsnippet',\r\n ReviewDisplay: 'pr-reviewdisplay',\r\n },\r\n };\r\n },\r\n [cookie.Language],\r\n );\r\n\r\n function scrolToFn() {\r\n //document.querySelector(\"[data-text='size chart']\").scrollIntoView();\r\n let stickyOffset = 20;\r\n if (window.innerWidth > 768) {\r\n stickyOffset = 120;\r\n }\r\n const topOfElement = document.querySelector(\"[data-text='size chart']\").offsetTop - stickyOffset;\r\n window.scroll({ top: topOfElement, behavior: 'smooth' });\r\n const sizeChartAccordion = document.querySelector(\"[data-text='size chart']\");\r\n //open the accordion if not already open\r\n if (sizeChartAccordion && !sizeChartAccordion.classList.contains('open')) {\r\n sizeChartAccordion.click();\r\n }\r\n }\r\n const renderReviewSnippet = useCallback(() => {\r\n let reviewSnippetObject = {};\r\n const host = window.location.hostname;\r\n reviewSnippetObject = buildSnippetObject(productData.ItemNo, host);\r\n window.pwr =\r\n window.pwr ||\r\n function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n (pwr.q = pwr.q || []).push(arguments);\r\n };\r\n window.pwr('render', reviewSnippetObject);\r\n }, [buildSnippetObject, productData.ItemNo]);\r\n\r\n const gotoSlide = useCallback(\r\n (styleIndex: number) => {\r\n EventBus.dispatch('gotoSlide', { dimensionId: styles[styleIndex].DimensionId });\r\n },\r\n [styles],\r\n );\r\n\r\n const isPermanentlyOutOfStock = useMemo(() => {\r\n if (IsSoldOut === null || IsSoldOut === undefined) {\r\n return false;\r\n }\r\n return IsSoldOut;\r\n }, [IsSoldOut]);\r\n\r\n const isOutOfStock = useMemo(() => {\r\n return getCurrentEdpItem.Inventory <= 0;\r\n }, [getCurrentEdpItem]);\r\n\r\n const isCriticStock = useMemo(() => {\r\n const currentEdp = getCurrentEdpItem;\r\n if (!currentEdp || !(currentEdp.Inventory > 0)) {\r\n return false;\r\n }\r\n return currentEdp.Inventory < 10 && currentEdp.Inventory > 0;\r\n }, [getCurrentEdpItem]);\r\n\r\n const critickStockText = useMemo(() => {\r\n const currentEdp = getCurrentEdpItem;\r\n\r\n if (!currentEdp || !(currentEdp.Inventory > 0)) {\r\n return '';\r\n }\r\n return t('only') + currentEdp.Inventory + t('left');\r\n }, [getCurrentEdpItem, t]);\r\n\r\n const allowedQuantites = useMemo(() => {\r\n let edp: IProductEdp | null = null;\r\n if (sizes.length === 0 && styles.length === 0) {\r\n edp = edps[0];\r\n } else {\r\n edp = getCurrentEdpItem;\r\n }\r\n if (!edp || !(edp.Inventory > 0)) {\r\n return [0];\r\n }\r\n const qty: number[] = [];\r\n const qtyLimit = Math.min(edp.Inventory, 10);\r\n\r\n for (let i = 1; i <= qtyLimit; i++) {\r\n qty.push(i);\r\n }\r\n\r\n return qty;\r\n }, [getCurrentEdpItem, sizes, styles, edps]);\r\n\r\n const buttonText = useMemo(() => {\r\n if (isAddedToBag) {\r\n return t('addedToBag');\r\n }\r\n if (isPermanentlyOutOfStock) {\r\n return t('permanentlyOutOfStockButtonText');\r\n }\r\n if (isOutOfStock) {\r\n // return t('emailWhenInStockText');\r\n return t('outOfStockText');\r\n }\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return t('addToBagText');\r\n }\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedStyleIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n }\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1 && selectedStyleIndex === -1) {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n if (selectedSizeIndex !== -1 && selectedStyleIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n\r\n if (selectedSizeIndex === -1 && selectedStyleIndex !== -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n return t('addToBagText');\r\n }, [isOutOfStock, selectedSizeIndex, selectedStyleIndex, styles, sizes, isAddedToBag, isPermanentlyOutOfStock, t]);\r\n\r\n const isCtaDisabled = useMemo(() => {\r\n if (isPermanentlyOutOfStock || isOutOfStock) {\r\n return true;\r\n }\r\n\r\n if (buttonText === t('addToBagText') || buttonText === t('addedToBag')) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }, [isPermanentlyOutOfStock, isOutOfStock, t, buttonText]);\r\n\r\n function setURLParameter(url, parameter, value) {\r\n const urlTemp = new URL(url);\r\n if (urlTemp.searchParams.get(parameter) === value) {\r\n return url;\r\n }\r\n urlTemp.searchParams.set(parameter, value);\r\n return decodeURIComponent(urlTemp.href);\r\n }\r\n const updateSchema = useCallback(() => {\r\n const { Name, ItemNo, ProductReviewCount, ProductReviewRating, IsShowstopper } = productData;\r\n let { Brand } = productData;\r\n const { ProductLink } = productData;\r\n const selectedEdpData = getCurrentEdpItem;\r\n const defaultEdpData = getDefaultEdpItem;\r\n const selectedEDPNum = selectedEdpData ? selectedEdpData.EdpNo : defaultEdpData ? defaultEdpData.EdpNo : 0;\r\n const selectedProduct = productData.Edps.filter((data) => data.EdpNo == selectedEDPNum)[0];\r\n const productTeaser = document.querySelectorAll('span[data-teaser]');\r\n const description = productTeaser.length > 0 ? (productTeaser[0] as HTMLElement).dataset.teaser : '';\r\n const cookie = new Cookie();\r\n const getUrl = window.location;\r\n const baseUrl = getUrl.protocol + '//' + getUrl.host;\r\n const language = cookie.Language.toLowerCase();\r\n if (Brand == '' || Brand == null || Brand == ' ') {\r\n Brand = 'Brand not provided';\r\n }\r\n const todayDate = new Date(Date.now());\r\n function makeDate(date) {\r\n return new Date(+date);\r\n }\r\n\r\n const todaysDateFormatted = dayjs(makeDate(todayDate)).format('YYYY-MM-DD');\r\n const oneWeekLaterDateFormatted = dayjs(makeDate(todayDate)).add(7, 'day').format('YYYY-MM-DD');\r\n\r\n const schema = {\r\n '@context': 'https://schema.org',\r\n '@type': 'Product',\r\n name: Name,\r\n image: 'https://item.tscimg.ca/TSC/' + selectedProduct.ImageUrl + '?impolicy=L', // image\r\n description: description,\r\n productID: ItemNo,\r\n brand: {\r\n '@type': 'Thing',\r\n name: Brand,\r\n },\r\n offers: {\r\n '@type': 'Offer',\r\n priceCurrency: 'CAD',\r\n priceValidUntil: IsShowstopper ? todaysDateFormatted : oneWeekLaterDateFormatted,\r\n url:\r\n baseUrl +\r\n ProductLink.LinkWithoutDomain.substring(\r\n ProductLink.LinkWithoutDomain.indexOf('/pages/productdetails'),\r\n ),\r\n price:\r\n language == 'en_ca'\r\n ? selectedProduct.AppliedPrice.replace(/[^0-9\\.]+/g, '')\r\n : selectedProduct.AppliedPrice.replace(/[^0-9\\,]+/g, '').replace(',', '.'),\r\n itemCondition: 'https://schema.org/NewCondition',\r\n availability: !selectedProduct.IsSoldOut ? 'https://schema.org/InStock' : 'https://schema.org/SoldOut',\r\n },\r\n };\r\n if (selectedProduct.Style) {\r\n schema['color'] = selectedProduct.Style;\r\n }\r\n if (selectedProduct.EdpNo) {\r\n schema['sku'] = selectedProduct.EdpNo;\r\n }\r\n if (selectedProduct.UpcNo) {\r\n schema['gtin12'] = selectedProduct.UpcNo;\r\n }\r\n\r\n if (ProductReviewCount > 0) {\r\n schema['aggregateRating'] = {\r\n '@type': 'AggregateRating',\r\n ratingValue: ProductReviewRating,\r\n reviewCount: ProductReviewCount,\r\n };\r\n }\r\n const jsonelement = document.getElementById('jsonld');\r\n jsonelement.innerHTML = JSON.stringify(schema, null, 2);\r\n }, [getCurrentEdpItem, getDefaultEdpItem, productData]);\r\n\r\n useEffect(() => {\r\n function updateUrlEdp() {\r\n //prevent udpating URL if only changing edp for Autodelivery\r\n\r\n // update the edp param in url e.g ?nav=R:582519&edp=11786296\r\n const selectedEdpData = getCurrentEdpItem;\r\n const selectedEDPNum = selectedEdpData\r\n ? selectedEdpData.EdpNo\r\n : getDefaultEdpItem\r\n ? getDefaultEdpItem.EdpNo\r\n : 0;\r\n const newURL = setURLParameter(window.location.href, 'edp', selectedEDPNum);\r\n window.history.replaceState({}, '', newURL);\r\n }\r\n updateSchema();\r\n if (isInitialMount.current) {\r\n isInitialMount.current = false;\r\n } else {\r\n // updated url with EDP Param if not initial mount of page\r\n updateUrlEdp();\r\n }\r\n const tmpEdpData = getCurrentEdpItem;\r\n window.analyticsData.page.selectedEdp = tmpEdpData.EdpNo;\r\n window.analyticsData.page.selectedEdpData = tmpEdpData;\r\n }, [\r\n selectedSizeIndex,\r\n selectedStyleIndex,\r\n isAutoDeliveryEnabled,\r\n selectedADP,\r\n getCurrentEdpItem,\r\n getDefaultEdpItem,\r\n updateSchema,\r\n ]);\r\n\r\n const isAnySOEligible = useMemo(() => {\r\n let isAnySOEligible = false;\r\n for (const edp of edps) {\r\n if (edp.IsSOEligible == true) {\r\n isAnySOEligible = true;\r\n break;\r\n }\r\n }\r\n return isAnySOEligible;\r\n }, [edps]);\r\n\r\n const isFrequencyAutoDelivery = useMemo(() => {\r\n let isFrequencyAutoDelivery = false;\r\n\r\n if (getCurrentEdpItem.IsSOEligible == true) {\r\n isFrequencyAutoDelivery = true;\r\n }\r\n return isFrequencyAutoDelivery;\r\n }, [getCurrentEdpItem]);\r\n\r\n const availableSwatches = useMemo(() => {\r\n return !AvailableSwatches ? [] : AvailableSwatches;\r\n }, [AvailableSwatches]);\r\n\r\n useEffect(() => {\r\n // update selected edp based on event from Gallery\r\n setSelectedStyleIndex(gotoIndex);\r\n }, [gotoIndex]);\r\n\r\n const processRecentlyViewed = useCallback(() => {\r\n if (productData != undefined) {\r\n let rvItemNos: string[];\r\n const cookie: Cookie = new Cookie();\r\n\r\n if (cookie.RecentlyViewedItemNos != undefined) {\r\n rvItemNos = cookie.RecentlyViewedItemNos.split('-');\r\n }\r\n\r\n if (productData.ItemNo != undefined && productData.ItemNo.length == 6) {\r\n if (rvItemNos != undefined) {\r\n if (rvItemNos.indexOf(productData.ItemNo) == -1) {\r\n rvItemNos.unshift(productData.ItemNo);\r\n //if exceeded max 36 recently viewed items, remove oldest item\r\n //PBI 2823\r\n while (rvItemNos.length > 10) {\r\n rvItemNos.pop();\r\n }\r\n }\r\n } else {\r\n rvItemNos = [productData.ItemNo];\r\n }\r\n cookie.RecentlyViewedItemNos = rvItemNos.join('-');\r\n }\r\n }\r\n }, [productData]);\r\n\r\n const fetchEasyPay = async () => {\r\n async function fetchArticle() {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'cache-control': 'no-cache',\r\n currentdatetime: new Cookie().CurrentDate,\r\n };\r\n const base = '/api/v2/';\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const easyPayUrl = base + lang + '/customerservice/easy-pay';\r\n try {\r\n const data = await http.get(easyPayUrl, {\r\n headers: headers,\r\n });\r\n return data.data.Article;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n //if content is null, fetch easy pay data\r\n if (easyPayPopupData.content == '') {\r\n const article = await fetchArticle();\r\n if (article) {\r\n setEasyPayPopupData({ title: article.Title, content: article.Content });\r\n setShowEasyPayPopup(true);\r\n }\r\n } else {\r\n setShowEasyPayPopup(true);\r\n }\r\n };\r\n\r\n const getUserFavourites = useCallback(() => {\r\n const favouriteStorage = new FavouriteStorage();\r\n const favList = favouriteStorage.Favourites;\r\n const foundFav = favList.find((item) => item.ItemNumber == productData.ItemNo);\r\n setFavourites(favouriteStorage.Favourites);\r\n if (foundFav) {\r\n setIsFavourite(true);\r\n }\r\n }, [productData.ItemNo]);\r\n\r\n const handleSignInLink = (e) => {\r\n e.preventDefault();\r\n cookie.TargetUrl = window.location.pathname + window.location.search;\r\n window.location.href = '/pages/signin';\r\n };\r\n\r\n const onFavoriteClick = async () => {\r\n if (!isSignedIn) {\r\n setShowFavoriteTooltip(true);\r\n // setTimeout(() => {\r\n // setShowFavoriteTooltip(false);\r\n // }, FAVORITE_TOOLTIP_CLOSE_TIMEOUT);\r\n return;\r\n }\r\n\r\n const uat = new Cookie().UserAccessToken;\r\n\r\n if (!uat) {\r\n setShowFavoriteTooltip(true);\r\n setTimeout(() => {\r\n setShowFavoriteTooltip(false);\r\n }, FAVORITE_TOOLTIP_CLOSE_TIMEOUT);\r\n return;\r\n }\r\n\r\n const userEdp = uat.Edp;\r\n\r\n if (!userEdp) {\r\n setShowFavoriteTooltip(true);\r\n setTimeout(() => {\r\n setShowFavoriteTooltip(false);\r\n }, FAVORITE_TOOLTIP_CLOSE_TIMEOUT);\r\n return;\r\n }\r\n\r\n const base = '/api/v2/';\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const item = getCurrentEdpItem;\r\n const deleteUrl = base + lang + '/accounts' + `/${userEdp}` + `/favourites/${item.ItemNo}`;\r\n\r\n const cachebleHeaders = {\r\n 'Content-Type': 'application/json',\r\n 'cache-control': 'no-cache',\r\n currentdatetime: new Cookie().CurrentDate,\r\n };\r\n const favouriteStorage = new FavouriteStorage();\r\n if (isFavourite) {\r\n try {\r\n await http.delete(deleteUrl, {\r\n headers: cachebleHeaders,\r\n });\r\n favouriteStorage.removeByItemNumber(item.ItemNo);\r\n setIsFavourite(false);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n } else {\r\n try {\r\n const postUrl = base + lang + '/accounts' + `/${userEdp}` + '/favourites';\r\n await http.post(\r\n postUrl,\r\n {\r\n ItemNumber: item.ItemNo,\r\n ActivityDateTime: new Date().toISOString(),\r\n },\r\n {\r\n headers: cachebleHeaders,\r\n },\r\n );\r\n const favourite: TmFavourite = new TmFavourite();\r\n favourite.ItemNumber = item.ItemNo;\r\n favouriteStorage.add(favourite);\r\n setIsFavourite(true);\r\n // trigger analytics event\r\n const event = new CustomEvent('favoriteEvent', {\r\n detail: { productData, selectedEdp: getCurrentEdpItem.EdpNo },\r\n });\r\n // Dispatch the event\r\n document.dispatchEvent(event);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n setCurrentIsFavorite((prev) => !prev);\r\n return;\r\n };\r\n\r\n const cartSuccess = (cartData: TmCart) => {\r\n const cookie: Cookie = new Cookie();\r\n //save cart to RQ cache\r\n queryClient.setQueryData(\r\n ['bag', cartData?.CartGuid, cookie.UserAccessToken?.Edp, cookie.Language],\r\n cartData as TmCart,\r\n );\r\n\r\n cookie.CartGuid = cartData.CartGuid;\r\n cookie.CartProductCount = cartData.OrderSummary.TotalQuantity.toString();\r\n const item = getCurrentEdpItem;\r\n\r\n const storage: Storage = new Storage();\r\n storage.deleteSessionLanguageQC();\r\n storage.setSessionCart(cartData);\r\n\r\n window.analyticsData.cart = cartData;\r\n // trigger analytics event\r\n\r\n setIsAddedToBag(true);\r\n setTimeout(() => {\r\n setIsAddedToBag(false);\r\n }, 3000);\r\n setIsAddToBagLoading(false);\r\n\r\n EventBus.dispatch('change', { edp: item.EdpNo, qty: selectedQuantity });\r\n\r\n window.analyticsData.page.pageTitle = 'add to cart interstitial';\r\n window.analyticsData.page.pageType = 'add to cart interstitial';\r\n window.analyticsData.event.eventTitle = 'add-to-cart';\r\n\r\n const elem = document.getElementById('btnAddToCart');\r\n const event = new Event('analytics_AddToCart');\r\n elem.dispatchEvent(event);\r\n };\r\n const changeToSize = useCallback(\r\n (e) => {\r\n if (e?.detail?.size) {\r\n const sizeIndex = sizes.findIndex((x) => {\r\n return x.DisplayName == e.detail.size;\r\n });\r\n if (!ProductHelpers.isSizeDisabledV2(sizeIndex, selectedStyleIndex, edps, styles, sizes)) {\r\n //recommended size is available, select that size\r\n setSelectedSizeIndex(sizeIndex);\r\n }\r\n }\r\n },\r\n [edps, selectedStyleIndex, sizes, styles],\r\n );\r\n const listenForTruefitEvent = useCallback(() => {\r\n document.addEventListener(\r\n 'tf-sizechanage',\r\n function (e: CustomEvent) {\r\n changeToSize(e);\r\n }.bind(this),\r\n false,\r\n );\r\n }, []);\r\n\r\n useEffect(() => {\r\n document.addEventListener(\r\n 'tf-sizechanage',\r\n function (e: CustomEvent) {\r\n changeToSize(e);\r\n }.bind(this),\r\n false,\r\n );\r\n }, [changeToSize]);\r\n\r\n const cartError = (errorData) => {\r\n //window.scrollTo({ left: 0, top: 0, behavior: 'smooth' });\r\n window.scrollTo(0, 0);\r\n setIsAddedToBag(false);\r\n setIsAddToBagLoading(false);\r\n setErrorMessage(errorData);\r\n //console.log(`Add To Cart Error: ${errorData}`);\r\n };\r\n\r\n const addToBagAction = async (sizeIndex: number, styleIndex: number) => {\r\n setIsAddToBagLoading(true);\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const cookie = new Cookie();\r\n\r\n const selectedProduct = getCurrentEdpItem;\r\n if (!selectedProduct) {\r\n setIsAddToBagLoading(false);\r\n return false;\r\n }\r\n\r\n const cartlineModel: TmCartLineRequest = new TmCartLineRequest();\r\n cartlineModel.ItemEDP = selectedProduct.EdpNo;\r\n\r\n if (!inView && entry?.boundingClientRect.top < 0) {\r\n cartlineModel.Quantity = 1;\r\n } else {\r\n cartlineModel.Quantity = selectedQuantity;\r\n }\r\n\r\n if (isAnySOEligible) {\r\n if (frequency == 'AUTO DELIVERY') {\r\n cartlineModel.SOInterval = selectedProduct.SODefaultIntervalValue;\r\n cartlineModel.SOPeriod = selectedProduct.SOIntervalType;\r\n }\r\n }\r\n\r\n cartlineModel.Customization = '';\r\n if (cookie.UserAccessToken != null && cookie.UserAccessToken.Edp != null) {\r\n cartlineModel.CustomerEdp = cookie.UserAccessToken.Edp;\r\n }\r\n if (cookie != undefined && cookie.CartGuid != undefined) {\r\n try {\r\n const result = await addItemToCart(cartlineModel);\r\n // window.scrollTo({ left: 0, top: 0, behavior: 'smooth' });\r\n //window.scrollTo(0, 0);\r\n cartSuccess(result.data as TmCart);\r\n } catch (errorData) {\r\n cartError(errorData);\r\n }\r\n } else {\r\n try {\r\n const result = await createCartAndAddItem(cartlineModel);\r\n // window.scrollTo({ left: 0, top: 0, behavior: 'smooth' });\r\n //window.scrollTo(0, 0);\r\n cartSuccess(result.data as TmCart);\r\n } catch (errorData) {\r\n cartError(errorData);\r\n }\r\n }\r\n };\r\n\r\n const onAddToBagClick = () => {\r\n if (isAddToBagLoading || isAddedToBag) {\r\n return;\r\n }\r\n setIsAddToBagLoading(true);\r\n addToBagAction(selectedSizeIndex, selectedStyleIndex);\r\n };\r\n\r\n const loadWriteReview = useCallback(() => {\r\n const queryString = window.location.search;\r\n const queryParams = new URLSearchParams(queryString);\r\n\r\n if (queryParams != undefined) {\r\n const loadReviewFlag = queryParams.get('openreview') as string;\r\n if (loadReviewFlag != undefined && loadReviewFlag.toLowerCase().startsWith('true')) {\r\n const userEmail = queryParams.get('pr_merchant_user_email') as string;\r\n const source = queryParams.get('pr_source') as string;\r\n const cid = queryParams.get('et_cid') as string;\r\n const rid = queryParams.get('et_rid') as string;\r\n\r\n let qParams = '';\r\n if (userEmail != undefined) {\r\n qParams = '&pr_merchant_user_email=' + userEmail;\r\n }\r\n if (source != undefined) {\r\n qParams = qParams + '&pr_source=' + source;\r\n }\r\n if (cid != undefined) {\r\n qParams = qParams + '&et_cid=' + cid;\r\n }\r\n if (rid != undefined) {\r\n qParams = qParams + '&et_rid=' + rid;\r\n }\r\n\r\n window.location.href = '/pages/writereview?pr_page_id=' + productData.ItemNo + qParams;\r\n }\r\n }\r\n }, [productData.ItemNo]);\r\n\r\n useEffect(() => {\r\n loadWriteReview();\r\n smoothscroll.polyfill();\r\n const findIndexByStyleID = (styleID) => {\r\n const styleIndeFound = styles.findIndex((style) => {\r\n return style.DimensionId == styleID;\r\n });\r\n if (styleIndeFound != -1) {\r\n setSelectedStyleIndex(styleIndeFound);\r\n gotoSlide(styleIndeFound);\r\n //setGotoIndex(0);\r\n }\r\n };\r\n const item = getDefaultEdpItem;\r\n const styleIndex = styles.findIndex((v) => v.DimensionId === item.StyleDimensionId);\r\n const sizeIndex = sizes.findIndex((v) => v.DimensionId === item.SizeDimensionId);\r\n setSelectedStyleIndex(styleIndex);\r\n setSelectedSizeIndex(sizeIndex);\r\n renderReviewSnippet();\r\n getUserFavourites();\r\n if (isAutoDeliveryEnabled) {\r\n setSelectedADP(item.EdpNo);\r\n }\r\n document.addEventListener('mousedown', handleDocumentClick);\r\n //listenForTFEvenet();\r\n processRecentlyViewed();\r\n //setup event bus handler to look for msgs from PDP Gallery\r\n EventBus.on('gotoStyle', (data) => {\r\n findIndexByStyleID(data.dimensionId);\r\n });\r\n return () => {\r\n EventBus.remove('gotoStyle', (data) => {\r\n findIndexByStyleID(data.dimensionId);\r\n });\r\n document.removeEventListener('mousedown', handleDocumentClick);\r\n };\r\n }, [\r\n getDefaultEdpItem,\r\n getUserFavourites,\r\n gotoSlide,\r\n isAutoDeliveryEnabled,\r\n loadWriteReview,\r\n processRecentlyViewed,\r\n renderReviewSnippet,\r\n sizes,\r\n styles,\r\n ]);\r\n\r\n useEffect(() => {\r\n //initially we checked if all swatches exist but for optimizatin we only now check one\r\n //if one exists, we assume all exist\r\n SwatchHelpers.doSwatchesExist(AvailableSwatches)\r\n .then((result) => {\r\n setIsSwatch(result);\r\n })\r\n .catch(() => {\r\n setIsSwatch(false);\r\n });\r\n }, [setIsSwatch, AvailableSwatches]);\r\n\r\n const showOptions = useMemo(() => {\r\n return !(sizes.length === 0 && styles.length === 0);\r\n }, [styles, sizes]);\r\n\r\n const isSizeDisabled = useCallback(\r\n (i: number) => {\r\n return ProductHelpers.isSizeDisabledV2(i, selectedStyleIndex, edps, styles, sizes);\r\n },\r\n [selectedStyleIndex, edps, styles, sizes],\r\n );\r\n\r\n const isStyleDisabled = useCallback(\r\n (i: number) => {\r\n return ProductHelpers.isStyleDisabledV2(i, selectedSizeIndex, edps, styles, sizes);\r\n },\r\n [selectedSizeIndex, edps, styles, sizes],\r\n );\r\n\r\n const firstAvailableStyleIndex = useMemo(() => {\r\n for (let i = 0; i < styles.length; i++) {\r\n if (!isStyleDisabled(i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }, [styles, isStyleDisabled]);\r\n\r\n const onSelectSizeClick = (e: React.MouseEvent, index: number) => {\r\n e.preventDefault();\r\n //do check if selected style/size combination exists\r\n //if size doesnt exist, move to next available size.\r\n //what if there is no available size?\r\n //\r\n setSelectedSizeIndex(index);\r\n };\r\n\r\n function onFrequencyChange(event) {\r\n setFrequency(event.target.value);\r\n }\r\n\r\n function handleDocumentClick(event) {\r\n if (referenceRef?.current) {\r\n if (referenceRef.current.contains(event.target)) {\r\n return;\r\n }\r\n setPopupOpen(false);\r\n }\r\n }\r\n\r\n const renderStyleSwatch = useCallback(() => {\r\n const onSelectColorClick = (e: React.MouseEvent, index: number) => {\r\n e.preventDefault();\r\n gotoSlide(index);\r\n setSelectedStyleIndex(index);\r\n //updateUrlEdp();\r\n\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n };\r\n const getSwatchLink = (index: number) => {\r\n const resource = availableSwatches[index];\r\n if (!resource) {\r\n setSelectedStyleIndex;\r\n return '';\r\n }\r\n return IMAGE_URL_PREFIX + resource;\r\n };\r\n if (!isSwatch) {\r\n return <>;\r\n }\r\n\r\n return styles.map((style, index) => (\r\n onSelectColorClick(e, index)}\r\n //disabled={isStyleDisabled(index)}\r\n aria-pressed={index === selectedStyleIndex}\r\n >\r\n setSelectedStyleIndex(index)}\r\n />\r\n \r\n {style.DisplayName}\r\n \r\n \r\n ));\r\n }, [isSwatch, styles, isStyleDisabled, selectedStyleIndex, setSelectedStyleIndex, availableSwatches, gotoSlide]);\r\n\r\n const renderStyleDropdown = useCallback(() => {\r\n if (styles.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n {\r\n const index = styles.findIndex((style) => {\r\n return style.DimensionId === e.target.value;\r\n });\r\n setSelectedStyleIndex(index);\r\n gotoSlide(index);\r\n }}\r\n value={styles[selectedStyleIndex]?.DimensionId}\r\n >\r\n {styles.map((style, styleIndex) => (\r\n \r\n {style.DisplayName}\r\n \r\n ))}\r\n \r\n );\r\n }, [styles, setSelectedStyleIndex, selectedStyleIndex, isStyleDisabled, gotoSlide]);\r\n\r\n useEffect(() => {\r\n updateSchema();\r\n }, [updateSchema]);\r\n\r\n const { ref, inView, entry } = useInView({\r\n rootMargin: '0px',\r\n });\r\n\r\n const queryClient = useQueryClient();\r\n\r\n return (\r\n <>\r\n {getCurrentEdpItem != undefined && (\r\n <>\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n {sizes.length !== 0 && (\r\n <>\r\n
\r\n {t('sizes')}\r\n\r\n
\r\n {t('size')}:{' '}\r\n {selectedSizeIndex !== -1 ? {sizes[selectedSizeIndex]?.DisplayName} : ''}\r\n
\r\n \r\n {sizes.map((size, index) => (\r\n onSelectSizeClick(e, index)}\r\n type={'button'}\r\n aria-pressed={index === selectedSizeIndex}\r\n >\r\n setSelectedSizeIndex(index)}\r\n />\r\n \r\n {t('size')}\r\n {size.DisplayName || ''}\r\n \r\n \r\n ))}\r\n
\r\n \r\n
\r\n \r\n {!!window['sizeChartTab'] && (\r\n {\r\n scrolToFn();\r\n }}\r\n >\r\n Sizing Chart\r\n \r\n )}\r\n
\r\n \r\n )}\r\n\r\n {styles?.length !== 0 && (\r\n <>\r\n
\r\n {t('colours')}\r\n\r\n
\r\n {t('style')}:{' '}\r\n \r\n {selectedStyleIndex !== -1 ? styles[selectedStyleIndex].DisplayName : ''}\r\n \r\n
\r\n\r\n
\r\n {isSwatch ? renderStyleSwatch() : renderStyleDropdown()}\r\n
\r\n
\r\n
\r\n \r\n )}\r\n\r\n {isAnySOEligible && (\r\n <>\r\n
\r\n
\r\n {t('Frequency')} : {frequency}\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n\r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n \r\n )}\r\n\r\n {isAutoDeliveryEnabled && (\r\n <>\r\n
\r\n Auto delivery\r\n\r\n
\r\n \r\n Delivery Option:\r\n \r\n \r\n {t('Delivery Information')}\r\n \r\n \r\n \r\n Love this product? Sign up for our Auto-Delivery Program!{' '}\r\n
    \r\n
  • Lock in the price
  • \r\n
  • Get it on a schedule
  • \r\n
  • Cancel at any time without risk
  • \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n {\r\n const adpValue = parseInt(e.target.value, 10);\r\n setSelectedADP(adpValue);\r\n }}\r\n >\r\n {DeliveryOptions.map((deliveryOption) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n \r\n )}\r\n\r\n \r\n
\r\n
\r\n

\r\n \r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {isAddedToBag && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n
\r\n\r\n {buttonText}\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n {isFavourite ? t('addedToFavourite') : t('addToFavourite')}\r\n \r\n \r\n {isFavourite ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {showFavoriteTooltip && (\r\n <>\r\n onFavoriteTooltipCloseClick(e)}\r\n >
\r\n
\r\n
\r\n \r\n {t('please') + ' '}\r\n {\r\n handleSignInLink(e);\r\n }}\r\n >\r\n {t('signIn')}\r\n \r\n /\r\n \r\n {t('register')}\r\n \r\n {' ' + t('toAddItemsToYourFavoritesList')}\r\n \r\n onFavoriteTooltipCloseClick(e)}\r\n className=\"pdp-description__add-to-bag__favorite__tooltip-content__close-button\"\r\n >\r\n {t('closeText')}\r\n \r\n \r\n
\r\n
\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n\r\n {productData.EnabledAddToCart && (\r\n
\r\n
\r\n \r\n {t('quantity')}\r\n \r\n {t('quantity')}:\r\n \r\n {isCriticStock && (\r\n <>\r\n \r\n {critickStockText}\r\n \r\n \r\n )}\r\n {isOutOfStock && !isPermanentlyOutOfStock && (\r\n
\r\n \r\n {t('outOfStockText')}\r\n \r\n
\r\n )}\r\n \r\n {\r\n const qty = parseInt(e.target.value, 10) || 0;\r\n setSelectedQuantity(qty);\r\n }}\r\n >\r\n {allowedQuantites.map((qty) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n {isAddedToBag && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n
\r\n\r\n {buttonText}\r\n \r\n \r\n
\r\n \r\n {isFavourite ? t('addedToFavourite') : t('addToFavourite')}\r\n \r\n \r\n {isFavourite ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {showFavoriteTooltip && (\r\n <>\r\n onFavoriteTooltipCloseClick(e)}\r\n >
\r\n
\r\n
\r\n \r\n {t('please') + ' '}\r\n {\r\n handleSignInLink(e);\r\n }}\r\n >\r\n {t('signIn')}\r\n \r\n /\r\n \r\n {t('register')}\r\n \r\n {' ' + t('toAddItemsToYourFavoritesList')}\r\n \r\n onFavoriteTooltipCloseClick(e)}\r\n className=\"pdp-description__add-to-bag__favorite__tooltip-content__close-button\"\r\n >\r\n {t('closeText')}\r\n \r\n \r\n
\r\n
\r\n \r\n )}\r\n
\r\n \r\n )}\r\n\r\n {SellerType.toString() === TmSellerTypeEnum.Marketplace && (\r\n
\r\n
\r\n \r\n \r\n {t('Sold and fulfilled by')}{' '}\r\n \r\n \r\n {SellerName}\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n\r\n \r\n\r\n {errorMessage != '' && (\r\n
\r\n {errorMessage}\r\n
\r\n )}\r\n\r\n {showEasyPayPopup && (\r\n {\r\n setShowEasyPayPopup(false);\r\n }}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default PdpDescriptionArea;\r\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n// This is not really a perfect check, but works fine.\n// From http://stackoverflow.com/questions/384286\nvar HAS_DOM_2 = (typeof HTMLElement === \"undefined\" ? \"undefined\" : _typeof(HTMLElement)) === \"object\";\nexport function isDOMElement(obj) {\n return HAS_DOM_2 ? obj instanceof HTMLElement : obj && _typeof(obj) === \"object\" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === \"string\";\n}\nexport function addClasses(el, classNames) {\n classNames.forEach(function (className) {\n el.classList.add(className);\n });\n}\nexport function removeClasses(el, classNames) {\n classNames.forEach(function (className) {\n el.classList.remove(className);\n });\n}\n//# sourceMappingURL=dom.js.map","export default function throwIfMissing() {\n throw new Error(\"Missing parameter\");\n}\n//# sourceMappingURL=throwIfMissing.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport throwIfMissing from \"./util/throwIfMissing\";\nimport { addClasses, removeClasses } from \"./util/dom\";\n\nvar BoundingBox = /*#__PURE__*/function () {\n function BoundingBox(options) {\n _classCallCheck(this, BoundingBox);\n\n this.isShowing = false;\n var _options$namespace = options.namespace,\n namespace = _options$namespace === void 0 ? null : _options$namespace,\n _options$zoomFactor = options.zoomFactor,\n zoomFactor = _options$zoomFactor === void 0 ? throwIfMissing() : _options$zoomFactor,\n _options$containerEl = options.containerEl,\n containerEl = _options$containerEl === void 0 ? throwIfMissing() : _options$containerEl;\n this.settings = {\n namespace: namespace,\n zoomFactor: zoomFactor,\n containerEl: containerEl\n };\n this.openClasses = this._buildClasses(\"open\");\n\n this._buildElement();\n }\n\n _createClass(BoundingBox, [{\n key: \"_buildClasses\",\n value: function _buildClasses(suffix) {\n var classes = [\"drift-\".concat(suffix)];\n var ns = this.settings.namespace;\n\n if (ns) {\n classes.push(\"\".concat(ns, \"-\").concat(suffix));\n }\n\n return classes;\n }\n }, {\n key: \"_buildElement\",\n value: function _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"bounding-box\"));\n }\n }, {\n key: \"show\",\n value: function show(zoomPaneWidth, zoomPaneHeight) {\n this.isShowing = true;\n this.settings.containerEl.appendChild(this.el);\n var style = this.el.style;\n style.width = \"\".concat(Math.round(zoomPaneWidth / this.settings.zoomFactor), \"px\");\n style.height = \"\".concat(Math.round(zoomPaneHeight / this.settings.zoomFactor), \"px\");\n addClasses(this.el, this.openClasses);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n if (this.isShowing) {\n this.settings.containerEl.removeChild(this.el);\n }\n\n this.isShowing = false;\n removeClasses(this.el, this.openClasses);\n }\n }, {\n key: \"setPosition\",\n value: function setPosition(percentageOffsetX, percentageOffsetY, triggerRect) {\n var pageXOffset = window.pageXOffset;\n var pageYOffset = window.pageYOffset;\n var inlineLeft = triggerRect.left + percentageOffsetX * triggerRect.width - this.el.clientWidth / 2 + pageXOffset;\n var inlineTop = triggerRect.top + percentageOffsetY * triggerRect.height - this.el.clientHeight / 2 + pageYOffset;\n\n if (inlineLeft < triggerRect.left + pageXOffset) {\n inlineLeft = triggerRect.left + pageXOffset;\n } else if (inlineLeft + this.el.clientWidth > triggerRect.left + triggerRect.width + pageXOffset) {\n inlineLeft = triggerRect.left + triggerRect.width - this.el.clientWidth + pageXOffset;\n }\n\n if (inlineTop < triggerRect.top + pageYOffset) {\n inlineTop = triggerRect.top + pageYOffset;\n } else if (inlineTop + this.el.clientHeight > triggerRect.top + triggerRect.height + pageYOffset) {\n inlineTop = triggerRect.top + triggerRect.height - this.el.clientHeight + pageYOffset;\n }\n\n this.el.style.left = \"\".concat(inlineLeft, \"px\");\n this.el.style.top = \"\".concat(inlineTop, \"px\");\n }\n }]);\n\n return BoundingBox;\n}();\n\nexport { BoundingBox as default };\n//# sourceMappingURL=BoundingBox.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport throwIfMissing from \"./util/throwIfMissing\";\nimport BoundingBox from \"./BoundingBox\";\n\nvar Trigger = /*#__PURE__*/function () {\n function Trigger() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Trigger);\n\n this._show = this._show.bind(this);\n this._hide = this._hide.bind(this);\n this._handleEntry = this._handleEntry.bind(this);\n this._handleMovement = this._handleMovement.bind(this);\n var _options$el = options.el,\n el = _options$el === void 0 ? throwIfMissing() : _options$el,\n _options$zoomPane = options.zoomPane,\n zoomPane = _options$zoomPane === void 0 ? throwIfMissing() : _options$zoomPane,\n _options$sourceAttrib = options.sourceAttribute,\n sourceAttribute = _options$sourceAttrib === void 0 ? throwIfMissing() : _options$sourceAttrib,\n _options$handleTouch = options.handleTouch,\n handleTouch = _options$handleTouch === void 0 ? throwIfMissing() : _options$handleTouch,\n _options$onShow = options.onShow,\n onShow = _options$onShow === void 0 ? null : _options$onShow,\n _options$onHide = options.onHide,\n onHide = _options$onHide === void 0 ? null : _options$onHide,\n _options$hoverDelay = options.hoverDelay,\n hoverDelay = _options$hoverDelay === void 0 ? 0 : _options$hoverDelay,\n _options$touchDelay = options.touchDelay,\n touchDelay = _options$touchDelay === void 0 ? 0 : _options$touchDelay,\n _options$hoverBoundin = options.hoverBoundingBox,\n hoverBoundingBox = _options$hoverBoundin === void 0 ? throwIfMissing() : _options$hoverBoundin,\n _options$touchBoundin = options.touchBoundingBox,\n touchBoundingBox = _options$touchBoundin === void 0 ? throwIfMissing() : _options$touchBoundin,\n _options$namespace = options.namespace,\n namespace = _options$namespace === void 0 ? null : _options$namespace,\n _options$zoomFactor = options.zoomFactor,\n zoomFactor = _options$zoomFactor === void 0 ? throwIfMissing() : _options$zoomFactor,\n _options$boundingBoxC = options.boundingBoxContainer,\n boundingBoxContainer = _options$boundingBoxC === void 0 ? throwIfMissing() : _options$boundingBoxC,\n _options$passive = options.passive,\n passive = _options$passive === void 0 ? false : _options$passive;\n this.settings = {\n el: el,\n zoomPane: zoomPane,\n sourceAttribute: sourceAttribute,\n handleTouch: handleTouch,\n onShow: onShow,\n onHide: onHide,\n hoverDelay: hoverDelay,\n touchDelay: touchDelay,\n hoverBoundingBox: hoverBoundingBox,\n touchBoundingBox: touchBoundingBox,\n namespace: namespace,\n zoomFactor: zoomFactor,\n boundingBoxContainer: boundingBoxContainer,\n passive: passive\n };\n\n if (this.settings.hoverBoundingBox || this.settings.touchBoundingBox) {\n this.boundingBox = new BoundingBox({\n namespace: this.settings.namespace,\n zoomFactor: this.settings.zoomFactor,\n containerEl: this.settings.boundingBoxContainer\n });\n }\n\n this.enabled = true;\n\n this._bindEvents();\n }\n\n _createClass(Trigger, [{\n key: \"_preventDefault\",\n value: function _preventDefault(event) {\n event.preventDefault();\n }\n }, {\n key: \"_preventDefaultAllowTouchScroll\",\n value: function _preventDefaultAllowTouchScroll(event) {\n if (!this.settings.touchDelay || !this._isTouchEvent(event) || this.isShowing) {\n event.preventDefault();\n }\n }\n }, {\n key: \"_isTouchEvent\",\n value: function _isTouchEvent(event) {\n return !!event.touches;\n }\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n this.settings.el.addEventListener(\"mouseenter\", this._handleEntry, false);\n this.settings.el.addEventListener(\"mouseleave\", this._hide, false);\n this.settings.el.addEventListener(\"mousemove\", this._handleMovement, false);\n var isPassive = {\n passive: this.settings.passive\n };\n\n if (this.settings.handleTouch) {\n this.settings.el.addEventListener(\"touchstart\", this._handleEntry, isPassive);\n this.settings.el.addEventListener(\"touchend\", this._hide, false);\n this.settings.el.addEventListener(\"touchmove\", this._handleMovement, isPassive);\n } else {\n this.settings.el.addEventListener(\"touchstart\", this._preventDefault, isPassive);\n this.settings.el.addEventListener(\"touchend\", this._preventDefault, false);\n this.settings.el.addEventListener(\"touchmove\", this._preventDefault, isPassive);\n }\n }\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n this.settings.el.removeEventListener(\"mouseenter\", this._handleEntry, false);\n this.settings.el.removeEventListener(\"mouseleave\", this._hide, false);\n this.settings.el.removeEventListener(\"mousemove\", this._handleMovement, false);\n\n if (this.settings.handleTouch) {\n this.settings.el.removeEventListener(\"touchstart\", this._handleEntry, false);\n this.settings.el.removeEventListener(\"touchend\", this._hide, false);\n this.settings.el.removeEventListener(\"touchmove\", this._handleMovement, false);\n } else {\n this.settings.el.removeEventListener(\"touchstart\", this._preventDefault, false);\n this.settings.el.removeEventListener(\"touchend\", this._preventDefault, false);\n this.settings.el.removeEventListener(\"touchmove\", this._preventDefault, false);\n }\n }\n }, {\n key: \"_handleEntry\",\n value: function _handleEntry(e) {\n this._preventDefaultAllowTouchScroll(e);\n\n this._lastMovement = e;\n\n if (e.type == \"mouseenter\" && this.settings.hoverDelay) {\n this.entryTimeout = setTimeout(this._show, this.settings.hoverDelay);\n } else if (this.settings.touchDelay) {\n this.entryTimeout = setTimeout(this._show, this.settings.touchDelay);\n } else {\n this._show();\n }\n }\n }, {\n key: \"_show\",\n value: function _show() {\n if (!this.enabled) {\n return;\n }\n\n var onShow = this.settings.onShow;\n\n if (onShow && typeof onShow === \"function\") {\n onShow();\n }\n\n this.settings.zoomPane.show(this.settings.el.getAttribute(this.settings.sourceAttribute), this.settings.el.clientWidth, this.settings.el.clientHeight);\n\n if (this._lastMovement) {\n var touchActivated = this._lastMovement.touches;\n\n if (touchActivated && this.settings.touchBoundingBox || !touchActivated && this.settings.hoverBoundingBox) {\n this.boundingBox.show(this.settings.zoomPane.el.clientWidth, this.settings.zoomPane.el.clientHeight);\n }\n }\n\n this._handleMovement();\n }\n }, {\n key: \"_hide\",\n value: function _hide(e) {\n if (e) {\n this._preventDefaultAllowTouchScroll(e);\n }\n\n this._lastMovement = null;\n\n if (this.entryTimeout) {\n clearTimeout(this.entryTimeout);\n }\n\n if (this.boundingBox) {\n this.boundingBox.hide();\n }\n\n var onHide = this.settings.onHide;\n\n if (onHide && typeof onHide === \"function\") {\n onHide();\n }\n\n this.settings.zoomPane.hide();\n }\n }, {\n key: \"_handleMovement\",\n value: function _handleMovement(e) {\n if (e) {\n this._preventDefaultAllowTouchScroll(e);\n\n this._lastMovement = e;\n } else if (this._lastMovement) {\n e = this._lastMovement;\n } else {\n return;\n }\n\n var movementX;\n var movementY;\n\n if (e.touches) {\n var firstTouch = e.touches[0];\n movementX = firstTouch.clientX;\n movementY = firstTouch.clientY;\n } else {\n movementX = e.clientX;\n movementY = e.clientY;\n }\n\n var el = this.settings.el;\n var rect = el.getBoundingClientRect();\n var offsetX = movementX - rect.left;\n var offsetY = movementY - rect.top;\n var percentageOffsetX = offsetX / this.settings.el.clientWidth;\n var percentageOffsetY = offsetY / this.settings.el.clientHeight;\n\n if (this.boundingBox) {\n this.boundingBox.setPosition(percentageOffsetX, percentageOffsetY, rect);\n }\n\n this.settings.zoomPane.setPosition(percentageOffsetX, percentageOffsetY, rect);\n }\n }, {\n key: \"isShowing\",\n get: function get() {\n return this.settings.zoomPane.isShowing;\n }\n }]);\n\n return Trigger;\n}();\n\nexport { Trigger as default };\n//# sourceMappingURL=Trigger.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport throwIfMissing from \"./util/throwIfMissing\";\nimport { addClasses, removeClasses } from \"./util/dom\";\n\nvar ZoomPane = /*#__PURE__*/function () {\n function ZoomPane() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, ZoomPane);\n\n // All officially-supported browsers have this, but it's easy to\n // account for, just in case.\n this.HAS_ANIMATION = false;\n\n if (typeof document !== \"undefined\") {\n var divStyle = document.createElement(\"div\").style;\n this.HAS_ANIMATION = \"animation\" in divStyle || \"webkitAnimation\" in divStyle;\n }\n\n this._completeShow = this._completeShow.bind(this);\n this._completeHide = this._completeHide.bind(this);\n this._handleLoad = this._handleLoad.bind(this);\n this.isShowing = false;\n var _options$container = options.container,\n container = _options$container === void 0 ? null : _options$container,\n _options$zoomFactor = options.zoomFactor,\n zoomFactor = _options$zoomFactor === void 0 ? throwIfMissing() : _options$zoomFactor,\n _options$inline = options.inline,\n inline = _options$inline === void 0 ? throwIfMissing() : _options$inline,\n _options$namespace = options.namespace,\n namespace = _options$namespace === void 0 ? null : _options$namespace,\n _options$showWhitespa = options.showWhitespaceAtEdges,\n showWhitespaceAtEdges = _options$showWhitespa === void 0 ? throwIfMissing() : _options$showWhitespa,\n _options$containInlin = options.containInline,\n containInline = _options$containInlin === void 0 ? throwIfMissing() : _options$containInlin,\n _options$inlineOffset = options.inlineOffsetX,\n inlineOffsetX = _options$inlineOffset === void 0 ? 0 : _options$inlineOffset,\n _options$inlineOffset2 = options.inlineOffsetY,\n inlineOffsetY = _options$inlineOffset2 === void 0 ? 0 : _options$inlineOffset2,\n _options$inlineContai = options.inlineContainer,\n inlineContainer = _options$inlineContai === void 0 ? document.body : _options$inlineContai;\n this.settings = {\n container: container,\n zoomFactor: zoomFactor,\n inline: inline,\n namespace: namespace,\n showWhitespaceAtEdges: showWhitespaceAtEdges,\n containInline: containInline,\n inlineOffsetX: inlineOffsetX,\n inlineOffsetY: inlineOffsetY,\n inlineContainer: inlineContainer\n };\n this.openClasses = this._buildClasses(\"open\");\n this.openingClasses = this._buildClasses(\"opening\");\n this.closingClasses = this._buildClasses(\"closing\");\n this.inlineClasses = this._buildClasses(\"inline\");\n this.loadingClasses = this._buildClasses(\"loading\");\n\n this._buildElement();\n }\n\n _createClass(ZoomPane, [{\n key: \"_buildClasses\",\n value: function _buildClasses(suffix) {\n var classes = [\"drift-\".concat(suffix)];\n var ns = this.settings.namespace;\n\n if (ns) {\n classes.push(\"\".concat(ns, \"-\").concat(suffix));\n }\n\n return classes;\n }\n }, {\n key: \"_buildElement\",\n value: function _buildElement() {\n this.el = document.createElement(\"div\");\n addClasses(this.el, this._buildClasses(\"zoom-pane\"));\n var loaderEl = document.createElement(\"div\");\n addClasses(loaderEl, this._buildClasses(\"zoom-pane-loader\"));\n this.el.appendChild(loaderEl);\n this.imgEl = document.createElement(\"img\");\n this.el.appendChild(this.imgEl);\n }\n }, {\n key: \"_setImageURL\",\n value: function _setImageURL(imageURL) {\n this.imgEl.setAttribute(\"src\", imageURL);\n }\n }, {\n key: \"_setImageSize\",\n value: function _setImageSize(triggerWidth, triggerHeight) {\n this.imgEl.style.width = \"\".concat(triggerWidth * this.settings.zoomFactor, \"px\");\n this.imgEl.style.height = \"\".concat(triggerWidth * .95 * this.settings.zoomFactor, \"px\");\n } // `percentageOffsetX` and `percentageOffsetY` must be percentages\n // expressed as floats between `0' and `1`.\n\n }, {\n key: \"setPosition\",\n value: function setPosition(percentageOffsetX, percentageOffsetY, triggerRect) {\n var imgElWidth = this.imgEl.offsetWidth;\n var imgElHeight = this.imgEl.offsetHeight;\n var elWidth = this.el.offsetWidth;\n var elHeight = this.el.offsetHeight;\n var centreOfContainerX = elWidth / 2;\n var centreOfContainerY = elHeight / 2;\n var targetImgXToBeCentre = imgElWidth * percentageOffsetX;\n var targetImgYToBeCentre = imgElHeight * percentageOffsetY;\n var left = centreOfContainerX - targetImgXToBeCentre;\n var top = centreOfContainerY - targetImgYToBeCentre;\n var differenceBetweenContainerWidthAndImgWidth = elWidth - imgElWidth;\n var differenceBetweenContainerHeightAndImgHeight = elHeight - imgElHeight;\n var isContainerLargerThanImgX = differenceBetweenContainerWidthAndImgWidth > 0;\n var isContainerLargerThanImgY = differenceBetweenContainerHeightAndImgHeight > 0;\n var minLeft = isContainerLargerThanImgX ? differenceBetweenContainerWidthAndImgWidth / 2 : 0;\n var minTop = isContainerLargerThanImgY ? differenceBetweenContainerHeightAndImgHeight / 2 : 0;\n var maxLeft = isContainerLargerThanImgX ? differenceBetweenContainerWidthAndImgWidth / 2 : differenceBetweenContainerWidthAndImgWidth;\n var maxTop = isContainerLargerThanImgY ? differenceBetweenContainerHeightAndImgHeight / 2 : differenceBetweenContainerHeightAndImgHeight;\n\n if (this.el.parentElement === this.settings.inlineContainer) {\n // This may be needed in the future to deal with browser event\n // inconsistencies, but it's difficult to tell for sure.\n // let scrollX = isTouch ? 0 : window.scrollX;\n // let scrollY = isTouch ? 0 : window.scrollY;\n var scrollX = window.pageXOffset;\n var scrollY = window.pageYOffset;\n var inlineLeft = triggerRect.left + percentageOffsetX * triggerRect.width - elWidth / 2 + this.settings.inlineOffsetX + scrollX;\n var inlineTop = triggerRect.top + percentageOffsetY * triggerRect.height - elHeight / 2 + this.settings.inlineOffsetY + scrollY;\n\n if (this.settings.containInline) {\n if (inlineLeft < triggerRect.left + scrollX) {\n inlineLeft = triggerRect.left + scrollX;\n } else if (inlineLeft + elWidth > triggerRect.left + triggerRect.width + scrollX) {\n inlineLeft = triggerRect.left + triggerRect.width - elWidth + scrollX;\n }\n\n if (inlineTop < triggerRect.top + scrollY) {\n inlineTop = triggerRect.top + scrollY;\n } else if (inlineTop + elHeight > triggerRect.top + triggerRect.height + scrollY) {\n inlineTop = triggerRect.top + triggerRect.height - elHeight + scrollY;\n }\n }\n\n this.el.style.left = \"\".concat(inlineLeft, \"px\");\n this.el.style.top = \"\".concat(inlineTop, \"px\");\n }\n\n if (!this.settings.showWhitespaceAtEdges) {\n if (left > minLeft) {\n left = minLeft;\n } else if (left < maxLeft) {\n left = maxLeft;\n }\n\n if (top > minTop) {\n top = minTop;\n } else if (top < maxTop) {\n top = maxTop;\n }\n }\n\n this.imgEl.style.transform = \"translate(\".concat(left, \"px, \").concat(top, \"px)\");\n this.imgEl.style.webkitTransform = \"translate(\".concat(left, \"px, \").concat(top, \"px)\");\n }\n }, {\n key: \"_removeListenersAndResetClasses\",\n value: function _removeListenersAndResetClasses() {\n this.el.removeEventListener(\"animationend\", this._completeShow, false);\n this.el.removeEventListener(\"animationend\", this._completeHide, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n }\n }, {\n key: \"show\",\n value: function show(imageURL, triggerWidth, triggerHeight) {\n this._removeListenersAndResetClasses();\n\n this.isShowing = true;\n addClasses(this.el, this.openClasses);\n\n if (this.imgEl.getAttribute(\"src\") != imageURL) {\n addClasses(this.el, this.loadingClasses);\n this.imgEl.addEventListener(\"load\", this._handleLoad, false);\n\n this._setImageURL(imageURL);\n }\n\n this._setImageSize(triggerWidth, triggerHeight);\n\n if (this._isInline) {\n this._showInline();\n } else {\n this._showInContainer();\n }\n\n if (this.HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeShow, false);\n this.el.addEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n addClasses(this.el, this.openingClasses);\n }\n }\n }, {\n key: \"_showInline\",\n value: function _showInline() {\n this.settings.inlineContainer.appendChild(this.el);\n addClasses(this.el, this.inlineClasses);\n }\n }, {\n key: \"_showInContainer\",\n value: function _showInContainer() {\n this.settings.container.appendChild(this.el);\n }\n }, {\n key: \"hide\",\n value: function hide() {\n this._removeListenersAndResetClasses();\n\n this.isShowing = false;\n\n if (this.HAS_ANIMATION) {\n this.el.addEventListener(\"animationend\", this._completeHide, false);\n this.el.addEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n addClasses(this.el, this.closingClasses);\n } else {\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.inlineClasses);\n }\n }\n }, {\n key: \"_completeShow\",\n value: function _completeShow() {\n this.el.removeEventListener(\"animationend\", this._completeShow, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeShow, false);\n removeClasses(this.el, this.openingClasses);\n }\n }, {\n key: \"_completeHide\",\n value: function _completeHide() {\n this.el.removeEventListener(\"animationend\", this._completeHide, false);\n this.el.removeEventListener(\"webkitAnimationEnd\", this._completeHide, false);\n removeClasses(this.el, this.openClasses);\n removeClasses(this.el, this.closingClasses);\n removeClasses(this.el, this.inlineClasses);\n this.el.style.left = \"\";\n this.el.style.top = \"\"; // The window could have been resized above or below `inline`\n // limits since the ZoomPane was shown. Because of this, we\n // can't rely on `this._isInline` here.\n\n if (this.el.parentElement === this.settings.container) {\n this.settings.container.removeChild(this.el);\n } else if (this.el.parentElement === this.settings.inlineContainer) {\n this.settings.inlineContainer.removeChild(this.el);\n }\n }\n }, {\n key: \"_handleLoad\",\n value: function _handleLoad() {\n this.imgEl.removeEventListener(\"load\", this._handleLoad, false);\n removeClasses(this.el, this.loadingClasses);\n }\n }, {\n key: \"_isInline\",\n get: function get() {\n var inline = this.settings.inline;\n return inline === true || typeof inline === \"number\" && window.innerWidth <= inline;\n }\n }]);\n\n return ZoomPane;\n}();\n\nexport { ZoomPane as default };\n//# sourceMappingURL=ZoomPane.js.map","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { isDOMElement } from \"./util/dom\";\nimport injectBaseStylesheet from \"./injectBaseStylesheet\";\nimport Trigger from \"./Trigger\";\nimport ZoomPane from \"./ZoomPane\";\n\nvar Drift = /*#__PURE__*/function () {\n function Drift(triggerEl) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Drift);\n\n this.VERSION = \"1.5.0\";\n this.triggerEl = triggerEl;\n this.destroy = this.destroy.bind(this);\n\n if (!isDOMElement(this.triggerEl)) {\n throw new TypeError(\"`new Drift` requires a DOM element as its first argument.\");\n } // Prefix for generated element class names (e.g. `my-ns` will\n // result in classes such as `my-ns-pane`. Default `drift-`\n // prefixed classes will always be added as well.\n\n\n var namespace = options[\"namespace\"] || null; // Whether the ZoomPane should show whitespace when near the edges.\n\n var showWhitespaceAtEdges = options[\"showWhitespaceAtEdges\"] || false; // Whether the inline ZoomPane should stay inside\n // the bounds of its image.\n\n var containInline = options[\"containInline\"] || false; // How much to offset the ZoomPane from the\n // interaction point when inline.\n\n var inlineOffsetX = options[\"inlineOffsetX\"] || 0;\n var inlineOffsetY = options[\"inlineOffsetY\"] || 0; // A DOM element to append the inline ZoomPane to\n\n var inlineContainer = options[\"inlineContainer\"] || document.body; // Which trigger attribute to pull the ZoomPane image source from.\n\n var sourceAttribute = options[\"sourceAttribute\"] || \"data-zoom\"; // How much to magnify the trigger by in the ZoomPane.\n // (e.g., `zoomFactor: 3` will result in a 900 px wide ZoomPane imag\n // if the trigger is displayed at 300 px wide)\n\n var zoomFactor = options[\"zoomFactor\"] || 3; // A DOM element to append the non-inline ZoomPane to.\n // Required if `inlinePane !== true`.\n\n var paneContainer = options[\"paneContainer\"] === undefined ? document.body : options[\"paneContainer\"]; // When to switch to an inline ZoomPane. This can be a boolean or\n // an integer. If `true`, the ZoomPane will always be inline,\n // if `false`, it will switch to inline when `windowWidth <= inlinePane`\n\n var inlinePane = options[\"inlinePane\"] || 375; // If `true`, touch events will trigger the zoom, like mouse events.\n\n var handleTouch = \"handleTouch\" in options ? !!options[\"handleTouch\"] : true; // If present (and a function), this will be called\n // whenever the ZoomPane is shown.\n\n var onShow = options[\"onShow\"] || null; // If present (and a function), this will be called\n // whenever the ZoomPane is hidden.\n\n var onHide = options[\"onHide\"] || null; // Add base styles to the page. See the \"Theming\"\n // section of README.md for more information.\n\n var injectBaseStyles = \"injectBaseStyles\" in options ? !!options[\"injectBaseStyles\"] : true; // An optional number that determines how long to wait before\n // showing the ZoomPane because of a `mouseenter` event.\n\n var hoverDelay = options[\"hoverDelay\"] || 0; // An optional number that determines how long to wait before\n // showing the ZoomPane because of a `touchstart` event.\n // It's unlikely that you would want to use this option, since\n // \"tap and hold\" is much more intentional than a hover event.\n\n var touchDelay = options[\"touchDelay\"] || 0; // If true, a bounding box will show the area currently being previewed\n // during mouse hover\n\n var hoverBoundingBox = options[\"hoverBoundingBox\"] || false; // If true, a bounding box will show the area currently being previewed\n // during touch events\n\n var touchBoundingBox = options[\"touchBoundingBox\"] || false; // A DOM element to append the bounding box to.\n\n var boundingBoxContainer = options[\"boundingBoxContainer\"] || document.body; // If true, the events related to handleTouch use passive listeners in\n // order to improve performance for touch devices.\n\n var passive = options[\"passive\"] || false;\n\n if (inlinePane !== true && !isDOMElement(paneContainer)) {\n throw new TypeError(\"`paneContainer` must be a DOM element when `inlinePane !== true`\");\n }\n\n if (!isDOMElement(inlineContainer)) {\n throw new TypeError(\"`inlineContainer` must be a DOM element\");\n }\n\n this.settings = {\n namespace: namespace,\n showWhitespaceAtEdges: showWhitespaceAtEdges,\n containInline: containInline,\n inlineOffsetX: inlineOffsetX,\n inlineOffsetY: inlineOffsetY,\n inlineContainer: inlineContainer,\n sourceAttribute: sourceAttribute,\n zoomFactor: zoomFactor,\n paneContainer: paneContainer,\n inlinePane: inlinePane,\n handleTouch: handleTouch,\n onShow: onShow,\n onHide: onHide,\n injectBaseStyles: injectBaseStyles,\n hoverDelay: hoverDelay,\n touchDelay: touchDelay,\n hoverBoundingBox: hoverBoundingBox,\n touchBoundingBox: touchBoundingBox,\n boundingBoxContainer: boundingBoxContainer,\n passive: passive\n };\n\n if (this.settings.injectBaseStyles) {\n injectBaseStylesheet();\n }\n\n this._buildZoomPane();\n\n this._buildTrigger();\n }\n\n _createClass(Drift, [{\n key: \"_buildZoomPane\",\n value: function _buildZoomPane() {\n this.zoomPane = new ZoomPane({\n container: this.settings.paneContainer,\n zoomFactor: this.settings.zoomFactor,\n showWhitespaceAtEdges: this.settings.showWhitespaceAtEdges,\n containInline: this.settings.containInline,\n inline: this.settings.inlinePane,\n namespace: this.settings.namespace,\n inlineOffsetX: this.settings.inlineOffsetX,\n inlineOffsetY: this.settings.inlineOffsetY,\n inlineContainer: this.settings.inlineContainer\n });\n }\n }, {\n key: \"_buildTrigger\",\n value: function _buildTrigger() {\n this.trigger = new Trigger({\n el: this.triggerEl,\n zoomPane: this.zoomPane,\n handleTouch: this.settings.handleTouch,\n onShow: this.settings.onShow,\n onHide: this.settings.onHide,\n sourceAttribute: this.settings.sourceAttribute,\n hoverDelay: this.settings.hoverDelay,\n touchDelay: this.settings.touchDelay,\n hoverBoundingBox: this.settings.hoverBoundingBox,\n touchBoundingBox: this.settings.touchBoundingBox,\n namespace: this.settings.namespace,\n zoomFactor: this.settings.zoomFactor,\n boundingBoxContainer: this.settings.boundingBoxContainer,\n passive: this.settings.passive\n });\n }\n }, {\n key: \"setZoomImageURL\",\n value: function setZoomImageURL(imageURL) {\n this.zoomPane._setImageURL(imageURL);\n }\n }, {\n key: \"disable\",\n value: function disable() {\n this.trigger.enabled = false;\n }\n }, {\n key: \"enable\",\n value: function enable() {\n this.trigger.enabled = true;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.trigger._hide();\n\n this.trigger._unbindEvents();\n }\n }, {\n key: \"isShowing\",\n get: function get() {\n return this.zoomPane.isShowing;\n }\n }, {\n key: \"zoomFactor\",\n get: function get() {\n return this.settings.zoomFactor;\n },\n set: function set(zf) {\n this.settings.zoomFactor = zf;\n this.zoomPane.settings.zoomFactor = zf;\n this.trigger.settings.zoomFactor = zf;\n this.boundingBox.settings.zoomFactor = zf;\n }\n }]);\n\n return Drift;\n}(); // Public API\n\n/* eslint-disable no-self-assign */\n\n\nexport { Drift as default };\nObject.defineProperty(Drift.prototype, \"isShowing\", {\n get: function get() {\n return this.isShowing;\n }\n});\nObject.defineProperty(Drift.prototype, \"zoomFactor\", {\n get: function get() {\n return this.zoomFactor;\n },\n set: function set(value) {\n this.zoomFactor = value;\n }\n});\nDrift.prototype[\"setZoomImageURL\"] = Drift.prototype.setZoomImageURL;\nDrift.prototype[\"disable\"] = Drift.prototype.disable;\nDrift.prototype[\"enable\"] = Drift.prototype.enable;\nDrift.prototype[\"destroy\"] = Drift.prototype.destroy;\n/* eslint-enable no-self-assign */\n//# sourceMappingURL=Drift.js.map","/* UNMINIFIED RULES\n\nconst RULES = `\n@keyframes noop {\n 0% { zoom: 1; }\n}\n\n@-webkit-keyframes noop {\n 0% { zoom: 1; }\n}\n\n.drift-zoom-pane.drift-open {\n display: block;\n}\n\n.drift-zoom-pane.drift-opening, .drift-zoom-pane.drift-closing {\n animation: noop 1ms;\n -webkit-animation: noop 1ms;\n}\n\n.drift-zoom-pane {\n position: absolute;\n overflow: hidden;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n pointer-events: none;\n}\n\n.drift-zoom-pane-loader {\n display: none;\n}\n\n.drift-zoom-pane img {\n position: absolute;\n display: block;\n max-width: none;\n max-height: none;\n}\n\n.drift-bounding-box {\n position: absolute;\n pointer-events: none;\n}\n`;\n\n*/\nvar RULES = \".drift-bounding-box,.drift-zoom-pane{position:absolute;pointer-events:none}@keyframes noop{0%{zoom:1}}@-webkit-keyframes noop{0%{zoom:1}}.drift-zoom-pane.drift-open{display:block}.drift-zoom-pane.drift-closing,.drift-zoom-pane.drift-opening{animation:noop 1ms;-webkit-animation:noop 1ms}.drift-zoom-pane{overflow:hidden;width:100%;height:100%;top:0;left:0}.drift-zoom-pane-loader{display:none}.drift-zoom-pane img{position:absolute;display:block;max-width:none;max-height:none}\";\nexport default function injectBaseStylesheet() {\n if (document.querySelector(\".drift-base-styles\")) {\n return;\n }\n\n var styleEl = document.createElement(\"style\");\n styleEl.type = \"text/css\";\n styleEl.classList.add(\"drift-base-styles\");\n styleEl.appendChild(document.createTextNode(RULES));\n var head = document.head;\n head.insertBefore(styleEl, head.firstChild);\n}\n//# sourceMappingURL=injectBaseStylesheet.js.map","/*!\n * PhotoSwipe Lightbox 5.3.2 - https://photoswipe.com\n * (c) 2022 Dmytro Semenov\n */\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/** @typedef {undefined | null | false | '' | 0} Falsy */\r\n/** @typedef {keyof HTMLElementTagNameMap} HTMLElementTagName */\r\n\r\n/**\r\n * @template {HTMLElementTagName | Falsy} [T=\"div\"]\r\n * @template {Node | undefined} [NodeToAppendElementTo=undefined]\r\n * @param {string=} className\r\n * @param {T=} [tagName]\r\n * @param {NodeToAppendElementTo=} appendToEl\r\n * @returns {T extends HTMLElementTagName ? HTMLElementTagNameMap[T] : HTMLElementTagNameMap['div']}\r\n */\r\nfunction createElement(className, tagName, appendToEl) {\r\n const el = document.createElement(tagName || 'div');\r\n if (className) {\r\n el.className = className;\r\n }\r\n if (appendToEl) {\r\n appendToEl.appendChild(el);\r\n }\r\n // @ts-expect-error\r\n return el;\r\n}\r\n\r\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number=} y\r\n * @param {number=} scale\r\n */\r\nfunction toTransformString(x, y, scale) {\r\n let propValue = 'translate3d('\r\n + x + 'px,' + (y || 0) + 'px'\r\n + ',0)';\r\n\r\n if (scale !== undefined) {\r\n propValue += ' scale3d('\r\n + scale + ',' + scale\r\n + ',1)';\r\n }\r\n\r\n return propValue;\r\n}\r\n\r\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\r\nfunction setWidthHeight(el, w, h) {\r\n el.style.width = (typeof w === 'number') ? (w + 'px') : w;\r\n el.style.height = (typeof h === 'number') ? (h + 'px') : h;\r\n}\r\n\r\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\r\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\r\nconst LOAD_STATE = {\r\n IDLE: 'idle',\r\n LOADING: 'loading',\r\n LOADED: 'loaded',\r\n ERROR: 'error',\r\n};\r\n\r\n\r\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n */\r\nfunction specialKeyUsed(e) {\r\n if (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {HTMLElement | NodeListOf | string} option\r\n * @param {string=} legacySelector\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\r\nfunction getElementsFromOption(option, legacySelector, parent = document) {\r\n /** @type {HTMLElement[]} */\r\n let elements = [];\r\n\r\n if (option instanceof Element) {\r\n elements = [option];\r\n } else if (option instanceof NodeList || Array.isArray(option)) {\r\n elements = Array.from(option);\r\n } else {\r\n const selector = typeof option === 'string' ? option : legacySelector;\r\n if (selector) {\r\n elements = Array.from(parent.querySelectorAll(selector));\r\n }\r\n }\r\n\r\n return elements;\r\n}\r\n\r\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n */\r\nfunction isPswpClass(fn) {\r\n return typeof fn === 'function'\r\n && fn.prototype\r\n && fn.prototype.goTo;\r\n}\r\n\r\n/**\r\n * Check if browser is Safari\r\n *\r\n * @returns {boolean}\r\n */\r\nfunction isSafari() {\r\n return !!(navigator.vendor && navigator.vendor.match(/apple/i));\r\n}\n\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../slide/content.js').default} ContentDefault */\r\n/** @typedef {import('../slide/slide.js').default} Slide */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\r\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\r\n\r\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record} Content\r\n */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point, transitionDuration: number | false }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thubmnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thubmnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n *\r\n * @prop {(srcsetSizesWidth: number, content: Content) => number} srcsetSizesWidth\r\n *\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent : PhotoSwipeEvent & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent) => void} EventCallback\r\n */\r\n\r\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\r\nclass PhotoSwipeEvent {\r\n /**\r\n * @param {T} type\r\n * @param {PhotoSwipeEventsMap[T]} [details]\r\n */\r\n constructor(type, details) {\r\n this.type = type;\r\n if (details) {\r\n Object.assign(this, details);\r\n }\r\n }\r\n\r\n preventDefault() {\r\n this.defaultPrevented = true;\r\n }\r\n}\r\n\r\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\r\nclass Eventable {\r\n constructor() {\r\n /**\r\n * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent) => void)[] }}\r\n */\r\n this._listeners = {};\r\n\r\n /**\r\n * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter[] }}\r\n */\r\n this._filters = {};\r\n\r\n /** @type {PhotoSwipe=} */\r\n this.pswp = undefined;\r\n\r\n /** @type {PhotoSwipeOptions} */\r\n this.options = undefined;\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeFiltersMap[T]} fn\r\n * @param {number} priority\r\n */\r\n addFilter(name, fn, priority = 100) {\r\n if (!this._filters[name]) {\r\n this._filters[name] = [];\r\n }\r\n\r\n this._filters[name].push({ fn, priority });\r\n this._filters[name].sort((f1, f2) => f1.priority - f2.priority);\r\n\r\n if (this.pswp) {\r\n this.pswp.addFilter(name, fn, priority);\r\n }\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeFiltersMap[T]} fn\r\n */\r\n removeFilter(name, fn) {\r\n if (this._filters[name]) {\r\n // @ts-expect-error\r\n this._filters[name] = this._filters[name].filter(filter => (filter.fn !== fn));\r\n }\r\n\r\n if (this.pswp) {\r\n this.pswp.removeFilter(name, fn);\r\n }\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @param {T} name\r\n * @param {Parameters} args\r\n * @returns {Parameters[0]}\r\n */\r\n applyFilters(name, ...args) {\r\n if (this._filters[name]) {\r\n this._filters[name].forEach((filter) => {\r\n // @ts-expect-error\r\n args[0] = filter.fn.apply(this, args);\r\n });\r\n }\r\n return args[0];\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {EventCallback} fn\r\n */\r\n on(name, fn) {\r\n if (!this._listeners[name]) {\r\n this._listeners[name] = [];\r\n }\r\n this._listeners[name].push(fn);\r\n\r\n // When binding events to lightbox,\r\n // also bind events to PhotoSwipe Core,\r\n // if it's open.\r\n if (this.pswp) {\r\n this.pswp.on(name, fn);\r\n }\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {EventCallback} fn\r\n */\r\n off(name, fn) {\r\n if (this._listeners[name]) {\r\n // @ts-expect-error\r\n this._listeners[name] = this._listeners[name].filter(listener => (fn !== listener));\r\n }\r\n\r\n if (this.pswp) {\r\n this.pswp.off(name, fn);\r\n }\r\n }\r\n\r\n /**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @param {T} name\r\n * @param {PhotoSwipeEventsMap[T]} [details]\r\n * @returns {AugmentedEvent}\r\n */\r\n dispatch(name, details) {\r\n if (this.pswp) {\r\n return this.pswp.dispatch(name, details);\r\n }\r\n\r\n const event = /** @type {AugmentedEvent} */ (new PhotoSwipeEvent(name, details));\r\n\r\n if (!this._listeners) {\r\n return event;\r\n }\r\n\r\n if (this._listeners[name]) {\r\n this._listeners[name].forEach((listener) => {\r\n listener.call(this, event);\r\n });\r\n }\r\n\r\n return event;\r\n }\r\n}\n\nclass Placeholder {\r\n /**\r\n * @param {string | false} imageSrc\r\n * @param {HTMLElement} container\r\n */\r\n constructor(imageSrc, container) {\r\n // Create placeholder\r\n // (stretched thumbnail or simple div behind the main image)\r\n this.element = createElement(\r\n 'pswp__img pswp__img--placeholder',\r\n imageSrc ? 'img' : '',\r\n container\r\n );\r\n\r\n if (imageSrc) {\r\n /** @type {HTMLImageElement} */\r\n (this.element).decoding = 'async';\r\n /** @type {HTMLImageElement} */\r\n (this.element).alt = '';\r\n /** @type {HTMLImageElement} */\r\n (this.element).src = imageSrc;\r\n this.element.setAttribute('role', 'presentation');\r\n }\r\n\r\n this.element.setAttribute('aria-hiden', 'true');\r\n }\r\n\r\n /**\r\n * @param {number} width\r\n * @param {number} height\r\n */\r\n setDisplayedSize(width, height) {\r\n if (!this.element) {\r\n return;\r\n }\r\n\r\n if (this.element.tagName === 'IMG') {\r\n // Use transform scale() to modify img placeholder size\r\n // (instead of changing width/height directly).\r\n // This helps with performance, specifically in iOS15 Safari.\r\n setWidthHeight(this.element, 250, 'auto');\r\n this.element.style.transformOrigin = '0 0';\r\n this.element.style.transform = toTransformString(0, 0, width / 250);\r\n } else {\r\n setWidthHeight(this.element, width, height);\r\n }\r\n }\r\n\r\n destroy() {\r\n if (this.element.parentNode) {\r\n this.element.remove();\r\n }\r\n this.element = null;\r\n }\r\n}\n\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../util/util.js').LoadState} LoadState */\r\n\r\nclass Content {\r\n /**\r\n * @param {SlideData} itemData Slide data\r\n * @param {PhotoSwipe} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n * @param {number} index\r\n */\r\n constructor(itemData, instance, index) {\r\n this.instance = instance;\r\n this.data = itemData;\r\n this.index = index;\r\n\r\n /** @type {HTMLImageElement | HTMLDivElement} */\r\n this.element = undefined;\r\n\r\n this.displayedImageWidth = 0;\r\n this.displayedImageHeight = 0;\r\n\r\n this.width = Number(this.data.w) || Number(this.data.width) || 0;\r\n this.height = Number(this.data.h) || Number(this.data.height) || 0;\r\n\r\n this.isAttached = false;\r\n this.hasSlide = false;\r\n /** @type {LoadState} */\r\n this.state = LOAD_STATE.IDLE;\r\n\r\n if (this.data.type) {\r\n this.type = this.data.type;\r\n } else if (this.data.src) {\r\n this.type = 'image';\r\n } else {\r\n this.type = 'html';\r\n }\r\n\r\n this.instance.dispatch('contentInit', { content: this });\r\n }\r\n\r\n removePlaceholder() {\r\n if (this.placeholder && !this.keepPlaceholder()) {\r\n // With delay, as image might be loaded, but not rendered\r\n setTimeout(() => {\r\n if (this.placeholder) {\r\n this.placeholder.destroy();\r\n this.placeholder = null;\r\n }\r\n }, 1000);\r\n }\r\n }\r\n\r\n /**\r\n * Preload content\r\n *\r\n * @param {boolean=} isLazy\r\n * @param {boolean=} reload\r\n */\r\n load(isLazy, reload) {\r\n if (this.slide && this.usePlaceholder()) {\r\n if (!this.placeholder) {\r\n const placeholderSrc = this.instance.applyFilters(\r\n 'placeholderSrc',\r\n // use image-based placeholder only for the first slide,\r\n // as rendering (even small stretched thumbnail) is an expensive operation\r\n (this.data.msrc && this.slide.isFirstSlide) ? this.data.msrc : false,\r\n this\r\n );\r\n this.placeholder = new Placeholder(\r\n placeholderSrc,\r\n this.slide.container\r\n );\r\n } else {\r\n const placeholderEl = this.placeholder.element;\r\n // Add placeholder to DOM if it was already created\r\n if (placeholderEl && !placeholderEl.parentElement) {\r\n this.slide.container.prepend(placeholderEl);\r\n }\r\n }\r\n }\r\n\r\n if (this.element && !reload) {\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentLoad', { content: this, isLazy }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.isImageContent()) {\r\n this.element = createElement('pswp__img', 'img');\r\n // Start loading only after width is defined, as sizes might depend on it.\r\n // Due to Safari feature, we must define sizes before srcset.\r\n if (this.displayedImageWidth) {\r\n this.loadImage(isLazy);\r\n }\r\n } else {\r\n this.element = createElement('pswp__content');\r\n this.element.innerHTML = this.data.html || '';\r\n }\r\n\r\n if (reload && this.slide) {\r\n this.slide.updateContentSize(true);\r\n }\r\n }\r\n\r\n /**\r\n * Preload image\r\n *\r\n * @param {boolean} isLazy\r\n */\r\n loadImage(isLazy) {\r\n const imageElement = /** @type HTMLImageElement */ (this.element);\r\n\r\n if (this.instance.dispatch('contentLoadImage', { content: this, isLazy }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.updateSrcsetSizes();\r\n\r\n if (this.data.srcset) {\r\n imageElement.srcset = this.data.srcset;\r\n }\r\n\r\n imageElement.src = this.data.src;\r\n\r\n imageElement.alt = this.data.alt || '';\r\n\r\n this.state = LOAD_STATE.LOADING;\r\n\r\n if (imageElement.complete) {\r\n this.onLoaded();\r\n } else {\r\n imageElement.onload = () => {\r\n this.onLoaded();\r\n };\r\n\r\n imageElement.onerror = () => {\r\n this.onError();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Assign slide to content\r\n *\r\n * @param {Slide} slide\r\n */\r\n setSlide(slide) {\r\n this.slide = slide;\r\n this.hasSlide = true;\r\n this.instance = slide.pswp;\r\n\r\n // todo: do we need to unset slide?\r\n }\r\n\r\n /**\r\n * Content load success handler\r\n */\r\n onLoaded() {\r\n this.state = LOAD_STATE.LOADED;\r\n\r\n if (this.slide) {\r\n this.instance.dispatch('loadComplete', { slide: this.slide, content: this });\r\n\r\n // if content is reloaded\r\n if (this.slide.isActive\r\n && this.slide.heavyAppended\r\n && !this.element.parentNode) {\r\n this.append();\r\n this.slide.updateContentSize(true);\r\n }\r\n\r\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\r\n this.removePlaceholder();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Content load error handler\r\n */\r\n onError() {\r\n this.state = LOAD_STATE.ERROR;\r\n\r\n if (this.slide) {\r\n this.displayError();\r\n this.instance.dispatch('loadComplete', { slide: this.slide, isError: true, content: this });\r\n this.instance.dispatch('loadError', { slide: this.slide, content: this });\r\n }\r\n }\r\n\r\n /**\r\n * @returns {Boolean} If the content is currently loading\r\n */\r\n isLoading() {\r\n return this.instance.applyFilters(\r\n 'isContentLoading',\r\n this.state === LOAD_STATE.LOADING,\r\n this\r\n );\r\n }\r\n\r\n isError() {\r\n return this.state === LOAD_STATE.ERROR;\r\n }\r\n\r\n /**\r\n * @returns {boolean} If the content is image\r\n */\r\n isImageContent() {\r\n return this.type === 'image';\r\n }\r\n\r\n /**\r\n * Update content size\r\n *\r\n * @param {Number} width\r\n * @param {Number} height\r\n */\r\n setDisplayedSize(width, height) {\r\n if (!this.element) {\r\n return;\r\n }\r\n\r\n if (this.placeholder) {\r\n this.placeholder.setDisplayedSize(width, height);\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n if (this.instance.dispatch('contentResize', { content: this, width, height }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n setWidthHeight(this.element, width, height);\r\n\r\n if (this.isImageContent() && !this.isError()) {\r\n const isInitialSizeUpdate = (!this.displayedImageWidth && width);\r\n\r\n this.displayedImageWidth = width;\r\n this.displayedImageHeight = height;\r\n\r\n if (isInitialSizeUpdate) {\r\n this.loadImage(false);\r\n } else {\r\n this.updateSrcsetSizes();\r\n }\r\n\r\n if (this.slide) {\r\n // eslint-disable-next-line max-len\r\n this.instance.dispatch('imageSizeChange', { slide: this.slide, width, height, content: this });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @returns {boolean} If the content can be zoomed\r\n */\r\n isZoomable() {\r\n return this.instance.applyFilters(\r\n 'isContentZoomable',\r\n this.isImageContent() && (this.state !== LOAD_STATE.ERROR),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * Update image srcset sizes attribute based on width and height\r\n */\r\n updateSrcsetSizes() {\r\n // Handle srcset sizes attribute.\r\n //\r\n // Never lower quality, if it was increased previously.\r\n // Chrome does this automatically, Firefox and Safari do not,\r\n // so we store largest used size in dataset.\r\n // Handle srcset sizes attribute.\r\n //\r\n // Never lower quality, if it was increased previously.\r\n // Chrome does this automatically, Firefox and Safari do not,\r\n // so we store largest used size in dataset.\r\n if (this.data.srcset) {\r\n const image = /** @type HTMLImageElement */ (this.element);\r\n const sizesWidth = this.instance.applyFilters(\r\n 'srcsetSizesWidth',\r\n this.displayedImageWidth,\r\n this\r\n );\r\n\r\n if (!image.dataset.largestUsedSize\r\n || sizesWidth > parseInt(image.dataset.largestUsedSize, 10)) {\r\n image.sizes = sizesWidth + 'px';\r\n image.dataset.largestUsedSize = String(sizesWidth);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n */\r\n usePlaceholder() {\r\n return this.instance.applyFilters(\r\n 'useContentPlaceholder',\r\n this.isImageContent(),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * Preload content with lazy-loading param\r\n */\r\n lazyLoad() {\r\n if (this.instance.dispatch('contentLazyLoad', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.load(true);\r\n }\r\n\r\n /**\r\n * @returns {boolean} If placeholder should be kept after content is loaded\r\n */\r\n keepPlaceholder() {\r\n return this.instance.applyFilters(\r\n 'isKeepingPlaceholder',\r\n this.isLoading(),\r\n this\r\n );\r\n }\r\n\r\n /**\r\n * Destroy the content\r\n */\r\n destroy() {\r\n this.hasSlide = false;\r\n this.slide = null;\r\n\r\n if (this.instance.dispatch('contentDestroy', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n this.remove();\r\n\r\n if (this.placeholder) {\r\n this.placeholder.destroy();\r\n this.placeholder = null;\r\n }\r\n\r\n if (this.isImageContent() && this.element) {\r\n this.element.onload = null;\r\n this.element.onerror = null;\r\n this.element = null;\r\n }\r\n }\r\n\r\n /**\r\n * Display error message\r\n */\r\n displayError() {\r\n if (this.slide) {\r\n /** @type {HTMLElement} */\r\n let errorMsgEl = createElement('pswp__error-msg');\r\n errorMsgEl.innerText = this.instance.options.errorMsg;\r\n errorMsgEl = this.instance.applyFilters(\r\n 'contentErrorElement',\r\n errorMsgEl,\r\n this\r\n );\r\n this.element = createElement('pswp__content pswp__error-msg-container');\r\n this.element.appendChild(errorMsgEl);\r\n this.slide.container.innerText = '';\r\n this.slide.container.appendChild(this.element);\r\n this.slide.updateContentSize(true);\r\n this.removePlaceholder();\r\n }\r\n }\r\n\r\n /**\r\n * Append the content\r\n */\r\n append() {\r\n if (this.isAttached) {\r\n return;\r\n }\r\n\r\n this.isAttached = true;\r\n\r\n if (this.state === LOAD_STATE.ERROR) {\r\n this.displayError();\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentAppend', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n const supportsDecode = ('decode' in this.element);\r\n\r\n if (this.isImageContent()) {\r\n // Use decode() on nearby slides\r\n //\r\n // Nearby slide images are in DOM and not hidden via display:none.\r\n // However, they are placed offscreen (to the left and right side).\r\n //\r\n // Some browsers do not composite the image until it's actually visible,\r\n // using decode() helps.\r\n //\r\n // You might ask \"why dont you just decode() and then append all images\",\r\n // that's because I want to show image before it's fully loaded,\r\n // as browser can render parts of image while it is loading.\r\n // We do not do this in Safari due to partial loading bug.\r\n if (supportsDecode && this.slide && (!this.slide.isActive || isSafari())) {\r\n this.isDecoding = true;\r\n // purposefully using finally instead of then,\r\n // as if srcset sizes changes dynamically - it may cause decode error\r\n /** @type {HTMLImageElement} */\r\n (this.element).decode().finally(() => {\r\n this.isDecoding = false;\r\n this.appendImage();\r\n });\r\n } else {\r\n this.appendImage();\r\n }\r\n } else if (this.element && !this.element.parentNode) {\r\n this.slide.container.appendChild(this.element);\r\n }\r\n }\r\n\r\n /**\r\n * Activate the slide,\r\n * active slide is generally the current one,\r\n * meaning the user can see it.\r\n */\r\n activate() {\r\n if (this.instance.dispatch('contentActivate', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.slide) {\r\n if (this.isImageContent() && this.isDecoding && !isSafari()) {\r\n // add image to slide when it becomes active,\r\n // even if it's not finished decoding\r\n this.appendImage();\r\n } else if (this.isError()) {\r\n this.load(false, true); // try to reload\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deactivate the content\r\n */\r\n deactivate() {\r\n this.instance.dispatch('contentDeactivate', { content: this });\r\n }\r\n\r\n\r\n /**\r\n * Remove the content from DOM\r\n */\r\n remove() {\r\n this.isAttached = false;\r\n\r\n if (this.instance.dispatch('contentRemove', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n if (this.element && this.element.parentNode) {\r\n this.element.remove();\r\n }\r\n\r\n if (this.placeholder && this.placeholder.element) {\r\n this.placeholder.element.remove();\r\n }\r\n }\r\n\r\n /**\r\n * Append the image content to slide container\r\n */\r\n appendImage() {\r\n if (!this.isAttached) {\r\n return;\r\n }\r\n\r\n if (this.instance.dispatch('contentAppendImage', { content: this }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n // ensure that element exists and is not already appended\r\n if (this.slide && this.element && !this.element.parentNode) {\r\n this.slide.container.appendChild(this.element);\r\n }\r\n\r\n if (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR) {\r\n this.removePlaceholder();\r\n }\r\n }\r\n}\n\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipe} pswp\r\n */\r\nfunction getViewportSize(options, pswp) {\r\n if (options.getViewportSizeFn) {\r\n const newViewportSize = options.getViewportSizeFn(options, pswp);\r\n if (newViewportSize) {\r\n return newViewportSize;\r\n }\r\n }\r\n\r\n return {\r\n x: document.documentElement.clientWidth,\r\n\r\n // TODO: height on mobile is very incosistent due to toolbar\r\n // find a way to improve this\r\n //\r\n // document.documentElement.clientHeight - doesn't seem to work well\r\n y: window.innerHeight\r\n };\r\n}\r\n\r\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n * return {\r\n * top: 0,\r\n * bottom: 0,\r\n * left: 0,\r\n * right: 0\r\n * };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {{ x?: number; y?: number }} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\r\nfunction parsePaddingOption(prop, options, viewportSize, itemData, index) {\r\n /** @type {number} */\r\n let paddingValue;\r\n\r\n if (options.paddingFn) {\r\n paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\r\n } else if (options.padding) {\r\n paddingValue = options.padding[prop];\r\n } else {\r\n const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1);\r\n // @ts-expect-error\r\n if (options[legacyPropName]) {\r\n // @ts-expect-error\r\n paddingValue = options[legacyPropName];\r\n }\r\n }\r\n\r\n return paddingValue || 0;\r\n}\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {{ x?: number; y?: number }} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n */\r\nfunction getPanAreaSize(options, viewportSize, itemData, index) {\r\n return {\r\n x: viewportSize.x\r\n - parsePaddingOption('left', options, viewportSize, itemData, index)\r\n - parsePaddingOption('right', options, viewportSize, itemData, index),\r\n y: viewportSize.y\r\n - parsePaddingOption('top', options, viewportSize, itemData, index)\r\n - parsePaddingOption('bottom', options, viewportSize, itemData, index)\r\n };\r\n}\n\nconst MAX_IMAGE_WIDTH = 4000;\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\r\n\r\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\r\nclass ZoomLevel {\r\n /**\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {SlideData} itemData Slide data\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipe=} pswp PhotoSwipe instance, can be undefined if not initialized yet\r\n */\r\n constructor(options, itemData, index, pswp) {\r\n this.pswp = pswp;\r\n this.options = options;\r\n this.itemData = itemData;\r\n this.index = index;\r\n }\r\n\r\n /**\r\n * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n *\r\n * It should be called when either image or viewport size changes.\r\n *\r\n * @param {number} maxWidth\r\n * @param {number} maxHeight\r\n * @param {{ x?: number; y?: number }} panAreaSize\r\n */\r\n update(maxWidth, maxHeight, panAreaSize) {\r\n this.elementSize = {\r\n x: maxWidth,\r\n y: maxHeight\r\n };\r\n\r\n this.panAreaSize = panAreaSize;\r\n\r\n const hRatio = this.panAreaSize.x / this.elementSize.x;\r\n const vRatio = this.panAreaSize.y / this.elementSize.y;\r\n\r\n this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\r\n this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio);\r\n\r\n // zoom.vFill defines zoom level of the image\r\n // when it has 100% of viewport vertical space (height)\r\n this.vFill = Math.min(1, vRatio);\r\n\r\n this.initial = this._getInitial();\r\n this.secondary = this._getSecondary();\r\n this.max = Math.max(\r\n this.initial,\r\n this.secondary,\r\n this._getMax()\r\n );\r\n\r\n this.min = Math.min(\r\n this.fit,\r\n this.initial,\r\n this.secondary\r\n );\r\n\r\n if (this.pswp) {\r\n this.pswp.dispatch('zoomLevelsUpdate', { zoomLevels: this, slideData: this.itemData });\r\n }\r\n }\r\n\r\n /**\r\n * Parses user-defined zoom option.\r\n *\r\n * @private\r\n * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n */\r\n _parseZoomLevelOption(optionPrefix) {\r\n // eslint-disable-next-line max-len\r\n const optionName = /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */ (optionPrefix + 'ZoomLevel');\r\n const optionValue = this.options[optionName];\r\n\r\n if (!optionValue) {\r\n return;\r\n }\r\n\r\n if (typeof optionValue === 'function') {\r\n return optionValue(this);\r\n }\r\n\r\n if (optionValue === 'fill') {\r\n return this.fill;\r\n }\r\n\r\n if (optionValue === 'fit') {\r\n return this.fit;\r\n }\r\n\r\n return Number(optionValue);\r\n }\r\n\r\n /**\r\n * Get zoom level to which image will be zoomed after double-tap gesture,\r\n * or when user clicks on zoom icon,\r\n * or mouse-click on image itself.\r\n * If you return 1 image will be zoomed to its original size.\r\n *\r\n * @private\r\n * @return {number}\r\n */\r\n _getSecondary() {\r\n let currZoomLevel = this._parseZoomLevelOption('secondary');\r\n\r\n if (currZoomLevel) {\r\n return currZoomLevel;\r\n }\r\n\r\n // 3x of \"fit\" state, but not larger than original\r\n currZoomLevel = Math.min(1, this.fit * 3);\r\n\r\n if (currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\r\n currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\r\n }\r\n\r\n return currZoomLevel;\r\n }\r\n\r\n /**\r\n * Get initial image zoom level.\r\n *\r\n * @private\r\n * @return {number}\r\n */\r\n _getInitial() {\r\n return this._parseZoomLevelOption('initial') || this.fit;\r\n }\r\n\r\n /**\r\n * Maximum zoom level when user zooms\r\n * via zoom/pinch gesture,\r\n * via cmd/ctrl-wheel or via trackpad.\r\n *\r\n * @private\r\n * @return {number}\r\n */\r\n _getMax() {\r\n const currZoomLevel = this._parseZoomLevelOption('max');\r\n\r\n if (currZoomLevel) {\r\n return currZoomLevel;\r\n }\r\n\r\n // max zoom level is x4 from \"fit state\",\r\n // used for zoom gesture and ctrl/trackpad zoom\r\n return Math.max(1, this.fit * 4);\r\n }\r\n}\n\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipe | PhotoSwipeLightbox | PhotoSwipeBase} instance PhotoSwipe instance\r\n * @param {number} index\r\n * @returns Image that is being decoded or false.\r\n */\r\nfunction lazyLoadData(itemData, instance, index) {\r\n // src/slide/content/content.js\r\n const content = instance.createContentFromData(itemData, index);\r\n\r\n if (!content || !content.lazyLoad) {\r\n return;\r\n }\r\n\r\n const { options } = instance;\r\n\r\n // We need to know dimensions of the image to preload it,\r\n // as it might use srcset and we need to define sizes\r\n // @ts-expect-error should provide pswp instance?\r\n const viewportSize = instance.viewportSize || getViewportSize(options, instance);\r\n const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\r\n\r\n const zoomLevel = new ZoomLevel(options, itemData, -1);\r\n zoomLevel.update(content.width, content.height, panAreaSize);\r\n\r\n content.lazyLoad();\r\n content.setDisplayedSize(\r\n Math.ceil(content.width * zoomLevel.initial),\r\n Math.ceil(content.height * zoomLevel.initial)\r\n );\r\n\r\n return content;\r\n}\r\n\r\n\r\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipe | PhotoSwipeLightbox} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n */\r\nfunction lazyLoadSlide(index, instance) {\r\n const itemData = instance.getItemData(index);\r\n\r\n if (instance.dispatch('lazyLoadSlide', { index, itemData }).defaultPrevented) {\r\n return;\r\n }\r\n\r\n return lazyLoadData(itemData, instance, index);\r\n}\n\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\r\n/** @typedef {import(\"../photoswipe.js\").PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\r\n\r\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\r\nclass PhotoSwipeBase extends Eventable {\r\n /**\r\n * Get total number of slides\r\n *\r\n * @returns {number}\r\n */\r\n getNumItems() {\r\n let numItems;\r\n const { dataSource } = this.options;\r\n if (!dataSource) {\r\n numItems = 0;\r\n } else if ('length' in dataSource) {\r\n // may be an array or just object with length property\r\n numItems = dataSource.length;\r\n } else if ('gallery' in dataSource) {\r\n // query DOM elements\r\n if (!dataSource.items) {\r\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n }\r\n\r\n if (dataSource.items) {\r\n numItems = dataSource.items.length;\r\n }\r\n }\r\n\r\n // legacy event, before filters were introduced\r\n const event = this.dispatch('numItems', {\r\n dataSource,\r\n numItems\r\n });\r\n return this.applyFilters('numItems', event.numItems, dataSource);\r\n }\r\n\r\n /**\r\n * @param {SlideData} slideData\r\n * @param {number} index\r\n */\r\n createContentFromData(slideData, index) {\r\n // @ts-expect-error\r\n return new Content(slideData, this, index);\r\n }\r\n\r\n /**\r\n * Get item data by index.\r\n *\r\n * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n * For example, it may contain properties like\r\n * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n *\r\n * @param {number} index\r\n */\r\n getItemData(index) {\r\n const { dataSource } = this.options;\r\n let dataSourceItem;\r\n if (Array.isArray(dataSource)) {\r\n // Datasource is an array of elements\r\n dataSourceItem = dataSource[index];\r\n } else if (dataSource && dataSource.gallery) {\r\n // dataSource has gallery property,\r\n // thus it was created by Lightbox, based on\r\n // gallery and children options\r\n\r\n // query DOM elements\r\n if (!dataSource.items) {\r\n dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n }\r\n\r\n dataSourceItem = dataSource.items[index];\r\n }\r\n\r\n let itemData = dataSourceItem;\r\n\r\n if (itemData instanceof Element) {\r\n itemData = this._domElementToItemData(itemData);\r\n }\r\n\r\n // Dispatching the itemData event,\r\n // it's a legacy verion before filters were introduced\r\n const event = this.dispatch('itemData', {\r\n itemData: itemData || {},\r\n index\r\n });\r\n\r\n return this.applyFilters('itemData', event.itemData, index);\r\n }\r\n\r\n /**\r\n * Get array of gallery DOM elements,\r\n * based on childSelector and gallery element.\r\n *\r\n * @param {HTMLElement} galleryElement\r\n */\r\n _getGalleryDOMElements(galleryElement) {\r\n if (this.options.children || this.options.childSelector) {\r\n return getElementsFromOption(\r\n this.options.children,\r\n this.options.childSelector,\r\n galleryElement\r\n ) || [];\r\n }\r\n\r\n return [galleryElement];\r\n }\r\n\r\n /**\r\n * Converts DOM element to item data object.\r\n *\r\n * @param {HTMLElement} element DOM element\r\n */\r\n // eslint-disable-next-line class-methods-use-this\r\n _domElementToItemData(element) {\r\n /** @type {SlideData} */\r\n const itemData = {\r\n element\r\n };\r\n\r\n // eslint-disable-next-line max-len\r\n const linkEl = /** @type {HTMLAnchorElement} */ (element.tagName === 'A' ? element : element.querySelector('a'));\r\n\r\n if (linkEl) {\r\n // src comes from data-pswp-src attribute,\r\n // if it's empty link href is used\r\n itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\r\n\r\n if (linkEl.dataset.pswpSrcset) {\r\n itemData.srcset = linkEl.dataset.pswpSrcset;\r\n }\r\n\r\n itemData.width = parseInt(linkEl.dataset.pswpWidth, 10);\r\n itemData.height = parseInt(linkEl.dataset.pswpHeight, 10);\r\n\r\n // support legacy w & h properties\r\n itemData.w = itemData.width;\r\n itemData.h = itemData.height;\r\n\r\n if (linkEl.dataset.pswpType) {\r\n itemData.type = linkEl.dataset.pswpType;\r\n }\r\n\r\n const thumbnailEl = element.querySelector('img');\r\n\r\n if (thumbnailEl) {\r\n // msrc is URL to placeholder image that's displayed before large image is loaded\r\n // by default it's displayed only for the first slide\r\n itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\r\n itemData.alt = thumbnailEl.getAttribute('alt');\r\n }\r\n\r\n if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\r\n itemData.thumbCropped = true;\r\n }\r\n }\r\n\r\n return this.applyFilters('domItemData', itemData, element, linkEl);\r\n }\r\n\r\n /**\r\n * Lazy-load by slide data\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index\r\n * @returns Image that is being decoded or false.\r\n */\r\n lazyLoadData(itemData, index) {\r\n return lazyLoadData(itemData, this, index);\r\n }\r\n}\n\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Type} Type\r\n */\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../slide/content.js').default} Content */\r\n/** @typedef {import('../core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\r\n/** @typedef {import('../core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('../core/eventable.js').EventCallback} EventCallback\r\n */\r\n\r\n/**\r\n * PhotoSwipe Lightbox\r\n *\r\n * - If user has unsupported browser it falls back to default browser action (just opens URL)\r\n * - Binds click event to links that should open PhotoSwipe\r\n * - parses DOM strcture for PhotoSwipe (retrieves large image URLs and sizes)\r\n * - Initializes PhotoSwipe\r\n *\r\n *\r\n * Loader options use the same object as PhotoSwipe, and supports such options:\r\n *\r\n * gallery - Element | Element[] | NodeList | string selector for the gallery element\r\n * children - Element | Element[] | NodeList | string selector for the gallery children\r\n *\r\n */\r\nclass PhotoSwipeLightbox extends PhotoSwipeBase {\r\n /**\r\n * @param {PhotoSwipeOptions} options\r\n */\r\n constructor(options) {\r\n super();\r\n /** @type {PhotoSwipeOptions} */\r\n this.options = options || {};\r\n this._uid = 0;\r\n }\r\n\r\n /**\r\n * Initialize lightbox, should be called only once.\r\n * It's not included in the main constructor, so you may bind events before it.\r\n */\r\n init() {\r\n this.onThumbnailsClick = this.onThumbnailsClick.bind(this);\r\n\r\n // Bind click events to each gallery\r\n getElementsFromOption(this.options.gallery, this.options.gallerySelector)\r\n .forEach((galleryElement) => {\r\n galleryElement.addEventListener('click', this.onThumbnailsClick, false);\r\n });\r\n }\r\n\r\n /**\r\n * @param {MouseEvent} e\r\n */\r\n onThumbnailsClick(e) {\r\n // Exit and allow default browser action if:\r\n if (specialKeyUsed(e) // ... if clicked with a special key (ctrl/cmd...)\r\n || window.pswp // ... if PhotoSwipe is already open\r\n || window.navigator.onLine === false) { // ... if offline\r\n return;\r\n }\r\n\r\n // If both clientX and clientY are 0 or not defined,\r\n // the event is likely triggered by keyboard,\r\n // so we do not pass the initialPoint\r\n //\r\n // Note that some screen readers emulate the mouse position,\r\n // so it's not ideal way to detect them.\r\n //\r\n let initialPoint = { x: e.clientX, y: e.clientY };\r\n\r\n if (!initialPoint.x && !initialPoint.y) {\r\n initialPoint = null;\r\n }\r\n\r\n let clickedIndex = this.getClickedIndex(e);\r\n clickedIndex = this.applyFilters('clickedIndex', clickedIndex, e, this);\r\n const dataSource = {\r\n gallery: /** @type {HTMLElement} */ (e.currentTarget)\r\n };\r\n\r\n if (clickedIndex >= 0) {\r\n e.preventDefault();\r\n this.loadAndOpen(clickedIndex, dataSource, initialPoint);\r\n }\r\n }\r\n\r\n /**\r\n * Get index of gallery item that was clicked.\r\n *\r\n * @param {MouseEvent} e click event\r\n */\r\n getClickedIndex(e) {\r\n // legacy option\r\n if (this.options.getClickedIndexFn) {\r\n return this.options.getClickedIndexFn.call(this, e);\r\n }\r\n\r\n const clickedTarget = /** @type {HTMLElement} */ (e.target);\r\n const childElements = getElementsFromOption(\r\n this.options.children,\r\n this.options.childSelector,\r\n /** @type {HTMLElement} */ (e.currentTarget)\r\n );\r\n const clickedChildIndex = childElements.findIndex(\r\n child => child === clickedTarget || child.contains(clickedTarget)\r\n );\r\n\r\n if (clickedChildIndex !== -1) {\r\n return clickedChildIndex;\r\n } else if (this.options.children || this.options.childSelector) {\r\n // click wasn't on a child element\r\n return -1;\r\n }\r\n\r\n // There is only one item (which is the gallery)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Load and open PhotoSwipe\r\n *\r\n * @param {number} index\r\n * @param {DataSource=} dataSource\r\n * @param {{ x?: number; y?: number }} [initialPoint]\r\n */\r\n loadAndOpen(index, dataSource, initialPoint) {\r\n // Check if the gallery is already open\r\n if (window.pswp) {\r\n return false;\r\n }\r\n\r\n // set initial index\r\n this.options.index = index;\r\n\r\n // define options for PhotoSwipe constructor\r\n this.options.initialPointerPos = initialPoint;\r\n\r\n this.shouldOpen = true;\r\n this.preload(index, dataSource);\r\n return true;\r\n }\r\n\r\n /**\r\n * Load the main module and the slide content by index\r\n *\r\n * @param {number} index\r\n * @param {DataSource=} dataSource\r\n */\r\n preload(index, dataSource) {\r\n const { options } = this;\r\n\r\n if (dataSource) {\r\n options.dataSource = dataSource;\r\n }\r\n\r\n // Add the main module\r\n /** @type {Promise>[]} */\r\n const promiseArray = [];\r\n\r\n const pswpModuleType = typeof options.pswpModule;\r\n if (isPswpClass(options.pswpModule)) {\r\n promiseArray.push(Promise.resolve(/** @type {Type} */ (options.pswpModule)));\r\n } else if (pswpModuleType === 'string') {\r\n throw new Error('pswpModule as string is no longer supported');\r\n } else if (pswpModuleType === 'function') {\r\n promiseArray.push(/** @type {() => Promise>} */ (options.pswpModule)());\r\n } else {\r\n throw new Error('pswpModule is not valid');\r\n }\r\n\r\n // Add custom-defined promise, if any\r\n if (typeof options.openPromise === 'function') {\r\n // allow developers to perform some task before opening\r\n promiseArray.push(options.openPromise());\r\n }\r\n\r\n if (options.preloadFirstSlide !== false && index >= 0) {\r\n this._preloadedContent = lazyLoadSlide(index, this);\r\n }\r\n\r\n // Wait till all promises resolve and open PhotoSwipe\r\n const uid = ++this._uid;\r\n Promise.all(promiseArray).then((iterableModules) => {\r\n if (this.shouldOpen) {\r\n const mainModule = iterableModules[0];\r\n this._openPhotoswipe(mainModule, uid);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * @param {Type | { default: Type }} module\r\n * @param {number} uid\r\n */\r\n _openPhotoswipe(module, uid) {\r\n // Cancel opening if UID doesn't match the current one\r\n // (if user clicked on another gallery item before current was loaded).\r\n //\r\n // Or if shouldOpen flag is set to false\r\n // (developer may modify it via public API)\r\n if (uid !== this._uid && this.shouldOpen) {\r\n return;\r\n }\r\n\r\n this.shouldOpen = false;\r\n\r\n // PhotoSwipe is already open\r\n if (window.pswp) {\r\n return;\r\n }\r\n\r\n /**\r\n * Pass data to PhotoSwipe and open init\r\n *\r\n * @type {PhotoSwipe}\r\n */\r\n const pswp = typeof module === 'object'\r\n ? new module.default(this.options) // eslint-disable-line\r\n : new module(this.options); // eslint-disable-line\r\n\r\n this.pswp = pswp;\r\n window.pswp = pswp;\r\n\r\n // map listeners from Lightbox to PhotoSwipe Core\r\n /** @type {(keyof PhotoSwipeEventsMap)[]} */\r\n (Object.keys(this._listeners)).forEach((name) => {\r\n this._listeners[name].forEach((fn) => {\r\n pswp.on(name, /** @type {EventCallback} */(fn));\r\n });\r\n });\r\n\r\n // same with filters\r\n /** @type {(keyof PhotoSwipeFiltersMap)[]} */\r\n (Object.keys(this._filters)).forEach((name) => {\r\n this._filters[name].forEach((filter) => {\r\n pswp.addFilter(name, filter.fn, filter.priority);\r\n });\r\n });\r\n\r\n if (this._preloadedContent) {\r\n pswp.contentLoader.addToCache(this._preloadedContent);\r\n this._preloadedContent = null;\r\n }\r\n\r\n pswp.on('destroy', () => {\r\n // clean up public variables\r\n this.pswp = null;\r\n window.pswp = null;\r\n });\r\n\r\n pswp.init();\r\n }\r\n\r\n /**\r\n * Unbinds all events, closes PhotoSwipe if it's open.\r\n */\r\n destroy() {\r\n if (this.pswp) {\r\n this.pswp.destroy();\r\n }\r\n\r\n this.shouldOpen = false;\r\n this._listeners = null;\r\n\r\n getElementsFromOption(this.options.gallery, this.options.gallerySelector)\r\n .forEach((galleryElement) => {\r\n galleryElement.removeEventListener('click', this.onThumbnailsClick, false);\r\n });\r\n }\r\n}\n\nexport { PhotoSwipeLightbox as default };\n//# sourceMappingURL=photoswipe-lightbox.esm.js.map\n","import React from 'react';\r\n\r\nconst AutoPlayInfoIcon = (props: React.SVGProps) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AutoPlayInfoIcon;\r\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { en, fr } from './i18n';\r\nimport AutoPlayInfoIcon from './AutoPlayInfoIcon';\r\nimport { useTranslation, Trans } from 'react-i18next';\r\nimport TooltipClose from '../common/TooltipCloseSvg';\r\n\r\nexport interface PdpVideoProps {\r\n //DomNode: string;\r\n VideoData: {\r\n slideElement: Element;\r\n videoFile: string;\r\n id: string;\r\n videoContainerID: string;\r\n };\r\n isAutoPlayEnabled: boolean;\r\n onAutoPlayChange: (e: React.ChangeEvent) => void;\r\n}\r\n\r\nconst PdpVideoItem = ({ VideoData, isAutoPlayEnabled, onAutoPlayChange }: PdpVideoProps) => {\r\n const { i18n, t } = useTranslation('pdp-video');\r\n i18n.addResourceBundle('en', 'pdp-video', en, true, true);\r\n i18n.addResourceBundle('fr', 'pdp-video', fr, true, true);\r\n const { slideElement, videoFile, id, videoContainerID } = VideoData;\r\n const [isVideoPlaying, setIsVideoPlaying] = useState(false);\r\n const [ampInstance, setAmpInstance] = useState(null);\r\n const [showAutoPlayTooltip, setShowAutoPlayTooltip] = useState(false);\r\n const prevAmp = useRef(null);\r\n const prevFile = useRef(null);\r\n\r\n useEffect(() => {\r\n const createAmp = async () => {\r\n const amp = await akamai.amp.AMP.create(videoContainerID + 'z', {\r\n autoplay: isAutoPlayEnabled && window.innerWidth > 768,\r\n background: '#000',\r\n autoplayPolicy: 'muted',\r\n temporalType: 'vod',\r\n media: {\r\n //poster: item.thumbnail,\r\n src: videoFile,\r\n type: 'video/mp4',\r\n },\r\n preload: 'auto',\r\n paths: {\r\n player: '/react/components/amp/',\r\n resources: '/react/components/amp/',\r\n plugins: '/react/components/amp/',\r\n },\r\n playsinline: true,\r\n });\r\n\r\n setIsVideoPlaying(true);\r\n setAmpInstance(amp);\r\n //disable gallery swipe detection on progress bar and play button\r\n const progressBar = document.querySelector('.amp-slide-in-out');\r\n const ampControls = document.querySelector('.amp-controls');\r\n const playButton = document.querySelector('.amp-pause-overlay');\r\n if (progressBar) progressBar.classList.add('swiper-no-swiping');\r\n if (playButton) playButton.classList.add('swiper-no-swiping');\r\n if (ampControls) ampControls.classList.add('swiper-no-swiping');\r\n //add analytics events\r\n let percentageComplete = [];\r\n amp.addEventListener(akamai.amp.Events.PLAY_REQUEST, (event) => {\r\n //console.log('VIDEO START');\r\n window._satellite && window._satellite.track('VideoStart');\r\n });\r\n amp.addEventListener(akamai.amp.Events.PLAY, (event) => {\r\n //console.log('VIDEO PLAY');\r\n window._satellite && window._satellite.track('Play');\r\n });\r\n amp.addEventListener(akamai.amp.Events.ENDED, (event) => {\r\n //console.log('VIDEO 100');\r\n window._satellite && window._satellite.track('Video100Percent');\r\n percentageComplete = [];\r\n });\r\n amp.addEventListener('autoplayblocked', (event) => {\r\n const mode = event.detail.mode;\r\n const threshold = event.detail.threshold;\r\n console.log(\"Attemted autoplay '\" + mode + \"', but the browser's threshold is '\" + threshold + \"'\");\r\n });\r\n amp.addEventListener(akamai.amp.Events.TIME_UPDATE, (event) => {\r\n const currentTime = Number(event.player.absoluteCurrentTime);\r\n const duration = Number(event.player.absoluteDuration);\r\n const percentViewed = Math.floor((currentTime / duration) * 100);\r\n switch (true) {\r\n case percentViewed == 0:\r\n percentageComplete = [];\r\n break;\r\n case percentViewed == 25:\r\n if (!(percentageComplete.indexOf('Video25Percent') > -1)) {\r\n //console.log('VIDEO: tracking 25% MILESTONE event');\r\n window._satellite && window._satellite.track('Video25Percent');\r\n percentageComplete.push('Video25Percent');\r\n }\r\n break;\r\n case percentViewed == 50:\r\n if (!(percentageComplete.indexOf('Video50Percent') > -1)) {\r\n //console.log('VIDEO: tracking 50% MILESTONE event');\r\n window._satellite && window._satellite.track('Video50Percent');\r\n percentageComplete.push('Video50Percent');\r\n }\r\n break;\r\n case percentViewed == 75:\r\n if (!(percentageComplete.indexOf('Video75Percent') > -1)) {\r\n //console.log('VIDEO: tracking 75% MILESTONE event');\r\n window._satellite && window._satellite.track('Video75Percent');\r\n percentageComplete.push('Video75Percent');\r\n }\r\n break;\r\n }\r\n });\r\n return amp;\r\n };\r\n\r\n const initVideo = async () => {\r\n let ampInst = null;\r\n if (videoContainerID != null) {\r\n ampInst = await createAmp();\r\n }\r\n if (prevAmp.current != null && prevFile.current != null) {\r\n //destory previous player instance\r\n prevAmp.current.destroy();\r\n }\r\n if (videoContainerID != null) {\r\n prevAmp.current = ampInst;\r\n prevFile.current = videoFile;\r\n } else {\r\n prevAmp.current = null;\r\n prevFile.current = null;\r\n }\r\n };\r\n initVideo();\r\n }, [videoContainerID, videoFile]);\r\n\r\n // useEffect(() => {\r\n // if (stopVideo && ampInstance && ampInstance.pause && typeof ampInstance.pause === 'function') {\r\n // ampInstance.pause();\r\n // }\r\n // }, [stopVideo, ampInstance]);\r\n // useEffect(() => {\r\n // if (\r\n // isAutoPlayEnabled &&\r\n // startVideo &&\r\n // ampInstance &&\r\n // ampInstance.play &&\r\n // typeof ampInstance.play === 'function'\r\n // ) {\r\n // ampInstance.play();\r\n // }\r\n // }, [isAutoPlayEnabled, startVideo, ampInstance]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (ampInstance) {\r\n ampInstance.destroy();\r\n }\r\n };\r\n }, []);\r\n\r\n if (videoContainerID == null) return null;\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n
\r\n {/*
{JSON.stringify(VideoData, null, 2)}
*/}\r\n
\r\n \r\n

{t('videoDesc')}

\r\n
\r\n \r\n \r\n {\r\n setShowAutoPlayTooltip(true);\r\n }}\r\n >\r\n \r\n \r\n {showAutoPlayTooltip && (\r\n
\r\n
\r\n \r\n {t('autoPlayDisclaimerText')}\r\n \r\n setShowAutoPlayTooltip(false)}\r\n className=\"video-item__auto-play__tooltip-content__close-button\"\r\n >\r\n {t('closeText')}\r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n ,\r\n slideElement.querySelector('#' + videoContainerID),\r\n );\r\n};\r\n\r\nexport default PdpVideoItem;\r\n","import Drift from 'drift-zoom';\r\nimport PhotoSwipeLightbox from 'photoswipe/lightbox';\r\nimport React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\r\nimport Swiper, { Navigation, Thumbs, A11y, Lazy } from 'swiper';\r\n\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport { IProduct } from './IProduct';\r\nimport EventBus from './PdpEventBus';\r\nimport PdpVideoItem from './PdpVideoItem';\r\n//import MobileGallery from './PdpMobileGallery';\r\n//import PhotoSwipe from 'photoswipe';\r\nimport 'photoswipe/style.css';\r\nexport interface PdpProps {\r\n productData: IProduct;\r\n}\r\nconst PdpGallery = ({ productData }: PdpProps) => {\r\n const [gotoSlide, setGotoSlide] = useState(null);\r\n const [slideIndex, setSlideIndex] = useState(0);\r\n const [videoData, setVideoData] = useState({\r\n slideNumber: null,\r\n slideElement: null,\r\n videoFile: null,\r\n id: null,\r\n videoContainerID: null,\r\n });\r\n const [swiperInstance, setSwiperInstance] = useState(null as Swiper);\r\n const swiperRef = useRef(null as Swiper);\r\n const swiperRefThumb = useRef(null as Swiper);\r\n const lightRoomRef = useRef(null);\r\n\r\n const [isAutoPlayEnabled, setIsAutoPlayEnabled] = useState(() => {\r\n const cookie = new Cookie();\r\n const autoPlayCookie = cookie.AutoPlayVideos;\r\n if (autoPlayCookie == undefined) {\r\n cookie.AutoPlayVideos = '1';\r\n return true;\r\n }\r\n return autoPlayCookie === '1';\r\n });\r\n const slidesListChildren = document.getElementById('swiper-wrapper').children;\r\n const slidesList = Array.from(slidesListChildren).map((x) => x.id);\r\n\r\n const [isZoomed, _setIsZoomed] = useState(false);\r\n const zoomRef = React.useRef(isZoomed);\r\n const setIsZoomed = (data) => {\r\n zoomRef.current = data;\r\n _setIsZoomed(data);\r\n };\r\n const edps = useMemo(() => {\r\n return !productData.Edps ? [] : productData.Edps;\r\n }, [productData.Edps]);\r\n\r\n const getDefaultEdpItem = useCallback(() => {\r\n return edps.find((edpItem) => edpItem.EdpNo === productData.DefaultEdp);\r\n }, [edps, productData.DefaultEdp]);\r\n const getDefaultIndexValue = () => {\r\n //const position = edps.findIndex((edpItem) => edpItem.EdpNo === productData.DefaultEdp);\r\n const defaultElement = document.querySelector('.defaultSlide') as HTMLElement;\r\n //console.log('initial:' + Number(defaultElement.dataset.index));\r\n //return Number(defaultElement.dataset.index);\r\n return 0;\r\n };\r\n\r\n const getIsAutoPlayEnabledFromCookie = () => {\r\n const cookie = new Cookie();\r\n const autoPlayCookie = cookie.AutoPlayVideos;\r\n if (autoPlayCookie == undefined) {\r\n cookie.AutoPlayVideos = '1';\r\n return true;\r\n }\r\n return autoPlayCookie === '1';\r\n };\r\n const findFirstVideoIndex = () => {\r\n if (productData.Videos.length > 0) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n };\r\n const onAutoPlayChange = (e: React.ChangeEvent) => {\r\n const isChecked = e.target.checked;\r\n setIsAutoPlayEnabled(isChecked);\r\n const cookie = new Cookie();\r\n cookie.AutoPlayVideos = isChecked ? '1' : '0';\r\n };\r\n const slideToCarouselByID = (dimensionValue) => {\r\n setGotoSlide(slidesList.indexOf('img-' + dimensionValue));\r\n };\r\n const isCurrentSlideVideo = () => {\r\n if (getCurrentSlideID().includes('vid-')) {\r\n return true;\r\n }\r\n };\r\n const isSlideImage = (index) => {\r\n const slideByIndex = swiperRef.current.slides[index].id;\r\n if (slideByIndex.includes('img-')) {\r\n return true;\r\n }\r\n };\r\n const getCurrentSlideID = () => {\r\n if (swiperRef.current) {\r\n return swiperRef.current.slides[swiperRef.current.activeIndex].id;\r\n }\r\n };\r\n const getCurrentData = () => {\r\n if (isCurrentSlideVideo()) {\r\n const slideElement = swiperRef.current.slides[swiperRef.current.activeIndex];\r\n return {\r\n slideNumber: swiperRef.current.activeIndex,\r\n slideElement: slideElement,\r\n videoFile: slideElement.getAttribute('data-video'),\r\n id: slideElement.id,\r\n videoContainerID: `video-container${slideElement.id.replace('vid-', '')}`,\r\n };\r\n } else {\r\n return {\r\n slideNumber: swiperRef.current.activeIndex,\r\n slideElement: null,\r\n videoFile: null,\r\n id: null,\r\n videoContainerID: null,\r\n };\r\n }\r\n };\r\n function scrollToSizeChart(e, element) {\r\n e.preventDefault();\r\n const target = element.getAttribute('data-href');\r\n const $trget = $(target);\r\n // Example: your header is 70px tall.\r\n const newTop = $trget.offset().top;\r\n $('html, body').animate(\r\n {\r\n scrollTop: newTop,\r\n },\r\n 500,\r\n 'swing',\r\n function () {\r\n window.location.hash = target;\r\n },\r\n );\r\n }\r\n\r\n useEffect(() => {\r\n const instance = initGallery();\r\n const handleGallerySlide = (data) => {\r\n slideToCarouselByID(data.dimensionId);\r\n };\r\n //setup event bus handler to look for msgs from PDP Description Area\r\n EventBus.on('gotoSlide', handleGallerySlide);\r\n return () => {\r\n EventBus.remove('gotoSlide', handleGallerySlide);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (swiperRef.current && gotoSlide != null) {\r\n swiperRef.current.slideTo(gotoSlide, 0);\r\n swiperRefThumb.current.slideTo(gotoSlide, 200, false);\r\n }\r\n }, [gotoSlide]);\r\n\r\n const isMobileDevice = () => {\r\n return window.innerWidth < 992;\r\n };\r\n\r\n const mountZoom = (swiperGallery) => {\r\n const paneContainer = document.querySelector('#pdp__gallery');\r\n const assets = swiperGallery.el.querySelectorAll('.gallery__image--aspect-ratio');\r\n const images = Array.from(assets as NodeList);\r\n const driftSettings = {\r\n paneContainer: true,\r\n containInline: true,\r\n inlinePane: true,\r\n boundingBoxContainer: paneContainer,\r\n inlineContainer: paneContainer,\r\n zoomFactor: 3,\r\n onHide() {\r\n document.getElementById('pdp__gallery').classList.remove('zoom');\r\n },\r\n };\r\n images.forEach((imageContainer) => {\r\n if (!isMobileDevice()) {\r\n new Drift(imageContainer, driftSettings);\r\n const galleryLinks = document.querySelectorAll('a.gallery__image--aspect-ratio-wrap');\r\n galleryLinks.forEach(function (link) {\r\n link.addEventListener(\r\n 'click',\r\n (e) => {\r\n //e.stopPropagation();\r\n e.preventDefault();\r\n return false;\r\n },\r\n true,\r\n );\r\n });\r\n }\r\n imageContainer.addEventListener('mouseleave', () => {\r\n zoomRef.current = false;\r\n document.getElementById('pdp__gallery').classList.remove('zoom');\r\n });\r\n });\r\n\r\n //if mobile\r\n if (isMobileDevice()) {\r\n //const lightbox = MobileGallery();\r\n const photo_swipe_options = {\r\n gallery: '#pdp__gallery .drift-zoom-container',\r\n pswpModule: () => import(/* webpackChunkName: \"photoswipe\" */ 'photoswipe'),\r\n loop: false,\r\n zoom: true,\r\n arrowKeys: true,\r\n bgOpacity: 0.3,\r\n wheelToZoom: true,\r\n initialZoomLevel: 2,\r\n secondaryZoomLevel: 2,\r\n maxZoomLevel: 2,\r\n getViewportSizeFn: function (options, pswp) {\r\n return {\r\n x:\r\n document.documentElement.clientWidth >= 768 && document.documentElement.clientWidth <= 992\r\n ? document.documentElement.clientWidth - document.documentElement.clientWidth * 0.1\r\n : document.documentElement.clientWidth,\r\n y:\r\n document.documentElement.clientWidth >= 768 && document.documentElement.clientWidth <= 992\r\n ? document.documentElement.clientHeight - document.documentElement.clientHeight * 0.1\r\n : document.documentElement.clientHeight,\r\n };\r\n },\r\n tapAction: 'zoom-or-close',\r\n };\r\n //@ts-ignore\r\n lightRoomRef.current = new PhotoSwipeLightbox(photo_swipe_options);\r\n lightRoomRef.current.on('close', () => {\r\n swiperGallery.allowTouchMove = true;\r\n });\r\n let firstElWithBadge;\r\n let lastElWithBadge;\r\n\r\n // Gallery is starting to open\r\n lightRoomRef.current.on('afterInit', () => {\r\n firstElWithBadge = lightRoomRef.current.pswp.currSlide.data.element;\r\n hideBadge(firstElWithBadge);\r\n });\r\n\r\n // Gallery is starting to close\r\n lightRoomRef.current.on('close', () => {\r\n lastElWithBadge = lightRoomRef.current.pswp.currSlide.data.element;\r\n if (lastElWithBadge !== firstElWithBadge) {\r\n showBadge(firstElWithBadge);\r\n hideBadge(lastElWithBadge);\r\n }\r\n });\r\n\r\n // Gallery is closed\r\n lightRoomRef.current.on('destroy', () => {\r\n showBadge(lastElWithBadge);\r\n });\r\n\r\n lightRoomRef.current.init();\r\n }\r\n function hideBadge(el) {\r\n el.querySelector('.badge').classList.add('badge--hidden');\r\n }\r\n function showBadge(el) {\r\n el.querySelector('.badge').classList.remove('badge--hidden');\r\n }\r\n };\r\n\r\n const initGallery = () => {\r\n const carouselThumbnails = document.getElementById('pdp__galleryThumb');\r\n const carousel = document.getElementById('pdp__gallery');\r\n const TotalNumberOfSlides = $('#thumbGallery').find('.swiper-wrapper').length;\r\n const slidesListChildren = document.getElementById('thumbGallery').children;\r\n const slidesList = Array.from(slidesListChildren).map((x) => x.id);\r\n\r\n Array.from(document.querySelectorAll('.pdpHide')).forEach(function (el) {\r\n el.classList.remove('pdpHide');\r\n });\r\n\r\n const swiperThumbnails = new Swiper(carouselThumbnails, {\r\n modules: [Navigation, Thumbs, A11y, Lazy],\r\n loop: false,\r\n slidesPerView: 'auto',\r\n //slidesPerGroup: 3,\r\n initialSlide: getDefaultIndexValue(),\r\n threshold: 2,\r\n preloadImages: false,\r\n lazy: {\r\n loadPrevNext: true,\r\n loadPrevNextAmount: 5,\r\n loadOnTransitionStart: true,\r\n preloaderClass: 'gallery__preloader',\r\n },\r\n // slidesOffsetAfter: 25,\r\n // slidesOffsetBefore: 25,\r\n //navigation: false,\r\n watchSlidesProgress: true,\r\n watchOverflow: true,\r\n navigation: {\r\n nextEl: '.gallery-button-next',\r\n prevEl: '.gallery-button-prev',\r\n },\r\n // centeredSlides: true,\r\n // centeredSlidesBounds: true,\r\n breakpoints: {\r\n // when window width is >= 460\r\n 460: {\r\n //slidesPerGroup: 4,\r\n spaceBetween: 0,\r\n },\r\n // when window width is >= 580\r\n 580: {\r\n //slidesPerGroup: 5,\r\n spaceBetween: 0,\r\n },\r\n // when window width is >= 768\r\n 768: {\r\n //slidesPerGroup: 3,\r\n spaceBetween: 0,\r\n },\r\n 940: {\r\n //slidesPerGroup: 4,\r\n spaceBetween: 0,\r\n },\r\n // when window width is >= 1024\r\n 1024: {\r\n //slidesPerGroup: 5,\r\n spaceBetween: 0,\r\n },\r\n },\r\n });\r\n const swiperGallery = new Swiper(carousel, {\r\n modules: [Navigation, Thumbs, A11y, Lazy],\r\n init: false,\r\n //zoom: window.innerWidth < 768 ? true : true,\r\n //zoom: false,\r\n freeMode: false,\r\n watchOverflow: true,\r\n lazy: {\r\n loadPrevNext: true,\r\n loadPrevNextAmount: 2,\r\n loadOnTransitionStart: true,\r\n preloaderClass: 'gallery__preloader',\r\n },\r\n preloadImages: false,\r\n threshold: 2,\r\n loop: false,\r\n slidesPerView: 1,\r\n initialSlide: getDefaultIndexValue(),\r\n spaceBetween: 25,\r\n navigation: false,\r\n watchSlidesProgress: true,\r\n a11y: { enabled: true },\r\n thumbs: {\r\n swiper: swiperThumbnails,\r\n },\r\n });\r\n swiperRef.current = swiperGallery;\r\n swiperRefThumb.current = swiperThumbnails;\r\n setSwiperInstance(swiperGallery);\r\n\r\n //setup event handlers\r\n // swiperGallery.on('init', function () {\r\n // console.log('init' + this.activeIndex + this.realIndex);\r\n // });\r\n // //swiper.init()\r\n // swiperGallery.on('afterInit', function () {\r\n // console.log('afterInit' + this.activeIndex + this.realIndex);\r\n // });\r\n // swiperGallery.on('activeIndexChange', function () {\r\n // console.log('activeIndexChange' + this.activeIndex + this.realIndex);\r\n // });\r\n // swiperGallery.on('realIndexChange', function () {\r\n // console.log('realIndexChange' + this.activeIndex + this.realIndex);\r\n // });\r\n swiperGallery.on('slideChange', function () {\r\n const prevIndex = slideIndex;\r\n setSlideIndex(this.realIndex);\r\n setVideoData(getCurrentData());\r\n let currentSlideID = '';\r\n let currentSlideStyle = '';\r\n currentSlideID = this.slides[this.activeIndex].id;\r\n if (currentSlideID.includes('img-')) {\r\n currentSlideStyle = currentSlideID.replace('img-', '');\r\n //send event so Description area will update\r\n EventBus.dispatch('gotoStyle', { dimensionId: currentSlideStyle });\r\n }\r\n });\r\n swiperThumbnails.on('slideChange', function () {\r\n //swiperGallery.slideTo(swiperThumbnails.realIndex);\r\n });\r\n swiperGallery.on('afterInit', function () {\r\n const isAutoPlayEnabledFromCookie = getIsAutoPlayEnabledFromCookie();\r\n if (isAutoPlayEnabledFromCookie && window.innerWidth > 768) {\r\n const firstVideoIndex = findFirstVideoIndex();\r\n if (firstVideoIndex !== -1) {\r\n //swiperRef.current.slideTo(1, 0);\r\n swiperRef.current.slideTo(1, 1, false);\r\n swiperRef.current.slidePrev(1, false);\r\n swiperRefThumb.current.slideTo(1, 1, false);\r\n swiperRefThumb.current.slidePrev(1, false);\r\n //swiperRef.current.slidePrev(0, false);\r\n setSlideIndex(firstVideoIndex);\r\n } else {\r\n // go to slide with defaultEDP\r\n //get style ID of default EDP\r\n if (productData.Styles.length > 0) {\r\n slideToCarouselByID(getDefaultEdpItem().StyleDimensionId);\r\n } else {\r\n swiperRef.current.slideTo(1, 1, false);\r\n swiperRef.current.slidePrev(1, false);\r\n swiperRefThumb.current.slideTo(1, 1, false);\r\n swiperRefThumb.current.slidePrev(1, false);\r\n setSlideIndex(0);\r\n }\r\n }\r\n } else {\r\n if (productData.Styles.length > 0) {\r\n slideToCarouselByID(getDefaultEdpItem().StyleDimensionId);\r\n } else {\r\n swiperRef.current.slideTo(0 + productData.Videos.length, 0);\r\n swiperRefThumb.current.slideTo(0 + productData.Videos.length, 0);\r\n setSlideIndex(0 + productData.Videos.length);\r\n }\r\n }\r\n });\r\n swiperGallery.init();\r\n if (slidesListChildren.length <= 2) {\r\n swiperGallery.allowSlidePrev = false;\r\n swiperGallery.allowSlideNext = false;\r\n //swiperGallery.disable();\r\n const thumbGallery = document.getElementById('thumbGallery');\r\n if (thumbGallery) {\r\n thumbGallery.classList.add('hidden');\r\n }\r\n }\r\n //go to default slide (video or image depending on autoplay cookie value)\r\n\r\n //arrow event listener\r\n const thumbArrowPrev = document.querySelectorAll('.gallery-button-prev');\r\n thumbArrowPrev[0].addEventListener(\r\n 'click',\r\n (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n swiperRef.current.slidePrev();\r\n // swiperRefThumb.current.slidePrev();\r\n },\r\n true,\r\n );\r\n\r\n const thumbArrowNext = document.querySelectorAll('.gallery-button-next');\r\n thumbArrowNext[0].addEventListener(\r\n 'click',\r\n (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n swiperRef.current.slideNext();\r\n //swiperRefThumb.current.slideNext();\r\n },\r\n true,\r\n );\r\n\r\n //mount zoom feature\r\n mountZoom(swiperGallery);\r\n\r\n // //prevent click on anchor tags\r\n // const galleryLinks = document.querySelectorAll('a.gallery__image--aspect-ratio-wrap');\r\n // galleryLinks.forEach(function (link) {\r\n // link.addEventListener(\r\n // 'click',\r\n // (e) => {\r\n // //e.stopPropagation();\r\n // e.preventDefault();\r\n // return false;\r\n // },\r\n // true,\r\n // );\r\n // });\r\n swiperGallery.on('click', (e) => {\r\n if (!zoomRef.current) {\r\n zoomRef.current = true;\r\n document.getElementById('pdp__gallery').classList.add('zoom');\r\n swiperGallery.allowTouchMove = false;\r\n } else {\r\n zoomRef.current = false;\r\n document.getElementById('pdp__gallery').classList.remove('zoom');\r\n swiperGallery.allowTouchMove = true;\r\n }\r\n });\r\n\r\n return swiperGallery;\r\n };\r\n\r\n return (\r\n <>\r\n {/* {slideIndex} {swiperRef?.current?.realIndex} */}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default PdpGallery;\r\n","function addReadMore(element) {\r\n if (element) {\r\n const previewHeight = 300;\r\n if (element.scrollHeight > previewHeight) {\r\n if (!element) {\r\n //if there is no text to collapse, abort the accordion script\r\n return false;\r\n }\r\n const realHeight = element.scrollHeight;\r\n element.setAttribute('data-height', realHeight + 'px');\r\n element.style.height = previewHeight + 'px';\r\n\r\n // Creating a fade div element\r\n const divElement = document.createElement('Div');\r\n divElement.classList.add('titleTextFadeDiv');\r\n element.appendChild(divElement);\r\n\r\n // Create button\r\n const buttonElement = document.createElement('Button');\r\n buttonElement.className = 'readMoreButton';\r\n //buttonElement.className = 'more';\r\n buttonElement.innerHTML = 'Read More';\r\n element.appendChild(buttonElement);\r\n\r\n // Add Click handler\r\n buttonElement.onclick = function () {\r\n //if open, then collapse\r\n if (element.classList.contains('seo-collapse')) {\r\n element.classList.remove('seo-collapse');\r\n element.style.height = previewHeight + 'px';\r\n buttonElement.innerHTML = 'Read More';\r\n buttonElement.classList.remove('readLessButton');\r\n return false;\r\n }\r\n //if collapsed, then open\r\n element.classList.remove('seo-collapse');\r\n element.style.height = previewHeight + 'px';\r\n element.classList.add('seo-collapse');\r\n element.style.height = 'auto';\r\n buttonElement.innerHTML = 'Read Less';\r\n buttonElement.classList.add('readLessButton');\r\n return false;\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport default addReadMore;\r\n","import lozad from 'lozad';\r\n\r\nimport http from '@/tscapi/service/httpservice';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport addReadMore from './PdpReadMore.script';\r\n\r\nconst pdpDetailAccordionBootstrap = async () => {\r\n const headings = document.querySelectorAll('.field-wrapper');\r\n headings.forEach((heading) => {\r\n if (heading) {\r\n heading\r\n .querySelector('.field-wrapper__accordion-heading')\r\n ?.addEventListener('click', async () => {\r\n const items = heading.querySelector(':scope > .field-wrapper__content-wrapper');\r\n const iconDiv = heading.querySelector('.field-wrapper__accordion-heading__icon');\r\n const link = heading.querySelector('.field-wrapper__accordion-heading__text');\r\n\r\n if (items && iconDiv) {\r\n if (items.classList.contains('AccordionHidden')) {\r\n link.classList.add('open');\r\n iconDiv.classList.remove('field-wrapper__accordion-heading__icon--plus-icon');\r\n iconDiv.classList.add('field-wrapper__accordion-heading__icon--minus-icon');\r\n items.classList.remove('AccordionHidden');\r\n } else {\r\n link.classList.remove('open');\r\n iconDiv.classList.add('field-wrapper__accordion-heading__icon--plus-icon');\r\n iconDiv.classList.remove('field-wrapper__accordion-heading__icon--minus-icon');\r\n items.classList.add('AccordionHidden');\r\n }\r\n }\r\n });\r\n }\r\n });\r\n};\r\n\r\npdpDetailAccordionBootstrap();\r\nconst observer = lozad('.lazyLoadDetails', {\r\n load: function (el) {\r\n const headings = document.querySelectorAll('.field-wrapper');\r\n headings.forEach((heading) => {\r\n if (heading) {\r\n const itemIndex = parseInt(heading.dataset.index);\r\n const itemNumber = heading.dataset.itemnumber;\r\n const fetchSectionData = async () => {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n 'cache-control': 'no-cache',\r\n currentdatetime: new Cookie().CurrentDate,\r\n };\r\n const base = '/api/v3/';\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const infoTabUrl = `${base}${lang}/products/${itemNumber}/sections/${itemIndex}`;\r\n if (itemIndex == 0) {\r\n //add read more button to product overview accordion\r\n const overviewTarget = document.getElementById('contentTab' + itemIndex);\r\n addReadMore(overviewTarget);\r\n }\r\n if (itemIndex > 0) {\r\n try {\r\n const tabData = await http.get(infoTabUrl, {\r\n headers: headers,\r\n transformRequest: (data, headers) => {\r\n delete headers.Authorization;\r\n return data;\r\n },\r\n });\r\n //@ts-ignore\r\n const content =\r\n tabData.data.Contents[0].Content != null ? tabData.data.Contents[0].Content : '';\r\n const target = document.getElementById('contentTab' + itemIndex);\r\n if (target && content) {\r\n heading.dataset.loaded = 'true';\r\n target.insertAdjacentHTML('beforeend', content);\r\n //add readmore script\r\n setTimeout(() => {\r\n addReadMore(target);\r\n }, 500);\r\n }\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n };\r\n fetchSectionData();\r\n }\r\n });\r\n },\r\n});\r\nobserver.observe();\r\n","import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';\r\nimport { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query';\r\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools';\r\nimport { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';\r\nimport React from 'react';\r\n\r\nimport GeneralCarousel from '../general_carousel/GeneralCarousel';\r\n\r\nimport { IProduct } from './IProduct';\r\nimport PdpDescriptionArea from './PdpDescription';\r\nimport PdpGallery from './PdpGallery';\r\n\r\nimport '../pdp_details/PdpDetailAccordion.script';\r\n\r\nexport interface PdpProps {\r\n productData: IProduct;\r\n}\r\n\r\nconst Pdp = ({ productData }: PdpProps) => {\r\n const client = new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n cacheTime: 1000 * 60 * 60 * 24, // 24 hours\r\n staleTime: 1000 * 5,\r\n },\r\n },\r\n });\r\n const persister = createSyncStoragePersister({\r\n storage: window.localStorage,\r\n });\r\n return (\r\n <>\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Pdp;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom/client';\r\n\r\nimport { IProduct } from './IProduct';\r\n//import mockdata from './mockdata';\r\nimport Pdp from './pdp';\r\n//import mockData from './Pdp.mock';\r\n\r\nconst id = 'product-details-page';\r\nconst productDataID = 'productData';\r\nconst element = document.getElementById(id);\r\nconst productDataElement = document.getElementById(productDataID);\r\nconst data = JSON.parse(productDataElement.dataset.value) as IProduct;\r\nconst root = ReactDOM.createRoot(element);\r\n\r\nif (element) {\r\n root.render();\r\n}\r\n","import axios from 'axios';\r\n\r\nimport { digestMessage, generateRandomId, getBaseUrl } from '@/components/tracking_third_party/utils/fbcap.utils';\r\nimport { TmCart } from '@/tscapi/model/cart';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\ndeclare global {\r\n interface Window {\r\n ttq: any;\r\n fbq: any;\r\n _fbq: any;\r\n }\r\n}\r\n\r\ntype FbPixelObject = {\r\n content_ids: string[];\r\n content_type: string;\r\n currency: string;\r\n content_name?: string;\r\n value: number;\r\n contents: { id: string; quantity: number; item_price: number; delivery_category: string }[];\r\n test_event_code?: string;\r\n user_data?: {\r\n em?: string;\r\n ph?: string;\r\n fn?: string;\r\n ln?: string;\r\n client_ip_address?: string;\r\n client_user_agent?: string;\r\n };\r\n};\r\n\r\ntype CapiObject = {\r\n test_event_code?: string;\r\n data: {\r\n event_name: string;\r\n event_time: number;\r\n event_id: string;\r\n action_source: string;\r\n event_source_url: string;\r\n user_data?: {\r\n em?: string;\r\n ph?: string;\r\n fn?: string;\r\n ln?: string;\r\n client_ip_address?: string;\r\n client_user_agent?: string;\r\n ct?: string[]; //city\r\n };\r\n custom_data?: {\r\n content_ids: string[];\r\n content_type: string;\r\n content_name?: string;\r\n currency: string;\r\n value: number;\r\n contents: { id: string; quantity: number; item_price: number; delivery_category: string }[];\r\n };\r\n }[];\r\n};\r\ntype EventData = {\r\n cart: TmCart;\r\n edpNo: number;\r\n eventId: string;\r\n quantity: number;\r\n};\r\n\r\ndocument.addEventListener(\r\n 'addBagEvent',\r\n function (e: CustomEvent) {\r\n // console.log('Event: FB add-to-cart');\r\n fbAddToCartEvent(e?.detail);\r\n },\r\n false,\r\n);\r\n\r\nasync function fbAddToCartEvent(eventDetails: EventData) {\r\n // if there is no edpNo then this event triggered\r\n // from removing an item in the slideout cart so we return early\r\n if (!eventDetails.edpNo) return;\r\n\r\n const currentHostname = window.location.hostname;\r\n const url = getBaseUrl(currentHostname);\r\n // console.log('Event: FB add-to-cart', eventDetails);\r\n const randomEventNumber = generateRandomId(15);\r\n const fbObject = await generateFacebookObject(eventDetails, randomEventNumber);\r\n const fbPixelObject = await generateFacebookPixelObject(eventDetails);\r\n\r\n const axiosInstance = axios.create({\r\n baseURL: url,\r\n withCredentials: true,\r\n headers: {\r\n Authorization: 'Basic 567e407f-4bc5-463e-9c28-3ac2a2b333ec',\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // server event\r\n if (window.tscConfig?.CapiEnabled == 'true') {\r\n try {\r\n await axiosInstance.post('/tracking/v1/events/', fbObject);\r\n } catch (error) {\r\n console.log('Error sending FB conversion event:', error?.response?.data || error.message);\r\n }\r\n }\r\n\r\n // pixel event\r\n try {\r\n window.fbq('track', 'AddToCart', fbPixelObject, { eventID: randomEventNumber, event_name: 'AddToCart' });\r\n } catch (e) {\r\n console.log('Error sending FB pixel conversion event');\r\n }\r\n}\r\n\r\nasync function generateFacebookObject(eventData: EventData, randomEventNumber) {\r\n const cookie = new Cookie();\r\n const userAgent = window.navigator.userAgent || '';\r\n const cartLine = eventData.cart.CartLines.find((cartLine) => cartLine.CartLineItem.EdpNo === eventData.edpNo);\r\n const fbCapiObject: CapiObject = {\r\n data: [\r\n {\r\n event_name: 'AddToCart',\r\n event_id: randomEventNumber,\r\n event_time: Math.floor(Date.now() / 1000),\r\n action_source: 'website',\r\n event_source_url: window.location.href,\r\n user_data: {},\r\n custom_data: {\r\n content_ids: cartLine ? [cartLine.CartLineItem.ItemNo] : [],\r\n content_type: 'product_group',\r\n currency: 'CAD',\r\n content_name: eventData.cart.Products.find(\r\n (product) => product.ItemNo === cartLine?.CartLineItem.ItemNo,\r\n ).Name,\r\n value: cartLine.InCart.PriceUnit, // eventData.cart.OrderSummary.GrandTotalAmount.toString(), //.MerchandiseSubTotal ?\r\n contents: cartLine\r\n ? [\r\n {\r\n id: cartLine.CartLineItem.ItemNo,\r\n item_price: cartLine.InCart.PriceUnit,\r\n delivery_category: 'home_delivery',\r\n quantity: eventData.quantity,\r\n },\r\n ]\r\n : [],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n //add test code if exits\r\n if (window.tscConfig?.CapiTestCode) {\r\n fbCapiObject.test_event_code = window.tscConfig.CapiTestCode;\r\n }\r\n //add client ip and useragent\r\n if (cookie.TscClientIP) {\r\n fbCapiObject.data[0].user_data.client_ip_address = cookie.TscClientIP;\r\n }\r\n if (userAgent) {\r\n fbCapiObject.data[0].user_data.client_user_agent = userAgent;\r\n }\r\n\r\n // If user is signed in, add user data\r\n if (cookie.UserAccessToken?.Token?.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n if (cookie.UserEmail) {\r\n fbCapiObject.data[0].user_data.em = await digestMessage(cookie.UserEmail.toLowerCase());\r\n }\r\n if (cookie.UserName) {\r\n fbCapiObject.data[0].user_data.fn = await digestMessage(cookie.UserName.toLowerCase());\r\n }\r\n if (cookie.LastName) {\r\n fbCapiObject.data[0].user_data.ln = await digestMessage(cookie.LastName.toLowerCase());\r\n }\r\n }\r\n\r\n return [{ eventConsumer: 'meta', eventData: { ...fbCapiObject } }];\r\n}\r\n\r\nasync function generateFacebookPixelObject(eventData: EventData) {\r\n const cookie = new Cookie();\r\n const cartLine = eventData.cart.CartLines.find((cartLine) => cartLine.CartLineItem.EdpNo === eventData.edpNo);\r\n const fbPixelObject: FbPixelObject = {\r\n content_ids: cartLine ? [cartLine.CartLineItem.ItemNo] : [],\r\n content_type: 'product_group',\r\n currency: 'CAD',\r\n user_data: {},\r\n content_name: eventData.cart.Products.find((product) => product.ItemNo === cartLine?.CartLineItem.ItemNo).Name,\r\n value: cartLine.InCart.PriceUnit, //eventData.cart.OrderSummary.GrandTotalAmount.toString(), //.MerchandiseSubTotal ?\r\n contents: cartLine\r\n ? [\r\n {\r\n id: cartLine.CartLineItem.ItemNo,\r\n item_price: cartLine.InCart.PriceUnit,\r\n delivery_category: 'home_delivery',\r\n quantity: eventData.quantity,\r\n },\r\n ]\r\n : [],\r\n };\r\n //add test code if exits\r\n if (window.tscConfig?.CapiTestCode) {\r\n fbPixelObject.test_event_code = window.tscConfig.CapiTestCode;\r\n }\r\n // If user is signed in, add user data\r\n if (cookie.UserAccessToken?.Token?.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n if (cookie.UserEmail) {\r\n fbPixelObject.user_data.em = await digestMessage(cookie.UserEmail.toLowerCase());\r\n }\r\n if (cookie.UserName) {\r\n fbPixelObject.user_data.fn = await digestMessage(cookie.UserName.toLowerCase());\r\n }\r\n if (cookie.LastName) {\r\n fbPixelObject.user_data.ln = await digestMessage(cookie.LastName.toLowerCase());\r\n }\r\n }\r\n\r\n return fbPixelObject;\r\n}\r\n","import axios from 'axios';\r\n\r\nimport {\r\n digestMessage,\r\n generateRandomId,\r\n getBaseUrl,\r\n getCookie,\r\n} from '@/components/tracking_third_party/utils/fbcap.utils';\r\nimport { TmCart } from '@/tscapi/model/cart';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\ndeclare global {\r\n interface Window {\r\n ttq: any;\r\n fbq: any;\r\n _fbq: any;\r\n }\r\n}\r\n\r\ntype TiktokObject = {\r\n event_source: string;\r\n event_source_id: string; //pixel_code\r\n test_event_code?: string;\r\n data: {\r\n event: string;\r\n event_time: string;\r\n event_id: string; //orderId\r\n properties: {\r\n order_id?: string;\r\n content_type: string;\r\n contents: {\r\n price: number;\r\n quantity: number;\r\n content_id: string;\r\n content_category?: string;\r\n content_name: string;\r\n brand: string;\r\n }[];\r\n currency: string;\r\n value: number; //total value of the order\r\n description?: string;\r\n event_id?: string;\r\n };\r\n user: {\r\n ttclid: string; //hashed click id\r\n email?: string; //hashed email\r\n phone?: string;\r\n external_id?: string; //edpno\r\n ttp: string; // _ttp cookie\r\n ip: string;\r\n user_agent: string;\r\n locale: string;\r\n };\r\n page: {\r\n url: string;\r\n referrer: string;\r\n };\r\n }[];\r\n};\r\n\r\ntype EventData = {\r\n cart: TmCart;\r\n edpNo: number;\r\n eventId: string;\r\n quantity: number;\r\n};\r\n\r\ndocument.addEventListener(\r\n 'addBagEvent',\r\n function (e: CustomEvent) {\r\n ttAddToCartEvent(e?.detail);\r\n },\r\n false,\r\n);\r\n\r\nasync function ttAddToCartEvent(eventDetails: EventData) {\r\n // if there is no edpNo then this event triggered\r\n // from removing an item in the slideout cart so we return early\r\n if (!eventDetails.edpNo) return;\r\n\r\n const currentHostname = window.location.hostname;\r\n const url = getBaseUrl(currentHostname);\r\n const randomEventNumber = generateRandomId(15);\r\n const ttObject = await generateTiktokObject(eventDetails, randomEventNumber);\r\n\r\n const axiosInstance = axios.create({\r\n baseURL: url,\r\n withCredentials: true,\r\n headers: {\r\n Authorization: 'Basic 567e407f-4bc5-463e-9c28-3ac2a2b333ec',\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // server event\r\n if (window.tscConfig?.CapiEnabled == 'true') {\r\n try {\r\n await axiosInstance.post('/tracking/v1/events/', ttObject);\r\n } catch (error) {\r\n console.log('Error sending TT addtocart server event:', error?.response?.data || error.message);\r\n }\r\n }\r\n\r\n // pixel event\r\n try {\r\n window.ttq.track('AddToCart', ttObject[0].eventData.data[0].properties, {\r\n event_id: randomEventNumber,\r\n });\r\n } catch (e) {\r\n console.log('Error sending TT addtocart pixel event');\r\n }\r\n}\r\n\r\nasync function generateTiktokObject(eventData: EventData, randomEventNumber) {\r\n const ttclid = getCookie('ttclid'); // TikTok Click ID\r\n const ttp = getCookie('_ttp'); //Cookie i\r\n const cookie = new Cookie();\r\n const cartLine = eventData.cart.CartLines.find((cartLine) => cartLine.CartLineItem.EdpNo === eventData.edpNo);\r\n const tiktokObject: TiktokObject = {\r\n event_source: 'web',\r\n event_source_id: 'C8AKQ23G5HF9JD2HK3O0', //tt pixel code\r\n data: [\r\n {\r\n event: 'AddToCart',\r\n event_id: randomEventNumber,\r\n event_time: Math.floor(Date.now() / 1000).toString(),\r\n properties: {\r\n content_type: 'product_group',\r\n contents: cartLine\r\n ? [\r\n {\r\n content_id: cartLine.CartLineItem.ItemNo,\r\n price: cartLine.InCart.PriceUnit,\r\n quantity: eventData.quantity,\r\n content_category:\r\n eventData.cart.Products.find(\r\n (product) => product.ItemNo == cartLine.CartLineItem.ItemNo,\r\n ).ProductTypes[0] ?? '',\r\n content_name: eventData.cart.Products.find(\r\n (product) => product.ItemNo === cartLine?.CartLineItem.ItemNo,\r\n ).Name,\r\n brand: eventData.cart.Products.find(\r\n (product) => product.ItemNo === cartLine?.CartLineItem.ItemNo,\r\n ).Brand,\r\n },\r\n ]\r\n : [],\r\n\r\n currency: 'CAD',\r\n value: eventData.cart.OrderSummary.GrandTotalAmount,\r\n },\r\n user: {\r\n ttclid: ttclid ?? '',\r\n // external_id: await digestMessage(eventData.cart.Buyer.CustomerNo.toString()),\r\n ttp: ttp,\r\n ip: cookie?.TscClientIP ?? '',\r\n user_agent: window.navigator.userAgent || '',\r\n locale: cookie?.Language.replace('_', '-'), // Modified BCP 47 language identifier\r\n },\r\n page: {\r\n url: window.location.href,\r\n referrer: window.location.host,\r\n },\r\n },\r\n ],\r\n };\r\n // If user is signed in, add user data\r\n if (cookie.UserAccessToken?.Token?.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n if (cookie.UserEmail) {\r\n tiktokObject.data[0].user.email = await digestMessage(cookie.UserEmail.toLowerCase());\r\n }\r\n if (eventData?.cart?.Buyer?.BillingAddress?.DayPhone) {\r\n tiktokObject.data[0].user.phone = await digestMessage(\r\n eventData?.cart?.Buyer?.BillingAddress?.DayPhone.toLowerCase(),\r\n );\r\n }\r\n if (eventData?.cart?.Buyer?.CustomerNo.toString()) {\r\n tiktokObject.data[0].user.external_id = await digestMessage(eventData.cart.Buyer.CustomerNo.toString());\r\n }\r\n }\r\n //add test code if exits\r\n if (window.tscConfig?.TiktokTestCode) {\r\n tiktokObject.test_event_code = window.tscConfig.TiktokTestCode;\r\n }\r\n\r\n return [{ eventConsumer: 'tiktok', eventData: { ...tiktokObject } }];\r\n}\r\n","/* eslint-disable prefer-rest-params */\r\n/* eslint-disable prefer-spread */\r\n/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n/* eslint-disable @typescript-eslint/ban-types */\r\nimport axios from 'axios';\r\n\r\nimport { digestMessage, generateRandomId, getBaseUrl } from '@/components/tracking_third_party/utils/fbcap.utils';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport { IProduct, IProductEdp } from '../pdp/IProduct';\r\n\r\nconst randomEventId = generateRandomId(15);\r\n\r\ntype capiData = {\r\n event_name?: string;\r\n event_id?: string;\r\n event_time?: number;\r\n user_data?: {\r\n client_ip_address?: string;\r\n client_user_agent?: string;\r\n em?: string;\r\n ph?: string;\r\n fn?: string;\r\n ln?: string;\r\n ct?: string;\r\n st?: string;\r\n zip?: string;\r\n };\r\n custom_data?: {\r\n content_ids?: string[];\r\n content_type?: string;\r\n content_name?: string;\r\n currency?: string;\r\n value?: number;\r\n content_category?: string;\r\n };\r\n action_source?: string;\r\n event_source_url?: string;\r\n};\r\ntype capiObject = {\r\n eventConsumer: string;\r\n eventData: {\r\n data: [capiData];\r\n test_event_code?: string;\r\n };\r\n};\r\ntype FacebookPixelObject = {\r\n test_event_code?: string;\r\n content_ids?: string[];\r\n value?: number;\r\n currency?: string;\r\n content_type?: string;\r\n content_name?: string;\r\n content_category?: string;\r\n};\r\ntype EventData = {\r\n productData: IProduct;\r\n selectedEdp: IProductEdp;\r\n};\r\nasync function buildCapiData(eventData: EventData): Promise {\r\n const cookie = new Cookie();\r\n const userAgent = window.navigator.userAgent || '';\r\n const capiData: capiData = {\r\n event_name: 'ViewContent',\r\n event_id: randomEventId,\r\n event_time: Math.floor(Date.now() / 1000),\r\n action_source: 'website',\r\n event_source_url: window.location.href,\r\n user_data: {},\r\n custom_data: {\r\n content_ids: [eventData.productData.ItemNo],\r\n content_type: 'product group',\r\n content_name: eventData.productData.Name,\r\n currency: 'CAD',\r\n value: convertPrice(eventData?.selectedEdp?.AppliedPrice),\r\n },\r\n };\r\n\r\n // Add client IP and user agent\r\n if (cookie.TscClientIP) {\r\n capiData.user_data.client_ip_address = cookie.TscClientIP;\r\n }\r\n\r\n if (userAgent) {\r\n capiData.user_data.client_user_agent = userAgent;\r\n }\r\n\r\n // If user is signed in, add user data\r\n if (cookie.UserAccessToken?.Token?.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n if (cookie.UserEmail) {\r\n capiData.user_data.em = await digestMessage(cookie.UserEmail.toLowerCase());\r\n }\r\n if (cookie.UserName) {\r\n capiData.user_data.fn = await digestMessage(cookie.UserName.toLowerCase());\r\n }\r\n if (cookie.LastName) {\r\n capiData.user_data.ln = await digestMessage(cookie.LastName.toLowerCase());\r\n }\r\n }\r\n\r\n return capiData;\r\n}\r\nasync function buildCategoryViewContent(): Promise {\r\n const cookie = new Cookie();\r\n const userAgent = window.navigator.userAgent || '';\r\n const capiData: capiData = {\r\n event_name: 'ViewContent',\r\n event_id: randomEventId,\r\n event_time: Math.floor(Date.now() / 1000),\r\n action_source: 'website',\r\n event_source_url: window.location.href,\r\n user_data: {},\r\n custom_data: {\r\n content_category: window?.analyticsData?.page?.category1,\r\n },\r\n };\r\n\r\n // Add client IP and user agent\r\n if (cookie.TscClientIP) {\r\n capiData.user_data.client_ip_address = cookie.TscClientIP;\r\n }\r\n\r\n if (userAgent) {\r\n capiData.user_data.client_user_agent = userAgent;\r\n }\r\n\r\n // If user is signed in, add user data\r\n if (cookie.UserAccessToken?.Token?.length > 0 && cookie.UserAccessToken.Edp > 0) {\r\n if (cookie.UserEmail) {\r\n capiData.user_data.em = await digestMessage(cookie.UserEmail.toLowerCase());\r\n }\r\n if (cookie.UserName) {\r\n capiData.user_data.fn = await digestMessage(cookie.UserName.toLowerCase());\r\n }\r\n if (cookie.LastName) {\r\n capiData.user_data.ln = await digestMessage(cookie.LastName.toLowerCase());\r\n }\r\n }\r\n\r\n return capiData;\r\n}\r\n\r\nfunction buildCapiObject(capiData: capiData): capiObject[] {\r\n const capiObject: capiObject[] = [{ eventConsumer: 'meta', eventData: { data: [capiData] } }];\r\n // Add test code if exists\r\n if (window.tscConfig?.CapiTestCode) {\r\n capiObject[0].eventData.test_event_code = window.tscConfig.CapiTestCode;\r\n //todo: remove this line\r\n // capiObject[0].eventData.test_event_code = 'TEST86224';\r\n }\r\n return capiObject;\r\n}\r\n\r\n// Export the sendCapiEvent function\r\nexport async function sendCapiEvent(capiObject: any) {\r\n const URL = '/Tracking/v1/events/';\r\n\r\n const axiosInstance = axios.create({\r\n baseURL: getBaseUrl(window.location.hostname),\r\n withCredentials: true,\r\n headers: {\r\n Authorization: 'Basic 567e407f-4bc5-463e-9c28-3ac2a2b333ec',\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n if (window.tscConfig?.CapiEnabled == 'true') {\r\n try {\r\n await axiosInstance.post(URL, capiObject);\r\n } catch (error) {\r\n console.log('Error sending event:', error?.response?.data);\r\n }\r\n }\r\n}\r\n\r\nfunction sendPixelEvent(fbPixelObject: FacebookPixelObject) {\r\n window.fbq('track', 'ViewContent', fbPixelObject, { eventID: randomEventId });\r\n}\r\n\r\nfunction generateBrowserObject(eventDetails: EventData): FacebookPixelObject {\r\n const fbPixelObject: FacebookPixelObject = {\r\n content_type: 'product group',\r\n content_name: eventDetails?.productData?.Name,\r\n content_ids: [eventDetails?.productData?.ItemNo.toString()],\r\n value: convertPrice(eventDetails?.selectedEdp?.AppliedPrice),\r\n currency: 'CAD',\r\n };\r\n if (window.tscConfig?.CapiTestCode) {\r\n fbPixelObject.test_event_code = window.tscConfig.CapiTestCode;\r\n //todo: remove this line\r\n // fbPixelObject.test_event_code = 'TEST86224';\r\n }\r\n return fbPixelObject;\r\n}\r\nfunction buildCategoryEventPixel(): FacebookPixelObject {\r\n const fbPixelObject: FacebookPixelObject = {\r\n content_category: window?.analyticsData?.page?.category1,\r\n };\r\n if (window.tscConfig?.CapiTestCode) {\r\n fbPixelObject.test_event_code = window.tscConfig.CapiTestCode;\r\n //todo: remove this line\r\n // fbPixelObject.test_event_code = 'TEST86224';\r\n }\r\n return fbPixelObject;\r\n}\r\n\r\nfunction convertPrice(value) {\r\n if (window.analyticsData.page.languageCode == 'en_ca') {\r\n return Number(value.replace(/\\$|,/g, ''));\r\n } else {\r\n value = value.replace('$', '');\r\n value = value.replace(',', '.');\r\n value = value.replace(/\\s/g, '');\r\n return Number(value);\r\n }\r\n}\r\n\r\ndocument.addEventListener(\r\n 'pdpEvent',\r\n async function (e: CustomEvent) {\r\n //server side capi event\r\n const capiData = await buildCapiData(e?.detail);\r\n const capiObject = buildCapiObject(capiData);\r\n sendCapiEvent(capiObject);\r\n //browser side pixel event\r\n const fbPixelObject = generateBrowserObject(e?.detail);\r\n sendPixelEvent(fbPixelObject);\r\n },\r\n false,\r\n);\r\n\r\nexport const trackViewContentEvent = async () => {\r\n //server side capi event\r\n const capiData = await buildCategoryViewContent();\r\n const capiObject = buildCapiObject(capiData);\r\n sendCapiEvent(capiObject);\r\n\r\n //browser side pixel event\r\n const fbPixelObject = buildCategoryEventPixel();\r\n sendPixelEvent(fbPixelObject);\r\n};\r\n","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"131\":\"recommend\",\"1523\":\"sellercontent\",\"3167\":\"emailpopup2\",\"4199\":\"onairnow\",\"6339\":\"accountdeletion\",\"6464\":\"search\",\"6772\":\"emailpopup\",\"7867\":\"previewbar\",\"8652\":\"vitatree\",\"8799\":\"photoswipe\"}[chunkId] + \".bundle.\" + {\"131\":\"f0aad347fd68ec076ab3\",\"1523\":\"05b90fc005572e3f4bf5\",\"3167\":\"14844515abda74bfa836\",\"4199\":\"ee0b6c3296c26524153a\",\"6339\":\"2eedd230f1b6ba2c416b\",\"6464\":\"4335439ae9820b5827c7\",\"6772\":\"e648afe478bd6730e208\",\"7867\":\"a0448f110f13038f9c48\",\"8652\":\"a0e65b2736a8b61f4872\",\"8799\":\"b02ad610b95f59bb0490\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + {\"7867\":\"previewbar\",\"8652\":\"vitatree\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = 8314;","__webpack_require__.p = \"/dist/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8314: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktsc_react\"] = self[\"webpackChunktsc_react\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [3712], function() { return __webpack_require__(7387); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","module","exports","g","document","documentMode","f","rootMargin","threshold","load","t","nodeName","toLowerCase","e","querySelector","r","createElement","getAttribute","src","alt","append","children","a","o","i","length","poster","setAttribute","n","style","backgroundImage","split","join","d","u","substr","indexOf","classList","toggle","loaded","A","m","v","arguments","Element","NodeList","querySelectorAll","Object","assign","root","s","window","IntersectionObserver","forEach","intersectionRatio","isIntersecting","unobserve","target","c","l","b","background","observe","triggerLoad","observer","polyfill","w","documentElement","__forceSmoothScrollPolyfill__","userAgent","HTMLElement","SCROLL_TIME","original","scroll","scrollTo","scrollBy","elementScroll","prototype","scrollElement","scrollIntoView","now","performance","bind","Date","ROUNDING_TOLERANCE","navigator","RegExp","test","undefined","shouldBailOut","smoothScroll","call","body","left","scrollX","pageXOffset","top","scrollY","pageYOffset","this","scrollLeft","scrollTop","SyntaxError","behavior","scrollableParent","el","isScrollable","parentNode","host","findScrollableParent","parentRects","getBoundingClientRect","clientRects","getComputedStyle","position","x","y","firstArg","TypeError","hasScrollableSpace","axis","clientHeight","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","isScrollableY","isScrollableX","step","context","value","currentX","currentY","k","elapsed","startTime","Math","cos","PI","startX","startY","method","scrollable","requestAnimationFrame","Thumb","swiper","extendParams","on","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","initialized","swiperCreated","onThumbClick","thumbsSwiper","destroyed","clickedIndex","clickedSlide","hasClass","params","slideToIndex","loop","parseInt","attr","currentIndex","activeIndex","slides","eq","slideDuplicateClass","loopFix","_clientLeft","$wrapperEl","clientLeft","prevIndex","prevAll","index","nextIndex","nextAll","slideTo","init","thumbsParams","SwiperClass","constructor","originalParams","watchSlidesProgress","slideToClickedSlide","thumbsSwiperParams","$el","addClass","update","initial","slidesPerView","slidesPerViewDynamic","thumbsToActivate","thumbActiveClass","centeredSlides","floor","removeClass","virtual","enabled","realIndex","useOffset","newThumbsIndex","direction","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","slidesPerGroup","previousIndex","visibleSlidesIndexes","_s","duration","setTransition","destroy","A11y","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","id","clicked","liveRegion","notify","message","notification","html","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","label","disableEl","enableEl","onEnterOrSpaceKey","keyCode","$targetEl","navigation","$nextEl","is","isEnd","slideNext","$prevEl","isBeginning","slidePrev","pagination","bulletClass","click","hasPagination","bullets","hasClickablePagination","clickable","initNavEl","wrapperId","tagName","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","slideEl","closest","slideClass","includes","isActive","isVisible","visibleSlides","sourceCapabilities","firesTouchEvents","isHorizontal","initSlides","slidesLength","filter","contains","each","$slideEl","slideIndex","replace","$containerEl","size","repeat","round","random","toString","getRandomNumber","live","autoplay","addElId","addElLive","rewind","updateNavigation","bulletEl","$bulletEl","renderBullet","bulletActiveClass","removeAttr","updatePagination","remove","off","swiperInstance","setSwiperInstance","useState","useEffect","initGeneralGallery","carousel","getElementById","swiperGallery","modules","freeMode","spaceBetween","nextEl","prevEl","breakpoints","observerMap","Map","RootIds","WeakMap","unsupportedValue","rootId","optionsToId","options","keys","sort","key","map","has","set","get","getRootId","element","callback","fallbackInView","bounds","time","boundingClientRect","intersectionRect","rootBounds","elements","instance","thresholds","entries","entry","_elements$get","inView","some","trackVisibility","Array","isArray","createObserver","callbacks","push","splice","delete","disconnect","EventBus","event","addEventListener","detail","dispatch","data","dispatchEvent","CustomEvent","removeEventListener","cart","analyticsData","useCart","isAuth","cookie","useQuery","queryKey","CartGuid","UserAccessToken","Edp","Language","queryFn","Token","lang","substring","userAccessTokenEdp","Error","response","error","console","log","Promise","resolve","reject","CartProductCount","useErrorBoundary","retry","useRemoveItem","queryClient","storage","mutationFn","Id","onSuccess","variables","newCart","previousCart","cartLineId","currentQty","CartLines","find","prevCartLine","InCart","Quantity","currentItemNo","CartLineItem","ItemNo","changedProduct","Products","product","productChange","quantity","IsSoldOut","reason","eventTitle","setupAnalyticsRemove","truefitEvent","setupTruefitUpdateEvent","OrderSummary","TotalQuantity","deleteSessionLanguageQC","deleteTargetUrl","setQueryData","onError","useUpdateCart","CustomerEdp","cartGuid","onMutate","cancelQueries","previousBag","getQueryData","newBag","JSON","parse","stringify","lineId","qty","prevCartline","PreviousCartLine","addRemove","setupAnalyticsUpdateQty","err","edpNo","put","Customization","ItemEdp","getShowBagEmpty","isShowBagEmpty","IsDonation","Sheet","SheetPortal","SheetOverlay","ref","className","props","cn","displayName","sheetVariants","variants","side","bottom","right","defaultVariants","SheetContent","CloseSvg","SheetHeader","SheetDescription","freeShippingThresholdNumber","delayedPercentage","delayedPercentage1","hideBar","memo","AutoFreeShipAwayFromThreshold","href","rel","en","fr","ItemCard","CartLine","CartProducts","Remove","QuantityAddedOveride","i18n","useTranslation","addResourceBundle","edpData","Edps","EdpNo","ProductLink","LinkWithoutDomain","width","height","ImageUrl","PriceIsLabel","Name","slice","Size","Style","UnitPrice","WasPrice","textAlign","ShippingHandling","IsEditable","type","onClick","Number","tscConfig","FreeShippingThreshold","cartLine","setCartLine","setQuantity","currentCartCount","setCurrentCartCount","setEdpNo","isOpen","setIsOpen","donationInCart","setDonationInCart","showFraudModal","setShowFraudModal","useAuthenticated","isAutoFreeShipApplied","IsAutoFreeShipApplied","isRogersCCFreeShipApplied","IsRogersCCFreeShipApplied","autoFreeShipAwayFromThresholdAmount","AutoFreeShipAwayFromThresholdAmount","difference","percentage","min","setDelayedPercentage","mutation","isMutating","useIsMutating","updateMutation","currentDate","hasMounted","useRef","uniqueId","getFullYear","getMonth","padStart","getDate","getHours","getMinutes","getSeconds","esiEventId","setESIEventId","prevIsOpen","timer","current","setTimeout","clearTimeout","eventId","incrementESIEventId","prevEventId","cartLineClone","donationFilteredCart","item","findIndex","count","line","processCartData","handleAnalytics","algoliaClickData","sessionStorage","getItem","objectIDs","eventName","queryID","removeItem","trackConversion","edp","sku","open","onOpenChange","mutate","Update","Fragment","MerchandiseSubTotal","Buyer","IsFraud","location","isLoading","LoadingSvg","FraudModal","onCloseClickListener","cachebleHeaders","userEDP","FindmineCarousel","beacon","isMobile","isTablet","isDesktop","swiperRef","setSwiperRef","handlePrevious","useCallback","handleNext","getWrapperClass","itemLength","finalClass","looks","autoHeight","onSwiper","runCallbacksOnInit","onSlidePrevTransitionStart","onSlideNextTransitionStart","watchOverflow","look","items","look_id","j","item_id","url","preventDefault","handleClick","item_url","details","color_id","title","image_url","loading","Brand","IsPriceRange","WasPriceRange","SelectedEdpItem","productData","pageUrl","hostname","findmineAppID","domNode","findmineData","setFindmineData","isLooksAvailable","setIsLooksAvailable","mcid","setMcid","processData","responseData","dataClone","elem","display","hideMayWeSuggest","unHideMayWeSuggest","add","getFindMineData","mcID","configData","successCallback","errorCallback","productID","findmineID","findmineUrl","productInStock","productColourID","apiLinkFindMineProductdetails","headers","then","result","catch","getFindMine","StyleDimensionId","productPrice","AppliedPrice","Inventory","findMineCategories","alloyDefined","timeout","clearInterval","interval","setInterval","alloy","array","page","category1DimensionId","isValidCategory","identity","ECID","checkAlloyThenGetData","action","currentSlide","itemID","setID","setItemIDs","interaction","responseID","response_uuid","apiBeacon","newImage","Truefit","Component","super","state","styleID","loadTrueFitLibrary","isProd","tfcapi","q","storeKey","environment","autoCalculate","getElementsByTagName","async","insertBefore","calculateAvailableSizes","selectedEdpData","allAvailableSizes","Sizes","edps","SizeDimensionId","DimensionId","configWidget","userID","productEdp","ProductData","itemNo","widgetConfig","products","availableSizes","sendTrueFitCall","tfSizeEvent","componentDidMount","componentDidUpdate","prevProps","render","TmSellerTypeEnum","addToFavourite","addedToFavourite","permanentlyOutOfStockButtonText","emailWhenInStockText","addToBagText","reviewsText","wasText","shippingText","easyPayText","sizeGuideIconAlt","sizeGuideSizeGuideText","savingText","freeShipping","addReviewText","paymentsOfText","withText","orText","outOfStockText","quantityShort","only","favoriteTooltip","closeText","colours","colour","sizes","frequency","recommendedSize","selectSize","selectStyle","selectSizeAndStyle","oneTimeShipment","autoDelivery","addedToBag","sizeGuideTitle","please","signIn","register","toAddItemsToYourFavoritesList","brandText","videoDesc","autoPlayText","autoPlayDisclaimerText","isAdvanceOrder","useMemo","IsAdvanceOrBackOrder","isStyledMessage","setIsStyledMessage","advanceOrderMessage","setAdvanceOrderMessage","SkuAvailabilityMessage","innerHTML","getEasyPayArticle","isAutoDeliveryEnabled","DefaultEdp","DeliveryOptions","ProductReviewCount","ProductReviewRating","Styles","AvailableSwatches","NoReturnsMessage","BrandDimensionId","BadgeImagePath","ProductTypePath","isEasyPay","EasyPaymentPrice","easyPay","DisplayName","ShowFreeShipEligibleMessage","formatNumber","productItemNo","deliveryItemNo","AutoFreeShippingEnabled","CheckmarkSvg","selector","prevSelector","Selector","productName","isPrice","currentEdp","wasPrice","showWasPrice","saving","SavePrice","shipping","text","AppliedShipping","show","isFreeShipping","priceDisplay","showSticky","SellerName","SellerPageLink","SellerType","hasFBTrackingFired","LOADING_ASSET_PATH","referenceRef","isSignedIn","styles","onFavoriteTooltipCloseClick","setShowFavoriteTooltip","getDefaultEdpItem","edpItem","selectedStyleIndex","setSelectedStyleIndex","selectedSizeIndex","setSelectedSizeIndex","isFavourite","setIsFavourite","favourites","setFavourites","currentIsFavorite","setCurrentIsFavorite","showFavoriteTooltip","showEasyPayPopup","setShowEasyPayPopup","selectedQuantity","setSelectedQuantity","selectedADP","setSelectedADP","isAddedToBag","setIsAddedToBag","gotoIndex","setGotoIndex","popupOpen","setPopupOpen","isAddToBagLoading","setIsAddToBagLoading","easyPayPopupData","setEasyPayPopupData","content","isSwatch","setIsSwatch","labelSize","setLabelSize","isInitialMount","errorMessage","setErrorMessage","setFrequency","getCurrentEdpItem","tmp","IsSOEligible","selectedEdp","searchString","searchClick","buildSnippetObject","api_key","locale","merchant_group_id","merchant_id","REVIEW_MEDIA_MODAL_STYLE","page_id","review_wrapper_url","components","ReviewSnippet","ReviewDisplay","renderReviewSnippet","reviewSnippetObject","pwr","gotoSlide","styleIndex","dimensionId","isPermanentlyOutOfStock","isOutOfStock","isCriticStock","critickStockText","allowedQuantites","qtyLimit","buttonText","isCtaDisabled","updateSchema","IsShowstopper","defaultEdpData","selectedEDPNum","selectedProduct","productTeaser","dataset","teaser","getUrl","baseUrl","protocol","language","todayDate","makeDate","date","todaysDateFormatted","format","oneWeekLaterDateFormatted","schema","name","image","brand","offers","priceCurrency","priceValidUntil","price","itemCondition","availability","UpcNo","ratingValue","reviewCount","newURL","parameter","urlTemp","URL","searchParams","decodeURIComponent","setURLParameter","history","replaceState","updateUrlEdp","tmpEdpData","isAnySOEligible","isFrequencyAutoDelivery","availableSwatches","processRecentlyViewed","rvItemNos","RecentlyViewedItemNos","unshift","pop","getUserFavourites","favouriteStorage","foundFav","Favourites","ItemNumber","handleSignInLink","TargetUrl","pathname","search","onFavoriteClick","uat","userEdp","base","deleteUrl","currentdatetime","CurrentDate","removeByItemNumber","postUrl","post","ActivityDateTime","toISOString","favourite","prev","cartSuccess","cartData","setSessionCart","pageTitle","pageType","Event","changeToSize","sizeIndex","ProductHelpers","isSizeDisabledV2","cartError","errorData","onAddToBagClick","cartlineModel","ItemEDP","SOInterval","SODefaultIntervalValue","SOPeriod","SOIntervalType","loadWriteReview","queryString","queryParams","URLSearchParams","loadReviewFlag","startsWith","userEmail","source","cid","rid","qParams","findIndexByStyleID","styleIndeFound","handleDocumentClick","SwatchHelpers","doSwatchesExist","isSizeDisabled","isStyleDisabled","isStyleDisabledV2","onFrequencyChange","renderStyleSwatch","getSwatchLink","resource","activeElement","blur","onSelectColorClick","checked","onChange","htmlFor","renderStyleDropdown","disabled","delay","triggerOnce","skip","initialInView","setState","setRef","node","useInView","article","easyPayUrl","Article","fetchArticle","Title","Content","onSelectSizeClick","stickyOffset","innerWidth","topOfElement","offsetTop","sizeChartAccordion","scrolToFn","RadioButtonOnSvg","RadioButtonOffSvg","marginRight","placement","autoUpdateEnabled","InfoTooltipSvgWhite","adpValue","deliveryOption","xmlns","viewBox","fill","fillRule","stroke","strokeLinecap","strokeWidth","transform","FavoriteIcon","FavoriteEmptyIcon","EnabledAddToCart","opacity","Marketplace","fontWeight","textDecoration","PdpEasyPayPopup","onCloseClick","_typeof","obj","Symbol","iterator","HAS_DOM_2","isDOMElement","nodeType","addClasses","classNames","removeClasses","throwIfMissing","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","BoundingBox","Constructor","_classCallCheck","isShowing","_options$namespace","namespace","_options$zoomFactor","zoomFactor","_options$containerEl","containerEl","settings","openClasses","_buildClasses","_buildElement","protoProps","staticProps","suffix","classes","concat","ns","zoomPaneWidth","zoomPaneHeight","appendChild","removeChild","percentageOffsetX","percentageOffsetY","triggerRect","inlineLeft","inlineTop","Trigger","_show","_hide","_handleEntry","_handleMovement","_options$el","_options$zoomPane","zoomPane","_options$sourceAttrib","sourceAttribute","_options$handleTouch","handleTouch","_options$onShow","onShow","_options$onHide","onHide","_options$hoverDelay","hoverDelay","_options$touchDelay","touchDelay","_options$hoverBoundin","hoverBoundingBox","_options$touchBoundin","touchBoundingBox","_options$boundingBoxC","boundingBoxContainer","_options$passive","passive","boundingBox","_bindEvents","_isTouchEvent","touches","isPassive","_preventDefault","_preventDefaultAllowTouchScroll","_lastMovement","entryTimeout","touchActivated","hide","movementX","movementY","firstTouch","clientX","clientY","rect","offsetX","offsetY","setPosition","ZoomPane","HAS_ANIMATION","divStyle","_completeShow","_completeHide","_handleLoad","_options$container","container","_options$inline","inline","_options$showWhitespa","showWhitespaceAtEdges","_options$containInlin","containInline","_options$inlineOffset","inlineOffsetX","_options$inlineOffset2","inlineOffsetY","_options$inlineContai","inlineContainer","openingClasses","closingClasses","inlineClasses","loadingClasses","loaderEl","imgEl","imageURL","triggerWidth","triggerHeight","imgElWidth","offsetWidth","imgElHeight","offsetHeight","elWidth","elHeight","differenceBetweenContainerWidthAndImgWidth","differenceBetweenContainerHeightAndImgHeight","isContainerLargerThanImgX","isContainerLargerThanImgY","minLeft","minTop","maxLeft","maxTop","parentElement","webkitTransform","_removeListenersAndResetClasses","_setImageURL","_setImageSize","_isInline","_showInline","_showInContainer","Drift","triggerEl","VERSION","paneContainer","inlinePane","injectBaseStyles","styleEl","createTextNode","head","firstChild","injectBaseStylesheet","_buildZoomPane","_buildTrigger","trigger","_unbindEvents","zf","appendToEl","setWidthHeight","h","setZoomImageURL","disable","enable","LOAD_STATE","getElementsFromOption","option","legacySelector","parent","from","isSafari","vendor","match","PhotoSwipeEvent","defaultPrevented","Eventable","_listeners","_filters","pswp","addFilter","fn","priority","f1","f2","removeFilter","applyFilters","args","apply","listener","Placeholder","imageSrc","decoding","setDisplayedSize","transformOrigin","scale","propValue","toTransformString","itemData","displayedImageWidth","displayedImageHeight","isAttached","hasSlide","removePlaceholder","placeholder","keepPlaceholder","isLazy","reload","slide","usePlaceholder","placeholderEl","prepend","placeholderSrc","msrc","isFirstSlide","isImageContent","loadImage","updateContentSize","imageElement","updateSrcsetSizes","srcset","complete","onLoaded","onload","onerror","setSlide","heavyAppended","displayError","isError","isInitialSizeUpdate","isZoomable","sizesWidth","largestUsedSize","String","lazyLoad","errorMsgEl","innerText","errorMsg","supportsDecode","isDecoding","decode","finally","appendImage","activate","deactivate","parsePaddingOption","prop","viewportSize","paddingValue","paddingFn","padding","legacyPropName","toUpperCase","ZoomLevel","maxWidth","maxHeight","panAreaSize","elementSize","hRatio","vRatio","fit","vFill","_getInitial","secondary","_getSecondary","max","_getMax","zoomLevels","slideData","_parseZoomLevelOption","optionPrefix","optionName","optionValue","currZoomLevel","lazyLoadData","createContentFromData","getViewportSizeFn","newViewportSize","innerHeight","getViewportSize","getPanAreaSize","zoomLevel","ceil","PhotoSwipeBase","getNumItems","numItems","dataSource","_getGalleryDOMElements","gallery","getItemData","dataSourceItem","_domElementToItemData","galleryElement","childSelector","linkEl","pswpSrc","pswpSrcset","pswpWidth","pswpHeight","pswpType","thumbnailEl","currentSrc","pswpCropped","cropped","thumbCropped","PhotoSwipeLightbox","_uid","onThumbnailsClick","gallerySelector","which","ctrlKey","metaKey","altKey","shiftKey","specialKeyUsed","onLine","initialPoint","getClickedIndex","loadAndOpen","getClickedIndexFn","clickedTarget","clickedChildIndex","child","initialPointerPos","shouldOpen","preload","promiseArray","pswpModuleType","pswpModule","goTo","openPromise","preloadFirstSlide","_preloadedContent","lazyLoadSlide","uid","all","iterableModules","mainModule","_openPhotoswipe","default","contentLoader","addToCache","version","VideoData","isAutoPlayEnabled","onAutoPlayChange","slideElement","videoFile","videoContainerID","isVideoPlaying","setIsVideoPlaying","ampInstance","setAmpInstance","showAutoPlayTooltip","setShowAutoPlayTooltip","prevAmp","prevFile","ampInst","amp","akamai","AMP","create","autoplayPolicy","temporalType","media","paths","player","resources","plugins","playsinline","progressBar","ampControls","playButton","percentageComplete","Events","PLAY_REQUEST","_satellite","track","PLAY","ENDED","mode","TIME_UPDATE","currentTime","absoluteCurrentTime","absoluteDuration","percentViewed","setGotoSlide","setSlideIndex","videoData","setVideoData","slideNumber","swiperRefThumb","lightRoomRef","setIsAutoPlayEnabled","autoPlayCookie","AutoPlayVideos","slidesListChildren","slidesList","isZoomed","_setIsZoomed","zoomRef","getDefaultIndexValue","slideToCarouselByID","dimensionValue","getCurrentSlideID","getCurrentData","isCurrentSlideVideo","initGallery","handleGallerySlide","isMobileDevice","carouselThumbnails","$","swiperThumbnails","initialSlide","preloadImages","lazy","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","preloaderClass","currentSlideID","currentSlideStyle","isAutoPlayEnabledFromCookie","getIsAutoPlayEnabledFromCookie","firstVideoIndex","Videos","allowSlidePrev","allowSlideNext","thumbGallery","stopPropagation","assets","images","driftSettings","imageContainer","link","photo_swipe_options","zoom","arrowKeys","bgOpacity","wheelToZoom","initialZoomLevel","secondaryZoomLevel","maxZoomLevel","tapAction","firstElWithBadge","lastElWithBadge","allowTouchMove","currSlide","hideBadge","showBadge","mountZoom","isChecked","previewHeight","realHeight","divElement","buttonElement","onclick","heading","iconDiv","itemIndex","itemNumber","itemnumber","fetchSectionData","infoTabUrl","overviewTarget","tabData","transformRequest","Authorization","Contents","insertAdjacentHTML","client","defaultOptions","queries","cacheTime","staleTime","persister","localStorage","PersistQueryClientProvider","persistOptions","PdpDescription","productDataElement","eventDetails","currentHostname","randomEventNumber","fbObject","eventData","fbCapiObject","event_name","event_id","event_time","action_source","event_source_url","user_data","custom_data","content_ids","content_type","currency","content_name","PriceUnit","contents","item_price","delivery_category","CapiTestCode","test_event_code","TscClientIP","client_ip_address","client_user_agent","UserEmail","em","UserName","LastName","ln","eventConsumer","generateFacebookObject","fbPixelObject","generateFacebookPixelObject","axiosInstance","axios","baseURL","withCredentials","CapiEnabled","fbq","eventID","fbAddToCartEvent","ttObject","ttclid","ttp","tiktokObject","event_source","event_source_id","properties","content_id","content_category","ProductTypes","GrandTotalAmount","user","ip","user_agent","referrer","email","BillingAddress","DayPhone","phone","CustomerNo","external_id","TiktokTestCode","generateTiktokObject","ttq","ttAddToCartEvent","randomEventId","buildCapiObject","capiData","capiObject","sendCapiEvent","sendPixelEvent","convertPrice","languageCode","buildCapiData","generateBrowserObject","jQuery","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","O","chunkIds","notFulfilled","Infinity","fulfilled","every","getter","__esModule","getPrototypeOf","__proto__","def","getOwnPropertyNames","definition","chunkId","reduce","promises","miniCssF","globalThis","Function","hasOwnProperty","done","script","needAttach","scripts","charset","nc","onScriptComplete","doneFns","toStringTag","p","fullhref","existingLinkTags","dataHref","tag","existingStyleTags","findStylesheet","linkTag","errorType","realHref","code","request","createStylesheet","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}