{"version":3,"sources":["webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/AddToCartMixin.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ColorSwatch.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductDetail.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductImages.js"],"names":["ProductDetail","AddToCartMixin","prefs","pid","textNetworkError","addToCartBtn","classesBusy","showMinicartOnProductAdd","showMessageOnProductAdd","showAlertOnProductAdd","zeroWidthSpaceSymbol","init","readyToOrder","has","element","stock","data","selectedQuantity","spacesLength","showCartMessage","msg","error","getById","addToCartMsg","concat","Array","join","render","ref","then","show","postAddProduct","response","cart","emit","cartModel","showMinicart","eventBus","accessibilityAlert","accessibilityAlerts","addedtocart","message","addToCart","button","addToCartBtnPrefs","textSelectOptions","textStockLimit","startProcess","showProgressBar","submitFormJson","addToCartUrl","currentProductID","quantity","finally","stopProcess","hideProgressBar","catch","addClass","removeClass","updateProductView","product","renderAddToCart","available","availability","isOutOfStock","setText","outOfStockLabel","disable","isReachedLimit","messages","update","enable","Widget","ColorSwatch","selectColor","option","selectedOption","getSelectedOptions","RefElement","disableHistory","descriptions","updateLabel","updateProduct","updateBtn","attr","uuid","afterUpdateProduct","bind","id","currentGtmInfo","gtmInfo","setGtmInfo","hide","renderVariationAttributes","renderQuantities","renderPrice","renderAvailability","renderImages","renderName","renderPromotions","renderProductDescriptions","updateSocialLinks","updateViewFullProductURL","selectedProductUrl","el","variationAttributes","length","forEach","variationAttribute","values","map","value","selected","disabled","selectable","attributeId","attribute","onProductLinkClick","link","quantities","qty","url","productName","promotions","price","html","priceBlock","undefined","availabilityClass","productAvailabilityMsg","class","inStockMsg","availabilityLabel","productImages","socialLinks","Object","keys","socialKey","changeAttribute","selectWidget","changeAttributeID","afterChangeAttribute","e","showErrorLayout","updateHistoryState","triggerChangeAttributeEvent","indexOf","quantitychanged","variationselected","window","history","replaceState","keyCode","freeze","SPACE","ENTER","IMAGE_MODE_CAROUSEL","IMAGE_MODE_ZOOM","AccessibilityFocusTrapMixin","ProductImages","thumbnailsPerFrame","thumbnailsZoomClass","zoomLoop","zoomClickToCloseNonZoomable","zoomCloseElClasses","classesGlobalDialog","closeOnScroll","predefinedHeight","predefinedWidth","showHideOpacity","onDestroy","gallery","destroy","images","large","zoomImage","zoomImages","zoom","index","zoomUrl","onImageCarouselPageChanged","page","carousel","imageMode","markCurrentPage","scrollIntoView","onThumbnailCarouselPageClicked","scrollToPage","goTo","getOriginalImageSize","Promise","resolve","imgCarousel","predefinedSize","originalHeight","originalWidth","carouselImages","getImages","firstImage","dataset","originalSrc","img","Image","addEventListener","height","width","src","addFocusTrap","backFocusElement","document","activeElement","addFocusTraps","afterShowModal","initAndShowZoom","PhotoSwipe","PhotoSwipeUI","pswpElement","querySelectorAll","thumbnailsCarousel","thumbnails","HTMLElement","setAttribute","items","from","w","naturalWidth","h","naturalHeight","options","getCurrentPageIndex","loop","clickToCloseNonZoomable","closeElClasses","split","listen","onZoomClosed","currentPage","getCurrentIndex","toggleZoomState","addGlobalDialogClass","loadPhotoswipeDependencies","all","onImageCarouselPageClicked","openZoom","originalImageSize","default","closeZoom","close","removeAttribute","closeZoomKeydown","_","event","stopPropagation","preventDefault","removeGlobalDialogClass","focus","hasClass","handleKeydown","_el","target"],"mappings":"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","file":"product.widgets.bundle.js","sourcesContent":["// TODO: freeze loaded sections during update with aria-busy\n// TODO: investigate proper implementation of aria-live region for updated sections\n// TODO: keep track that focus stays on the same place during PLP update\n\nimport { submitFormJson } from 'widgets/toolbox/ajax';\n/**\n * @typedef {ReturnType} ProductDetail\n */\n\n/**\n * @description Base AddToCartMixin implementation\n *
This class is not intended to have a separate DOM representation.\n * @param {ProductDetail} ProductDetail Base widget for extending\n * @returns {typeof AddToCartMixin} Add to Cart mixin class\n */\nexport default function (ProductDetail) {\n /**\n * @class AddToCartMixin\n * @augments ProductDetail\n * @property {string} data-text-network-error - network error text\n * @property {string} data-add-to-cart-label - add to cart label\n * @property {string} data-pid - product id\n * @property {boolean} data-show-minicart-on-product-add - Show minicart on product added to cart\n * @property {boolean} data-show-message-on-product-add - Show message on poroduct added to cart\n * @property {boolean} data-show-alert-on-product-add - Show Global Alert on product added to cart\n */\n class AddToCartMixin extends ProductDetail {\n prefs() {\n return {\n pid: '',\n textNetworkError: 'Network Error',\n addToCartBtn: 'addToCart',\n classesBusy: 'm-busy',\n showMinicartOnProductAdd: false,\n showMessageOnProductAdd: true,\n showAlertOnProductAdd: true,\n zeroWidthSpaceSymbol: '\\u200B',\n ...super.prefs()\n };\n }\n\n init() {\n super.init();\n this.readyToOrder = this.prefs().readyToOrder;\n this.has(this.prefs().addToCartBtn, (element) => {\n const stock = element.data('stock');\n if (stock) {\n this.stock = stock;\n }\n });\n this.selectedQuantity = this.prefs().selectedQuantity;\n this.spacesLength = 0;\n }\n\n /**\n * @description Show message\n * @param {string} msg Message\n * @param {boolean} error Error flag\n */\n showCartMessage(msg, error = false) {\n this.getById(this.prefs().addToCartMsg, (addToCartMsg) => {\n if (typeof this.spacesLength === 'undefined') {\n this.spacesLength = 0;\n }\n // It's needed to force render previously added success message. If we try to add the same product\n // several times, success message alert will not be announced by a screen reader.\n msg = msg.concat(Array(++this.spacesLength).join(this.prefs().zeroWidthSpaceSymbol));\n\n addToCartMsg.render('template', { msg, error }, addToCartMsg.ref('container')).then(() => addToCartMsg.show());\n });\n }\n\n /**\n * @description Handles response from server once product added to cart\n * @emits \"product.added.to.cart\"\n * @param {any} response Add Product response\n */\n postAddProduct(response) {\n if (!response.error && response.cart) {\n this.emit('productadded');\n const cartModel = response.cart;\n cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n this.eventBus().emit('product.added.to.cart', cartModel, this);\n\n if (this.prefs().showAlertOnProductAdd) {\n const accessibilityAlert = this.prefs().accessibilityAlerts.addedtocart;\n this.eventBus().emit('alert.show', {\n accessibilityAlert\n });\n }\n }\n\n if (response.error || this.prefs().showMessageOnProductAdd) {\n this.eventBus().emit('product.addedTocart.with.error', response);\n this.showCartMessage(response.message, response.error);\n }\n }\n\n addToCart(button) {\n const addToCartBtnPrefs = button.prefs();\n\n if (addToCartBtnPrefs.readyToOrder) {\n this.readyToOrder = addToCartBtnPrefs.readyToOrder;\n }\n\n if (!this.readyToOrder) {\n this.showCartMessage(this.prefs().textSelectOptions, true);\n\n return;\n }\n\n if (this.stock && this.stock < this.selectedQuantity) {\n this.showCartMessage(this.prefs().textStockLimit, true);\n\n return;\n }\n\n button.startProcess();\n\n this.showProgressBar();\n\n submitFormJson(addToCartBtnPrefs.addToCartUrl, {\n pid: this.currentProductID || addToCartBtnPrefs.pid,\n quantity: this.selectedQuantity || addToCartBtnPrefs.selectedQuantity\n }).then(response => this.postAddProduct(response))\n .finally(() => {\n button.stopProcess();\n\n this.hideProgressBar();\n }).catch(() => {\n this.showCartMessage(this.prefs().textNetworkError, true);\n });\n }\n\n showProgressBar() {\n this.ref('self').addClass(this.prefs().classesBusy);\n }\n\n hideProgressBar() {\n this.ref('self').removeClass(this.prefs().classesBusy);\n }\n\n /**\n * @description Update Product View\n * @param {any} product productModel\n */\n updateProductView(product) {\n super.updateProductView(product);\n this.renderAddToCart(product);\n }\n\n renderAddToCart(product) {\n this.getById('addToCart', (addToCartBtn) => {\n if (!product.available && product.availability.isOutOfStock) {\n addToCartBtn.setText(this.prefs().outOfStockLabel);\n addToCartBtn.disable();\n } else if (product.availability.isReachedLimit) {\n this.getById(this.prefs().addToCartMsg, (addToCartMsg) => {\n const msg = product.availability.messages[0];\n const error = true;\n addToCartMsg.render(\n 'template',\n { msg, error },\n addToCartMsg.ref('container')\n ).then(() => addToCartMsg.show());\n });\n addToCartBtn.setText(this.prefs()[this.prefs().update ? 'updateLabel' : 'addToCartLabel']);\n addToCartBtn.disable();\n } else {\n addToCartBtn.setText(this.prefs()[this.prefs().update ? 'updateLabel' : 'addToCartLabel']);\n addToCartBtn.enable();\n }\n });\n }\n }\n\n return AddToCartMixin;\n}\n","// TODO: JSDoc for all methods\n// TODO: should be implemented as https://www.w3.org/TR/wai-aria-practices/#Listbox\n// single select controls group (single tab stop element) with activation on click/space/enter\nimport { RefElement } from 'widgets/toolbox/RefElement';\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base ColorSwatch implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ColorSwatch} Color Swatch class\n */\nexport default function (Widget) {\n /**\n * @class ColorSwatch\n * @augments Widget\n */\n class ColorSwatch extends Widget {\n selectColor(option) {\n this.selectedOption = option;\n this.emit('change', this);\n }\n\n getSelectedOptions() {\n if (this.selectedOption) {\n return this.selectedOption;\n }\n return new RefElement([]);\n }\n }\n\n return ColorSwatch;\n}\n","// TODO: JSDoc for all methods\n// TODO: freeze loaded sections during update with aria-busy\n// TODO: investigate proper implementation of aria-live region for updated sections\n// TODO: keep track that focus stays on the same place during PLP update\n\nimport { submitFormJson } from 'widgets/toolbox/ajax';\nimport { showErrorLayout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {InstanceType} refElement\n * @typedef {InstanceType>} inputSelect\n */\n\n/**\n * @description Base ProductDetail implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {typeof ProductDetail} Product Detail class\n */\nexport default function (Widget) {\n /**\n * @class ProductDetail\n * @augments Widget\n * @classdesc Represents ProductDetail component with next features:\n * 1. Support keyboard navigation for accessibility\n * 2. Rerender PDP and Quick View\n * 3. Handle product attributes change\n * 4. Handle add to cart event\n * @property {boolean} [data-ready-to-order=false] - ready to order flag\n * @property {string} data-text-select-options - select option text\n * @property {string} data-text-stock-limit - stock limit text\n * @property {string} data-out-of-stock-label - out of stock label\n * @property {number} data-selected-quantity - selected quantity\n * @category widgets\n * @subcategory product\n * @example\n * cartridges/app_storefront_widgets/cartridge/templates/default/product/productDetails.isml\n *\n * \n * PDP content\n * \n */\n class ProductDetail extends Widget {\n prefs() {\n return {\n addToCartMsg: 'addToCartMsg',\n disableHistory: false,\n descriptions: 'descriptions',\n readyToOrder: false,\n selectedQuantity: 0,\n textSelectOptions: '',\n textStockLimit: '',\n outOfStockLabel: '',\n updateLabel: '',\n update: false,\n accessibilityAlerts: {},\n ...super.prefs()\n };\n }\n\n /**\n * @description updateProduct handler\n * @param {object} updateBtn Response object\n * @returns {void}\n */\n updateProduct(updateBtn) {\n submitFormJson(\n updateBtn.ref('self').attr('data-update-url'),\n {\n pid: this.currentProductID || updateBtn.prefs().pid,\n quantity: this.selectedQuantity || updateBtn.ref('self').attr('data-selected-quantity') || 1,\n uuid: updateBtn.ref('self').attr('data-uuid')\n }\n ).then(this.afterUpdateProduct.bind(this))\n .finally(() => {\n this.emit('updated');\n });\n }\n\n /**\n * @description afterUpdateProduct handler\n * @param {object} response Response object\n * @emits \"product.updated\"\n * @returns {void}\n */\n afterUpdateProduct(response) {\n /**\n * @description Event to notify concerned widgets, that product was updated\n * @event \"product.updated\"\n */\n this.eventBus().emit('product.updated', response);\n }\n\n /**\n * @description Update Product View\n * @param {any} product productModel\n * @returns {void}\n */\n updateProductView(product) {\n this.currentProductID = product.id;\n this.currentGtmInfo = product.gtmInfo;\n this.selectedQuantity = product.selectedQuantity;\n this.uuid = product.uuid;\n this.readyToOrder = product.readyToOrder;\n this.stock = product.availability && product.availability.stock ? product.availability.stock : null;\n\n this.setGtmInfo(product);\n\n this.getById(this.prefs().addToCartMsg, (addToCartMsg) => {\n addToCartMsg.hide();\n });\n this.renderVariationAttributes(product);\n this.renderQuantities(product);\n this.renderPrice(product);\n this.renderAvailability(product);\n this.renderImages(product);\n this.renderName(product);\n this.renderPromotions(product);\n this.renderProductDescriptions(product);\n this.updateSocialLinks(product);\n this.updateViewFullProductURL(product);\n }\n\n /**\n * @description Render product view full product url\n * @param {object} product Product object\n * @returns {void}\n */\n updateViewFullProductURL(product) {\n if (product.selectedProductUrl) {\n this.has('viewFullProductURL', (el) => {\n el.attr('href', product.selectedProductUrl);\n });\n }\n }\n\n /**\n * @description Set GTM info\n * @param {object} product Product object\n * @returns {void}\n */\n setGtmInfo(product) {\n this.currentGtmInfo = product.gtmInfo;\n\n if (this.currentGtmInfo && product.selectedQuantity) {\n this.currentGtmInfo.quantity = product.selectedQuantity;\n }\n }\n\n /**\n * @description Render product attributes\n * @param {object} product Product object\n * @returns {void}\n */\n renderVariationAttributes(product) {\n if (product.variationAttributes && product.variationAttributes.length) {\n product.variationAttributes.forEach(variationAttribute => {\n variationAttribute.values = variationAttribute.values.map(value => {\n return {\n ...value,\n selected: value.selected,\n disabled: !value.selectable,\n selectable: value.selectable ? 'selectable' : ''\n };\n });\n this.getById('attr-' + variationAttribute.attributeId, (attribute) => {\n attribute.render('template', {\n attr: variationAttribute\n });\n });\n });\n }\n }\n\n /**\n * @description Executes when user clicks on product details link.\n * Usually used by analytics etc.\n * @emits \"detail.product.link.click\"\n * @param {refElement} link - clicked product tile link\n * @returns {void}\n */\n onProductLinkClick(link) {\n this.eventBus().emit('detail.product.link.click', link);\n }\n\n /**\n * @description Render product quantity\n * @param {object} product Product object\n * @returns {void}\n */\n renderQuantities(product) {\n if (product.quantities) {\n this.getById('quantity-1', (quantity) => {\n quantity.render('template', {\n attr: {\n values: product.quantities.map(qty => {\n return {\n selected: qty.selected ? 'selected' : '',\n url: qty.url,\n value: qty.value\n };\n })\n },\n isOutOfStock: product.availability && product.availability.isOutOfStock\n });\n });\n }\n }\n\n /**\n * @description Render product name\n * @param {object} product Product object\n * @returns {void}\n */\n renderName(product) {\n if (product.productName) {\n this.ref('name').setText(product.productName);\n }\n }\n\n /**\n * @description Render product promotion\n * @param {object} product Product object\n * @returns {void}\n */\n renderPromotions(product) {\n this.getById('promotions', (promotions) => {\n promotions.render('template', {\n promotions: product.promotions || []\n }, promotions.ref('container'));\n });\n }\n\n /**\n * @description Render product price\n * @param {object} product Product object\n * @returns {void}\n */\n renderPrice(product) {\n if (product.price && product.price.html) {\n this.getById('priceBlock', (priceBlock) => {\n priceBlock.render('template', [], undefined, product.price.html);\n });\n }\n }\n\n /**\n * @description Render product availability\n * @param {object} product Product object\n * @returns {void}\n */\n renderAvailability(product) {\n let message = '';\n let availabilityClass = '';\n const productAvailabilityMsg = this.ref('productAvailabilityMsg');\n\n if (product.availability && product.availability.messages && product.readyToOrder) {\n message = product.availability.messages.join('');\n availabilityClass = product.availability.class;\n }\n\n if (product.availability.isReachedLimit) {\n message = product.availability.inStockMsg.join('');\n }\n\n if (productAvailabilityMsg) {\n productAvailabilityMsg.hide();\n }\n\n this.getById('availability', (availabilityLabel) => {\n availabilityLabel.render('template', {\n message: message,\n class: availabilityClass\n }, availabilityLabel.ref('container'));\n });\n }\n\n /**\n * @description Render product images\n * @param {object} product Product object\n * @returns {void}\n */\n renderImages(product) {\n this.getById('productImages', (productImages) => {\n productImages.renderImages(product);\n });\n }\n\n /**\n * @description Render product description\n * @param {object} product Product object\n * @returns {void}\n */\n renderProductDescriptions(product) {\n this.getById(this.prefs().descriptions, element => {\n element.render('template', product, element.ref('container')).then(() => element.init());\n });\n }\n\n /**\n * @description Update social links\n * @param {object} product Product object\n * @returns {void}\n */\n updateSocialLinks(product) {\n if (product.socialLinks !== undefined) {\n Object.keys(product.socialLinks).forEach((socialKey) => {\n this.has('social-link-' + socialKey, link => {\n link.attr('href', product.socialLinks[socialKey]);\n });\n });\n }\n }\n\n /**\n * @description widget triggered event\n * Saves `selectWidget.id` into a property for further global notifications etc.\n * Later, when triggering event, `selectWidget.id` will be analised in order to send with event correct data.\n * @param {inputSelect} selectWidget widget\n * @returns {void}\n */\n changeAttribute(selectWidget) {\n this.changeAttributeID = selectWidget.id;\n const selected = selectWidget.getSelectedOptions();\n\n if (!selected || selected.data('attrIsSelected')) {\n return;\n }\n\n if (selected) {\n submitFormJson(selected.data('attrUrl'), undefined, 'GET', true)\n .then(this.afterChangeAttribute.bind(this))\n .catch(e => {\n showErrorLayout(e);\n });\n }\n }\n\n /**\n * @description After change attrigute handler\n * @param {object} response response object\n * @returns {void}\n */\n afterChangeAttribute(response) {\n if (response && response.product) {\n if (!this.prefs().disableHistory) {\n this.updateHistoryState(response.product);\n }\n\n this.updateProductView(response.product);\n this.triggerChangeAttributeEvent();\n }\n }\n\n /**\n * @description Triggers global event after `afterChangeAttribute` method executed.\n * Puts localised global alert event description\n * @returns {void}\n */\n triggerChangeAttributeEvent() {\n if (!this.changeAttributeID) {\n return;\n }\n\n let accessibilityAlert = '';\n if (this.changeAttributeID.indexOf('quantity-') === 0) {\n accessibilityAlert = this.prefs().accessibilityAlerts.quantitychanged;\n } else if (this.changeAttributeID.indexOf('attr-') === 0) {\n accessibilityAlert = this.prefs().accessibilityAlerts.variationselected;\n }\n this.eventBus().emit('alert.show', {\n accessibilityAlert\n });\n this.changeAttributeID = undefined;\n }\n\n /**\n * @description Update History State\n * @param {object} product product object\n * @returns {void}\n */\n updateHistoryState(product) {\n window.history.replaceState(undefined, '', product.selectedProductUrl);\n }\n }\n\n return ProductDetail;\n}\n","// TODO: JSDoc for all methods\nconst keyCode = Object.freeze({\n SPACE: 32,\n ENTER: 13\n});\n\nconst IMAGE_MODE_CAROUSEL = 'carousel';\nconst IMAGE_MODE_ZOOM = 'zoom';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType} RefElement\n * @typedef {InstanceType>} carousel\n * @typedef {{alt: string, url: string, absURL: string, title: string, index: number, zoomUrl: string}} ProductImage\n */\n\n/**\n * @description Base ProductImages implementation\n * @param {ReturnType} AccessibilityFocusTrapMixin mixin\n * @returns {typeof ProductImages} ProductImages class\n */\nexport default function (AccessibilityFocusTrapMixin) {\n /**\n * @class ProductImages\n * @augments AccessibilityFocusTrapMixin\n * @classdesc Basic ProductImages Widget, manages two images carousels: thumbnails and images.\n *
Renders images from server response and update carousels states accordingly.\n *
Listens to carousel scroll/click events to coordinate consistent work of two carousels.\n *
Serves image `zoom` popup functionality using `photoswipe` as a library\n * @property {string} data-widget - Widget name `productImages`\n * @property {string} data-thumbnails-per-frame - Number of thumbnails fully visible per frame\n * @property {string} data-thumbnails-zoom-class - Class of the thumbnails carousel, when zoom is opened\n * @property {string} data-zoom-loop - Zoom carousel needs to be looped or not\n * @property {string} data-zoom-click-to-close-non-zoomable - Close or not zoom popup for not zoomable elements\n * @property {string} data-zoom-close-el-classes - Closable zoom popup classes. For ex. `item,caption,zoom-wrap,ui,top-bar`\n * @property {boolean} closeOnScroll - Close gallery on page scroll\n * @property {boolean} showHideOpacity - Animate background opacity and image scale\n * @example\n * // use this code to display widget\n * \n * \n * ...\n * ...\n * \n * \n * \n */\n class ProductImages extends AccessibilityFocusTrapMixin {\n prefs() {\n return {\n thumbnailsPerFrame: 4,\n thumbnailsZoomClass: 'm-zoomed-in',\n zoomLoop: false,\n zoomClickToCloseNonZoomable: false,\n zoomCloseElClasses: '',\n classesGlobalDialog: 'm-has_dialog',\n closeOnScroll: false,\n predefinedHeight: 1773,\n predefinedWidth: 1333,\n showHideOpacity: true,\n ...super.prefs()\n };\n }\n\n init() {\n super.init();\n this.onDestroy(() => {\n if (this.gallery) {\n this.gallery.destroy();\n this.gallery = undefined;\n }\n });\n }\n\n /**\n * @param {{images: {large: Array}, zoomImages: {zoom: Array}}} product - product object\n */\n renderImages(product) {\n if (product.images && product.images.large) {\n product.images.large.forEach(element => {\n const zoomImage = product.zoomImages.zoom && product.zoomImages.zoom[element.index];\n element.zoomUrl = zoomImage && zoomImage.url;\n });\n\n this.render('galleryTemplate', { images: product.images }, this.ref('carouselInner')).then(() => {\n this.update();\n });\n }\n }\n\n /**\n * @param {RefElement} el - event source element\n * @param {number} page - current page number\n */\n onImageCarouselPageChanged(el, page) {\n this.getById('imagesThumbnails', (/** @type {carousel} */ carousel) => {\n if (this.imageMode !== IMAGE_MODE_ZOOM) {\n carousel.markCurrentPage(page).scrollIntoView();\n }\n });\n }\n\n /**\n * @param {RefElement} el - event source element\n * @param {number} page - current page number\n */\n onThumbnailCarouselPageClicked(el, page) {\n this.getById('imagesCarousel', (/** @type {carousel} */ carousel) => carousel.scrollToPage(page));\n\n if (this.imageMode === IMAGE_MODE_ZOOM && this.gallery) {\n this.gallery.goTo(page);\n }\n\n this.getById('imagesThumbnails', (/** @type {carousel} */ carousel) => {\n carousel.markCurrentPage(page).scrollIntoView();\n });\n }\n\n update() {\n this.getById('imagesThumbnails', (/** @type {carousel} */ carousel) => carousel\n .update()\n .scrollToPage(0)\n .markCurrentPage(0));\n\n this.getById('imagesCarousel', (/** @type {carousel} */ carousel) => carousel\n .update()\n .scrollToPage(0));\n }\n\n /**\n * @description Get URL from data-original-src attribute.\n * Load original image by URL. Get original size.\n * The image element should have data-original-src attribute with original image URL.\n * @returns {InstanceType } - return new Promise\n */\n getOriginalImageSize() {\n return new Promise((resolve) => {\n const imgCarousel = this.getById('imagesCarousel', (/** @type {carousel} */ carousel) => carousel);\n const predefinedSize = {\n originalHeight: this.prefs().predefinedHeight,\n originalWidth: this.prefs().predefinedWidth\n };\n if (!imgCarousel) {\n resolve(predefinedSize);\n } else {\n const carouselImages = imgCarousel.getImages();\n const firstImage = carouselImages && carouselImages[0];\n if (firstImage.dataset.originalSrc) {\n const img = new Image();\n img.addEventListener('load', () => resolve({ originalHeight: img.height, originalWidth: img.width }));\n img.addEventListener('error', () => resolve(predefinedSize));\n img.src = firstImage.dataset.originalSrc;\n } else {\n resolve(predefinedSize);\n }\n }\n });\n }\n\n /**\n * @description Add focus trap functionality in the opened zoom dialog to prevent background elements focusing\n */\n addFocusTrap() {\n this.backFocusElement = /** @type {HTMLElement} */(document.activeElement);\n this.addFocusTraps();\n this.afterShowModal();\n }\n\n /**\n * @description Does all the work to init photoswipe and show it\n * @param {typeof import('photoswipe')} PhotoSwipe - PhotoSwipe library class\n * @param {typeof import('photoswipe/dist/photoswipe-ui-default')} PhotoSwipeUI - PhotoSwipeUI_Default library class\n * @param {{originalWidth: string, originalHeight:string}} originalImageSize Object with original image width and height\n */\n initAndShowZoom(PhotoSwipe, PhotoSwipeUI, { originalWidth, originalHeight }) {\n const pswpElement = document.querySelectorAll('.pswp')[0];\n const imgCarousel = this.getById('imagesCarousel', (/** @type {carousel} */ carousel) => carousel);\n const thumbnailsCarousel = this.getById('imagesThumbnails', (/** @type {carousel} */ thumbnails) => thumbnails);\n\n if (!imgCarousel || !(pswpElement instanceof HTMLElement)) {\n return;\n }\n\n const carouselImages = imgCarousel.getImages();\n\n if (!carouselImages) {\n return;\n }\n\n pswpElement.setAttribute('data-tau', 'zoom_dialog');\n\n const items = Array.from(carouselImages).map(element => {\n return {\n src: element.dataset.originalSrc,\n w: originalWidth || element.naturalWidth,\n h: originalHeight || element.naturalHeight\n };\n });\n\n const prefs = this.prefs();\n\n const options = {\n index: imgCarousel.getCurrentPageIndex(),\n loop: prefs.zoomLoop,\n history: false,\n clickToCloseNonZoomable: prefs.zoomClickToCloseNonZoomable,\n closeElClasses: prefs.zoomCloseElClasses.split(','),\n closeOnScroll: prefs.closeOnScroll,\n showHideOpacity: prefs.showHideOpacity\n };\n\n const gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI, items, options);\n\n gallery.listen('close', () => this.onZoomClosed());\n\n gallery.listen('beforeChange', () => {\n const currentPage = gallery.getCurrentIndex();\n\n imgCarousel.scrollToPage(currentPage);\n\n if (thumbnailsCarousel) {\n thumbnailsCarousel.markCurrentPage(currentPage).scrollIntoView();\n }\n });\n\n gallery.init();\n\n this.gallery = gallery;\n this.imageMode = IMAGE_MODE_ZOOM;\n\n if (thumbnailsCarousel) {\n thumbnailsCarousel.toggleZoomState(true);\n }\n\n this.addGlobalDialogClass();\n this.addFocusTrap();\n }\n\n /**\n * @description Click handler on image from large images carousel\n * @returns {Promise} - Promise that fulfills when all of the promises passed as an iterable have been fulfilled\n */\n loadPhotoswipeDependencies() {\n return Promise.all([\n import(/* webpackChunkName: 'photoswipe' */'photoswipe'),\n import(/* webpackChunkName: 'photoswipe' */'photoswipe/dist/photoswipe-ui-default.js'),\n this.getOriginalImageSize()\n ]);\n }\n\n /**\n * @description Click handler on image from large images carousel\n */\n onImageCarouselPageClicked() {\n this.zoom();\n }\n\n /**\n * @description Click handler for \"zoom\" icon\n */\n openZoom() {\n this.zoom();\n }\n\n /**\n * @description Generic method to open zoom popup\n */\n zoom() {\n this.loadPhotoswipeDependencies().then(([PhotoSwipe, PhotoSwipeUI, originalImageSize]) => {\n this.initAndShowZoom(PhotoSwipe.default, PhotoSwipeUI.default, originalImageSize);\n });\n }\n\n /**\n * @description \"Close\" photoswipe popup icon click handler\n */\n closeZoom() {\n if (this.gallery) {\n this.gallery.close();\n }\n\n const pswpElement = document.querySelectorAll('.pswp')[0];\n\n if (!(pswpElement instanceof HTMLElement)) {\n return;\n }\n\n pswpElement.removeAttribute('data-tau');\n }\n\n /**\n * @description Zoom Keydown Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n * @returns {void}\n */\n closeZoomKeydown(_, event) {\n if (event.keyCode === keyCode.ENTER || event.keyCode === keyCode.SPACE) {\n event.stopPropagation();\n event.preventDefault();\n this.closeZoom();\n }\n }\n\n /**\n * @description Sets image mode / do some DOM modifications after zoom closed\n */\n onZoomClosed() {\n this.getById('imagesThumbnails', (/** @type {carousel} */thumbnails) => thumbnails.toggleZoomState(false));\n this.imageMode = IMAGE_MODE_CAROUSEL;\n this.removeGlobalDialogClass();\n\n if (this.backFocusElement) {\n this.backFocusElement.focus();\n this.backFocusElement = null;\n }\n }\n\n /**\n * @description Add Global Dialog Class\n * @returns {void}\n */\n addGlobalDialogClass() {\n const html = this.ref('html');\n\n if (!html.hasClass(this.prefs().classesGlobalDialog)) {\n html.addClass(this.prefs().classesGlobalDialog);\n }\n }\n\n /**\n * @description Remove Global Dialog Class\n * @returns {void}\n */\n removeGlobalDialogClass() {\n this.ref('html').removeClass(this.prefs().classesGlobalDialog);\n }\n\n /**\n * @param {RefElement} _el event source element\n * @param {KeyboardEvent} event event instance if DOM event\n */\n handleKeydown(_el, event) {\n if (!event) {\n return;\n }\n\n switch (event.keyCode) {\n case keyCode.SPACE:\n case keyCode.ENTER:\n event.preventDefault();\n event.stopPropagation();\n if (event.target && 'thumbnailsArrow' in event.target.dataset) {\n break;\n }\n this.zoom();\n break;\n default:\n break;\n }\n }\n }\n\n return ProductImages;\n}\n"],"sourceRoot":""}