{"version":3,"file":"product.widgets.bundle.js","mappings":"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","sources":["webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/forms/ajax/BackInStock.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/forms/ajax/EVoucherDataForm.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/global/CuttableContent.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/AddAllToCartMixin.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/AlternativeImage.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/Availability.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/BuyTogetherCheckbox.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/BuyTogetherProduct.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/BuyTogetherRecommendation.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/ColorSwatch.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/EProductAddToCartMixin.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/EProductJustAddedProductToCartMixin.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/EProductProductDetail.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/PlusProductAddToCartMixin.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/PlusProductDetail.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/ProductDetail.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/ProductDetailContainer.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/ProductImages.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/ProductSet.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/RecentlyViewedMixin.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/SetProductDetail.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/product/Specifications.js","webpack://sfra-boilerplate/./cartridges/app_custom_core/cartridge/client/default/js/widgets/wishlist/EProductAddToWishlistMixin.js","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/forms/ajax/BackInStock.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/AddAllToCartMixin.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ColorSwatch.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductDetail.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductImages.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductSet.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/ProductVideoMixin.ts","webpack://sfra-boilerplate/./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/product/RecentlyViewedMixin.ts"],"sourcesContent":["import { timeout } from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/ajax/BackInStock').default>} BaseBackInStock\n */\n\n/**\n * @description BackInStock implementation\n * @param {BaseBackInStock} BaseBackInStock Base widget for extending\n * @returns {typeof BackInStock} BackInStock class\n */\nexport default function (BaseBackInStock) {\n    /**\n     * @class BackInStock\n     * @augments BaseBackInStock\n     */\n    class BackInStock extends BaseBackInStock {\n        /**\n         * @description Handles server response\n         * @emits AjaxForm#submit\n         * @param {object} data Server JSON response once form submitted\n         * @param {string} [data.success] - If form submission was success\n         * @param {string} [data.redirectUrl] - if not empty - redirect to specified location should be executed\n         * @param {boolean|string|string[]} [data.error] - error messages/message from server\n         * @param {object[]} [data.fields] - form fields with errors\n         * @returns {void}\n         */\n        onSubmitted(data) {\n            if (data.success && data.redirectUrl) {\n                window.location.assign(data.redirectUrl);\n            } else if (data.error) {\n                if (data.redirectUrl) {\n                    window.location.assign(data.redirectUrl);\n                } else {\n                    this.setError(Array.isArray(data.error) ? data.error.join('<br/>') : data.error);\n                }\n            } else if (data.fields) {\n                Object.entries(data.fields).forEach(([name, errorMsg]) => {\n                    this.getById(name, (input) => {\n                        // @ts-expect-error ts-migrate(2339) FIXME: Property 'setError' does not exist on type 'Widget... Remove this comment to see the full error message\n                        input.setError(errorMsg);\n                    });\n                });\n            } else {\n                timeout(() => {\n                    /**\n                     * @description Event to submit AjaxForm\n                     * @event AjaxForm#submit\n                     */\n                    this.emit('submit', data);\n                    this.ref('contentBlock').hide();\n                    this.ref('successBlock').show();\n                });\n            }\n        }\n    }\n\n    return BackInStock;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/forms/AjaxForm').default>} AjaxForm\n */\n\n/**\n * @description EVoucherDataForm implementation\n * @param {AjaxForm} AjaxForm Base widget for extending\n * @returns {typeof EVoucherDataForm} EVoucherDataForm class\n */\nexport default function (AjaxForm) {\n    /**\n     * @class EVoucherDataForm\n     * @augments AjaxForm\n     */\n    class EVoucherDataForm extends AjaxForm {\n        /**\n         * @description Prevent to submit form by Enter\n         * @returns {void}\n         */\n        handleNoop() {\n\n        }\n\n        /**\n         * @description Programmatically submits e-voucher form data to server\n         * @param {string} pliUUID newly added to cart product line itrem ID\n         * @returns {Promise} a promise after form submission\n         */\n        submitData(pliUUID) {\n            this.submitting = true;\n            return submitFormJson(\n                this.getFormUrl(),\n                {\n                    pliUUID,\n                    ...this.getFormFields()\n                },\n                this.ref('self').attr('method') === 'GET' ? 'GET' : 'POST'\n            )\n                .then(this.onSubmitted.bind(this))\n                .catch(this.onError.bind(this))\n                .finally(this.afterSubmission.bind(this));\n        }\n\n        /**\n         * @description Just to use in further `then` promise chain\n         * @param {object} data server response\n         * @returns {object} server response\n         */\n        onSubmitted(data) {\n            super.onSubmitted(data);\n            return data;\n        }\n    }\n\n    return EVoucherDataForm;\n}\n","import { debounce } from 'widgets/toolbox/debounce';\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Cuttable content implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof CuttableContent} CuttedContent class\n */\nexport default function (Widget) {\n    /**\n     * @class CuttableContent\n     * @augments Widget\n     */\n    class CuttableContent extends Widget {\n        prefs() {\n            return {\n                moreClass: 'm-show-more',\n                activeClass: 'm-cut-active',\n                showMore: '',\n                showLess: '',\n                maxHeight: 0,\n                useLess: true,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            this.toggleButton();\n\n            this.opened = false;\n\n            this.ev('resize', debounce(this.toggleButton.bind(this), 200), window);\n        }\n\n        onRefresh() {\n            this.toggleButton();\n        }\n\n        toggleButton() {\n            this.has('button', button => {\n                this.has('content', content => {\n                    if (this.prefs().maxHeight && this.prefs().maxHeight > content.prop('scrollHeight')) {\n                        button.hide();\n                        this.ref('self').removeClass(this.prefs().activeClass);\n                    } else if (!this.prefs().useLess || !this.opened) {\n                        button.show();\n                        this.ref('self').addClass(this.prefs().activeClass);\n                    }\n                });\n            });\n        }\n\n        toggleContent(link) {\n            const prefs = this.prefs();\n\n            this.has('content', content => content.toggleClass(prefs.moreClass));\n\n            if (this.prefs().useLess) {\n                link.setText(this.opened ? prefs.showMore : prefs.showLess);\n            } else if (!this.opened) {\n                link.hide();\n            }\n\n            this.opened = !this.opened;\n        }\n    }\n\n    return CuttableContent;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/AddAllToCartMixin').default>} AddAllToCartMixinBase\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {InstanceType<typeof import('core/product/SetProductDetail').default>} SetProductDetail\n */\n\n/**\n * @description Extended AddAllToCartMixin implementation\n *\n * This class is not intended to have a separate DOM representation.\n *\n * @param {AddAllToCartMixinBase} AddAllToCartMixinBase widget for extending\n * @returns {typeof AddAllToCartMixin} Add to Cart mixin widget\n */\nexport default function (AddAllToCartMixinBase) {\n    /**\n     * @class AddAllToCartMixin\n     * @augments AddAllToCartMixinBase\n     * @subcategory product\n     * @classdesc Represents product set component with the next features:\n     * 1. Adds all product set products to the basket\n     * 2. Shows alert message after adding product set products to the basket\n     *\n     * @property {string} data-text-network-error - network error text\n     */\n    class AddAllToCartMixin extends AddAllToCartMixinBase {\n        prefs() {\n            return {\n                classesBusy: 'm-busy',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Returns product set data for the set items\n         * @returns {array} result\n         */\n        getProductSetItems() {\n            const productSetItems = [];\n\n            this.eachChild((child) => {\n                if (child.prefs().productSetItem && this.productSetSelected(child)) {\n                    let isOutOfStock = false;\n\n                    child.getById('addToCart', (addToCart) => {\n                        isOutOfStock = !!addToCart.prefs().isOutOfStock;\n                    });\n\n                    productSetItems.push({\n                        pid: child.prefs().currentProductId || child.prefs().pid,\n                        quantity: child.prefs().selectedQuantity,\n                        available: !isOutOfStock,\n                        readyToOrder: child.prefs().readyToOrder\n                    });\n                }\n            });\n\n            return productSetItems;\n        }\n\n        /**\n         * @description returns product set item selection status\n         *\n         * @param {SetProductDetail} productSetItem - product set item ref element\n         * @returns {boolean} true flag if product set item selected\n         */\n        productSetSelected(productSetItem) {\n            const SET_ITEM_SELECTED_VALUE = 'on';\n\n            return productSetItem.productSelected() === SET_ITEM_SELECTED_VALUE;\n        }\n\n        /**\n         * @description checks that all selected product is added to cart\n         * @param {object} addToCartResult - add to cart result\n         * @param {number} productsCount - product count\n         * @returns {boolean} result\n         */\n        isAllProductAdded(addToCartResult, productsCount) {\n            return addToCartResult.messages && (addToCartResult.messages.length === productsCount);\n        }\n\n        /**\n         * @description shows post add to cart messages\n         * @param {boolean} showAccessibilityAlerts - use accessibility flag\n         * @param {Array.<string>} messages - array with messages\n         * @returns {string} result\n         */\n        getPostAddToCartMessage(showAccessibilityAlerts, messages) {\n            const message = showAccessibilityAlerts\n                ? this.prefs().accessibilityAlerts.addedsettocart\n                : messages.join('<br>');\n\n            return message;\n        }\n\n        /**\n         * @description checks that is current product set added to cart\n         * @param {SetProductDetail} currentProductSet - current product set\n         * @param {string} productID - added to cart product set item id\n         * @returns {boolean} result\n         */\n        isAddedToCartProductSet(currentProductSet, productID) {\n            return currentProductSet.prefs().productSetItem\n                && this.productSetSelected(currentProductSet)\n                && currentProductSet.prefs().pid\n                && currentProductSet.prefs().pid.toString() === productID;\n        }\n\n        /**\n         * @description gets added to cart product set items\n         * @param {object} cartModel - updated cart model\n         * @param {object} pidsObj - product set object\n         * @returns {Array.<SetProductDetail>} result\n         */\n        getAddedToCartProductSets(cartModel, pidsObj) {\n            const pidIDs = pidsObj.map((pidObj) => pidObj.pid.toString());\n            const addedSetItemsIDs = pidIDs.filter((pidID) => cartModel.itemsIds.includes(pidID));\n            const productWidgets = (addedSetItemsIDs || []).reduce((setWidgets, productID) => {\n                this.eachChild((child) => {\n                    if (this.isAddedToCartProductSet(child, productID)) {\n                        setWidgets.push(child);\n                    }\n                });\n\n                return setWidgets;\n            }, []);\n\n            return productWidgets;\n        }\n\n        /**\n         * @description Handles a result of product set adding to cart\n         * @param {object} response - response\n         * @param {boolean} isFullProductSet - Identifies if all product set items are added\n         * @param {number} productsCount - products count to be added to the cart\n         * @returns {void}\n         */\n        postAddAllToCart(response, isFullProductSet, productsCount) {\n            if (!response.error && response.cart && response.messages) {\n                const cartModel = response.cart;\n\n                cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n\n                const productSetItems = this.getProductSetItems();\n                const pidsObj = this.getPidsObj(productSetItems);\n                const isAllProductsAdded = this.isAllProductAdded(response, productsCount);\n                const showAccessibilityAlerts = isFullProductSet && isAllProductsAdded;\n                const message = this.getPostAddToCartMessage(showAccessibilityAlerts, response.messages);\n                const productWidgets = this.getAddedToCartProductSets(cartModel, pidsObj);\n\n                this.showAddAllToCartAlert(false, message);\n                this.showJustAddedProductCart(response);\n                this.eventBus().emit('product.added.to.cart', cartModel, this, productWidgets);\n            } else {\n                this.showAddAllToCartAlert(true, response.message);\n            }\n        }\n\n        /**\n         * @description shows cart quick view\n         *\n         * @param {object} response - result of the adding to cart call\n         * @param {object} response.cart - cart model\n         * @param {string} response.pid - added product identifier\n         */\n        showJustAddedProductCart(response) {\n            const cartModel = response.cart;\n            const productID = response.pid;\n            const subscriptionID = response.subscriptionID;\n            const pidsObj = response.pidsObj;\n\n            cartModel.action = response.action;\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                return;\n            }\n\n            if (!cartModel || !cartModel.numItems) {\n                return;\n            }\n\n            this.showProgressBar();\n\n            this.eventBus().emit('show.just.added.cart', {\n                productID,\n                cartModel,\n                subscriptionID,\n                pidsObj\n            });\n\n            cartModel.showMinicart = false;\n            this.eventBus().emit('cart.updated', { cartModel }, this);\n\n            if (window.contexts.includes('cart')) {\n                this.eventBus().emit('product.added.to.cart', { cartModel }, this);\n            } else {\n                this.eventBus().emit('just.added.product.to.cart', { cartModel }, this);\n            }\n\n            this.hideProgressBar();\n        }\n\n        showCartMessage(msg, error = false) {\n            this.getById(this.prefs().addToCartMsg, (addToCartMsg) => {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'spacesLength' does not exist on type 'Ad... Remove this comment to see the full error message\n                if (typeof this.spacesLength === 'undefined') {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'spacesLength' does not exist on type 'Ad... Remove this comment to see the full error message\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\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'spacesLength' does not exist on type 'Ad... Remove this comment to see the full error message\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        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    return AddAllToCartMixin;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/AlternativeImage').default>} BaseAlternativeImage\n */\n\n/**\n * @description AlternativeImage extension\n * @param {BaseAlternativeImage} BaseAlternativeImage Base widget for extending\n * @returns {typeof AlternativeImage} Alternative Image widget\n */\nexport default function (BaseAlternativeImage) {\n    /**\n     * @class AlternativeImage\n     * @augments BaseAlternativeImage\n     */\n    class AlternativeImage extends BaseAlternativeImage {\n        /**\n         * @description Prepare alternative image viewport dependent src.\n         * The trick is get already defined by browser image from set and prepare same image for alt.\n         * If project has completely different images on breakpoints this should be extended with\n         * update image src on viewport change.\n         * @returns {string} alternative image url\n         */\n        getAlternativeImageSrc() {\n            const altImageUrl = this.ref('alternativeViewContainer').attr('data-alt-image-url');\n            const baseImage = this.ref('tileImage').get();\n\n            if (!(baseImage instanceof HTMLImageElement) || !altImageUrl) {\n                return '';\n            }\n\n            const baseImageUrl = baseImage.currentSrc || baseImage.src;\n            const altImageUrlParsed = new URL(altImageUrl);\n            const baseImageUrlParsed = new URL(baseImageUrl);\n            const disQueryString = baseImageUrlParsed.search;\n\n            if (altImageUrlParsed.search === disQueryString) {\n                return altImageUrl;\n            }\n\n            return altImageUrlParsed.origin + altImageUrlParsed.pathname + disQueryString;\n        }\n    }\n\n    return AlternativeImage;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/Widget').default>} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Availability} Availability class\n */\n\nexport default function (Widget) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class Availability\n     * @augments Widget\n     * @classdesc Represents Availability component\n    */\n\n    class Availability extends Widget {\n        prefs() {\n            return {\n                pdpAvailability: {},\n                ...super.prefs()\n            };\n        }\n\n        openBackInStockDialog() {\n            this.has('backInStockDialogTemplate', backInStockDialogTemplate => {\n                this.eventBus().emit('dialogshow', {\n                    content: backInStockDialogTemplate.prop('innerHTML'),\n                    wrapperClasses: 'm-back_in-stock',\n                    windowClasses: 'b-dialog-bg'\n                });\n            });\n        }\n\n        /**\n         * @description Returns PDP availability object\n         * @returns {object} PDP availability object\n         */\n        getAvailability() {\n            return this.prefs().pdpAvailability;\n        }\n\n        /**\n         * @description Stores updated PDP availability\n         * @param {object} pdpAvailability updated PDP availability\n         * @returns {void}\n         */\n        setAvailability(pdpAvailability) {\n            this.setPref('pdpAvailability', JSON.stringify(pdpAvailability));\n        }\n    }\n\n    return Availability;\n}\n","/**\n * @typedef {ReturnType <typeof import('widgets/forms/InputCheckbox').default>} InputCheckbox\n */\n\n/**\n * @description Base InputCheckbox implementation\n * @param {InputCheckbox} InputCheckbox -  widget for extending\n * @returns {typeof BuyTogetherCheckbox} Input Checkbox class\n */\nexport default function (InputCheckbox) {\n    class BuyTogetherCheckbox extends InputCheckbox {\n        /**\n         * @description disables checkbox\n         */\n        disableCheckbox() {\n            this.ref('field').prop('disabled', true);\n        }\n\n        /**\n         * @description preselects checkbox\n         */\n        preselectCheckbox() {\n            this.ref('field').prop('checked', true);\n        }\n\n        /**\n         * unselects checkbox\n         */\n        unselectCheckbox() {\n            this.ref('field').prop('checked', false);\n        }\n    }\n\n    return BuyTogetherCheckbox;\n}\n","/**\n * @typedef {ReturnType<typeof import('core/product/SetProductDetail').default>} SetProductDetail\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputStepper').default>>} InputStepper\n */\n\n/**\n * @param {SetProductDetail} SetProductDetail Base SetProductDetail for extending\n * @returns {typeof BuyTogetherProduct} Availability class\n */\n\nexport default function (SetProductDetail) {\n    /**\n     * @class ProductDetail\n     * @augments SetProductDetail\n     */\n    class BuyTogetherProduct extends SetProductDetail {\n        prefs() {\n            return {\n                productAvailable: false,\n                recommenderProduct: false,\n                recommendationProductId: '',\n                lowStockMessage: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.recommendationAvailable = this.prefs().productAvailable;\n        }\n\n        /**\n         * @description Handles product pre selection\n         */\n        preselectProduct() {\n            if (!this.prefs().productAvailable) {\n                return;\n            }\n\n            this.ref('self').addClass(this.prefs().selectedClass);\n\n            this.getById('selectProduct', (selectProduct) => {\n                selectProduct.preselectCheckbox();\n            });\n\n            if (this.prefs().recommenderProduct) {\n                this.getById('selectProduct', (selectProduct) => {\n                    selectProduct.disableCheckbox();\n                });\n            }\n        }\n\n        /**\n         * @description After change attribute handler\n         * @param {object} response response object\n         * @returns {void}\n         */\n        afterChangeAttribute(response) {\n            super.afterChangeAttribute(response);\n\n            this.eventBus().emit('update.buy.together.recommendation', response?.product?.id, this.getRecommendationProductId());\n        }\n\n        /**\n         * @description Updates selection flag\n         * @param {boolean} selectionFlag - selection flag\n         * @param {string} selectionValue - selection value\n         */\n        updateProductSelection(selectionFlag) {\n            if (!selectionFlag) {\n                this.getById('selectProduct', (selectProduct) => {\n                    selectProduct.unselectCheckbox();\n                });\n            } else if (selectionFlag) {\n                this.getById('selectProduct', (selectProduct) => {\n                    selectProduct.preselectCheckbox();\n                });\n            }\n        }\n\n        /**\n         * @description updates availability section\n         * @param {object} product - product object\n         * @returns {Promise} rendering promise\n         */\n        updateAvailabilitySection(product) {\n            if (product) {\n                const isProductSelected = product.buyTogetherRecommender || this.productSelected() === 'on';\n\n                product.selected = isProductSelected;\n                product.disabled = product.buyTogetherRecommender;\n\n                this.updateProductSelection(isProductSelected);\n            }\n\n            this.recommendationAvailable = product.available;\n\n            return this.render('availabilityTogetherTemplate', product, this.ref('availabilityTogetherContainer'));\n        }\n\n        /**\n         * @description updates availability badge\n         * @param {object} product - product object\n         * @returns {void}\n         */\n        updateAvailabilityBadge(product) {\n            if (!product) {\n                return;\n            }\n\n            const isReachedLimit = (product.readyToOrder || product.isInaccessibleVariant) && product.availability.isReachedLimit;\n            let lowStockMessage = '';\n\n            if (product.availability.isLowStock) {\n                lowStockMessage = product.availability.messages[0];\n            } else if (product.plpAvailability.available && product.plpAvailability.stock) {\n                lowStockMessage = this.prefs().lowStockMessage.replace('{0}', product.plpAvailability.stock);\n            }\n\n            const renderingData = {\n                reachedLimitMessage: isReachedLimit ? product.availability.isReachedLimitMessage : '',\n                hasPromotions: !!product.promotions,\n                promotions: product.promotions,\n                lowStockMessage\n            };\n\n            this.render('additionalInfoTemplate', renderingData, this.ref('additionalInfoContainer'));\n        }\n\n        /**\n         * @description Updates recommendation item quantity\n         * @param {number} selectedQuantity - selected quantity\n         */\n        updateQuantity(selectedQuantity) {\n            this.config.selectedQuantity = selectedQuantity;\n\n            this.getById('quantityBlock', (quantityBlock) => {\n                quantityBlock.render(\n                    'template',\n                    { selectedQuantity },\n                    quantityBlock.ref('container')\n                );\n            });\n        }\n\n        /**\n         * @description Updates recommendation item total\n         * @param {object} product - recommendation product\n         * @param {object} product.subtotal - recommendation product subtotal\n         */\n        updateTotal(product) {\n            if (!product.subtotal) {\n                return;\n            }\n\n            this.ref('totalPrice').hide();\n\n            const productSetPriceBlock = this.getById('totalPriceBlock', (priceBlock) => {\n                return priceBlock.ref('self');\n            });\n\n            this.render('setPriceTpl', { price: product.subtotal }, productSetPriceBlock);\n        }\n\n        /**\n         * @description gets recommendation product id\n         * @returns {string} recommendation product id\n         */\n        getRecommendationProductId() {\n            return this.prefs().recommendationProductId;\n        }\n    }\n\n    return BuyTogetherProduct;\n}\n","import { getJSONByUrl } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('core/product/ProductSet').default>} ProductSet\n * @typedef {ReturnType<typeof import('core/product/BuyTogetherProduct').default>} BuyTogetherProduct\n */\n\n/**\n * @param {ProductSet} ProductSet Base ProductSet for extending\n * @returns {typeof BuyTogetherProduct} Availability class\n */\n\nexport default function (ProductSet) {\n    /**\n     * @class ProductDetail\n     * @augments ProductSet\n     */\n    class BuyTogetherProduct extends ProductSet {\n        prefs() {\n            return {\n                preselectFirstCollection: false,\n                preselectRecommendations: false,\n                selectRecommendationItemUrl: '',\n                updateBuyTogetherItemsUrl: '',\n                priceState: null,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.initEvents();\n\n            this.preselectRecommendations();\n            this.initRecommendationTotal();\n        }\n\n        /**\n         * @description inits widget events\n         */\n        initEvents() {\n            this.eventBus().on('update.buy.together.recommendation', 'updateRecommendation');\n        }\n\n        /**\n         * @description inits buy together recommendation total price\n         */\n        initRecommendationTotal() {\n            if (this.prefs().priceState) {\n                this.updatePriceTotal(this.prefs().priceState);\n                this.togglePriceTotals(true, false);\n                this.manageAddSetToCart(true);\n            }\n        }\n\n        /**\n         * Getters\n         */\n\n        /**\n         * @description gets all buy together items\n         * @returns {Array.<BuyTogetherProduct>} buy together products\n         */\n        getBuyTogetherItems() {\n            const buyTogetherProduct = this.getConstructor('buyTogetherProduct');\n            const recommendations = [];\n\n            this.eachChild((child) => {\n                if (child instanceof buyTogetherProduct) {\n                    recommendations.push(child);\n                }\n            });\n\n            return recommendations;\n        }\n\n        /**\n         * @description gets all selected buy together items\n         * @returns {Array.<BuyTogetherProduct>} selected buy together products\n         */\n        getSelectedRecommendations() {\n            const recommendationItems = this.getBuyTogetherItems();\n            const selectedRecommendations = recommendationItems.filter((recommendationItem) => {\n                return recommendationItem.productSelected() && !recommendationItem.prefs().recommenderProduct;\n            });\n\n            return selectedRecommendations;\n        }\n\n        /**\n         * @description gets all pattern products\n         * @returns {Array.<BuyTogetherProduct>} pattern products\n         */\n        getRecommender() {\n            const recommendationItems = this.getBuyTogetherItems();\n            const selectedRecommendations = recommendationItems.filter((recommendationItem) => {\n                return recommendationItem.prefs().recommenderProduct;\n            });\n\n            return selectedRecommendations;\n        }\n\n        /**\n         * @description gets selected buy together products\n         * @returns {Array.<BuyTogetherProduct>} selected buy together products\n         */\n        getSelectedBuyTogetherItems() {\n            const recommendationItems = this.getBuyTogetherItems();\n            const selectedBuyTogetherItems = recommendationItems.filter((recommendationItem) => {\n                return recommendationItem.productSelected();\n            });\n\n            return selectedBuyTogetherItems;\n        }\n\n        /**\n         * @description gets selected buy together items IDs\n         * @returns {Array.<string>} array with items IDs\n         */\n        getSelectedRecommendationIDs() {\n            const selectedRecommendations = this.getSelectedBuyTogetherItems();\n            const recommendationIDs = (selectedRecommendations || []).map((selectedRecommendation) => {\n                return selectedRecommendation.getProductId().toString();\n            });\n\n            return recommendationIDs;\n        }\n\n        /**\n         * @typedef {object} ProductSetItem\n         * @property {boolean} available - availability flag\n         * @property {number} pid - product id\n         * @property {string} quantity - product quantity\n         */\n\n        /**\n         * @description returns an array with products available for ordering\n         * @param {Array.<ProductSetItem>} productSetItems - product set data for the set items\n         * @returns {Array.<object>} result\n         */\n        getPidsObj(productSetItems) {\n            return productSetItems.filter(setItem => setItem.available).map((childProduct) => {\n                const pid = typeof childProduct.pid === 'number'\n                    ? childProduct.pid.toString()\n                    : childProduct.pid;\n\n                return {\n                    pid,\n                    qty: childProduct.quantity\n                };\n            });\n        }\n\n        /**\n         * @description gets recommendation variants\n         * @returns {object} result\n         */\n        getRecommendationsVariants() {\n            const recommendationItems = this.getBuyTogetherItems();\n\n            const selectedRecommendationVariants = recommendationItems.reduce((recommendationVariants, recommendationItem) => {\n                const recommendationItemID = recommendationItem.getRecommendationProductId().toString();\n                const recommendationVariantID = recommendationItem.getProductId().toString();\n\n                if (recommendationItemID !== recommendationVariantID) {\n                    recommendationVariants[recommendationItemID] = recommendationVariantID;\n                }\n\n                return recommendationVariants;\n            }, {});\n\n            return selectedRecommendationVariants;\n        }\n\n        /**\n         * Methods\n         */\n\n        /**\n         * @description updates buy together recommendation total\n         * @param {object} priceTotal - buy together recommendation total price\n         */\n        updatePriceTotal(priceTotal) {\n            const productSetPriceBlock = this.getById('priceBlock', (priceBlock) => priceBlock.ref('self'));\n\n            this.render('setPriceTpl', { price: priceTotal }, productSetPriceBlock);\n        }\n\n        /**\n         * @description preselects recommendation items\n         */\n        preselectRecommendations() {\n            if (!this.prefs().preselectRecommendations) {\n                return;\n            }\n\n            const recommendations = this.getBuyTogetherItems();\n\n            recommendations.forEach((recommendation) => recommendation.preselectProduct());\n        }\n\n        /**\n         * @description updates recommendation items\n         * @param {Array.<object>} recommendationItems - updated recommendation items\n         */\n        updateRecommendationItems(recommendationItems) {\n            recommendationItems.forEach((recommendationItem) => {\n                this.getById(`buyTogetherProduct-${recommendationItem.buyTogetherRecommendationID}`, (buyTogetherProduct) => {\n                    buyTogetherProduct.updateQuantity(recommendationItem.recommendationQuantity);\n                    buyTogetherProduct.updateTotal(recommendationItem);\n                    buyTogetherProduct.updateAvailabilitySection(recommendationItem);\n                    buyTogetherProduct.updateAvailabilityBadge(recommendationItem);\n                });\n            });\n        }\n\n        /**\n         * @description checks that buy together recommendation set is unavailable\n         * @returns {boolean} result\n         */\n        isBuyTogetherRecommendationsUnavailable() {\n            const allRecommendations = this.getBuyTogetherItems();\n\n            return allRecommendations.every((recommendation) => {\n                return !recommendation.recommendationAvailable;\n            });\n        }\n\n        /**\n         * @description checks that product recommendation set has any selected recommendations\n         * @returns {boolean} result\n         */\n        hasSelectedProducts() {\n            const selectedProducts = this.getSelectedBuyTogetherItems();\n\n            return !!selectedProducts.length;\n        }\n\n        /**\n         * @description handles updates for unavailable buy together recommendation set\n         * @param {object} total - buy together recommendation total price\n         */\n        handleAvailabilityRecommendationSet(total) {\n            if (this.isBuyTogetherRecommendationsUnavailable() || total.zeroPrice) {\n                this.togglePriceTotals(false, true);\n                this.manageAddSetToCart(false);\n            } else {\n                const hasAnySelectedProducts = this.hasSelectedProducts();\n\n                if (hasAnySelectedProducts) {\n                    this.togglePriceTotals(true, false);\n                    this.updatePriceTotal(total);\n                } else {\n                    this.togglePriceTotals(false, true);\n                }\n\n                this.manageAddSetToCart(hasAnySelectedProducts);\n            }\n        }\n\n        /**\n         * @description handles product selection result\n         * @param {object} response - result\n         * @param {object} response.total - updated total price\n         */\n        handleSelectedProductResult(response) {\n            if (response && response.total) {\n                const { total } = response;\n                const hasAnySelectedProducts = this.hasSelectedProducts();\n\n                if (hasAnySelectedProducts) {\n                    const productSetPriceBlock = this.getById('priceBlock', (priceBlock) => priceBlock.ref('self'));\n\n                    this.render('setPriceTpl', { price: total }, productSetPriceBlock)\n                        .then(this.togglePriceTotals.bind(this, true, false));\n                } else {\n                    this.togglePriceTotals(false, true);\n                }\n\n                this.manageAddSetToCart(hasAnySelectedProducts);\n            } else {\n                this.togglePriceTotals(false, true);\n                this.manageAddSetToCart(false);\n            }\n        }\n\n        /**\n         * @description handles recommendation update\n         * @param {object} response - updating result\n         * @param {string} updatedProductID - updated product id\n         * @param {string} recommendationID - recommendation product id\n         * @returns {void}\n         */\n        handleUpdateRecommendation(response, updatedProductID, recommendationID) {\n            if (!updatedProductID || !recommendationID) {\n                return;\n            }\n\n            const recommendationVariant = (response.recommendationItems || []).find((recommendationItem) => {\n                return recommendationItem.id === updatedProductID;\n            });\n\n            if (!recommendationVariant) {\n                return;\n            }\n\n            this.getById(`buyTogetherProduct-${recommendationID}`, (buyTogetherProduct) => {\n                buyTogetherProduct.updateQuantity(recommendationVariant.recommendationQuantity);\n                buyTogetherProduct.updateTotal(recommendationVariant);\n                buyTogetherProduct.updateAvailabilitySection(recommendationVariant);\n                buyTogetherProduct.updateAvailabilityBadge(recommendationVariant);\n            });\n\n            if (recommendationVariant.buyTogetherRecommender) {\n                this.getById('buyTogetherPattern', (buyTogetherProduct) => {\n                    buyTogetherProduct.updateQuantity(recommendationVariant.recommendationQuantity);\n                    buyTogetherProduct.updateTotal(recommendationVariant);\n                    buyTogetherProduct.updateAvailabilityBadge(recommendationVariant);\n                    buyTogetherProduct.updateAvailabilitySection(recommendationVariant)\n                        .then(() => { this.handleAvailabilityRecommendationSet(response.total); });\n                });\n            } else {\n                this.handleAvailabilityRecommendationSet(response.total);\n            }\n        }\n\n        /**\n         * @description handles collection update result\n         * @param {object} response - result\n         * @param {Array.<object>} response.recommendationItems - array with updated recommendations\n         * @param {object} response.total - updated buy together total\n         */\n        handleUpdateCollectionResult(response) {\n            if (!response || !response.recommendationItems || !response.total) {\n                return;\n            }\n\n            this.handleAvailabilityRecommendationSet(response.total);\n            this.updateRecommendationItems(response.recommendationItems);\n        }\n\n        /**\n         * Callbacks\n         */\n\n        /**\n         * @description Server request to get product set info/prices etc depending on pre-selected products\n         * @returns {void}\n         */\n        onProductSelected() {\n            const selectedRecommendations = this.getSelectedRecommendationIDs();\n            const recommendationsVariants = this.getRecommendationsVariants();\n            let currentCollection = '';\n\n            this.getById('collectionSelector', (collectionSelector) => {\n                currentCollection = collectionSelector.getValue();\n            });\n\n            getJSONByUrl(this.prefs().selectRecommendationItemUrl, {\n                recommenderProductID: this.prefs().pid,\n                selectedBuyTogetherItems: selectedRecommendations.join(','),\n                selectedCollection: currentCollection,\n                recommendationsVariants: JSON.stringify(recommendationsVariants)\n            }).then(this.handleSelectedProductResult.bind(this));\n        }\n\n        /**\n         * @description handles collection update event\n         * @param {import(\"widgets/toolbox/RefElement\").RefElement} collectionSelector - collection selector\n         */\n        onUpdateCollection(collectionSelector) {\n            const selectedRecommendations = this.getSelectedRecommendationIDs();\n            const recommendationsVariants = this.getRecommendationsVariants();\n\n            getJSONByUrl(this.prefs().updateBuyTogetherItemsUrl, {\n                recommenderProductID: this.prefs().pid,\n                selectedBuyTogetherItems: selectedRecommendations.join(','),\n                selectedCollection: collectionSelector.getValue(),\n                recommendationsVariants: JSON.stringify(recommendationsVariants)\n            }).then(this.handleUpdateCollectionResult.bind(this));\n        }\n\n        /**\n         * @description updates recommendation\n         * @param {object} updatedProduct - updated product\n         * @param {string} recommendationID - recommendation id\n         */\n        updateRecommendation(updatedProduct, recommendationID) {\n            const selectedRecommendations = this.getSelectedRecommendationIDs();\n            const recommendationsVariants = this.getRecommendationsVariants();\n            let currentCollection = '';\n\n            this.getById('collectionSelector', (collectionSelector) => {\n                currentCollection = collectionSelector.getValue();\n            });\n\n            getJSONByUrl(this.prefs().updateBuyTogetherItemsUrl, {\n                recommenderProductID: this.prefs().pid,\n                selectedBuyTogetherItems: selectedRecommendations.join(','),\n                selectedCollection: currentCollection,\n                recommendationsVariants: JSON.stringify(recommendationsVariants)\n            }).then((response) => this.handleUpdateRecommendation(response, updatedProduct, recommendationID));\n        }\n    }\n\n    return BuyTogetherProduct;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/ColorSwatch').default>} BaseColorSwatch\n */\n\n/**\n * @description Base ColorSwatch implementation\n * @param {BaseColorSwatch} BaseColorSwatch Base widget for extending\n * @returns {typeof ColorSwatch} Color Swatch widget\n */\nexport default function (BaseColorSwatch) {\n    /**\n     * @class ColorSwatch\n     * @augments BaseColorSwatch\n     */\n    class ColorSwatch extends BaseColorSwatch {\n        prefs() {\n            return {\n                classesShowAll: 'm-show_all',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            if (this.isSelectedOptionHidden()) {\n                this.toggleView();\n            }\n        }\n\n        isSelectedOptionHidden() {\n            return Object.values(this.refs).some(ref => {\n                return ref.data('variationSwatch')\n                    ? ref.data('attrIsSelected') && ref.data('attrIsHidden')\n                    : false;\n            });\n        }\n\n        toggleView() {\n            if (this.showAll) {\n                this.ref('self').removeClass(this.prefs().classesShowAll);\n                this.showAll = false;\n            } else {\n                this.ref('self').addClass(this.prefs().classesShowAll);\n                this.showAll = true;\n            }\n\n            this.eventBus().emit('highlighter.update');\n        }\n    }\n\n    return ColorSwatch;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/product/AddToCartMixin').default>} BaseAddToCartMixin\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputTextTypeNumber').default>>} inputTextTypeNumber\n * @typedef {InstanceType<ReturnType<typeof import('core/forms/ajax/EVoucherDataForm').default>>} eVoucherDataForm\n */\n\n/**\n * @param {BaseAddToCartMixin} BaseAddToCartMixin Base widget for extending\n * @returns {typeof EProductAddToCartMixin} EProductAddToCartMixin class\n */\n\nexport default function (BaseAddToCartMixin) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class EProductAddToCartMixin\n     * @augments BaseAddToCartMixin\n     * @classdesc Represents EProductAddToCartMixin component\n    */\n\n    class EProductAddToCartMixin extends BaseAddToCartMixin {\n        prefs() {\n            return {\n                removeProductUrl: '',\n                eproductType: 'gift-certificate',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Add product to cart depending on e-product type\n         * If e-product type is `e-voucher`, validates e-voucher data form and in case if form is not valid - not performing add to cart action\n         * @param {button} button add to cart button\n         * @returns {void}\n         */\n        addToCart(button) {\n            this.validateAndSubmit(button, this.doAddToCart);\n        }\n\n        /**\n         * @description Method, which sends a real request for add e-product to cart\n         * Includes amount of e-product, chosen by customer\n         * @param {button} button add to cart button\n         * @param {object} eVoucherData e-voucher form data if exists\n         * @returns {void}\n         */\n        doAddToCart(button, eVoucherData = {}) {\n            if (this.prefs().processingRequest) {\n                return;\n            }\n\n            if (!this.prefs().readyToOrder) {\n                this.showCartMessage(this.prefs().textSelectOptions, true);\n\n                return;\n            }\n\n            if (this.stock && this.stock < this.prefs().selectedQuantity) {\n                this.showCartMessage(this.prefs().textStockLimit, true);\n\n                return;\n            }\n\n            this.setPref('processingRequest', true);\n            button.startProcess();\n\n            this.showProgressBar();\n\n            const addToCartBtnPrefs = button.prefs();\n            const amount = this.getEProductAmount();\n\n            submitFormJson(addToCartBtnPrefs.addToCartUrl, {\n                pid: this.prefs().currentProductId || addToCartBtnPrefs.pid,\n                quantity: this.prefs().selectedQuantity || addToCartBtnPrefs.selectedQuantity,\n                // @ts-ignore\n                options: this.getSelectedProductOptions(),\n                childProducts: this.prepareChildProducts(this.prefs().bundledProducts),\n                amount: amount > 0 ? amount.toString() : '',\n                ...eVoucherData\n            }).then((response) => {\n                this.setPref('processingRequest', false);\n                this.postAddProduct(response);\n\n                button.stopProcess();\n                this.hideProgressBar();\n            })\n                .catch(() => {\n                    this.setPref('processingRequest', false);\n                    button.stopProcess();\n                    this.hideProgressBar();\n\n                    this.showCartMessage(this.prefs().textNetworkError, true);\n                });\n        }\n\n        /**\n         * @description Action after success add to cart.\n         * If product type is `gift-certificate` - no changes to base flow\n         * If product type is `e-voucher`:\n         * In case if no error - trying to save e-voucher data to PLI on server\n         * In case of saving e-voucher data error - removes PLI from cart\n         * @param {object} response server response\n         * @returns {void}\n         */\n        postAddProduct(response) {\n            if (this.prefs().eproductType !== 'e-voucher') {\n                super.postAddProduct(response);\n\n                return;\n            }\n\n            if (response.eVoucherFormErrors) {\n                this.getById('eVoucherDataForm', eVoucherDataForm => {\n                    eVoucherDataForm.onSubmitted(response);\n                });\n\n                return;\n            }\n\n            super.postAddProduct(response);\n        }\n    }\n\n    return EProductAddToCartMixin;\n}\n","// @ts-nocheck\nimport { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/product/AddToCartMixin').default>} AddToCartMixin\n * @typedef {ReturnType<typeof import('widgets/global/ProcessButton').default>} ProcessButton\n */\n\n/**\n * @description just added product to cart mixin widget\n * @param {AddToCartMixin} AddToCartMixin Base widget for extending\n * @returns {typeof EProductJustAddedProductToCartMixin} ProductDetail class\n */\nexport default function (AddToCartMixin) {\n    class EProductJustAddedProductToCartMixin extends AddToCartMixin {\n        prefs() {\n            return {\n                removeProductUrl: '',\n                eproductType: 'gift-certificate',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Add product to cart depending on e-product type\n         * If e-product type is `e-voucher`, validates e-voucher data form and in case if form is not valid - not performing add to cart action\n         * @param {button} button add to cart button\n         * @returns {void}\n         */\n        addToCart(button) {\n            const addToCartBtnPrefs = button.prefs();\n\n            if (!addToCartBtnPrefs.justAddedRecommendationAddToCart) {\n                this.validateAndSubmit(button, this.doAddToCart);\n\n                return;\n            }\n\n            this.validateAndSubmit(button, this.addJustAddedProductRecommendation);\n        }\n\n        /**\n         * @description Action after success add to cart.\n         * If product type is `gift-certificate` - no changes to base flow\n         * If product type is `e-voucher`:\n         * In case if no error - trying to save e-voucher data to PLI on server\n         * In case of saving e-voucher data error - removes PLI from cart\n         * @param {object} response server response\n         * @returns {void}\n         */\n        postAddProduct(response) {\n            if (this.prefs().eproductType === 'e-voucher' && response.eVoucherFormErrors) {\n                this.getById('eVoucherDataForm', eVoucherDataForm => {\n                    eVoucherDataForm.onSubmitted(response);\n                });\n\n                return;\n            }\n\n            if (response.justAddedProductCart && !this.isEProductAddedFromWishlist(response.cart, response.pid)) {\n                this.showJustAddedProductCart(response);\n\n                if (!response.error && response.subscriptionUUID) {\n                    this.eventBus().emit('added.subscription.product.line.item');\n                }\n\n                if (response.availability) {\n                    this.postAddProductAvailability(response);\n                }\n            } else {\n                this.showMiniCart(response);\n            }\n        }\n\n        /**\n         * @description Add Linked Subscription data to request\n         * @param {object} params request\n         */\n        addLinkedSubscriptionObj(params) {\n            this.eachChild((child) => {\n                if (child.prefs().isLinkedSubscription) {\n                    child.getById('selectSubscriptionProduct', (subscriptionProduct) => {\n                        if (subscriptionProduct.getValue() === 'on') {\n                            params.subscriptionPidObj = JSON.stringify({\n                                pid: child.prefs().linkedSubscriptionId,\n                                qty: 1\n                            });\n                        }\n                    });\n                }\n            });\n        }\n\n        /**\n         * @description Method, which sends a real request for add e-product to cart\n         * Includes amount of e-product, chosen by customer\n         * @param {button} button add to cart button\n         * @param {object} eVoucherData e-voucher form data if exists\n         * @returns {void}\n         */\n        doAddToCart(button, eVoucherData = {}) {\n            if (this.prefs().processingRequest) {\n                return;\n            }\n\n            if (!this.prefs().readyToOrder) {\n                this.showCartMessage(this.prefs().textSelectOptions, true);\n\n                return;\n            }\n\n            if (this.stock && this.stock < this.prefs().selectedQuantity) {\n                this.showCartMessage(this.prefs().textStockLimit, true);\n\n                return;\n            }\n\n            this.setPref('processingRequest', true);\n            button.startProcess();\n\n            this.showProgressBar();\n\n            const addToCartBtnPrefs = button.prefs();\n            const amount = this.getEProductAmount();\n\n            const params = {\n                pid: this.prefs().currentProductId || addToCartBtnPrefs.pid,\n                quantity: this.prefs().selectedQuantity || addToCartBtnPrefs.selectedQuantity,\n                // @ts-ignore\n                options: this.getSelectedProductOptions(),\n                childProducts: this.prepareChildProducts(this.prefs().bundledProducts),\n                amount: amount > 0 ? amount.toString() : '',\n                ...eVoucherData\n            };\n\n            this.addLinkedSubscriptionObj(params);\n\n            submitFormJson(addToCartBtnPrefs.addToCartUrl, params).then((response) => {\n                this.setPref('processingRequest', false);\n                this.postAddProduct(response);\n\n                button.stopProcess();\n                this.hideProgressBar();\n            })\n                .catch(() => {\n                    this.setPref('processingRequest', false);\n                    button.stopProcess();\n                    this.hideProgressBar();\n\n                    this.showCartMessage(this.prefs().textNetworkError, true);\n                });\n        }\n\n        /**\n         * @description checks that is idea product\n         *\n         * @param {object} response - result of the adding to cart call\n         * @param {object} response.cart - cart model\n         * @param {string} response.pid - added product identifier\n         * @returns {boolean} result\n         */\n        isIdeaProduct(response) {\n            const { pid, cart } = response;\n\n            const productModel = cart.items.find(item => item.id === pid);\n\n            return productModel && productModel.isIdea;\n        }\n\n        showMiniCart(response) {\n            if (!response.error && response.cart) {\n                this.emit('productadded');\n                const cartModel = response.cart;\n\n                cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n                this.eventBus().emit('product.added.to.cart', cartModel, this);\n\n                if (this.prefs().showAlertOnProductAdd) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'addedtocart' does not exist on type '{ q... Remove this comment to see the full error message\n                    const accessibilityAlert = this.prefs().accessibilityAlerts.addedtocart;\n\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            if (response && response.availability) {\n                this.postAddProductAvailability(response);\n            }\n        }\n\n        /**\n         * @description checks that is product added from wishlist\n         * @param {object} cart - cart object\n         * @param {string} pid - recently added product id\n         * @returns {boolean} result\n         */\n        isEProductAddedFromWishlist(cart, pid) {\n            let result = false;\n\n            if (!cart && !cart.items) {\n                return result;\n            }\n\n            const justAddedItems = cart.items.filter((item) => item.id === pid);\n            const justAddedItem = justAddedItems.pop();\n\n            if (!justAddedItem) {\n                return result;\n            }\n\n            result = (justAddedItem.isEVoucher || justAddedItem.isGiftCard) && justAddedItem.isAddedFromWishList;\n\n            return result;\n        }\n    }\n\n    return EProductJustAddedProductToCartMixin;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('core/product/ProductDetail').default>} BaseProductDetail\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputStepper').default>>} InputStepper\n * @typedef {InstanceType<ReturnType<typeof import('core/forms/InputTextTypeNumber').default>>} inputTextTypeNumber\n */\n\n/**\n * @param {BaseProductDetail} BaseProductDetail Base widget for extending\n * @returns {typeof EProductProductDetail} EProductProductDetail class\n */\n\nexport default function (BaseProductDetail) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class EProductProductDetail\n     * @augments BaseProductDetail\n     * @classdesc Represents EProductProductDetail component\n    */\n\n    class EProductProductDetail extends BaseProductDetail {\n        init() {\n            super.init();\n            this.otherAmountSelected = false;\n        }\n\n        /**\n         * @description Validate eProduct forms\n         * @param {object} button Dom element\n         * @param {object} cb Callback function\n         * @returns {void}\n         */\n        validateAndSubmit(button, cb) {\n            const customAmountInput = this.getById('otherAmount', (/** @type {inputTextTypeNumber} */ customAmount) => customAmount);\n            const eVoucherDataForm = this.getById('eVoucherDataForm', (/** @type {eVoucherDataForm} */ eVoucherData) => eVoucherData);\n            const pass1 = customAmountInput.shown ? customAmountInput.validate() : true;\n            const pass2 = eVoucherDataForm ? eVoucherDataForm.validate() : true;\n\n            if (pass1 && pass2) {\n                if (eVoucherDataForm) {\n                    cb.bind(this, button, eVoucherDataForm.getFormFields())();\n                } else {\n                    cb.bind(this, button)();\n                }\n            }\n        }\n\n        /**\n         * @description Get eProduct amount\n         * @param {object} button Dom element\n         * @param {object} cb Callback function\n         * @returns {void}\n         */\n        getEProductAmount() {\n            let amount = 0;\n\n            this.getById('otherAmount', (/** @type {inputTextTypeNumber} */otherAmount) => {\n                const otherAmountValue = otherAmount.getValue();\n\n                amount = otherAmountValue ? parseInt(otherAmountValue, 10) : 0;\n            });\n\n            if (!amount) {\n                this.getById('eproductAmount', (/** @type {select} */eproductAmount) => {\n                    amount = eproductAmount.getValue();\n                });\n            }\n\n            return amount;\n        }\n\n        /**\n         * @description initial updateProduct handler\n         * @param {object} updateBtn Response object\n         * @returns {void}\n         */\n        updateProduct(updateBtn) {\n            this.validateAndSubmit(updateBtn, this.doUpdateProduct);\n        }\n\n        /**\n         * @description Update line item\n         * @param {object} updateBtn Response object\n         * @param {object} eVoucherData eVoucher form\n         * @returns {Promise<object>} Promise object represents server response for product updating\n         */\n        doUpdateProduct(updateBtn, eVoucherData = {}) {\n            const productOption = this.prefs().productOptions[0];\n            const selectedOptions = this.getSelectedProductOptions();\n            const isSelectedOptionsValid = this.validateProductOptions(selectedOptions);\n\n            if (!isSelectedOptionsValid) {\n                return Promise.resolve(null);\n            }\n\n            const amount = this.getEProductAmount();\n\n            return submitFormJson(\n                updateBtn.ref('self').attr('data-update-url'),\n                {\n                    pid: this.prefs().currentProductId || updateBtn.prefs().pid,\n                    quantity: this.prefs().selectedQuantity || updateBtn.ref('self').attr('data-selected-quantity') || 1,\n                    uuid: updateBtn.ref('self').attr('data-uuid'),\n                    amount: amount > 0 ? amount.toString() : '',\n                    ...eVoucherData,\n                    ...this.getAdditionalProductData(productOption)\n                }\n            )\n                .then((response) => {\n                    this.afterUpdateProduct(response);\n\n                    return response;\n                })\n                .finally(() => {\n                    this.emit('updated');\n                });\n        }\n\n        changeAmount(selectWidget) {\n            const selected = selectWidget.getSelectedOptions();\n            const otherAmountSelected = selected && selected.data('eproductCustomOption');\n\n            this.getById('otherAmount', (/** @type {inputTextTypeNumber} */otherAmount) => {\n                this.otherAmountSelected = otherAmountSelected;\n                otherAmount[otherAmountSelected ? 'show' : 'hide']();\n                otherAmount.setValue('', true);\n                otherAmount.setRequired(false);\n\n                if (otherAmountSelected) {\n                    otherAmount.setRequired(true);\n                    otherAmount.focus();\n                }\n            });\n        }\n    }\n\n    return EProductProductDetail;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('widgets/product/AddToCartMixin').default>} BaseAddToCartMixin\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n */\n\n/**\n * @param {BaseAddToCartMixin} BaseAddToCartMixin Base widget for extending\n * @returns {typeof PlusProductAddToCartMixin} PlusProductAddToCartMixin class\n */\n\nexport default function (BaseAddToCartMixin) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class EProductAddToCartMixin\n     * @augments BaseAddToCartMixin\n     * @classdesc Represents EProductAddToCartMixin component\n    */\n\n    class PlusProductAddToCartMixin extends BaseAddToCartMixin {\n        prefs() {\n            return {\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Add product to cart\n         * @param {button} button add to cart button\n         * @returns {void}\n         */\n        addToCart(button) {\n            if (this.prefs().processingRequest) {\n                return;\n            }\n\n            this.setPref('processingRequest', true);\n            button.startProcess();\n\n            this.showProgressBar();\n\n            const addToCartBtnPrefs = button.prefs();\n\n            submitFormJson(addToCartBtnPrefs.addToCartUrl, {\n                pid: this.prefs().pid,\n                quantity: this.prefs().selectedQuantity\n            }).then((response) => {\n                this.setPref('processingRequest', false);\n                this.postAddProduct(response);\n\n                button.stopProcess(this.prefs().addedToCartLabel);\n                this.hideProgressBar();\n\n                this.getById('addToCartSticky', addToCartBtn => {\n                    addToCartBtn.stopProcess(this.prefs().addedToCartLabel);\n                });\n            })\n                .catch(() => {\n                    this.setPref('processingRequest', false);\n                    button.stopProcess();\n                    this.hideProgressBar();\n\n                    this.showCartMessage(this.prefs().textNetworkError, true);\n                });\n        }\n    }\n\n    return PlusProductAddToCartMixin;\n}\n","import localStorageWrapper from 'widgets/toolbox/localStorageWrapper';\n\n/**\n * @typedef {ReturnType<typeof import('core/product/ProductDetail').default>} ProductDetail\n */\n\n/**\n * @param {ProductDetail} ProductDetail Base widget for extending\n * @returns {typeof PlusProductDetail} plusProductDetail class\n */\n\nexport default function (ProductDetail) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class PlusProductDetail\n     * @augments ProductDetail\n     * @classdesc Represents PlusProductDetail component\n    */\n\n    class PlusProductDetail extends ProductDetail {\n        init() {\n            super.init();\n            this.eventBus().on('remove.product.line.item', 'updateAddToCartBtn');\n        }\n\n        updateAddToCartBtn() {\n            const itemIds = localStorageWrapper.getItem('cartItemIds');\n\n            if (!this.prefs().isCustomerSubscribed && itemIds && !itemIds.includes(this.prefs().pid)) {\n                this.getById('addToCart', addToCartBtn => {\n                    addToCartBtn.enable();\n                    addToCartBtn.setText(this.prefs().addToCartLabel);\n                });\n\n                this.getById('addToCartSticky', addToCartBtn => {\n                    addToCartBtn.enable();\n                    addToCartBtn.setText(this.prefs().addToCartLabel);\n                });\n            }\n        }\n    }\n\n    return PlusProductDetail;\n}\n","import { scrollWindowTo } from 'widgets/toolbox/scroll';\nimport { getContentByUrl, getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { timeout } from 'widgets/toolbox/util';\nimport { showErrorLayout } from 'widgets/toolbox/util';\nimport { submitFormJsonWithAbort } from 'widgets/toolbox/ajax';\n\nconst CLICK_EVENT_ID = 'navigation.click.event';\nconst GTM_EVENT_NAME = 'data-layer-event';\nconst GTM_LABEL_SELECTOR = 'gtmEventLabel';\n\nconst REVIEWS_REF_ID = 'reviews';\n/**\n * @typedef {ReturnType<typeof import('widgets/product/ProductDetail').default>} ProductDetailBase\n * @typedef {InstanceType<ReturnType<typeof import('core/product/Availability').default>>} availability\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputStepper').default>>} InputStepper\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Label').default>>} Label\n */\n\n/**\n * @description ProductDetail widget\n * @param {ProductDetailBase} ProductDetailBase Base widget for extending\n * @returns {typeof ProductDetail} ProductDetail class\n */\n\nexport default function (ProductDetailBase) {\n    /**\n     * @class ProductDetail\n     * @augments ProductDetailBase\n     */\n    class ProductDetail extends ProductDetailBase {\n        prefs() {\n            return {\n                addToCartMsgSticky: 'addToCartMsgSticky',\n                addToCartStickyHeader: 'add-to-cart-sticky-header',\n                ingredientsSection: 'ingredients-section',\n                descriptions: 'descriptions',\n                pdpSlots: ['viewDetail', 'pdpBottom1', 'pdpBottom2', 'pdpBottom3', 'pdpBottom4'],\n                storeChangedUrl: '',\n                slotsUrl: '',\n                ...super.prefs(),\n                productOptions: []\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.handleProductAvailability();\n            this.updateQuantityWithLimit();\n            this.loadAnalytics();\n\n            this.eventBus().on('preferredstore.selected', 'onPreferredStoreSelected');\n        }\n\n        /**\n         * @description loads gtm analytics on page load\n         */\n        loadAnalytics() {\n            this.eventBus().emit('product.details.open', [this.ref('self')]);\n        }\n\n        /**\n         * @description Handles OOS product logic\n         * @returns {void}\n         */\n        handleProductAvailability() {\n            this.has('productRecommendations', productRecommendations => {\n                productRecommendations[\n                    this.isProductAvailableForHomeDelivery() ? 'show' : 'hide'\n                ]();\n            });\n        }\n\n        /**\n         * @description Update quantity on inputStepper with limits\n         */\n        updateQuantityWithLimit() {\n            this.getById('quantity', (quantity) => {\n                quantity.setInputValue(quantity.filterInput(quantity.currentValue), false);\n            });\n        }\n\n        /**\n         * @description Update Product View\n         * @param {any} product productModel\n         * @returns {void}\n         */\n        updateProductView(product) {\n            super.updateProductView(product);\n\n            this.updateRecommendations(product);\n\n            this.getById(this.prefs().addToCartMsgSticky, (addToCartMsgSticky) => {\n                addToCartMsgSticky.hide();\n            });\n\n            this.getById(this.prefs().addToCartStickyHeader, (addToCartStickyHeader) => {\n                addToCartStickyHeader.setText(product.productName);\n            });\n\n            this.handleProductAvailability();\n            this.renderUnit(product);\n            this.renderLargeItemBadge(product);\n\n            // Due to multiplee sub-element async rendering need to fire an event in a next timer tick\n            timeout(() => this.emit('productviewupdated'));\n        }\n\n        /**\n         * @description Update PDP recommendation slots\n         * @param {object} product product model from response\n         * @returns {void}\n         */\n        updateRecommendations(product) {\n            getContentByUrl(this.prefs().slotsUrl, {\n                pid: product.id\n            }).then(response => {\n                if (!response) {\n                    return;\n                }\n\n                const wrapper = document.createElement('div');\n\n                wrapper.innerHTML = response;\n\n                this.prefs().pdpSlots.forEach(slot => {\n                    this.has(slot, slotRef => {\n                        const slotContentFromResponse = wrapper.querySelector('#' + slot);\n\n                        if (slotContentFromResponse) {\n                            slotRef.empty().prepend(slotContentFromResponse.innerHTML);\n                        }\n                    });\n                });\n\n                wrapper.remove();\n            });\n        }\n\n        /**\n         * @description Update product BazaarVoice reviews block\n         * @param {object} product Product object\n         * @returns {Promise<void|null>} Promise object represents ratings rendering result\n         */\n        updateRatings(product) {\n            // update ratings summary\n            this.has('ratingSummary', ratingSummary => {\n                ratingSummary.data('bvProductid', product.id);\n                const productRedirectUrl = ratingSummary.data('bvRedirectUrl');\n\n                if (productRedirectUrl) {\n                    ratingSummary.data('bvRedirectUrl', product.link);\n                }\n            });\n\n            // update product reviews\n            this.has('reviews', reviews => {\n                reviews.data('bvProductid', product.id);\n            });\n\n            const ratings = [1, 2, 3, 4, 5].map((currentValue, index) => {\n                const starObj = {\n                    position: index > 0 ? index * 18 : 0\n                };\n\n                if (product.rating >= currentValue) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isFull' does not exist on type '{ positi... Remove this comment to see the full error message\n                    starObj.isFull = true;\n                } else if ((product.rating % 1 > 0) && (Math.ceil(product.rating) >= currentValue)) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isHalf' does not exist on type '{ positi... Remove this comment to see the full error message\n                    starObj.isHalf = true;\n                } else {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isEmpty' does not exist on type '{ posit... Remove this comment to see the full error message\n                    starObj.isEmpty = true;\n                }\n\n                return starObj;\n            });\n\n            this.has('productRatings', (productRatings) => {\n                const link = productRatings.data('addProductLinkToRatingsLink')\n                    ? product.selectedProductUrl\n                    : '';\n\n                this.render('productRatingsPDPTemplate', { product, ratings, link }, productRatings);\n            });\n\n            return Promise.resolve(null);\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\n            if (product.availability\n                && product.availability.messages\n                && (product.readyToOrder || product.isInaccessibleVariant)\n            ) {\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            this.has('productAvailabilityMsg', productAvailabilityMsg => {\n                productAvailabilityMsg.hide();\n            });\n\n            this.getById('availability', (/** @type {availability} */availabilityLabel) => {\n                availabilityLabel.setAvailability(product.pdpAvailability || {});\n                this.eventBus().emit('update.availability');\n                availabilityLabel.render('template', {\n                    message: message,\n                    class: availabilityClass,\n                    backInStockSubscriptionEnabled: product.backInStockSubscription?.isEnabled,\n                    pdpAvailability: product.pdpAvailability\n                }, availabilityLabel.ref('container'));\n            });\n        }\n\n        /**\n         * @description Render product unit\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderUnit(product) {\n            this.getById('priceUnit', (/** @type {Label} */priceUnit) => {\n                priceUnit.setText(product.pricePerUOM);\n            });\n        }\n\n        /**\n         * @description Render large item badge\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderLargeItemBadge(product) {\n            this.getById('largeItemBadge', (largeItemBadge) => {\n                largeItemBadge.render('template', { product }, largeItemBadge.ref('container'));\n            });\n        }\n\n        /**\n         * @description Scroll to Reviews section\n         * @returns {void}\n         */\n        scrollToReviews() {\n            this.has(REVIEWS_REF_ID, reviews => scrollWindowTo(reviews.get(), true));\n        }\n\n        /**\n         * @description Update availability for Click & Collect and Store on store changed\n         * @returns {void}\n         */\n        onPreferredStoreSelected() {\n            const storeChangedUrl = this.prefs().storeChangedUrl;\n\n            if (storeChangedUrl) {\n                getJSONByUrl(storeChangedUrl, {\n                    pid: this.prefs().currentProductId || this.prefs().pid,\n                    quantity: this.prefs().selectedQuantity\n                }, false).then(response => {\n                    const product = response.product;\n\n                    this.renderAvailability(product);\n                    this.renderQuantities(product);\n                    this.callIfExists('renderAddToCart', response.product);\n                });\n            }\n        }\n\n        /**\n         * @description Indicates if product is available\n         * @returns {boolean} result\n         */\n        isProductAvailableForHomeDelivery() {\n            let productAvailable = true;\n\n            const availabilityObject = this.getProductAvailabilityObject();\n\n            if (availabilityObject) {\n                productAvailable = !!availabilityObject.available;\n            }\n\n            return productAvailable;\n        }\n\n        /**\n         * @description Render product quantity\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        updateIngredients(product) {\n            this.getById(this.prefs().descriptions, (descriptions) => {\n                descriptions.getById(this.prefs().ingredientsSection, (ingredientsSection) => {\n                    ingredientsSection.ref('ingredientsText').empty();\n\n                    if (product.ingredients) {\n                        ingredientsSection.ref('ingredientsText').append(product.ingredients);\n                    }\n                });\n            });\n        }\n\n        /**\n         * @description trigger change from different widgets (swatch, select)\n         * Saves `selectWidget.id` into a property for further global notifications etc.\n         * Later, when triggering event, `selectWidget.id` will be analyzed in order to send with event correct data.\n         * @param {InputStepper} selectWidget widget\n         * @returns {Promise<object|null>} Promise object represents server response with attribute changing result\n         */\n        changeAttribute(selectWidget) {\n            this.changeAttributeID = selectWidget.id;\n            const selected = selectWidget.getSelectedOptions();\n\n            if (!selected || selected.data('attrIsSelected')) {\n                return Promise.resolve(null);\n            }\n\n            const requestObject = submitFormJsonWithAbort(selected.data('attrUrl'), undefined, 'GET', true);\n            const isQuantityUpdate = selectWidget.data('quantityUpdate');\n\n            this.changeAttributeRequests.push(requestObject);\n\n            this.eventBus().emit('init.attribute.change');\n\n            Promise.all(this.changeAttributeRequests.map(req => req.promise)).then(() => {\n                this.eventBus().emit('finalize.attribute.change');\n            });\n\n            // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.\n            return requestObject.promise\n                .then((response) => {\n                    if (isQuantityUpdate) {\n                        this.afterChangeQuantity(response);\n                    } else {\n                        this.afterChangeAttribute(response);\n                    }\n\n                    return response;\n                })\n                .catch(e => {\n                    if (e.name === 'AbortError') {\n                        return;\n                    }\n\n                    showErrorLayout(e);\n                })\n                .finally(() => {\n                    const index = this.changeAttributeRequests.indexOf(requestObject);\n\n                    if (index > -1) {\n                        this.changeAttributeRequests.splice(index, 1);\n                    }\n                });\n        }\n\n        /**\n         * @description Render product quantity\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderQuantities(product) {\n            const availability = product.availability;\n            const response = product.quantities;\n\n            if (!response || !availability) { return; }\n\n            this.getById('quantity', (quantity) => {\n                quantity.render(\n                    'template',\n                    {\n                        attr: {\n                            currentQty: response.currentValue,\n                            max: response.max,\n                            min: response.min,\n                            step: response.step\n                        },\n                        isOutOfStock: (availability && availability.isOutOfStock) || false\n                    },\n                    quantity.ref('container')\n                ).then(function () {\n                    quantity.update();\n                    quantity.setPref('attrUrl', response.actionUrl);\n                });\n            });\n        }\n\n        /**\n         * @description Prepares product specification to rendering\n         * @param {object} product - Product object\n         * @returns {void}\n         */\n        prepareProductSpecification(product) {\n            const { specifications } = product;\n\n            (specifications || []).forEach((specification) => {\n                if ((specification.id === 'sustVegan' || specification.id === 'sustVeget')) {\n                    specification.sustVegan = true && specification.value;\n                } else if (specification.id === 'FSCIcon') {\n                    specification.FSCIcon = true && specification.value;\n                } else if (specification.id === 'hazardousIcons') {\n                    specification.hazardousIcons = true;\n                } else if (specification.id === 'washcare') {\n                    specification.washcare = true;\n                } else {\n                    specification.default = true;\n                }\n            });\n        }\n\n        /**\n         * @description Prepares product to description rendering\n         * @param {object} product - Product object\n         * @returns {void}\n         */\n        prepareProductDetailAttributes(product) {\n            this.prepareProductSpecification(product);\n        }\n\n        /**\n         * @description Render product description\n         * @param {object} product - Product object\n         * @returns {void}\n         */\n        renderProductDescriptions(product) {\n            this.prepareProductDetailAttributes(product);\n\n            this.getById(this.prefs().descriptions, descriptionsAccordion => {\n                descriptionsAccordion.render(\n                    'template',\n                    product,\n                    descriptionsAccordion.ref('container')\n                // @ts-expect-error ts-migrate(2551) FIXME: Property 'reinit' does not exist on type 'Widget'.... Remove this comment to see the full error message\n                ).then(() => {\n                    if (product && product.ingredients) {\n                        this.updateIngredients(product);\n                    }\n\n                    descriptionsAccordion.reinit();\n                });\n            });\n        }\n\n        /**\n         * @description After change quantity handler\n         * @param {object} response response object\n         * @returns {void}\n         */\n        afterChangeQuantity(response) {\n            if (response && response.product) {\n                if (!this.prefs().disableHistory) {\n                    this.updateHistoryState(response.product);\n                }\n\n                this.updateProductQuantityView(response.product);\n\n                this.triggerChangeAttributeEvent(response);\n            }\n        }\n\n        /**\n         * @description Update Product Quantity View\n         * @param {any} product productModel\n         * @returns {void}\n         */\n        updateProductQuantityView(product) {\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'currentGtmInfo' does not exist on type '... Remove this comment to see the full error message\n            this.currentGtmInfo = product.gtmInfo;\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'stock' does not exist on type 'ProductDe... Remove this comment to see the full error message\n            this.stock = product.availability && product.availability.stock ? product.availability.stock : null;\n\n            this.setPref('selectedQuantity', product.selectedQuantity);\n            this.setPref('readyToOrder', product.readyToOrder);\n\n            this.setGtmInfo(product);\n\n            this.renderQuantities(product);\n            this.renderPrice(product);\n            this.renderAvailability(product);\n            this.renderPromotions(product);\n        }\n\n        /**\n         * @description Click Event handler\n         * @listens dom#click\n         * @param {HTMLElement} el Source of event\n         * @param {Event} event Event object\n         * @returns {void}\n         */\n        showRelatedIdeasClick(el) {\n            this.eventBus().emit(CLICK_EVENT_ID, {\n                event: GTM_EVENT_NAME,\n                eventCategory: 'Key interactions',\n                eventAction: 'Show ideas',\n                eventLabel: el.data(GTM_LABEL_SELECTOR)\n            });\n        }\n\n        /**\n         * @description Get product availability data\n         * @returns {object|undefined} product availability object\n         */\n        getProductAvailabilityObject() {\n            let result;\n\n            this.getById('availability', (/** @type {availability} */availability) => {\n                const availabilityObject = availability.getAvailability();\n\n                if (typeof availabilityObject === 'string') {\n                    result = JSON.parse(availabilityObject);\n                } else {\n                    result = availabilityObject;\n                }\n            });\n\n            return result;\n        }\n\n        /**\n         * @description Get similar products carousel header\n         * @returns {string} similar products carousel header\n         */\n        getSimilarProductsCarouselHeader() {\n            const availabilityObject = this.getProductAvailabilityObject();\n            let topSlotText;\n\n            if (availabilityObject && availabilityObject.topSlotRef) {\n                switch (availabilityObject.topSlotRef) {\n                    case 'ccStoreAvailability':\n                        topSlotText = this.prefs().ccStoreTopSlotAvailabilityText;\n                        break;\n                    case 'ccAvailability':\n                        topSlotText = this.prefs().ccTopSlotAvailabilityText;\n                        break;\n                    case 'oosAvailability':\n                        topSlotText = this.prefs().oosTopSlotAvailabilityText;\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            return topSlotText;\n        }\n\n        /**\n         * @description Triggers global event after `afterChangeAttribute` method executed.\n         * @param {object} response response object\n         * @returns {void}\n         */\n        triggerChangeAttributeEvent(response) {\n            if (this.changeAttributeID && this.changeAttributeID.indexOf('attr-') === 0) {\n                this.eventBus().emit('product.attribute.select', response.product);\n\n                if (response.virtualPageLoad && response.analyticsPageData) {\n                    this.eventBus().emit('virtual.page.load', response.analyticsPageData);\n                }\n            }\n\n            super.triggerChangeAttributeEvent(response);\n        }\n    }\n\n    return ProductDetail;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {InstanceType<ReturnType<typeof import('core/product/ProductDetail').default>>} productDetail\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof ProductDetailContainer} ProductDetailContainer class\n */\n\nexport default function (Widget) {\n    /**\n     * @class ProductDetailContainer\n     * @augments Widget\n    */\n\n    class ProductDetailContainer extends Widget {\n        prefs() {\n            return {\n                classesStandardHeader: 'm-standard_header',\n                similarProductsCarouselPlace: 'none',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget intitalization logic\n         * @returns {void}\n         */\n        init() {\n            super.init();\n            this.handleProductAvailability();\n            this.eventBus().on('update.availability', 'handleProductAvailability');\n        }\n\n        /**\n         * @description Handles OOS product logic\n         * @returns {void}\n         */\n        handleProductAvailability() {\n            const productDetail = /** @type {productDetail} */ (this.getById('productDetail', widget => widget));\n            const availabilityObject = productDetail.getProductAvailabilityObject();\n            const headerText = productDetail.getSimilarProductsCarouselHeader();\n\n            if (!headerText) {\n                this.hideTopSlot();\n                this.hideBottomSlot();\n            } else if (this.prefs().similarProductsCarouselPlace === 'top') {\n                this.showTopSlot(headerText);\n                this.hideBottomSlot();\n            } else if (this.prefs().similarProductsCarouselPlace === 'bottom') {\n                this.hideTopSlot();\n                this.showBottomSlot(headerText);\n            } else if (!availabilityObject.available) {\n                if (availabilityObject.availableCC) {\n                    this.showTopSlot(headerText, true);\n                    this.showBottomSlot(headerText, true);\n                } else {\n                    this.showTopSlot(headerText);\n                    this.hideBottomSlot();\n                }\n            }\n        }\n\n        hideTopSlot() {\n            this.has('topSlotsUp', topSlot => topSlot.hide());\n        }\n\n        showTopSlot(headerText = '', headerOnly = false) {\n            this.has('topSlotHeaderUp', topSlotHeader => {\n                topSlotHeader.prop('innerHTML', headerText || '');\n            });\n            this.has('topSlotCarouselUp', topSlotCarousel => {\n                topSlotCarousel[headerOnly ? 'hide' : 'show']();\n            });\n            this.has('topSlotsUp', topSlot => {\n                topSlot[headerText ? 'show' : 'hide']();\n            });\n        }\n\n        hideBottomSlot() {\n            this.getById('productDetail', productDetail => {\n                productDetail.has('topSlots', topSlot => topSlot.hide());\n            });\n        }\n\n        showBottomSlot(headerText = '', standardHeader = false) {\n            this.getById('productDetail', productDetail => {\n                productDetail.has('topSlotHeader', topSlotHeader => {\n                    topSlotHeader.prop('innerHTML', headerText || '');\n                    topSlotHeader[standardHeader ? 'hide' : 'show']();\n                });\n                productDetail.has('topSlots', topSlot => {\n                    topSlot.toggleClass(this.prefs().classesStandardHeader, !!standardHeader);\n                    topSlot[headerText ? 'show' : 'hide']();\n                });\n            });\n        }\n\n        /**\n         * @description Handle product view update\n         * @returns {void}\n         */\n        onProductViewUpdated() {\n            this.handleProductAvailability();\n        }\n    }\n\n    return ProductDetailContainer;\n}\n","/* eslint-disable sonarjs/cognitive-complexity */\n\nconst IMAGE_MODE_ZOOM = 'zoom';\nconst IMAGE_MODE_CAROUSEL = 'carousel';\nconst GLOBAL_DIALOG = 'm-has_dialog';\n\nconst keyCode = Object.freeze({\n    SPACE: 32,\n    ENTER: 13\n});\n\n/**\n * @typedef {ReturnType<typeof import('widgets/product/ProductImages').default>} ProductImagesBase\n */\n\n/**\n * @description ProductImages widget\n * @param {ProductImagesBase} ProductImagesBase Base widget for extending\n * @returns {typeof ProductImages} ProductImages class\n */\n\nexport default function (ProductImagesBase) {\n    /**\n     * @class ProductImages\n     * @augments ProductImagesBase\n     */\n    class ProductImages extends ProductImagesBase {\n        /**\n         * @param {object} product - product object\n         */\n        renderImages(product) {\n            if (product.video && product.images && product.images.large) {\n                const imageLength = product.images.large.length;\n\n                product.video = product.video.map(video => {\n                    video.index += imageLength;\n\n                    return video;\n                });\n            }\n\n            super.renderImages(product);\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         * @param {Number} page - Start image number if present, 0 by default\n         */\n        initAndShowZoom(PhotoSwipe, PhotoSwipeUI, { originalWidth, originalHeight }, page = null) {\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 = this.getCarouselImages();\n\n            if (!carouselImages) {\n                return;\n            }\n\n            pswpElement.setAttribute('data-tau', 'zoom_dialog');\n\n            const items = Array.from(carouselImages)\n                .filter(element => element.dataset.originalSrc)\n                .map(element => {\n                    return {\n                        src: element.dataset.originalSrc || element.src,\n                        w: originalWidth || element.naturalWidth,\n                        h: originalHeight || element.naturalHeight\n                    };\n                });\n\n            const carouselSlideHTML = imgCarousel.ref('elemCarouselTrack').get().querySelectorAll('.js-slide-html');\n\n            Array.from(carouselSlideHTML)\n                .forEach(element => {\n                    if (element.innerHTML) {\n                        items.push({\n                            html: element.innerHTML\n                        });\n                    }\n                });\n\n            const prefs = this.prefs();\n\n            if (!('zoomCloseElClasses' in prefs)) {\n                Object.assign(prefs, {\n                    thumbnailsPerFrame: 4,\n                    thumbnailsZoomClass: 'm-zoomed-in',\n                    classesGlobalDialog: GLOBAL_DIALOG,\n                    zoomLoop: false,\n                    zoomClickToCloseNonZoomable: false,\n                    zoomCloseElClasses: '',\n                    closeOnScroll: false,\n                    predefinedHeight: 1773,\n                    predefinedWidth: 1333,\n                    barsSizeBottom: 'auto',\n                    barsSizeTop: 24,\n                    showHideOpacity: true,\n                    ...super.prefs()\n                });\n            }\n\n            const options = {\n                index: page || 0,\n                barsSize: { top: prefs.barsSizeTop, bottom: prefs.barsSizeBottom },\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                isClickableElement: function (/** @type {HTMLElement} */ el) {\n                    return el.tagName === 'A'\n                        || el.tagName === 'BUTTON';\n                }\n            };\n\n            const gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI, items, options);\n\n            gallery.listen('close', () => this.onZoomClosed());\n\n            gallery.listen('doubleTap', () => {\n                const isZoomIn = gallery.getZoomLevel() === 1; // When double tap event reported we actually have previous state\n\n                pswpElement.classList.toggle('pswp--zoomed-in', !isZoomIn);\n            });\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            const updateCurrentItem = () => {\n                const currentIndex = gallery.getCurrentIndex();\n\n                if (currentIndex === 0) {\n                    gallery.template.classList.add('pswp--first');\n                } else {\n                    gallery.template.classList.remove('pswp--first');\n                }\n\n                if (currentIndex === (gallery.items.length - 1)) {\n                    gallery.template.classList.add('pswp--last');\n                } else {\n                    gallery.template.classList.remove('pswp--last');\n                }\n\n                if (gallery.currItem.html) {\n                    gallery.template.classList.add('pswp--html');\n                } else {\n                    gallery.template.classList.remove('pswp--html');\n                }\n            };\n\n            gallery.listen('afterInit', updateCurrentItem);\n            gallery.listen('afterChange', updateCurrentItem);\n\n            const zoomToOriginal = gallery.zoomTo;\n\n            gallery.zoomTo = (destZoomLevel, centerPoint, speed, easingFn, updateFn) => {\n                if (gallery.currItem.initialZoomLevel) {\n                    if (destZoomLevel > gallery.currItem.initialZoomLevel) {\n                        gallery.template.classList.add('pswp--zoomed');\n                    } else {\n                        gallery.template.classList.remove('pswp--zoomed');\n                    }\n                }\n\n                zoomToOriginal.call(gallery, destZoomLevel, centerPoint, speed, easingFn, updateFn);\n            };\n\n            // Fix for console errors after destroing closed gallery\n            const originalGalleryDestroy = gallery.destroy;\n\n            gallery.destroy = () => {\n                if (!gallery.destroyed) {\n                    originalGalleryDestroy.call(gallery);\n                    gallery.destroyed = true;\n                }\n            };\n\n            gallery.init();\n\n            this.gallery = gallery;\n            this.imageMode = IMAGE_MODE_ZOOM;\n\n            if (thumbnailsCarousel) {\n                this.toggleZoomState(true);\n            }\n\n            this.addGlobalDialogClass();\n            this.addFocusTrap();\n        }\n\n        /**\n         * @description Click handler on image from large images carousel\n         * @param {Element} elem - an Element where click happens\n         * @param {number} page - Clicked image page number should send to gallery\n         */\n        onImageCarouselPageClicked(elem, page) {\n            this.zoom(page);\n        }\n\n        /**\n         * @description Generic method to open zoom popup\n         * @param {number} page - Clicked image page number is sending to gallery\n         */\n        zoom(page = null) {\n            this.loadPhotoswipeDependencies().then(([PhotoSwipe, PhotoSwipeUI, originalImageSize]) => {\n                this.initAndShowZoom(PhotoSwipe.default, PhotoSwipeUI.default, originalImageSize, page);\n            });\n        }\n\n        /**\n         * @description \"Close\" photoswipe popup icon click handler\n         * @listens dom#click\n         */\n        closeZoom() {\n            if (this.gallery) {\n                this.gallery.close();\n\n                const thumbnailsCarousel = this.getById(\n                    'imagesThumbnails',\n                    thumbnails => thumbnails\n                );\n\n                if (thumbnailsCarousel) {\n                    thumbnailsCarousel.updateCarouselMetric();\n                    thumbnailsCarousel.updateCarouselState();\n                }\n            }\n\n            this.eventBus().emit('zoom.closed', {});\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 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 {Promise} return new Promise with image sizes\n         */\n        getOriginalImageSize() {\n            return new Promise((resolve) => {\n                const imgCarousel = this.getById('imagesCarousel', (carousel) => carousel);\n                const predefinedSize = {\n                    originalHeight: this.prefs().predefinedHeight,\n                    originalWidth: this.prefs().predefinedWidth\n                };\n\n                if (!imgCarousel) {\n                    resolve(predefinedSize);\n                } else {\n                    const firstImage = this.getCarouselImages()[0];\n\n                    if (firstImage.dataset.originalSrc) {\n                        const img = new Image();\n\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 Get list of main carousel product images\n         * @returns {object} images\n         */\n        getCarouselImages() {\n            const imgCarousel = this.getById('imagesCarousel', (carousel) => carousel);\n            const imagesContainer = imgCarousel.ref(imgCarousel.prefs().elemCarouselTrack).get();\n\n            return [].slice.call(imagesContainer?.querySelectorAll('img')) || [];\n        }\n\n        /**\n         * @description Enter / space handler to initiate zoom popup\n         * @listens dom#keydown\n         * @param {Element} _el  event source element\n         * @param {Event} event event instance if DOM event\n         */\n        handleKeydown(_el, event) {\n            if (event.keyCode === keyCode.ENTER || event.keyCode === keyCode.SPACE) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.zoom();\n            }\n        }\n\n        /**\n         * @description Handler to sync main carousel with thumbnails carousel\n         * @param {Element} el - event source element\n         * @param {Event} page - current page number\n         */\n        onImageCarouselPageChanged(el, page) {\n            this.getById('imagesThumbnails', (carousel) => {\n                if (this.imageMode !== IMAGE_MODE_ZOOM) {\n                    carousel\n                        .markCurrentPage(page)\n                        .scrollIntoView();\n                }\n            });\n        }\n\n        /**\n         * @description Add Global Dialog Class\n         */\n        addGlobalDialogClass() {\n            const html = this.ref('html');\n            let classesGlobalDialog;\n\n            if (!this.prefs().classesGlobalDialog) {\n                classesGlobalDialog = GLOBAL_DIALOG;\n            } else {\n                classesGlobalDialog = this.prefs().classesGlobalDialog;\n            }\n\n            if (!html.hasClass(classesGlobalDialog)) {\n                html.addClass(classesGlobalDialog);\n            }\n        }\n\n        /**\n         * @description Sets image mode / do some DOM modifications after zoom closed\n         */\n        onZoomClosed() {\n            this.toggleZoomState(false);\n\n            this.imageMode = IMAGE_MODE_CAROUSEL;\n            this.removeGlobalDialogClass();\n\n            if (this.backFocusElement) {\n                this.backFocusElement = undefined;\n            }\n        }\n\n        /**\n         * @description Toggle Zoom state on Thumbnails carousel\n         * @param {object} state flag for toggle zoom state\n         */\n        toggleZoomState(state) {\n            let thumbnails = this.getById('imagesThumbnails',\n                (thumbnailsCarousel) => thumbnailsCarousel);\n            let thumbnailsZoomClass;\n\n            if (!thumbnails) {\n                thumbnails = this.getById('imagesCarousel', (thumbnailsCarousel) => thumbnailsCarousel);\n            }\n\n            if (!this.prefs().thumbnailsZoomClass) {\n                thumbnailsZoomClass = 'm-zoomed-in';\n            } else {\n                thumbnailsZoomClass = this.prefs().thumbnailsZoomClass;\n            }\n\n            thumbnails.ref('self').toggleClass(thumbnailsZoomClass, state);\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 = document.activeElement instanceof HTMLElement ? document.activeElement : document.body;\n        }\n\n        /**\n         * @description Remove Global Dialog Class\n         */\n        removeGlobalDialogClass() {\n            let classesGlobalDialog;\n\n            if (!this.prefs().classesGlobalDialog) {\n                classesGlobalDialog = GLOBAL_DIALOG;\n            } else {\n                classesGlobalDialog = this.prefs().classesGlobalDialog;\n            }\n\n            this.ref('html').removeClass(classesGlobalDialog);\n        }\n    }\n\n    return ProductImages;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/ProductSet').default>} ProductSetBase\n * @typedef {InstanceType<ReturnType<typeof import('widgets/product/SetProductDetail').default>>} setProductDetail\n */\n\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport { scrollWindowTo } from 'widgets/toolbox/scroll';\n\n/**\n * @description ProductSet widget\n * @param {ProductSetBase} ProductSetBase Base widget for extending\n * @returns {typeof ProductSet} SetProductDetail class\n */\n\nexport default function (ProductSetBase) {\n    /**\n     * @class ProductSet\n     * @augments ProductSetBase\n     */\n    class ProductSet extends ProductSetBase {\n        prefs() {\n            return {\n                productSetInfoUrl: '',\n                textShowMore: '',\n                textShowLess: '',\n                textViewedProductsSm: '',\n                textViewedProductsLg: '',\n                textViewedProductsAll: '',\n                classesAllProducts: 'm-all_products',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.togglePriceTotals(false, true);\n            this.initEvents();\n            this.updateSetPriceTotal();\n        }\n\n        /**\n         * @description inits global events\n         */\n        initEvents() {\n            this.eventBus().on('after.change.product.set.attribute', 'onChangeAttribute');\n            this.eventBus().on('carousel.loaded', 'handleMoreIdeasLink');\n        }\n\n        /**\n         * @description Scroll to Reviews section\n         * @returns {void}\n         */\n        scrollToReviews() {\n            this.has('reviews', reviews => scrollWindowTo(reviews.get(), true));\n        }\n\n        /**\n         * @description Update certain page elements on page loading\n         * @returns {void}\n         */\n        handleMoreIdeasLink() {\n            this.has('showMoreIdeas', showMoreIdeas => showMoreIdeas.show());\n            this.has('showMoreIdeasSecondLink', showMoreIdeasSecondLink => showMoreIdeasSecondLink.show());\n        }\n\n        /**\n         * @description Open Browser print flyout\n         * @returns {void}\n         */\n        print() {\n            window.print();\n        }\n\n        togglePriceTotals(setPriceState, zeroPriceState) {\n            this.getById('priceBlock', priceBlock => priceBlock.ref('self').toggle(setPriceState));\n            this.ref('totalPriceZero').toggle(zeroPriceState);\n        }\n\n        /**\n         * @description updates price totals\n         */\n        updateSetPriceTotal() {\n            const SetProductDetail = this.getConstructor('setProductDetail');\n\n            const productsSelected = [];\n\n            this.eachChild(child => {\n                if (child instanceof SetProductDetail && child.productSelected()) {\n                    productsSelected.push(child.getProductId());\n                }\n            });\n\n            const productSetPriceBlock = this.getById('priceBlock', priceBlock => priceBlock.ref('self'));\n\n            if (!productsSelected.length) {\n                this.togglePriceTotals(false, true);\n                this.manageAddSetToCart(false);\n\n                return;\n            }\n\n            getJSONByUrl(this.prefs().productSetInfoUrl, {\n                productSetId: this.prefs().pid,\n                productSetSelectedProducts: productsSelected.join(',')\n            }).then(response => {\n                if (response && response.total) {\n                    this.render(\n                        'setPriceTpl',\n                        { price: response.total },\n                        productSetPriceBlock\n                    ).then(this.togglePriceTotals.bind(this, true, false));\n\n                    this.manageAddSetToCart(true);\n                } else {\n                    this.togglePriceTotals(false, true);\n                    this.manageAddSetToCart(false);\n                }\n            });\n        }\n\n        /**\n         * @description updates price totals after change product variation attributes\n         */\n        onChangeAttribute() {\n            this.updateSetPriceTotal();\n        }\n\n        /**\n         * @description Server request to get product set info/prices etc depending on pre-selected products\n         * @returns {void}\n         */\n        onProductSelected() {\n            this.updateSetPriceTotal();\n        }\n\n        /**\n         * @description Enables or disable `add set to cart` button\n         * @param {boolean} enable enable/disable button\n         * @returns {void}\n         */\n        manageAddSetToCart(enable = true) {\n            this.getById('addSetToCart', addSetToCart => {\n                addSetToCart[enable ? 'enable' : 'disable']();\n            });\n        }\n\n        toggleProductsView() {\n            const productsContainer = this.ref('productsContainer');\n\n            if (productsContainer.hasClass(this.prefs().classesAllProducts)) {\n                productsContainer.removeClass(this.prefs().classesAllProducts);\n\n                this.ref('smProductsViewButton').setText(this.prefs().textShowMore);\n                this.ref('lgProductsViewButton').setText(this.prefs().textShowMore);\n\n                this.ref('smProductsViewMessage').setText(this.prefs().textViewedProductsSm);\n                this.ref('lgProductsViewMessage').setText(this.prefs().textViewedProductsLg);\n            } else {\n                productsContainer.addClass(this.prefs().classesAllProducts);\n\n                this.ref('smProductsViewButton').setText(this.prefs().textShowLess);\n                this.ref('lgProductsViewButton').setText(this.prefs().textShowLess);\n\n                this.ref('smProductsViewMessage').setText(this.prefs().textViewedProductsAll);\n                this.ref('lgProductsViewMessage').setText(this.prefs().textViewedProductsAll);\n            }\n        }\n    }\n\n    return ProductSet;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/RecentlyViewedMixin').default>} BaseRecentlyViewedMixin\n */\n\n/**\n * @description Base RecentlyViewedMixin implementation\n * @param {BaseRecentlyViewedMixin} BaseRecentlyViewedMixin Base widget for extending\n * @returns {typeof RecentlyViewedMixin} RecentlyViewedMixin\n */\nexport default function (BaseRecentlyViewedMixin) {\n    /**\n     * @class RecentlyViewedMixin\n     * @augments BaseRecentlyViewedMixin\n     */\n    class RecentlyViewedMixin extends BaseRecentlyViewedMixin {\n        /**\n         * @description Saves visited product to cookies\n         * @param {string} pid - visited master product ID\n         * @returns {void}\n         */\n        trackViewedItem(pid) {\n            const refinedPid = (this.prefs().pid || pid).toString();\n\n            super.trackViewedItem(refinedPid);\n        }\n    }\n\n    return RecentlyViewedMixin;\n}\n","/**\n * @typedef {ReturnType<typeof import('widgets/product/ProductDetail').default>} ProductDetailBase\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputStepper').default>>} InputStepper\n */\n\nimport { submitFormJsonWithAbort } from 'widgets/toolbox/ajax';\nimport { showErrorLayout, appendParamsToUrl } from 'widgets/toolbox/util';\n\n/**\n * @description SetProductDetail widget\n * @param {ProductDetailBase} ProductDetailBase Base widget for extending\n * @returns {typeof SetProductDetail} SetProductDetail class\n */\n\nexport default function (ProductDetailBase) {\n    /**\n     * @class SetProductDetail\n     * @augments ProductDetailBase\n     */\n    class SetProductDetail extends ProductDetailBase {\n        prefs() {\n            return {\n                selectedClass: 'm-selected',\n                lowStockMessage: '',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Shows/hides possibility to add product into set depending on product type\n         * @param {string} productType selected product type\n         * @returns {void}\n         */\n        setSelectProduct(productType) {\n            const selectProductMethod = productType !== 'variant' && productType !== 'standard' && productType !== 'bundle'\n                ? 'hide' : 'show';\n\n            this.getById('selectProduct', selectProduct => selectProduct[selectProductMethod]());\n        }\n\n        /**\n         * @description Render product price\n         * Additionally renders subtotal for product in a set\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderPrice(product) {\n            this.eachChild(child => {\n                if (child.data('id') === 'priceBlock') {\n                    if (child.data('priceMeaning') === 'subtotal'\n                        && product.subtotal && product.subtotal.html) {\n                        child.render('template', {}, undefined, product.subtotal.html);\n                    } else if (child.data('priceMeaning') === 'basic'\n                        && product.price && product.price.html) {\n                        child.render('template', {}, undefined, product.price.html);\n                    }\n                }\n            });\n        }\n\n        /**\n         * @description Updates selection flag\n         * @param {boolean} selectionFlag - selection flag\n         * @param {string} selectionValue - selection value\n         */\n        updateProductSelection(selectionFlag) {\n            if (!selectionFlag) {\n                this.getById('selectProduct', (selectProduct) => {\n                    selectProduct.unselectCheckbox();\n                });\n            } else if (selectionFlag) {\n                this.getById('selectProduct', (selectProduct) => {\n                    selectProduct.preselectCheckbox();\n                });\n            }\n        }\n\n        /**\n         * @description updates availability section\n         * @param {object} product - product object\n         * @returns {Promise} rendering promise\n         */\n        updateAvailabilitySection(product) {\n            if (product) {\n                const isProductSelected = this.productSelected() === 'on';\n\n                product.selected = isProductSelected;\n\n                this.updateProductSelection(isProductSelected);\n            }\n\n            this.recommendationAvailable = product.available;\n\n            return this.render('availabilitySectionTemplate', product, this.ref('availabilitySectionContainer'))\n                .then(() => { this.eventBus().emit('after.change.product.set.attribute'); });\n        }\n\n        /**\n         * @description updates callout section\n         * @param {object} product - product object\n         * @returns {Promise} rendering promise\n         */\n        updateCallOut(product) {\n            const isReachedLimit = (product.readyToOrder || product.isInaccessibleVariant) && product.availability.isReachedLimit;\n            let lowStockMessage = '';\n\n            if (product.availability.isLowStock) {\n                lowStockMessage = product.availability.messages[0];\n            } else if (product.pdpAvailability.available && product.pdpAvailability.stock) {\n                lowStockMessage = this.prefs().lowStockMessage.replace('{0}', product.pdpAvailability.stock);\n            }\n\n            const renderingData = {\n                reachedLimitMessage: isReachedLimit ? product.availability.isReachedLimitMessage : '',\n                hasPromotions: !!product.promotions,\n                promotions: product.promotions,\n                lowStockMessage\n            };\n\n            return this.render('callOutSectionTemplate', renderingData, this.ref('callOutSectionContainer'))\n                .then(() => { this.eventBus().emit('after.change.product.set.attribute'); });\n        }\n\n        /**\n         * @description After change attribute handler\n         * @param {object} response response object\n         * @returns {void}\n         */\n        afterChangeAttribute(response) {\n            super.afterChangeAttribute(response);\n\n            if (response && response.product) {\n                this.setSelectProduct(response.product.productType);\n                this.updateAvailabilitySection(response.product);\n                this.updateCallOut(response.product);\n            }\n        }\n\n        /**\n         * @description trigger change from different widgets (swatch, select)\n         * Saves `selectWidget.id` into a property for further global notifications etc.\n         * Later, when triggering event, `selectWidget.id` will be analyzed in order to send with event correct data.\n         * @param {InputStepper} selectWidget widget\n         * @returns {Promise<object|null>} Promise object represents server response with attribute changing result\n         */\n        changeAttribute(selectWidget) {\n            this.changeAttributeID = selectWidget.id;\n            const selected = selectWidget.getSelectedOptions();\n\n            if (!selected || selected.data('attrIsSelected')) {\n                return Promise.resolve(null);\n            }\n\n            const requestURL = appendParamsToUrl(selected.data('attrUrl'), {\n                partOfProductSet: true,\n                productSetId: this.prefs().productSetId\n            });\n\n            const requestObject = submitFormJsonWithAbort(requestURL, undefined, 'GET', true);\n\n            this.changeAttributeRequests.push(requestObject);\n\n            // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.\n            return requestObject.promise\n                .then((response) => {\n                    this.afterChangeAttribute(response);\n\n                    return response;\n                })\n                .catch(e => {\n                    if (e.name === 'AbortError') {\n                        return;\n                    }\n\n                    showErrorLayout(e);\n                })\n                .finally(() => {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n                    const index = this.changeAttributeRequests.indexOf(requestObject);\n\n                    if (index > -1) {\n                        // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n                        this.changeAttributeRequests.splice(index, 1);\n                    }\n                });\n        }\n\n        /**\n         * @description Event handler for product select via chakbox in a product set\n         * @returns {void}\n         */\n        onProductSelect() {\n            this.ref('self').toggleClass(\n                this.prefs().selectedClass,\n                this.productSelected()\n            );\n\n            this.emit('productselected');\n        }\n\n        /**\n         * @description Checks if product is selected\n         * @returns {boolean} if product is selected\n         */\n        productSelected() {\n            return this.getById('selectProduct', selectProduct => selectProduct.getValue());\n        }\n\n        /**\n         * @description Get current product ID\n         * @returns {string} current product ID\n         */\n        getProductId() {\n            return this.config.pid;\n        }\n    }\n\n    return SetProductDetail;\n}\n","/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Specifications} Specifications\n */\n\nexport default function (Widget) {\n    class Specifications extends Widget {\n        init() {\n            const currentProduct = document.getElementById('current-product');\n\n            if (!currentProduct) {\n                return;\n            }\n\n            this.currentProductSpecifications = JSON.parse(currentProduct?.getAttribute('data-items'));\n            this.itemsSpecs = [...this.ref('self').get().querySelectorAll('.b-product_specifications')];\n            this.addHeadings();\n            this.parseData();\n        }\n\n        /**\n         * @description Add comparison table headings\n        */\n        addHeadings() {\n            let rows = '';\n\n            this.currentProductSpecifications.forEach((spec) => {\n                if (spec.id === 'washcare') {\n                    return;\n                }\n\n                rows += `<li class=\"b-product_specifications-row\">\n                            <div class=\"b-product_specifications-label\">\n                                ${spec.name}\n                            </div>\n                        </li>`;\n            });\n\n            const html = `<ul class=\"b-product_specifications m-comparison\">${rows}</ul>`;\n\n            this.ref('headings').get().innerHTML = html;\n        }\n\n        /**\n         * @description Parse specifications from each product\n        */\n        parseData() {\n            this.itemsSpecs?.forEach(spec => {\n                const data = JSON.parse(spec.getAttribute('data-items'));\n                const obj = {};\n\n                data.forEach(item => {\n                    obj[item.id] = {\n                        name: item.name,\n                        value: item.value\n                    };\n                });\n\n                this.renderItemSpecs(spec, obj);\n            });\n        }\n\n        /**\n         * @description Add comparison table headings\n         * @param {HTMLElement} _el HTMLElement\n         * @param {Object} obj object with item's specifications data\n        */\n        renderItemSpecs(_el, obj) {\n            let rows = '';\n\n            this.currentProductSpecifications.forEach((spec) => {\n                if (spec.id === 'washcare') {\n                    return;\n                }\n\n                let name = spec.name;\n                let value = '-';\n\n                if (obj[spec.id]) {\n                    ({ name = '', value = '-' } = obj[spec.id]);\n                }\n\n                rows += `<li class=\"b-product_specifications-row\">\n                            <div class=\"b-product_specifications-label\">\n                                ${name}\n                            </div>\n                            <div class=\"b-product_specifications-value\">\n                                ${value}\n                            </div>\n                        </li>`;\n            });\n\n            _el.innerHTML = rows;\n        }\n    }\n\n    return Specifications;\n}\n","import { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @typedef {ReturnType<typeof import('plugin_wishlists/wishlist/AddToWishlistMixin').default>} BaseAddToWishlistMixin\n * @typedef {InstanceType<ReturnType<typeof import('widgets/global/Button').default>>} button\n */\n\n/**\n * @description Extended AddToWishlistMixin widget\n * @param {BaseAddToWishlistMixin} BaseAddToWishlistMixin Base widget for extending\n * @returns {typeof EProductAddToWishlistMixin} ExtendedWishlistItem widget\n */\nexport default function (BaseAddToWishlistMixin) {\n    class EProductAddToWishlistMixin extends BaseAddToWishlistMixin {\n        /**\n         * @description Handle click on the button\n         * @listens dom#click\n         * @param {button} button Target button\n         */\n        wishlistButtonClickHandler(button) {\n            if (button.isActive()) {\n                this.removeProductFromWishlist(button);\n            } else {\n                this.validateAndSubmit(button, this.addToWishlist);\n            }\n        }\n\n        /**\n         * @description submit item to wishlist\n         * @param {button} addButton - button\n         * @param {object} eVoucherData - form fields\n         * @returns {Promise} Promise object represents server response for product updating\n         */\n        addToWishlist(addButton, eVoucherData = {}) {\n            const addToWishlistUrl = window.sfccData.wishlistActionUrls?.addToWishlist;\n            const options = this.prefs().productOptions;\n            let customOptionValue = '';\n            let optionId = '';\n            let optionVal = '';\n\n            if (options && options.length) {\n                optionId = options[0].id;\n                optionVal = options[0].selectedValueId;\n                customOptionValue = this.getCustomOptionValue(options[0].id);\n            }\n\n            const amount = this.getEProductAmount();\n\n            addButton.busy();\n            this.getById(this.prefs().addToWishlistMsg, (labelAddToWishlistMsg) => labelAddToWishlistMsg.hide());\n\n            return submitFormJson(addToWishlistUrl, {\n                pid: this.prefs().pid || '',\n                qty: this.prefs().selectedQuantity || '',\n                optionId: optionId,\n                optionVal: optionVal,\n                customOptionValue: customOptionValue,\n                amount: amount > 0 ? amount.toString() : '',\n                ...eVoucherData\n            })\n                .then(response => {\n                    this.handleSuccess(response);\n\n                    return response;\n                })\n                .catch(() => {\n                    this.showWishlistMessage(this.prefs().textNetworkError, true);\n                })\n                .finally(() => {\n                    addButton.unbusy();\n                });\n        }\n    }\n\n    return EProductAddToWishlistMixin;\n}\n","/**\n * @param AjaxForm Base widget for extending\n * @returns BackInStock widget\n */\nexport default function (AjaxForm: ReturnType<typeof import('widgets/forms/AjaxForm').default>) {\n    /**\n     * @category widgets\n     * @subcategory forms\n     * @class BackInStock\n     * @augments AjaxForm\n     * @classdesc Represents BackInStock component with next features:\n     * 1. Updates product id of the product available for back in stock\n     *\n     * @property {string} data-widget - Widget name `backInStock`\n     * @example <caption>Example of BackInStock widget usage</caption>\n     *  <form>\n     *      ...\n     *      <input\n     *          type=\"hidden\"\n     *          data-widget=\"inputHidden\"\n     *          data-ref=\"field\"\n     *          data-id=\"backInStockProductId\"\n     *          value=\"${product.id}\"\n     *          name=\"${pdict.backInStockForm.productID.htmlName}\"\n     *      />\n     *      ...\n     *  /form>\n     */\n    class BackInStock extends AjaxForm {\n        updateProductId(productId) {\n            this.getById('backInStockProductId', (backInStockProductId) => {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'setValue' does not exist on type 'Widget... Remove this comment to see the full error message\n                backInStockProductId.setValue(productId);\n            });\n        }\n    }\n\n    return BackInStock;\n}\n","import { scrollWindowTo } from 'widgets/toolbox/scroll';\nimport { submitFormJson } from 'widgets/toolbox/ajax';\n\n/**\n * @description Base AddAllToCartMixin implementation\n *\n * This class is not intended to have a separate DOM representation.\n *\n * @param ProductSet Base widget for extending\n * @returns Add to Cart mixin widget\n */\nexport default function (ProductSet: ReturnType<typeof import('widgets/product/ProductSet').default>) {\n    /**\n     * @class AddAllToCartMixin\n     * @augments ProductSet\n     * @subcategory product\n     * @classdesc Represents product set component with the next features:\n     * 1. Adds all product set products to the basket\n     * 2. Shows alert message after adding product set products to the basket\n     *\n     * @property {string} data-text-network-error - network error text\n     */\n    class AddAllToCartMixin extends ProductSet {\n        prefs() {\n            return {\n                pid: '',\n                processingRequest: false,\n                selectedQuantity: '',\n                showMinicartOnProductAdd: '',\n                showAlertOnProductAdd: '',\n                addToCartGlobalMsg: '',\n                textNetworkError: '',\n                accessibilityAlerts: {\n                    addedsettocart: ''\n                },\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.eventBus().on('product.updated', 'onProductItemUpdated');\n        }\n\n        /**\n         * @description If product set has unselected product variation,\n         * show error message for all such products, scroll to the first one error and set focus first product with error\n         * @returns {void}\n         */\n        handleUnselectedProduct() {\n            let unselectedProduct: HTMLElement|undefined;\n\n            this.eachChild((child) => {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'productSetItem' does not exist on type '... Remove this comment to see the full error message\n                if (child.prefs().productSetItem && (!child.prefs().readyToOrder)) {\n                    child.getById('addToCartMsg', (addToCartMsg) => {\n                        const error = true;\n\n                        // @ts-expect-error ts-migrate(2339) FIXME: Property 'textSelectOptions' does not exist on typ... Remove this comment to see the full error message\n                        const msg = child.prefs().textSelectOptions;\n\n                        addToCartMsg.render(\n                            'template',\n                            { msg, error },\n                            addToCartMsg.ref('container')\n                        ).then(() => addToCartMsg.show());\n                    });\n\n                    if (!unselectedProduct) {\n                        unselectedProduct = <HTMLElement> child.getById(\n                            'productName',\n                            (productName) => productName.ref('titleLink').get()\n                        );\n                    }\n                }\n            });\n\n            if (unselectedProduct) {\n                unselectedProduct.focus();\n                scrollWindowTo(unselectedProduct, true);\n            }\n        }\n\n        /**\n         * @description Returns product set data for the set items\n         * @returns {Array} result\n         */\n        getProductSetItems() {\n            const productSetItems = [];\n\n            this.eachChild((child) => {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'productSetItem' does not exist on type '... Remove this comment to see the full error message\n                if (child.prefs().productSetItem) {\n                    let isOutOfStock = false;\n\n                    child.getById('addToCart', (addToCart) => {\n                        // @ts-expect-error ts-migrate(2339) FIXME: Property 'isOutOfStock' does not exist on type '{ ... Remove this comment to see the full error message\n                        isOutOfStock = !!addToCart.prefs().isOutOfStock;\n                    });\n\n                    productSetItems.push({\n\n                        // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.\n                        pid: child.prefs().currentProductId || child.prefs().pid,\n\n                        // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.\n                        quantity: child.prefs().selectedQuantity,\n\n                        // @ts-expect-error ts-migrate(2322) FIXME: Type 'boolean' is not assignable to type 'never'.\n                        available: !isOutOfStock,\n\n                        // @ts-expect-error ts-migrate(2322) FIXME: Type 'any' is not assignable to type 'never'.\n                        readyToOrder: child.prefs().readyToOrder\n                    });\n                }\n            });\n\n            return productSetItems;\n        }\n\n        /**\n         * @description Returns an array with products available for ordering\n         * @param {Array} productSetItems - product set data for the set items\n         * @returns {Array} result\n         */\n        getPidsObj(productSetItems) {\n            return productSetItems.filter(setItem => setItem.available).map((childProduct) => {\n                return {\n                    pid: childProduct.pid,\n                    qty: childProduct.quantity\n                };\n            });\n        }\n\n        /**\n         * @description On add all to cart button click handler\n         * @param {any} button - button\n         * @returns {Promise<object|null>} Promise object represents server response for session continuation\n         */\n        onAddAllToCart(button) {\n            if (this.prefs().processingRequest) {\n                return Promise.resolve(null);\n            }\n\n            const productSetItems = this.getProductSetItems();\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'readyToOrder' does not exist on type 'ne... Remove this comment to see the full error message\n            const unselectedProduct = productSetItems.find((setItem) => !setItem.readyToOrder && setItem.available);\n\n            if (unselectedProduct) {\n                this.handleUnselectedProduct();\n\n                return Promise.resolve(null);\n            }\n\n            const pidsObj = this.getPidsObj(productSetItems);\n            const isFullProductSet = pidsObj.length === productSetItems.length;\n\n            this.setPref('processingRequest', true);\n            button.startProcess();\n\n            this.getById(this.prefs().addToCartGlobalMsg, (addToCartGlobalMsg) => addToCartGlobalMsg.hide());\n\n            return submitFormJson(button.prefs().addToCartUrl, {\n                pid: this.prefs().pid || button.prefs().pid,\n                quantity: this.prefs().selectedQuantity || button.prefs().selectedQuantity,\n                pidsObj: JSON.stringify(pidsObj)\n            })\n                .then(response => {\n                    this.postAddAllToCart(response, isFullProductSet, pidsObj.length);\n\n                    return response;\n                })\n                .finally(() => {\n                    this.setPref('processingRequest', false);\n                    button.stopProcess();\n                }).catch(() => {\n                    this.showAddAllToCartAlert(true, this.prefs().textNetworkError);\n                });\n        }\n\n        /**\n         * @description Handles a result of product set adding to cart\n         * @param {object} response - response\n         * @param {boolean} isFullProductSet - Identifies if all product set items are added\n         * @param {number} productsCount - products count to be added to the cart\n         * @returns {void}\n         */\n        postAddAllToCart(response, isFullProductSet, productsCount) {\n            if (!response.error && response.cart && response.messages) {\n                const cartModel = response.cart;\n\n                cartModel.showMinicart = this.prefs().showMinicartOnProductAdd;\n\n                const isAllProductsAdded = response.messages && (response.messages.length === productsCount);\n                const message = isFullProductSet && isAllProductsAdded\n                    ? this.prefs().accessibilityAlerts.addedsettocart\n                    : response.messages.join('<br>');\n\n                this.showAddAllToCartAlert(false, message);\n\n                this.eventBus().emit('product.added.to.cart', cartModel, this);\n            } else {\n                this.showAddAllToCartAlert(true, response.message);\n            }\n        }\n\n        /**\n         * @description Shows alert message after adding a product set to the cart\n         * @param {boolean} error - identifies if message should be shown as an error\n         * @param {*} message - message\n         * @returns {void}\n         */\n        showAddAllToCartAlert(error, message) {\n            if (!this.prefs().showAlertOnProductAdd) {\n                return;\n            }\n\n            this.getById(this.prefs().addToCartGlobalMsg, (addToCartGlobalMsg) => {\n                addToCartGlobalMsg.render(\n                    'template',\n                    {\n                        msg: message,\n                        error\n                    },\n                    addToCartGlobalMsg.ref('container')\n                ).then(() => addToCartGlobalMsg.show());\n            });\n        }\n\n        onProductItemUpdated() {\n            if (!this.prefs().showAlertOnProductAdd) {\n                return;\n            }\n\n            this.getById(this.prefs().addToCartGlobalMsg, (addToCartGlobalMsg) => {\n                addToCartGlobalMsg.hide();\n            });\n        }\n    }\n\n    return AddAllToCartMixin;\n}\n","import { TWidget } from 'widgets/Widget';\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/**\n * @description Base ColorSwatch implementation\n * @param Widget Base widget for extending\n * @returns Color Swatch widget\n */\nexport default function (Widget: TWidget) {\n    /**\n     * @class ColorSwatch\n     * @augments Widget\n     */\n    class ColorSwatch extends Widget {\n        selectColor(option) {\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'selectedOption' does not exist on type '... Remove this comment to see the full error message\n            this.selectedOption = option;\n            this.emit('change', this);\n        }\n\n        getSelectedOptions() {\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'selectedOption' does not exist on type '... Remove this comment to see the full error message\n            if (this.selectedOption) {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'selectedOption' does not exist on type '... Remove this comment to see the full error message\n                return this.selectedOption;\n            }\n\n            return new RefElement([]);\n        }\n    }\n\n    return ColorSwatch;\n}\n","import { TWidget } from 'widgets/Widget';\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, submitFormJsonWithAbort } from 'widgets/toolbox/ajax';\nimport { showErrorLayout } from 'widgets/toolbox/util';\nimport { debounce } from 'widgets/toolbox/debounce';\n\n/**\n * @typedef {InstanceType<typeof import('widgets/toolbox/RefElement').RefElement>} refElement\n * @typedef {InstanceType<ReturnType<typeof import('widgets/forms/InputStepper').default>>} InputStepper\n */\n\n/**\n * @description Base ProductDetail implementation\n * @param Widget Base widget for extending\n * @returns Product Detail widget\n */\nexport default function (Widget: TWidget) {\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 {string} data-bundled-products - bundled products\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     * <main\n     *     role=\"main\"\n     *     class=\"l-pdp-main\"\n     *     data-widget=\"productDetail\"\n     *     data-ready-to-order=\"${product.readyToOrder}\"\n     *     data-text-network-error=\"${Resource.msg('error.alert.network', 'product', null)}\"\n     *     data-text-select-options=\"${Resource.msg('error.alert.select.options', 'product', null)}\"\n     *     data-text-stock-limit=\"${Resource.msg('error.alert.stock.limit', 'product', null)}\"\n     *     data-out-of-stock-label=\"${Resource.msg('label.outofstock', 'common', null)}\"\n     *     data-add-to-cart-label=\"${Resource.msg('button.addtocart', 'common', null)}\"\n     *     data-selected-quantity=\"${product.selectedQuantity}\"\n     *     data-analytics=\"${JSON.stringify(product.gtmInfo)}\"\n     *     data-pid=\"${product.id}\"\n     *     data-tau-product-id=\"${product.id}\"\n     *     data-add-to-wishlist-hide-texts=\"false\"\n     *     data-show-minicart-on-product-add.md.lg.xl=\"true\"\n     *     data-show-message-on-product-add=\"true\"\n     *     data-bundled-products=\"${JSON.stringify(product.bundledProducts)}\"\n     *     data-text-added-to-wishlist=\"${Resource.msg('button.added.to.wishlist', 'wishlist', null)}\"\n     *     data-accessibility-alerts='{\n     *         \"quantitychanged\": \"${Resource.msg('alert.quantitychanged', 'product', null)}\",\n     *         \"variationselected\": \"${Resource.msg('alert.variationselected', 'product', null)}\",\n     *         \"optionselected\": \"${Resource.msg('alert.optionselected', 'product', null)}\",\n     *         \"addedtocart\": \"${Resource.msg('alert.addedtocart', 'product', null)}\",\n     *         \"addedtowishlist\": \"${Resource.msg('alert.addedtowishlist', 'product', null)}\"\n     *     }'\n     * >\n     *     PDP content\n     * </main>\n     */\n    class ProductDetail extends Widget {\n        prefs() {\n            return {\n                addToCartMsg: 'addToCartMsg',\n                backInStock: 'backInStock',\n                disableHistory: false,\n                descriptions: 'descriptions',\n                currentProductId: '',\n                readyToOrder: false,\n                selectedQuantity: 0,\n                textSelectOptions: '',\n                textStockLimit: '',\n                outOfStockLabel: '',\n                updateLabel: '',\n                update: false,\n                accessibilityAlerts: {\n                    quantitychanged: '',\n                    // eslint-disable-next-line spellcheck/spell-checker\n                    optionselected: '',\n                    // eslint-disable-next-line spellcheck/spell-checker\n                    variationselected: ''\n                },\n                productOptions: [\n                    {\n                        id: '',\n                        selectedValueId: '',\n                        customOptionValue: null,\n                        values: [\n                            {\n                                isCustomOption: false,\n                                isCustomOptionSelected: false\n                            }\n                        ]\n                    }\n                ],\n                bundledProducts: [],\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Widget initialization\n         * @returns {void}\n         */\n        init() {\n            super.init();\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n            this.changeAttributeRequests = [];\n        }\n\n        /**\n         * @description updateProduct handler\n         * @param {object} updateBtn Response object\n         * @returns {Promise<object>} Promise object represents server response for product updating\n         */\n        updateProduct(updateBtn) {\n            const productOption = this.prefs().productOptions[0];\n\n            const selectedOptions = this.getSelectedProductOptions();\n            const isSelectedOptionsValid = this.validateProductOptions(selectedOptions);\n\n            if (!isSelectedOptionsValid) {\n                return Promise.resolve(null);\n            }\n\n            return submitFormJson(\n                updateBtn.ref('self').attr('data-update-url'),\n                {\n                    pid: this.prefs().currentProductId || updateBtn.prefs().pid,\n                    quantity: this.prefs().selectedQuantity || updateBtn.ref('self').attr('data-selected-quantity') || 1,\n                    uuid: updateBtn.ref('self').attr('data-uuid'),\n                    ...this.getAdditionalProductData(productOption)\n                }\n            )\n                .then((response) => {\n                    this.afterUpdateProduct(response);\n\n                    return response;\n                })\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            // @ts-expect-error ts-migrate(2339) FIXME: Property 'currentGtmInfo' does not exist on type '... Remove this comment to see the full error message\n            this.currentGtmInfo = product.gtmInfo;\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'uuid' does not exist on type 'ProductDet... Remove this comment to see the full error message\n            this.uuid = product.uuid;\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'stock' does not exist on type 'ProductDe... Remove this comment to see the full error message\n            this.stock = product.availability && product.availability.stock ? product.availability.stock : null;\n\n            this.setPref('selectedQuantity', product.selectedQuantity);\n            this.setPref('currentProductId', product.id);\n            this.setPref('readyToOrder', product.readyToOrder);\n\n            this.setGtmInfo(product);\n\n            this.getById(this.prefs().addToCartMsg, (addToCartMsg) => {\n                addToCartMsg.hide();\n            });\n\n            this.getById(this.prefs().backInStock, (backInStock) => {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'updateProductId' does not exist on type ... Remove this comment to see the full error message\n                backInStock.updateProductId(product.id);\n            });\n\n            this.renderVariationAttributes(product);\n            this.renderProductOptions(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            this.updateRatings(product);\n        }\n\n        /**\n         * @description Update product reviews block\n         * @param {object} product Product object\n         * @returns {Promise<void|null>} Promise object represents ratings rendering result\n         */\n        updateRatings(product) {\n            const ratings = [1, 2, 3, 4, 5].map((currentValue, index) => {\n                const starObj = {\n                    position: index > 0 ? index * 20 : 0\n                };\n\n                if (product.rating >= currentValue) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isFull' does not exist on type '{ positi... Remove this comment to see the full error message\n                    starObj.isFull = true;\n                } else if ((product.rating % 1 > 0) && (Math.ceil(product.rating) >= currentValue)) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isHalf' does not exist on type '{ positi... Remove this comment to see the full error message\n                    starObj.isHalf = true;\n                } else {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'isEmpty' does not exist on type '{ posit... Remove this comment to see the full error message\n                    starObj.isEmpty = true;\n                }\n\n                return starObj;\n            });\n            let renderingResult;\n\n            this.has('productRatings', (productRatings) => {\n                const link = productRatings.data('addProductLinkToRatingsLink')\n                    ? product.selectedProductUrl\n                    : '';\n\n                renderingResult = this.render('productRatingsPDPTemplate', { product, ratings, link }, productRatings);\n            });\n\n            return renderingResult || Promise.resolve(null);\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         * TODO: Move from widget properties to preferences\n         *\n         * @description Set GTM info\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        setGtmInfo(product) {\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'currentGtmInfo' does not exist on type '... Remove this comment to see the full error message\n            this.currentGtmInfo = product.gtmInfo;\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'currentGtmInfo' does not exist on type '... Remove this comment to see the full error message\n            if (this.currentGtmInfo && product.selectedQuantity) {\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'currentGtmInfo' does not exist on type '... Remove this comment to see the full error message\n                this.currentGtmInfo.quantity = product.selectedQuantity;\n            }\n        }\n\n        /**\n         * @description Render product options\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderProductOptions(product) {\n            const CUSTOM_OPTION_VALUE_ID = 'CUSTOM_TEXT';\n            const options = product.options;\n\n            if (!options && !options.length) { return; }\n\n            options.forEach(productOption => {\n                const productOptionId = productOption.id;\n\n                this.getById('option-' + productOptionId, (option) => {\n                    let previousCustomOptionValue = '';\n\n                    if (productOption.selectedValueId === CUSTOM_OPTION_VALUE_ID) {\n                        option.getById('customOptionText', (customOptionText) => {\n                            // @ts-expect-error ts-migrate(2322) FIXME: Type 'string | RefElement' is not assignable to ty... Remove this comment to see the full error message\n                            previousCustomOptionValue = customOptionText.ref('field').val();\n                        });\n                    }\n\n                    option.render('template', { option: productOption }, option.ref('container'))\n                        .then(() => {\n                            this.setPref('productOptions', options);\n\n                            if (productOption.selectedValueId === CUSTOM_OPTION_VALUE_ID) {\n                                option.getById('customOptionText', (customOptionText) => {\n                                    customOptionText.ref('field').val(previousCustomOptionValue);\n                                });\n                            }\n                        });\n                });\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                        }, attribute.ref('container'));\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            const availability = product.availability;\n            const response = product.quantities;\n\n            if (!response || !availability) { return; }\n\n            this.getById('quantity', (quantity) => {\n                quantity.render(\n                    'template',\n                    {\n                        attr: {\n                            currentQty: response.currentValue,\n                            max: response.max,\n                            min: response.min,\n                            step: response.step\n                        },\n                        isOutOfStock: (availability && availability.isOutOfStock) || false\n                    },\n                    quantity.ref('container')\n                ).then(function () {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'update' does not exist on type 'Widget'.\n                    quantity.update();\n                    quantity.setPref('attrUrl', response.actionUrl);\n                });\n            });\n        }\n\n        /**\n         * @description Render product name\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        renderName(product) {\n            this.getById('productName', (productName) => {\n                productName.render('template', { product }, productName.ref('container'));\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\n            if (product.availability\n                && product.availability.messages\n                && (product.readyToOrder || product.isInaccessibleVariant)\n            ) {\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            this.has('productAvailabilityMsg', 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                // @ts-expect-error ts-migrate(2339) FIXME: Property 'renderImages' does not exist on type 'Wi... Remove this comment to see the full error message\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, descriptionsAccordion => {\n                descriptionsAccordion.render(\n                    'template',\n                    product,\n                    descriptionsAccordion.ref('container')\n                // @ts-expect-error ts-migrate(2551) FIXME: Property 'reinit' does not exist on type 'Widget'.... Remove this comment to see the full error message\n                ).then(() => descriptionsAccordion.reinit());\n            });\n        }\n\n        /**\n         * @description Update social links\n         * @param {object} product Product object\n         * @returns {void}\n         */\n        updateSocialLinks(product) {\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         * @description trigger change from different widgets (swatch, select)\n         * Saves `selectWidget.id` into a property for further global notifications etc.\n         * Later, when triggering event, `selectWidget.id` will be analyzed in order to send with event correct data.\n         * @param {InputStepper} selectWidget widget\n         * @returns {Promise<object|null>} Promise object represents server response with attribute changing result\n         */\n        changeAttribute(selectWidget) {\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            this.changeAttributeID = selectWidget.id;\n            const selected = selectWidget.getSelectedOptions();\n\n            if (!selected || selected.data('attrIsSelected')) {\n                return Promise.resolve(null);\n            }\n\n            const requestObject = submitFormJsonWithAbort(selected.data('attrUrl'), undefined, 'GET', true);\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n            this.changeAttributeRequests.push(requestObject);\n\n            // @ts-expect-error ts-migrate(2532) FIXME: Object is possibly 'undefined'.\n            return requestObject.promise\n                .then((response) => {\n                    this.afterChangeAttribute(response);\n\n                    return response;\n                })\n                .catch(e => {\n                    if (e.name === 'AbortError') {\n                        return;\n                    }\n\n                    showErrorLayout(e);\n                })\n                .finally(() => {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n                    const index = this.changeAttributeRequests.indexOf(requestObject);\n\n                    if (index > -1) {\n                        // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n                        this.changeAttributeRequests.splice(index, 1);\n                    }\n                });\n        }\n\n        /**\n         * @description After change attribute 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(response);\n            }\n        }\n\n        /**\n         * @description Aborts redundant update product quantity requests\n         * @returns {void}\n         */\n        dismissQty() {\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n            this.changeAttributeRequests.forEach((request) => {\n                request.abortController.abort();\n            });\n\n            // @ts-expect-error ts-migrate(2339) FIXME: Property 'changeAttributeRequests' does not exist ... Remove this comment to see the full error message\n            this.changeAttributeRequests = [];\n        }\n\n        /**\n         * @description Triggers global event after `afterChangeAttribute` method executed.\n         * Puts localized global alert event description\n         * @param {object} response response object\n         * @returns {void}\n         */\n        triggerChangeAttributeEvent(response) {\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            if (!this.changeAttributeID) {\n                return;\n            }\n\n            let accessibilityAlert = '';\n\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            if (this.changeAttributeID.indexOf('quantity') === 0) {\n                accessibilityAlert = this.prefs().accessibilityAlerts.quantitychanged;\n                this.showAlert(accessibilityAlert, response);\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            } else if (this.changeAttributeID.indexOf('attr-') === 0) {\n                // eslint-disable-next-line spellcheck/spell-checker\n                accessibilityAlert = this.prefs().accessibilityAlerts.variationselected;\n                this.showAlert(accessibilityAlert, response);\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            } else if (this.changeAttributeID.indexOf('option-') === 0) {\n                // eslint-disable-next-line spellcheck/spell-checker\n                accessibilityAlert = this.prefs().accessibilityAlerts.optionselected;\n\n                // since Options changes applied immediately we need to delay success\n                // message to not bother keyboard users\n\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'productOptionsSelect' does not exist on ... Remove this comment to see the full error message\n                if (!this.productOptionsSelect) {\n                    // @ts-expect-error ts-migrate(2339) FIXME: Property 'productOptionsSelect' does not exist on ... Remove this comment to see the full error message\n                    this.productOptionsSelect = debounce(() => {\n                        this.showAlert(accessibilityAlert, response);\n                    }, 2000, false, true);\n                }\n\n                // @ts-expect-error ts-migrate(2339) FIXME: Property 'productOptionsSelect' does not exist on ... Remove this comment to see the full error message\n                this.productOptionsSelect({});\n            }\n        }\n\n        /**\n         * @description Show global alert after `triggerChangeAttributeEvent` method executed.\n         * @param {string} accessibilityAlert Alert message text\n         * @param {object} response response object\n         * @returns {void}\n         */\n        showAlert(accessibilityAlert, response) {\n            this.eventBus().emit('alert.show', {\n                accessibilityAlert\n            });\n\n            // @ts-expect-error ts-migrate(2551) FIXME: Property 'changeAttributeID' does not exist on typ... Remove this comment to see the full error message\n            this.changeAttributeID = undefined;\n\n            this.afterUpdateProduct(response);\n        }\n\n        /**\n         * @description Update History State\n         * @param {object} product product object\n         */\n        updateHistoryState(product) {\n            window.history.replaceState(undefined, '', product.selectedProductUrl);\n        }\n\n        /**\n         * @description Validate product options\n         * @param selectedOptions Selected product options\n         * @returns Result of the validation product options\n         */\n        validateProductOptions(selectedOptions: Array<Record<string, unknown>|null>): boolean {\n            return false;\n        }\n\n        /**\n         * @description Get selected product options\n         * @returns Result\n         */\n        getSelectedProductOptions(): Array<Record<string, unknown>|null> {\n            return [];\n        }\n\n        /**\n         * @description Returns additional product data object\n         * @param productOption - product option\n         * @returns result\n         */\n        getAdditionalProductData(productOption?: Record<string, unknown>): Record<string, unknown> {\n            return {};\n        }\n    }\n\n    return ProductDetail;\n}\n","import { IRefElement } from 'widgets/toolbox/RefElement';\n\ntype ICarousel = InstanceType<ReturnType<typeof import('widgets/global/Carousel').default>>;\n\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 * @description Base ProductImages implementation\n * @param AccessibilityFocusTrapMixin mixin\n * @returns ProductImages widget\n */\nexport default function (\n    AccessibilityFocusTrapMixin: ReturnType<typeof import('widgets/global/AccessibilityFocusTrapMixin').default>\n) {\n    /**\n     * @class ProductImages\n     * @augments AccessibilityFocusTrapMixin\n     * @classdesc Basic ProductImages Widget, manages two images carousels: thumbnails and images.\n     * <br>Renders images from server response and update carousels states accordingly.\n     * <br>Listens to carousel scroll/click events to coordinate consistent work of two carousels.\n     * <br>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     * <div\n     *     data-widget=\"productImages\"\n     *     data-thumbnails-per-frame=\"4\"\n     * >\n     *     <div\n     *         class=\"b-product_gallery\"\n     *         data-ref=\"carouselInner\"\n     *     >\n     *         <div\n     *             class=\"b-product_gallery-thumbs\"\n     *             data-widget=\"carousel\"\n     *             id=\"imagesThumbnails\"\n     *             ....\n     *             data-widget-event-pageclicked=\"onThumbnailCarouselPageClicked\"\n     *         >...</div>\n     *         <div\n     *             class=\"b-product_gallery-main b-product_slider\"\n     *             data-widget=\"carousel\"\n     *             id=\"imagesCarousel\"\n     *             ....\n     *             data-widget-event-pagechanged=\"onImageCarouselPageChanged\"\n     *         >...</div>\n     *     </div>\n     *     <script type=\"template/mustache\" data-ref=\"galleryTemplate\">\n     *         <div\n     *             class=\"b-product_gallery\"\n     *             data-ref=\"carouselInner\"\n     *         >\n     *             ... mustache carousels templates\n     *         </div>\n     *     </script>\n     * </div>\n     */\n    class ProductImages extends AccessibilityFocusTrapMixin {\n        private gallery: typeof import('photoswipe');\n\n        private backFocusElement: HTMLElement | undefined;\n\n        private imageMode: string | undefined;\n\n        prefs() {\n            return {\n                thumbnailsPerFrame: 4,\n                thumbnailsZoomClass: 'm-zoomed-in',\n                classesGlobalDialog: 'm-has_dialog',\n                zoomLoop: false,\n                zoomClickToCloseNonZoomable: false,\n                zoomCloseElClasses: '',\n                closeOnScroll: false,\n                predefinedHeight: 1773,\n                predefinedWidth: 1333,\n                barsSizeBottom: 'auto',\n                barsSizeTop: 24,\n                showHideOpacity: true,\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n            this.onDestroy(() => {\n                if (this.gallery) {\n                    this.gallery.close();\n                    this.gallery.destroy();\n                    this.gallery = undefined;\n                }\n            });\n        }\n\n        /**\n         * @description Render product images\n         * @param product - product object\n         * @returns Promise object represents product images rendering result\n         */\n        renderImages(product): Promise<void|null> {\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\n                    element.zoomUrl = zoomImage && zoomImage.url;\n                });\n\n                return this.render('galleryTemplate', product,\n                    this.ref('carouselInner')).then(() => {\n                    this.update();\n                });\n            } else {\n                return Promise.resolve(null);\n            }\n        }\n\n        /**\n         * @description Handler to sync main carousel with thumbnails carousel\n         * @param el - event source element\n         * @param page - current page number\n         */\n        onImageCarouselPageChanged(el: IRefElement, page: number): void {\n            this.getById('imagesThumbnails', (carousel: ICarousel) => {\n                if (this.imageMode !== IMAGE_MODE_ZOOM) {\n                    carousel\n                        .markCurrentPage(page)\n                        .scrollIntoView();\n                }\n            });\n        }\n\n        /**\n         * @description Handle thumbs click to sync zoom and thumbs state\n         * @param el - event source element\n         * @param page - current page number\n         */\n        onThumbnailCarouselPageClicked(el : IRefElement, page: number): void {\n            this.getById('imagesCarousel', (carousel: ICarousel) => carousel.scrollToPage(page));\n\n            if (this.imageMode === IMAGE_MODE_ZOOM && this.gallery) {\n                this.gallery.goTo(page);\n            }\n\n            this.getById('imagesThumbnails', (carousel: ICarousel) => {\n                carousel\n                    .markCurrentPage(page)\n                    .scrollIntoView();\n            });\n        }\n\n        /**\n         * @description reset gallery state on PDP update\n         */\n        update(): void {\n            this.getById('imagesThumbnails', (carousel: ICarousel) => carousel\n                .update()\n                .scrollToPage(0)\n                .markCurrentPage(0));\n\n            this.getById('imagesCarousel', (carousel: ICarousel) => 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 return new Promise with image sizes\n         */\n        getOriginalImageSize(): Promise<{ originalHeight: number, originalWidth: number }> {\n            return new Promise((resolve) => {\n                const imgCarousel = <ICarousel> this.getById('imagesCarousel', (carousel: ICarousel) => carousel);\n                const predefinedSize = {\n                    originalHeight: this.prefs().predefinedHeight,\n                    originalWidth: this.prefs().predefinedWidth\n                };\n\n                if (!imgCarousel) {\n                    resolve(predefinedSize);\n                } else {\n                    const firstImage = this.getCarouselImages()[0];\n\n                    if (firstImage.dataset.originalSrc) {\n                        const img = new Image();\n\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(): void {\n            this.backFocusElement = document.activeElement instanceof HTMLElement ? document.activeElement : document.body;\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 }): void {\n            const pswpElement = document.querySelectorAll('.pswp')[0];\n            const imgCarousel = <ICarousel> this.getById('imagesCarousel', (carousel: ICarousel) => carousel);\n            const thumbnailsCarousel = <ICarousel> this.getById('imagesThumbnails', (thumbnails: ICarousel) => thumbnails);\n\n            if (!imgCarousel || !(pswpElement instanceof HTMLElement)) {\n                return;\n            }\n\n            pswpElement.setAttribute('data-tau', 'zoom_dialog');\n\n            const items = this.getCarouselImages().map((element: HTMLImageElement) => {\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                barsSize: { top: prefs.barsSizeTop, bottom: prefs.barsSizeBottom },\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('doubleTap', () => {\n                const isZoomIn = gallery.getZoomLevel() === 1; // When double tap event reported we actually have previous state\n\n                pswpElement.classList.toggle('pswp--zoomed-in', !isZoomIn);\n            });\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\n            this.imageMode = IMAGE_MODE_ZOOM;\n\n            if (thumbnailsCarousel) {\n                this.toggleZoomState(true);\n            }\n\n            this.addGlobalDialogClass();\n            this.addFocusTrap();\n\n            if (thumbnailsCarousel) {\n                thumbnailsCarousel.updateCarouselMetric();\n                thumbnailsCarousel.updateCarouselState();\n            }\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(): Promise<typeof import('photoswipe')> {\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         * @listens dom#click\n         */\n        onImageCarouselPageClicked(): void {\n            this.zoom();\n        }\n\n        /**\n         * @description Click handler for \"zoom\" icon\n         * @listens dom#click\n         */\n        openZoom() {\n            this.zoom();\n        }\n\n        /**\n         * @description Generic method to open zoom popup\n         */\n        zoom(): void {\n            this.loadPhotoswipeDependencies()\n                .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         * @listens dom#click\n         */\n        closeZoom(): void {\n            if (this.gallery) {\n                this.gallery.close();\n\n                const thumbnailsCarousel = <ICarousel> this.getById(\n                    'imagesThumbnails',\n                    (thumbnails: ICarousel) => thumbnails\n                );\n\n                if (thumbnailsCarousel) {\n                    thumbnailsCarousel.updateCarouselMetric();\n                    thumbnailsCarousel.updateCarouselState();\n                }\n            }\n\n            const pswpElement = document.querySelectorAll('.pswp')[0];\n\n            pswpElement?.removeAttribute('data-tau');\n        }\n\n        /**\n         * @description Zoom Keydown Event handler\n         * @listens dom#keydown\n         * @param _ Source of keydown event\n         * @param event  Event object\n         */\n        closeZoomKeydown(_: IRefElement, event: KeyboardEvent): void {\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(): void {\n            this.toggleZoomState(false);\n\n            this.imageMode = IMAGE_MODE_CAROUSEL;\n            this.removeGlobalDialogClass();\n\n            if (this.backFocusElement) {\n                this.backFocusElement.focus();\n                this.backFocusElement = undefined;\n            }\n        }\n\n        /**\n         * @description Add Global Dialog Class\n         */\n        addGlobalDialogClass(): void {\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         */\n        removeGlobalDialogClass(): void {\n            this.ref('html').removeClass(this.prefs().classesGlobalDialog);\n        }\n\n        /**\n         * @description Enter / space handler to initiate zoom popup\n         * @listens dom#keydown\n         * @param _el event source element\n         * @param event event instance if DOM event\n         */\n        handleKeydown(_el: IRefElement, event: KeyboardEvent): void {\n            if (event.keyCode === keyCode.ENTER || event.keyCode === keyCode.SPACE) {\n                event.preventDefault();\n                event.stopPropagation();\n                this.zoom();\n            }\n        }\n\n        /**\n         * @description Get list of main carousel product images\n         */\n        getCarouselImages(): Array<HTMLImageElement> {\n            const imgCarousel = <ICarousel> this.getById('imagesCarousel', (carousel: ICarousel) => carousel);\n            const imagesContainer: HTMLElement | undefined = imgCarousel.ref(imgCarousel.prefs().elemCarouselTrack).get();\n\n            return [].slice.call(imagesContainer?.querySelectorAll('img')) || [];\n        }\n\n        /**\n         * @description Toggle Zoom state on Thumbnails carousel\n         * @param state flag for toggle zoom state\n         */\n        toggleZoomState(state: boolean): void {\n            const thumbnails = <ICarousel> this.getById('imagesThumbnails',\n                (thumbnailsCarousel: ICarousel) => thumbnailsCarousel);\n\n            thumbnails.ref('self').toggleClass(this.prefs().thumbnailsZoomClass, state);\n        }\n    }\n\n    return ProductImages;\n}\n","import { TWidget } from 'widgets/Widget';\nimport { scrollWindowTo } from 'widgets/toolbox/scroll';\n\n/**\n * @param Widget Base widget for extending\n * @returns Product Set widget\n */\nexport default function (Widget: TWidget) {\n    /**\n     * @category widgets\n     * @subcategory product\n     * @class ProductSet\n     * @augments Widget\n     * @classdesc Represents product set component with the next features:\n     * 1. Scrolls page to the product list, once `Show the collection` button pressed.\n     *\n     * @example <caption>Example of product set component usage</caption>\n     *\n     * <div\n            data-widget=\"productSet\"\n            ...\n        >\n            ...\n            <div class=\"l-pdp\" data-ref=\"productsContainer\">\n                ....\n            </div>\n            <div class=\"l-pdp-main m-product_set_buy_all\">\n                ....\n            </div>\n        </div>\n     */\n    class ProductSet extends Widget {\n        /**\n         * @description Returns Widget configuration object\n         * @returns {object} Widget configuration object\n         */\n        prefs() {\n            return {\n                productDetailId: 'productDetail-0',\n                ...super.prefs()\n            };\n        }\n\n        /**\n         * @description Scrolls page to the products list and set focus on first product item\n         * @returns {void}\n         */\n        onShopCollection() {\n            const productsContainer = this.ref('productsContainer').get();\n\n            if (productsContainer) {\n                this.getById(this.prefs().productDetailId, (productDetail) => {\n                    productDetail.getById('productName', (productName) => {\n                        productName.ref('titleLink').focus();\n                    });\n                });\n                scrollWindowTo(productsContainer, true);\n            }\n        }\n    }\n\n    return ProductSet;\n}\n","import { RefElement } from 'widgets/toolbox/RefElement';\n\ntype IVideo = InstanceType<ReturnType<typeof import('widgets/global/Video').default>>;\ntype ICarousel = InstanceType<ReturnType<typeof import('widgets/global/Carousel').default>>;\n\n/**\n * @description Base ProductVideoMixin implementation\n * @param ProductImages Base widget for extending\n */\nexport default function (ProductImages: ReturnType<typeof import('widgets/product/ProductImages').default>) {\n    /**\n     * @class ProductVideoMixin\n     * @augments ProductImages\n     * @subcategory product\n     * @classdesc Represents product video with the next features:\n     * 1. Show video element and start to play the video when the video thumbnail is clicked\n     * 2. Hide video element and stop the video to when an image thumbnail is clicked\n     */\n    class ProductVideoMixin extends ProductImages {\n        /**\n         * @description Show video element and start to play the video when the video thumbnail is clicked\n         */\n        showVideoElement(): void {\n            this.getById('imagesCarousel', (carousel) => {\n                carousel.ref('elemVideoWrapper').show().focus();\n\n                // Start playing video\n                const elemVideo = <HTMLIFrameElement> carousel.ref('elemVideo').get();\n\n                if (elemVideo && elemVideo.contentWindow) {\n                    const { contentWindow } = elemVideo;\n\n                    contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n                }\n            });\n\n            this.getById<ICarousel>('imagesThumbnails', (carousel) => {\n                carousel.markCurrentPage(-1);\n            });\n        }\n\n        /**\n         * @description Hide video element and stop the video to when an image thumbnail is clicked\n         */\n        hideVideoElement(): void {\n            this.getById<IVideo>('videoThumbnail', (videoThumbnail) => {\n                videoThumbnail.hideVideo();\n            });\n\n            this.getById('imagesCarousel', (carousel) => {\n                carousel.ref('elemVideoWrapper').hide();\n\n                // Stop playing video\n                const elemVideo = <HTMLIFrameElement> carousel.ref('elemVideo').get();\n\n                if (elemVideo && elemVideo.contentWindow) {\n                    const { contentWindow } = elemVideo;\n\n                    contentWindow.postMessage('{\"event\":\"command\",\"func\":\"stopVideo\",\"args\":\"\"}', '*');\n                }\n            });\n        }\n\n        /**\n         * @description Hide video element when image thumbnail is clicked\n         * @param el - event source element\n         * @param page - current page number\n         */\n        onThumbnailCarouselPageClicked(el: RefElement, page: number): void {\n            super.onThumbnailCarouselPageClicked(el, page);\n\n            this.hideVideoElement();\n        }\n\n        /**\n         * @description Hide video element when clicking on image thumbnail or selecting thumbnail from the keyboard\n         * @param el - event source element\n         * @param page - current page number\n         */\n        onImageCarouselPageChanged(el: RefElement, page: number) {\n            super.onImageCarouselPageChanged(el, page);\n\n            this.hideVideoElement();\n        }\n    }\n\n    return ProductVideoMixin;\n}\n","import { setCookie, getCookie } from '../toolbox/cookie';\n\nconst DO_NOT_TRACKED_COOKIE = 'dw_dnt';\nconst RECENTLY_VIEWED_ENTRY = 'recentlyViewed';\nconst RECENTLY_VIEWED_ITEMS_LIMIT = 12;\n\n/**\n * @description Base RecentlyViewedMixin implementation\n * @param ProductDetail widget for extending\n * @returns Recently Viewed Mixin\n */\nexport default function (ProductDetail: ReturnType<typeof import('widgets/product/ProductDetail').default>) {\n    /**\n     * @class RecentlyViewedMixin\n     * @augments ProductDetail\n     * @subcategory product\n     * @classdesc Represents RecentlyViewed functionality.\n     * Uses only if Einstein recently viewed functionality for some reason cannot be used. Implement next features:\n     * 1. Checks if products tracking allowed\n     * 2. Stores product IDs (based on visited pages) in the cookie `recentlyViewed` if tracking allowed\n     * @property {boolean} data-recently-viewed-tracking-allowed - determines if recently view tracking allowed based on preference\n     * @property {string} data-master-pid - master product ID\n     */\n    class RecentlyViewedMixin extends ProductDetail {\n        prefs() {\n            return {\n                recentlyViewedTrackingAllowed: false,\n                masterPid: '',\n                ...super.prefs()\n            };\n        }\n\n        init() {\n            super.init();\n\n            this.trackViewedItem(this.prefs().masterPid);\n        }\n\n        /**\n         * @description Determines if recently viewed tracking allowed\n         * @returns {boolean} result\n         */\n        isTrackingAllowed() {\n            return (Number(getCookie(DO_NOT_TRACKED_COOKIE)) !== 1) && this.prefs().recentlyViewedTrackingAllowed;\n        }\n\n        /**\n         * @description Saves visited product IDs to cookies\n         * @param {Array} arr - array with product IDs of visited products\n         * @returns {void}\n         */\n        saveViewedItems(arr = []) {\n            setCookie(RECENTLY_VIEWED_ENTRY, arr.join('|'), 0, true);\n        }\n\n        /**\n         * @description Parses visited product IDs from the string\n         * @param {string} str - string with product IDs\n         * @returns {Array} result - array with product IDs\n         */\n        getViewedItems(str = '') {\n            if (!str) {\n                return [];\n            }\n\n            return str.split('|');\n        }\n\n        /**\n         * @description Saves visited product to cookies\n         * @param {string} pid - visited master product ID\n         * @returns {void}\n         */\n        trackViewedItem(pid = '') {\n            if (!pid || !this.isTrackingAllowed()) {\n                return;\n            }\n\n            let trackedProducts = this.getViewedItems(getCookie(RECENTLY_VIEWED_ENTRY));\n\n            trackedProducts = trackedProducts.filter(viewedItem => viewedItem !== pid);\n\n            trackedProducts.unshift(pid);\n\n            if (trackedProducts.length > RECENTLY_VIEWED_ITEMS_LIMIT) {\n                trackedProducts = trackedProducts.slice(1, RECENTLY_VIEWED_ITEMS_LIMIT);\n            }\n\n            // @ts-expect-error ts-migrate(2345) FIXME: Argument of type 'string[]' is not assignable to p... Remove this comment to see the full error message\n            this.saveViewedItems(trackedProducts);\n        }\n    }\n\n    return RecentlyViewedMixin;\n}\n"],"names":["timeout","BaseBackInStock","BackInStock","onSubmitted","data","success","redirectUrl","window","location","assign","error","setError","Array","isArray","join","fields","Object","entries","forEach","name","errorMsg","getById","input","emit","ref","hide","show","submitFormJson","AjaxForm","EVoucherDataForm","handleNoop","submitData","pliUUID","submitting","getFormUrl","getFormFields","attr","then","bind","catch","onError","finally","afterSubmission","debounce","Widget","CuttableContent","prefs","moreClass","activeClass","showMore","showLess","maxHeight","useLess","init","toggleButton","opened","ev","onRefresh","has","button","content","prop","removeClass","addClass","toggleContent","link","toggleClass","setText","AddAllToCartMixinBase","AddAllToCartMixin","classesBusy","getProductSetItems","productSetItems","eachChild","child","productSetItem","productSetSelected","isOutOfStock","addToCart","push","pid","currentProductId","quantity","selectedQuantity","available","readyToOrder","SET_ITEM_SELECTED_VALUE","productSelected","isAllProductAdded","addToCartResult","productsCount","messages","length","getPostAddToCartMessage","showAccessibilityAlerts","message","accessibilityAlerts","addedsettocart","isAddedToCartProductSet","currentProductSet","productID","toString","getAddedToCartProductSets","cartModel","pidsObj","pidIDs","map","pidObj","addedSetItemsIDs","filter","pidID","itemsIds","includes","productWidgets","reduce","setWidgets","postAddAllToCart","response","isFullProductSet","cart","showMinicart","showMinicartOnProductAdd","getPidsObj","isAllProductsAdded","showAddAllToCartAlert","showJustAddedProductCart","eventBus","subscriptionID","action","showMessageOnProductAdd","showCartMessage","numItems","showProgressBar","contexts","hideProgressBar","msg","addToCartMsg","spacesLength","concat","zeroWidthSpaceSymbol","render","BaseAlternativeImage","AlternativeImage","getAlternativeImageSrc","altImageUrl","baseImage","get","HTMLImageElement","baseImageUrl","currentSrc","src","altImageUrlParsed","URL","baseImageUrlParsed","disQueryString","search","origin","pathname","Availability","pdpAvailability","openBackInStockDialog","backInStockDialogTemplate","wrapperClasses","windowClasses","getAvailability","setAvailability","setPref","JSON","stringify","InputCheckbox","BuyTogetherCheckbox","disableCheckbox","preselectCheckbox","unselectCheckbox","SetProductDetail","BuyTogetherProduct","productAvailable","recommenderProduct","recommendationProductId","lowStockMessage","recommendationAvailable","preselectProduct","selectedClass","selectProduct","afterChangeAttribute","product","id","getRecommendationProductId","updateProductSelection","selectionFlag","updateAvailabilitySection","isProductSelected","buyTogetherRecommender","selected","disabled","updateAvailabilityBadge","isReachedLimit","isInaccessibleVariant","availability","isLowStock","plpAvailability","stock","replace","renderingData","reachedLimitMessage","isReachedLimitMessage","hasPromotions","promotions","updateQuantity","config","quantityBlock","updateTotal","subtotal","productSetPriceBlock","priceBlock","price","getJSONByUrl","ProductSet","preselectFirstCollection","preselectRecommendations","selectRecommendationItemUrl","updateBuyTogetherItemsUrl","priceState","initEvents","initRecommendationTotal","on","updatePriceTotal","togglePriceTotals","manageAddSetToCart","getBuyTogetherItems","buyTogetherProduct","getConstructor","recommendations","getSelectedRecommendations","recommendationItems","selectedRecommendations","recommendationItem","getRecommender","getSelectedBuyTogetherItems","selectedBuyTogetherItems","getSelectedRecommendationIDs","recommendationIDs","selectedRecommendation","getProductId","setItem","childProduct","qty","getRecommendationsVariants","selectedRecommendationVariants","recommendationVariants","recommendationItemID","recommendationVariantID","priceTotal","recommendation","updateRecommendationItems","buyTogetherRecommendationID","recommendationQuantity","isBuyTogetherRecommendationsUnavailable","allRecommendations","every","hasSelectedProducts","selectedProducts","handleAvailabilityRecommendationSet","total","zeroPrice","hasAnySelectedProducts","handleSelectedProductResult","handleUpdateRecommendation","updatedProductID","recommendationID","recommendationVariant","find","handleUpdateCollectionResult","onProductSelected","recommendationsVariants","currentCollection","collectionSelector","getValue","recommenderProductID","selectedCollection","onUpdateCollection","updateRecommendation","updatedProduct","BaseColorSwatch","ColorSwatch","classesShowAll","isSelectedOptionHidden","toggleView","values","refs","some","showAll","BaseAddToCartMixin","EProductAddToCartMixin","removeProductUrl","eproductType","validateAndSubmit","doAddToCart","eVoucherData","processingRequest","textSelectOptions","textStockLimit","startProcess","addToCartBtnPrefs","amount","getEProductAmount","addToCartUrl","options","getSelectedProductOptions","childProducts","prepareChildProducts","bundledProducts","postAddProduct","stopProcess","textNetworkError","eVoucherFormErrors","eVoucherDataForm","AddToCartMixin","EProductJustAddedProductToCartMixin","justAddedRecommendationAddToCart","addJustAddedProductRecommendation","justAddedProductCart","isEProductAddedFromWishlist","subscriptionUUID","postAddProductAvailability","showMiniCart","addLinkedSubscriptionObj","params","isLinkedSubscription","subscriptionProduct","subscriptionPidObj","linkedSubscriptionId","isIdeaProduct","productModel","items","item","isIdea","showAlertOnProductAdd","accessibilityAlert","addedtocart","result","justAddedItems","justAddedItem","pop","isEVoucher","isGiftCard","isAddedFromWishList","BaseProductDetail","EProductProductDetail","otherAmountSelected","cb","customAmountInput","customAmount","pass1","shown","validate","pass2","otherAmount","otherAmountValue","parseInt","eproductAmount","updateProduct","updateBtn","doUpdateProduct","productOption","productOptions","selectedOptions","isSelectedOptionsValid","validateProductOptions","Promise","resolve","uuid","getAdditionalProductData","afterUpdateProduct","changeAmount","selectWidget","getSelectedOptions","setValue","setRequired","focus","PlusProductAddToCartMixin","addedToCartLabel","addToCartBtn","localStorageWrapper","ProductDetail","PlusProductDetail","updateAddToCartBtn","itemIds","getItem","isCustomerSubscribed","enable","addToCartLabel","scrollWindowTo","getContentByUrl","showErrorLayout","submitFormJsonWithAbort","CLICK_EVENT_ID","GTM_EVENT_NAME","GTM_LABEL_SELECTOR","REVIEWS_REF_ID","ProductDetailBase","addToCartMsgSticky","addToCartStickyHeader","ingredientsSection","descriptions","pdpSlots","storeChangedUrl","slotsUrl","handleProductAvailability","updateQuantityWithLimit","loadAnalytics","productRecommendations","isProductAvailableForHomeDelivery","setInputValue","filterInput","currentValue","updateProductView","updateRecommendations","productName","renderUnit","renderLargeItemBadge","wrapper","document","createElement","innerHTML","slot","slotRef","slotContentFromResponse","querySelector","empty","prepend","remove","updateRatings","ratingSummary","productRedirectUrl","reviews","ratings","index","starObj","position","rating","isFull","Math","ceil","isHalf","isEmpty","productRatings","selectedProductUrl","renderAvailability","availabilityClass","class","inStockMsg","productAvailabilityMsg","availabilityLabel","backInStockSubscriptionEnabled","backInStockSubscription","isEnabled","priceUnit","pricePerUOM","largeItemBadge","scrollToReviews","onPreferredStoreSelected","renderQuantities","callIfExists","availabilityObject","getProductAvailabilityObject","updateIngredients","ingredients","append","changeAttribute","changeAttributeID","requestObject","undefined","isQuantityUpdate","changeAttributeRequests","all","req","promise","afterChangeQuantity","e","indexOf","splice","quantities","currentQty","max","min","step","update","actionUrl","prepareProductSpecification","specifications","specification","sustVegan","value","FSCIcon","hazardousIcons","washcare","default","prepareProductDetailAttributes","renderProductDescriptions","descriptionsAccordion","reinit","disableHistory","updateHistoryState","updateProductQuantityView","triggerChangeAttributeEvent","currentGtmInfo","gtmInfo","setGtmInfo","renderPrice","renderPromotions","showRelatedIdeasClick","el","event","eventCategory","eventAction","eventLabel","parse","getSimilarProductsCarouselHeader","topSlotText","topSlotRef","ccStoreTopSlotAvailabilityText","ccTopSlotAvailabilityText","oosTopSlotAvailabilityText","virtualPageLoad","analyticsPageData","ProductDetailContainer","classesStandardHeader","similarProductsCarouselPlace","productDetail","widget","headerText","hideTopSlot","hideBottomSlot","showTopSlot","showBottomSlot","availableCC","topSlot","headerOnly","topSlotHeader","topSlotCarousel","standardHeader","onProductViewUpdated","IMAGE_MODE_ZOOM","IMAGE_MODE_CAROUSEL","GLOBAL_DIALOG","keyCode","freeze","SPACE","ENTER","ProductImagesBase","ProductImages","renderImages","video","images","large","imageLength","initAndShowZoom","PhotoSwipe","PhotoSwipeUI","originalWidth","originalHeight","page","pswpElement","querySelectorAll","imgCarousel","carousel","thumbnailsCarousel","thumbnails","HTMLElement","carouselImages","getCarouselImages","setAttribute","from","element","dataset","originalSrc","w","naturalWidth","h","naturalHeight","carouselSlideHTML","html","thumbnailsPerFrame","thumbnailsZoomClass","classesGlobalDialog","zoomLoop","zoomClickToCloseNonZoomable","zoomCloseElClasses","closeOnScroll","predefinedHeight","predefinedWidth","barsSizeBottom","barsSizeTop","showHideOpacity","barsSize","top","bottom","loop","history","clickToCloseNonZoomable","closeElClasses","split","isClickableElement","tagName","gallery","listen","onZoomClosed","isZoomIn","getZoomLevel","classList","toggle","currentPage","getCurrentIndex","scrollToPage","markCurrentPage","scrollIntoView","updateCurrentItem","currentIndex","template","add","currItem","zoomToOriginal","zoomTo","destZoomLevel","centerPoint","speed","easingFn","updateFn","initialZoomLevel","call","originalGalleryDestroy","destroy","destroyed","imageMode","toggleZoomState","addGlobalDialogClass","addFocusTrap","onImageCarouselPageClicked","elem","zoom","loadPhotoswipeDependencies","originalImageSize","closeZoom","close","updateCarouselMetric","updateCarouselState","getOriginalImageSize","predefinedSize","firstImage","img","Image","addEventListener","height","width","imagesContainer","elemCarouselTrack","slice","handleKeydown","_el","preventDefault","stopPropagation","onImageCarouselPageChanged","hasClass","removeGlobalDialogClass","backFocusElement","state","activeElement","body","ProductSetBase","productSetInfoUrl","textShowMore","textShowLess","textViewedProductsSm","textViewedProductsLg","textViewedProductsAll","classesAllProducts","updateSetPriceTotal","handleMoreIdeasLink","showMoreIdeas","showMoreIdeasSecondLink","print","setPriceState","zeroPriceState","productsSelected","productSetId","productSetSelectedProducts","onChangeAttribute","addSetToCart","toggleProductsView","productsContainer","BaseRecentlyViewedMixin","RecentlyViewedMixin","trackViewedItem","refinedPid","appendParamsToUrl","setSelectProduct","productType","selectProductMethod","updateCallOut","requestURL","partOfProductSet","onProductSelect","Specifications","currentProduct","getElementById","currentProductSpecifications","getAttribute","itemsSpecs","addHeadings","parseData","rows","spec","obj","renderItemSpecs","BaseAddToWishlistMixin","EProductAddToWishlistMixin","wishlistButtonClickHandler","isActive","removeProductFromWishlist","addToWishlist","addButton","addToWishlistUrl","sfccData","wishlistActionUrls","customOptionValue","optionId","optionVal","selectedValueId","getCustomOptionValue","busy","addToWishlistMsg","labelAddToWishlistMsg","handleSuccess","showWishlistMessage","unbusy","updateProductId","productId","backInStockProductId","addToCartGlobalMsg","handleUnselectedProduct","unselectedProduct","onAddAllToCart","onProductItemUpdated","RefElement","selectColor","option","selectedOption","backInStock","outOfStockLabel","updateLabel","quantitychanged","optionselected","variationselected","isCustomOption","isCustomOptionSelected","renderVariationAttributes","renderProductOptions","renderName","updateSocialLinks","updateViewFullProductURL","renderingResult","CUSTOM_OPTION_VALUE_ID","productOptionId","previousCustomOptionValue","customOptionText","val","variationAttributes","variationAttribute","selectable","attributeId","attribute","onProductLinkClick","productImages","keys","socialLinks","socialKey","dismissQty","request","abortController","abort","showAlert","productOptionsSelect","replaceState","AccessibilityFocusTrapMixin","onDestroy","zoomImage","zoomImages","zoomUrl","url","onThumbnailCarouselPageClicked","goTo","addFocusTraps","afterShowModal","getCurrentPageIndex","openZoom","removeAttribute","closeZoomKeydown","_","productDetailId","onShopCollection","ProductVideoMixin","showVideoElement","elemVideo","contentWindow","postMessage","hideVideoElement","videoThumbnail","hideVideo","setCookie","getCookie","DO_NOT_TRACKED_COOKIE","RECENTLY_VIEWED_ENTRY","RECENTLY_VIEWED_ITEMS_LIMIT","recentlyViewedTrackingAllowed","masterPid","isTrackingAllowed","Number","saveViewedItems","arr","getViewedItems","str","trackedProducts","viewedItem","unshift"],"sourceRoot":""}